From: Andre Przywara <andre.przywara@arm.com> To: will.deacon@arm.com, marc.zyngier@arm.com Cc: penberg@kernel.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v5 04/10] AArch{32, 64}: dynamically configure the number of GIC interrupts Date: Fri, 3 Jul 2015 12:26:32 +0100 [thread overview] Message-ID: <1435922798-14375-5-git-send-email-andre.przywara@arm.com> (raw) In-Reply-To: <1435922798-14375-1-git-send-email-andre.przywara@arm.com> From: Marc Zyngier <marc.zyngier@arm.com> In order to reduce the memory usage of large guests (as well as improve performance), tell KVM about the number of interrupts we require. To avoid synchronization with the various device creation, use a late_init callback to compute the GIC configuration. [Andre: rename to gic__init_gic() to ease future expansion] Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Andre Przywara <andre.przywara@arm.com> --- arm/gic.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/arm/gic.c b/arm/gic.c index 1ff3663..8560c9b 100644 --- a/arm/gic.c +++ b/arm/gic.c @@ -1,10 +1,12 @@ #include "kvm/fdt.h" +#include "kvm/irq.h" #include "kvm/kvm.h" #include "kvm/virtio.h" #include "arm-common/gic.h" #include <linux/byteorder.h> +#include <linux/kernel.h> #include <linux/kvm.h> static int gic_fd = -1; @@ -96,6 +98,29 @@ int gic__create(struct kvm *kvm) return err; } +static int gic__init_gic(struct kvm *kvm) +{ + 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, + }; + + /* + * If we didn't use the KVM_CREATE_DEVICE method, KVM will + * give us some default number of interrupts. + */ + 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); + + return 0; +} +late_init(gic__init_gic) + void gic__generate_fdt_nodes(void *fdt, u32 phandle) { u64 reg_prop[] = { -- 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 v5 04/10] AArch{32, 64}: dynamically configure the number of GIC interrupts Date: Fri, 3 Jul 2015 12:26:32 +0100 [thread overview] Message-ID: <1435922798-14375-5-git-send-email-andre.przywara@arm.com> (raw) In-Reply-To: <1435922798-14375-1-git-send-email-andre.przywara@arm.com> From: Marc Zyngier <marc.zyngier@arm.com> In order to reduce the memory usage of large guests (as well as improve performance), tell KVM about the number of interrupts we require. To avoid synchronization with the various device creation, use a late_init callback to compute the GIC configuration. [Andre: rename to gic__init_gic() to ease future expansion] Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Andre Przywara <andre.przywara@arm.com> --- arm/gic.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/arm/gic.c b/arm/gic.c index 1ff3663..8560c9b 100644 --- a/arm/gic.c +++ b/arm/gic.c @@ -1,10 +1,12 @@ #include "kvm/fdt.h" +#include "kvm/irq.h" #include "kvm/kvm.h" #include "kvm/virtio.h" #include "arm-common/gic.h" #include <linux/byteorder.h> +#include <linux/kernel.h> #include <linux/kvm.h> static int gic_fd = -1; @@ -96,6 +98,29 @@ int gic__create(struct kvm *kvm) return err; } +static int gic__init_gic(struct kvm *kvm) +{ + 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, + }; + + /* + * If we didn't use the KVM_CREATE_DEVICE method, KVM will + * give us some default number of interrupts. + */ + 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); + + return 0; +} +late_init(gic__init_gic) + void gic__generate_fdt_nodes(void *fdt, u32 phandle) { u64 reg_prop[] = { -- 2.3.5
next prev parent reply other threads:[~2015-07-03 11:26 UTC|newest] Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-07-03 11:26 [PATCH v5 00/10] kvmtool: arm64: GICv3 guest support Andre Przywara 2015-07-03 11:26 ` Andre Przywara 2015-07-03 11:26 ` [PATCH v5 01/10] AArch64: Reserve two 64k pages for GIC CPU interface Andre Przywara 2015-07-03 11:26 ` Andre Przywara 2015-07-03 11:26 ` [PATCH v5 02/10] AArch{32, 64}: use KVM_CREATE_DEVICE & co to instanciate the GIC Andre Przywara 2015-07-03 11:26 ` Andre Przywara 2015-07-03 11:26 ` [PATCH v5 03/10] irq: add irq__get_nr_allocated_lines Andre Przywara 2015-07-03 11:26 ` Andre Przywara 2015-07-03 11:26 ` Andre Przywara [this message] 2015-07-03 11:26 ` [PATCH v5 04/10] AArch{32, 64}: dynamically configure the number of GIC interrupts Andre Przywara 2015-07-03 11:26 ` [PATCH v5 05/10] arm: finish VGIC initialisation explicitly Andre Przywara 2015-07-03 11:26 ` Andre Przywara 2015-07-03 11:26 ` [PATCH v5 06/10] arm: simplify MMIO dispatching Andre Przywara 2015-07-03 11:26 ` Andre Przywara 2015-07-03 11:26 ` [PATCH v5 07/10] limit number of VCPUs on demand Andre Przywara 2015-07-03 11:26 ` Andre Przywara 2015-07-03 11:26 ` [PATCH v5 08/10] arm: prepare for instantiating different IRQ chip devices Andre Przywara 2015-07-03 11:26 ` Andre Przywara 2015-07-03 11:26 ` [PATCH v5 09/10] arm: add support for supplying GICv3 redistributor addresses Andre Przywara 2015-07-03 11:26 ` Andre Przywara 2015-07-03 11:26 ` [PATCH v5 10/10] arm: use new irqchip parameter to create different vGIC types Andre Przywara 2015-07-03 11:26 ` Andre Przywara
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=1435922798-14375-5-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.