From: Mikael Pettersson <mikpe@csd.uu.se>
To: anton@samba.org
Cc: linux-kernel@vger.kernel.org, manfred@colorfullife.com,
torvalds@transmeta.com
Subject: Re: [PATCH] 2.5 fast poll on ppc64
Date: Thu, 26 Dec 2002 13:57:05 +0100 (MET) [thread overview]
Message-ID: <200212261257.NAA02448@harpo.it.uu.se> (raw)
Anton Blanchard writes:
> I was unable to boot 2.5-BK on ppc64 and narrowed it down to the fast
> poll patch. I found:
>
> offsetof(struct poll_list, entries) == 12 but
> sizeof(struct poll_list) == 16
>
> This means pp+1 did not match up with pp->entries. Im not sure what the
> alignment requirements are for a zero length struct (ie is this a
> compiler bug) but the following patch fixes the problem and also changes
> ->len to a long to ensure 8 byte alignment of ->entries on 64bit archs.
>
> Anton
>
> ===== fs/select.c 1.15 vs edited =====
> --- 1.15/fs/select.c Sat Dec 21 20:42:41 2002
> +++ edited/fs/select.c Thu Dec 26 17:31:16 2002
> @@ -362,7 +362,7 @@
>
> struct poll_list {
> struct poll_list *next;
> - int len;
> + long len;
> struct pollfd entries[0];
> };
To me (I'm a compiler writer) it looks like your compiler did NOT
mess up. Assuming struct pollfd has 32-bit alignment, the compiler
is doing the right thing by starting entries[] at offset 12.
The 16-byte size for struct poll_list is because the 'next' field
has 64-bit alignment, which forces the compiler to pad struct
poll_lists's size to a multiple of 8 bytes, i.e. 16 bytes in this
case. So the compiler is not broken.
>
> @@ -471,7 +471,7 @@
> walk->next = pp;
>
> walk = pp;
> - if (copy_from_user(pp+1, ufds + nfds-i,
> + if (copy_from_user(pp->entries, ufds + nfds-i,
> sizeof(struct pollfd)*pp->len)) {
But the old code which assumed pp+1 == pp->entries is so horribly
broken I can't find words for it. s/pp+1/pp->entries/ is the correct fix.
/Mikael
next reply other threads:[~2002-12-26 12:48 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-12-26 12:57 Mikael Pettersson [this message]
2002-12-26 13:53 ` [PATCH] 2.5 fast poll on ppc64 Manfred Spraul
-- strict thread matches above, loose matches on Subject: below --
2002-12-26 20:55 Mikael Pettersson
2002-12-26 21:23 ` Linus Torvalds
2002-12-26 21:42 ` Manfred Spraul
2002-12-27 0:14 ` Richard Henderson
2002-12-26 6:48 Anton Blanchard
2002-12-26 12:09 ` Manfred Spraul
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=200212261257.NAA02448@harpo.it.uu.se \
--to=mikpe@csd.uu.se \
--cc=anton@samba.org \
--cc=linux-kernel@vger.kernel.org \
--cc=manfred@colorfullife.com \
--cc=torvalds@transmeta.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