summaryrefslogtreecommitdiff
path: root/drivers/staging/cw1200/queue.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/cw1200/queue.c')
-rw-r--r--drivers/staging/cw1200/queue.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/staging/cw1200/queue.c b/drivers/staging/cw1200/queue.c
index c667c433766..83b294dc1da 100644
--- a/drivers/staging/cw1200/queue.c
+++ b/drivers/staging/cw1200/queue.c
@@ -116,7 +116,7 @@ int cw1200_queue_init(struct cw1200_queue *queue,
return 0;
}
-int cw1200_queue_clear(struct cw1200_queue *queue)
+int cw1200_queue_clear(struct cw1200_queue *queue, struct cw1200_common *priv)
{
int i;
struct cw1200_queue_stats *stats = queue->stats;
@@ -145,6 +145,10 @@ int cw1200_queue_clear(struct cw1200_queue *queue)
queue->link_map_cache[i] = 0;
}
spin_unlock_bh(&stats->lock);
+ if (unlikely(queue->overfull)) {
+ queue->overfull = false;
+ __cw1200_queue_unlock(queue, priv);
+ }
spin_unlock_bh(&queue->lock);
wake_up(&stats->wait_link_id_empty);
return 0;
@@ -156,9 +160,10 @@ void cw1200_queue_stats_deinit(struct cw1200_queue_stats *stats)
stats->link_map_cache = NULL;
}
-void cw1200_queue_deinit(struct cw1200_queue *queue)
+void cw1200_queue_deinit(struct cw1200_queue *queue,
+ struct cw1200_common *priv)
{
- cw1200_queue_clear(queue);
+ cw1200_queue_clear(queue, priv);
INIT_LIST_HEAD(&queue->free_pool);
kfree(queue->pool);
kfree(queue->link_map_cache);