Commit 8fd2a6d4 authored by Sean Christopherson's avatar Sean Christopherson
Browse files

KVM: selftests: Fall back to split IRQ chip if full in-kernel chip is unsupported



Now that KVM x86 allows compiling out support for in-kernel I/O APIC (and
PIC and PIT) emulation, i.e. allows disabling KVM_CREATE_IRQCHIP for all
intents and purposes, fall back to a split IRQ chip for x86 if creating
the full in-kernel version fails with ENOTTY.

Acked-by: default avatarKai Huang <kai.huang@intel.com>
Link: https://lore.kernel.org/r/20250611213557.294358-17-seanjc@google.com


Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
parent 141db6cd
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -1716,7 +1716,18 @@ void *addr_gpa2alias(struct kvm_vm *vm, vm_paddr_t gpa)
/* Create an interrupt controller chip for the specified VM. */
void vm_create_irqchip(struct kvm_vm *vm)
{
	vm_ioctl(vm, KVM_CREATE_IRQCHIP, NULL);
	int r;

	/*
	 * Allocate a fully in-kernel IRQ chip by default, but fall back to a
	 * split model (x86 only) if that fails (KVM x86 allows compiling out
	 * support for KVM_CREATE_IRQCHIP).
	 */
	r = __vm_ioctl(vm, KVM_CREATE_IRQCHIP, NULL);
	if (r && errno == ENOTTY && kvm_has_cap(KVM_CAP_SPLIT_IRQCHIP))
		vm_enable_cap(vm, KVM_CAP_SPLIT_IRQCHIP, 24);
	else
		TEST_ASSERT_VM_VCPU_IOCTL(!r, KVM_CREATE_IRQCHIP, r, vm);

	vm->has_irqchip = true;
}