All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alan Stern <stern@rowland.harvard.edu>
To: Nicolas Pitre <nico@fluxnic.net>
Cc: Arnd Bergmann <arnd@arndb.de>,
	<linux-arm-kernel@lists.infradead.org>,
	Alexander Holler <holler@ahsoftware.de>,
	<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 12:48:32 -0400 (EDT)	[thread overview]
Message-ID: <Pine.LNX.4.44L0.1106201240240.2113-100000@iolanthe.rowland.org> (raw)
In-Reply-To: <alpine.LFD.2.00.1106201207280.2142@xanadu.home>

On Mon, 20 Jun 2011, Nicolas Pitre wrote:

> On Mon, 20 Jun 2011, Alan Stern wrote:
> 
> > On Sun, 19 Jun 2011, Nicolas Pitre wrote:
> > 
> > > > > The question is: does the structure really has to be packed?
> > > > 
> > > > What do you mean?  The structure really does need to be allocated
> > > > without padding between the fields; is that the same thing?  So do a
> > > > bunch of other structures that currently have no annotations at all.
> > > 
> > > Yes, that's the same thing.  The packed attribute tells the compiler 
> > > that you don't want it to insert padding in it as it sees fit.
> > 
> > I thought the packed attribute does more than that.  For example, on
> > some architectures doesn't it also force the compiler to use
> > byte-oriented instructions for accessing the structure's fields?
> 
> Yes, but that's a consequence of not being able to access those fields 
> in their naturally aligned position anymore.  Hence the addition of the 
> align attribute to tell the compiler that we know that the structure is 
> still aligned to a certain degree letting the compiler to avoid 
> byte-oriented instructions when possible.

Not exactly.  As far as I can tell, the ((packed)) attribute caused the 
compiler to change the structure's alignment from its natural value to 
1.  That's why the fields weren't in their naturally aligned positions 
and why removing ((packed)) fixed the problem.

> > > > > If the answer is yes in both cases, then having packed,aligned(4) is not 
> > > > > a frivolity but rather a correctness issue.
> > > > 
> > > > Why so?  Current systems work just fine without it.
> > > 
> > > Doesn't mean that because it used to work that it is strictly correct.  
> > > Wouldn't be the first time that a GCC upgrade broke the kernel because 
> > > the kernel wasn't describing things properly enough.
> > 
> > It seems most unlikely that a gcc upgrade would cause unnecessary 
> > padding to be added between a bunch of fields, all of the same size and 
> > alignment.
> 
> It is not the padding, but rather the decision to use or not to use 
> byte-oriented instructions in the abscence of explicit alignment 
> indication which appears to have changed with a recent GCC, which is the 
> source of this thread.

I thought the source of the thread had nothing to do with any recent
changes to gcc.  Maybe I was wrong.  In any case, the issue was not the
lack of an alignment indication but rather the unnecessary presence of
a ((packed)) attribute causing the compiler to forget about the natural
alignment.

To put it another way, the problem was caused by having ((packed))  
where it wasn't needed.  You want to fix the immediate fallout of the
problem by adding an alignment attribute, instead of fixing the problem
itself by removing the underlying cause.


> > On the other hand, one of the other structures you haven't been 
> > considering looks like this (with a bunch of uninteresting #define 
> > lines omitted):
> > 
> > struct ehci_qtd {
> > 	/* first part defined by EHCI spec */
> > 	__hc32			hw_next;	/* see EHCI 3.5.1 */
> > 	__hc32			hw_alt_next;    /* see EHCI 3.5.2 */
> > 	__hc32			hw_token;       /* see EHCI 3.5.3 */
> > 	__hc32			hw_buf [5];        /* see EHCI 3.5.4 */
> > 	__hc32			hw_buf_hi [5];        /* Appendix B */
> > 
> > 	/* the rest is HCD-private */
> > 	dma_addr_t		qtd_dma;		/* qtd address */
> > 	struct list_head	qtd_list;		/* sw qtd list */
> > 	struct urb		*urb;			/* qtd's urb */
> > 	size_t			length;			/* length of buffer */
> > } __attribute__ ((aligned (32)));
> > 
> > (__hc32 is an unsigned 32-bit type which can be either big-endian or 
> > little-endian, depending on the device hardware.)
> > 
> > Only the first 5 fields need to be allocated without padding; the last 
> > 4 can be laid out arbitrarily because they do not correspond to 
> > anything in the hardware.  Once again, I do not think the ((packed)) 
> > attribute is needed here -- in fact, we probably want to avoid it 
> > because dma_addr_t can be 64 bits even on 32-bit architectures.
> 
> Indeed, nothing indicates that any packed attribute is required here.

Likewise, nothing indicates any packed attribute is required for the 
structures in include/linux/usb/ehci_def.h.

Alan Stern


