[PATCH v1 1/2] firewire: Simplify storing pointers in device id struct
Uwe Kleine-König (The Capable Hub) <[email protected]> Sun, 19 Apr 2026 08:42:13 +0200
| Newsgroups | gmane.linux.sound,gmane.linux.kernel.firewire.devel |
|---|---|
| Message-ID | <9a94a6d8977f9595bc374931f0e53e68a884b4b2.1776579304.git.u.kleine-koenig@baylibre.com> |
On all current Linux architectures sizeof(long) == sizeof(void *) and this is used a lot through the kernel. For example it enables the usual practice to store pointers in ieee1394_device_id's .driver_data member. This works fine, but involves casting and thus isn't type-safe. Additionally with the CHERI architecture extension there are machines with sizeof(void *) > sizeof(long) for with the traditional approach of storing a pointer in .driver_data doesn't work. By replacing the plain unsigned long .driver_data by an anonymous union, most of the casting can be dropped and it yields a working solution for CHERI. All users of struct ieee1394_device_id are initialized in a way that is compatible with the new definition, so no adaptions are needed there. Signed-off-by: Uwe Kleine-König (The Capable Hub) <[email protected]> --- include/linux/mod_devicetable.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index 5b1725fe9707..2ee6b66ca9a2 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h @@ -61,7 +61,10 @@ struct ieee1394_device_id { __u32 model_id; __u32 specifier_id; __u32 version; - kernel_ulong_t driver_data; + union { + kernel_ulong_t driver_data; + const void *driver_data_ptr; + }; }; -- 2.47.3