mirror of
https://github.com/torvalds/linux.git
synced 2024-12-26 04:42:12 +00:00
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>
This commit is contained in:
parent
e74d53e30e
commit
2b57ecd020
@ -463,10 +463,12 @@ struct kvm_ppc_cpu_char {
|
|||||||
#define KVM_PPC_CPU_CHAR_BR_HINT_HONOURED (1ULL << 58)
|
#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_MTTRIG_THR_RECONF (1ULL << 57)
|
||||||
#define KVM_PPC_CPU_CHAR_COUNT_CACHE_DIS (1ULL << 56)
|
#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_FAVOUR_SECURITY (1ULL << 63)
|
||||||
#define KVM_PPC_CPU_BEHAV_L1D_FLUSH_PR (1ULL << 62)
|
#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_BNDS_CHK_SPEC_BAR (1ULL << 61)
|
||||||
|
#define KVM_PPC_CPU_BEHAV_FLUSH_COUNT_CACHE (1ull << 58)
|
||||||
|
|
||||||
/* Per-vcpu XICS interrupt controller state */
|
/* Per-vcpu XICS interrupt controller state */
|
||||||
#define KVM_REG_PPC_ICP_STATE (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8c)
|
#define KVM_REG_PPC_ICP_STATE (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8c)
|
||||||
|
@ -2189,10 +2189,12 @@ static int pseries_get_cpu_char(struct kvm_ppc_cpu_char *cp)
|
|||||||
KVM_PPC_CPU_CHAR_L1D_THREAD_PRIV |
|
KVM_PPC_CPU_CHAR_L1D_THREAD_PRIV |
|
||||||
KVM_PPC_CPU_CHAR_BR_HINT_HONOURED |
|
KVM_PPC_CPU_CHAR_BR_HINT_HONOURED |
|
||||||
KVM_PPC_CPU_CHAR_MTTRIG_THR_RECONF |
|
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 |
|
cp->behaviour_mask = KVM_PPC_CPU_BEHAV_FAVOUR_SECURITY |
|
||||||
KVM_PPC_CPU_BEHAV_L1D_FLUSH_PR |
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -2251,12 +2253,16 @@ static int kvmppc_get_cpu_char(struct kvm_ppc_cpu_char *cp)
|
|||||||
if (have_fw_feat(fw_features, "enabled",
|
if (have_fw_feat(fw_features, "enabled",
|
||||||
"fw-count-cache-disabled"))
|
"fw-count-cache-disabled"))
|
||||||
cp->character |= KVM_PPC_CPU_CHAR_COUNT_CACHE_DIS;
|
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 |
|
cp->character_mask = KVM_PPC_CPU_CHAR_SPEC_BAR_ORI31 |
|
||||||
KVM_PPC_CPU_CHAR_BCCTRL_SERIALISED |
|
KVM_PPC_CPU_CHAR_BCCTRL_SERIALISED |
|
||||||
KVM_PPC_CPU_CHAR_L1D_FLUSH_ORI30 |
|
KVM_PPC_CPU_CHAR_L1D_FLUSH_ORI30 |
|
||||||
KVM_PPC_CPU_CHAR_L1D_FLUSH_TRIG2 |
|
KVM_PPC_CPU_CHAR_L1D_FLUSH_TRIG2 |
|
||||||
KVM_PPC_CPU_CHAR_L1D_THREAD_PRIV |
|
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",
|
if (have_fw_feat(fw_features, "enabled",
|
||||||
"speculation-policy-favor-security"))
|
"speculation-policy-favor-security"))
|
||||||
@ -2267,9 +2273,13 @@ static int kvmppc_get_cpu_char(struct kvm_ppc_cpu_char *cp)
|
|||||||
if (!have_fw_feat(fw_features, "disabled",
|
if (!have_fw_feat(fw_features, "disabled",
|
||||||
"needs-spec-barrier-for-bound-checks"))
|
"needs-spec-barrier-for-bound-checks"))
|
||||||
cp->behaviour |= KVM_PPC_CPU_BEHAV_BNDS_CHK_SPEC_BAR;
|
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 |
|
cp->behaviour_mask = KVM_PPC_CPU_BEHAV_FAVOUR_SECURITY |
|
||||||
KVM_PPC_CPU_BEHAV_L1D_FLUSH_PR |
|
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);
|
of_node_put(fw_features);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user