All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/19] Context switch improvements
@ 2015-10-29  0:43 Anton Blanchard
  2015-10-29  0:43 ` [PATCH 01/19] powerpc: Don't disable kernel FP/VMX/VSX MSR bits on context switch Anton Blanchard
                   ` (19 more replies)
  0 siblings, 20 replies; 32+ messages in thread
From: Anton Blanchard @ 2015-10-29  0:43 UTC (permalink / raw)
  To: benh, paulus, mpe, mikey, cyrilbur, scottwood; +Cc: linuxppc-dev

Here are various improvements to our context switch path. Some of the
highlights:

- Group all mfsprs and mtsprs in __switch_to(), which gives us a
  10% improvement on POWER8.

- Create giveup_all() and flush_all_to_thread() so we only write the
  MSR once, which gives us a 3% improvement on POWER8.

- Create disable_kernel_{fp,altivec,vsx,spe}() and add a debug boot
  option (ppc_strict_facility_enable) to minimise kernel code running
  with floating point and vector bits enabled.

- Make giveup_vsx() and flush_vsx_to_thread() handle FP and Altivec
  state, so they behave more like their sister functions.

Scott: There are changes to the SPE code here which I have only been
able to compile test.

Anton
--

Anton Blanchard (19):
  powerpc: Don't disable kernel FP/VMX/VSX MSR bits on context switch
  powerpc: Don't disable MSR bits in do_load_up_transact_*() functions
  powerpc: Create context switch helpers save_sprs() and restore_sprs()
  powerpc: Remove redundant mflr in _switch
  powerpc: Remove UP only lazy floating point and vector optimisations
  powerpc: Simplify TM restore checks
  powerpc: Create mtmsrd_isync()
  powerpc: Remove NULL task struct pointer checks in FP and vector code
  powerpc: Move part of giveup_fpu,altivec,spe into c
  powerpc: Move part of giveup_vsx into c
  crypto: vmx: Only call enable_kernel_vsx()
  powerpc: Create msr_check_and_{set,clear}()
  powerpc: Create disable_kernel_{fp,altivec,vsx,spe}()
  powerpc: Add ppc_strict_facility_enable boot option
  powerpc: Remove fp_enable() and vec_enable(), use
    msr_check_and_{set,clear}()
  powerpc: create giveup_all()
  powerpc: create flush_all_to_thread()
  powerpc: Rearrange __switch_to()
  powerpc: clean up asm/switch_to.h

 Documentation/kernel-parameters.txt      |   6 +
 arch/powerpc/crypto/aes-spe-glue.c       |   1 +
 arch/powerpc/crypto/sha1-spe-glue.c      |   1 +
 arch/powerpc/crypto/sha256-spe-glue.c    |   1 +
 arch/powerpc/include/asm/processor.h     |   9 +-
 arch/powerpc/include/asm/reg.h           |  17 ++
 arch/powerpc/include/asm/switch_to.h     |  65 ++---
 arch/powerpc/kernel/align.c              |   2 +
 arch/powerpc/kernel/entry_64.S           |  75 +----
 arch/powerpc/kernel/fpu.S                |  73 +----
 arch/powerpc/kernel/head_fsl_booke.S     |  42 +--
 arch/powerpc/kernel/idle_power7.S        |   7 -
 arch/powerpc/kernel/ppc_ksyms.c          |   6 -
 arch/powerpc/kernel/process.c            | 471 ++++++++++++++++++-------------
 arch/powerpc/kernel/signal_32.c          |  22 +-
 arch/powerpc/kernel/signal_64.c          |  22 +-
 arch/powerpc/kernel/swsusp.c             |   4 +-
 arch/powerpc/kernel/vector.S             | 112 +-------
 arch/powerpc/kvm/book3s_hv.c             |   5 +-
 arch/powerpc/kvm/book3s_paired_singles.c |   1 +
 arch/powerpc/kvm/book3s_pr.c             |  21 +-
 arch/powerpc/kvm/booke.c                 |   4 +
 arch/powerpc/lib/vmx-helper.c            |   2 +
 arch/powerpc/lib/xor_vmx.c               |   4 +
 drivers/crypto/vmx/aes.c                 |   6 +-
 drivers/crypto/vmx/aes_cbc.c             |   6 +-
 drivers/crypto/vmx/aes_ctr.c             |   6 +-
 drivers/crypto/vmx/ghash.c               |  12 +-
 lib/raid6/altivec.uc                     |   1 +
 29 files changed, 376 insertions(+), 628 deletions(-)

-- 
2.5.0

