All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nicolas Pitre <nico@fluxnic.net>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: Alexander Holler <holler@ahsoftware.de>,
	Arnd Bergmann <arnd@arndb.de>,
	linux-arm-kernel@lists.infradead.org, linux-usb@vger.kernel.org,
	gregkh@suse.de, lkml <linux-kernel@vger.kernel.org>,
	Rabin Vincent <rabin@rab.in>
Subject: Re: [PATCH] USB: ehci: use packed,aligned(4) instead of removing the packed attribute
Date: Mon, 20 Jun 2011 18:31:13 -0400 (EDT)	[thread overview]
Message-ID: <alpine.LFD.2.00.1106201824320.2142@xanadu.home> (raw)
In-Reply-To: <Pine.LNX.4.44L0.1106201700500.2113-100000@iolanthe.rowland.org>

On Mon, 20 Jun 2011, Alan Stern wrote:

> On Mon, 20 Jun 2011, Nicolas Pitre wrote:
> 
> > On Mon, 20 Jun 2011, Alan Stern wrote:
> > 
> > > On Mon, 20 Jun 2011, Alexander Holler wrote:
> > > 
> > > > I see it that way: packed is needed to be sure that at least for struct 
> > > > ehci_regs there are no padding bytes inbetween the members.
> > > 
> > > But is it _really_ needed?
> > > 
> > > > It might 
> > > > work without, but that depends on the compiler (-version, architecture, 
> > > > whatever).
> > > 
> > > Have there _ever_ been _any_ combinations of compiler, version, 
> > > architecture, whatever, that had unwanted padding bytes in this 
> > > structure?
> > 
> > This can be determined by simple code inspection.
> > 
> > If you must have struct members which are not aligned to their natural 
> > size then you need __packed.  Example:
> > 
> > struct foo {
> > 	u8  a;
> > 	u16 b;
> > 	u32 c;
> > 	u64 d;
> > };
> > 
> > Without __packed, there will be padding between a and b, and between c 
> > and d.
> 
> One byte of padding between a and b is enough.  No more is needed, and 
> the compiler would have to be pretty stupid to add anything else.

Obviously, my mistake.  I meant to make c a u16 too but failed to 
correct the example before posting.
> >  If the order of the members in this struct were reversed, then 
> > everything would be naturally aligned and no padding between members 
> > would be inserted.
> > 
> > The size of structures is normally rounded up with padding to the size 
> > of the largest basic element it contains.  Example:
> > 
> > struct foo {
> > 	u64 a;
> > 	u8 b;
> > };
> > 
> > Here sizeof(struct foo) would return 16, even if the actual content 
> > occupies 9 bytes only.  That's because the largest basic element is u64 
> > i.e. 8 bytes.  Normally this trailing padding is not an issue, unless 
> > you have an array of such a struct or if it is a member of another 
> > struct.  If you want to get rid of that padding, you need to use 
> > __packed again (which of course would make all subsequent instances of 
> > that structure in your array completely misaligned too).
> > 
> > Two odd exceptions with the old ABI on ARM:
> > 
> > - The alignment of a 64-bit value is always 4 bytes not 8.
> > 
> > - The size of all structures are always rounded up to a 4-byte boundary, 
> >   irrespective of their content.
> > 
> > If you fall into none of the above issues, then you don't need any 
> > __packed, period.
> 
> We don't fall into any of these cases, and therefore as you say, we
> don't need packed.  Arnd and I have both explained this.  So why do you 
> keep arguing that we do need it?

Please show me where I keep arguing that you need it?


Nicolas

WARNING: multiple messages have this Message-ID (diff)
From: nico@fluxnic.net (Nicolas Pitre)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] USB: ehci: use packed, aligned(4) instead of removing the packed attribute
Date: Mon, 20 Jun 2011 18:31:13 -0400 (EDT)	[thread overview]
Message-ID: <alpine.LFD.2.00.1106201824320.2142@xanadu.home> (raw)
In-Reply-To: <Pine.LNX.4.44L0.1106201700500.2113-100000@iolanthe.rowland.org>

On Mon, 20 Jun 2011, Alan Stern wrote:

