linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: James Hogan <james.hogan@imgtec.com>
To: Chen Gang <gang.chen.5i5j@gmail.com>
Cc: Dan Carpenter <dan.carpenter@oracle.com>,
	<devel@driverdev.osuosl.org>, <andreas.dilger@intel.com>,
	Greg KH <gregkh@linuxfoundation.org>, <bergwolf@gmail.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	<oleg.drokin@intel.com>, <jacques-charles.lafoucriere@cea.fr>,
	<jinshan.xiong@intel.com>, <linux-metag@vger.kernel.org>
Subject: Re: [PATCH] drivers: staging: lustre: lustre: include: add "__attribute__((packed))" for the related union
Date: Mon, 20 Jan 2014 11:56:47 +0000	[thread overview]
Message-ID: <52DD0EFF.2010305@imgtec.com> (raw)
In-Reply-To: <52DBA3D4.3090308@gmail.com>

Hi Chen,

On 19/01/14 10:07, Chen Gang wrote:
> BTW: this patch is related with another patch which is discussing (so I
> have cc that patch to you and Greg too): "if we could sure that it is a
> compiler's feature issue, we will skip this patch".

If you're referring to the #pragma pack portability issue then this
issue is unrelated since it doesn't use #pragma pack.

The issue is *not* that the compiler is defectively failing to pack
nested structs. Doing that would be utterly broken since it would change
the layout of the same struct depending on where it is placed in the
program, Consider this example (which uses a nested struct rather than
union to demonstrate the point):

struct a {
	struct b {
		unsigned int x;
		unsigned short y;
	} x;
	unsigned short y;
} __packed;

Both ABIs behave the same here:

Arch	sizeof(struct b)	sizeof(struct a)
x86_64	8			10
metag	8			10

If struct b is made __packed, again both ABIs behave differently in the
same way:

Arch	sizeof(struct b)	sizeof(struct a)
x86_64	6			8
metag	6			8

The issue is that C compiler ABIs may (and unfortunately metag ABI does)
pack structs and unions to at least 4 bytes, even if no members of the
struct or union are that large, which means that the nested struct/union
should be __packed too to portably ensure it's the expected size.

Cheers
James


  reply	other threads:[~2014-01-20 11:56 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-18  9:50 [PATCH] drivers: staging: lustre: lustre: include: add "__attribute__((packed))" for the related union Chen Gang
2014-01-18 10:05 ` Dan Carpenter
2014-01-18 10:26   ` Chen Gang
2014-01-18 14:24     ` Dan Carpenter
2014-01-19 10:07       ` Chen Gang
2014-01-20 11:56         ` James Hogan [this message]
2014-01-20 12:30           ` Dan Carpenter
2014-01-20 12:37             ` James Hogan
2014-01-20 12:56               ` Dan Carpenter
2014-01-20 13:01                 ` Dan Carpenter
2014-01-20 13:38                   ` James Hogan
2014-01-20 21:13                 ` Dan Carpenter
2014-01-21 10:36                   ` James Hogan
2014-01-25 11:55                     ` Chen Gang
2014-02-01 13:57                       ` Chen Gang
2014-02-03  8:58                         ` Dan Carpenter
2014-02-03 10:03                           ` Chen Gang
2014-02-03 11:35                             ` Chen Gang
2014-02-03 10:05                           ` David Laight
2014-02-03 10:22                             ` James Hogan
2014-02-03 10:30                               ` Chen Gang
2014-02-03 10:35                               ` David Laight
2014-02-03 11:02                                 ` James Hogan
2014-02-03 11:54                                   ` David Laight
2014-02-03 10:25                             ` Chen Gang

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=52DD0EFF.2010305@imgtec.com \
    --to=james.hogan@imgtec.com \
    --cc=andreas.dilger@intel.com \
    --cc=bergwolf@gmail.com \
    --cc=dan.carpenter@oracle.com \
    --cc=devel@driverdev.osuosl.org \
    --cc=gang.chen.5i5j@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jacques-charles.lafoucriere@cea.fr \
    --cc=jinshan.xiong@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-metag@vger.kernel.org \
    --cc=oleg.drokin@intel.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).