RE: drivers/block/ub.c

From: Robert White
Date: Mon Jun 28 2004 - 20:57:22 EST


The below makes no sense to me... Nothing in the definition of struct bar{} (which
is not packed) infers (top me) in the slightest that foo should be unnaturally
aligned within it.

Just because foo is internally un-aligned, it doesn't become a god-like dirty finger
to with which to corrupt external entities. If you want bar.b packed up against
bar.a then bar should be __packed__ also.

Given the alignment rules for _empty_ structures as members of structures, why would
a non-empty structure that is packed be less stringently aligned than an empty one
that isn?t?

Perhaps I am naïve.


-----Original Message-----
From: linux-kernel-owner@xxxxxxxxxxxxxxx [mailto:linux-kernel-owner@xxxxxxxxxxxxxxx]
On Behalf Of David S. Miller
Sent: Monday, June 28, 2004 2:04 PM
To: Oliver Neukum
Cc: scott@xxxxxxxxxxx; zaitcev@xxxxxxxxxx; greg@xxxxxxxxx; arjanv@xxxxxxxxxx;
jgarzik@xxxxxxxxxx; tburke@xxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx;
stern@xxxxxxxxxxxxxxxxxxx; mdharm-usb@xxxxxxxxxxxxxxxxxx; david-b@xxxxxxxxxxx
Subject: Re: drivers/block/ub.c

On Mon, 28 Jun 2004 22:57:11 +0200
Oliver Neukum <oliver@xxxxxxxxxx> wrote:

> Am Montag, 28. Juni 2004 22:25 schrieb David S. Miller:
> > That's true.  But if one were to propose such a feature to the gcc
> > guys, I know the first question they would ask.  "If no padding of
> > the structure is needed, why are you specifying this new
> > __nopadding__ attribute?"
>
> It would replace some uses of __packed__, where the first element
> is aligned.

You have not considered what is supposed to happen when this
structure is embedded within another one. What kind of alignment
rules apply in that case? For example:

struct foo {
u32 x;
u8 y;
u16 z;
} __attribute__((__packed__));

struct bar {
u8 a;
struct foo b;
};

That is why __packed__ can't assume the alignment of any structure
instance whatsoever. Your __nopadding__ attribute proposal would
lay out struct bar differently in order to meet the alignment guarentees
you say it will be able to meet.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/