]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
firewire: Simplify storing pointers in device id struct
authorUwe Kleine-König (The Capable Hub) <u.kleine-koenig@baylibre.com>
Mon, 11 May 2026 10:45:02 +0000 (12:45 +0200)
committerTakashi Sakamoto <o-takashi@sakamocchi.jp>
Mon, 11 May 2026 10:45:02 +0000 (12:45 +0200)
Technically it is fine (on all current Linux architectures) to store a
pointer in an unsigned long variable. However this needs explicit
casting which is an easy source for type mismatches.

By replacing the plain unsigned long .driver_data in struct
ieee1394_device_id by an anonymous union, most of the casting can be
dropped. There is still some implicit casting involved (between a void *
and a driver specific pointer type), but that's better than the approach
to store a pointer in an unsigned long variable as this doesn't lose the
information that the data being pointed to is const.

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.

(The comments addressing to CHERI extension are dropped by the
maintainer.)

Signed-off-by: Uwe Kleine-König (The Capable Hub) <u.kleine-koenig@baylibre.com>
Link: https://lore.kernel.org/r/e5ba45a7e386461c0b1a5001635aa008b01c2164.1778494204.git.u.kleine-koenig@baylibre.com
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
include/linux/mod_devicetable.h

index 23ff24080dfd9087edb52882c93255250eb51889..3b0c9a251a2e900aa55770471b700b9d75b07652 100644 (file)
@@ -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;
+       };
 };