From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36877) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bD9pn-000229-EX for qemu-devel@nongnu.org; Wed, 15 Jun 2016 08:22:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bD9pk-0004Do-7D for qemu-devel@nongnu.org; Wed, 15 Jun 2016 08:22:15 -0400 Received: from mail-wm0-x241.google.com ([2a00:1450:400c:c09::241]:34118) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bD9pj-0004De-WF for qemu-devel@nongnu.org; Wed, 15 Jun 2016 08:22:12 -0400 Received: by mail-wm0-x241.google.com with SMTP id 187so3591327wmz.1 for ; Wed, 15 Jun 2016 05:22:10 -0700 (PDT) From: David Kiarie Date: Wed, 15 Jun 2016 15:21:48 +0300 Message-Id: <1465993312-18119-1-git-send-email-davidkiarie4@gmail.com> Subject: [Qemu-devel] [V12 0/4] AMD IOMMU List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: marcel@redhat.com, mst@redhat.com, peterx@redhat.com, alex.williamson@redhat.com, valentine.sinitsyn@gmail.com, jan.kiszka@web.de, ehabkost@redhat.com, David Kiarie Hi all, This patchset adds basic AMD IOMMU emulation support to Qemu. Changes since V11 -AMD IOMMU is not started with -device amd-iommu (with a dependency on Marcel's patches). -IOMMU commands are represented using bitfields which is less error prone and more readable[Peter] -Changed from debug fprintfs to tracing[Jan] Changes since V10 -Support for huge pages including some obscure AMD IOMMU feature that allows default page size override[Jan]. -Fixed an issue with generation of interrupts. We noted that AMD IOMMU has BusMaster- and is therefore not able to generate interrupts like any other PCI device. We have resulted in writing directly to system address but this could be fixed by some patches which have not been merged yet. Changes since v9 -amd_iommu prefixes have been renamed to a shorter 'amdvi' both in the macros and in the functions/code. The register macros have not been moved to the implementation file since almost the macros there are basically macros and I reckoned renaming them should suffice. -taken care of byte order in the use of 'dma_memory_read'[Michael] -Taken care of invalid DTE entries to ensure no DMA unless a device is configured to allow it. -An issue with the emulate IOMMU defaulting to AMD_IOMMU has been fixed[Marcel] You can test[1] this patches by starting with parameters qemu-system-x86_64 -M -device amd-iommu -m 2G -enable-kvm -smp 4 -cpu host -hda file.img -soundhw ac97 emulating whatever devices you want. Not passing any command line parameters to linux should be enough to test this patches since the devices are basically passes-through but to the 'host' (l1 guest). You can still go ahead pass command line parameter 'iommu=pt iommu=1' and try to pass a device to L2 guest. This can also done without passing any iommu related parameters to the kernel. For convinience: [1] https://github.com/aslaq/qemu/tree/v12 David Kiarie (4): hw/pci: Prepare for AMD IOMMU trace-events: Add AMD IOMMU trace events hw/i386: Introduce AMD IOMMU hw/i386: AMD IOMMU IVRS table hw/acpi/aml-build.c | 2 +- hw/i386/Makefile.objs | 1 + hw/i386/acpi-build.c | 95 ++- hw/i386/amd_iommu.c | 1559 +++++++++++++++++++++++++++++++++++++++++++ hw/i386/amd_iommu.h | 287 ++++++++ include/hw/acpi/acpi-defs.h | 13 + include/hw/acpi/aml-build.h | 1 + include/hw/pci/pci.h | 2 + trace-events | 29 + 9 files changed, 1977 insertions(+), 12 deletions(-) create mode 100644 hw/i386/amd_iommu.c create mode 100644 hw/i386/amd_iommu.h -- 2.1.4