WARNING: multiple messages have this Message-ID (diff)
From: stern@rowland.harvard.edu (Alan Stern)
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 12:48:32 -0400 (EDT)	[thread overview]
Message-ID: <Pine.LNX.4.44L0.1106201240240.2113-100000@iolanthe.rowland.org> (raw)
In-Reply-To: <alpine.LFD.2.00.1106201207280.2142@xanadu.home>

On Mon, 20 Jun 2011, Nicolas Pitre wrote:

> On Mon, 20 Jun 2011, Alan Stern wrote:
> 
> > On Sun, 19 Jun 2011, Nicolas Pitre wrote:
> > 
> > > > > The question is: does the structure really has to be packed?
> > > > 
> > > > What do you mean?  The structure really does need to be allocated
> > > > without padding between the fields; is that the same thing?  So do a
> > > > bunch of other structures that currently have no annotations at all.
> > > 
> > > Yes, that's the same thing.  The packed attribute tells the compiler 
> > > that you don't want it to insert padding in it as it sees fit.
> > 
> > I thought the packed attribute does more than that.  For example, on
> > some architectures doesn't it also force the compiler to use
> > byte-oriented instructions for accessing the structure's fields?
> 
> Yes, but that's a consequence of not being able to access those fields 
> in their naturally aligned position anymore.  Hence the addition of the 
> align attribute to tell the compiler that we know that the structure is 
> still aligned to a certain degree letting the compiler to avoid 
> byte-oriented instructions when possible.

Not exactly.  As far as I can tell, the ((packed)) attribute caused the 
compiler to change the structure's alignment from its natural value to 
1.  That's why the fields weren't in their naturally aligned positions 
and why removing ((packed)) fixed the problem.

> > > > > If the answer is yes in both cases, then having packed,aligned(4) is not 
> > > > > a frivolity but rather a correctness issue.
> > > > 
> > > > Why so?  Current systems work just fine without it.
> > > 
> > > Doesn't mean that because it used to work that it is strictly correct.  
> > > Wouldn't be the first time that a GCC upgrade broke the kernel because 
> > > the kernel wasn't describing things properly enough.
> > 
> > It seems most unlikely that a gcc upgrade would cause unnecessary 
> > padding to be added between a bunch of fields, all of the same size and 
> > alignment.
> 
> It is not the padding, but rather the decision to use or not to use 
> byte-oriented instructions in the abscence of explicit alignment 
> indication which appears to have changed with a recent GCC, which is the 
> source of this thread.

I thought the source of the thread had nothing to do with any recent
changes to gcc.  Maybe I was wrong.  In any case, the issue was not the
lack of an alignment indication but rather the unnecessary presence of
a ((packed)) attribute causing the compiler to forget about the natural
alignment.

To put it another way, the problem was caused by having ((packed))  
where it wasn't needed.  You want to fix the immediate fallout of the
problem by adding an alignment attribute, instead of fixing the problem
itself by removing the underlying cause.


> > On the other hand, one of the other structures you haven't been 
> > considering looks like this (with a bunch of uninteresting #define 
> > lines omitted):
> > 
> > struct ehci_qtd {
> > 	/* first part defined by EHCI spec */
> > 	__hc32			hw_next;	/* see EHCI 3.5.1 */
> > 	__hc32			hw_alt_next;    /* see EHCI 3.5.2 */
> > 	__hc32			hw_token;       /* see EHCI 3.5.3 */
> > 	__hc32			hw_buf [5];        /* see EHCI 3.5.4 */
> > 	__hc32			hw_buf_hi [5];        /* Appendix B */
> > 
> > 	/* the rest is HCD-private */
> > 	dma_addr_t		qtd_dma;		/* qtd address */
> > 	struct list_head	qtd_list;		/* sw qtd list */
> > 	struct urb		*urb;			/* qtd's urb */
> > 	size_t			length;			/* length of buffer */
> > } __attribute__ ((aligned (32)));
> > 
> > (__hc32 is an unsigned 32-bit type which can be either big-endian or 
> > little-endian, depending on the device hardware.)
> > 
> > Only the first 5 fields need to be allocated without padding; the last 
> > 4 can be laid out arbitrarily because they do not correspond to 
> > anything in the hardware.  Once again, I do not think the ((packed)) 
> > attribute is needed here -- in fact, we probably want to avoid it 
> > because dma_addr_t can be 64 bits even on 32-bit architectures.
> 
> Indeed, nothing indicates that any packed attribute is required here.

Likewise, nothing indicates any packed attribute is required for the 
structures in include/linux/usb/ehci_def.h.

Alan Stern

  reply	other threads:[~2011-06-20 16:48 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                             ` Alan Stern [this message]
2011-06-20 16:48                               ` [PATCH] USB: ehci: use packed,aligned(4) " 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
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=Pine.LNX.4.44L0.1106201240240.2113-100000@iolanthe.rowland.org \
    --to=stern@rowland.harvard.edu \
    --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=nico@fluxnic.net \
    --cc=rabin@rab.in \
    /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.