HID: ensure timely release of driver-allocated resources
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Tue, 23 May 2023 21:04:32 +0000 (14:04 -0700)
committerJiri Kosina <jkosina@suse.cz>
Fri, 26 May 2023 18:45:39 +0000 (20:45 +0200)
commit62c68e7cee332e08e625af3bca3318814086490d
tree1bf17925ab982593f3a92203c6f9ce2cfe41d88e
parent207733f9266194b3cd90ddae723a1f82eb64030b
HID: ensure timely release of driver-allocated resources

More and more drivers rely on devres to manage their resources, however
if bus' probe() and release() methods are not trivial and control some
of resources as well (for example enable or disable clocks, or attach
device to a power domain), we need to make sure that driver-allocated
resources are released immediately after driver's remove() method
returns, and not postponed until driver core gets around to releasing
resources.

In case of HID we should not try to close the report and release
associated memory until after all devres callbacks are executed. To fix
that we open a new devres group before calling driver's probe() and
explicitly release it when we return from driver's remove().

This is similar to what we did for I2C bus in commit 5b5475826c52 ("i2c:
ensure timely release of driver-allocated resources"). It is tempting to
try and move this into driver core, but actually doing so is challenging,
we need to split bus' remove() method into pre- and post-remove methods,
which would make the logic even less clear.

Reported-by: Stephen Boyd <swboyd@chromium.org>
Link: https://lore.kernel.org/r/20230505232417.1377393-1-swboyd@chromium.org
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-core.c
include/linux/hid.h