Messages in this thread | | | Subject | futex code and barriers | From | Peter Zijlstra <> | Date | Tue, 29 Apr 2008 13:57:16 +0200 |
| |
Hi All,
While looking through the futex code I stumbled upon the following bit:
kernel/futex.c:
/* add_wait_queue is the barrier after __set_current_state. */ __set_current_state(TASK_INTERRUPTIBLE); add_wait_queue(&q.waiters, &wait);
However,
void add_wait_queue(wait_queue_head_t *q, wait_queue_t *wait) { unsigned long flags;
wait->flags &= ~WQ_FLAG_EXCLUSIVE; spin_lock_irqsave(&q->lock, flags); __add_wait_queue(q, wait); spin_unlock_irqrestore(&q->lock, flags); }
static inline void __add_wait_queue(wait_queue_head_t *head, wait_queue_t *new) { list_add(&new->task_list, &head->task_list); }
static inline void list_add(struct list_head *new, struct list_head *head) { __list_add(new, head, head->next); }
static inline void __list_add(struct list_head *new, struct list_head *prev, struct list_head *next) { next->prev = new; new->next = next; new->prev = prev; prev->next = new; }
Non of which implies a full barrier.
| |