Message ID | 20230404154050.2270077-1-oliver.upton@linux.dev (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, 4 Apr 2023 15:40:37 +0000, Oliver Upton wrote: > The Arm SMCCC is rather prescriptive in regards to the allocation of > SMCCC function ID ranges. Many of the hypercall ranges have an > associated specification from Arm (FF-A, PSCI, SDEI, etc.) with some > room for vendor-specific implementations. > > The ever-expanding SMCCC surface leaves a lot of work within KVM for > providing new features. Furthermore, KVM implements its own > vendor-specific ABI, with little room for other implementations (like > Hyper-V, for example). Rather than cramming it all into the kernel we > should provide a way for userspace to handle hypercalls. > > [...] Applied to next, thanks! [01/13] KVM: x86: Redefine 'longmode' as a flag for KVM_EXIT_HYPERCALL commit: e65733b5c59a1ea20324a03494364958bef3fc68 [02/13] KVM: arm64: Add a helper to check if a VM has ran once commit: de40bb8abb764f6866d82c4e2a43acdb22892cf4 [03/13] KVM: arm64: Add vm fd device attribute accessors commit: e0fc6b21616dd917899ee4a2d4126b4a963c0871 [04/13] KVM: arm64: Rename SMC/HVC call handler to reflect reality commit: aac94968126beb9846c12a940f1302ece7849b4f [05/13] KVM: arm64: Start handling SMCs from EL1 commit: c2d2e9b3d8ce9db825a5630d9d52d542f5138ae0 [06/13] KVM: arm64: Refactor hvc filtering to support different actions commit: a8308b3fc9494953c453480fb277e24f82f7d2b9 [07/13] KVM: arm64: Use a maple tree to represent the SMCCC filter commit: fb88707dd39bd1d5ec4a058776de9ee99bcc7b72 [08/13] KVM: arm64: Add support for KVM_EXIT_HYPERCALL commit: d824dff1919bbd523d4d5c860437d043c0ad121d [09/13] KVM: arm64: Introduce support for userspace SMCCC filtering commit: 821d935c87bc95253f82deec3cbb457ccf3de003 [10/13] KVM: arm64: Return NOT_SUPPORTED to guest for unknown PSCI version commit: 7e484d2785e2a2e526a6b2679d3e4c1402ffe0ec [11/13] KVM: arm64: Let errors from SMCCC emulation to reach userspace commit: 37c8e494794786aa8e4acba1f0f5b45f37b11699 [12/13] KVM: selftests: Add a helper for SMCCC calls with SMC instruction commit: fab19915f498b0e76fabd4d78841c99b7b6d7851 [13/13] KVM: selftests: Add test for SMCCC filter commit: 60e7dade498eb881bcdf0d9a420c97625f73acc1 I've also added the extra patch to deal with with AArch32 T1 encodings of HVC/SMC. Please check the conflict resolution! Cheers, M.
diff --cc arch/arm64/include/asm/kvm_host.h index a8e2c52b44aa,2682b3fd0881..000000000000 --- a/arch/arm64/include/asm/kvm_host.h diff --cc arch/arm64/kvm/arm.c index 0e5a3ff8cc5a,efee032c9560..000000000000 --- a/arch/arm64/kvm/arm.c diff --cc arch/arm64/kvm/pmu-emul.c index 240168416838,a0fc569fdbca..000000000000 --- a/arch/arm64/kvm/pmu-emul.c diff --git a/arch/arm64/kvm/hypercalls.c b/arch/arm64/kvm/hypercalls.c index ba1adc68d695..22938e4d947c 100644 --- a/arch/arm64/kvm/hypercalls.c +++ b/arch/arm64/kvm/hypercalls.c @@ -164,7 +164,7 @@ static int kvm_smccc_set_filter(struct kvm *kvm, struct kvm_smccc_filter __user if (end < start || filter.action >= NR_SMCCC_FILTER_ACTIONS) return -EINVAL; - mutex_lock(&kvm->lock); + mutex_lock(&kvm->arch.config_lock); if (kvm_vm_has_ran_once(kvm)) { r = -EBUSY; @@ -179,7 +179,7 @@ static int kvm_smccc_set_filter(struct kvm *kvm, struct kvm_smccc_filter __user set_bit(KVM_ARCH_FLAG_SMCCC_FILTER_CONFIGURED, &kvm->arch.flags); out_unlock: - mutex_unlock(&kvm->lock); + mutex_unlock(&kvm->arch.config_lock); return r; }