* [Qemu-devel] [RFC v2 1/2] linux-headers: update KVM headers from KVM_DEV_ARM_VGIC_GRP_CTRL
2015-01-15 13:05 [Qemu-devel] [RFC v2 0/2] explicit VGIC initialization in finalize function Eric Auger
@ 2015-01-15 13:05 ` Eric Auger
2015-01-15 13:05 ` [Qemu-devel] [RFC v2 2/2] hw/intc/arm_gic: Initialize the vgic in the realize function Eric Auger
1 sibling, 0 replies; 3+ messages in thread
From: Eric Auger @ 2015-01-15 13:05 UTC (permalink / raw)
To: eric.auger, christoffer.dall, qemu-devel, marc.zyngier,
peter.maydell, pbonzini, afaerber
Cc: patches, kvmarm, eric.auger
Add a new group/attribute in VGIC KVM device enabling to force
vgic init: KVM_DEV_ARM_VGIC_GRP_CTRL/KVM_DEV_ARM_VGIC_CTRL_INIT
Update according to headers found in
http://git.linaro.org/people/eric.auger/linux.git
branch irqfd_v6_integrated_official_release
Signed-off-by: Eric Auger <eric.auger@linaro.org>
---
| 5 +++++
| 5 +++++
2 files changed, 10 insertions(+)
--git a/linux-headers/asm-arm/kvm.h b/linux-headers/asm-arm/kvm.h
index 09ee408..2499867 100644
--- a/linux-headers/asm-arm/kvm.h
+++ b/linux-headers/asm-arm/kvm.h
@@ -175,6 +175,8 @@ struct kvm_arch_memory_slot {
#define KVM_DEV_ARM_VGIC_OFFSET_SHIFT 0
#define KVM_DEV_ARM_VGIC_OFFSET_MASK (0xffffffffULL << KVM_DEV_ARM_VGIC_OFFSET_SHIFT)
#define KVM_DEV_ARM_VGIC_GRP_NR_IRQS 3
+#define KVM_DEV_ARM_VGIC_GRP_CTRL 4
+#define KVM_DEV_ARM_VGIC_CTRL_INIT 0
/* KVM_IRQ_LINE irq field index values */
#define KVM_ARM_IRQ_TYPE_SHIFT 24
@@ -196,6 +198,9 @@ struct kvm_arch_memory_slot {
/* Highest supported SPI, from VGIC_NR_IRQS */
#define KVM_ARM_IRQ_GIC_MAX 127
+/* One single KVM irqchip, ie. the VGIC */
+#define KVM_NR_IRQCHIPS 1
+
/* PSCI interface */
#define KVM_PSCI_FN_BASE 0x95c1ba5e
#define KVM_PSCI_FN(n) (KVM_PSCI_FN_BASE + (n))
--git a/linux-headers/asm-arm64/kvm.h b/linux-headers/asm-arm64/kvm.h
index 8e38878..b35c95a 100644
--- a/linux-headers/asm-arm64/kvm.h
+++ b/linux-headers/asm-arm64/kvm.h
@@ -161,6 +161,8 @@ struct kvm_arch_memory_slot {
#define KVM_DEV_ARM_VGIC_OFFSET_SHIFT 0
#define KVM_DEV_ARM_VGIC_OFFSET_MASK (0xffffffffULL << KVM_DEV_ARM_VGIC_OFFSET_SHIFT)
#define KVM_DEV_ARM_VGIC_GRP_NR_IRQS 3
+#define KVM_DEV_ARM_VGIC_GRP_CTRL 4
+#define KVM_DEV_ARM_VGIC_CTRL_INIT 0
/* KVM_IRQ_LINE irq field index values */
#define KVM_ARM_IRQ_TYPE_SHIFT 24
@@ -182,6 +184,9 @@ struct kvm_arch_memory_slot {
/* Highest supported SPI, from VGIC_NR_IRQS */
#define KVM_ARM_IRQ_GIC_MAX 127
+/* One single KVM irqchip, ie. the VGIC */
+#define KVM_NR_IRQCHIPS 1
+
/* PSCI interface */
#define KVM_PSCI_FN_BASE 0x95c1ba5e
#define KVM_PSCI_FN(n) (KVM_PSCI_FN_BASE + (n))
--
1.8.3.2
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [Qemu-devel] [RFC v2 2/2] hw/intc/arm_gic: Initialize the vgic in the realize function
2015-01-15 13:05 [Qemu-devel] [RFC v2 0/2] explicit VGIC initialization in finalize function Eric Auger
2015-01-15 13:05 ` [Qemu-devel] [RFC v2 1/2] linux-headers: update KVM headers from KVM_DEV_ARM_VGIC_GRP_CTRL Eric Auger
@ 2015-01-15 13:05 ` Eric Auger
1 sibling, 0 replies; 3+ messages in thread
From: Eric Auger @ 2015-01-15 13:05 UTC (permalink / raw)
To: eric.auger, christoffer.dall, qemu-devel, marc.zyngier,
peter.maydell, pbonzini, afaerber
Cc: patches, kvmarm, eric.auger
This patch forces vgic initialization in the vgic realize function.
It uses a new group/attribute that allows such operation.
This earlier initialization allows, for example, to setup VFIO
signaling and irqfd after vgic initialization, on a reset notifier.
Signed-off-by: Eric Auger <eric.auger@linaro.org>
---
hw/intc/arm_gic_kvm.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/hw/intc/arm_gic_kvm.c b/hw/intc/arm_gic_kvm.c
index 1ad3eb0..1395c9e 100644
--- a/hw/intc/arm_gic_kvm.c
+++ b/hw/intc/arm_gic_kvm.c
@@ -573,6 +573,12 @@ static void kvm_arm_gic_realize(DeviceState *dev, Error **errp)
kvm_gic_access(s, KVM_DEV_ARM_VGIC_GRP_NR_IRQS, 0, 0, &numirqs, 1);
}
+ if (kvm_gic_supports_attr(s, KVM_DEV_ARM_VGIC_GRP_CTRL,
+ KVM_DEV_ARM_VGIC_CTRL_INIT)) {
+ kvm_gic_access(s, KVM_DEV_ARM_VGIC_GRP_CTRL,
+ KVM_DEV_ARM_VGIC_CTRL_INIT, 0, 0, 1);
+ }
+
/* Distributor */
memory_region_init_reservation(&s->iomem, OBJECT(s),
"kvm-gic_dist", 0x1000);
--
1.8.3.2
^ permalink raw reply related [flat|nested] 3+ messages in thread