On Fri, 2007-08-03 at 08:08 +1000, Rusty Russell wrote: > On Thu, 2007-08-02 at 09:25 -0700, Luck, Tony wrote: > > > Adrian Bunk: scripts/mod/file2alias.c is compiled with HOSTCC and ensures that > > > kernel_ulong_t is correct, but it can't cope with different padding on > > > different architectures. > > > > Surely this is the root cause ... you can't expect that the alignment > > rules of HOSTCC to make any sense for an arbitraty target. > > > > > +#define FILLUP_LEN 7 /* dirty fix for i386 -> 64bit cross-compilation */ > > > > > > struct acpi_device_id { > > > __u8 id[ACPI_ID_LEN]; > > > + __u8 dummy[FILLUP_LEN]; > > > kernel_ulong_t driver_data; > > > }; > > > > What's so special about this structure that we get an error? > > It's in mod_devicetable.h: see comment at top of that file. These > structures serve dual purpose: to describe the capabilities of the > driver to the kernel probing functions, *and* to export them to > userspace tables. The former purpose is why there's a data pointer in > there. > > scripts/mod/file2alias is the program that reads this: although it can > be altered to parse 32-vs-64, Adrian's fix is the simplest. Oops, this will cause a lot build warnings, as this struct gets initialized like that: .. {"PNP0C0A", 0}, .. at a lot places. It would be better to bump up the id itself like the attached patch does... Thanks, Thomas ---------------------- Cross-compilation between e.g. i386 -> 64bit could break -> work around it Adrian Bunk: scripts/mod/file2alias.c is compiled with HOSTCC and ensures that kernel_ulong_t is correct, but it can't cope with different padding on different architectures. Signed-off-by: Thomas Renninger <trenn@xxxxxxx> --- include/linux/mod_devicetable.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) Index: linux-2.6.23-rc3/include/linux/mod_devicetable.h =================================================================== --- linux-2.6.23-rc3.orig/include/linux/mod_devicetable.h +++ linux-2.6.23-rc3/include/linux/mod_devicetable.h @@ -159,7 +159,8 @@ struct ap_device_id { #define AP_DEVICE_ID_MATCH_DEVICE_TYPE 0x01 -#define ACPI_ID_LEN 9 +#define ACPI_ID_LEN 16 /* only 9 bytes needed here, 16 bytes are used */ + /* to workaround crosscompile issues */ struct acpi_device_id { __u8 id[ACPI_ID_LEN]; - To unsubscribe from this list: send the line "unsubscribe linux-ia64" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |