> On Tue, Oct 15, 2019 at 05:16:43PM +0200, Lorenzo Bianconi wrote:
> > Read busy counters not holding cc_lock spinlock since usb read can't be
> > performed in interrupt context. Move cc_active and cc_rx counters out of
> > cc_lock since they are not modified in interrupt context.
> > Grab cc_lock updating cur_cc_bss_rx in mt76_airtime_report and do not
> > hold rx_lock in mt76_update_survey.
> <snip>
> > Fixes: 168aea24f4bb ("mt76: mt76x02u: enable survey support")
> 
> I think problem was introduced currently in mt76 driver version
> that is not yet in mainline tree, so this is not right commit.
> On Linus' tree we still read registers outside of cc_lock section.

Hi Stanislaw,

yes, you are right. We should drop the Fixes tag. Thx

> 
> void mt76x02_update_channel(struct mt76_dev *mdev)
> {
>       ...
> 
>         busy = mt76_rr(dev, MT_CH_BUSY);
>         active = busy + mt76_rr(dev, MT_CH_IDLE);
> 
>         spin_lock_bh(&dev->mt76.cc_lock);
>         state->cc_busy += busy;
>         state->cc_active += active;
>         spin_unlock_bh(&dev->mt76.cc_lock);
> }
> 
> >     if (dev->drv->drv_flags & MT_DRV_SW_RX_AIRTIME) {
> > -           spin_lock_bh(&dev->rx_lock);
> > -           spin_lock(&dev->cc_lock);
> > +           spin_lock_bh(&dev->cc_lock);
> >             state->cc_bss_rx += dev->cur_cc_bss_rx;
> >             dev->cur_cc_bss_rx = 0;
> > -           spin_unlock(&dev->cc_lock);
> > -           spin_unlock_bh(&dev->rx_lock);
> > +           spin_unlock_bh(&dev->cc_lock);
> 
> Why dev->rx_lock was needed before and is not needed now ?

Looking at the code I think rx_lock is not needed here since cur_cc_bss_rx is
updated without holding rx_lock in mt76_airtime_report() (we need cc_lock
there).

Regards,
Lorenzo

> 
> Stanislaw

Attachment: signature.asc
Description: PGP signature

Reply via email to