From: Ingo Molnar <mingo@kernel.org>
To: linux-kernel@vger.kernel.org
Cc: Andy Lutomirski <luto@amacapital.net>,
Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
Fenghua Yu <fenghua.yu@intel.com>,
"H. Peter Anvin" <hpa@zytor.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
Oleg Nesterov <oleg@redhat.com>,
Thomas Gleixner <tglx@linutronix.de>
Subject: [PATCH 020/208] x86/fpu: Move FPU data structures to asm/fpu_types.h
Date: Tue, 5 May 2015 18:24:00 +0200 [thread overview]
Message-ID: <1430843228-13749-21-git-send-email-mingo@kernel.org> (raw)
In-Reply-To: <1430843228-13749-1-git-send-email-mingo@kernel.org>
Move the FPU details to asm/fpu_types.h, to further factor out the
FPU code.
( As an added bonus, the 'struct orig_ist' definition now moves
next to its other data types - the FPU definitions were
slapped in the middle of them for some mysterious reason. )
No code changed.
Reviewed-by: Borislav Petkov <bp@alien8.de>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
arch/x86/include/asm/fpu/types.h | 132 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
arch/x86/include/asm/processor.h | 132 +----------------------------------------------------------
2 files changed, 133 insertions(+), 131 deletions(-)
diff --git a/arch/x86/include/asm/fpu/types.h b/arch/x86/include/asm/fpu/types.h
new file mode 100644
index 000000000000..e996023380d3
--- /dev/null
+++ b/arch/x86/include/asm/fpu/types.h
@@ -0,0 +1,132 @@
+
+#define MXCSR_DEFAULT 0x1f80
+
+struct i387_fsave_struct {
+ u32 cwd; /* FPU Control Word */
+ u32 swd; /* FPU Status Word */
+ u32 twd; /* FPU Tag Word */
+ u32 fip; /* FPU IP Offset */
+ u32 fcs; /* FPU IP Selector */
+ u32 foo; /* FPU Operand Pointer Offset */
+ u32 fos; /* FPU Operand Pointer Selector */
+
+ /* 8*10 bytes for each FP-reg = 80 bytes: */
+ u32 st_space[20];
+
+ /* Software status information [not touched by FSAVE ]: */
+ u32 status;
+};
+
+struct i387_fxsave_struct {
+ u16 cwd; /* Control Word */
+ u16 swd; /* Status Word */
+ u16 twd; /* Tag Word */
+ u16 fop; /* Last Instruction Opcode */
+ union {
+ struct {
+ u64 rip; /* Instruction Pointer */
+ u64 rdp; /* Data Pointer */
+ };
+ struct {
+ u32 fip; /* FPU IP Offset */
+ u32 fcs; /* FPU IP Selector */
+ u32 foo; /* FPU Operand Offset */
+ u32 fos; /* FPU Operand Selector */
+ };
+ };
+ u32 mxcsr; /* MXCSR Register State */
+ u32 mxcsr_mask; /* MXCSR Mask */
+
+ /* 8*16 bytes for each FP-reg = 128 bytes: */
+ u32 st_space[32];
+
+ /* 16*16 bytes for each XMM-reg = 256 bytes: */
+ u32 xmm_space[64];
+
+ u32 padding[12];
+
+ union {
+ u32 padding1[12];
+ u32 sw_reserved[12];
+ };
+
+} __attribute__((aligned(16)));
+
+struct i387_soft_struct {
+ u32 cwd;
+ u32 swd;
+ u32 twd;
+ u32 fip;
+ u32 fcs;
+ u32 foo;
+ u32 fos;
+ /* 8*10 bytes for each FP-reg = 80 bytes: */
+ u32 st_space[20];
+ u8 ftop;
+ u8 changed;
+ u8 lookahead;
+ u8 no_update;
+ u8 rm;
+ u8 alimit;
+ struct math_emu_info *info;
+ u32 entry_eip;
+};
+
+struct ymmh_struct {
+ /* 16 * 16 bytes for each YMMH-reg = 256 bytes */
+ u32 ymmh_space[64];
+};
+
+/* We don't support LWP yet: */
+struct lwp_struct {
+ u8 reserved[128];
+};
+
+struct bndreg {
+ u64 lower_bound;
+ u64 upper_bound;
+} __packed;
+
+struct bndcsr {
+ u64 bndcfgu;
+ u64 bndstatus;
+} __packed;
+
+struct xsave_hdr_struct {
+ u64 xstate_bv;
+ u64 xcomp_bv;
+ u64 reserved[6];
+} __attribute__((packed));
+
+struct xsave_struct {
+ struct i387_fxsave_struct i387;
+ struct xsave_hdr_struct xsave_hdr;
+ struct ymmh_struct ymmh;
+ struct lwp_struct lwp;
+ struct bndreg bndreg[4];
+ struct bndcsr bndcsr;
+ /* new processor state extensions will go here */
+} __attribute__ ((packed, aligned (64)));
+
+union thread_xstate {
+ struct i387_fsave_struct fsave;
+ struct i387_fxsave_struct fxsave;
+ struct i387_soft_struct soft;
+ struct xsave_struct xsave;
+};
+
+struct fpu {
+ unsigned int last_cpu;
+ unsigned int has_fpu;
+ union thread_xstate *state;
+ /*
+ * This counter contains the number of consecutive context switches
+ * during which the FPU stays used. If this is over a threshold, the
+ * lazy fpu saving logic becomes unlazy, to save the trap overhead.
+ * This is an unsigned char so that after 256 iterations the counter
+ * wraps and the context switch behavior turns lazy again; this is to
+ * deal with bursty apps that only use the FPU for a short time:
+ */
+ unsigned char counter;
+};
+
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index 28df85561730..6b75c4b927ec 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -21,6 +21,7 @@ struct mm_struct;
#include <asm/desc_defs.h>
#include <asm/nops.h>
#include <asm/special_insns.h>
+#include <asm/fpu/types.h>
#include <linux/personality.h>
#include <linux/cpumask.h>
@@ -313,137 +314,6 @@ struct orig_ist {
unsigned long ist[7];
};
-#define MXCSR_DEFAULT 0x1f80
-
-struct i387_fsave_struct {
- u32 cwd; /* FPU Control Word */
- u32 swd; /* FPU Status Word */
- u32 twd; /* FPU Tag Word */
- u32 fip; /* FPU IP Offset */
- u32 fcs; /* FPU IP Selector */
- u32 foo; /* FPU Operand Pointer Offset */
- u32 fos; /* FPU Operand Pointer Selector */
-
- /* 8*10 bytes for each FP-reg = 80 bytes: */
- u32 st_space[20];
-
- /* Software status information [not touched by FSAVE ]: */
- u32 status;
-};
-
-struct i387_fxsave_struct {
- u16 cwd; /* Control Word */
- u16 swd; /* Status Word */
- u16 twd; /* Tag Word */
- u16 fop; /* Last Instruction Opcode */
- union {
- struct {
- u64 rip; /* Instruction Pointer */
- u64 rdp; /* Data Pointer */
- };
- struct {
- u32 fip; /* FPU IP Offset */
- u32 fcs; /* FPU IP Selector */
- u32 foo; /* FPU Operand Offset */
- u32 fos; /* FPU Operand Selector */
- };
- };
- u32 mxcsr; /* MXCSR Register State */
- u32 mxcsr_mask; /* MXCSR Mask */
-
- /* 8*16 bytes for each FP-reg = 128 bytes: */
- u32 st_space[32];
-
- /* 16*16 bytes for each XMM-reg = 256 bytes: */
- u32 xmm_space[64];
-
- u32 padding[12];
-
- union {
- u32 padding1[12];
- u32 sw_reserved[12];
- };
-
-} __attribute__((aligned(16)));
-
-struct i387_soft_struct {
- u32 cwd;
- u32 swd;
- u32 twd;
- u32 fip;
- u32 fcs;
- u32 foo;
- u32 fos;
- /* 8*10 bytes for each FP-reg = 80 bytes: */
- u32 st_space[20];
- u8 ftop;
- u8 changed;
- u8 lookahead;
- u8 no_update;
- u8 rm;
- u8 alimit;
- struct math_emu_info *info;
- u32 entry_eip;
-};
-
-struct ymmh_struct {
- /* 16 * 16 bytes for each YMMH-reg = 256 bytes */
- u32 ymmh_space[64];
-};
-
-/* We don't support LWP yet: */
-struct lwp_struct {
- u8 reserved[128];
-};
-
-struct bndreg {
- u64 lower_bound;
- u64 upper_bound;
-} __packed;
-
-struct bndcsr {
- u64 bndcfgu;
- u64 bndstatus;
-} __packed;
-
-struct xsave_hdr_struct {
- u64 xstate_bv;
- u64 xcomp_bv;
- u64 reserved[6];
-} __attribute__((packed));
-
-struct xsave_struct {
- struct i387_fxsave_struct i387;
- struct xsave_hdr_struct xsave_hdr;
- struct ymmh_struct ymmh;
- struct lwp_struct lwp;
- struct bndreg bndreg[4];
- struct bndcsr bndcsr;
- /* new processor state extensions will go here */
-} __attribute__ ((packed, aligned (64)));
-
-union thread_xstate {
- struct i387_fsave_struct fsave;
- struct i387_fxsave_struct fxsave;
- struct i387_soft_struct soft;
- struct xsave_struct xsave;
-};
-
-struct fpu {
- unsigned int last_cpu;
- unsigned int has_fpu;
- union thread_xstate *state;
- /*
- * This counter contains the number of consecutive context switches
- * during which the FPU stays used. If this is over a threshold, the
- * lazy fpu saving logic becomes unlazy, to save the trap overhead.
- * This is an unsigned char so that after 256 iterations the counter
- * wraps and the context switch behavior turns lazy again; this is to
- * deal with bursty apps that only use the FPU for a short time:
- */
- unsigned char counter;
-};
-
#ifdef CONFIG_X86_64
DECLARE_PER_CPU(struct orig_ist, orig_ist);
--
2.1.0
next prev parent reply other threads:[~2015-05-05 17:03 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-05 16:23 [PATCH 000/208] big x86 FPU code rewrite Ingo Molnar
2015-05-05 16:23 ` [PATCH 001/208] x86/fpu: Rename unlazy_fpu() to fpu__save() Ingo Molnar
2015-05-05 16:23 ` [PATCH 002/208] x86/fpu: Add comments to fpu__save() and restrict its export Ingo Molnar
2015-05-05 16:23 ` [PATCH 003/208] x86/fpu: Add debugging check to fpu__save() Ingo Molnar
2015-05-05 16:23 ` [PATCH 004/208] x86/fpu: Rename fpu_detect() to fpu__detect() Ingo Molnar
2015-05-05 16:23 ` [PATCH 005/208] x86/fpu: Remove stale init_fpu() prototype Ingo Molnar
2015-05-05 16:23 ` [PATCH 006/208] x86/fpu: Split an fpstate_alloc_init() function out of init_fpu() Ingo Molnar
2015-05-05 16:23 ` [PATCH 007/208] x86/fpu: Make init_fpu() static Ingo Molnar
2015-05-05 16:23 ` [PATCH 008/208] x86/fpu: Rename init_fpu() to fpu__unlazy_stopped() and add debugging check Ingo Molnar
2015-05-05 16:23 ` [PATCH 009/208] x86/fpu: Optimize fpu__unlazy_stopped() Ingo Molnar
2015-05-05 16:23 ` [PATCH 010/208] x86/fpu: Simplify fpu__unlazy_stopped() Ingo Molnar
2015-05-05 16:23 ` [PATCH 011/208] x86/fpu: Remove fpu_allocated() Ingo Molnar
2015-05-05 16:23 ` [PATCH 012/208] x86/fpu: Move fpu_alloc() out of line Ingo Molnar
2015-05-05 16:23 ` [PATCH 013/208] x86/fpu: Rename fpu_alloc() to fpstate_alloc() Ingo Molnar
2015-05-05 16:23 ` [PATCH 014/208] x86/fpu: Rename fpu_free() to fpstate_free() Ingo Molnar
2015-05-05 16:23 ` [PATCH 015/208] x86/fpu: Rename fpu_finit() to fpstate_init() Ingo Molnar
2015-05-05 16:23 ` [PATCH 016/208] x86/fpu: Rename fpu_init() to fpu__cpu_init() Ingo Molnar
2015-05-05 16:23 ` [PATCH 017/208] x86/fpu: Rename init_thread_xstate() to fpstate_xstate_init_size() Ingo Molnar
2015-05-05 16:23 ` [PATCH 018/208] x86/fpu: Move thread_info::fpu_counter into thread_info::fpu.counter Ingo Molnar
2015-05-05 16:23 ` [PATCH 019/208] x86/fpu: Improve the comment for the fpu::counter field Ingo Molnar
2015-05-05 16:24 ` Ingo Molnar [this message]
2015-05-05 16:24 ` [PATCH 021/208] x86/fpu: Clean up asm/fpu/types.h Ingo Molnar
2015-05-05 16:24 ` [PATCH 022/208] x86/fpu: Move i387.c and xsave.c to arch/x86/kernel/fpu/ Ingo Molnar
2015-05-05 16:24 ` [PATCH 023/208] x86/fpu: Fix header file dependencies of fpu-internal.h Ingo Molnar
2015-05-05 16:24 ` [PATCH 024/208] x86/fpu: Split out the boot time FPU init code into fpu/init.c Ingo Molnar
2015-05-05 16:24 ` [PATCH 025/208] x86/fpu: Remove unnecessary includes from core.c Ingo Molnar
2015-05-05 16:24 ` [PATCH 026/208] x86/fpu: Move the no_387 handling and FPU detection code into init.c Ingo Molnar
2015-05-05 16:24 ` [PATCH 027/208] x86/fpu: Remove the free_thread_xstate() complication Ingo Molnar
2015-05-05 16:24 ` [PATCH 028/208] x86/fpu: Factor out fpu__flush_thread() from flush_thread() Ingo Molnar
2015-05-05 16:24 ` [PATCH 029/208] x86/fpu: Move math_state_restore() to fpu/core.c Ingo Molnar
2015-05-05 16:24 ` [PATCH 030/208] x86/fpu: Rename math_state_restore() to fpu__restore() Ingo Molnar
2015-05-05 16:24 ` [PATCH 031/208] x86/fpu: Factor out the FPU bug detection code into fpu__init_check_bugs() Ingo Molnar
2015-05-05 16:24 ` [PATCH 032/208] x86/fpu: Simplify the xsave_state*() methods Ingo Molnar
2015-05-05 16:24 ` [PATCH 033/208] x86/fpu: Remove fpu_xsave() Ingo Molnar
2015-05-05 16:24 ` [PATCH 034/208] x86/fpu: Move task_xstate_cachep handling to core.c Ingo Molnar
2015-05-05 16:24 ` [PATCH 035/208] x86/fpu: Factor out fpu__copy() Ingo Molnar
2015-05-05 16:24 ` [PATCH 036/208] x86/fpu: Uninline fpstate_free() and move it next to the allocation function Ingo Molnar
2015-05-05 16:24 ` [PATCH 037/208] x86/fpu: Make task_xstate_cachep static Ingo Molnar
2015-05-05 16:24 ` [PATCH 038/208] x86/fpu: Make kernel_fpu_disable/enable() static Ingo Molnar
2015-05-05 16:24 ` [PATCH 039/208] x86/fpu: Add debug check to kernel_fpu_disable() Ingo Molnar
2015-05-05 16:24 ` [PATCH 040/208] x86/fpu: Add kernel_fpu_disabled() Ingo Molnar
2015-05-05 16:24 ` [PATCH 041/208] x86/fpu: Remove __save_init_fpu() Ingo Molnar
2015-05-05 16:24 ` [PATCH 042/208] x86/fpu: Move fpu_copy() to fpu/core.c Ingo Molnar
2015-05-05 16:24 ` [PATCH 043/208] x86/fpu: Add debugging check to fpu_copy() Ingo Molnar
2015-05-05 16:24 ` [PATCH 044/208] x86/fpu: Print out whether we are doing lazy/eager FPU context switches Ingo Molnar
2015-05-05 16:24 ` [PATCH 045/208] x86/fpu: Eliminate the __thread_has_fpu() wrapper Ingo Molnar
2015-05-05 16:24 ` [PATCH 046/208] x86/fpu: Change __thread_clear_has_fpu() to 'struct fpu' parameter Ingo Molnar
2015-05-05 16:24 ` [PATCH 047/208] x86/fpu: Move 'PER_CPU(fpu_owner_task)' to fpu/core.c Ingo Molnar
2015-05-05 16:24 ` [PATCH 048/208] x86/fpu: Change fpu_owner_task to fpu_fpregs_owner_ctx Ingo Molnar
2015-05-05 16:24 ` [PATCH 049/208] x86/fpu: Remove 'struct task_struct' usage from __thread_set_has_fpu() Ingo Molnar
2015-05-05 16:24 ` [PATCH 050/208] x86/fpu: Remove 'struct task_struct' usage from __thread_fpu_end() Ingo Molnar
2015-05-05 16:24 ` [PATCH 051/208] x86/fpu: Remove 'struct task_struct' usage from __thread_fpu_begin() Ingo Molnar
2015-05-05 16:24 ` [PATCH 052/208] x86/fpu: Open code PF_USED_MATH usages Ingo Molnar
2015-05-05 16:24 ` [PATCH 053/208] x86/fpu: Document fpu__unlazy_stopped() Ingo Molnar
2015-05-05 16:24 ` [PATCH 054/208] x86/fpu: Get rid of PF_USED_MATH usage, convert it to fpu->fpstate_active Ingo Molnar
2015-05-06 0:51 ` Andy Lutomirski
2015-05-06 3:24 ` Ingo Molnar
2015-05-05 16:24 ` [PATCH 055/208] x86/fpu: Remove 'struct task_struct' usage from drop_fpu() Ingo Molnar
2015-05-05 16:24 ` [PATCH 056/208] x86/fpu: Remove task_disable_lazy_fpu_restore() Ingo Molnar
2015-05-05 16:24 ` [PATCH 057/208] x86/fpu: Use 'struct fpu' in fpu_lazy_restore() Ingo Molnar
2015-05-05 16:24 ` [PATCH 058/208] x86/fpu: Use 'struct fpu' in restore_fpu_checking() Ingo Molnar
2015-05-05 16:24 ` [PATCH 059/208] x86/fpu: Use 'struct fpu' in fpu_reset_state() Ingo Molnar
2015-05-05 16:24 ` [PATCH 060/208] x86/fpu: Use 'struct fpu' in switch_fpu_prepare() Ingo Molnar
2015-05-05 16:24 ` [PATCH 061/208] x86/fpu: Use 'struct fpu' in switch_fpu_finish() Ingo Molnar
2015-05-05 16:24 ` [PATCH 062/208] x86/fpu: Move __save_fpu() into fpu/core.c Ingo Molnar
2015-05-05 16:24 ` [PATCH 063/208] x86/fpu: Use 'struct fpu' in __fpu_save() Ingo Molnar
2015-05-05 16:24 ` [PATCH 064/208] x86/fpu: Use 'struct fpu' in fpu__save() Ingo Molnar
2015-05-05 16:24 ` [PATCH 065/208] x86/fpu: Use 'struct fpu' in fpu_copy() Ingo Molnar
2015-05-05 16:24 ` [PATCH 066/208] x86/fpu: Use 'struct fpu' in fpu__copy() Ingo Molnar
2015-05-05 16:24 ` [PATCH 067/208] x86/fpu: Use 'struct fpu' in fpstate_alloc_init() Ingo Molnar
2015-05-05 16:24 ` [PATCH 068/208] x86/fpu: Use 'struct fpu' in fpu__unlazy_stopped() Ingo Molnar
2015-05-05 16:24 ` [PATCH 069/208] x86/fpu: Rename fpu__flush_thread() to fpu__clear() Ingo Molnar
2015-05-05 16:24 ` [PATCH 070/208] x86/fpu: Clean up fpu__clear() a bit Ingo Molnar
2015-05-05 16:24 ` [PATCH 071/208] x86/fpu: Rename i387.h to fpu/api.h Ingo Molnar
2015-05-05 16:24 ` [PATCH 072/208] x86/fpu: Move xsave.h to fpu/xsave.h Ingo Molnar
2015-05-05 16:24 ` [PATCH 073/208] x86/fpu: Rename fpu-internal.h to fpu/internal.h Ingo Molnar
2015-05-05 16:24 ` [PATCH 074/208] x86/fpu: Move MXCSR_DEFAULT " Ingo Molnar
2015-05-05 16:24 ` [PATCH 075/208] x86/fpu: Remove xsave_init() __init obfuscation Ingo Molnar
2015-05-05 16:24 ` [PATCH 076/208] x86/fpu: Remove assembly guard from asm/fpu/api.h Ingo Molnar
2015-05-05 16:24 ` [PATCH 077/208] x86/fpu: Improve FPU detection kernel messages Ingo Molnar
2015-05-05 16:24 ` [PATCH 078/208] x86/fpu: Print supported xstate features in human readable way Ingo Molnar
2015-05-05 16:24 ` [PATCH 079/208] x86/fpu: Rename 'pcntxt_mask' to 'xfeatures_mask' Ingo Molnar
2015-05-05 17:14 ` [PATCH 000/208] big x86 FPU code rewrite Linus Torvalds
2015-05-05 17:50 ` Ingo Molnar
2015-07-17 23:52 ` Andy Lutomirski
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=1430843228-13749-21-git-send-email-mingo@kernel.org \
--to=mingo@kernel.org \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=fenghua.yu@intel.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=oleg@redhat.com \
--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 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.