diff mbox

[v8,16/25] q35: add "intremap" parameter to enable IR

Message ID 1464604298-16739-17-git-send-email-peterx@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Peter Xu May 30, 2016, 10:31 a.m. UTC
One flag is added to specify whether to enable IR for emulated IOMMU. By
default, interrupt remapping is not supportted. To enable it, we should
specify something like:

$ qemu-system-x86_64 -M q35,iommu=on,intremap=on

To be more clear, the following command:

$ qemu-system-x86_64 -M q35,iommu=on

Will enable IOMMU only, without interrupt remapping support.

Currently, Intel IOMMU IR only support kernel-irqchip={off|split}. We
need to specify either of it in -M as well.

Signed-off-by: Peter Xu <peterx@redhat.com>
---
 hw/core/machine.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

Comments

Jan Kiszka May 30, 2016, 12:43 p.m. UTC | #1
On 2016-05-30 12:31, Peter Xu wrote:
> One flag is added to specify whether to enable IR for emulated IOMMU. By
> default, interrupt remapping is not supportted. To enable it, we should
> specify something like:
> 
> $ qemu-system-x86_64 -M q35,iommu=on,intremap=on

Maybe it's time to move on to Marcel's "-device iommu" patches and
convert this switch to a device property directly. Or what is the plan?

Jan
Peter Xu May 30, 2016, 1:33 p.m. UTC | #2
On Mon, May 30, 2016 at 02:43:22PM +0200, Jan Kiszka wrote:
> On 2016-05-30 12:31, Peter Xu wrote:
> > One flag is added to specify whether to enable IR for emulated IOMMU. By
> > default, interrupt remapping is not supportted. To enable it, we should
> > specify something like:
> > 
> > $ qemu-system-x86_64 -M q35,iommu=on,intremap=on
> 
> Maybe it's time to move on to Marcel's "-device iommu" patches and
> convert this switch to a device property directly. Or what is the plan?

I just kept everything as it is since I do not know whether I should
rebase to Marcel's interface now. Anyway, I can do it in future
versions as long as we settle it down.

Marcel, do you have any suggestion?

-- peterx
Marcel Apfelbaum June 2, 2016, 9:21 a.m. UTC | #3
On 05/30/2016 04:33 PM, Peter Xu wrote:
> On Mon, May 30, 2016 at 02:43:22PM +0200, Jan Kiszka wrote:
>> On 2016-05-30 12:31, Peter Xu wrote:
>>> One flag is added to specify whether to enable IR for emulated IOMMU. By
>>> default, interrupt remapping is not supportted. To enable it, we should
>>> specify something like:
>>>
>>> $ qemu-system-x86_64 -M q35,iommu=on,intremap=on
>>
>> Maybe it's time to move on to Marcel's "-device iommu" patches and
>> convert this switch to a device property directly. Or what is the plan?
>
> I just kept everything as it is since I do not know whether I should
> rebase to Marcel's interface now. Anyway, I can do it in future
> versions as long as we settle it down.
>
> Marcel, do you have any suggestion?
>

In a few days we will have a full version, but you can rebase on it
now if you plan a re-spin before that.

Thanks,
Marcel

> -- peterx
>
diff mbox

Patch

diff --git a/hw/core/machine.c b/hw/core/machine.c
index 98471a7..41d6a95 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -314,6 +314,20 @@  static void machine_set_iommu(Object *obj, bool value, Error **errp)
     ms->iommu = value;
 }
 
+static bool machine_get_intremap(Object *obj, Error **errp)
+{
+    MachineState *ms = MACHINE(obj);
+
+    return ms->iommu_intr;
+}
+
+static void machine_set_intremap(Object *obj, bool value, Error **errp)
+{
+    MachineState *ms = MACHINE(obj);
+
+    ms->iommu_intr = value;
+}
+
 static void machine_set_suppress_vmdesc(Object *obj, bool value, Error **errp)
 {
     MachineState *ms = MACHINE(obj);
@@ -501,6 +515,12 @@  static void machine_initfn(Object *obj)
     object_property_set_description(obj, "iommu",
                                     "Set on/off to enable/disable Intel IOMMU (VT-d)",
                                     NULL);
+    object_property_add_bool(obj, "intremap", machine_get_intremap,
+                             machine_set_intremap, NULL);
+    object_property_set_description(obj, "intremap",
+                                    "Set on/off to enable/disable IOMMU"
+                                    " interrupt remapping",
+                                    NULL);
     object_property_add_bool(obj, "suppress-vmdesc",
                              machine_get_suppress_vmdesc,
                              machine_set_suppress_vmdesc, NULL);