From: Andre Przywara <andre.przywara@arm.com> To: will.deacon@arm.com, marc.zyngier@arm.com, penberg@kernel.org Cc: kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 5/8] arm: finish VGIC initialisation explicitly Date: Fri, 5 Jun 2015 09:37:50 +0100 [thread overview] Message-ID: <1433493473-4002-6-git-send-email-andre.przywara@arm.com> (raw) In-Reply-To: <1433493473-4002-1-git-send-email-andre.przywara@arm.com> Since Linux 3.19-rc1 there is a new API to explicitly initialise the in-kernel GIC emulation by a userland KVM device call. Use that to tell the kernel we are finished with the GIC initialisation, since the automatic GIC init will only be provided as a legacy functionality in the future. Signed-off-by: Andre Przywara <andre.przywara@arm.com> --- arm/gic.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/arm/gic.c b/arm/gic.c index 6277af8..8d47562 100644 --- a/arm/gic.c +++ b/arm/gic.c @@ -89,24 +89,43 @@ int gic__create(struct kvm *kvm) return err; } +/* + * Sets the number of used interrupts and finalizes the GIC init explicitly. + */ static int gic__init_gic(struct kvm *kvm) { + int ret; + int lines = irq__get_nr_allocated_lines(); u32 nr_irqs = ALIGN(lines, 32) + GIC_SPI_IRQ_BASE; struct kvm_device_attr nr_irqs_attr = { .group = KVM_DEV_ARM_VGIC_GRP_NR_IRQS, .addr = (u64)(unsigned long)&nr_irqs, }; + struct kvm_device_attr vgic_init_attr = { + .group = KVM_DEV_ARM_VGIC_GRP_CTRL, + .attr = KVM_DEV_ARM_VGIC_CTRL_INIT, + }; /* * If we didn't use the KVM_CREATE_DEVICE method, KVM will - * give us some default number of interrupts. + * give us some default number of interrupts. The GIC initialization + * will be done automatically in this case. */ if (gic_fd < 0) return 0; - if (!ioctl(gic_fd, KVM_HAS_DEVICE_ATTR, &nr_irqs_attr)) - return ioctl(gic_fd, KVM_SET_DEVICE_ATTR, &nr_irqs_attr); + if (!ioctl(gic_fd, KVM_HAS_DEVICE_ATTR, &nr_irqs_attr)) { + ret = ioctl(gic_fd, KVM_SET_DEVICE_ATTR, &nr_irqs_attr); + if (ret) + return ret; + } + + if (!ioctl(gic_fd, KVM_HAS_DEVICE_ATTR, &vgic_init_attr)) { + ret = ioctl(gic_fd, KVM_SET_DEVICE_ATTR, &vgic_init_attr); + if (ret) + return ret; + } return 0; } -- 2.3.5
WARNING: multiple messages have this Message-ID (diff)
From: andre.przywara@arm.com (Andre Przywara) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 5/8] arm: finish VGIC initialisation explicitly Date: Fri, 5 Jun 2015 09:37:50 +0100 [thread overview] Message-ID: <1433493473-4002-6-git-send-email-andre.przywara@arm.com> (raw) In-Reply-To: <1433493473-4002-1-git-send-email-andre.przywara@arm.com> Since Linux 3.19-rc1 there is a new API to explicitly initialise the in-kernel GIC emulation by a userland KVM device call. Use that to tell the kernel we are finished with the GIC initialisation, since the automatic GIC init will only be provided as a legacy functionality in the future. Signed-off-by: Andre Przywara <andre.przywara@arm.com> --- arm/gic.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/arm/gic.c b/arm/gic.c index 6277af8..8d47562 100644 --- a/arm/gic.c +++ b/arm/gic.c @@ -89,24 +89,43 @@ int gic__create(struct kvm *kvm) return err; } +/* + * Sets the number of used interrupts and finalizes the GIC init explicitly. + */ static int gic__init_gic(struct kvm *kvm) { + int ret; + int lines = irq__get_nr_allocated_lines(); u32 nr_irqs = ALIGN(lines, 32) + GIC_SPI_IRQ_BASE; struct kvm_device_attr nr_irqs_attr = { .group = KVM_DEV_ARM_VGIC_GRP_NR_IRQS, .addr = (u64)(unsigned long)&nr_irqs, }; + struct kvm_device_attr vgic_init_attr = { + .group = KVM_DEV_ARM_VGIC_GRP_CTRL, + .attr = KVM_DEV_ARM_VGIC_CTRL_INIT, + }; /* * If we didn't use the KVM_CREATE_DEVICE method, KVM will - * give us some default number of interrupts. + * give us some default number of interrupts. The GIC initialization + * will be done automatically in this case. */ if (gic_fd < 0) return 0; - if (!ioctl(gic_fd, KVM_HAS_DEVICE_ATTR, &nr_irqs_attr)) - return ioctl(gic_fd, KVM_SET_DEVICE_ATTR, &nr_irqs_attr); + if (!ioctl(gic_fd, KVM_HAS_DEVICE_ATTR, &nr_irqs_attr)) { + ret = ioctl(gic_fd, KVM_SET_DEVICE_ATTR, &nr_irqs_attr); + if (ret) + return ret; + } + + if (!ioctl(gic_fd, KVM_HAS_DEVICE_ATTR, &vgic_init_attr)) { + ret = ioctl(gic_fd, KVM_SET_DEVICE_ATTR, &vgic_init_attr); + if (ret) + return ret; + } return 0; } -- 2.3.5
next prev parent reply other threads:[~2015-06-05 8:38 UTC|newest] Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-06-05 8:37 [PATCH v2 0/8] kvmtool: arm64: GICv3 guest support Andre Przywara 2015-06-05 8:37 ` Andre Przywara 2015-06-05 8:37 ` [PATCH v2 1/8] AArch64: Reserve two 64k pages for GIC CPU interface Andre Przywara 2015-06-05 8:37 ` Andre Przywara 2015-06-05 8:37 ` [PATCH v2 2/8] AArch{32, 64}: use KVM_CREATE_DEVICE & co to instanciate the GIC Andre Przywara 2015-06-05 8:37 ` Andre Przywara 2015-06-05 8:37 ` [PATCH v2 3/8] irq: add irq__get_nr_allocated_lines Andre Przywara 2015-06-05 8:37 ` Andre Przywara 2015-06-05 8:37 ` [PATCH v2 4/8] AArch{32,64}: dynamically configure the number of GIC interrupts Andre Przywara 2015-06-05 8:37 ` [PATCH v2 4/8] AArch{32, 64}: " Andre Przywara 2015-06-05 8:37 ` Andre Przywara [this message] 2015-06-05 8:37 ` [PATCH v2 5/8] arm: finish VGIC initialisation explicitly Andre Przywara 2015-06-10 17:07 ` Marc Zyngier 2015-06-10 17:07 ` Marc Zyngier 2015-06-05 8:37 ` [PATCH v2 6/8] arm: prepare for instantiating different IRQ chip devices Andre Przywara 2015-06-05 8:37 ` Andre Przywara 2015-06-09 11:31 ` Andre Przywara 2015-06-09 11:31 ` Andre Przywara 2015-06-10 17:21 ` Marc Zyngier 2015-06-10 17:21 ` Marc Zyngier 2015-06-15 10:46 ` Andre Przywara 2015-06-15 10:46 ` Andre Przywara 2015-06-05 8:37 ` [PATCH v2 7/8] arm: add support for supplying GICv3 redistributor addresses Andre Przywara 2015-06-05 8:37 ` Andre Przywara 2015-06-10 17:40 ` Marc Zyngier 2015-06-10 17:40 ` Marc Zyngier 2015-06-15 11:12 ` Andre Przywara 2015-06-15 11:12 ` Andre Przywara 2015-06-15 11:56 ` Marc Zyngier 2015-06-15 11:56 ` Marc Zyngier 2015-06-05 8:37 ` [PATCH v2 8/8] arm: use new irqchip parameter to create different vGIC types Andre Przywara 2015-06-05 8:37 ` Andre Przywara 2015-06-10 17:48 ` Marc Zyngier 2015-06-10 17:48 ` Marc Zyngier
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1433493473-4002-6-git-send-email-andre.przywara@arm.com \ --to=andre.przywara@arm.com \ --cc=kvm@vger.kernel.org \ --cc=kvmarm@lists.cs.columbia.edu \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=marc.zyngier@arm.com \ --cc=penberg@kernel.org \ --cc=will.deacon@arm.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.