[Bug 43125] Device reports coming in too fast

wine-bugs at winehq.org wine-bugs at winehq.org
Fri Jul 20 01:11:10 CDT 2018


https://bugs.winehq.org/show_bug.cgi?id=43125

Konrad Rzepecki <hannibal at astral.lodz.pl> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |hannibal at astral.lodz.pl

--- Comment #6 from Konrad Rzepecki <hannibal at astral.lodz.pl> ---
My installation is also affected by this annoying messages:
0056:err:hid_report:process_hid_report Device reports coming in too fast, last
report not read yet!

In my case this are mostly mouse events but sometimes also keyboard. Mouse
events are not device specific. I see this messages on external USB mouse but
also on internal trackpoint.

I seems appear randomly, but there are one case when they appear much more
often.

I run my wine app on remotely mouted sshfs partition. This messages appears
almost always when this app access files on this partition. Quite often there
are dozens of them in a row.

My system is Slackware-current on Lenovo T410.



Like Kai I have looked into source:

> EnterCriticalSection(&ext->report_cs);
> ...
> ...
> ...
> if (!ext->last_report_read)
>     ERR_(hid_report)("Device reports coming in too fast, last report not read yet!\n");

> memcpy(ext->last_report, report, length);
> ext->last_report_size = length;
> ext->last_report_read = FALSE;

> while ((entry = RemoveHeadList(&ext->irp_queue)) != &ext->irp_queue)
> {
>     IO_STACK_LOCATION *irpsp;
>     TRACE_(hid_report)("Processing Request\n");
>     irp = CONTAINING_RECORD(entry, IRP, Tail.Overlay.s.ListEntry);
>     irpsp = IoGetCurrentIrpStackLocation(irp);
>     irp->IoStatus.u.Status = deliver_last_report(ext,
>         irpsp->Parameters.DeviceIoControl.OutputBufferLength,
>         irp->UserBuffer, &irp->IoStatus.Information);
>     ext->last_report_read = TRUE;
>     IoCompleteRequest(irp, IO_NO_INCREMENT);
> }
> LeaveCriticalSection(&ext->report_cs);


This code is in critical section and only setting ext->last_report_read to
FALSE is after check. So other code should not affect this at all. Only
possibility I see is that this "while" is never entered so TRUE is not set. I
think this line with TRUE set should be moved outside while for two reasons.
1. If list is empty TRUE is never set however there is no report to process and
it should (this bug).
2. When there are more than one report after process first it is set to TRUE
however it should be after last.

But since all this appear in critical section i see no reason to have this
handly made "last_report_read" semaphore in code at all. However I'm not
familiar with wine code so my analyses may be wrong, but I hope it help someone
fix this bug. This messages in console application are really annoying...

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list