2002-08-06 11:16:03

by Muli Ben-Yehuda

[permalink] [raw]
Subject: weird padding in linux/timex.h, struct timex

Hi,

struct timex in include/linux/timex.h is defined as

struct timex
{
...
int :32; int :32; int :32; int :32;
int :32; int :32; int :32; int :32;
int :32; int :32; int :32; int :32;
};

I assume that this is used as padding. Is there any reason for using
bitfields as padding? If there is, a comment to that effect would be
nice. If there isn't, the following patch makes the padding explicit.

--- 2.4.19-vanilla/include/linux/timex.h Sun Aug 4 19:16:59 2002
+++ 2.4.19-mx/include/linux/timex.h Tue Aug 6 13:49:32 2002
@@ -182,9 +182,7 @@
long errcnt; /* calibration errors (ro) */
long stbcnt; /* stability limit exceeded (ro) */

- int :32; int :32; int :32; int :32;
- int :32; int :32; int :32; int :32;
- int :32; int :32; int :32; int :32;
+ char __pad[12 * 4]; /* padding */
};

/*


--
I am PINK, hear me ROAR

http://vipe.technion.ac.il/~mulix/
http://syscalltrack.sf.net/


Attachments:
(No filename) (957.00 B)
(No filename) (189.00 B)
Download all attachments

2002-08-06 12:13:24

by Alan

[permalink] [raw]
Subject: Re: weird padding in linux/timex.h, struct timex

On Tue, 2002-08-06 at 12:15, Muli Ben-Yehuda wrote:
> Hi,
>
> struct timex in include/linux/timex.h is defined as
>
> struct timex
> {
> ...
> int :32; int :32; int :32; int :32;
> int :32; int :32; int :32; int :32;
> int :32; int :32; int :32; int :32;
> };
>
> I assume that this is used as padding. Is there any reason for using
> bitfields as padding? If there is, a comment to that effect would be
> nice. If there isn't, the following patch makes the padding explicit.
>

That is how the interface has always been defined. I think we inherited
that from the world of xntpd but I may be wrong. Your __pad is not
always the same thing - you assume 4 byte ints and ints aligned the same
way as char [], which may not always be true.


2002-08-06 12:52:54

by Muli Ben-Yehuda

[permalink] [raw]
Subject: Re: weird padding in linux/timex.h, struct timex

On Tue, Aug 06, 2002 at 02:36:04PM +0100, Alan Cox wrote:
> On Tue, 2002-08-06 at 12:15, Muli Ben-Yehuda wrote:
> > Hi,
> >
> > struct timex in include/linux/timex.h is defined as
> >
> > struct timex
> > {
> > ...
> > int :32; int :32; int :32; int :32;
> > int :32; int :32; int :32; int :32;
> > int :32; int :32; int :32; int :32;
> > };
> >
> > I assume that this is used as padding. Is there any reason for using
> > bitfields as padding? If there is, a comment to that effect would be
> > nice. If there isn't, the following patch makes the padding explicit.
> >
>
> That is how the interface has always been defined. I think we inherited
> that from the world of xntpd but I may be wrong. Your __pad is not
> always the same thing - you assume 4 byte ints and ints aligned the same
> way as char [], which may not always be true.

I assume 4 byte ints, because I assume that the length of a 32 bit
bitfield will be 32 bits. As for alignment, you're correct.

I guess my question becomes: is the original code defined in any
special way, in regards to padding and size? If it isn't, my __pad
patch would be cleaner and just as correct in principle. If it is, I
can make a __pad which will behave exactly the same way.

Thanks, Muli.
--
I am PINK, hear me ROAR

http://vipe.technion.ac.il/~mulix/
http://syscalltrack.sf.net/


Attachments:
(No filename) (1.33 kB)
(No filename) (189.00 B)
Download all attachments