[PATCH 2/2] spapr: Better handling of ibm,pa-features TM bit
Anton Blanchard
anton at au1.ibm.com
Tue Jun 7 22:32:10 AEST 2016
From: Anton Blanchard <anton at samba.org>
There are a few issues with our handling of the ibm,pa-features
TM bit:
- We don't support transactional memory in PR KVM, so don't tell
the OS that we do.
- In full emulation we have a minimal implementation of TM that always
fails, so for performance reasons lets not tell the OS that we
support it either.
- In HV KVM mode, we should mirror the host TM enabled state by
looking at the AT_HWCAP2 bit.
Signed-off-by: Anton Blanchard <anton at samba.org>
---
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 0636642..c403fbb 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -620,7 +620,7 @@ static void spapr_populate_cpu_dt(CPUState *cs, void *fdt, int offset,
0xf6, 0x1f, 0xc7, 0xc0, 0x80, 0xf0,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
- 0x80, 0x00, 0x80, 0x00, 0x80, 0x00 };
+ 0x80, 0x00, 0x80, 0x00, 0x00, 0x00 };
uint8_t *pa_features;
size_t pa_size;
@@ -697,6 +697,19 @@ static void spapr_populate_cpu_dt(CPUState *cs, void *fdt, int offset,
} else /* env->mmu_model == POWERPC_MMU_2_07 */ {
pa_features = pa_features_207;
pa_size = sizeof(pa_features_207);
+
+#ifdef CONFIG_KVM
+ /* Only enable TM in HV KVM mode */
+ if (kvm_enabled() &&
+ !kvm_vm_check_extension(cs->kvm_state, KVM_CAP_PPC_GET_PVINFO)) {
+ unsigned long hwcap2 = qemu_getauxval(AT_HWCAP2);
+
+ /* Guest should inherit host TM enabled bit */
+ if (hwcap2 & PPC_FEATURE2_HAS_HTM) {
+ pa_features[24] |= 0x80;
+ }
+ }
+#endif
}
if (env->ci_large_pages) {
pa_features[3] |= 0x20;
More information about the Linuxppc-dev
mailing list