[PATCH] winebus.sys: Do not report HID report read errors unconditionally
Aric Stewart
aric at codeweavers.com
Wed Aug 15 14:06:39 CDT 2018
On 8/15/18 1:48 PM, Kai Krakow wrote:
> Hello!
>
> 2018-08-15 20:36 GMT+02:00 Kai Krakow <kai at kaishome.de>:
>> Hello!
>>
>> 2018-08-15 19:49 GMT+02:00 Aric Stewart <aric at codeweavers.com>:
>>> On 8/15/18 1:47 AM, Kai Krakow wrote:
>>>> Discarding the message only for axis events is safe, tho. This is why
>>>> the boolean parameter was added. The other change just reduces the log
>>>> impact in case the warning would be displayed.
>>>>
>>>> The problem here is that the intermediate layer needs to translate
>>>> between HID events from Linux to full device reports for Windows, so
>>>> it just coalesces events into the report state. But it's not a queue.
>>>> Thus, having the warning may help debugging any problems left.
>>>>
>>>> But if someone with more insight into the whole driver stack sees no
>>>> more problems, I'm okay with removing the message completely.
>>>>
>>>> @Aric: What do you think?
>>>>
>>>>
>>>> Regards,
>>>> Kai
>>>>
>>>
>>> I have no strong opinion in that regard. It does seem like a lot of complexity to simply silence a message. I see no more problems with the driver stack and have no problem removing the message if Kai feels like it really is as harmless as it seems.
>>
>> I've made a v2 patch and sent it to the list. I adjusted the commit
>> message to reflect the change.
>>
>> I also tried to get completely rid of `last_report_read` with this but
>> it doesn't work because it is used in at least one place to track
>> delivery of the report just before working on the queues, it seems. I
>> wonder if this is necessary but this needs more investigation.
>
> BTW: The error also disappears by just adding the boolean flag I
> introduced. At least I did not longer see it. So it seems only the
> axis events are causing this. That could be another variant of the
> patch.
>
Ok that is great to know.
Thanks
-aric
>
>> Aric, it in `dlls/winebus.sys/main.c`:
>>
>> 547 case IOCTL_HID_READ_REPORT:
>> 548 {
>> 549 TRACE_(hid_report)("IOCTL_HID_READ_REPORT\n");
>> 550 EnterCriticalSection(&ext->report_cs);
>> 551 status = ext->vtbl->begin_report_processing(device);
>> 552 if (status != STATUS_SUCCESS)
>> 553 {
>> 554 irp->IoStatus.u.Status = status;
>> 555 LeaveCriticalSection(&ext->report_cs);
>> 556 break;
>> 557 }
>> 558 if (!ext->last_report_read)
>> ^^^ Could this also be discarded?
>> 559 {
>> 560 irp->IoStatus.u.Status = status = deliver_last_report(ext,
>> 561 irpsp->Parameters.DeviceIoControl.OutputBufferLength,
>> 562 irp->UserBuffer, &irp->IoStatus.Information);
>> 563 ext->last_report_read = TRUE;
>> 564 }
>> 565 else
>> 566 {
>> 567 InsertTailList(&ext->irp_queue,
>> &irp->Tail.Overlay.s.ListEntry);
>> 568 status = STATUS_PENDING;
>> 569 }
>> 570 LeaveCriticalSection(&ext->report_cs);
>> 571 break;
>>
>>
>> Regards,
>> Kai
More information about the wine-devel
mailing list