Skip to content

Commit 2b57ecd

Browse files
sjitindarsinghpaulusmack
authored andcommitted
KVM: PPC: Book3S: Add count cache flush parameters to kvmppc_get_cpu_char()
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@gmail.com> Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
1 parent e74d53e commit 2b57ecd

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

arch/powerpc/include/uapi/asm/kvm.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,10 +463,12 @@ struct kvm_ppc_cpu_char {
463463
#define KVM_PPC_CPU_CHAR_BR_HINT_HONOURED (1ULL << 58)
464464
#define KVM_PPC_CPU_CHAR_MTTRIG_THR_RECONF (1ULL << 57)
465465
#define KVM_PPC_CPU_CHAR_COUNT_CACHE_DIS (1ULL << 56)
466+
#define KVM_PPC_CPU_CHAR_BCCTR_FLUSH_ASSIST (1ull << 54)
466467

467468
#define KVM_PPC_CPU_BEHAV_FAVOUR_SECURITY (1ULL << 63)
468469
#define KVM_PPC_CPU_BEHAV_L1D_FLUSH_PR (1ULL << 62)
469470
#define KVM_PPC_CPU_BEHAV_BNDS_CHK_SPEC_BAR (1ULL << 61)
471+
#define KVM_PPC_CPU_BEHAV_FLUSH_COUNT_CACHE (1ull << 58)
470472

471473
/* Per-vcpu XICS interrupt controller state */
472474
#define KVM_REG_PPC_ICP_STATE (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8c)

arch/powerpc/kvm/powerpc.c

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2189,10 +2189,12 @@ static int pseries_get_cpu_char(struct kvm_ppc_cpu_char *cp)
21892189
KVM_PPC_CPU_CHAR_L1D_THREAD_PRIV |
21902190
KVM_PPC_CPU_CHAR_BR_HINT_HONOURED |
21912191
KVM_PPC_CPU_CHAR_MTTRIG_THR_RECONF |
2192-
KVM_PPC_CPU_CHAR_COUNT_CACHE_DIS;
2192+
KVM_PPC_CPU_CHAR_COUNT_CACHE_DIS |
2193+
KVM_PPC_CPU_CHAR_BCCTR_FLUSH_ASSIST;
21932194
cp->behaviour_mask = KVM_PPC_CPU_BEHAV_FAVOUR_SECURITY |
21942195
KVM_PPC_CPU_BEHAV_L1D_FLUSH_PR |
2195-
KVM_PPC_CPU_BEHAV_BNDS_CHK_SPEC_BAR;
2196+
KVM_PPC_CPU_BEHAV_BNDS_CHK_SPEC_BAR |
2197+
KVM_PPC_CPU_BEHAV_FLUSH_COUNT_CACHE;
21962198
}
21972199
return 0;
21982200
}
@@ -2251,12 +2253,16 @@ static int kvmppc_get_cpu_char(struct kvm_ppc_cpu_char *cp)
22512253
if (have_fw_feat(fw_features, "enabled",
22522254
"fw-count-cache-disabled"))
22532255
cp->character |= KVM_PPC_CPU_CHAR_COUNT_CACHE_DIS;
2256+
if (have_fw_feat(fw_features, "enabled",
2257+
"fw-count-cache-flush-bcctr2,0,0"))
2258+
cp->character |= KVM_PPC_CPU_CHAR_BCCTR_FLUSH_ASSIST;
22542259
cp->character_mask = KVM_PPC_CPU_CHAR_SPEC_BAR_ORI31 |
22552260
KVM_PPC_CPU_CHAR_BCCTRL_SERIALISED |
22562261
KVM_PPC_CPU_CHAR_L1D_FLUSH_ORI30 |
22572262
KVM_PPC_CPU_CHAR_L1D_FLUSH_TRIG2 |
22582263
KVM_PPC_CPU_CHAR_L1D_THREAD_PRIV |
2259-
KVM_PPC_CPU_CHAR_COUNT_CACHE_DIS;
2264+
KVM_PPC_CPU_CHAR_COUNT_CACHE_DIS |
2265+
KVM_PPC_CPU_CHAR_BCCTR_FLUSH_ASSIST;
22602266

22612267
if (have_fw_feat(fw_features, "enabled",
22622268
"speculation-policy-favor-security"))
@@ -2267,9 +2273,13 @@ static int kvmppc_get_cpu_char(struct kvm_ppc_cpu_char *cp)
22672273
if (!have_fw_feat(fw_features, "disabled",
22682274
"needs-spec-barrier-for-bound-checks"))
22692275
cp->behaviour |= KVM_PPC_CPU_BEHAV_BNDS_CHK_SPEC_BAR;
2276+
if (have_fw_feat(fw_features, "enabled",
2277+
"needs-count-cache-flush-on-context-switch"))
2278+
cp->behaviour |= KVM_PPC_CPU_BEHAV_FLUSH_COUNT_CACHE;
22702279
cp->behaviour_mask = KVM_PPC_CPU_BEHAV_FAVOUR_SECURITY |
22712280
KVM_PPC_CPU_BEHAV_L1D_FLUSH_PR |
2272-
KVM_PPC_CPU_BEHAV_BNDS_CHK_SPEC_BAR;
2281+
KVM_PPC_CPU_BEHAV_BNDS_CHK_SPEC_BAR |
2282+
KVM_PPC_CPU_BEHAV_FLUSH_COUNT_CACHE;
22732283

22742284
of_node_put(fw_features);
22752285
}

0 commit comments

Comments
 (0)