linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@kernel.org>
To: linux-kernel@vger.kernel.org
Cc: Mikko Rapeli <mikko.rapeli@iki.fi>,
	Andy Lutomirski <luto@amacapital.net>,
	Andrew Morton <akpm@linux-foundation.org>,
	Denys Vlasenko <dvlasenk@redhat.com>,
	Brian Gerst <brgerst@gmail.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Borislav Petkov <bp@alien8.de>, "H. Peter Anvin" <hpa@zytor.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Oleg Nesterov <oleg@redhat.com>,
	Thomas Gleixner <tglx@linutronix.de>
Subject: [PATCH 00/15] x86/headers: Clean up sigcontext types and headers
Date: Sat,  5 Sep 2015 09:32:28 +0200	[thread overview]
Message-ID: <1441438363-9999-1-git-send-email-mingo@kernel.org> (raw)

So Mikko Rapeli reported that sigcontext32.h does not build standalone,
and while trying to fix it I came up with this series that cleans up
all sorts of details and makes the sigcontext types (hopefully) much
more maintainable.

Before this series we had a somewhat messy duplication that resulted
in 3 type definitions (repeated for both sigcontext and for various
FPU state structures):

  - native 32-bit types      (only available on 32-bit kernels)
  - native 64-bit types      (only available on 64-bit kernels)
  - compat 32-bit types      (only available on 64-bit kernels)
  - wrappers defining _32 named variants of these types

... while in reality our compat 32-bit ABI structures are the same as
the native 32-bit ABI structures.

So after the series there's a clear, bitness independent definition
of all the relevant types:

	struct sigcontext_32  (available on all kernels)
	struct sigcontext_64  (available on all kernels)

	struct _fpstate_32    (available on all kernels)
	struct _fpstate_64    (available on all kernels)

and the kernel bitness dependent 'struct sigcontext' and 'struct _fpstate'
structures are then mapped to their respective types, depending on bitness.

Modern user-space can start using these cleaner types. (If they want to: all
old names are kept as well).

I have also extended/harmonized all the disjunct (and often hard to read)
comments in the various structure definitions. The patches add a lot of
new comments, this is why the diffstat shows only a modest line count
reduction:

 13 files changed, 324 insertions(+), 338 deletions(-)

Another effect of the series is that sigcontext32.h is gone (only
a wrapper to sigcontext.h is kept, in case existing user-space relies
on the header), and the kernel side asm/sigcontext.h file is gone as
well. This should solve the original build failure reported by Mikko
Rapeli.

All legacy names are still kept to make sure we don't break user-space
builds, and are collected at the end of the file, without confusing people
who'd only like to read the file to understand the kernel side code.

The various _ia32 names are mostly gone as well from the kernel side,
compatibility wrappers are kept for the user-space side.

