Search Linux Wireless

Re: bug in __ieee80211_suspend?

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

 



Hi Eliad,

On Thu, Jun 14, 2012 at 1:42 PM, Eliad Peller <eliad@xxxxxxxxxx> wrote:
> hi Vitaly,
>
> On Thu, Jun 14, 2012 at 1:48 PM, Vitaly Wool <vitalywool@xxxxxxxxx> wrote:
>> I have some doubts about the following patch: "mac80211: quiesce vif
>> before suspending". In fact, I think it introduces a hard-to-track
>> bug: when a driver signals disconnection from the AP and the device
>> goes to sleep shortly thereafter, beacon_connection_loss_work will get
>> cancelled and the actual disconnection will never happen. Shouldn't we
>> fix that or is there something I'm missing?
>>
>
> i think that flush_workqueue(local->workqueue) should handle the
> normal disconnect-before-suspend case.
> however, there's probably still some race condition when the work is
> scheduled between the flush_workqueue() and the drv_suspend() call.
> i'm not sure what is the right solution regarding it. maybe add
> another flush_workqueue() after drv_suspend?

Maybe, but aren't we increasing the probability of hitting the 3s
suspend timeout and thus crashing the system here?

> additionally, i don't think that the patch itself is the issue here,
> as without it beacon_connection_loss_work might run after mac80211 was
> already suspended, which might result in unexpected outcome as well...

Well, the patch is the issue because previously the driver could just
stall the work and now it has no control over it.

I think there are two opportunities to look into:

1. Freeze workqueues on suspend without flushing
2. Reject suspend if an important work is pending (and yes, connection
loss work *is* important!)

Thanks,
   Vitaly
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


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

  Powered by Linux