Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1219445

[PATCH 07/15] x86/headers: Unify 'struct _fpstate_ia32' and i386 struct _fpstate

From Ingo Molnar <mingo@kernel.org>
Newsgroups linux.kernel
Subject [PATCH 07/15] x86/headers: Unify 'struct _fpstate_ia32' and i386 struct _fpstate
Date 2015-09-05 09:40 +0200
Message-ID <q5geR-2go-13@gated-at.bofh.it> (permalink)
References <q5geR-2go-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


'struct _fpstate_ia32' and 'struct _fpstate' on i386 are identical in all fields,
except 'padding1' being named 'padding'.

We unify the two structures and add a union that is both named 'padding1' and
'padding', in the (unlikely) case there's user-space code that relies on the
padding field name.

We rename the two main types to be:

  struct _fpstate_32
  struct _fpstate_64

for the 32-bit and 64-bit frame, and map them to the main and compat structure
names (_fpstate) depending on whether we are on 32-bit or on 64-bit kernels.

We also keep the old _fpstate_ia32 name as a legacy name.

Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mikko Rapeli <mikko.rapeli@iki.fi>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/include/asm/sigframe.h          |  1 -
 arch/x86/include/uapi/asm/sigcontext.h   | 26 +++++++++++++++++---------
 arch/x86/include/uapi/asm/sigcontext32.h | 29 -----------------------------
 3 files changed, 17 insertions(+), 39 deletions(-)

diff --git a/arch/x86/include/asm/sigframe.h b/arch/x86/include/asm/sigframe.h
index 7c7c27c97daa..67d3027520ee 100644
--- a/arch/x86/include/asm/sigframe.h
+++ b/arch/x86/include/asm/sigframe.h
@@ -9,7 +9,6 @@
 #define sigframe_ia32		sigframe
 #define rt_sigframe_ia32	rt_sigframe
 #define sigcontext_ia32		sigcontext
-#define _fpstate_ia32		_fpstate
 #define ucontext_ia32		ucontext
 #else /* !CONFIG_X86_32 */
 
