From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53010) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1apY0b-0002st-T8 for qemu-devel@nongnu.org; Mon, 11 Apr 2016 05:19:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1apY0a-0007Cn-TN for qemu-devel@nongnu.org; Mon, 11 Apr 2016 05:19:49 -0400 Received: from mx1.redhat.com ([209.132.183.28]:49763) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1apY0a-0007Cg-Nw for qemu-devel@nongnu.org; Mon, 11 Apr 2016 05:19:48 -0400 From: Peter Xu Date: Mon, 11 Apr 2016 17:19:11 +0800 Message-Id: <1460366363-4589-2-git-send-email-peterx@redhat.com> In-Reply-To: <1460366363-4589-1-git-send-email-peterx@redhat.com> References: <1460366363-4589-1-git-send-email-peterx@redhat.com> Subject: [Qemu-devel] [PATCH v2 01/13] q35: add "int-remap" flag to enable intr List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: imammedo@redhat.com, rth@twiddle.net, ehabkost@redhat.com, jasowang@redhat.com, marcel@redhat.com, mst@redhat.com, pbonzini@redhat.com, jan.kiszka@web.de, rkrcmar@redhat.com, peterx@redhat.com One flag is added to specify whether to enable INTR 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,intr=on To be more clear, the following command: $ qemu-system-x86_64 -M q35,iommu=on Will enable IOMMU only, without interrupt remapping support. Signed-off-by: Peter Xu --- hw/core/machine.c | 21 +++++++++++++++++++++ include/hw/boards.h | 1 + 2 files changed, 22 insertions(+) diff --git a/hw/core/machine.c b/hw/core/machine.c index 6dbbc85..b48fcaf 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -300,6 +300,20 @@ static void machine_set_iommu(Object *obj, bool value, Error **errp) ms->iommu = value; } +static bool machine_get_intr(Object *obj, Error **errp) +{ + MachineState *ms = MACHINE(obj); + + return ms->iommu_intr; +} + +static void machine_set_intr(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); @@ -382,6 +396,7 @@ static void machine_initfn(Object *obj) ms->kvm_shadow_mem = -1; ms->dump_guest_core = true; ms->mem_merge = true; + ms->iommu_intr = false; object_property_add_str(obj, "accel", machine_get_accel, machine_set_accel, NULL); @@ -478,6 +493,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, "intr", machine_get_intr, + machine_set_intr, NULL); + object_property_set_description(obj, "intr", + "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); diff --git a/include/hw/boards.h b/include/hw/boards.h index aad5f2a..5e15410 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -151,6 +151,7 @@ struct MachineState { bool igd_gfx_passthru; char *firmware; bool iommu; + bool iommu_intr; bool suppress_vmdesc; bool enforce_config_section; -- 2.4.3