Displaying 2 results from an estimated 2 matches for "ticket_lock_unlock_inc".
2014 Jun 28
2
[RFC PATCH v2] Implement Batched (group) ticket lock
...CKET_LOCK_LOCK_INC)) {
+ new.head = inc.head | TICKET_LOCK_LOCK_INC;
+ if (cmpxchg(&lock->tickets.head, inc.head,
+ new.head) == inc.head)
+ break;
+ }
+ cpu_relax();
+ inc.head = ACCESS_ONCE(lock->tickets.head);
+ }
+ } else {
+ add_smp(&lock->tickets.head, TICKET_LOCK_UNLOCK_INC);
+ }
+}
+
#else /* !CONFIG_PARAVIRT_SPINLOCKS */
+static inline void __ticket_lock_batch_spin(arch_spinlock_t *lock,
+ __ticket_t ticket)
+{
+}
+
static __always_inline void __ticket_lock_spinning(arch_spinlock_t *lock,
__ticket_t ticket)
{
@@ -59,6 +95,10 @@ static inline void _...
2014 Jun 28
2
[RFC PATCH v2] Implement Batched (group) ticket lock
...CKET_LOCK_LOCK_INC)) {
+ new.head = inc.head | TICKET_LOCK_LOCK_INC;
+ if (cmpxchg(&lock->tickets.head, inc.head,
+ new.head) == inc.head)
+ break;
+ }
+ cpu_relax();
+ inc.head = ACCESS_ONCE(lock->tickets.head);
+ }
+ } else {
+ add_smp(&lock->tickets.head, TICKET_LOCK_UNLOCK_INC);
+ }
+}
+
#else /* !CONFIG_PARAVIRT_SPINLOCKS */
+static inline void __ticket_lock_batch_spin(arch_spinlock_t *lock,
+ __ticket_t ticket)
+{
+}
+
static __always_inline void __ticket_lock_spinning(arch_spinlock_t *lock,
__ticket_t ticket)
{
@@ -59,6 +95,10 @@ static inline void _...