diff options
author | Lukasz Kucharczyk <lukasz.kucharczyk@tieto.com> | 2012-02-29 15:15:19 +0100 |
---|---|---|
committer | Philippe Langlais <philippe.langlais@stericsson.com> | 2012-05-22 11:06:47 +0200 |
commit | b5b460a09fa89a180a4e1b252eaba3b8b4ea4e8e (patch) | |
tree | 21b4d253c96fa73be414c5b5ec33e8e6ae68e836 | |
parent | fc17ef7d49f54874500c3b56979ff99f00cabca4 (diff) |
cw1200: fix deadlock on priv->ps_state_lock.
priv->ps_state_lock was double locked on:
cw1200_tx -> cw1200_queue_put -> cw1200_queue_post_gc ->
priv->skb_dtor ( == cw1200_skb_dtor) ->
cw1200_notify_buffered_tx
ST-Ericsson ID: 398849, 361041
ST-Ericsson FOSS-OUT ID: NA
Change-Id: I7d22591e58ac0463c691be145e7e35e0fab5535a
Signed-off-by: Lukasz Kucharczyk <lukasz.kucharczyk@tieto.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/44219
Reviewed-by: Bartosz MARKOWSKI <bartosz.markowski@tieto.com>
Tested-by: Bartosz MARKOWSKI <bartosz.markowski@tieto.com>
-rw-r--r-- | drivers/staging/cw1200/queue.c | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/drivers/staging/cw1200/queue.c b/drivers/staging/cw1200/queue.c index 8145e891570..19db63aa5bf 100644 --- a/drivers/staging/cw1200/queue.c +++ b/drivers/staging/cw1200/queue.c @@ -321,17 +321,13 @@ int cw1200_queue_put(struct cw1200_queue *queue, if (queue->num_queued >= queue->capacity) { queue->overfull = true; - __cw1200_queue_gc(queue, &gc_list, false); - if (queue->overfull) - __cw1200_queue_lock(queue); - + __cw1200_queue_lock(queue); + mod_timer(&queue->gc, jiffies); } } else { ret = -ENOENT; } spin_unlock_bh(&queue->lock); - if (unlikely(!list_empty(&gc_list))) - cw1200_queue_post_gc(stats, &gc_list); return ret; } |