Messages in this thread | | | Date | Sun, 07 Jul 2013 09:35:57 +0200 | From | Alexander Holler <> | Subject | Re: [rtc-linux] Re: [PATCH 3/9 v2] rtc: rtc-hid-sensor-time: delay registering as rtc into a work |
| |
Am 06.07.2013 20:21, schrieb Jiri Kosina: > On Sat, 6 Jul 2013, Alexander Holler wrote: > >> I've now traced down why the above patch _really_ is needed: it's because of >> how the locking is done in the hid-subsystem. So my intuition to use a work >> was ok, but my assumption that it's because the HID device driver wasn't >> registered before probe() finished was wrong. >> >> What happens without using a work is the following (shortened a lot): >> >> hid_device_probe() // hid subsystem locks hdev->driver_input_lock >> hid_time_probe() >> devm_rtc_device_register() // wants to read the clock >> hid_rtc_read_time() // submits GET_REPORT and waits for the answer >> // (the timestamp from the clock) >> hid_input_report() >> >> And there we have something like a deadlock situation because >> hid_input_report() needs hdev->driver_input_lock to submit the report to the >> HID driver. >> >> So in short, it's currently impossible for a HID driver to read input from a >> HID device from inside it's probe function. > > Please see commit c849a6143b ("HID: Separate struct hid_device's > driver_lock into two locks"). It's done exactly in order to allow for > receiving input inside of the probe() function of the driver.
So that would have been likely my next discovery. ;)
Very nice, this will reduce the whole patch to one line.
I will test it and send an updated patch.
Thanks a lot,
Alexander Holler
| |