]> Git Repo - J-linux.git/commitdiff
Merge tag 'kvmarm-fixes-6.7-2' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmar...
authorPaolo Bonzini <[email protected]>
Fri, 22 Dec 2023 23:03:54 +0000 (18:03 -0500)
committerPaolo Bonzini <[email protected]>
Fri, 22 Dec 2023 23:03:54 +0000 (18:03 -0500)
KVM/arm64 fixes for 6.7, part #2

 - Ensure a vCPU's redistributor is unregistered from the MMIO bus
   if vCPU creation fails

 - Fix building KVM selftests for arm64 from the top-level Makefile

1  2 
tools/testing/selftests/kvm/Makefile
virt/kvm/kvm_main.c

index 963435959a92f054e291d82049366ac1bd346bf8,5f4f6be7a866390b2787302483a03af7de310c55..3e0c36b8ddd56ebbb2817ba76d3af58abcfdc4ee
@@@ -17,16 -17,6 +17,6 @@@ els
        ARCH_DIR := $(ARCH)
  endif
  
- ifeq ($(ARCH),arm64)
- tools_dir := $(top_srcdir)/tools
- arm64_tools_dir := $(tools_dir)/arch/arm64/tools/
- GEN_HDRS := $(top_srcdir)/tools/arch/arm64/include/generated/
- CFLAGS += -I$(GEN_HDRS)
- $(GEN_HDRS): $(wildcard $(arm64_tools_dir)/*)
-       $(MAKE) -C $(arm64_tools_dir) O=$(tools_dir)
- endif
  LIBKVM += lib/assert.c
  LIBKVM += lib/elf.c
  LIBKVM += lib/guest_modes.c
@@@ -224,7 -214,7 +214,7 @@@ els
  LINUX_TOOL_ARCH_INCLUDE = $(top_srcdir)/tools/arch/$(ARCH)/include
  endif
  CFLAGS += -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 \
 -      -Wno-gnu-variable-sized-type-not-at-end -MD\
 +      -Wno-gnu-variable-sized-type-not-at-end -MD -MP \
        -fno-builtin-memcmp -fno-builtin-memcpy -fno-builtin-memset \
        -fno-builtin-strnlen \
        -fno-stack-protector -fno-PIE -I$(LINUX_TOOL_INCLUDE) \
  ifeq ($(ARCH),s390)
        CFLAGS += -march=z10
  endif
+ ifeq ($(ARCH),arm64)
+ tools_dir := $(top_srcdir)/tools
+ arm64_tools_dir := $(tools_dir)/arch/arm64/tools/
+ ifneq ($(abs_objdir),)
+ arm64_hdr_outdir := $(abs_objdir)/tools/
+ else
+ arm64_hdr_outdir := $(tools_dir)/
+ endif
+ GEN_HDRS := $(arm64_hdr_outdir)arch/arm64/include/generated/
+ CFLAGS += -I$(GEN_HDRS)
+ $(GEN_HDRS): $(wildcard $(arm64_tools_dir)/*)
+       $(MAKE) -C $(arm64_tools_dir) OUTPUT=$(arm64_hdr_outdir)
+ endif
  
  no-pie-option := $(call try-run, echo 'int main(void) { return 0; }' | \
          $(CC) -Werror $(CFLAGS) -no-pie -x c - -o "$$TMP", -no-pie)
diff --combined virt/kvm/kvm_main.c
index 3b1b9e8dd70c5d85e76364be4f39f431f4f4872f,278d31ae45d86956ec4f694de1f13e7f23b9a512..7db96875ac46279886e464d37801254367530891
@@@ -115,6 -115,8 +115,6 @@@ EXPORT_SYMBOL_GPL(kvm_debugfs_dir)
  
  static const struct file_operations stat_fops_per_vm;
  
 -static struct file_operations kvm_chardev_ops;
 -
  static long kvm_vcpu_ioctl(struct file *file, unsigned int ioctl,
                           unsigned long arg);
  #ifdef CONFIG_KVM_COMPAT
@@@ -1155,6 -1157,9 +1155,6 @@@ static struct kvm *kvm_create_vm(unsign
        if (!kvm)
                return ERR_PTR(-ENOMEM);
  
 -      /* KVM is pinned via open("/dev/kvm"), the fd passed to this ioctl(). */
 -      __module_get(kvm_chardev_ops.owner);
 -
        KVM_MMU_LOCK_INIT(kvm);
        mmgrab(current->mm);
        kvm->mm = current->mm;
@@@ -1274,6 -1279,7 +1274,6 @@@ out_err_no_irq_srcu
  out_err_no_srcu:
        kvm_arch_free_vm(kvm);
        mmdrop(current->mm);
 -      module_put(kvm_chardev_ops.owner);
        return ERR_PTR(r);
  }
  
