rt2x00: Optimize calls to rt2x00queue_get_queue
In some cases (tx path for example) we don't need to check for non-tx queues in rt2x00queue_get_queue. Hence, introduce a new method rt2x00queue_get_tx_queue that is only valid for tx queues and use it in places where only tx queues are valid. Furthermore, this new method is quite short and as such can be inlined to avoid the function call overhead. This only converts the txdone functions of drivers that don't use an ATIM queue and the generic tx path. Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com> Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
adde5882bc
commit
11f818e0eb
|
@ -751,7 +751,7 @@ void rt2800_txdone(struct rt2x00_dev *rt2x00dev)
|
|||
if (pid >= QID_RX)
|
||||
continue;
|
||||
|
||||
queue = rt2x00queue_get_queue(rt2x00dev, pid);
|
||||
queue = rt2x00queue_get_tx_queue(rt2x00dev, pid);
|
||||
if (unlikely(!queue))
|
||||
continue;
|
||||
|
||||
|
@ -3974,7 +3974,7 @@ int rt2800_conf_tx(struct ieee80211_hw *hw, u16 queue_idx,
|
|||
if (queue_idx >= 4)
|
||||
return 0;
|
||||
|
||||
queue = rt2x00queue_get_queue(rt2x00dev, queue_idx);
|
||||
queue = rt2x00queue_get_tx_queue(rt2x00dev, queue_idx);
|
||||
|
||||
/* Update WMM TXOP register */
|
||||
offset = WMM_TXOP0_CFG + (sizeof(u32) * (!!(queue_idx & 2)));
|
||||
|
|
|
@ -736,7 +736,7 @@ static void rt2800pci_txdone(struct rt2x00_dev *rt2x00dev)
|
|||
break;
|
||||
}
|
||||
|
||||
queue = rt2x00queue_get_queue(rt2x00dev, qid);
|
||||
queue = rt2x00queue_get_tx_queue(rt2x00dev, qid);
|
||||
if (unlikely(queue == NULL)) {
|
||||
/*
|
||||
* The queue is NULL, this shouldn't happen. Stop
|
||||
|
|
|
@ -1062,6 +1062,23 @@ void rt2x00queue_map_txskb(struct queue_entry *entry);
|
|||
*/
|
||||
void rt2x00queue_unmap_skb(struct queue_entry *entry);
|
||||
|
||||
/**
|
||||
* rt2x00queue_get_tx_queue - Convert tx queue index to queue pointer
|
||||
* @rt2x00dev: Pointer to &struct rt2x00_dev.
|
||||
* @queue: rt2x00 queue index (see &enum data_queue_qid).
|
||||
*
|
||||
* Returns NULL for non tx queues.
|
||||
*/
|
||||
static inline struct data_queue *
|
||||
rt2x00queue_get_tx_queue(struct rt2x00_dev *rt2x00dev,
|
||||
const enum data_queue_qid queue)
|
||||
{
|
||||
if (queue < rt2x00dev->ops->tx_queues && rt2x00dev->tx)
|
||||
return &rt2x00dev->tx[queue];
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* rt2x00queue_get_queue - Convert queue index to queue pointer
|
||||
* @rt2x00dev: Pointer to &struct rt2x00_dev.
|
||||
|
|
|
@ -122,7 +122,7 @@ void rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
|
|||
test_bit(DRIVER_REQUIRE_ATIM_QUEUE, &rt2x00dev->flags))
|
||||
queue = rt2x00queue_get_queue(rt2x00dev, QID_ATIM);
|
||||
else
|
||||
queue = rt2x00queue_get_queue(rt2x00dev, qid);
|
||||
queue = rt2x00queue_get_tx_queue(rt2x00dev, qid);
|
||||
if (unlikely(!queue)) {
|
||||
ERROR(rt2x00dev,
|
||||
"Attempt to send packet over invalid queue %d.\n"
|
||||
|
@ -692,7 +692,7 @@ int rt2x00mac_conf_tx(struct ieee80211_hw *hw, u16 queue_idx,
|
|||
struct rt2x00_dev *rt2x00dev = hw->priv;
|
||||
struct data_queue *queue;
|
||||
|
||||
queue = rt2x00queue_get_queue(rt2x00dev, queue_idx);
|
||||
queue = rt2x00queue_get_tx_queue(rt2x00dev, queue_idx);
|
||||
if (unlikely(!queue))
|
||||
return -EINVAL;
|
||||
|
||||
|
|
|
@ -2190,7 +2190,7 @@ static void rt61pci_txdone(struct rt2x00_dev *rt2x00dev)
|
|||
* queue identication number.
|
||||
*/
|
||||
type = rt2x00_get_field32(reg, STA_CSR4_PID_TYPE);
|
||||
queue = rt2x00queue_get_queue(rt2x00dev, type);
|
||||
queue = rt2x00queue_get_tx_queue(rt2x00dev, type);
|
||||
if (unlikely(!queue))
|
||||
continue;
|
||||
|
||||
|
@ -2917,7 +2917,7 @@ static int rt61pci_conf_tx(struct ieee80211_hw *hw, u16 queue_idx,
|
|||
if (queue_idx >= 4)
|
||||
return 0;
|
||||
|
||||
queue = rt2x00queue_get_queue(rt2x00dev, queue_idx);
|
||||
queue = rt2x00queue_get_tx_queue(rt2x00dev, queue_idx);
|
||||
|
||||
/* Update WMM TXOP register */
|
||||
offset = AC_TXOP_CSR0 + (sizeof(u32) * (!!(queue_idx & 2)));
|
||||
|
|
|
@ -2247,7 +2247,7 @@ static int rt73usb_conf_tx(struct ieee80211_hw *hw, u16 queue_idx,
|
|||
if (queue_idx >= 4)
|
||||
return 0;
|
||||
|
||||
queue = rt2x00queue_get_queue(rt2x00dev, queue_idx);
|
||||
queue = rt2x00queue_get_tx_queue(rt2x00dev, queue_idx);
|
||||
|
||||
/* Update WMM TXOP register */
|
||||
offset = AC_TXOP_CSR0 + (sizeof(u32) * (!!(queue_idx & 2)));
|
||||
|
|
Loading…
Reference in New Issue