From: Will Deacon <will.deacon@arm.com>
To: Andre Przywara <andre.przywara@arm.com>
Cc: Marc Zyngier <Marc.Zyngier@arm.com>,
"penberg@kernel.org" <penberg@kernel.org>,
"kvmarm@lists.cs.columbia.edu" <kvmarm@lists.cs.columbia.edu>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v4 07/10] limit number of VCPUs on demand
Date: Tue, 30 Jun 2015 17:09:53 +0100 [thread overview]
Message-ID: <20150630160949.GR27725@arm.com> (raw)
In-Reply-To: <1435324578-21832-8-git-send-email-andre.przywara@arm.com>
On Fri, Jun 26, 2015 at 02:16:15PM +0100, Andre Przywara wrote:
> Currently the ARM GIC checks the number of VCPUs against a fixed
> limit, which is GICv2 specific. Don't pretend we know better than the
> kernel and let's get rid of that explicit check.
> Instead be more relaxed about KVM_CREATE_VCPU failing with EINVAL,
> which is the way the kernel communicates having reached a VCPU limit.
> If we see this and have at least brought up one VCPU already
> successfully, then don't panic, but limit the number of VCPUs instead.
>
> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
> ---
> arm/gic.c | 6 ------
> arm/kvm-cpu.c | 7 ++++++-
> kvm-cpu.c | 7 +++++++
> 3 files changed, 13 insertions(+), 7 deletions(-)
>
> diff --git a/arm/gic.c b/arm/gic.c
> index 99f0d2b..05f85a2 100644
> --- a/arm/gic.c
> +++ b/arm/gic.c
> @@ -84,12 +84,6 @@ int gic__create(struct kvm *kvm)
> {
> int err;
>
> - if (kvm->nrcpus > GIC_MAX_CPUS) {
> - pr_warning("%d CPUS greater than maximum of %d -- truncating\n",
> - kvm->nrcpus, GIC_MAX_CPUS);
> - kvm->nrcpus = GIC_MAX_CPUS;
> - }
> -
> /* Try the new way first, and fallback on legacy method otherwise */
> err = gic__create_device(kvm);
> if (err)
> diff --git a/arm/kvm-cpu.c b/arm/kvm-cpu.c
> index 7780251..b2fd6ed 100644
> --- a/arm/kvm-cpu.c
> +++ b/arm/kvm-cpu.c
> @@ -51,8 +51,13 @@ struct kvm_cpu *kvm_cpu__arch_init(struct kvm *kvm, unsigned long cpu_id)
> return NULL;
>
> vcpu->vcpu_fd = ioctl(kvm->vm_fd, KVM_CREATE_VCPU, cpu_id);
> - if (vcpu->vcpu_fd < 0)
> + if (vcpu->vcpu_fd < 0) {
> + if (errno == EINVAL) {
> + free(vcpu);
> + return NULL;
> + }
Hmm, but EINVAL can mean all sorts of other failures too, surely? I'm
not against removing the nrcpus check, but I think we should die if ioctls
start failing rather than silently ignore them.
Will
WARNING: multiple messages have this Message-ID (diff)
From: will.deacon@arm.com (Will Deacon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 07/10] limit number of VCPUs on demand
Date: Tue, 30 Jun 2015 17:09:53 +0100 [thread overview]
Message-ID: <20150630160949.GR27725@arm.com> (raw)
In-Reply-To: <1435324578-21832-8-git-send-email-andre.przywara@arm.com>
On Fri, Jun 26, 2015 at 02:16:15PM +0100, Andre Przywara wrote:
> Currently the ARM GIC checks the number of VCPUs against a fixed
> limit, which is GICv2 specific. Don't pretend we know better than the
> kernel and let's get rid of that explicit check.
> Instead be more relaxed about KVM_CREATE_VCPU failing with EINVAL,
> which is the way the kernel communicates having reached a VCPU limit.
> If we see this and have at least brought up one VCPU already
> successfully, then don't panic, but limit the number of VCPUs instead.
>
> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
> ---
> arm/gic.c | 6 ------
> arm/kvm-cpu.c | 7 ++++++-
> kvm-cpu.c | 7 +++++++
> 3 files changed, 13 insertions(+), 7 deletions(-)
>
> diff --git a/arm/gic.c b/arm/gic.c
> index 99f0d2b..05f85a2 100644
> --- a/arm/gic.c
> +++ b/arm/gic.c
> @@ -84,12 +84,6 @@ int gic__create(struct kvm *kvm)
> {
> int err;
>
> - if (kvm->nrcpus > GIC_MAX_CPUS) {
> - pr_warning("%d CPUS greater than maximum of %d -- truncating\n",
> - kvm->nrcpus, GIC_MAX_CPUS);
> - kvm->nrcpus = GIC_MAX_CPUS;
> - }
> -
> /* Try the new way first, and fallback on legacy method otherwise */
> err = gic__create_device(kvm);
> if (err)
> diff --git a/arm/kvm-cpu.c b/arm/kvm-cpu.c
> index 7780251..b2fd6ed 100644
> --- a/arm/kvm-cpu.c
> +++ b/arm/kvm-cpu.c
> @@ -51,8 +51,13 @@ struct kvm_cpu *kvm_cpu__arch_init(struct kvm *kvm, unsigned long cpu_id)
> return NULL;
>
> vcpu->vcpu_fd = ioctl(kvm->vm_fd, KVM_CREATE_VCPU, cpu_id);
> - if (vcpu->vcpu_fd < 0)
> + if (vcpu->vcpu_fd < 0) {
> + if (errno == EINVAL) {
> + free(vcpu);
> + return NULL;
> + }
Hmm, but EINVAL can mean all sorts of other failures too, surely? I'm
not against removing the nrcpus check, but I think we should die if ioctls
start failing rather than silently ignore them.
Will
next prev parent reply other threads:[~2015-06-30 15:58 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-26 13:16 [PATCH v4 00/10] kvmtool: arm64: GICv3 guest support Andre Przywara
2015-06-26 13:16 ` Andre Przywara
2015-06-26 13:16 ` [PATCH v4 01/10] AArch64: Reserve two 64k pages for GIC CPU interface Andre Przywara
2015-06-26 13:16 ` Andre Przywara
2015-06-26 13:16 ` [PATCH v4 02/10] AArch{32, 64}: use KVM_CREATE_DEVICE & co to instanciate the GIC Andre Przywara
2015-06-26 13:16 ` Andre Przywara
2015-06-26 13:16 ` [PATCH v4 03/10] irq: add irq__get_nr_allocated_lines Andre Przywara
2015-06-26 13:16 ` Andre Przywara
2015-06-26 13:16 ` [PATCH v4 04/10] AArch{32, 64}: dynamically configure the number of GIC interrupts Andre Przywara
2015-06-26 13:16 ` Andre Przywara
2015-06-26 13:16 ` [PATCH v4 05/10] arm: finish VGIC initialisation explicitly Andre Przywara
2015-06-26 13:16 ` Andre Przywara
2015-06-26 13:16 ` [PATCH v4 06/10] arm: simplify MMIO dispatching Andre Przywara
2015-06-26 13:16 ` Andre Przywara
2015-06-26 13:16 ` [PATCH v4 07/10] limit number of VCPUs on demand Andre Przywara
2015-06-26 13:16 ` Andre Przywara
2015-06-30 16:09 ` Will Deacon [this message]
2015-06-30 16:09 ` Will Deacon
2015-06-30 16:27 ` Andre Przywara
2015-06-30 16:27 ` Andre Przywara
2015-06-26 13:16 ` [PATCH v4 08/10] arm: prepare for instantiating different IRQ chip devices Andre Przywara
2015-06-26 13:16 ` Andre Przywara
2015-06-26 13:16 ` [PATCH v4 09/10] arm: add support for supplying GICv3 redistributor addresses Andre Przywara
2015-06-26 13:16 ` Andre Przywara
2015-06-26 13:16 ` [PATCH v4 10/10] arm: use new irqchip parameter to create different vGIC types Andre Przywara
2015-06-26 13:16 ` Andre Przywara
2015-06-30 16:13 ` Will Deacon
2015-06-30 16:13 ` Will Deacon
2015-06-30 16:50 ` Andre Przywara
2015-06-30 16:50 ` 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=20150630160949.GR27725@arm.com \
--to=will.deacon@arm.com \
--cc=Marc.Zyngier@arm.com \
--cc=andre.przywara@arm.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=penberg@kernel.org \
/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: link
Be 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.