From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: "Bjørn Mork" <bjorn@mork.no>,
"USB list" <linux-usb@vger.kernel.org>,
linux-kernel@vger.kernel.org,
Linux-Next <linux-next@vger.kernel.org>,
linux-kbuild <linux-kbuild@vger.kernel.org>,
Linux/m68k <linux-m68k@vger.kernel.org>
Subject: Re: [-next] FATAL: drivers/gpu/drm/udl/udl: sizeof(struct usb_device_id)=24 is not a modulo of the size of section __mod_usb_device_table=44.
Date: Fri, 15 Jun 2012 16:12:20 -0700 [thread overview]
Message-ID: <20120615231220.GC8205@kroah.com> (raw)
In-Reply-To: <CAMuHMdUj6tAcWhkSkV43Kw3-2-3+JzgP6W=2w3fjL2KBfRh9ZQ@mail.gmail.com>
On Fri, Jun 15, 2012 at 11:02:55PM +0200, Geert Uytterhoeven wrote:
> Hi Greg,
>
> On Fri, Jun 15, 2012 at 10:10 PM, Greg Kroah-Hartman
> <gregkh@linuxfoundation.org> wrote:
> > On Fri, Jun 15, 2012 at 07:42:08PM +0200, Geert Uytterhoeven wrote:
> >> commit 81df2d594340dcb6d1a02191976be88a1ca8120c ("USB: allow match
> >> on bInterfaceNumber") added a byte to the interior of struct usb_device_id,
> >> enabling implicit padding:
> >>
> >> --- a/include/linux/mod_devicetable.h
> >> +++ b/include/linux/mod_devicetable.h
> >> @@ -115,6 +118,9 @@ struct usb_device_id {
> >> __u8 bInterfaceSubClass;
> >> __u8 bInterfaceProtocol;
> >>
> >> + /* Used for vendor-specific interface matches */
> >> + __u8 bInterfaceNumber;
> >> +
> >> /* not matched against */
> >> kernel_ulong_t driver_info;
> >> };
> >>
> >> On m68k, this causes failures like:
> >>
> >> | FATAL: drivers/gpu/drm/udl/udl: sizeof(struct usb_device_id)=24 is
> >> not a modulo of the size of section __mod_usb_device_table=44.
> >> | Fix definition of struct usb_device_id in mod_devicetable.h
> >>
> >> M68k is special in that it uses 2 for the alignment of 32-bit entities, hence
> >> sizeof(struct usb_device_id) = 22.
> >>
> >> However, when cross-compiling on amd64, sizeof(struct usb_device_id) = 24
> >> in scripts/mod/file2alias.c.
> >
> > I don't really understand, what is the problem here? The fact that we
> > added one byte to the structure? And now something breaks? How?
> >
> > What can we do to resolve it?
>
> As "kernel_ulong_t driver_info" is no longer naturally aligned, the
> compiler will
> add implicit padding. But the padding depends on the architecture.
Ah, so we were "lucky" before, nice.
> It can be fixed by adding explicit padding. Probably it should be padded by
> 7 bytes (not 3), as kernel_ulong_t may require 8-byte alignment on some 64-bit
> platforms. Or by an explicit alignment attribute.
>
> See also
> * commit 8175fe2dda1c93a9c596921c8ed4a0b4baccdefe ("HID: fix
> hid_device_id for cross compiling")
> * commit 7492d4a416d68ab4bd254b36ffcc4e0138daa8ff ("sdio: fix module
> device table definition for m68k")
> * commit 9e2d3cd34a159948dc753a14573e16bffc04dba8 ("[PATCH]
> mod_devicetable.h fixes")
So would the patch below fix this? It should force alignment of the
driver_data field, which is all you want here, right?
> Still, there's a bug in file2alias (which is compiled by the host
> compiler), in that
> it may use different padding than the target platform when cross-compiling.
That's not good, but outside of this specific issue, right? Have we
just been fortunate it hasn't really hit us yet?
thanks,
greg k-h
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
index 7771d45..6955045 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -122,7 +122,8 @@ struct usb_device_id {
__u8 bInterfaceNumber;
/* not matched against */
- kernel_ulong_t driver_info;
+ kernel_ulong_t driver_info
+ __attribute__((aligned(sizeof(kernel_ulong_t))));
};
/* Some useful macros to use to create struct usb_device_id */
WARNING: multiple messages have this Message-ID (diff)
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: "Bjørn Mork" <bjorn@mork.no>,
"USB list" <linux-usb@vger.kernel.org>,
linux-kernel@vger.kernel.org,
Linux-Next <linux-next@vger.kernel.org>,
linux-kbuild <linux-kbuild@vger.kernel.org>,
Linux/m68k <linux-m68k@vger.kernel.org>
Subject: Re: [-next] FATAL: drivers/gpu/drm/udl/udl: sizeof(struct usb_device_id)=24 is not a modulo of the size of section __mod_usb_device_table=44.
Date: Fri, 15 Jun 2012 16:12:20 -0700 [thread overview]
Message-ID: <20120615231220.GC8205@kroah.com> (raw)
In-Reply-To: <CAMuHMdUj6tAcWhkSkV43Kw3-2-3+JzgP6W=2w3fjL2KBfRh9ZQ@mail.gmail.com>
On Fri, Jun 15, 2012 at 11:02:55PM +0200, Geert Uytterhoeven wrote:
> Hi Greg,
>
> On Fri, Jun 15, 2012 at 10:10 PM, Greg Kroah-Hartman
> <gregkh@linuxfoundation.org> wrote:
> > On Fri, Jun 15, 2012 at 07:42:08PM +0200, Geert Uytterhoeven wrote:
> >> commit 81df2d594340dcb6d1a02191976be88a1ca8120c ("USB: allow match
> >> on bInterfaceNumber") added a byte to the interior of struct usb_device_id,
> >> enabling implicit padding:
> >>
> >> --- a/include/linux/mod_devicetable.h
> >> +++ b/include/linux/mod_devicetable.h
> >> @@ -115,6 +118,9 @@ struct usb_device_id {
> >> __u8 bInterfaceSubClass;
> >> __u8 bInterfaceProtocol;
> >>
> >> + /* Used for vendor-specific interface matches */
> >> + __u8 bInterfaceNumber;
> >> +
> >> /* not matched against */
> >> kernel_ulong_t driver_info;
> >> };
> >>
> >> On m68k, this causes failures like:
> >>
> >> | FATAL: drivers/gpu/drm/udl/udl: sizeof(struct usb_device_id)=24 is
> >> not a modulo of the size of section __mod_usb_device_table=44.
> >> | Fix definition of struct usb_device_id in mod_devicetable.h
> >>
> >> M68k is special in that it uses 2 for the alignment of 32-bit entities, hence
> >> sizeof(struct usb_device_id) = 22.
> >>
> >> However, when cross-compiling on amd64, sizeof(struct usb_device_id) = 24
> >> in scripts/mod/file2alias.c.
> >
> > I don't really understand, what is the problem here? The fact that we
> > added one byte to the structure? And now something breaks? How?
> >
> > What can we do to resolve it?
>
> As "kernel_ulong_t driver_info" is no longer naturally aligned, the
> compiler will
> add implicit padding. But the padding depends on the architecture.
Ah, so we were "lucky" before, nice.
> It can be fixed by adding explicit padding. Probably it should be padded by
> 7 bytes (not 3), as kernel_ulong_t may require 8-byte alignment on some 64-bit
> platforms. Or by an explicit alignment attribute.
>
> See also
> * commit 8175fe2dda1c93a9c596921c8ed4a0b4baccdefe ("HID: fix
> hid_device_id for cross compiling")
> * commit 7492d4a416d68ab4bd254b36ffcc4e0138daa8ff ("sdio: fix module
> device table definition for m68k")
> * commit 9e2d3cd34a159948dc753a14573e16bffc04dba8 ("[PATCH]
> mod_devicetable.h fixes")
So would the patch below fix this? It should force alignment of the
driver_data field, which is all you want here, right?
> Still, there's a bug in file2alias (which is compiled by the host
> compiler), in that
> it may use different padding than the target platform when cross-compiling.
That's not good, but outside of this specific issue, right? Have we
just been fortunate it hasn't really hit us yet?
thanks,
greg k-h
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
index 7771d45..6955045 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -122,7 +122,8 @@ struct usb_device_id {
__u8 bInterfaceNumber;
/* not matched against */
- kernel_ulong_t driver_info;
+ kernel_ulong_t driver_info
+ __attribute__((aligned(sizeof(kernel_ulong_t))));
};
/* Some useful macros to use to create struct usb_device_id */
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2012-06-15 23:12 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-15 17:42 [-next] FATAL: drivers/gpu/drm/udl/udl: sizeof(struct usb_device_id)=24 is not a modulo of the size of section __mod_usb_device_table=44 Geert Uytterhoeven
2012-06-15 20:10 ` Greg Kroah-Hartman
2012-06-15 21:02 ` Geert Uytterhoeven
2012-06-15 21:02 ` Geert Uytterhoeven
2012-06-15 23:12 ` Greg Kroah-Hartman [this message]
2012-06-15 23:12 ` Greg Kroah-Hartman
2012-06-16 13:23 ` Bjørn Mork
2012-06-16 15:43 ` Andreas Schwab
2012-06-16 15:43 ` Andreas Schwab
2012-06-17 14:00 ` Bjørn Mork
2012-06-17 14:00 ` Bjørn Mork
2012-06-17 15:42 ` Andreas Schwab
2012-06-25 12:22 ` [PATCH] mod/file2alias: make modalias generation safe for cross compiling Andreas Schwab
2012-06-25 20:32 ` Geert Uytterhoeven
2012-06-25 20:32 ` Geert Uytterhoeven
2012-06-25 21:43 ` Andreas Schwab
2012-06-25 21:43 ` Andreas Schwab
2012-06-26 5:00 ` Sam Ravnborg
2012-06-26 13:27 ` [PATCH v2] " Andreas Schwab
2012-06-16 18:33 ` [-next] FATAL: drivers/gpu/drm/udl/udl: sizeof(struct usb_device_id)=24 is not a modulo of the size of section __mod_usb_device_table=44 Philippe De Muyter
2012-06-16 19:11 ` Greg Kroah-Hartman
2012-06-16 19:30 ` Geert Uytterhoeven
2012-06-16 19:30 ` Geert Uytterhoeven
2012-06-16 18:51 ` Geert Uytterhoeven
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120615231220.GC8205@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=bjorn@mork.no \
--cc=geert@linux-m68k.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-m68k@vger.kernel.org \
--cc=linux-next@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.