summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukasz Kucharczyk <lukasz.kucharczyk@tieto.com>2012-02-29 15:15:19 +0100
committerPhilippe Langlais <philippe.langlais@stericsson.com>2012-05-22 11:06:47 +0200
commitb5b460a09fa89a180a4e1b252eaba3b8b4ea4e8e (patch)
tree21b4d253c96fa73be414c5b5ec33e8e6ae68e836
parentfc17ef7d49f54874500c3b56979ff99f00cabca4 (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.c8
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;
}