Linux Input/HID development
 help / color / mirror / Atom feed
* [PATCH 0/9] HID: Add hid-plugin framework & convert haptic into a plugin
@ 2026-11-01 17:41 Rong Zhang
  2026-11-01 17:41 ` [PATCH 1/9] HID: haptic: Fix use-after-free when draining workqueue Rong Zhang
                   ` (8 more replies)
  0 siblings, 9 replies; 11+ messages in thread
From: Rong Zhang @ 2026-11-01 17:41 UTC (permalink / raw)
  To: Jiri Kosina, Benjamin Tissoires, Jonathan Denose, Angela Czubak,
	Henrik Rydberg, Dmitry Torokhov
  Cc: linux-input, linux-kernel, Rong Zhang

Recently I am working on adding HID LampArray support for hid-input [1].
I would like it to be a loadable plugin module. While looking through
LKML, I found hid-haptic, which is a plugin-like support code collection
that must be built into vmlinux. Therefore, I decided to develop a
generic framework for loadable plugin modules, so that it can be used by
multiple drivers.

This series aims to introduce the said framework and convert hid-haptic
into the first plugin, as it's easy to convert and perfectly
demonstrates how the framework works.

The first five patches fix pre-existing bugs in hid-haptic and
hid-multitouch that may become more frigile once the former is
converted. The last four patches refactor hid-haptic, implement the
hid-plugin framework and finish the conversion.

The plugin framework is designed for devices with additional HID usage
pages which enhance their capabilities. The support code for these usage
pages is called "HID plugin".

The corresponding HID driver calls functions provided by the plugin to
take the advantage of such enhancements. Without the framework, the HID
driver must have a linkage dependence on the plugin, which is not
optimal because the plugin is always loaded into memory even if no
device actually supports it.

Logically, the dependence should be reversed, i.e., the plugin should be
an optional component of the HID driver, which is only loaded when the
driver finds that the device needs it.

Introduce hid-plugin framework for loadable plugin modules to achieve
the said logical dependence. Each plugin has a unique hid_plugin_id when
enabled, so that HID drivers can request it accordingly. The framework
aims to be lightweight. It loads the plugin module when needed. Once
loaded (or if the plugin is builtin), requesting the plugin is just an
RCU dereference plusing an module refcount increment.

When a plugin is disabled, its id maps to HID_PLUGIN_DISABLED, and calls
to the plugin helper functions are eliminated by the compiler.

With it, hid-haptic can be easily converted into a loadable plugin
module, so that hid-multitouch only requests it on demand.

Thanks Benjamin Tissoires for the inspiration for the implementation.

[1]: I know Texudo folks are working on adding hid-lamparray to connect
it to hid-generic. I am not in favor of their design, so I decided to
write a new one. In my local tree, I've had an independent
implementation with HIDRAW sniff, autonomous mode as an LED trigger,
RGB/non-RGB LampArray support, per-key LED device support, etc. I will
submit it once this series settles.

Suggested-by: Benjamin Tissoires <bentiss@kernel.org>
Link: https://lore.kernel.org/linux-input/auypydfkhx2eg7vp764way4batdilzc35inqda3exwzs3tk3ff@oagat6g46zto/
Signed-off-by: Rong Zhang <i@rong.moe>
---
Rong Zhang (9):
      HID: haptic: Fix use-after-free when draining workqueue
      HID: haptic: Get rid of input_ff_destroy() in error paths
      HID: haptic, multitouch: Check haptic prerequisite properly
      HID: haptic, multitouch: Fix haptic device double-free and unnecessary allocation
      HID: haptic: Postpone GET_REPORT to init
      HID: haptic: Convert simple methods into static inline ones
      HID: Add hid-plugin framework for loadable plugin modules
      HID: haptic: Convert into a loadable plugin
      HID: haptic: Remove stubs in favor of inlined dead code elimination

 MAINTAINERS                  |   7 ++
 drivers/hid/Kconfig          |  21 +++-
 drivers/hid/Makefile         |   4 +-
 drivers/hid/hid-haptic.c     | 206 +++++++++++----------------------------
 drivers/hid/hid-haptic.h     | 224 +++++++++++++++++++++++++++++++------------
 drivers/hid/hid-multitouch.c |  69 ++++++++-----
 drivers/hid/hid-plugin.c     | 108 +++++++++++++++++++++
 drivers/hid/hid-plugin.h     | 145 ++++++++++++++++++++++++++++
 8 files changed, 540 insertions(+), 244 deletions(-)
---
base-commit: cbbddb6b08cc9900a87cccaa9b22bbe06aa4f50a
change-id: 9644469a-hid-haptic-kmod-4e8e420f8e5f

Thanks,
Rong


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2026-11-01 17:57 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-01 17:41 [PATCH 0/9] HID: Add hid-plugin framework & convert haptic into a plugin Rong Zhang
2026-11-01 17:41 ` [PATCH 1/9] HID: haptic: Fix use-after-free when draining workqueue Rong Zhang
2026-11-01 17:41 ` [PATCH 2/9] HID: haptic: Get rid of input_ff_destroy() in error paths Rong Zhang
2026-11-01 17:41 ` [PATCH 3/9] HID: haptic, multitouch: Check haptic prerequisite properly Rong Zhang
2026-11-01 17:57   ` sashiko-bot
2026-11-01 17:41 ` [PATCH 4/9] HID: haptic, multitouch: Fix haptic device double-free and unnecessary allocation Rong Zhang
2026-11-01 17:41 ` [PATCH 5/9] HID: haptic: Postpone GET_REPORT to init Rong Zhang
2026-11-01 17:41 ` [PATCH 6/9] HID: haptic: Convert simple methods into static inline ones Rong Zhang
2026-11-01 17:41 ` [PATCH 7/9] HID: Add hid-plugin framework for loadable plugin modules Rong Zhang
2026-11-01 17:41 ` [PATCH 8/9] HID: haptic: Convert into a loadable plugin Rong Zhang
2026-11-01 17:41 ` [PATCH 9/9] HID: haptic: Remove stubs in favor of inlined dead code elimination Rong Zhang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox