Commit ca330c5a authored by Ming Lei's avatar Ming Lei Committed by David S. Miller

hci_usb: replace mb with smp_mb

smp_mb is enough for ordering memory operations among processors,and mb is
more expensive than smp_mb for UP machine, so replace it with smp_mb().
Signed-off-by: default avatarMing Lei <tom.leiming@gmail.com>
Acked-by: default avatarMarcel Holtmann <marcel@holtmann.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d48abfec
...@@ -70,8 +70,8 @@ static inline void _urb_queue_head(struct _urb_queue *q, struct _urb *_urb) ...@@ -70,8 +70,8 @@ static inline void _urb_queue_head(struct _urb_queue *q, struct _urb *_urb)
{ {
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&q->lock, flags); spin_lock_irqsave(&q->lock, flags);
/* _urb_unlink needs to know which spinlock to use, thus mb(). */ /* _urb_unlink needs to know which spinlock to use, thus smp_mb(). */
_urb->queue = q; mb(); list_add(&_urb->list, &q->head); _urb->queue = q; smp_mb(); list_add(&_urb->list, &q->head);
spin_unlock_irqrestore(&q->lock, flags); spin_unlock_irqrestore(&q->lock, flags);
} }
...@@ -79,8 +79,8 @@ static inline void _urb_queue_tail(struct _urb_queue *q, struct _urb *_urb) ...@@ -79,8 +79,8 @@ static inline void _urb_queue_tail(struct _urb_queue *q, struct _urb *_urb)
{ {
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&q->lock, flags); spin_lock_irqsave(&q->lock, flags);
/* _urb_unlink needs to know which spinlock to use, thus mb(). */ /* _urb_unlink needs to know which spinlock to use, thus smp_mb(). */
_urb->queue = q; mb(); list_add_tail(&_urb->list, &q->head); _urb->queue = q; smp_mb(); list_add_tail(&_urb->list, &q->head);
spin_unlock_irqrestore(&q->lock, flags); spin_unlock_irqrestore(&q->lock, flags);
} }
...@@ -89,7 +89,7 @@ static inline void _urb_unlink(struct _urb *_urb) ...@@ -89,7 +89,7 @@ static inline void _urb_unlink(struct _urb *_urb)
struct _urb_queue *q; struct _urb_queue *q;
unsigned long flags; unsigned long flags;
mb(); smp_mb();
q = _urb->queue; q = _urb->queue;
/* If q is NULL, it will die at easy-to-debug NULL pointer dereference. /* If q is NULL, it will die at easy-to-debug NULL pointer dereference.
No need to BUG(). */ No need to BUG(). */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment