2008-10-25 22:30:28

by Andreas Schwab

[permalink] [raw]
Subject: [PATCH] Fix hid_device_id for cross compiling

struct hid_device_id contains hidden padding which is bad for cross
compiling. Make the padding explicit and consistent across
architectures.

Signed-off-by: Andreas Schwab <[email protected]>
---
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
index eb71b45..0e4f303 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -135,6 +135,7 @@ struct usb_device_id {

struct hid_device_id {
__u16 bus;
+ __u16 pad1;
__u32 vendor;
__u32 product;
kernel_ulong_t driver_data

--
Andreas Schwab, SuSE Labs, [email protected]
SuSE Linux Products GmbH, Maxfeldstra?e 5, 90409 N?rnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."


2008-10-30 07:24:13

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] Fix hid_device_id for cross compiling

On Sun, 26 Oct 2008 00:30:18 +0200 Andreas Schwab <[email protected]> wrote:

> struct hid_device_id contains hidden padding which is bad for cross
> compiling. Make the padding explicit and consistent across
> architectures.
>

What is "bad" about it? Can you expand a bit on the problem which is
being fixed here? Before-and-after user-visible behaviour?

Thanks.

> ---
> diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
> index eb71b45..0e4f303 100644
> --- a/include/linux/mod_devicetable.h
> +++ b/include/linux/mod_devicetable.h
> @@ -135,6 +135,7 @@ struct usb_device_id {
>
> struct hid_device_id {
> __u16 bus;
> + __u16 pad1;
> __u32 vendor;
> __u32 product;
> kernel_ulong_t driver_data

2008-10-30 09:20:05

by Andreas Schwab

[permalink] [raw]
Subject: Re: [PATCH] Fix hid_device_id for cross compiling

Andrew Morton <[email protected]> writes:

> On Sun, 26 Oct 2008 00:30:18 +0200 Andreas Schwab <[email protected]> wrote:
>
>> struct hid_device_id contains hidden padding which is bad for cross
>> compiling. Make the padding explicit and consistent across
>> architectures.
>>
>
> What is "bad" about it?

It is bad because it depends on the alignment restrictions of the
architecture. On m68k everything is aligned on a 2-byte boundary, so
this padding does not exist.

> Can you expand a bit on the problem which is being fixed here?

It's the well known cross compiling problem with modpost that has bitten
us so often before. This one is even worse, because modpost would
silently read bogus values since the struct size is the same, only the
padding moves elsewhere.

Andreas.

--
Andreas Schwab, SuSE Labs, [email protected]
SuSE Linux Products GmbH, Maxfeldstra?e 5, 90409 N?rnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."