From: "H. Peter Anvin" <hpa@zytor.com>
To: Paul Mackerras <paulus@samba.org>
Cc: klibc@zytor.com,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: sys_mmap2 on different architectures
Date: Wed, 22 Feb 2006 19:35:50 -0800 [thread overview]
Message-ID: <43FD2D96.7030600@zytor.com> (raw)
In-Reply-To: <17405.9318.991684.872546@cargo.ozlabs.ibm.com>
Paul Mackerras wrote:
>
>>I've looked through the code for sys_mmap2 on several architectures, and
>>it looks like some architectures plays by the "shift is always 12" rule,
>> e.g. SPARC, and some expect userspace to actually obtain the page
>>size, e.g. PowerPC and MIPS. On some architectures, e.g. x86 and ARM,
>>the point is moot since PAGE_SIZE is always 2^12.
>>
>>a. Is this correct, or have I misunderstood the code?
>
> PowerPC always uses 12, even if PAGE_SHIFT is 16 (i.e. for 64k
> pages).
>
ACK on that. I was looking at old kernel sources (2.6.14-rc timeframe),
and I guess that one only supported 4K pages.
>>b. If so, is this right, or is this a bug? Right now both klibc and
>>µClibc consider the latter a bug.
>
> Glibc seems to expect it to always be 12, according to this excerpt
> from sysdeps/unix/sysv/linux/mmap64.c:
That's what I thought, too, but it doesn't seem to match reality.
This is what I've found so far: (64-bit architectures excluded)
arm - N/A (PAGE_SHIFT == 12)
arm26 - MMAP2_PAGE_SHIFT == 12
cris - MMAP2_PAGE_SHIFT == PAGE_SHIFT (13)
frv - MMAP2_PAGE_SHIFT == 12
h8300 - N/A (PAGE_SHIFT == 12)
i386 - N/A (PAGE_SHIFT == 12)
m32r - N/A (PAGE_SHIFT == 12)
m68k - MMAP2_PAGE_SHIFT == PAGE_SHIFT (variable)
mips - MMAP2_PAGE_SHIFT == PAGE_SHIFT (variable)
parisc - MMAP2_PAGE_SHIFT == 12
ppc - MMAP2_PAGE_SHIFT == 12
s390 - N/A (PAGE_SHIFT == 12)
sh - N/A (PAGE_SHIFT == 12)
sparc - MMAP2_PAGE_SHIFT == 12
v850 - N/A (PAGE_SHIFT == 12)
xtensa - N/A (PAGE_SHIFT == 12)
So, excluding 64-bit architectures, we have 3 architectures which expect
getpagesize() to be used, 5 which expect the constant value 12, and 8
which get the same result either way. In effect, we have a system call
with subtly different semantics across architectures, and there isn't
any clear distinction each way.
This is something I don't enjoy about Linux :-/
> /* This is always 12, even on architectures where PAGE_SHIFT != 12. */
> # ifndef MMAP2_PAGE_SHIFT
> # define MMAP2_PAGE_SHIFT 12
> # endif
>
> I would be very reluctant to change the shift to be PAGE_SHIFT, since
> that would be a change in the user/kernel ABI. Of course, userspace
> is still expected to make sure addresses and offsets are multiples of
> the page size (and thus the offset argument to mmap2 has to be a
> multiple of 16 if the page size is 64k).
Changing the user-kernel ABI is bad. I'm just trying to get to the
bottom with what the API actually *IS*.
-hpa
next prev parent reply other threads:[~2006-02-23 3:36 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-02-22 21:45 sys_mmap2 on different architectures H. Peter Anvin
2006-02-22 21:54 ` David S. Miller
2006-02-22 22:00 ` H. Peter Anvin
2006-02-23 0:05 ` H. Peter Anvin
2006-02-23 0:40 ` David S. Miller
2006-02-23 0:41 ` David S. Miller
2006-02-23 0:14 ` Benjamin LaHaise
2006-02-23 0:22 ` H. Peter Anvin
2006-02-23 0:43 ` David S. Miller
2006-02-23 0:59 ` H. Peter Anvin
2006-02-23 1:03 ` David S. Miller
2006-02-23 1:06 ` H. Peter Anvin
2006-02-23 17:39 ` Benjamin LaHaise
2006-02-23 17:47 ` H. Peter Anvin
2006-02-23 2:56 ` Paul Mackerras
2006-02-23 3:35 ` H. Peter Anvin [this message]
2006-02-23 17:32 ` Ralf Baechle
2006-02-23 17:43 ` H. Peter Anvin
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=43FD2D96.7030600@zytor.com \
--to=hpa@zytor.com \
--cc=klibc@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=paulus@samba.org \
/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.