Search Linux Wireless

Re: [PATCH v2] mt76: refactor cc_lock locking scheme

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.

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 ?

Stanislaw



[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux