On Jun 03 2023, Mark Lord wrote: > > On 2023-06-03 08:41 AM, Jiri Kosina wrote: > > On Wed, 31 May 2023, Jiri Kosina wrote: > > > >>> If an attempt at contacting a receiver or a device fails because the > >>> receiver or device never responds, don't restart the communication, only > >>> restart it if the receiver or device answers that it's busy, as originally > >>> intended. > >>> > >>> This was the behaviour on communication timeout before commit 586e8fede795 > >>> ("HID: logitech-hidpp: Retry commands when device is busy"). > >>> > >>> This fixes some overly long waits in a critical path on boot, when > >>> checking whether the device is connected by getting its HID++ version. > >>> > >>> Signed-off-by: Bastien Nocera <hadess@xxxxxxxxxx> > >>> Suggested-by: Mark Lord <mlord@xxxxxxxxx> > >>> Fixes: 586e8fede795 ("HID: logitech-hidpp: Retry commands when device is busy") > >>> Link: https://bugzilla.kernel.org/show_bug.cgi?id=217412 > >>> --- > >>> drivers/hid/hid-logitech-hidpp.c | 1 + > >>> 1 file changed, 1 insertion(+) > >>> > >>> diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c > >>> index 0fcfd85fea0f..2246044b1639 100644 > >>> --- a/drivers/hid/hid-logitech-hidpp.c > >>> +++ b/drivers/hid/hid-logitech-hidpp.c > >>> @@ -314,6 +314,7 @@ static int hidpp_send_message_sync(struct hidpp_device *hidpp, > >>> dbg_hid("%s:timeout waiting for response\n", __func__); > >>> memset(response, 0, sizeof(struct hidpp_report)); > >>> ret = -ETIMEDOUT; > >>> + goto exit; > >>> } > >>> > >> > >> I have applied this even before getting confirmation from the reporters in > >> bugzilla, as it's the right thing to do anyway. > > > > Unfortunately it doesn't seem to cure the reported issue (while reverting > > 586e8fede79 does): https://bugzilla.kernel.org/show_bug.cgi?id=217523#c2 > > I wonder if this code could be re-worked to not even do this (waiting) > from the _probe() function? It ought to be able to throw it on a workqueue > or something, rather than stalling system boot for a minimum of 5-seconds > (or much longer as as-is). That's an option, but the fact that I can not replicate locally with the exact same hardware seems to indicate that we would just be papering over the issue. Here, I admittely have the USB receiver running through USB-C ports, and the communication never fails and I get immediate bring ups of the devices. Which means I am not hitting that path. The hidpp driver should have everything ready to delay the init in a workqueue, but the impacted users would still get a delay when they plug in the device (which is better than stalling the boot, I agree). Cheers, Benjamin