remove qid dependency from mt76-core code
Subsystems (2)
[email protected]
maintainercover remove qid dependency from mt76-core code
From: Lorenzo Bianconi <[email protected]>
Move queue id dependency in driver specific tx queue initialization code since new chipsets rely on a different tx queue enumeration scheme. Add the possibility to specify qid in mt76_tx routine
Lorenzo Bianconi (2):
mt76: add qid parameter to mt76_tx signature
mt76: move txq qid dependency in driver specific code
drivers/net/wireless/mediatek/mt76/mac80211.c | 27 +++++++++++------- drivers/net/wireless/mediatek/mt76/mt76.h | 14 ++++++++-- .../net/wireless/mediatek/mt76/mt76x02_txrx.c | 8 +++++- .../net/wireless/mediatek/mt76/mt76x02_util.c | 2 ++ drivers/net/wireless/mediatek/mt76/tx.c | 28 +++++-------------- 5 files changed, 45 insertions(+), 34 deletions(-)
Signature · 1 line
2.20.1
[email protected]
maintainerPATCH 1/2 mt76: add qid parameter to mt76_tx signature
From: Lorenzo Bianconi <[email protected]>
Add queue id parameter to mt76_tx signature since new chipsets rely on a different hw queue enumeration
--- drivers/net/wireless/mediatek/mt76/mt76.h | 2 +- drivers/net/wireless/mediatek/mt76/mt76x02_txrx.c | 8 +++++++- drivers/net/wireless/mediatek/mt76/tx.c | 12 +++--------- 3 files changed, 11 insertions(+), 11 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76.h +1 -1
@@ -645,7 +645,7 @@ int mt76_dma_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,void mt76_rx (struct mt76_dev *dev,enum mt76_rxq_id q,struct sk_buff *skb);void mt76_tx (struct mt76_dev *dev,struct ieee80211_sta *sta, -struct mt76_wcid *wcid,struct sk_buff *skb); +struct mt76_wcid *wcid,struct sk_buff *skb,int qid);void mt76_txq_init (struct mt76_dev *dev,struct ieee80211_txq *txq);void mt76_txq_remove (struct mt76_dev *dev,struct ieee80211_txq *txq);void mt76_wake_tx_queue (struct ieee80211_hw *hw,struct ieee80211_txq *txq);
drivers/net/wireless/mediatek/mt76/mt76x02_txrx.c +7 -1
@@ -26,6 +26,7 @@ void mt76x02_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,struct mt76x02_dev *dev = hw->priv;struct ieee80211_vif *vif = info->control.vif;struct mt76_wcid *wcid = &dev->mt76.global_wcid; +int qid =skb_get_queue_mapping (skb);if (control->sta) {struct mt76x02_sta *msta;
@@ -39,7 +40,12 @@ void mt76x02_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control, wcid = &mvif->group_wcid; } -mt76_tx (&dev->mt76, control->sta, wcid, skb); +if (WARN_ON (qid >=MT_TXQ_PSD )) { + qid =MT_TXQ_BE ; +skb_set_queue_mapping (skb, qid); + } + +mt76_tx (&dev->mt76, control->sta, wcid, skb, qid); }EXPORT_SYMBOL_GPL (mt76x02_tx);
drivers/net/wireless/mediatek/mt76/tx.c +3 -9
@@ -255,19 +255,13 @@ void mt76_tx_complete_skb(struct mt76_dev *dev, struct sk_buff *skb) }EXPORT_SYMBOL_GPL (mt76_tx_complete_skb); -void -mt76_tx (struct mt76_dev *dev,struct ieee80211_sta *sta, -struct mt76_wcid *wcid,struct sk_buff *skb) +void mt76_tx (struct mt76_dev *dev,struct ieee80211_sta *sta, +struct mt76_wcid *wcid,struct sk_buff *skb, +int qid) {struct ieee80211_tx_info *info =IEEE80211_SKB_CB (skb);struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;struct mt76_queue *q; -int qid =skb_get_queue_mapping (skb); - -if (WARN_ON (qid >=MT_TXQ_PSD )) { - qid =MT_TXQ_BE ; -skb_set_queue_mapping (skb, qid); - }if (!wcid->tx_rate_set) ieee80211_get_tx_rates(info->control.vif, sta, skb,
Signature · 1 line
2.20.1
[email protected]
maintainerPATCH 2/2 mt76: move txq qid dependency in driver specific code
In reply to [email protected]From: Lorenzo Bianconi <[email protected]>
Move queue id dependency in driver specific tx queue initialization code since new chipsets rely on a different tx queue enumeration scheme Introduce mt76_sta_init_tx_queue utility routine
--- drivers/net/wireless/mediatek/mt76/mac80211.c | 27 ++++++++++++------- drivers/net/wireless/mediatek/mt76/mt76.h | 12 ++++++++- .../net/wireless/mediatek/mt76/mt76x02_util.c | 2 ++ drivers/net/wireless/mediatek/mt76/tx.c | 16 +++-------- 4 files changed, 34 insertions(+), 23 deletions(-)
drivers/net/wireless/mediatek/mt76/mac80211.c +17 -10
@@ -644,20 +644,12 @@ void mt76_rx_poll_complete(struct mt76_dev *dev, enum mt76_rxq_id q, }EXPORT_SYMBOL_GPL (mt76_rx_poll_complete); -static int -mt76_sta_add (struct mt76_dev *dev,struct ieee80211_vif *vif, -struct ieee80211_sta *sta) +void mt76_sta_init_tx_queue (struct mt76_dev *dev, +struct ieee80211_sta *sta) {struct mt76_wcid *wcid = (struct mt76_wcid *)sta->drv_priv; -int ret;int i; -mutex_lock (&dev->mutex); - - ret = dev->drv->sta_add (dev, vif, sta); -if (ret) - goto out; -for (i =0 ; i <ARRAY_SIZE (sta->txq); i++) {struct mt76_txq *mtxq;
@@ -669,6 +661,21 @@ mt76_sta_add(struct mt76_dev *dev, struct ieee80211_vif *vif,mt76_txq_init (dev, sta->txq[i]); } +} +EXPORT_SYMBOL_GPL (mt76_sta_init_tx_queue); + +static int +mt76_sta_add (struct mt76_dev *dev,struct ieee80211_vif *vif, +struct ieee80211_sta *sta) +{ +struct mt76_wcid *wcid = (struct mt76_wcid *)sta->drv_priv; +int ret; + +mutex_lock (&dev->mutex); + + ret = dev->drv->sta_add (dev, vif, sta); +if (ret) + goto out;ewma_signal_init (&wcid->rssi);rcu_assign_pointer (dev->wcid[wcid->idx], wcid);
drivers/net/wireless/mediatek/mt76/mt76.h +11 -1
@@ -639,6 +639,17 @@ static inline struct mt76_tx_cb *mt76_tx_skb_cb(struct sk_buff *skb)return ((void *)IEEE80211_SKB_CB (skb)->status.status_driver_data); } +void mt76_sta_init_tx_queue (struct mt76_dev *dev, +struct ieee80211_sta *sta); +void __mt76_txq_init (struct mt76_dev *dev,struct ieee80211_txq *txq,int qid); +static inline void +mt76_txq_init (struct mt76_dev *dev,struct ieee80211_txq *txq) +{ +int qid = txq->sta ? txq->ac :MT_TXQ_BE ; + +return __mt76_txq_init (dev, txq, qid); +} +int mt76_dma_tx_queue_skb (struct mt76_dev *dev,struct mt76_queue *q,struct sk_buff *skb,struct mt76_wcid *wcid,struct ieee80211_sta *sta);
@@ -646,7 +657,6 @@ int mt76_dma_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,void mt76_rx (struct mt76_dev *dev,enum mt76_rxq_id q,struct sk_buff *skb);void mt76_tx (struct mt76_dev *dev,struct ieee80211_sta *sta,struct mt76_wcid *wcid,struct sk_buff *skb,int qid); -void mt76_txq_init (struct mt76_dev *dev,struct ieee80211_txq *txq);void mt76_txq_remove (struct mt76_dev *dev,struct ieee80211_txq *txq);void mt76_wake_tx_queue (struct ieee80211_hw *hw,struct ieee80211_txq *txq); void mt76_stop_tx_queues(struct mt76_dev *dev, struct ieee80211_sta *sta,
drivers/net/wireless/mediatek/mt76/mt76x02_util.c +2 -0
@@ -251,6 +251,8 @@ int mt76x02_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,if (vif->type ==NL80211_IFTYPE_AP )set_bit (MT_WCID_FLAG_CHECK_PS , &msta->wcid.flags); +mt76_sta_init_tx_queue (mdev, sta); +return 0 ; }EXPORT_SYMBOL_GPL (mt76x02_sta_add);
drivers/net/wireless/mediatek/mt76/tx.c +4 -12
@@ -82,15 +82,6 @@ void mt76_tx_free(struct mt76_dev *dev) DMA_TO_DEVICE); } -static int -mt76_txq_get_qid (struct ieee80211_txq *txq) -{ -if (!txq->sta) -return MT_TXQ_BE ; - -return txq->ac; -} -static void mt76_check_agg_ssn (struct mt76_txq *mtxq,struct sk_buff *skb) {
@@ -604,16 +595,17 @@ void mt76_txq_remove(struct mt76_dev *dev, struct ieee80211_txq *txq) }EXPORT_SYMBOL_GPL (mt76_txq_remove); -void mt76_txq_init (struct mt76_dev *dev,struct ieee80211_txq *txq) +void __mt76_txq_init (struct mt76_dev *dev,struct ieee80211_txq *txq, +int qid) {struct mt76_txq *mtxq = (struct mt76_txq *) txq->drv_priv;INIT_LIST_HEAD (&mtxq->list);skb_queue_head_init (&mtxq->retry_q); - mtxq->hwq = &dev->q_tx[mt76_txq_get_qid (txq)]; + mtxq->hwq = &dev->q_tx[qid]; } -EXPORT_SYMBOL_GPL (mt76_txq_init); +EXPORT_SYMBOL_GPL (__mt76_txq_init);u8 mt76_ac_to_hwq (u8 ac) {
Signature · 1 line
2.20.1
A message that is not in the archive (sent off-list or not yet received): cover.1550336347.git.lorenzo-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
Ryder Lee
Acked-byQuoted 10 lines · On Sat, 2019-02-16 at 18:47 +0100, [email protected].…
From: Lorenzo Bianconi <[email protected]>
Move queue id dependency in driver specific tx queue initialization code since new chipsets rely on a different tx queue enumeration scheme. Add the possibility to specify qid in
mt76_txroutineLorenzo Bianconi (2):
mt76: add qid parameter tomt76_txsignature
mt76: move txq qid dependency in driver specific code
Quoted 7 lines
drivers/net/wireless/mediatek/mt76/mac80211.c | 27 +++++++++++------- drivers/net/wireless/mediatek/mt76/mt76.h | 14 ++++++++-- .../net/wireless/mediatek/mt76/mt76x02_txrx.c | 8 +++++- .../net/wireless/mediatek/mt76/mt76x02_util.c | 2 ++ drivers/net/wireless/mediatek/mt76/tx.c | 28 +++++-------------- 5 files changed, 45 insertions(+), 34 deletions(-)
Thanks. This will help us to develop the new chipsets more easily.
Felix Fietkau
maintainerQuoted 5 lines · On 2019-02-16 18:47, [email protected] wrote:
From: Lorenzo Bianconi <[email protected]>
Move queue id dependency in driver specific tx queue initialization code since new chipsets rely on a different tx queue enumeration scheme. Add the possibility to specify qid in
mt76_txroutine
I've thought about this patch set some more, and I think we should take a different approach.
If we simply map everything to the BE queue for MT7615, this breaks per-AC scheduling of intermediate tx queues. Because outstanding packet batches are currently tracked as part of the hardware queue, we can't track them separately per AC in that case.
I would suggest the following approach instead.
- add a pointer to struct mt76_queue to make it possible to set a parent queue
- add a queue identifier to struct mt76_queue_entry
- initialize only QID_AC_BE as a full hardware queue
- point all other data queues to QID_AC_BE
- use swq and swq_queued from the skb queue, all other fields (including the lock) from the parent queue
Does that make sense?
- Felix