From b5b460a09fa89a180a4e1b252eaba3b8b4ea4e8e Mon Sep 17 00:00:00 2001 From: Lukasz Kucharczyk Date: Wed, 29 Feb 2012 15:15:19 +0100 Subject: 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 Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/44219 Reviewed-by: Bartosz MARKOWSKI Tested-by: Bartosz MARKOWSKI --- drivers/staging/cw1200/queue.c | 8 ++------ 1 file 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; } -- cgit v1.2.3