> On Mon, 20 Jun 2011, Nicolas Pitre wrote:
> 
> > On Mon, 20 Jun 2011, Alan Stern wrote:
> > 
> > > On Mon, 20 Jun 2011, Alexander Holler wrote:
> > > 
> > > > I see it that way: packed is needed to be sure that at least for struct 
> > > > ehci_regs there are no padding bytes inbetween the members.
> > > 
> > > But is it _really_ needed?
> > > 
> > > > It might 
> > > > work without, but that depends on the compiler (-version, architecture, 
> > > > whatever).
> > > 
> > > Have there _ever_ been _any_ combinations of compiler, version, 
> > > architecture, whatever, that had unwanted padding bytes in this 
> > > structure?
> > 
> > This can be determined by simple code inspection.
> > 
> > If you must have struct members which are not aligned to their natural 
> > size then you need __packed.  Example:
> > 
> > struct foo {
> > 	u8  a;
> > 	u16 b;
> > 	u32 c;
> > 	u64 d;
> > };
> > 
> > Without __packed, there will be padding between a and b, and between c 
> > and d.
> 
> One byte of padding between a and b is enough.  No more is needed, and 
> the compiler would have to be pretty stupid to add anything else.

Obviously, my mistake.  I meant to make c a u16 too but failed to 
correct the example before posting.
> >  If the order of the members in this struct were reversed, then 
> > everything would be naturally aligned and no padding between members 
> > would be inserted.
> > 
> > The size of structures is normally rounded up with padding to the size 
> > of the largest basic element it contains.  Example:
> > 
> > struct foo {
> > 	u64 a;
> > 	u8 b;
> > };
> > 
> > Here sizeof(struct foo) would return 16, even if the actual content 
> > occupies 9 bytes only.  That's because the largest basic element is u64 
> > i.e. 8 bytes.  Normally this trailing padding is not an issue, unless 
> > you have an array of such a struct or if it is a member of another 
> > struct.  If you want to get rid of that padding, you need to use 
> > __packed again (which of course would make all subsequent instances of 
> > that structure in your array completely misaligned too).
> > 
> > Two odd exceptions with the old ABI on ARM:
> > 
> > - The alignment of a 64-bit value is always 4 bytes not 8.
> > 
> > - The size of all structures are always rounded up to a 4-byte boundary, 
> >   irrespective of their content.
> > 
> > If you fall into none of the above issues, then you don't need any 
> > __packed, period.
> 
> We don't fall into any of these cases, and therefore as you say, we
> don't need packed.  Arnd and I have both explained this.  So why do you 
> keep arguing that we do need it?

Please show me where I keep arguing that you need it?


Nicolas

  reply	other threads:[~2011-06-20 22:31 UTC|newest]

