From: Dominik Brodowski <linux@dominikbrodowski.net>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org, Al Viro <viro@zeniv.linux.org.uk>,
Andi Kleen <ak@linux.intel.com>,
Andrew Morton <akpm@linux-foundation.org>,
Andy Lutomirski <luto@kernel.org>,
Brian Gerst <brgerst@gmail.com>,
Denys Vlasenko <dvlasenk@redhat.com>,
"H. Peter Anvin" <hpa@zytor.com>, Ingo Molnar <mingo@redhat.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
Peter Zijlstra <peterz@infradead.org>,
Thomas Gleixner <tglx@linutronix.de>,
x86@kernel.org, Peter Zijlstra <a.p.zijlstra@chello.nl>
Subject: Re: [PATCH 0/8] use struct pt_regs based syscall calling for x86-64
Date: Fri, 6 Apr 2018 15:07:41 +0200 [thread overview]
Message-ID: <20180406130741.GA6087@light.dominikbrodowski.net> (raw)
In-Reply-To: <20180406123420.kf74tgiahaugl35x@gmail.com>
On Fri, Apr 06, 2018 at 02:34:20PM +0200, Ingo Molnar wrote:
>
> * Dominik Brodowski <linux@dominikbrodowski.net> wrote:
>
> > > > __sys_mprotect as prefix won't work by the way, as the double-underscore __sys_
> > > > variant is already used in net/* for internal syscall helpers.
> > >
> > > Ok - then triple underscore - but overall I think it's more confusing.
> > >
> > > Btw., what was the problem with calling the x86 ptregs wrapper sys_mprotect?
> > >
> > > The only reason I suggested the __sys_x86_ prefix was because you originally
> > > suggested that there's symbol name overlap, but I don't think that's the case
> > > within the same kernel build, as the regular non-ptregs prototype:
> >
> > Indeed, there's no symbol name overlap within the same kernel build, but
> > technically different stubs named the same. If that's fine, just drop patch
> > 8/8 (including the UML fixup) and things should be fine, with the stub and
> > the entry in the syscall table both named sys_mprotect.
>
> Ok, I've dropped patch #8.
Thanks!
> > For IA32_EMULATION, we have __sys_ia32_mprotect as stub for the same
> > syscall, including this name as entry in syscall_32.tbl.
> >
> > More problematic is the naming for the compat stubs for IA32_EMAULATION and
> > X32, where we have
> >
> > __compat_sys_ia32_waitid
> > __compat_sys_x32_waitid
> >
> > for example. We *could* rename one of those to compat_sys_waitid() and levae
> > the other as-is, but actually I prefer it now how it is.
>
> yeah, this is more symmetric I think.
>
> So right now we have these symbols:
>
> triton:~/tip> grep waitid System.map
>
> ffffffff8105f1e0 t kernel_waitid # common C function (64-bit kargs)
> ffffffff8105f2b0 t SYSC_waitid # 64-bit uaddr args C function 352 bytes
> ffffffff8105f410 T sys_waitid # 64-bit-ptregs -> C stub, 32 bytes
> ffffffff8105f430 T __sys_ia32_waitid # 32-bit-ptregs -> C stub, 32 bytes
> ffffffff8105f450 t C_SYSC_waitid # 32-bit uaddr args C function, 400 bytes
> ffffffff8105f5e0 T __compat_sys_ia32_waitid # 32-bit-ptregs -> C stub, 32 bytes
> ffffffff8105f600 T __compat_sys_x32_waitid # 64-bit-ptregs -> C stub, 32 bytes
>
> BTW., what is the role of generating __sys_ia32_waitid()? It seems unused when a
> syscall has a compat variant otherwise - like here.
Indeed it is unused -- but when compiling
SYSCALL_DEFINE5(waitid, ...)
we don't know yet that somewhere else in the kernel there is
COMPAT_SYSCALL_DEFINE5(waitid, ...)
So if we want to compile the __sys_ia32_ stub only iff it is used, we'd
need to have different macros for syscalls which have compat variants and
for those which do not. Or do you have an idea how we could trick the
compiler to do the right thing?
> Naming wise the odd thumb out is sys_waitid :-/
>
> I'd argue that we should at minimum name it __sys_waitid:
Can't do, as that namespace is already taken.
> ffffffff8105f1e0 t kernel_waitid # common C function (64-bit kargs)
> ffffffff8105f2b0 t SYSC_waitid # 64-bit uaddr args C function
> ffffffff8105f410 T __sys_waitid # 64-bit-ptregs -> C stub
> ffffffff8105f430 T __sys_ia32_waitid # 32-bit-ptregs -> C stub
> ffffffff8105f450 t C_SYSC_waitid # 32-bit uaddr args C function
> ffffffff8105f5e0 T __compat_sys_ia32_waitid # 32-bit-ptregs -> C stub
> ffffffff8105f600 T __compat_sys_x32_waitid # 64-bit-ptregs -> C stub
>
> because that makes it all organized based on the same principle:
>
> {__compat|_}_sys{_ia32|_x32|}_waittid
>
> But arguably there are a whole lot more naming weirdnesses we could fix:
>
> - I find it somewhat confusing that that 'C' in C_SYSC stands not for a C callign
> convention, but for 'COMPAT' - i.e. COMPAT_SYSC would be better.
>
> - Another detail is that why is it called 'SYSC', if the other functions use the
> 'sys' prefix? Wouldn't 'SYS' be more consistent?
It sounds totally reasonable to re-name those, but we should do it not only
for the x86 case, but in include/linux/syscalls.h as well.
> - If we introduced a prefix for the regular 64-bit system call format as well,
> we could have: x64, x32 and ia32.
>
> - And finally, I think the argument format modifiers should be consistently
> prefixes - right now they are a mixture of pre- and post-fixes.
>
> I.e. I'd generate the names like this:
>
> __{x64,x32,ia32}[_compat]_sys_waittid()
>
> The fully consistent nomenclature would be someting like this:
>
> ffffffff8105f1e0 t kernel_waitid # common C function (64-bit kargs)
> ffffffff8105f2b0 t SYS_waitid # 64-bit uaddr args C function
> ffffffff8105f410 T __x64_sys_waitid # 64-bit-ptregs -> C stub
> ffffffff8105f430 T __ia32_sys_waitid # 32-bit-ptregs -> C stub
> ffffffff8105f450 t COMPAT_SYS_waitid # 32-bit uaddr args C function
> ffffffff8105f5e0 T __ia32_compat_sys_waitid # 32-bit-ptregs -> C stub
> ffffffff8105f600 T __x32_compat_sys_waitid # 64-bit-ptregs -> C stub
>
> Looks a lot tidier and a lot more logical, doesn't it?
Indeed. Want me to prepare a new patch 8/8 on top which does the renaming
(for x86 and for the generic case), or will you do the re-naming while
merging my patches yourself?
> Personally I'd also do a s/ia32/i32 rename:
Uh, no, please. It makes things align more beautifully, yes, but the
32-bit sub-architecture commonly is referred to as either i386 or ia32...
Thanks,
Dominik
next prev parent reply other threads:[~2018-04-06 13:08 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-05 9:52 Dominik Brodowski
2018-04-05 9:53 ` [PATCH 1/8] x86: don't pointlessly reload the system call number Dominik Brodowski
2018-04-06 17:09 ` [tip:x86/asm] x86/syscalls: Don't " tip-bot for Linus Torvalds
2018-04-05 9:53 ` [PATCH 2/8] syscalls: introduce CONFIG_ARCH_HAS_SYSCALL_WRAPPER Dominik Brodowski
2018-04-06 17:10 ` [tip:x86/asm] syscalls/core: Introduce CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y tip-bot for Dominik Brodowski
2018-04-05 9:53 ` [PATCH 3/8] syscalls/x86: use struct pt_regs based syscall calling for 64-bit syscalls Dominik Brodowski
2018-04-06 17:11 ` [tip:x86/asm] syscalls/x86: Use 'struct pt_regs' based syscall calling convention " tip-bot for Dominik Brodowski
2018-04-05 9:53 ` [PATCH 4/8] syscalls: prepare ARCH_HAS_SYSCALL_WRAPPER for compat syscalls Dominik Brodowski
2018-04-06 17:11 ` [tip:x86/asm] syscalls/core: Prepare CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y " tip-bot for Dominik Brodowski
2018-04-05 9:53 ` [PATCH 5/8] syscalls/x86: use struct pt_regs based syscall calling for IA32_EMULATION and x32 Dominik Brodowski
2018-04-06 17:12 ` [tip:x86/asm] syscalls/x86: Use 'struct pt_regs' " tip-bot for Dominik Brodowski
2018-04-05 9:53 ` [PATCH 6/8] syscalls/x86: unconditionally enable struct pt_regs based syscalls on x86_64 Dominik Brodowski
2018-04-06 17:12 ` [tip:x86/asm] syscalls/x86: Unconditionally enable 'struct pt_regs' " tip-bot for Dominik Brodowski
2018-04-05 9:53 ` [PATCH 7/8] x86/entry/64: extend register clearing on syscall entry to lower registers Dominik Brodowski
2018-04-06 17:13 ` [tip:x86/asm] syscalls/x86: Extend " tip-bot for Dominik Brodowski
2018-04-05 9:53 ` [PATCH 8/8] syscalls/x86: rename struct pt_regs-based sys_*() to __sys_x86_*() Dominik Brodowski
2018-04-05 18:35 ` kbuild test robot
2018-04-05 15:19 ` [PATCH 0/8] use struct pt_regs based syscall calling for x86-64 Ingo Molnar
2018-04-05 20:31 ` Dominik Brodowski
2018-04-06 8:23 ` Ingo Molnar
2018-04-06 8:31 ` Dominik Brodowski
2018-04-06 8:34 ` Dominik Brodowski
2018-04-06 9:20 ` Ingo Molnar
2018-04-06 9:34 ` Dominik Brodowski
2018-04-06 12:34 ` Ingo Molnar
2018-04-06 13:07 ` Dominik Brodowski [this message]
2018-04-06 17:03 ` Ingo Molnar
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=20180406130741.GA6087@light.dominikbrodowski.net \
--to=linux@dominikbrodowski.net \
--cc=a.p.zijlstra@chello.nl \
--cc=ak@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=brgerst@gmail.com \
--cc=dvlasenk@redhat.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=mingo@kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=viro@zeniv.linux.org.uk \
--cc=x86@kernel.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
Powered by JetHome