Re: GPF in run_workqueue()/list_del_init(cwq->worklist.next) on resume (was: Re: Help needed: Resume problems in 2.6.32-rc, perhaps related to preempt_count leakage in keventd)

Marcel Holtmann
2009-11-11T20:20:26Z

Hi Linus,

> > I applied the patch and this is the result of 'dmesg | grep ERR' after 10-or-so
> > consecutive suspend-resume and hibernate-resume cycles:
> >
> > [ 129.008689] ERR!! btusb_waker+0x0/0x27 [btusb]
> > [ 166.477373] ERR!! btusb_waker+0x0/0x27 [btusb]
> > [ 203.983665] ERR!! btusb_waker+0x0/0x27 [btusb]
> > [ 241.636547] ERR!! btusb_waker+0x0/0x27 [btusb]
> >
> > which kind of confirms my previous observation that the problem was not
> > reproducible without Bluetooth.
>
> .. and that btusb thing matches my observation that only a few BT drivers
> seem to use workqueues, and btusb_disconnect() isn't doing any work
> cancel.
>
> > I'm going to test the appended patch, then.
>
> Hmm. the USB disconnect doesn't call hci_dev_put(), it calls
> hci_free_dev() and doesn't seem to call the ->destruct thing.
>
> Although again, maybe that gets called indirectly.
>
> So I'd put the cancel work in the actual disconnect routine. But maybe
> thar's just me.

see my other email, I think we have to cancel the waker in btusb_close()
to fix this. However the suspend/resume and auto-suspend has been done
mostly by Oliver and I like to see what he thinks about this.

Regards

Marcel