[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [qemu-s390x] [PATCH] s390x: Fence huge pages prior to 3.1
From: |
David Hildenbrand |
Subject: |
Re: [qemu-s390x] [PATCH] s390x: Fence huge pages prior to 3.1 |
Date: |
Fri, 28 Sep 2018 13:16:44 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.0 |
On 28/09/2018 11:34, Janosch Frank wrote:
> As the kernel has no way of disallowing the start of a huge page
> backed VM, we can migrate a running huge backed VM to a host that has
> no huge page KVM support.
>
> Let's glue huge page support support to the 3.1 machine, so we do not
> migrate to a destination host that doesn't have QEMU huge page support
> and can stop migration if KVM doesn't indicate support.
>
> Signed-off-by: Janosch Frank <address@hidden>
> ---
> hw/s390x/s390-virtio-ccw.c | 10 ++++++++++
> include/hw/s390x/s390-virtio-ccw.h | 3 +++
> target/s390x/kvm.c | 6 ++++++
> 3 files changed, 19 insertions(+)
>
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index f0f7fdcadd..53fd7c975f 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -456,6 +456,7 @@ static void ccw_machine_class_init(ObjectClass *oc, void
> *data)
> s390mc->ri_allowed = true;
> s390mc->cpu_model_allowed = true;
> s390mc->css_migration_enabled = true;
> + s390mc->hpage_1m_allowed = true;
> mc->init = ccw_init;
> mc->reset = s390_machine_reset;
> mc->hot_add_cpu = s390_hot_add_cpu;
> @@ -535,6 +536,12 @@ bool cpu_model_allowed(void)
> return get_machine_class()->cpu_model_allowed;
> }
>
> +bool hpage_1m_allowed(void)
> +{
> + /* for "none" machine this results in true */
> + return get_machine_class()->hpage_1m_allowed;
> +}
> +
> static char *machine_get_loadparm(Object *obj, Error **errp)
> {
> S390CcwMachineState *ms = S390_CCW_MACHINE(obj);
> @@ -747,6 +754,9 @@ static void ccw_machine_3_0_instance_options(MachineState
> *machine)
>
> static void ccw_machine_3_0_class_options(MachineClass *mc)
> {
> + S390CcwMachineClass *s390mc = S390_MACHINE_CLASS(mc);
> +
> + s390mc->hpage_1m_allowed = false;
> ccw_machine_3_1_class_options(mc);
> SET_MACHINE_COMPAT(mc, CCW_COMPAT_3_0);
> }
> diff --git a/include/hw/s390x/s390-virtio-ccw.h
> b/include/hw/s390x/s390-virtio-ccw.h
> index e9c4f4182b..8aa27199c9 100644
> --- a/include/hw/s390x/s390-virtio-ccw.h
> +++ b/include/hw/s390x/s390-virtio-ccw.h
> @@ -39,12 +39,15 @@ typedef struct S390CcwMachineClass {
> bool ri_allowed;
> bool cpu_model_allowed;
> bool css_migration_enabled;
> + bool hpage_1m_allowed;
> } S390CcwMachineClass;
>
> /* runtime-instrumentation allowed by the machine */
> bool ri_allowed(void);
> /* cpu model allowed by the machine */
> bool cpu_model_allowed(void);
> +/* 1M huge page mappings allowed by the machine */
> +bool hpage_1m_allowed(void);
>
> /**
> * Returns true if (vmstate based) migration of the channel subsystem
> diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
> index 348e8cc546..323cb00e6a 100644
> --- a/target/s390x/kvm.c
> +++ b/target/s390x/kvm.c
> @@ -292,6 +292,12 @@ static int kvm_s390_configure_mempath_backing(KVMState
> *s)
> return 0;
> }
>
> + if (!hpage_1m_allowed()) {
> + error_report("This QEMU machine does not support huge page "
> + "mappings");
> + return -EINVAL;
> + }
> +
> if (path_psize != 1 * MiB) {
> error_report("Memory backing with 2G pages was specified, "
> "but KVM does not support this memory backing");
>
Yes, this makes sense.
Reviewed-by: David Hildenbrand <address@hidden>
--
Thanks,
David / dhildenb