There's one new type quirk in patch 11, which is the result of having unified
C code operating on a 32-bit pointer field both from 64-bit kernel and from
a native 32-bit kernel:

 int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
 {
 +       unsigned long buf_val;

 -               get_user_ex(buf, &sc->fpstate);
 +               get_user_ex(buf_val, &sc->fpstate);
 +               buf = (void __user *)buf_val;

this is the cleanest I could structure it. If this is the only quirk then I
think the advantages outweigh the ugliness - BYMMV.

So in general this is how I imagine our model should be to define ABIs
going forward.

Comments, suggestions are welcome!

    Ingo

============================>
Ingo Molnar (15):
  x86/headers: Fix (old) header file dependency bug in uapi/asm/sigcontext32.h
  x86/headers: Clean up uapi/asm/sigcontext32.h
  x86/headers: Clean up and better document uapi/asm/sigcontext.h
  x86/headers: Separate out legacy user-space structure definitions
  x86/headers: Use ABI types consistently in sigcontext*.h
  x86/headers: Unify register type definitions between 32-bit compat and i386
  x86/headers: Unify 'struct _fpstate_ia32' and i386 struct _fpstate
  x86/headers: Convert uses of _fpstate_ia32 to _fpstate_32
  x86/headers: Clean up the kernel's struct sigcontext types to be ABI-clean
  x86/headers: Move the 'struct sigcontext' definitions into the UAPI header
  x86/headers: Make sigcontext pointers bit independent
  x86/headers: Unify 'struct sigcontext_ia32' and 'struct sigcontext_32'
  x86/headers: Convert sigcontext_ia32 uses to sigcontext_32
  x86/headers: Remove direct sigcontext32.h uses
  x86/headers: Remove <asm/sigcontext.h>

 arch/x86/ia32/ia32_signal.c              |   8 +-
 arch/x86/include/asm/fpu/signal.h        |   2 +-
 arch/x86/include/asm/ia32.h              |   4 +-
 arch/x86/include/asm/processor.h         |   2 +-
 arch/x86/include/asm/sigcontext.h        |  79 ------
 arch/x86/include/asm/sigframe.h          |   8 +-
 arch/x86/include/asm/signal.h            |   2 +-
 arch/x86/include/uapi/asm/sigcontext.h   | 456 ++++++++++++++++++++-----------
 arch/x86/include/uapi/asm/sigcontext32.h |  73 +----
 arch/x86/kernel/asm-offsets.c            |  18 +-
 arch/x86/kernel/fpu/signal.c             |   4 +-
 arch/x86/kernel/signal.c                 |   4 +-
 arch/x86/math-emu/fpu_emu.h              |   2 +-
 13 files changed, 324 insertions(+), 338 deletions(-)
 delete mode 100644 arch/x86/include/asm/sigcontext.h

-- 
2.1.4


             reply	other threads:[~2015-09-05  7:33 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-05  7:32 Ingo Molnar [this message]
2015-09-05  7:32 ` [PATCH 01/15] x86/headers: Fix (old) header file dependency bug in uapi/asm/sigcontext32.h Ingo Molnar
2015-09-08 14:24   ` [tip:x86/headers] " tip-bot for Ingo Molnar
2015-09-05  7:32 ` [PATCH 02/15] x86/headers: Clean up uapi/asm/sigcontext32.h Ingo Molnar
2015-09-08 14:25   ` [tip:x86/headers] " tip-bot for Ingo Molnar
2015-09-05  7:32 ` [PATCH 03/15] x86/headers: Clean up and better document uapi/asm/sigcontext.h Ingo Molnar
2015-09-08 14:25   ` [tip:x86/headers] x86/headers: Clean up and better document uapi/ asm/sigcontext.h tip-bot for Ingo Molnar
2015-09-09  7:12     ` Peter Zijlstra
2015-09-14  9:12       ` [tip:x86/headers] x86/headers: Clean up too long lines tip-bot for Peter Zijlstra
2015-09-05  7:32 ` [PATCH 04/15] x86/headers: Separate out legacy user-space structure definitions Ingo Molnar
2015-09-08 14:25   ` [tip:x86/headers] " tip-bot for Ingo Molnar
2015-09-05  7:32 ` [PATCH 05/15] x86/headers: Use ABI types consistently in sigcontext*.h Ingo Molnar
2015-09-08 14:26   ` [tip:x86/headers] " tip-bot for Ingo Molnar
2015-09-05  7:32 ` [PATCH 06/15] x86/headers: Unify register type definitions between 32-bit compat and i386 Ingo Molnar
2015-09-08 14:26   ` [tip:x86/headers] " tip-bot for Ingo Molnar
2015-09-05  7:32 ` [PATCH 07/15] x86/headers: Unify 'struct _fpstate_ia32' and i386 struct _fpstate Ingo Molnar
2015-09-08 14:26   ` [tip:x86/headers] " tip-bot for Ingo Molnar
2015-09-05  7:32 ` [PATCH 08/15] x86/headers: Convert uses of _fpstate_ia32 to _fpstate_32 Ingo Molnar
2015-09-08 14:27   ` [tip:x86/headers] " tip-bot for Ingo Molnar
2015-09-05  7:32 ` [PATCH 09/15] x86/headers: Clean up the kernel's struct sigcontext types to be ABI-clean Ingo Molnar
2015-09-08 14:27   ` [tip:x86/headers] x86/headers: Clean up the kernel' s " tip-bot for Ingo Molnar
2015-09-05  7:32 ` [PATCH 10/15] x86/headers: Move the 'struct sigcontext' definitions into the UAPI header Ingo Molnar
2015-09-08 14:27   ` [tip:x86/headers] " tip-bot for Ingo Molnar
2015-09-05  7:32 ` [PATCH 11/15] x86/headers: Make sigcontext pointers bit independent Ingo Molnar
2015-09-08 14:28   ` [tip:x86/headers] " tip-bot for Ingo Molnar
2015-09-05  7:32 ` [PATCH 12/15] x86/headers: Unify 'struct sigcontext_ia32' and 'struct sigcontext_32' Ingo Molnar
2015-09-08 14:28   ` [tip:x86/headers] " tip-bot for Ingo Molnar
2015-09-05  7:32 ` [PATCH 13/15] x86/headers: Convert sigcontext_ia32 uses to sigcontext_32 Ingo Molnar
2015-09-08 14:28   ` [tip:x86/headers] " tip-bot for Ingo Molnar
2015-09-05  7:32 ` [PATCH 14/15] x86/headers: Remove direct sigcontext32.h uses Ingo Molnar
2015-09-08 14:29   ` [tip:x86/headers] " tip-bot for Ingo Molnar
2015-09-05  7:32 ` [PATCH 15/15] x86/headers: Remove <asm/sigcontext.h> Ingo Molnar
2015-09-05 10:57   ` Mikko Rapeli
2015-09-05 11:59     ` Ingo Molnar
2015-09-05 12:11       ` Mikko Rapeli
2015-09-06  6:41         ` Ingo Molnar
2015-09-06 20:28           ` Mikko Rapeli
2015-09-07  7:37             ` Ingo Molnar
2015-09-07  8:14               ` Mikko Rapeli
2015-09-08 14:29   ` [tip:x86/headers] x86/headers: Remove <asm/sigcontext.h> references on the kernel side tip-bot for Ingo Molnar
2015-09-08 20:17     ` Mikko Rapeli

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=1441438363-9999-1-git-send-email-mingo@kernel.org \
    --to=mingo@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=bp@alien8.de \
    --cc=brgerst@gmail.com \
    --cc=dvlasenk@redhat.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@amacapital.net \
    --cc=mikko.rapeli@iki.fi \
    --cc=oleg@redhat.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.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;
as well as URLs for NNTP newsgroup(s).