Message ID | 20171212125805.5f7813fd@canb.auug.org.au (mailing list archive) |
---|---|
State | Not Applicable |
Delegated to: | Kalle Valo |
Headers | show |
Hi Stephen, Thanks! Felix made me aware of this yesterday evening and said he's going to work out the required changes to mt76. Kalle and I will make sure to submit the trees to Dave one by one so he doesn't have to deal with it :) Unfortunately, this might take a few days to resolve. > -void mt76_wake_tx_queue(struct ieee80211_hw *hw, struct ieee80211_txq *txq) > +void mt76_wake_tx_queue(struct ieee80211_hw *hw) > { > + struct ieee80211_txq *txq; > struct mt76_dev *dev = hw->priv; > - struct mt76_txq *mtxq = (struct mt76_txq *) txq->drv_priv; > - struct mt76_queue *hwq = mtxq->hwq; > + struct mt76_txq *mtxq; > + struct mt76_queue *hwq; > > + txq = ieee80211_next_txq(hw); > + mtxq = (struct mt76_txq *) txq->drv_priv; > + hwq = mtxq->hwq; Looks pretty much right to me - perhaps for safety there should be a NULL check on txq, but OTOH when you get here it should be non-NULL. Sorry for the inconvenience, I hadn't realized mt76 went in now. johannes
Johannes Berg <johannes@sipsolutions.net> writes: > Hi Stephen, > > Thanks! > > Felix made me aware of this yesterday evening and said he's going to > work out the required changes to mt76. > > Kalle and I will make sure to submit the trees to Dave one by one so he > doesn't have to deal with it :) > > Unfortunately, this might take a few days to resolve. > >> -void mt76_wake_tx_queue(struct ieee80211_hw *hw, struct ieee80211_txq *txq) >> +void mt76_wake_tx_queue(struct ieee80211_hw *hw) >> { >> + struct ieee80211_txq *txq; >> struct mt76_dev *dev = hw->priv; >> - struct mt76_txq *mtxq = (struct mt76_txq *) txq->drv_priv; >> - struct mt76_queue *hwq = mtxq->hwq; >> + struct mt76_txq *mtxq; >> + struct mt76_queue *hwq; >> >> + txq = ieee80211_next_txq(hw); >> + mtxq = (struct mt76_txq *) txq->drv_priv; >> + hwq = mtxq->hwq; > > Looks pretty much right to me - perhaps for safety there should be a > NULL check on txq, but OTOH when you get here it should be non-NULL. Note that while this will fix compilation it probably won't work right. next_txq() is not guaranteed to return the same txq as was previously passed in the wake_tx_queue() argument, so if this is the only place the driver calls next_txq(), things are likely going to break. Rather, the driver should call next_txq() whenever it schedules queues instead of doing its own internal scheduling. > Sorry for the inconvenience, I hadn't realized mt76 went in now. Yeah, hadn't expected these streams to cross either. If Felix is looking into this that is great; let me know if you need me to do anything else on the mac80211 side. :) -Toke
Toke Høiland-Jørgensen <toke@toke.dk> writes: >> Sorry for the inconvenience, I hadn't realized mt76 went in now. > > Yeah, hadn't expected these streams to cross either. I did ask[1] if everyone are ok that I apply mt76 and I didn't get any comments, I guess I need to make more noise next time when I'm applying a new driver. [1] https://lkml.kernel.org/r/87wp22jzzb.fsf@purkki.adurom.net
Kalle Valo <kvalo@codeaurora.org> writes: > Toke Høiland-Jørgensen <toke@toke.dk> writes: > >>> Sorry for the inconvenience, I hadn't realized mt76 went in now. >> >> Yeah, hadn't expected these streams to cross either. > > I did ask[1] if everyone are ok that I apply mt76 and I didn't get any > comments, Huh, did actually see that. But was not aware that Johannes had already merged my patches; have been caught up in other stuff since netdev, so have not been paying that close attention... Sorry about that, should have pointed out the potential conflict :) > I guess I need to make more noise next time when I'm applying a new > driver. Yeah, I would like to request a marching band to my apartment next time, please. I'll send you my address off list... ;) -Toke
diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h index aa0880bbea7f..e395d3859212 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76.h +++ b/drivers/net/wireless/mediatek/mt76/mt76.h @@ -338,7 +338,7 @@ void mt76_tx(struct mt76_dev *dev, struct ieee80211_sta *sta, struct mt76_wcid *wcid, struct sk_buff *skb); 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_wake_tx_queue(struct ieee80211_hw *hw); void mt76_stop_tx_queues(struct mt76_dev *dev, struct ieee80211_sta *sta, bool send_bar); void mt76_txq_schedule(struct mt76_dev *dev, struct mt76_queue *hwq); diff --git a/drivers/net/wireless/mediatek/mt76/tx.c b/drivers/net/wireless/mediatek/mt76/tx.c index 4eef69bd8a9e..ad414af0750f 100644 --- a/drivers/net/wireless/mediatek/mt76/tx.c +++ b/drivers/net/wireless/mediatek/mt76/tx.c @@ -463,12 +463,16 @@ void mt76_stop_tx_queues(struct mt76_dev *dev, struct ieee80211_sta *sta, } EXPORT_SYMBOL_GPL(mt76_stop_tx_queues); -void mt76_wake_tx_queue(struct ieee80211_hw *hw, struct ieee80211_txq *txq) +void mt76_wake_tx_queue(struct ieee80211_hw *hw) { + struct ieee80211_txq *txq; struct mt76_dev *dev = hw->priv; - struct mt76_txq *mtxq = (struct mt76_txq *) txq->drv_priv; - struct mt76_queue *hwq = mtxq->hwq; + struct mt76_txq *mtxq; + struct mt76_queue *hwq; + txq = ieee80211_next_txq(hw); + mtxq = (struct mt76_txq *) txq->drv_priv; + hwq = mtxq->hwq; spin_lock_bh(&hwq->lock); if (list_empty(&mtxq->list)) list_add_tail(&mtxq->list, &hwq->swq);