diff options
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00debug.c | 5 | ||||
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00queue.c | 17 |
2 files changed, 14 insertions, 8 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00debug.c b/drivers/net/wireless/rt2x00/rt2x00debug.c index 21af11a97334..bfab3b8780d6 100644 --- a/drivers/net/wireless/rt2x00/rt2x00debug.c +++ b/drivers/net/wireless/rt2x00/rt2x00debug.c | |||
| @@ -278,6 +278,7 @@ static ssize_t rt2x00debug_read_queue_stats(struct file *file, | |||
| 278 | { | 278 | { |
| 279 | struct rt2x00debug_intf *intf = file->private_data; | 279 | struct rt2x00debug_intf *intf = file->private_data; |
| 280 | struct data_queue *queue; | 280 | struct data_queue *queue; |
| 281 | unsigned long irqflags; | ||
| 281 | unsigned int lines = 1 + intf->rt2x00dev->data_queues; | 282 | unsigned int lines = 1 + intf->rt2x00dev->data_queues; |
| 282 | size_t size; | 283 | size_t size; |
| 283 | char *data; | 284 | char *data; |
| @@ -294,7 +295,7 @@ static ssize_t rt2x00debug_read_queue_stats(struct file *file, | |||
| 294 | sprintf(data, "qid\tcount\tlimit\tlength\tindex\tdone\tcrypto\n"); | 295 | sprintf(data, "qid\tcount\tlimit\tlength\tindex\tdone\tcrypto\n"); |
| 295 | 296 | ||
| 296 | queue_for_each(intf->rt2x00dev, queue) { | 297 | queue_for_each(intf->rt2x00dev, queue) { |
| 297 | spin_lock(&queue->lock); | 298 | spin_lock_irqsave(&queue->lock, irqflags); |
| 298 | 299 | ||
| 299 | temp += sprintf(temp, "%d\t%d\t%d\t%d\t%d\t%d\t%d\n", queue->qid, | 300 | temp += sprintf(temp, "%d\t%d\t%d\t%d\t%d\t%d\t%d\n", queue->qid, |
| 300 | queue->count, queue->limit, queue->length, | 301 | queue->count, queue->limit, queue->length, |
| @@ -302,7 +303,7 @@ static ssize_t rt2x00debug_read_queue_stats(struct file *file, | |||
| 302 | queue->index[Q_INDEX_DONE], | 303 | queue->index[Q_INDEX_DONE], |
| 303 | queue->index[Q_INDEX_CRYPTO]); | 304 | queue->index[Q_INDEX_CRYPTO]); |
| 304 | 305 | ||
| 305 | spin_unlock(&queue->lock); | 306 | spin_unlock_irqrestore(&queue->lock, irqflags); |
| 306 | } | 307 | } |
| 307 | 308 | ||
| 308 | size = strlen(data); | 309 | size = strlen(data); |
diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c index 9188323f067b..659e9f44c40c 100644 --- a/drivers/net/wireless/rt2x00/rt2x00queue.c +++ b/drivers/net/wireless/rt2x00/rt2x00queue.c | |||
| @@ -53,6 +53,7 @@ struct queue_entry *rt2x00queue_get_entry(struct data_queue *queue, | |||
| 53 | enum queue_index index) | 53 | enum queue_index index) |
| 54 | { | 54 | { |
| 55 | struct queue_entry *entry; | 55 | struct queue_entry *entry; |
| 56 | unsigned long irqflags; | ||
| 56 | 57 | ||
| 57 | if (unlikely(index >= Q_INDEX_MAX)) { | 58 | if (unlikely(index >= Q_INDEX_MAX)) { |
| 58 | ERROR(queue->rt2x00dev, | 59 | ERROR(queue->rt2x00dev, |
| @@ -60,11 +61,11 @@ struct queue_entry *rt2x00queue_get_entry(struct data_queue *queue, | |||
| 60 | return NULL; | 61 | return NULL; |
| 61 | } | 62 | } |
| 62 | 63 | ||
| 63 | spin_lock(&queue->lock); | 64 | spin_lock_irqsave(&queue->lock, irqflags); |
| 64 | 65 | ||
| 65 | entry = &queue->entries[queue->index[index]]; | 66 | entry = &queue->entries[queue->index[index]]; |
| 66 | 67 | ||
| 67 | spin_unlock(&queue->lock); | 68 | spin_unlock_irqrestore(&queue->lock, irqflags); |
| 68 | 69 | ||
| 69 | return entry; | 70 | return entry; |
| 70 | } | 71 | } |
| @@ -72,13 +73,15 @@ EXPORT_SYMBOL_GPL(rt2x00queue_get_entry); | |||
| 72 | 73 | ||
| 73 | void rt2x00queue_index_inc(struct data_queue *queue, enum queue_index index) | 74 | void rt2x00queue_index_inc(struct data_queue *queue, enum queue_index index) |
| 74 | { | 75 | { |
| 76 | unsigned long irqflags; | ||
| 77 | |||
| 75 | if (unlikely(index >= Q_INDEX_MAX)) { | 78 | if (unlikely(index >= Q_INDEX_MAX)) { |
| 76 | ERROR(queue->rt2x00dev, | 79 | ERROR(queue->rt2x00dev, |
| 77 | "Index change on invalid index type (%d)\n", index); | 80 | "Index change on invalid index type (%d)\n", index); |
| 78 | return; | 81 | return; |
| 79 | } | 82 | } |
| 80 | 83 | ||
| 81 | spin_lock(&queue->lock); | 84 | spin_lock_irqsave(&queue->lock, irqflags); |
| 82 | 85 | ||
| 83 | queue->index[index]++; | 86 | queue->index[index]++; |
| 84 | if (queue->index[index] >= queue->limit) | 87 | if (queue->index[index] >= queue->limit) |
| @@ -91,19 +94,21 @@ void rt2x00queue_index_inc(struct data_queue *queue, enum queue_index index) | |||
| 91 | queue->count ++; | 94 | queue->count ++; |
| 92 | } | 95 | } |
| 93 | 96 | ||
| 94 | spin_unlock(&queue->lock); | 97 | spin_unlock_irqrestore(&queue->lock, irqflags); |
| 95 | } | 98 | } |
| 96 | EXPORT_SYMBOL_GPL(rt2x00queue_index_inc); | 99 | EXPORT_SYMBOL_GPL(rt2x00queue_index_inc); |
| 97 | 100 | ||
| 98 | static void rt2x00queue_reset(struct data_queue *queue) | 101 | static void rt2x00queue_reset(struct data_queue *queue) |
| 99 | { | 102 | { |
| 100 | spin_lock(&queue->lock); | 103 | unsigned long irqflags; |
| 104 | |||
| 105 | spin_lock_irqsave(&queue->lock, irqflags); | ||
| 101 | 106 | ||
| 102 | queue->count = 0; | 107 | queue->count = 0; |
| 103 | queue->length = 0; | 108 | queue->length = 0; |
| 104 | memset(queue->index, 0, sizeof(queue->index)); | 109 | memset(queue->index, 0, sizeof(queue->index)); |
| 105 | 110 | ||
| 106 | spin_unlock(&queue->lock); | 111 | spin_unlock_irqrestore(&queue->lock, irqflags); |
| 107 | } | 112 | } |
| 108 | 113 | ||
| 109 | void rt2x00queue_init_rx(struct rt2x00_dev *rt2x00dev) | 114 | void rt2x00queue_init_rx(struct rt2x00_dev *rt2x00dev) |
