Re: [PATCH v2 2/3] powerpc/64s: remove PROT_SAO support
From: Nicholas Piggin <npiggin@gmail.com>
Date: 2020-07-09 10:20:34
Also in:
linux-api, linux-mm
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:quoted
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]quoted
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.