@@@ -1342,6 -1348,7 +1342,6 @@@ static void kvm_destroy_vm(struct kvm *
        preempt_notifier_dec();
        hardware_disable_all();
        mmdrop(mm);
 -      module_put(kvm_chardev_ops.owner);
  }
  
  void kvm_get_kvm(struct kvm *kvm)
@@@ -3880,7 -3887,7 +3880,7 @@@ static int kvm_vcpu_release(struct inod
        return 0;
  }
  
 -static const struct file_operations kvm_vcpu_fops = {
 +static struct file_operations kvm_vcpu_fops = {
        .release        = kvm_vcpu_release,
        .unlocked_ioctl = kvm_vcpu_ioctl,
        .mmap           = kvm_vcpu_mmap,
@@@ -4074,7 -4081,6 +4074,7 @@@ static int kvm_vcpu_stats_release(struc
  }
  
  static const struct file_operations kvm_vcpu_stats_fops = {
 +      .owner = THIS_MODULE,
        .read = kvm_vcpu_stats_read,
        .release = kvm_vcpu_stats_release,
        .llseek = noop_llseek,
@@@ -4425,7 -4431,7 +4425,7 @@@ static int kvm_device_release(struct in
        return 0;
  }
  
 -static const struct file_operations kvm_device_fops = {
 +static struct file_operations kvm_device_fops = {
        .unlocked_ioctl = kvm_device_ioctl,
        .release = kvm_device_release,
        KVM_COMPAT(kvm_device_ioctl),
@@@ -4753,7 -4759,6 +4753,7 @@@ static int kvm_vm_stats_release(struct 
  }
  
  static const struct file_operations kvm_vm_stats_fops = {
 +      .owner = THIS_MODULE,
        .read = kvm_vm_stats_read,
        .release = kvm_vm_stats_release,
        .llseek = noop_llseek,
@@@ -5055,7 -5060,7 +5055,7 @@@ static long kvm_vm_compat_ioctl(struct 
  }
  #endif
  
 -static const struct file_operations kvm_vm_fops = {
 +static struct file_operations kvm_vm_fops = {
        .release        = kvm_vm_release,
        .unlocked_ioctl = kvm_vm_ioctl,
        .llseek         = noop_llseek,
@@@ -5540,7 -5545,6 +5540,6 @@@ int kvm_io_bus_read(struct kvm_vcpu *vc
        return r < 0 ? r : 0;
  }
  
- /* Caller must hold slots_lock. */
  int kvm_io_bus_register_dev(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr,
                            int len, struct kvm_io_device *dev)
  {
        struct kvm_io_bus *new_bus, *bus;
        struct kvm_io_range range;
  
+       lockdep_assert_held(&kvm->slots_lock);
        bus = kvm_get_bus(kvm, bus_idx);
        if (!bus)
                return -ENOMEM;
@@@ -6090,9 -6096,6 +6091,9 @@@ int kvm_init(unsigned vcpu_size, unsign
                goto err_async_pf;
  
        kvm_chardev_ops.owner = module;
 +      kvm_vm_fops.owner = module;
 +      kvm_vcpu_fops.owner = module;
 +      kvm_device_fops.owner = module;
  
        kvm_preempt_ops.sched_in = kvm_sched_in;
        kvm_preempt_ops.sched_out = kvm_sched_out;
This page took 0.068043 seconds and 4 git commands to generate.