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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox