rt2x00: Protect queue control with mutex
Add wrapper functions in rt2x00queue.c to start & stop queues. This control must be protected using a mutex. Queues can also be paused which will halt the flow of packets between the driver and mac80211. This doesn't require a mutex protection. Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
dbba306f2a
commit
0b7fde54f9
@@ -391,6 +391,23 @@ enum queue_index {
|
||||
Q_INDEX_MAX,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum data_queue_flags: Status flags for data queues
|
||||
*
|
||||
* @QUEUE_STARTED: The queue has been started. Fox RX queues this means the
|
||||
* device might be DMA'ing skbuffers. TX queues will accept skbuffers to
|
||||
* be transmitted and beacon queues will start beaconing the configured
|
||||
* beacons.
|
||||
* @QUEUE_PAUSED: The queue has been started but is currently paused.
|
||||
* When this bit is set, the queue has been stopped in mac80211,
|
||||
* preventing new frames to be enqueued. However, a few frames
|
||||
* might still appear shortly after the pausing...
|
||||
*/
|
||||
enum data_queue_flags {
|
||||
QUEUE_STARTED,
|
||||
QUEUE_PAUSED,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct data_queue: Data queue
|
||||
*
|
||||
@@ -398,6 +415,9 @@ enum queue_index {
|
||||
* @entries: Base address of the &struct queue_entry which are
|
||||
* part of this queue.
|
||||
* @qid: The queue identification, see &enum data_queue_qid.
|
||||
* @flags: Entry flags, see &enum queue_entry_flags.
|
||||
* @status_lock: The mutex for protecting the start/stop/flush
|
||||
* handling on this queue.
|
||||
* @index_lock: Spinlock to protect index handling. Whenever @index, @index_done or
|
||||
* @index_crypt needs to be changed this lock should be grabbed to prevent
|
||||
* index corruption due to concurrency.
|
||||
@@ -421,8 +441,11 @@ struct data_queue {
|
||||
struct queue_entry *entries;
|
||||
|
||||
enum data_queue_qid qid;
|
||||
unsigned long flags;
|
||||
|
||||
struct mutex status_lock;
|
||||
spinlock_t index_lock;
|
||||
|
||||
unsigned int count;
|
||||
unsigned short limit;
|
||||
unsigned short threshold;
|
||||
|
Reference in New Issue
Block a user