All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Anton Blanchard <anton@samba.org>,
	paulus@samba.org, mpe@ellerman.id.au, mikey@neuling.org,
	cyrilbur@gmail.com, scottwood@freescale.com
Cc: linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH 07/19] powerpc: Create mtmsrd_isync()
Date: Sat, 02 Sep 2017 13:44:42 +1000	[thread overview]
Message-ID: <1504323882.4974.101.camel@kernel.crashing.org> (raw)
In-Reply-To: <1446079451-8774-8-git-send-email-anton@samba.org>

On Thu, 2015-10-29 at 11:43 +1100, Anton Blanchard wrote:
> mtmsrd_isync() will do an mtmsrd followed by an isync on older
> processors. On newer processors we avoid the isync via a feature fixup.

The isync is needed specifically when enabling/disable FP etc... right
?

I'd like to make the name a bit clearer. Maybe something like
set_msr_fpvec() or maybe you can come up with something even better, ie
 use a name that represents what it's for rather than what it does.

> Signed-off-by: Anton Blanchard <anton@samba.org>
> ---
>  arch/powerpc/include/asm/reg.h |  8 ++++++++
>  arch/powerpc/kernel/process.c  | 30 ++++++++++++++++++++++--------
>  2 files changed, 30 insertions(+), 8 deletions(-)
> 
> diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h
> index a908ada..987dac0 100644
> --- a/arch/powerpc/include/asm/reg.h
> +++ b/arch/powerpc/include/asm/reg.h
> @@ -1193,12 +1193,20 @@
>  #define __mtmsrd(v, l)	asm volatile("mtmsrd %0," __stringify(l) \
>  				     : : "r" (v) : "memory")
>  #define mtmsr(v)	__mtmsrd((v), 0)
> +#define __MTMSR		"mtmsrd"
>  #else
>  #define mtmsr(v)	asm volatile("mtmsr %0" : \
>  				     : "r" ((unsigned long)(v)) \
>  				     : "memory")
> +#define __MTMSR		"mtmsr"
>  #endif
>  
> +static inline void mtmsr_isync(unsigned long val)
> +{
> +	asm volatile(__MTMSR " %0; " ASM_FTR_IFCLR("isync", "nop", %1) : :
> +			"r" (val), "i" (CPU_FTR_ARCH_206) : "memory");
> +}
> +
>  #define mfspr(rn)	({unsigned long rval; \
>  			asm volatile("mfspr %0," __stringify(rn) \
>  				: "=r" (rval)); rval;})
> diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
> index ef64219..5bf8ec2 100644
> --- a/arch/powerpc/kernel/process.c
> +++ b/arch/powerpc/kernel/process.c
> @@ -130,7 +130,10 @@ void enable_kernel_fp(void)
>  		check_if_tm_restore_required(current);
>  		giveup_fpu(current);
>  	} else {
> -		giveup_fpu(NULL);	/* just enables FP for kernel */
> +		u64 oldmsr = mfmsr();
> +
> +		if (!(oldmsr & MSR_FP))
> +			mtmsr_isync(oldmsr | MSR_FP);
>  	}
>  }
>  EXPORT_SYMBOL(enable_kernel_fp);
> @@ -144,7 +147,10 @@ void enable_kernel_altivec(void)
>  		check_if_tm_restore_required(current);
>  		giveup_altivec(current);
>  	} else {
> -		giveup_altivec_notask();
> +		u64 oldmsr = mfmsr();
> +
> +		if (!(oldmsr & MSR_VEC))
> +			mtmsr_isync(oldmsr | MSR_VEC);
>  	}
>  }
>  EXPORT_SYMBOL(enable_kernel_altivec);
> @@ -173,10 +179,14 @@ void enable_kernel_vsx(void)
>  {
>  	WARN_ON(preemptible());
>  
> -	if (current->thread.regs && (current->thread.regs->msr & MSR_VSX))
> +	if (current->thread.regs && (current->thread.regs->msr & MSR_VSX)) {
>  		giveup_vsx(current);
> -	else
> -		giveup_vsx(NULL);	/* just enable vsx for kernel - force */
> +	} else {
> +		u64 oldmsr = mfmsr();
> +
> +		if (!(oldmsr & MSR_VSX))
> +			mtmsr_isync(oldmsr | MSR_VSX);
> +	}
>  }
>  EXPORT_SYMBOL(enable_kernel_vsx);
>  
> @@ -209,10 +219,14 @@ void enable_kernel_spe(void)
>  {
>  	WARN_ON(preemptible());
>  
> -	if (current->thread.regs && (current->thread.regs->msr & MSR_SPE))
> +	if (current->thread.regs && (current->thread.regs->msr & MSR_SPE)) {
>  		giveup_spe(current);
> -	else
> -		giveup_spe(NULL);	/* just enable SPE for kernel - force */
> +	} else {
> +		u64 oldmsr = mfmsr();
> +
> +		if (!(oldmsr & MSR_SPE))
> +			mtmsr_isync(oldmsr | MSR_SPE);
> +	}
>  }
>  EXPORT_SYMBOL(enable_kernel_spe);
>  

  parent reply	other threads:[~2017-09-02  3:44 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
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:50 ` [PATCH 07/19] powerpc: Create mtmsrd_isync() Anton Blanchard

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=1504323882.4974.101.camel@kernel.crashing.org \
    --to=benh@kernel.crashing.org \
    --cc=anton@samba.org \
    --cc=cyrilbur@gmail.com \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mikey@neuling.org \
    --cc=mpe@ellerman.id.au \
    --cc=paulus@samba.org \
    --cc=scottwood@freescale.com \
    /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.