^ permalink raw reply	[flat|nested] 32+ messages in thread
* [PATCH 01/19] powerpc: Don't disable kernel FP/VMX/VSX MSR bits on context switch
@ 2015-10-28  0:50 Anton Blanchard
  2015-10-28  0:51 ` [PATCH 14/19] powerpc: Add ppc_strict_facility_enable boot option Anton Blanchard
  0 siblings, 1 reply; 32+ messages in thread
From: Anton Blanchard @ 2015-10-28  0:50 UTC (permalink / raw)
  To: benh, paulus, mpe, mikey, cyrilbur; +Cc: linuxppc-dev

Writing the MSR is slow, so we want to avoid it whenever possible.

A subsequent patch will add a debug option that strictly manages the
FP/VMX/VSX unavailable bits. For now just remove it, matching what
we do in other areas of the kernel (eg enable_kernel_altivec()).

A context switch microbenchmark using yield():

http://ozlabs.org/~anton/junkcode/context_switch2.c

./context_switch2 --test=yield --fp 0 0

shows an improvement of almost 3% on POWER8.

Signed-off-by: Anton Blanchard <anton@samba.org>
---
 arch/powerpc/kernel/entry_64.S | 15 +--------------
 1 file changed, 1 insertion(+), 14 deletions(-)

diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
index a94f155..93bb284 100644
--- a/arch/powerpc/kernel/entry_64.S
+++ b/arch/powerpc/kernel/entry_64.S
@@ -453,26 +453,13 @@ _GLOBAL(_switch)
 	SAVE_8GPRS(14, r1)
 	SAVE_10GPRS(22, r1)
 	mflr	r20		/* Return to switch caller */
-	mfmsr	r22
-	li	r0, MSR_FP
-#ifdef CONFIG_VSX
-BEGIN_FTR_SECTION
-	oris	r0,r0,MSR_VSX@h	/* Disable VSX */
-END_FTR_SECTION_IFSET(CPU_FTR_VSX)
-#endif /* CONFIG_VSX */
 #ifdef CONFIG_ALTIVEC
 BEGIN_FTR_SECTION
-	oris	r0,r0,MSR_VEC@h	/* Disable altivec */
 	mfspr	r24,SPRN_VRSAVE	/* save vrsave register value */
 	std	r24,THREAD_VRSAVE(r3)
 END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC)
 #endif /* CONFIG_ALTIVEC */
-	and.	r0,r0,r22
-	beq+	1f
-	andc	r22,r22,r0
-	MTMSRD(r22)
-	isync
-1:	std	r20,_NIP(r1)
+	std	r20,_NIP(r1)
 	mfcr	r23
 	std	r23,_CCR(r1)
 	std	r1,KSP(r3)	/* Set old stack pointer */
-- 
2.5.0

^ permalink raw reply related	[flat|nested] 32+ messages in thread

end of thread, other threads:[~2017-09-02  3:48 UTC | newest]

Thread overview: 32+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-29  0:43 [PATCH 00/19] Context switch improvements Anton Blanchard
2015-10-29  0:43 ` [PATCH 01/19] powerpc: Don't disable kernel FP/VMX/VSX MSR bits on context switch Anton Blanchard
2015-12-07 10:30   ` [01/19] " Michael Ellerman
2015-10-29  0:43 ` [PATCH 02/19] powerpc: Don't disable MSR bits in do_load_up_transact_*() functions Anton Blanchard
2015-10-29  0:43 ` [PATCH 03/19] powerpc: Create context switch helpers save_sprs() and restore_sprs() Anton Blanchard
2017-09-02  3:42   ` Benjamin Herrenschmidt
2015-10-29  0:43 ` [PATCH 04/19] powerpc: Remove redundant mflr in _switch Anton Blanchard
2015-10-29  0:43 ` [PATCH 05/19] powerpc: Remove UP only lazy floating point and vector optimisations Anton Blanchard
2015-10-29  0:43 ` [PATCH 06/19] powerpc: Simplify TM restore checks Anton Blanchard
2015-10-29  0:43 ` [PATCH 07/19] powerpc: Create mtmsrd_isync() Anton Blanchard
2015-12-01 11:23   ` Michael Ellerman
2015-12-01 23:25     ` Michael Ellerman
2017-09-02  3:44   ` Benjamin Herrenschmidt
2015-10-29  0:44 ` [PATCH 08/19] powerpc: Remove NULL task struct pointer checks in FP and vector code Anton Blanchard
2015-10-29  0:44 ` [PATCH 09/19] powerpc: Move part of giveup_fpu,altivec,spe into c Anton Blanchard
2015-12-01 11:17   ` Michael Ellerman
2015-10-29  0:44 ` [PATCH 10/19] powerpc: Move part of giveup_vsx " Anton Blanchard
2015-10-29  0:44 ` [PATCH 11/19] crypto: vmx: Only call enable_kernel_vsx() Anton Blanchard
2015-10-29  0:44 ` [PATCH 12/19] powerpc: Create msr_check_and_{set,clear}() Anton Blanchard
2015-10-29  7:25   ` kbuild test robot
2015-10-29  0:44 ` [PATCH 13/19] powerpc: Create disable_kernel_{fp,altivec,vsx,spe}() Anton Blanchard
2015-10-29  0:44 ` [PATCH 14/19] powerpc: Add ppc_strict_facility_enable boot option Anton Blanchard
2017-09-02  3:48   ` Benjamin Herrenschmidt
2015-10-29  0:44 ` [PATCH 15/19] powerpc: Remove fp_enable() and vec_enable(), use msr_check_and_{set, clear}() Anton Blanchard
2015-10-29  0:44 ` [PATCH 16/19] powerpc: create giveup_all() Anton Blanchard
2015-12-02  8:24   ` Michael Ellerman
2015-10-29  0:44 ` [PATCH 17/19] powerpc: create flush_all_to_thread() Anton Blanchard
2015-10-29  0:44 ` [PATCH 18/19] powerpc: Rearrange __switch_to() Anton Blanchard
2015-10-29  0:44 ` [PATCH 19/19] powerpc: clean up asm/switch_to.h Anton Blanchard
2015-12-02  8:42 ` [PATCH 00/19] Context switch improvements Anshuman Khandual
2015-12-02 22:37   ` Michael Neuling
  -- strict thread matches above, loose matches on Subject: below --
2015-10-28  0:50 [PATCH 01/19] powerpc: Don't disable kernel FP/VMX/VSX MSR bits on context switch Anton Blanchard
2015-10-28  0:51 ` [PATCH 14/19] powerpc: Add ppc_strict_facility_enable boot option Anton Blanchard

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.