Excerpts from Paul Mackerras's message of July 9, 2020 2:34 pm: > On Fri, Jul 03, 2020 at 11:19:57AM +1000, Nicholas Piggin wrote: >> ISA v3.1 does not support the SAO storage control attribute required to >> implement PROT_SAO. PROT_SAO was used by specialised system software >> (Lx86) that has been discontinued for about 7 years, and is not thought >> to be used elsewhere, so removal should not cause problems. >> >> We rather remove it than keep support for older processors, because >> live migrating guest partitions to newer processors may not be possible >> if SAO is in use (or worse allowed with silent races). > > This is actually a real problem for KVM, because now we have the > capabilities of the host affecting the characteristics of the guest > virtual machine in a manner which userspace (e.g. QEMU) is unable to > control. > > It would probably be better to disallow SAO on all machines than have > it available on some hosts and not others. (Yes I know there is a > check on CPU_FTR_ARCH_206 in there, but that has been a no-op since we > removed the PPC970 KVM support.) This change doesn't change the SAO difference on the host processors though, just tries to slightly improve it from silently broken to maybe complaining a bit. I didn't want to stop some very old image that uses this and is running okay on an existing host from working, but maybe the existence of such a thing would contradict my reasoning. But then if we don't care about it why care about this KVM behaviour difference at all? > Solving this properly will probably require creating a new KVM host > capability and associated machine parameter in QEMU, along with a new > machine type. Rather than answer any of these questions, I might take the KVM change out and that can be dealt with separately from guest SAO removal. Thanks, Nick > > [snip] > >> diff --git a/arch/powerpc/include/asm/kvm_book3s_64.h b/arch/powerpc/include/asm/kvm_book3s_64.h >> index 9bb9bb370b53..fac39ff659d4 100644 >> --- a/arch/powerpc/include/asm/kvm_book3s_64.h >> +++ b/arch/powerpc/include/asm/kvm_book3s_64.h >> @@ -398,9 +398,10 @@ static inline bool hpte_cache_flags_ok(unsigned long hptel, bool is_ci) >> { >> unsigned int wimg = hptel & HPTE_R_WIMG; >> >> - /* Handle SAO */ >> + /* Handle SAO for POWER7,8,9 */ >> if (wimg == (HPTE_R_W | HPTE_R_I | HPTE_R_M) && >> - cpu_has_feature(CPU_FTR_ARCH_206)) >> + cpu_has_feature(CPU_FTR_ARCH_206) && >> + !cpu_has_feature(CPU_FTR_ARCH_31)) >> wimg = HPTE_R_M; > > Paul. >