[PATCH] wcn36xx: Don't run scan_init multiple times

Bryan O'Donoghue bryan.odonoghue at linaro.org
Fri Nov 20 06:45:34 EST 2020


On 20/11/2020 08:12, Loic Poulain wrote:
> On Fri, 20 Nov 2020 at 03:13, Bryan O'Donoghue
> <bryan.odonoghue at linaro.org> wrote:
>>
>> Run scan_init only once. There's no need to run this command multiple times
>> if it has already been run once.
>>
>> The software scan algorithm can end up repeatedly calling scan_init on each
>> loop resulting in between four and eight milliseconds of lost time on each
>> callout.
>>
>> Subtract the overhead now.
> 
> This command defines parameters like the BSSID we want to inform,
> etc... So this can change depending on the scan is done while
> connected or not. 

So you're saying a scan is started and our connection state toggles from 
non-connected to connected.

Possible I guess.

> Moreover in the connected case, the scans are
> interleaved with normal data listening period, and AFAIU, init/stop
> scan allow to submit a null data packet with PS/non-PS bit when
> mac80211 leaves the operating channel to scanning another one (so that
> AP does no submit packet to it). So at first glance, this patch would
> break that, right?

I agree with that logic, and actually looking at downstream - we see 
that downstream doesn't set the notification byte before starting a scan 
on a new channel

connected:
[   63.475897] BOD WDI_SendMsg/23794 message = 0x04 version = 0x01 len 
0x00000030 // WLAN_HAL_INIT_SCAN_REQ
[   63.475902] SMD <<< 00000000: 04 00 01 00 30 00 00 00 02 00 00 00 00 
00 00 00 00 00 00 00 00 ff ff ff c8 9f 7a 21 c0 ff ff ff
[   63.475907] SMD <<< 00000020: d4 2e 7c 00 c0 ff ff ff 00 54 93 6d c0 
22 22 00
[   63.478242] SMD >>> 00000000: 05 00 00 00 0c 00 00 00 00 00 00 00

type=04 00 version=01 00 length=30 00 00 00
mode=02 00 00 00
bssid=00 000 00 00 00 00
notify=00
...

which I accept is actually a bug downstream, conceptually at any rate.

I need to ensure a scan isn't in process when we go into suspend but, 
there's no reason to skip the scan_init() command for that.

flagging != skipping

Let's forget this one.

---
bod



More information about the wcn36xx mailing list