Lines 1465-1470
static void ieee80211_txq_enqueue(struct ieee80211_local *local,
Link Here
|
1465 |
u32 flow_idx = fq_flow_idx(fq, skb); |
1465 |
u32 flow_idx = fq_flow_idx(fq, skb); |
1466 |
|
1466 |
|
1467 |
ieee80211_set_skb_enqueue_time(skb); |
1467 |
ieee80211_set_skb_enqueue_time(skb); |
|
|
1468 |
printk("XXXX %s: TID %u", __func__, txqi->txq.tid); |
1468 |
|
1469 |
|
1469 |
spin_lock_bh(&fq->lock); |
1470 |
spin_lock_bh(&fq->lock); |
1470 |
/* |
1471 |
/* |
Lines 3791-3803
struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw,
Link Here
|
3791 |
begin: |
3792 |
begin: |
3792 |
spin_lock(&local->queue_stop_reason_lock); |
3793 |
spin_lock(&local->queue_stop_reason_lock); |
3793 |
q_stopped = local->queue_stop_reasons[q]; |
3794 |
q_stopped = local->queue_stop_reasons[q]; |
3794 |
spin_unlock(&local->queue_stop_reason_lock); |
|
|
3795 |
|
3795 |
|
3796 |
if (unlikely(q_stopped)) { |
3796 |
if (unlikely(q_stopped)) { |
3797 |
/* mark for waking later */ |
3797 |
/* mark for waking later */ |
3798 |
set_bit(IEEE80211_TXQ_DIRTY, &txqi->flags); |
3798 |
set_bit(IEEE80211_TXQ_DIRTY, &txqi->flags); |
|
|
3799 |
printk("XXXX %s: mark TID %u dirty. Reason: %lx", |
3800 |
__func__, |
3801 |
txqi->txq.tid, |
3802 |
local->queue_stop_reasons[q]); |
3803 |
spin_unlock(&local->queue_stop_reason_lock); |
3799 |
return NULL; |
3804 |
return NULL; |
3800 |
} |
3805 |
} |
|
|
3806 |
spin_unlock(&local->queue_stop_reason_lock); |
3801 |
|
3807 |
|
3802 |
spin_lock_bh(&fq->lock); |
3808 |
spin_lock_bh(&fq->lock); |
3803 |
|
3809 |
|
Lines 4751-4756
static bool ieee80211_tx_pending_skb(struct ieee80211_local *local,
Link Here
|
4751 |
bool result; |
4757 |
bool result; |
4752 |
struct ieee80211_chanctx_conf *chanctx_conf; |
4758 |
struct ieee80211_chanctx_conf *chanctx_conf; |
4753 |
|
4759 |
|
|
|
4760 |
printk("XXXX %s: called", __func__); |
4761 |
|
4754 |
sdata = vif_to_sdata(info->control.vif); |
4762 |
sdata = vif_to_sdata(info->control.vif); |
4755 |
|
4763 |
|
4756 |
if (info->control.flags & IEEE80211_TX_INTCFL_NEED_TXPROCESSING) { |
4764 |
if (info->control.flags & IEEE80211_TX_INTCFL_NEED_TXPROCESSING) { |
Lines 4787-4792
static bool ieee80211_tx_pending_skb(struct ieee80211_local *local,
Link Here
|
4787 |
result = __ieee80211_tx(local, &skbs, sta, true); |
4795 |
result = __ieee80211_tx(local, &skbs, sta, true); |
4788 |
} |
4796 |
} |
4789 |
|
4797 |
|
|
|
4798 |
printk("XXXX %s: EXIT", __func__); |
4790 |
return result; |
4799 |
return result; |
4791 |
} |
4800 |
} |
4792 |
|
4801 |
|
Lines 4804-4809
void ieee80211_tx_pending(struct tasklet_struct *t)
Link Here
|
4804 |
rcu_read_lock(); |
4813 |
rcu_read_lock(); |
4805 |
|
4814 |
|
4806 |
spin_lock_irqsave(&local->queue_stop_reason_lock, flags); |
4815 |
spin_lock_irqsave(&local->queue_stop_reason_lock, flags); |
|
|
4816 |
|
4817 |
printk("XXXX %s: called", __func__); |
4818 |
|
4807 |
for (i = 0; i < local->hw.queues; i++) { |
4819 |
for (i = 0; i < local->hw.queues; i++) { |
4808 |
/* |
4820 |
/* |
4809 |
* If queue is stopped by something other than due to pending |
4821 |
* If queue is stopped by something other than due to pending |
Lines 4835-4840
void ieee80211_tx_pending(struct tasklet_struct *t)
Link Here
|
4835 |
spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); |
4847 |
spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); |
4836 |
|
4848 |
|
4837 |
rcu_read_unlock(); |
4849 |
rcu_read_unlock(); |
|
|
4850 |
printk("XXXX %s: EXIT", __func__); |
4838 |
} |
4851 |
} |
4839 |
|
4852 |
|
4840 |
/* functions for drivers to get certain frames */ |
4853 |
/* functions for drivers to get certain frames */ |