ACK: [SRU][Disco][PATCH] KVM: PPC: Book3S: Add count cache flush parameters to kvmppc_get_cpu_char()
Kleber Souza
kleber.souza at canonical.com
Mon Sep 2 15:53:29 UTC 2019
On 9/2/19 5:35 PM, Juerg Haefliger wrote:
> From: Suraj Jitindar Singh <sjitindarsingh at gmail.com>
>
> BugLink: https://bugs.launchpad.net/bugs/1822870
> BugLink: https://bugs.launchpad.net/bugs/1832622
>
> Add KVM_PPC_CPU_CHAR_BCCTR_FLUSH_ASSIST &
> KVM_PPC_CPU_BEHAV_FLUSH_COUNT_CACHE to the characteristics returned
> from the H_GET_CPU_CHARACTERISTICS H-CALL, as queried from either the
> hypervisor or the device tree.
>
> Signed-off-by: Suraj Jitindar Singh <sjitindarsingh at gmail.com>
> Signed-off-by: Paul Mackerras <paulus at ozlabs.org>
> (cherry picked from commit 2b57ecd0208f7ac0b20b1b171698f027481a39f6)
> Signed-off-by: Juerg Haefliger <juergh at canonical.com>
Acked-by: Kleber Sacilotto de Souza <kleber.souza at canonical.com>
> ---
> arch/powerpc/include/uapi/asm/kvm.h | 2 ++
> arch/powerpc/kvm/powerpc.c | 18 ++++++++++++++----
> 2 files changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/arch/powerpc/include/uapi/asm/kvm.h b/arch/powerpc/include/uapi/asm/kvm.h
> index 8c876c166ef2..26ca425f4c2c 100644
> --- a/arch/powerpc/include/uapi/asm/kvm.h
> +++ b/arch/powerpc/include/uapi/asm/kvm.h
> @@ -463,10 +463,12 @@ struct kvm_ppc_cpu_char {
> #define KVM_PPC_CPU_CHAR_BR_HINT_HONOURED (1ULL << 58)
> #define KVM_PPC_CPU_CHAR_MTTRIG_THR_RECONF (1ULL << 57)
> #define KVM_PPC_CPU_CHAR_COUNT_CACHE_DIS (1ULL << 56)
> +#define KVM_PPC_CPU_CHAR_BCCTR_FLUSH_ASSIST (1ull << 54)
>
> #define KVM_PPC_CPU_BEHAV_FAVOUR_SECURITY (1ULL << 63)
> #define KVM_PPC_CPU_BEHAV_L1D_FLUSH_PR (1ULL << 62)
> #define KVM_PPC_CPU_BEHAV_BNDS_CHK_SPEC_BAR (1ULL << 61)
> +#define KVM_PPC_CPU_BEHAV_FLUSH_COUNT_CACHE (1ull << 58)
>
> /* Per-vcpu XICS interrupt controller state */
> #define KVM_REG_PPC_ICP_STATE (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8c)
> diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c
> index 399cb4b779e1..150abc009659 100644
> --- a/arch/powerpc/kvm/powerpc.c
> +++ b/arch/powerpc/kvm/powerpc.c
> @@ -2192,10 +2192,12 @@ static int pseries_get_cpu_char(struct kvm_ppc_cpu_char *cp)
> KVM_PPC_CPU_CHAR_L1D_THREAD_PRIV |
> KVM_PPC_CPU_CHAR_BR_HINT_HONOURED |
> KVM_PPC_CPU_CHAR_MTTRIG_THR_RECONF |
> - KVM_PPC_CPU_CHAR_COUNT_CACHE_DIS;
> + KVM_PPC_CPU_CHAR_COUNT_CACHE_DIS |
> + KVM_PPC_CPU_CHAR_BCCTR_FLUSH_ASSIST;
> cp->behaviour_mask = KVM_PPC_CPU_BEHAV_FAVOUR_SECURITY |
> KVM_PPC_CPU_BEHAV_L1D_FLUSH_PR |
> - KVM_PPC_CPU_BEHAV_BNDS_CHK_SPEC_BAR;
> + KVM_PPC_CPU_BEHAV_BNDS_CHK_SPEC_BAR |
> + KVM_PPC_CPU_BEHAV_FLUSH_COUNT_CACHE;
> }
> return 0;
> }
> @@ -2254,12 +2256,16 @@ static int kvmppc_get_cpu_char(struct kvm_ppc_cpu_char *cp)
> if (have_fw_feat(fw_features, "enabled",
> "fw-count-cache-disabled"))
> cp->character |= KVM_PPC_CPU_CHAR_COUNT_CACHE_DIS;
> + if (have_fw_feat(fw_features, "enabled",
> + "fw-count-cache-flush-bcctr2,0,0"))
> + cp->character |= KVM_PPC_CPU_CHAR_BCCTR_FLUSH_ASSIST;
> cp->character_mask = KVM_PPC_CPU_CHAR_SPEC_BAR_ORI31 |
> KVM_PPC_CPU_CHAR_BCCTRL_SERIALISED |
> KVM_PPC_CPU_CHAR_L1D_FLUSH_ORI30 |
> KVM_PPC_CPU_CHAR_L1D_FLUSH_TRIG2 |
> KVM_PPC_CPU_CHAR_L1D_THREAD_PRIV |
> - KVM_PPC_CPU_CHAR_COUNT_CACHE_DIS;
> + KVM_PPC_CPU_CHAR_COUNT_CACHE_DIS |
> + KVM_PPC_CPU_CHAR_BCCTR_FLUSH_ASSIST;
>
> if (have_fw_feat(fw_features, "enabled",
> "speculation-policy-favor-security"))
> @@ -2270,9 +2276,13 @@ static int kvmppc_get_cpu_char(struct kvm_ppc_cpu_char *cp)
> if (!have_fw_feat(fw_features, "disabled",
> "needs-spec-barrier-for-bound-checks"))
> cp->behaviour |= KVM_PPC_CPU_BEHAV_BNDS_CHK_SPEC_BAR;
> + if (have_fw_feat(fw_features, "enabled",
> + "needs-count-cache-flush-on-context-switch"))
> + cp->behaviour |= KVM_PPC_CPU_BEHAV_FLUSH_COUNT_CACHE;
> cp->behaviour_mask = KVM_PPC_CPU_BEHAV_FAVOUR_SECURITY |
> KVM_PPC_CPU_BEHAV_L1D_FLUSH_PR |
> - KVM_PPC_CPU_BEHAV_BNDS_CHK_SPEC_BAR;
> + KVM_PPC_CPU_BEHAV_BNDS_CHK_SPEC_BAR |
> + KVM_PPC_CPU_BEHAV_FLUSH_COUNT_CACHE;
>
> of_node_put(fw_features);
> }
>
More information about the kernel-team
mailing list