Re: [PATCH] usb: cdc-wdm: close race between read and workqueue

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

 



On 15.04.24 08:47, Bjørn Mork wrote:

I'm not sure I understand what problem that patch is supposed to fix.
Which means that everything I write could be completely wrong...

wdm_in_callback() can schedule service_outs_intr(), which can call
service_outstanding_interrupt(), which sets WDM_RESPONDING and submits
desc->response.
That is not problematic in itself, but wdm_read() also calls
service_outstanding_interrupt(), which can lead to teh same URB
being submitted twice (which caused me to write the patch)
or, apparently, in this case, it leads to discarding a buffer
by resubmitting and completing an URB.

But to me it looks like the described issue is exactly what you should
expect if that change ever triggers.  I believe we must resubmit the

Yes, it does.

urb from service_outstanding_interrupt(). That's why it was added. See
the explanation Robert wrote when introducing it:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/usb/class/cdc-wdm.c?id=c1da59dad0ebd3f9bd238f3fff82b1f7ffda7829

Well, the explanation is correct in that we must read
data available. However, if the RESPONDING flag is set
and the URB submitted, we are already doing so.

As for the XMM behaviour: it's been a long time since I tried any of
those, but AFAIR one the major differences compared to Qualcomm was the
strict queue handling in the firmware.  This caused a number of problems
where the cdc-wdm driver wanted to skip a message for some reason.  So
I'm not surprised that a bug like this is triggered by one of those
modems. That's probably the only thing they are good for :-)

I am not sure where exactly the issue lies here. Suggestions for
debugging?

	Regards
		Oliver





[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux