[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 01/11] pc: kvm: check if KVM has free memory slo
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH 01/11] pc: kvm: check if KVM has free memory slots to avoid abort() |
Date: |
Mon, 03 Nov 2014 12:52:36 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.2.0 |
On 31/10/2014 17:38, Igor Mammedov wrote:
> When more memory devices han available KVM memory slots
> are used, QEMU crashes with:
>
> kvm_alloc_slot: no free slot available
> Aborted (core dumped)
>
> Fix this by checking that KVM has a free slot before
> attempting to map memory in guest address space.
>
> Signed-off-by: Igor Mammedov <address@hidden>
> ---
> hw/i386/pc.c | 5 +++++
> include/sysemu/kvm.h | 1 +
> kvm-all.c | 18 +++++++++++++++++-
> kvm-stub.c | 5 +++++
> 4 files changed, 28 insertions(+), 1 deletion(-)
>
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index 61aba9f..f6dfd9b 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -1607,6 +1607,11 @@ static void pc_dimm_plug(HotplugHandler *hotplug_dev,
> goto out;
> }
>
> + if (kvm_enabled() && !kvm_has_free_slot(machine)) {
> + error_setg(&local_err, "hypervisor has no free memory slots left");
> + goto out;
> + }
> +
> memory_region_add_subregion(&pcms->hotplug_memory,
> addr - pcms->hotplug_memory_base, mr);
> vmstate_register_ram(mr, dev);
> diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h
> index b0cd657..22e42ef 100644
> --- a/include/sysemu/kvm.h
> +++ b/include/sysemu/kvm.h
> @@ -163,6 +163,7 @@ extern KVMState *kvm_state;
>
> /* external API */
>
> +bool kvm_has_free_slot(MachineState *ms);
> int kvm_has_sync_mmu(void);
> int kvm_has_vcpu_events(void);
> int kvm_has_robust_singlestep(void);
> diff --git a/kvm-all.c b/kvm-all.c
> index 44a5e72..c24e74b 100644
> --- a/kvm-all.c
> +++ b/kvm-all.c
> @@ -132,7 +132,7 @@ static const KVMCapabilityInfo kvm_required_capabilites[]
> = {
> KVM_CAP_LAST_INFO
> };
>
> -static KVMSlot *kvm_alloc_slot(KVMState *s)
> +static KVMSlot *kvm_get_free_slot(KVMState *s)
> {
> int i;
>
> @@ -142,6 +142,22 @@ static KVMSlot *kvm_alloc_slot(KVMState *s)
> }
> }
>
> + return NULL;
> +}
> +
> +bool kvm_has_free_slot(MachineState *ms)
> +{
> + return kvm_get_free_slot(KVM_STATE(ms->accelerator));
> +}
> +
> +static KVMSlot *kvm_alloc_slot(KVMState *s)
> +{
> + KVMSlot *slot = kvm_get_free_slot(s);
> +
> + if (slot) {
> + return slot;
> + }
> +
> fprintf(stderr, "%s: no free slot available\n", __func__);
> abort();
> }
> diff --git a/kvm-stub.c b/kvm-stub.c
> index 43fc0dd..7ba90c5 100644
> --- a/kvm-stub.c
> +++ b/kvm-stub.c
> @@ -147,4 +147,9 @@ int kvm_irqchip_remove_irqfd_notifier(KVMState *s,
> EventNotifier *n, int virq)
> {
> return -ENOSYS;
> }
> +
> +bool kvm_has_free_slot(MachineState *ms)
> +{
> + return false;
> +}
> #endif
>
Acked-by: Paolo Bonzini <address@hidden>
- Re: [Qemu-devel] [PATCH 01/11] pc: kvm: check if KVM has free memory slots to avoid abort(),
Paolo Bonzini <=