That is the effect of the lack of "2b57ecd0208f KVM: PPC: Book3S: Add count cache flush parameters to kvmppc_get_cpu_char()" in Disco.
QEMU checks for KVM_PPC_CPU_BEHAV_FLUSH_COUNT_CACHE which is introduced in the above commit:
(From lp-1832622-0002-target-ppc-spapr-Add-workaround-option-to-SPAPR_CAP_.patch)
diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c index f0f5bf9391..4d46314276 100644 --- a/target/ppc/kvm.c +++ b/target/ppc/kvm.c @@ -2392,7 +2392,13 @@ static int parse_cap_ppc_safe_bounds_check(struct kvm_ppc_cpu_char c)
static int parse_cap_ppc_safe_indirect_branch(struct kvm_ppc_cpu_char c) { - if (c.character & c.character_mask & H_CPU_CHAR_CACHE_COUNT_DIS) { + if ((~c.behaviour & c.behaviour_mask & H_CPU_BEHAV_FLUSH_COUNT_CACHE) && + (~c.character & c.character_mask & H_CPU_CHAR_CACHE_COUNT_DIS) && + (~c.character & c.character_mask & H_CPU_CHAR_BCCTRL_SERIALISED)) { + return SPAPR_CAP_FIXED_NA; + } else if (c.behaviour & c.behaviour_mask & H_CPU_BEHAV_FLUSH_COUNT_CACHE) { <--- + return SPAPR_CAP_WORKAROUND; + } else if (c.character & c.character_mask & H_CPU_CHAR_CACHE_COUNT_DIS) { return SPAPR_CAP_FIXED_CCD; } else if (c.character & c.character_mask & H_CPU_CHAR_BCCTRL_SERIALISED) { return SPAPR_CAP_FIXED_IBS;
But I'll test the extra two scenarios anyway.
That is the effect of the lack of "2b57ecd0208f KVM: PPC: Book3S: Add count cache flush parameters to kvmppc_ get_cpu_ char()" in Disco.
QEMU checks for KVM_PPC_ CPU_BEHAV_ FLUSH_COUNT_ CACHE which is introduced in the above commit:
(From lp-1832622- 0002-target- ppc-spapr- Add-workaround- option- to-SPAPR_ CAP_.patch)
diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c .4d46314276 100644 ppc_safe_ bounds_ check(struct kvm_ppc_cpu_char c)
index f0f5bf9391.
--- a/target/ppc/kvm.c
+++ b/target/ppc/kvm.c
@@ -2392,7 +2392,13 @@ static int parse_cap_
static int parse_cap_ ppc_safe_ indirect_ branch( struct kvm_ppc_cpu_char c) CACHE_COUNT_ DIS) { FLUSH_COUNT_ CACHE) && CACHE_COUNT_ DIS) && BCCTRL_ SERIALISED) ) { FLUSH_COUNT_ CACHE) { <--- WORKAROUND; CACHE_COUNT_ DIS) { FIXED_CCD; BCCTRL_ SERIALISED) { FIXED_IBS;
{
- if (c.character & c.character_mask & H_CPU_CHAR_
+ if ((~c.behaviour & c.behaviour_mask & H_CPU_BEHAV_
+ (~c.character & c.character_mask & H_CPU_CHAR_
+ (~c.character & c.character_mask & H_CPU_CHAR_
+ return SPAPR_CAP_FIXED_NA;
+ } else if (c.behaviour & c.behaviour_mask & H_CPU_BEHAV_
+ return SPAPR_CAP_
+ } else if (c.character & c.character_mask & H_CPU_CHAR_
return SPAPR_CAP_
} else if (c.character & c.character_mask & H_CPU_CHAR_
return SPAPR_CAP_
But I'll test the extra two scenarios anyway.