Thread (3 messages) 3 messages, 3 authors, 2017-06-14

Re: [PATCH 0/3] Proposal for making hid_have_special_driver obsolete

flat view

From: Benjamin Tissoires <hidden>
Date: 2017-06-14 12:29:47

On Jun 14 2017 or thereabouts, Bastien Nocera wrote:
quoted
On 14 Jun 2017, at 10:24, Benjamin Tissoires [off-list ref] wrote:

Hi,

As mentioned by Jiri, I found a way to have this horrible list a thing from
the past (to some extends).

The basic observation is that now, since v4.12, hid-generic should not be an
issue for any device, given that all it does is parsing the report descriptor
and starting the IRQs/URBs.

So it should not be an issue to have hid-generic handling all incoming devices
until the specialized driver comes in and replace it.

For users, that means that they will see an input node appearing and
disappearing as soon as hid-XXX.ko gets loaded.
That's way ugly, and slower, when a "multi" quirk is used.
Well, if you add a multi quirk on the boot command line, you can also
add a have_special_driver one which will be honored by hid-generic.

Note that the current list is still there and for those devices
registered in (now) hid-quirks.c, hid-generic will not bind to them
(unless the special driver is not configured in).

The hid-generic transient state will only affect devices not in
hid_have_special_driver, so then it's up to the driver maintainers to
decide whether or not they need it or not.

Cheers,
Benjamin
quoted
I have tested this on the Logitech Unifying Receiver and some Wacom devices,
and all seem happy with the situation.

Patches 1 and 2 are HID cleanup and something I wanted to put in from a long
time.

Patch 3 is the one that does the magic and where I need input from the drivers
specialists.

To make things easier to handle, I deported the logic of unbinding hid-generic
into hid-generic itself. I would think a bus_notifier would be better than
instrumenting struct hid_driver for drivers (un)registering on the bus, but
we are missing those events in bus_notifiers.
Would such events (BUS_NOTIFY_ADD_DRIVER, BUS_NOTIFY_REMOVED_DRIVER) make sense
outside of this particular case?

The second question I have is whether or not I need locks around the unbinding
magic in hid-generic. After a lot of thinking I believe I don't, but I'd prefer
having a second pair of eyes on this.

Jiri, this series is on top of a merge of your for-next and your other
for-4.12/driver-matching-fix branch. I'll resubmit a proper patch that will
apply properly to for-next as soon as for-4.12/driver-matching-fix gets merged.

Cheers,
Benjamin

Benjamin Tissoires (3):
 HID: core: move the dynamic quirks handling in core
 HID: quirks: move the list of special devices into a quirk
 HID: core: remove the absolute need of hid_have_special_driver[]

drivers/hid/Makefile            |    2 +-
drivers/hid/hid-core.c          |  918 ++---------------------------
drivers/hid/hid-generic.c       |   68 ++-
drivers/hid/hid-quirks.c        | 1236 +++++++++++++++++++++++++++++++++++++++
drivers/hid/usbhid/Makefile     |    2 +-
drivers/hid/usbhid/hid-core.c   |   10 +-
drivers/hid/usbhid/hid-quirks.c |  399 -------------
include/linux/hid.h             |   19 +-
net/bluetooth/hidp/core.c       |    2 +-
9 files changed, 1380 insertions(+), 1276 deletions(-)
create mode 100644 drivers/hid/hid-quirks.c
delete mode 100644 drivers/hid/usbhid/hid-quirks.c

-- 
2.9.4

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help