From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Eric Auger <eric.auger@redhat.com>
Cc: peter.maydell@linaro.org, drjones@redhat.com,
suzuki.poulose@arm.com, agraf@suse.de, qemu-devel@nongnu.org,
qemu-arm@nongnu.org, eric.auger.pro@gmail.com,
david@gibson.dropbear.id.au
Subject: Re: [Qemu-arm] [RFC 5/6] hw/arm/virt: support kvm_type property
Date: Wed, 20 Jun 2018 18:15:05 +0100 [thread overview]
Message-ID: <20180620171504.GR2549@work-vm> (raw)
In-Reply-To: <1529500053-21704-6-git-send-email-eric.auger@redhat.com>
* Eric Auger (eric.auger@redhat.com) wrote:
> The kvm-type property currently is used to pass
> a user parameter to KVM_CREATE_VM. This matches
> the way KVM/ARM expects to pass the max_vm_phys_shift
> parameter.
>
> This patch adds the support or the kvm-type property in
> machvirt and also implements the machine class kvm_type()
> callback so that it either returns the kvm-type value
> provided by the user or returns the max_vm_phys_shift
> exposed by KVM.
>
> for instance, the usespace can use the following option to
> instantiate a 42b IPA guest: -machine kvm-type=42
Without saying if this is better or worse, it is different from x86,
where we have the number of physical address bits as a -cpu parameter
rather than a machine parameter, e.g.
qemu-system-x86_64 -M pc,accel=kvm -cpu SandyBridge,phys-bits=36
or
qemu-system-x86_64 -M pc,accel=kvm -cpu SandyBridge,host-phys-bits=true
our machine types can override the default value though.
One other complication (that I don't know if it applies to ARM) is that
TCG only supports phys-bits=40, so we refuse a TCG run with an
explicitly set phys-bits!=40.
Dave
> Signed-off-by: Eric Auger <eric.auger@redhat.com>
> ---
> hw/arm/virt.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
> include/hw/arm/virt.h | 1 +
> 2 files changed, 45 insertions(+)
>
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index dd92ab9..1700556 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -1585,6 +1585,21 @@ static void virt_set_iommu(Object *obj, const char *value, Error **errp)
> }
> }
>
> +static char *virt_get_kvm_type(Object *obj, Error **errp)
> +{
> + VirtMachineState *vms = VIRT_MACHINE(obj);
> +
> + return g_strdup(vms->kvm_type);
> +}
> +
> +static void virt_set_kvm_type(Object *obj, const char *value, Error **errp)
> +{
> + VirtMachineState *vms = VIRT_MACHINE(obj);
> +
> + g_free(vms->kvm_type);
> + vms->kvm_type = g_strdup(value);
> +}
> +
> static CpuInstanceProperties
> virt_cpu_index_to_props(MachineState *ms, unsigned cpu_index)
> {
> @@ -1646,6 +1661,31 @@ static HotplugHandler *virt_machine_get_hotplug_handler(MachineState *machine,
> return NULL;
> }
>
> +static int virt_kvm_type(MachineState *ms, const char *type_str)
> +{
> + int max_vm_phys_shift, ret = 0;
> + uint64_t type;
> +
> + if (!type_str) {
> + max_vm_phys_shift = kvm_get_max_vm_phys_shift(ms);
> + if (max_vm_phys_shift < 0) {
> + goto out;
> + }
> + } else {
> + type = g_ascii_strtoll(type_str, NULL, 0);
> + type &= 0xFF;
> + max_vm_phys_shift = (int)type;
> + if (max_vm_phys_shift < 40 || max_vm_phys_shift > 52) {
> + warn_report("valid kvm-type type values are within [40, 52]:"
> + " option is ignored and VM is created with 40b IPA");
> + goto out;
> + }
> + }
> + ret = max_vm_phys_shift;
> +out:
> + return ret;
> +}
> +
> static void virt_machine_class_init(ObjectClass *oc, void *data)
> {
> MachineClass *mc = MACHINE_CLASS(oc);
> @@ -1668,6 +1708,7 @@ static void virt_machine_class_init(ObjectClass *oc, void *data)
> mc->cpu_index_to_instance_props = virt_cpu_index_to_props;
> mc->default_cpu_type = ARM_CPU_TYPE_NAME("cortex-a15");
> mc->get_default_cpu_node_id = virt_get_default_cpu_node_id;
> + mc->kvm_type = virt_kvm_type;
> assert(!mc->get_hotplug_handler);
> mc->get_hotplug_handler = virt_machine_get_hotplug_handler;
> hc->plug = virt_machine_device_plug_cb;
> @@ -1756,6 +1797,9 @@ static void virt_3_0_instance_init(Object *obj)
> "Valid values are none and smmuv3",
> NULL);
>
> + object_property_add_str(obj, "kvm-type",
> + virt_get_kvm_type, virt_set_kvm_type, NULL);
> +
> vms->memmap = a15memmap;
> vms->irqmap = a15irqmap;
> }
> diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h
> index 4ac7ef6..2674ce7 100644
> --- a/include/hw/arm/virt.h
> +++ b/include/hw/arm/virt.h
> @@ -118,6 +118,7 @@ typedef struct {
> uint32_t msi_phandle;
> uint32_t iommu_phandle;
> int psci_conduit;
> + char *kvm_type;
> } VirtMachineState;
>
> #define TYPE_VIRT_MACHINE MACHINE_TYPE_NAME("virt")
> --
> 2.5.5
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
WARNING: multiple messages have this Message-ID (diff)
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Eric Auger <eric.auger@redhat.com>
Cc: eric.auger.pro@gmail.com, qemu-devel@nongnu.org,
qemu-arm@nongnu.org, peter.maydell@linaro.org, agraf@suse.de,
david@gibson.dropbear.id.au, drjones@redhat.com, wei@redhat.com,
suzuki.poulose@arm.com
Subject: Re: [Qemu-devel] [RFC 5/6] hw/arm/virt: support kvm_type property
Date: Wed, 20 Jun 2018 18:15:05 +0100 [thread overview]
Message-ID: <20180620171504.GR2549@work-vm> (raw)
In-Reply-To: <1529500053-21704-6-git-send-email-eric.auger@redhat.com>
* Eric Auger (eric.auger@redhat.com) wrote:
> The kvm-type property currently is used to pass
> a user parameter to KVM_CREATE_VM. This matches
> the way KVM/ARM expects to pass the max_vm_phys_shift
> parameter.
>
> This patch adds the support or the kvm-type property in
> machvirt and also implements the machine class kvm_type()
> callback so that it either returns the kvm-type value
> provided by the user or returns the max_vm_phys_shift
> exposed by KVM.
>
> for instance, the usespace can use the following option to
> instantiate a 42b IPA guest: -machine kvm-type=42
Without saying if this is better or worse, it is different from x86,
where we have the number of physical address bits as a -cpu parameter
rather than a machine parameter, e.g.
qemu-system-x86_64 -M pc,accel=kvm -cpu SandyBridge,phys-bits=36
or
qemu-system-x86_64 -M pc,accel=kvm -cpu SandyBridge,host-phys-bits=true
our machine types can override the default value though.
One other complication (that I don't know if it applies to ARM) is that
TCG only supports phys-bits=40, so we refuse a TCG run with an
explicitly set phys-bits!=40.
Dave
> Signed-off-by: Eric Auger <eric.auger@redhat.com>
> ---
> hw/arm/virt.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
> include/hw/arm/virt.h | 1 +
> 2 files changed, 45 insertions(+)
>
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index dd92ab9..1700556 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -1585,6 +1585,21 @@ static void virt_set_iommu(Object *obj, const char *value, Error **errp)
> }
> }
>
> +static char *virt_get_kvm_type(Object *obj, Error **errp)
> +{
> + VirtMachineState *vms = VIRT_MACHINE(obj);
> +
> + return g_strdup(vms->kvm_type);
> +}
> +
> +static void virt_set_kvm_type(Object *obj, const char *value, Error **errp)
> +{
> + VirtMachineState *vms = VIRT_MACHINE(obj);
> +
> + g_free(vms->kvm_type);
> + vms->kvm_type = g_strdup(value);
> +}
> +
> static CpuInstanceProperties
> virt_cpu_index_to_props(MachineState *ms, unsigned cpu_index)
> {
> @@ -1646,6 +1661,31 @@ static HotplugHandler *virt_machine_get_hotplug_handler(MachineState *machine,
> return NULL;
> }
>
> +static int virt_kvm_type(MachineState *ms, const char *type_str)
> +{
> + int max_vm_phys_shift, ret = 0;
> + uint64_t type;
> +
> + if (!type_str) {
> + max_vm_phys_shift = kvm_get_max_vm_phys_shift(ms);
> + if (max_vm_phys_shift < 0) {
> + goto out;
> + }
> + } else {
> + type = g_ascii_strtoll(type_str, NULL, 0);
> + type &= 0xFF;
> + max_vm_phys_shift = (int)type;
> + if (max_vm_phys_shift < 40 || max_vm_phys_shift > 52) {
> + warn_report("valid kvm-type type values are within [40, 52]:"
> + " option is ignored and VM is created with 40b IPA");
> + goto out;
> + }
> + }
> + ret = max_vm_phys_shift;
> +out:
> + return ret;
> +}
> +
> static void virt_machine_class_init(ObjectClass *oc, void *data)
> {
> MachineClass *mc = MACHINE_CLASS(oc);
> @@ -1668,6 +1708,7 @@ static void virt_machine_class_init(ObjectClass *oc, void *data)
> mc->cpu_index_to_instance_props = virt_cpu_index_to_props;
> mc->default_cpu_type = ARM_CPU_TYPE_NAME("cortex-a15");
> mc->get_default_cpu_node_id = virt_get_default_cpu_node_id;
> + mc->kvm_type = virt_kvm_type;
> assert(!mc->get_hotplug_handler);
> mc->get_hotplug_handler = virt_machine_get_hotplug_handler;
> hc->plug = virt_machine_device_plug_cb;
> @@ -1756,6 +1797,9 @@ static void virt_3_0_instance_init(Object *obj)
> "Valid values are none and smmuv3",
> NULL);
>
> + object_property_add_str(obj, "kvm-type",
> + virt_get_kvm_type, virt_set_kvm_type, NULL);
> +
> vms->memmap = a15memmap;
> vms->irqmap = a15irqmap;
> }
> diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h
> index 4ac7ef6..2674ce7 100644
> --- a/include/hw/arm/virt.h
> +++ b/include/hw/arm/virt.h
> @@ -118,6 +118,7 @@ typedef struct {
> uint32_t msi_phandle;
> uint32_t iommu_phandle;
> int psci_conduit;
> + char *kvm_type;
> } VirtMachineState;
>
> #define TYPE_VIRT_MACHINE MACHINE_TYPE_NAME("virt")
> --
> 2.5.5
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2018-06-20 17:15 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-20 13:07 [Qemu-arm] [RFC 0/6] KVM/ARM: Dynamic and larger GPA size Eric Auger
2018-06-20 13:07 ` [Qemu-devel] " Eric Auger
2018-06-20 13:07 ` [Qemu-arm] [RFC 1/6] linux-headers: Partial update for KVM/ARM KVM_ARM_GET_MAX_VM_PHYS_SHIFT Eric Auger
2018-06-20 13:07 ` [Qemu-devel] " Eric Auger
2018-06-20 13:07 ` [Qemu-arm] [RFC 2/6] hw/boards: Add a MachineState parameter to kvm_type callback Eric Auger
2018-06-20 13:07 ` [Qemu-devel] " Eric Auger
2018-06-21 0:36 ` [Qemu-arm] " David Gibson
2018-06-21 0:36 ` [Qemu-devel] " David Gibson
2018-06-20 13:07 ` [Qemu-arm] [RFC 3/6] kvm: add kvm_get_max_vm_phys_shift Eric Auger
2018-06-20 13:07 ` [Qemu-devel] " Eric Auger
2018-06-21 0:37 ` [Qemu-arm] " David Gibson
2018-06-21 0:37 ` [Qemu-devel] " David Gibson
2018-06-21 11:23 ` [Qemu-arm] " Auger Eric
2018-06-21 11:23 ` [Qemu-devel] " Auger Eric
2018-06-20 13:07 ` [Qemu-devel] [RFC 4/6] hw/arm/virt: Add virt-3.0 machine type Eric Auger
2018-06-20 13:07 ` Eric Auger
2018-06-20 13:07 ` [Qemu-arm] [RFC 5/6] hw/arm/virt: support kvm_type property Eric Auger
2018-06-20 13:07 ` [Qemu-devel] " Eric Auger
2018-06-20 17:15 ` Dr. David Alan Gilbert [this message]
2018-06-20 17:15 ` Dr. David Alan Gilbert
2018-06-21 10:05 ` [Qemu-arm] " Auger Eric
2018-06-21 10:05 ` Auger Eric
2018-06-27 12:01 ` [Qemu-arm] " Dr. David Alan Gilbert
2018-06-27 12:01 ` Dr. David Alan Gilbert
2018-07-03 11:55 ` [Qemu-arm] " Andrew Jones
2018-07-03 11:55 ` Andrew Jones
2018-07-03 12:31 ` [Qemu-arm] " Auger Eric
2018-07-03 12:31 ` Auger Eric
2018-07-03 12:47 ` [Qemu-arm] " Andrew Jones
2018-07-03 12:47 ` Andrew Jones
2018-07-03 13:20 ` [Qemu-arm] " Suzuki K Poulose
2018-07-03 13:20 ` Suzuki K Poulose
2018-07-09 17:26 ` [Qemu-arm] " Thomas Huth
2018-07-09 17:26 ` Thomas Huth
2018-07-10 10:07 ` [Qemu-arm] " Auger Eric
2018-07-10 10:07 ` Auger Eric
2018-06-20 13:07 ` [Qemu-arm] [RFC 6/6] hw/arm/virt: handle max_vm_phys_shift conflicts on migration Eric Auger
2018-06-20 13:07 ` [Qemu-devel] " Eric Auger
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=20180620171504.GR2549@work-vm \
--to=dgilbert@redhat.com \
--cc=agraf@suse.de \
--cc=david@gibson.dropbear.id.au \
--cc=drjones@redhat.com \
--cc=eric.auger.pro@gmail.com \
--cc=eric.auger@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=suzuki.poulose@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: 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.