From: Marcel Apfelbaum <marcel@redhat.com>
To: David Kiarie <davidkiarie4@gmail.com>, qemu-devel@nongnu.org
Cc: jan.kiszka@web.de, valentine.sinitsyn@gmail.com,
imammedo@redhat.com, mst@redhat.com, peterx@redhat.com
Subject: Re: [Qemu-devel] [V9 3/4] hw/core: Add AMD IOMMU to machine properties
Date: Sun, 1 May 2016 12:15:09 +0300 [thread overview]
Message-ID: <5725C91D.5090209@redhat.com> (raw)
In-Reply-To: <1461969763-5193-4-git-send-email-davidkiarie4@gmail.com>
On 04/30/2016 01:42 AM, David Kiarie wrote:
> Added an enum, subject to review, to machine properties which
> it used to override iommu emulated from Intel to AMD.
>
> Signed-off-by: David Kiarie <davidkiarie4@gmail.com>
> ---
> hw/core/machine.c | 33 ++++++++++++++++++++++++++++++---
> include/hw/boards.h | 1 +
> include/hw/i386/intel_iommu.h | 1 +
> qemu-options.hx | 7 +++++--
> util/qemu-config.c | 8 ++++++--
> 5 files changed, 43 insertions(+), 7 deletions(-)
>
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index 6dbbc85..ff830f0 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -15,6 +15,8 @@
> #include "qapi/error.h"
> #include "qapi-visit.h"
> #include "qapi/visitor.h"
> +#include "hw/i386/amd_iommu.h"
> +#include "hw/i386/intel_iommu.h"
> #include "hw/sysbus.h"
> #include "sysemu/sysemu.h"
> #include "qemu/error-report.h"
> @@ -300,6 +302,27 @@ static void machine_set_iommu(Object *obj, bool value, Error **errp)
> ms->iommu = value;
> }
>
> +static void machine_set_iommu_override(Object *obj, const char *value,
> + Error **errp)
> +{
> + MachineState *ms = MACHINE(obj);
> + Error *err = NULL;
> +
> + ms->iommu_type = TYPE_INTEL;
> + /* ensure a valid iommu type */
> + if (g_strcmp0(value, AMD_IOMMU_STR) == 0) {
> + } else if(g_strcmp0(value, INTEL_IOMMU_STR) == 0) {
> + } else {
> + error_setg(errp, "Invalid IOMMU type %s", value);
> + error_propagate(errp, err);
You don't need 'error_propagate' and the err pointer(is not used),
error_setg does the job right.
Also you declared the IommuType as enum (thanks for that, I really like it!) :
typedef enum IommuType {
TYPE_AMD,
TYPE_INTEL,
TYPE_NONE
} IommuType;
What happens if the user does not set this property?
ms->iommu_type will default to AMD and -machine iommu=on
will enable AMD by default.
You can choose between swicthing the values in enum
or add ms->iommu_type = TYPE_INTEL; to machine_init.
While at it, I would re-write it in a more standard way:
if (g_strcmp0(value, INTEL_IOMMU_STR) == 0) {
ms->iommu_type = TYPE_INTEL;
} else if(g_strcmp0(value, AMD_IOMMU_STR) == 0) {
ms->iommu_type = TYPE_AMD;
} else {
error_setg(errp, "Invalid IOMMU type %s", value);
}
Other than that the patch is ready, thank you for taking the time
to address the comments,
Marcel
> + return;
> + }
> +
> + if ((g_strcmp0(value, AMD_IOMMU_STR) == 0)) {
> + ms->iommu_type = TYPE_AMD;
> + }
> +}
> +
> static void machine_set_suppress_vmdesc(Object *obj, bool value, Error **errp)
> {
> MachineState *ms = MACHINE(obj);
> @@ -473,10 +496,14 @@ static void machine_initfn(Object *obj)
> "Firmware image",
> NULL);
> object_property_add_bool(obj, "iommu",
> - machine_get_iommu,
> - machine_set_iommu, NULL);
> + machine_get_iommu, machine_set_iommu, NULL);
> object_property_set_description(obj, "iommu",
> - "Set on/off to enable/disable Intel IOMMU (VT-d)",
> + "Set on to enable IOMMU emulation",
> + NULL);
> + object_property_add_str(obj, "x-iommu-type",
> + NULL, machine_set_iommu_override, NULL);
> + object_property_set_description(obj, "x-iommu-type",
> + "Set on to override emulated IOMMU to AMD IOMMU",
> NULL);
> object_property_add_bool(obj, "suppress-vmdesc",
> machine_get_suppress_vmdesc,
> diff --git a/include/hw/boards.h b/include/hw/boards.h
> index dbe6745..5b7eeda 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -158,6 +158,7 @@ struct MachineState {
> bool igd_gfx_passthru;
> char *firmware;
> bool iommu;
> + IommuType iommu_type;
> bool suppress_vmdesc;
> bool enforce_config_section;
>
> diff --git a/include/hw/i386/intel_iommu.h b/include/hw/i386/intel_iommu.h
> index b024ffa..7e511e1 100644
> --- a/include/hw/i386/intel_iommu.h
> +++ b/include/hw/i386/intel_iommu.h
> @@ -24,6 +24,7 @@
> #include "hw/qdev.h"
> #include "sysemu/dma.h"
>
> +#define INTEL_IOMMU_STR "intel"
> #define TYPE_INTEL_IOMMU_DEVICE "intel-iommu"
> #define INTEL_IOMMU_DEVICE(obj) \
> OBJECT_CHECK(IntelIOMMUState, (obj), TYPE_INTEL_IOMMU_DEVICE)
> diff --git a/qemu-options.hx b/qemu-options.hx
> index 6106520..81217d3 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -38,7 +38,8 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \
> " kvm_shadow_mem=size of KVM shadow MMU\n"
> " dump-guest-core=on|off include guest memory in a core dump (default=on)\n"
> " mem-merge=on|off controls memory merge support (default: on)\n"
> - " iommu=on|off controls emulated Intel IOMMU (VT-d) support (default=off)\n"
> + " iommu=on|off controls emulated IOMMU support(default: off)\n"
> + " x-iommu-type=amd|intel overrides emulated IOMMU to AMD IOMMU (default: intel)\n"
> " igd-passthru=on|off controls IGD GFX passthrough support (default=off)\n"
> " aes-key-wrap=on|off controls support for AES key wrapping (default=on)\n"
> " dea-key-wrap=on|off controls support for DEA key wrapping (default=on)\n"
> @@ -74,7 +75,9 @@ Enables or disables memory merge support. This feature, when supported by
> the host, de-duplicates identical memory pages among VMs instances
> (enabled by default).
> @item iommu=on|off
> -Enables or disables emulated Intel IOMMU (VT-d) support. The default is off.
> +Enables and disables IOMMU emulation. The default is off.
> +@item x-iommu-type=on|off
> +Overrides emulated IOMMU from AMD IOMMU. By default Intel IOMMU is emulated.
> @item aes-key-wrap=on|off
> Enables or disables AES key wrapping support on s390-ccw hosts. This feature
> controls whether AES wrapping keys will be created to allow
> diff --git a/util/qemu-config.c b/util/qemu-config.c
> index fb97307..8886abf 100644
> --- a/util/qemu-config.c
> +++ b/util/qemu-config.c
> @@ -213,8 +213,12 @@ static QemuOptsList machine_opts = {
> .help = "firmware image",
> },{
> .name = "iommu",
> - .type = QEMU_OPT_BOOL,
> - .help = "Set on/off to enable/disable Intel IOMMU (VT-d)",
> + .type = QEMU_OPT_BOOL,
> + .help = "Set on/off to enable iommu",
> + },{
> + .name = "x-iommu-type",
> + .type = QEMU_OPT_STRING,
> + .help = "Overrides emulated IOMMU from Intel to AMD",
> },{
> .name = "suppress-vmdesc",
> .type = QEMU_OPT_BOOL,
>
next prev parent reply other threads:[~2016-05-01 9:15 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-29 22:42 [Qemu-devel] [V9 0/4] AMD IOMMU David Kiarie
2016-04-29 22:42 ` [Qemu-devel] [V9 1/4] hw/i386: Introduce " David Kiarie
2016-05-01 14:14 ` Michael S. Tsirkin
2016-05-03 16:11 ` David Kiarie
2016-05-03 16:18 ` Jan Kiszka
2016-04-29 22:42 ` [Qemu-devel] [V9 2/4] hw/i386: ACPI table for " David Kiarie
2016-05-01 13:45 ` Michael S. Tsirkin
2016-05-02 8:27 ` David Kiarie
2016-05-02 9:13 ` Igor Mammedov
2016-04-29 22:42 ` [Qemu-devel] [V9 3/4] hw/core: Add AMD IOMMU to machine properties David Kiarie
2016-05-01 9:15 ` Marcel Apfelbaum [this message]
[not found] ` <1461969763-5193-5-git-send-email-davidkiarie4@gmail.com>
2016-05-01 9:15 ` [Qemu-devel] [V9 4/4] hw/pci-host: Emulate AMD IOMMU Marcel Apfelbaum
2016-05-01 13:47 ` [Qemu-devel] [V9 0/4] " Michael S. Tsirkin
2016-05-01 14:00 ` Michael S. Tsirkin
2016-05-02 8:33 ` David Kiarie
2016-05-04 6:12 ` Jan Kiszka
2016-05-04 7:05 ` David Kiarie
2016-05-04 7:26 ` Jan Kiszka
2016-05-04 7:39 ` Valentine Sinitsyn
2016-05-04 10:51 ` David Kiarie
2016-05-04 10:58 ` Valentine Sinitsyn
2016-05-04 11:02 ` David Kiarie
2016-05-04 11:05 ` Valentine Sinitsyn
2016-05-05 14:20 ` David Kiarie
-- strict thread matches above, loose matches on Subject: below --
2016-04-24 22:12 David Kiarie
2016-04-24 22:12 ` [Qemu-devel] [V9 3/4] hw/core: Add AMD IOMMU to machine properties David Kiarie
2016-04-25 3:00 ` Peter Xu
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=5725C91D.5090209@redhat.com \
--to=marcel@redhat.com \
--cc=davidkiarie4@gmail.com \
--cc=imammedo@redhat.com \
--cc=jan.kiszka@web.de \
--cc=mst@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=valentine.sinitsyn@gmail.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.