Thread overview: 124+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-27 14:34 [PATCH] echi: remove structure packing from ehci_def Rabin Vincent
2011-04-27 14:34 ` Rabin Vincent
2011-04-27 15:15 ` Sergei Shtylyov
2011-04-27 15:15   ` Sergei Shtylyov
2011-04-27 15:37   ` [PATCHv2] " Rabin Vincent
2011-04-27 15:37     ` Rabin Vincent
2011-06-16 16:17     ` [PATCH] USB: ehci: use packed,aligned(4) instead of removing the packed attribute Alexander Holler
2011-06-16 16:17       ` [PATCH] USB: ehci: use packed, aligned(4) " Alexander Holler
2011-06-16 17:09       ` [PATCH] USB: ehci: use packed,aligned(4) " Alan Stern
2011-06-16 17:09         ` Alan Stern
2011-06-16 17:55         ` Arnd Bergmann
2011-06-16 17:55           ` [PATCH] USB: ehci: use packed, aligned(4) " Arnd Bergmann
2011-06-16 19:25           ` [PATCH] USB: ehci: use packed,aligned(4) " Alexander Holler
2011-06-16 19:25             ` Alexander Holler
2011-06-16 19:46             ` Alan Stern
2011-06-16 19:46               ` Alan Stern
2011-06-16 20:10               ` Alexander Holler
2011-06-16 20:10                 ` Alexander Holler
2011-06-16 20:20                 ` Arnd Bergmann
2011-06-16 20:20                   ` [PATCH] USB: ehci: use packed, aligned(4) " Arnd Bergmann
2011-06-19 15:02                   ` [PATCH] USB: ehci: use packed,aligned(4) " Nicolas Pitre
2011-06-19 15:02                     ` [PATCH] USB: ehci: use packed, aligned(4) " Nicolas Pitre
2011-06-19 19:00                     ` [PATCH] USB: ehci: use packed,aligned(4) " Alan Stern
2011-06-19 19:00                       ` Alan Stern
2011-06-19 20:02                       ` Arnd Bergmann
2011-06-19 20:02                         ` [PATCH] USB: ehci: use packed, aligned(4) " Arnd Bergmann
2011-06-19 20:11                         ` [PATCH] USB: ehci: use packed,aligned(4) " Arnd Bergmann
2011-06-19 20:11                           ` [PATCH] USB: ehci: use packed, aligned(4) " Arnd Bergmann
2011-06-19 21:39                         ` [PATCH] USB: ehci: use packed,aligned(4) " Nicolas Pitre
2011-06-19 21:39                           ` [PATCH] USB: ehci: use packed, aligned(4) " Nicolas Pitre
2011-06-19 21:27                       ` [PATCH] USB: ehci: use packed,aligned(4) " Nicolas Pitre
2011-06-19 21:27                         ` [PATCH] USB: ehci: use packed, aligned(4) " Nicolas Pitre
2011-06-20 15:03                         ` [PATCH] USB: ehci: use packed,aligned(4) " Alan Stern
2011-06-20 15:03                           ` Alan Stern
2011-06-20 16:16                           ` Nicolas Pitre
2011-06-20 16:16                             ` [PATCH] USB: ehci: use packed, aligned(4) " Nicolas Pitre
2011-06-20 16:48                             ` [PATCH] USB: ehci: use packed,aligned(4) " Alan Stern
2011-06-20 16:48                               ` Alan Stern
2011-06-20 16:58                               ` Arnd Bergmann
2011-06-20 16:58                                 ` [PATCH] USB: ehci: use packed, aligned(4) " Arnd Bergmann
2011-06-20 19:02                                 ` Russell King - ARM Linux
2011-06-20 19:02                                   ` Russell King - ARM Linux
2011-06-20 19:20                                   ` Nicolas Pitre
2011-06-20 19:20                                     ` Nicolas Pitre
2011-06-20 19:29                                   ` Nicolas Pitre
2011-06-20 19:29                                     ` Nicolas Pitre
2011-06-20 17:10                               ` [PATCH] USB: ehci: use packed,aligned(4) " Nicolas Pitre
2011-06-20 17:10                                 ` [PATCH] USB: ehci: use packed, aligned(4) " Nicolas Pitre
2011-06-20 17:35                                 ` [PATCH] USB: ehci: use packed,aligned(4) " Alan Stern
2011-06-20 17:35                                   ` Alan Stern
2011-06-20 18:48                                   ` Russell King - ARM Linux
2011-06-20 18:48                                     ` Russell King - ARM Linux
2011-06-20 20:26                                     ` Arnd Bergmann
2011-06-20 20:26                                       ` [PATCH] USB: ehci: use packed, aligned(4) " Arnd Bergmann
2011-06-20 20:50                                       ` Nicolas Pitre
2011-06-20 20:50                                         ` Nicolas Pitre
2011-06-20 20:55                                       ` [PATCH] USB: ehci: use packed,aligned(4) " Russell King - ARM Linux
2011-06-20 20:55                                         ` Russell King - ARM Linux
2011-06-20 21:23                                         ` Arnd Bergmann
2011-06-20 21:23                                           ` [PATCH] USB: ehci: use packed, aligned(4) " Arnd Bergmann
2011-06-20 22:23                                           ` [PATCH] USB: ehci: use packed,aligned(4) " Nicolas Pitre
2011-06-20 22:23                                             ` [PATCH] USB: ehci: use packed, aligned(4) " Nicolas Pitre
2011-06-21 11:25                                             ` [PATCH] USB: ehci: use packed,aligned(4) " Arnd Bergmann
2011-06-21 11:25                                               ` [PATCH] USB: ehci: use packed, aligned(4) " Arnd Bergmann
2011-06-25  1:25                                               ` Nicolas Pitre
2011-06-25  8:09                                                 ` Arnd Bergmann
2011-06-28 18:51                                                   ` Nicolas Pitre
2011-06-29 10:56                                                     ` Arnd Bergmann
2011-06-20 19:14                                   ` [PATCH] USB: ehci: use packed,aligned(4) " Nicolas Pitre
2011-06-20 19:14                                     ` [PATCH] USB: ehci: use packed, aligned(4) " Nicolas Pitre
2011-06-20 19:32                                     ` Russell King - ARM Linux
2011-06-20 19:32                                       ` Russell King - ARM Linux
2011-06-20 20:14                                       ` Arnd Bergmann
2011-06-20 20:14                                         ` Arnd Bergmann
2011-06-20 20:42                                     ` [PATCH] USB: ehci: use packed,aligned(4) " Alan Stern
2011-06-20 20:42                                       ` Alan Stern
2011-06-20 22:36                                       ` Nicolas Pitre
2011-06-20 22:36                                         ` [PATCH] USB: ehci: use packed, aligned(4) " Nicolas Pitre
2011-06-21 15:06                                         ` [PATCH] USB: ehci: use packed,aligned(4) " Alan Stern
2011-06-21 15:06                                           ` Alan Stern
2011-06-20 17:39                                 ` Alexander Holler
2011-06-20 17:39                                   ` Alexander Holler
2011-06-20 18:39                                   ` Alan Stern
2011-06-20 18:39                                     ` Alan Stern
2011-06-20 18:46                                     ` Alexander Holler
2011-06-20 18:46                                       ` Alexander Holler
2011-06-20 18:57                                       ` Alan Stern
2011-06-20 18:57                                         ` Alan Stern
2011-06-20 19:56                                     ` Nicolas Pitre
2011-06-20 19:56                                       ` [PATCH] USB: ehci: use packed, aligned(4) " Nicolas Pitre
2011-06-20 21:04                                       ` [PATCH] USB: ehci: use packed,aligned(4) " Alan Stern
2011-06-20 21:04                                         ` Alan Stern
2011-06-20 22:31                                         ` Nicolas Pitre [this message]
2011-06-20 22:31                                           ` [PATCH] USB: ehci: use packed, aligned(4) " Nicolas Pitre
2011-06-21 14:58                                           ` [PATCH] USB: ehci: use packed,aligned(4) " Alan Stern
2011-06-21 14:58                                             ` Alan Stern
2011-06-21 20:41                                             ` Nicolas Pitre
2011-06-21 20:41                                               ` [PATCH] USB: ehci: use packed, aligned(4) " Nicolas Pitre
2011-06-22  6:23                                               ` [PATCH] USB: ehci: use packed,aligned(4) " Alexander Holler
2011-06-22  6:23                                                 ` Alexander Holler
2011-06-20 20:09                                     ` Arnd Bergmann
2011-06-20 20:09                                       ` [PATCH] USB: ehci: use packed, aligned(4) " Arnd Bergmann
2011-06-20 21:05                                       ` [PATCH] USB: ehci: use packed,aligned(4) " Alan Stern
2011-06-20 21:05                                         ` Alan Stern
2011-06-20 20:07                                   ` Arnd Bergmann
2011-06-20 20:07                                     ` [PATCH] USB: ehci: use packed, aligned(4) " Arnd Bergmann
2011-06-20 20:28                                     ` [PATCH] USB: ehci: use packed,aligned(4) " Nicolas Pitre
2011-06-20 20:28                                       ` [PATCH] USB: ehci: use packed, aligned(4) " Nicolas Pitre
2011-06-20 20:39                                       ` Arnd Bergmann
2011-06-20 20:39                                         ` Arnd Bergmann
2011-06-20 21:03                                         ` Nicolas Pitre
2011-06-20 21:03                                           ` Nicolas Pitre
2011-06-23  9:47                                     ` Alexander Holler
2011-06-23  9:47                                       ` Alexander Holler
2011-06-23 14:25                                       ` Alan Stern
2011-06-23 14:25                                         ` Alan Stern
2011-06-24 11:40                                         ` Alexander Holler
2011-06-24 11:40                                           ` Alexander Holler
2011-06-20 16:26                           ` [PATCH] USB: ehci: use packed,aligned(4) " Arnd Bergmann
2011-06-20 16:26                             ` [PATCH] USB: ehci: use packed, aligned(4) " Arnd Bergmann
2011-06-16 20:30                 ` [PATCH] USB: ehci: use packed,aligned(4) " Alan Stern
2011-06-16 20:30                   ` Alan Stern
2011-06-16 18:16         ` Alexander Holler
2011-06-16 18:16           ` Alexander Holler

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=alpine.LFD.2.00.1106201824320.2142@xanadu.home \
    --to=nico@fluxnic.net \
    --cc=arnd@arndb.de \
    --cc=gregkh@suse.de \
    --cc=holler@ahsoftware.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=rabin@rab.in \
    --cc=stern@rowland.harvard.edu \
    /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.