Commit 0e4e82f1 authored by Andre Przywara's avatar Andre Przywara Committed by Marc Zyngier
Browse files

KVM: arm64: vgic-its: Enable ITS emulation as a virtual MSI controller



Now that all ITS emulation functionality is in place, we advertise
MSI functionality to userland and also the ITS device to the guest - if
userland has configured that.

Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
Reviewed-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
Tested-by: default avatarEric Auger <eric.auger@redhat.com>
Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
parent 2891a7df
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -2162,7 +2162,7 @@ after pausing the vcpu, but before it is resumed.
4.71 KVM_SIGNAL_MSI
4.71 KVM_SIGNAL_MSI


Capability: KVM_CAP_SIGNAL_MSI
Capability: KVM_CAP_SIGNAL_MSI
Architectures: x86
Architectures: x86 arm64
Type: vm ioctl
Type: vm ioctl
Parameters: struct kvm_msi (in)
Parameters: struct kvm_msi (in)
Returns: >0 on delivery, 0 if guest blocked the MSI, and -1 on error
Returns: >0 on delivery, 0 if guest blocked the MSI, and -1 on error
+1 −0
Original line number Original line Diff line number Diff line
@@ -36,6 +36,7 @@ config KVM
	select HAVE_KVM_IRQFD
	select HAVE_KVM_IRQFD
	select KVM_ARM_VGIC_V3
	select KVM_ARM_VGIC_V3
	select KVM_ARM_PMU if HW_PERF_EVENTS
	select KVM_ARM_PMU if HW_PERF_EVENTS
	select HAVE_KVM_MSI
	---help---
	---help---
	  Support hosting virtualized guest machines.
	  Support hosting virtualized guest machines.
	  We don't support KVM with 16K page tables yet, due to the multiple
	  We don't support KVM with 16K page tables yet, due to the multiple
+1 −0
Original line number Original line Diff line number Diff line
@@ -29,5 +29,6 @@ kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-mmio.o
kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-mmio-v2.o
kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-mmio-v2.o
kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-mmio-v3.o
kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-mmio-v3.o
kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-kvm-device.o
kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-kvm-device.o
kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-its.o
kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/arch_timer.o
kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/arch_timer.o
kvm-$(CONFIG_KVM_ARM_PMU) += $(KVM)/arm/pmu.o
kvm-$(CONFIG_KVM_ARM_PMU) += $(KVM)/arm/pmu.o
+6 −0
Original line number Original line Diff line number Diff line
@@ -86,6 +86,12 @@ int kvm_arch_dev_ioctl_check_extension(struct kvm *kvm, long ext)
	case KVM_CAP_VCPU_ATTRIBUTES:
	case KVM_CAP_VCPU_ATTRIBUTES:
		r = 1;
		r = 1;
		break;
		break;
	case KVM_CAP_MSI_DEVID:
		if (!kvm)
			r = -EINVAL;
		else
			r = kvm->arch.vgic.msis_require_devid;
		break;
	default:
	default:
		r = 0;
		r = 0;
	}
	}
+5 −0
Original line number Original line Diff line number Diff line
@@ -163,6 +163,9 @@ struct vgic_dist {
	/* vGIC model the kernel emulates for the guest (GICv2 or GICv3) */
	/* vGIC model the kernel emulates for the guest (GICv2 or GICv3) */
	u32			vgic_model;
	u32			vgic_model;


	/* Do injected MSIs require an additional device ID? */
	bool			msis_require_devid;

	int			nr_spis;
	int			nr_spis;


	/* TODO: Consider moving to global state */
	/* TODO: Consider moving to global state */
@@ -308,4 +311,6 @@ static inline int kvm_vgic_get_max_vcpus(void)
	return kvm_vgic_global_state.max_gic_vcpus;
	return kvm_vgic_global_state.max_gic_vcpus;
}
}


int kvm_send_userspace_msi(struct kvm *kvm, struct kvm_msi *msi);

#endif /* __KVM_ARM_VGIC_H */
#endif /* __KVM_ARM_VGIC_H */
Loading