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);
>
next prev 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 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).