diff --git a/arch/x86/include/uapi/asm/sigcontext.h b/arch/x86/include/uapi/asm/sigcontext.h
index 9df4df3e40ef..85811167821f 100644
--- a/arch/x86/include/uapi/asm/sigcontext.h
+++ b/arch/x86/include/uapi/asm/sigcontext.h
@@ -95,9 +95,10 @@ struct _xmmreg {
 
 #define X86_FXSR_MAGIC			0x0000
 
-#ifdef __i386__
-
-struct _fpstate {
+/*
+ * The 32-bit FPU frame:
+ */
+struct _fpstate_32 {
 	/* Legacy FPU environment: */
 	__u32				cw;
 	__u32				sw;
@@ -117,7 +118,10 @@ struct _fpstate {
 	__u32				reserved;
 	struct _fpxreg			_fxsr_st[8];	/* FXSR FPU reg data is ignored */
 	struct _xmmreg			_xmm[8];	/* First 8 XMM registers */
-	__u32				padding1[44];	/* Second 8 XMM registers plus padding */
+	union {
+		__u32			padding1[44];	/* Second 8 XMM registers plus padding */
+		__u32			padding[44];	/* Alias name for old user-space */
+	};
 
 	union {
 		__u32			padding2[12];
@@ -125,10 +129,8 @@ struct _fpstate {
 	};
 };
 
-#else /* __x86_64__: */
-
 /*
- * The FXSAVE frame.
+ * The 64-bit FPU frame. (FXSAVE format and later)
  *
  * Note1: If sw_reserved.magic1 == FP_XSTATE_MAGIC1 then the structure is
  *        larger: 'struct _xstate'. Note that 'struct _xstate' embedds
@@ -138,7 +140,7 @@ struct _fpstate {
  * Note2: Reserved fields may someday contain valuable data. Always save/restore
  *        them when you change signal frames.
  */
-struct _fpstate {
+struct _fpstate_64 {
 	__u16				cwd;
 	__u16				swd;
 	/* Note this is not the same as the 32-bit/x87/FSAVE twd: */
@@ -157,7 +159,13 @@ struct _fpstate {
 	};
 };
 
-#endif /* __x86_64__ */
+#ifdef __i386__
+# define _fpstate _fpstate_32
+#else
+# define _fpstate _fpstate_64
+#endif
+
+#define _fpstate_ia32 _fpstate_32
 
 struct _header {
 	__u64				xfeatures;
diff --git a/arch/x86/include/uapi/asm/sigcontext32.h b/arch/x86/include/uapi/asm/sigcontext32.h
index 356caab997e7..19a89165ea1d 100644
--- a/arch/x86/include/uapi/asm/sigcontext32.h
+++ b/arch/x86/include/uapi/asm/sigcontext32.h
@@ -5,35 +5,6 @@
 
 #include <asm/sigcontext.h>
 
-/* FXSAVE frame: FSAVE frame with extensions */
-struct _fpstate_ia32 {
-	/* Regular FPU environment: */
-	__u32				cw;
-	__u32				sw;
-	__u32				tag;		/* Not compatible with the 64-bit frame */
-	__u32				ipoff;
-	__u32				cssel;
-	__u32				dataoff;
-	__u32				datasel;
-	struct _fpreg			_st[8];
-	__u16				status;
-	__u16				magic;		/* 0xffff: regular FPU data only */
-							/* 0x0000: FXSR data */
-
-	/* Extended FXSR FPU environment: */
-	__u32				_fxsr_env[6];
-	__u32				mxcsr;
-	__u32				reserved;
-	struct _fpxreg			_fxsr_st[8];
-	struct _xmmreg			_xmm[8];	/* The first  8 XMM registers */
-	__u32				padding[44];	/* The second 8 XMM registers plus padding */
-	union {
-		__u32			padding2[12];
-		/* Might encode xstate extensions, see asm/sigcontext.h: */
-		struct _fpx_sw_bytes	sw_reserved;
-	};
-};
-
 /* 32-bit compat sigcontext: */
 struct sigcontext_ia32 {
        __u16				gs, __gsh;
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 00/15] x86/headers: Clean up sigcontext types and headers Ingo Molnar <mingo@kernel.org> - 2015-09-05 09:40 +0200
  [PATCH 07/15] x86/headers: Unify 'struct _fpstate_ia32' and i386 struct _fpstate Ingo Molnar <mingo@kernel.org> - 2015-09-05 09:40 +0200
  [PATCH 08/15] x86/headers: Convert uses of _fpstate_ia32 to _fpstate_32 Ingo Molnar <mingo@kernel.org> - 2015-09-05 09:40 +0200
  [PATCH 06/15] x86/headers: Unify register type definitions between 32-bit compat and i386 Ingo Molnar <mingo@kernel.org> - 2015-09-05 09:40 +0200
  [PATCH 12/15] x86/headers: Unify 'struct sigcontext_ia32' and 'struct sigcontext_32' Ingo Molnar <mingo@kernel.org> - 2015-09-05 09:40 +0200
  [PATCH 05/15] x86/headers: Use ABI types consistently in sigcontext*.h Ingo Molnar <mingo@kernel.org> - 2015-09-05 09:40 +0200
  [PATCH 10/15] x86/headers: Move the 'struct sigcontext' definitions into the UAPI header Ingo Molnar <mingo@kernel.org> - 2015-09-05 09:40 +0200
  [PATCH 15/15] x86/headers: Remove <asm/sigcontext.h> Ingo Molnar <mingo@kernel.org> - 2015-09-05 09:40 +0200
    Re: [PATCH 15/15] x86/headers: Remove <asm/sigcontext.h> Mikko Rapeli <mikko.rapeli@iki.fi> - 2015-09-05 13:00 +0200
      Re: [PATCH 15/15] x86/headers: Remove <asm/sigcontext.h> Ingo Molnar <mingo@kernel.org> - 2015-09-05 14:10 +0200
        Re: [PATCH 15/15] x86/headers: Remove <asm/sigcontext.h> Mikko Rapeli <mikko.rapeli@iki.fi> - 2015-09-05 14:20 +0200
          Re: [PATCH 15/15] x86/headers: Remove <asm/sigcontext.h> Ingo Molnar <mingo@kernel.org> - 2015-09-06 08:50 +0200
            Re: [PATCH 15/15] x86/headers: Remove <asm/sigcontext.h> Mikko Rapeli <mikko.rapeli@iki.fi> - 2015-09-06 22:30 +0200
              Re: [PATCH 15/15] x86/headers: Remove <asm/sigcontext.h> Ingo Molnar <mingo@kernel.org> - 2015-09-07 09:40 +0200
                Re: [PATCH 15/15] x86/headers: Remove <asm/sigcontext.h> Mikko Rapeli <mikko.rapeli@iki.fi> - 2015-09-07 10:20 +0200
  [PATCH 04/15] x86/headers: Separate out legacy user-space structure definitions Ingo Molnar <mingo@kernel.org> - 2015-09-05 09:40 +0200
  [PATCH 01/15] x86/headers: Fix (old) header file dependency bug in uapi/asm/sigcontext32.h Ingo Molnar <mingo@kernel.org> - 2015-09-05 09:40 +0200
  [PATCH 09/15] x86/headers: Clean up the kernel's struct sigcontext types to be ABI-clean Ingo Molnar <mingo@kernel.org> - 2015-09-05 09:40 +0200

csiph-web