All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marcel Apfelbaum <marcel@redhat.com>
To: David Kiarie <davidkiarie4@gmail.com>
Cc: Valentine Sinitsyn <valentine.sinitsyn@gmail.com>,
	Jan Kiszka <jan.kiszka@web.de>,
	QEMU Developers <qemu-devel@nongnu.org>,
	"Michael S. Tsirkin" <mst@redhat.com>
Subject: Re: [Qemu-devel] [V7 3/4] hw/core: Add AMD IOMMU to machine properties
Date: Mon, 14 Mar 2016 12:14:46 +0200	[thread overview]
Message-ID: <56E68F16.1090308@redhat.com> (raw)
In-Reply-To: <CABdVeACJz78QZB=J0ry08d4KdwvcLXVZoXkgXHV==Wj6JVy2rg@mail.gmail.com>

On 03/14/2016 11:34 AM, David Kiarie wrote:
> On Mon, Mar 14, 2016 at 11:40 AM, Marcel Apfelbaum <marcel@redhat.com> wrote:
>> On 03/14/2016 02:24 AM, David Kiarie wrote:
>>>
>>> Add IOMMU as a string to machine properties which is
>>> used to control whether and the type of IOMMU to emulate
>>>
>>> Signed-off-by: David Kiarie <davidkiarie4@gmail.com>
>>> ---
>>>    hw/core/machine.c   | 27 ++++++++++++++++++++++++---
>>>    include/hw/boards.h |  1 +
>>>    qemu-options.hx     |  7 +++++--
>>>    util/qemu-config.c  |  4 ++--
>>>    4 files changed, 32 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/hw/core/machine.c b/hw/core/machine.c
>>> index a8c4680..ce23b3d 100644
>>> --- a/hw/core/machine.c
>>> +++ b/hw/core/machine.c
>>> @@ -14,6 +14,8 @@
>>>    #include "hw/boards.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"
>>> @@ -298,6 +300,20 @@ static void machine_set_iommu(Object *obj, bool
>>> value, Error **errp)
>>>        ms->iommu = value;
>>>    }
>>>
>>> +static bool machine_get_amd_iommu_override(Object *obj, Error **errp)
>>> +{
>>> +    MachineState *ms = MACHINE(obj);
>>> +
>>> +    return ms->amd_iommu_type;
>>> +}
>>> +
>>> +static void machine_set_amd_iommu_override(Object *obj, bool value, Error
>>> **errp)
>>> +{
>>> +    MachineState *ms = MACHINE(obj);
>>> +
>>> +    ms->amd_iommu_type = value;
>>> +}
>>> +
>>>    static void machine_set_suppress_vmdesc(Object *obj, bool value, Error
>>> **errp)
>>>    {
>>>        MachineState *ms = MACHINE(obj);
>>> @@ -471,10 +487,15 @@ 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_bool(obj, "amd-iommu",
>>> +                            machine_get_amd_iommu_override,
>>> +                            machine_set_amd_iommu_override, NULL);
>>> +    object_property_set_description(obj, "amd-iommu",
>>> +                                    "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 b5d7eae..5bdd0bb 100644
>>> --- a/include/hw/boards.h
>>> +++ b/include/hw/boards.h
>>> @@ -126,6 +126,7 @@ struct MachineState {
>>>        bool igd_gfx_passthru;
>>>        char *firmware;
>>>        bool iommu;
>>> +    bool amd_iommu_type;
>>>        bool suppress_vmdesc;
>>>        bool enforce_config_section;
>>>
>>> diff --git a/qemu-options.hx b/qemu-options.hx
>>> index 0cf7bb9..de3f02e 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"
>>> +    "                amd-iommu=on|off overrides emulated IOMMU to AMD
>>> IOMMU (default: off)\n"
>>
>>
>> Hi David,
>>
>> I think this is a step backward from the last series (in my opinion).
>> Summarizing what Jan and Michael said, it should be:
>>    iommu=on|off controls emulated IOMMU support(default: off)
>>    x-iommu-type=intel|amd controls the IOMMU emulation type(default: intel)
>>
>> In this way:
>>    -machine iommu=on => it works like before
>>    -machine iommu=on,x-iommu-type=intel => ask for intel emulation
>>    -machine iommu=off,x-iommu-type=amd => ask for amd emulation
>>
>> The "x-" prefix I suppose is for "tech preview" property, right Michael?
>>
>> Of course -device iommu,type="intel|amd" would be preferred, but I
>> understand
>
> I thought the idea was to get rid of the "ugly" option parsing which
> will remain if I have it as above...
>

Hi,

Well, we can limit the parsing to one place, when the option is set in machine.
Let's say the machine has a string property "x-iommu-type" (with only "set" property implemented, no "get")

     object_property_add_str(obj, "x-iommu-type",
                             NULL, machine_set_iommu_type, NULL);

You can parse and validate the type *only inside* machine_set_iommu_type
and use an enum as a machine field. The "intel"/"amd" strings and parsing would
be isolated to machine.c file which is reasonable.

You defined already the enum in patch 2/4: "iommu_type". Maybe you can rename it to MachineIommuType
or something and add it to include/hw/boards.h.

 From this point forward you can use only the enum value in code.

Thanks,
Marcel


>> is not in the scope of this series.
>>
>> Thanks,
>> Marcel
>>
>>
>>
>>
>>
>>
>>>        "                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 amd-iommu=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..f1b5a3b 100644
>>> --- a/util/qemu-config.c
>>> +++ b/util/qemu-config.c
>>> @@ -213,8 +213,8 @@ 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_STRING,
>>> +            .help = "Enables IOMMU and sets the emulated type",
>>>            },{
>>>                .name = "suppress-vmdesc",
>>>                .type = QEMU_OPT_BOOL,
>>>
>>

  reply	other threads:[~2016-03-14 10:14 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-14  0:24 [Qemu-devel] [V7 0/4] AMD IOMMU David Kiarie
2016-03-14  0:24 ` [Qemu-devel] [V7 1/4] hw/i386: Introduce " David Kiarie
2016-03-14  0:24 ` [Qemu-devel] [V7 2/4] hw/i386: ACPI table for " David Kiarie
2016-03-14  8:57   ` Marcel Apfelbaum
2016-03-14  0:24 ` [Qemu-devel] [V7 3/4] hw/core: Add AMD IOMMU to machine properties David Kiarie
2016-03-14  8:40   ` Marcel Apfelbaum
2016-03-14  9:34     ` David Kiarie
2016-03-14 10:14       ` Marcel Apfelbaum [this message]
2016-03-14  0:24 ` [Qemu-devel] [V7 4/4] hw/pci-host: Emulate AMD IOMMU David Kiarie

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=56E68F16.1090308@redhat.com \
    --to=marcel@redhat.com \
    --cc=davidkiarie4@gmail.com \
    --cc=jan.kiszka@web.de \
    --cc=mst@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.