From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
To: Paul Mackerras <paulus@ozlabs.org>,
kvm@vger.kernel.org, kvm-ppc@vger.kernel.org,
linuxppc-dev@ozlabs.org
Subject: Re: [PATCH 07/13] KVM: PPC: Book3S HV: Adjust host/guest context switch for POWER9
Date: Fri, 18 Nov 2016 14:47:47 +0000 [thread overview]
Message-ID: <8737ioony4.fsf@linux.vnet.ibm.com> (raw)
In-Reply-To: <1479454122-26994-8-git-send-email-paulus@ozlabs.org>
Paul Mackerras <paulus@ozlabs.org> writes:
> Some special-purpose registers that were present and accessible
> by guests on POWER8 no longer exist on POWER9, so this adds
> feature sections to ensure that we don't try to context-switch
> them when going into or out of a guest on POWER9. These are
> all relatively obscure, rarely-used registers, but we had to
> context-switch them on POWER8 to avoid creating a covert channel.
> They are: SPMC1, SPMC2, MMCRS, CSIGR, TACR, TCSCR, and ACOP.
We don't need to context-switch them even when running a power8 compat
guest ?
>
> Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
> ---
> arch/powerpc/kvm/book3s_hv_rmhandlers.S | 50 ++++++++++++++++++++-------------
> 1 file changed, 30 insertions(+), 20 deletions(-)
>
> diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
> index dc25467..d422014 100644
> --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S
> +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
> @@ -752,14 +752,16 @@ END_FTR_SECTION_IFSET(CPU_FTR_PMAO_BUG)
> BEGIN_FTR_SECTION
> ld r5, VCPU_MMCR + 24(r4)
> ld r6, VCPU_SIER(r4)
> + mtspr SPRN_MMCR2, r5
> + mtspr SPRN_SIER, r6
> +BEGIN_FTR_SECTION_NESTED(96)
> lwz r7, VCPU_PMC + 24(r4)
> lwz r8, VCPU_PMC + 28(r4)
> ld r9, VCPU_MMCR + 32(r4)
> - mtspr SPRN_MMCR2, r5
> - mtspr SPRN_SIER, r6
> mtspr SPRN_SPMC1, r7
> mtspr SPRN_SPMC2, r8
> mtspr SPRN_MMCRS, r9
> +END_FTR_SECTION_NESTED(CPU_FTR_ARCH_300, 0, 96)
> END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
> mtspr SPRN_MMCR0, r3
> isync
> @@ -815,20 +817,22 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S)
> mtspr SPRN_EBBHR, r8
> ld r5, VCPU_EBBRR(r4)
> ld r6, VCPU_BESCR(r4)
> - ld r7, VCPU_CSIGR(r4)
> - ld r8, VCPU_TACR(r4)
> + lwz r7, VCPU_GUEST_PID(r4)
> + ld r8, VCPU_WORT(r4)
> mtspr SPRN_EBBRR, r5
> mtspr SPRN_BESCR, r6
> - mtspr SPRN_CSIGR, r7
> - mtspr SPRN_TACR, r8
> + mtspr SPRN_PID, r7
> + mtspr SPRN_WORT, r8
> +BEGIN_FTR_SECTION
> ld r5, VCPU_TCSCR(r4)
> ld r6, VCPU_ACOP(r4)
> - lwz r7, VCPU_GUEST_PID(r4)
> - ld r8, VCPU_WORT(r4)
> + ld r7, VCPU_CSIGR(r4)
> + ld r8, VCPU_TACR(r4)
> mtspr SPRN_TCSCR, r5
> mtspr SPRN_ACOP, r6
> - mtspr SPRN_PID, r7
> - mtspr SPRN_WORT, r8
> + mtspr SPRN_CSIGR, r7
> + mtspr SPRN_TACR, r8
> +END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300)
> 8:
>
> /*
> @@ -1343,20 +1347,22 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S)
> std r8, VCPU_EBBHR(r9)
> mfspr r5, SPRN_EBBRR
> mfspr r6, SPRN_BESCR
> - mfspr r7, SPRN_CSIGR
> - mfspr r8, SPRN_TACR
> + mfspr r7, SPRN_PID
> + mfspr r8, SPRN_WORT
> std r5, VCPU_EBBRR(r9)
> std r6, VCPU_BESCR(r9)
> - std r7, VCPU_CSIGR(r9)
> - std r8, VCPU_TACR(r9)
> + stw r7, VCPU_GUEST_PID(r9)
> + std r8, VCPU_WORT(r9)
> +BEGIN_FTR_SECTION
> mfspr r5, SPRN_TCSCR
> mfspr r6, SPRN_ACOP
> - mfspr r7, SPRN_PID
> - mfspr r8, SPRN_WORT
> + mfspr r7, SPRN_CSIGR
> + mfspr r8, SPRN_TACR
> std r5, VCPU_TCSCR(r9)
> std r6, VCPU_ACOP(r9)
> - stw r7, VCPU_GUEST_PID(r9)
> - std r8, VCPU_WORT(r9)
> + std r7, VCPU_CSIGR(r9)
> + std r8, VCPU_TACR(r9)
> +END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300)
> /*
> * Restore various registers to 0, where non-zero values
> * set by the guest could disrupt the host.
> @@ -1365,12 +1371,14 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S)
> mtspr SPRN_IAMR, r0
> mtspr SPRN_CIABR, r0
> mtspr SPRN_DAWRX, r0
> - mtspr SPRN_TCSCR, r0
> mtspr SPRN_WORT, r0
> +BEGIN_FTR_SECTION
> + mtspr SPRN_TCSCR, r0
> /* Set MMCRS to 1<<31 to freeze and disable the SPMC counters */
> li r0, 1
> sldi r0, r0, 31
> mtspr SPRN_MMCRS, r0
> +END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300)
> 8:
>
> /* Save and reset AMR and UAMOR before turning on the MMU */
> @@ -1504,15 +1512,17 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
> stw r8, VCPU_PMC + 20(r9)
> BEGIN_FTR_SECTION
> mfspr r5, SPRN_SIER
> + std r5, VCPU_SIER(r9)
> +BEGIN_FTR_SECTION_NESTED(96)
> mfspr r6, SPRN_SPMC1
> mfspr r7, SPRN_SPMC2
> mfspr r8, SPRN_MMCRS
> - std r5, VCPU_SIER(r9)
> stw r6, VCPU_PMC + 24(r9)
> stw r7, VCPU_PMC + 28(r9)
> std r8, VCPU_MMCR + 32(r9)
> lis r4, 0x8000
> mtspr SPRN_MMCRS, r4
> +END_FTR_SECTION_NESTED(CPU_FTR_ARCH_300, 0, 96)
> END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
> 22:
> /* Clear out SLB */
> --
> 2.7.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
To: Paul Mackerras <paulus@ozlabs.org>,
kvm@vger.kernel.org, kvm-ppc@vger.kernel.org,
linuxppc-dev@ozlabs.org
Subject: Re: [PATCH 07/13] KVM: PPC: Book3S HV: Adjust host/guest context switch for POWER9
Date: Fri, 18 Nov 2016 20:05:47 +0530 [thread overview]
Message-ID: <8737ioony4.fsf@linux.vnet.ibm.com> (raw)
In-Reply-To: <1479454122-26994-8-git-send-email-paulus@ozlabs.org>
Paul Mackerras <paulus@ozlabs.org> writes:
> Some special-purpose registers that were present and accessible
> by guests on POWER8 no longer exist on POWER9, so this adds
> feature sections to ensure that we don't try to context-switch
> them when going into or out of a guest on POWER9. These are
> all relatively obscure, rarely-used registers, but we had to
> context-switch them on POWER8 to avoid creating a covert channel.
> They are: SPMC1, SPMC2, MMCRS, CSIGR, TACR, TCSCR, and ACOP.
We don't need to context-switch them even when running a power8 compat
guest ?
>
> Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
> ---
> arch/powerpc/kvm/book3s_hv_rmhandlers.S | 50 ++++++++++++++++++++-------------
> 1 file changed, 30 insertions(+), 20 deletions(-)
>
> diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
> index dc25467..d422014 100644
> --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S
> +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
> @@ -752,14 +752,16 @@ END_FTR_SECTION_IFSET(CPU_FTR_PMAO_BUG)
> BEGIN_FTR_SECTION
> ld r5, VCPU_MMCR + 24(r4)
> ld r6, VCPU_SIER(r4)
> + mtspr SPRN_MMCR2, r5
> + mtspr SPRN_SIER, r6
> +BEGIN_FTR_SECTION_NESTED(96)
> lwz r7, VCPU_PMC + 24(r4)
> lwz r8, VCPU_PMC + 28(r4)
> ld r9, VCPU_MMCR + 32(r4)
> - mtspr SPRN_MMCR2, r5
> - mtspr SPRN_SIER, r6
> mtspr SPRN_SPMC1, r7
> mtspr SPRN_SPMC2, r8
> mtspr SPRN_MMCRS, r9
> +END_FTR_SECTION_NESTED(CPU_FTR_ARCH_300, 0, 96)
> END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
> mtspr SPRN_MMCR0, r3
> isync
> @@ -815,20 +817,22 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S)
> mtspr SPRN_EBBHR, r8
> ld r5, VCPU_EBBRR(r4)
> ld r6, VCPU_BESCR(r4)
> - ld r7, VCPU_CSIGR(r4)
> - ld r8, VCPU_TACR(r4)
> + lwz r7, VCPU_GUEST_PID(r4)
> + ld r8, VCPU_WORT(r4)
> mtspr SPRN_EBBRR, r5
> mtspr SPRN_BESCR, r6
> - mtspr SPRN_CSIGR, r7
> - mtspr SPRN_TACR, r8
> + mtspr SPRN_PID, r7
> + mtspr SPRN_WORT, r8
> +BEGIN_FTR_SECTION
> ld r5, VCPU_TCSCR(r4)
> ld r6, VCPU_ACOP(r4)
> - lwz r7, VCPU_GUEST_PID(r4)
> - ld r8, VCPU_WORT(r4)
> + ld r7, VCPU_CSIGR(r4)
> + ld r8, VCPU_TACR(r4)
> mtspr SPRN_TCSCR, r5
> mtspr SPRN_ACOP, r6
> - mtspr SPRN_PID, r7
> - mtspr SPRN_WORT, r8
> + mtspr SPRN_CSIGR, r7
> + mtspr SPRN_TACR, r8
> +END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300)
> 8:
>
> /*
> @@ -1343,20 +1347,22 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S)
> std r8, VCPU_EBBHR(r9)
> mfspr r5, SPRN_EBBRR
> mfspr r6, SPRN_BESCR
> - mfspr r7, SPRN_CSIGR
> - mfspr r8, SPRN_TACR
> + mfspr r7, SPRN_PID
> + mfspr r8, SPRN_WORT
> std r5, VCPU_EBBRR(r9)
> std r6, VCPU_BESCR(r9)
> - std r7, VCPU_CSIGR(r9)
> - std r8, VCPU_TACR(r9)
> + stw r7, VCPU_GUEST_PID(r9)
> + std r8, VCPU_WORT(r9)
> +BEGIN_FTR_SECTION
> mfspr r5, SPRN_TCSCR
> mfspr r6, SPRN_ACOP
> - mfspr r7, SPRN_PID
> - mfspr r8, SPRN_WORT
> + mfspr r7, SPRN_CSIGR
> + mfspr r8, SPRN_TACR
> std r5, VCPU_TCSCR(r9)
> std r6, VCPU_ACOP(r9)
> - stw r7, VCPU_GUEST_PID(r9)
> - std r8, VCPU_WORT(r9)
> + std r7, VCPU_CSIGR(r9)
> + std r8, VCPU_TACR(r9)
> +END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300)
> /*
> * Restore various registers to 0, where non-zero values
> * set by the guest could disrupt the host.
> @@ -1365,12 +1371,14 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S)
> mtspr SPRN_IAMR, r0
> mtspr SPRN_CIABR, r0
> mtspr SPRN_DAWRX, r0
> - mtspr SPRN_TCSCR, r0
> mtspr SPRN_WORT, r0
> +BEGIN_FTR_SECTION
> + mtspr SPRN_TCSCR, r0
> /* Set MMCRS to 1<<31 to freeze and disable the SPMC counters */
> li r0, 1
> sldi r0, r0, 31
> mtspr SPRN_MMCRS, r0
> +END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300)
> 8:
>
> /* Save and reset AMR and UAMOR before turning on the MMU */
> @@ -1504,15 +1512,17 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
> stw r8, VCPU_PMC + 20(r9)
> BEGIN_FTR_SECTION
> mfspr r5, SPRN_SIER
> + std r5, VCPU_SIER(r9)
> +BEGIN_FTR_SECTION_NESTED(96)
> mfspr r6, SPRN_SPMC1
> mfspr r7, SPRN_SPMC2
> mfspr r8, SPRN_MMCRS
> - std r5, VCPU_SIER(r9)
> stw r6, VCPU_PMC + 24(r9)
> stw r7, VCPU_PMC + 28(r9)
> std r8, VCPU_MMCR + 32(r9)
> lis r4, 0x8000
> mtspr SPRN_MMCRS, r4
> +END_FTR_SECTION_NESTED(CPU_FTR_ARCH_300, 0, 96)
> END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
> 22:
> /* Clear out SLB */
> --
> 2.7.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2016-11-18 14:47 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-18 7:28 [PATCH 00/13] KVM: PPC: Support POWER9 guests Paul Mackerras
2016-11-18 7:28 ` Paul Mackerras
2016-11-18 7:28 ` [PATCH 01/13] powerpc/64: Add some more SPRs and SPR bits for POWER9 Paul Mackerras
2016-11-18 7:28 ` Paul Mackerras
2016-11-18 7:28 ` [PATCH 02/13] powerpc/64: Provide functions for accessing POWER9 partition table Paul Mackerras
2016-11-18 7:28 ` Paul Mackerras
2016-11-18 14:27 ` Aneesh Kumar K.V
2016-11-18 14:39 ` Aneesh Kumar K.V
2016-11-19 4:19 ` Paul Mackerras
2016-11-19 4:19 ` Paul Mackerras
2016-11-19 6:35 ` Aneesh Kumar K.V
2016-11-19 6:47 ` Aneesh Kumar K.V
2016-11-21 2:14 ` Paul Mackerras
2016-11-21 2:14 ` Paul Mackerras
2016-11-19 0:45 ` Balbir Singh
2016-11-19 0:45 ` Balbir Singh
2016-11-19 4:23 ` Paul Mackerras
2016-11-19 4:23 ` Paul Mackerras
2016-11-18 7:28 ` [PATCH 03/13] powerpc/powernv: Define real-mode versions of OPAL XICS accessors Paul Mackerras
2016-11-18 7:28 ` Paul Mackerras
2016-11-18 7:28 ` [PATCH 04/13] KVM: PPC: Book3S HV: Don't lose hardware R/C bit updates in H_PROTECT Paul Mackerras
2016-11-18 7:28 ` Paul Mackerras
2016-11-18 7:28 ` [PATCH 05/13] KVM: PPC: Book3S HV: Adapt to new HPTE format on POWER9 Paul Mackerras
2016-11-18 7:28 ` Paul Mackerras
2016-11-19 0:38 ` Balbir Singh
2016-11-19 0:38 ` Balbir Singh
2016-11-21 2:02 ` Paul Mackerras
2016-11-21 2:02 ` Paul Mackerras
2016-11-18 7:28 ` [PATCH 06/13] KVM: PPC: Book3S HV: Set partition table rather than SDR1 " Paul Mackerras
2016-11-18 7:28 ` Paul Mackerras
2016-11-19 1:01 ` Balbir Singh
2016-11-19 1:01 ` Balbir Singh
2016-11-18 7:28 ` [PATCH 07/13] KVM: PPC: Book3S HV: Adjust host/guest context switch for POWER9 Paul Mackerras
2016-11-18 7:28 ` Paul Mackerras
2016-11-18 14:35 ` Aneesh Kumar K.V [this message]
2016-11-18 14:47 ` Aneesh Kumar K.V
2016-11-19 4:02 ` Paul Mackerras
2016-11-19 4:02 ` Paul Mackerras
2016-11-18 7:28 ` [PATCH 08/13] KVM: PPC: Book3S HV: Add new POWER9 guest-accessible SPRs Paul Mackerras
2016-11-18 7:28 ` Paul Mackerras
2016-11-18 7:28 ` [PATCH 09/13] KVM: PPC: Book3S HV: Adapt TLB invalidations to work on POWER9 Paul Mackerras
2016-11-18 7:28 ` Paul Mackerras
2016-11-18 14:41 ` Aneesh Kumar K.V
2016-11-18 14:53 ` Aneesh Kumar K.V
2016-11-18 21:57 ` Benjamin Herrenschmidt
2016-11-18 21:57 ` Benjamin Herrenschmidt
2016-11-19 4:14 ` Paul Mackerras
2016-11-19 4:14 ` Paul Mackerras
2016-11-19 4:41 ` Benjamin Herrenschmidt
2016-11-19 4:41 ` Benjamin Herrenschmidt
2016-11-19 4:13 ` Paul Mackerras
2016-11-19 4:13 ` Paul Mackerras
2016-11-18 7:28 ` [PATCH 10/13] KVM: PPC: Book3S HV: Use msgsnd for IPIs to other cores " Paul Mackerras
2016-11-18 7:28 ` Paul Mackerras
2016-11-18 14:47 ` Aneesh Kumar K.V
2016-11-18 14:59 ` Aneesh Kumar K.V
2016-11-19 3:53 ` Paul Mackerras
2016-11-19 3:53 ` Paul Mackerras
2016-11-18 7:28 ` [PATCH 11/13] KVM: PPC: Book3S HV: Use OPAL XICS emulation " Paul Mackerras
2016-11-18 7:28 ` Paul Mackerras
2016-11-18 7:28 ` [PATCH 12/13] KVM: PPC: Book3S HV: Use stop instruction rather than nap " Paul Mackerras
2016-11-18 7:28 ` Paul Mackerras
2016-11-18 7:28 ` [PATCH 13/13] KVM: PPC: Book3S HV: Treat POWER9 CPU threads as independent subcores Paul Mackerras
2016-11-18 7:28 ` Paul Mackerras
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=8737ioony4.fsf@linux.vnet.ibm.com \
--to=aneesh.kumar@linux.vnet.ibm.com \
--cc=kvm-ppc@vger.kernel.org \
--cc=kvm@vger.kernel.org \
--cc=linuxppc-dev@ozlabs.org \
--cc=paulus@ozlabs.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.