Merge tag 'kvmarm-6.4' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm...
authorPaolo Bonzini <pbonzini@redhat.com>
Wed, 26 Apr 2023 19:46:52 +0000 (15:46 -0400)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 26 Apr 2023 19:46:52 +0000 (15:46 -0400)
KVM/arm64 updates for 6.4

- Numerous fixes for the pathological lock inversion issue that
  plagued KVM/arm64 since... forever.

- New framework allowing SMCCC-compliant hypercalls to be forwarded
  to userspace, hopefully paving the way for some more features
  being moved to VMMs rather than be implemented in the kernel.

- Large rework of the timer code to allow a VM-wide offset to be
  applied to both virtual and physical counters as well as a
  per-timer, per-vcpu offset that complements the global one.
  This last part allows the NV timer code to be implemented on
  top.

- A small set of fixes to make sure that we don't change anything
  affecting the EL1&0 translation regime just after having having
  taken an exception to EL2 until we have executed a DSB. This
  ensures that speculative walks started in EL1&0 have completed.

- The usual selftest fixes and improvements.

1  2 
Documentation/virt/kvm/api.rst
arch/arm64/include/asm/kvm_host.h
arch/arm64/kvm/arm.c
arch/arm64/kvm/guest.c
arch/x86/include/asm/kvm_host.h
arch/x86/kvm/x86.c
include/uapi/linux/kvm.h

Simple merge
index 6f7b218a681f0857c764789466c7f6dca32e0a0f,ce7530968e39ced2efef4c59705dbecedce2de8c..b9e36611734fdf21a0a575a73bee8e46faf70a92
@@@ -1005,8 -1023,10 +1023,10 @@@ int kvm_arm_vcpu_arch_get_attr(struct k
  int kvm_arm_vcpu_arch_has_attr(struct kvm_vcpu *vcpu,
                               struct kvm_device_attr *attr);
  
 -long kvm_vm_ioctl_mte_copy_tags(struct kvm *kvm,
 -                              struct kvm_arm_copy_mte_tags *copy_tags);
 +int kvm_vm_ioctl_mte_copy_tags(struct kvm *kvm,
 +                             struct kvm_arm_copy_mte_tags *copy_tags);
+ int kvm_vm_ioctl_set_counter_offset(struct kvm *kvm,
+                                   struct kvm_arm_counter_offset *offset);
  
  /* Guest/host FPSIMD coordination helpers */
  int kvm_arch_vcpu_run_map_fp(struct kvm_vcpu *vcpu);
index a43e1cb3b7e97267bc22caf05c68b166acc2551d,bb21d0c25de753045975cf825697cf1baac200a9..95b715cdf6f340892a61d86dc9f1cfd9b1f47a40
@@@ -1439,7 -1479,28 +1479,27 @@@ static int kvm_vm_ioctl_set_device_addr
        }
  }
  
 -long kvm_arch_vm_ioctl(struct file *filp,
 -                     unsigned int ioctl, unsigned long arg)
+ static int kvm_vm_has_attr(struct kvm *kvm, struct kvm_device_attr *attr)
+ {
+       switch (attr->group) {
+       case KVM_ARM_VM_SMCCC_CTRL:
+               return kvm_vm_smccc_has_attr(kvm, attr);
+       default:
+               return -ENXIO;
+       }
+ }
+ static int kvm_vm_set_attr(struct kvm *kvm, struct kvm_device_attr *attr)
+ {
+       switch (attr->group) {
+       case KVM_ARM_VM_SMCCC_CTRL:
+               return kvm_vm_smccc_set_attr(kvm, attr);
+       default:
+               return -ENXIO;
+       }
+ }
 +int kvm_arch_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg)
  {
        struct kvm *kvm = filp->private_data;
        void __user *argp = (void __user *)arg;
Simple merge
Simple merge
Simple merge
Simple merge