All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Auger <eric.auger@redhat.com>
To: eric.auger.pro@gmail.com, eric.auger@redhat.com,
	peter.maydell@linaro.org, alex.williamson@redhat.com,
	mst@redhat.com, qemu-arm@nongnu.org, qemu-devel@nongnu.org,
	jean-philippe.brucker@arm.com
Cc: kevin.tian@intel.com, marc.zyngier@arm.com, tn@semihalf.com,
	will.deacon@arm.com, drjones@redhat.com, peterx@redhat.com,
	linuc.decode@gmail.com, bharat.bhushan@nxp.com,
	christoffer.dall@linaro.org
Subject: [Qemu-arm] [RFC v5 00/22] VIRTIO-IOMMU device
Date: Fri, 19 Jan 2018 14:48:53 +0000	[thread overview]
Message-ID: <1516373355-305-1-git-send-email-eric.auger@redhat.com> (raw)

This series implements the virtio-iommu device.

This v5 is an upgrade to v0.5 spec [1].

Compared to v4:
- event queue and fault reporting
- we now return the IOAPIC MSI region if the virtio-iommu is instantiated
  in a PC machine.
- we bypass transactions on MSI HW region and fault on reserved ones.
- We support ACPI boot with mach-virt (based on IORT proposal)
- We moved to the new driver naming conventions
- simplified mach-virt instantiation
- worked around the disappearing of pci_find_primary_bus

Best Regards

Eric

This series can be found at:
https://github.com/eauger/qemu/tree/v2.11.0-virtio-iommu-v5

References:
[1] [RFC] virtio-iommu version 0.5
git://linux-arm.org/virtio-iommu.git viommu/v0.5

[2] guest branch featuring the virtio-iommu driver v0.5
git://linux-arm.org/linux-jpb.git virtio-iommu/v0.5.1

Testing:
- tested with guest using virtio-pci-net and virtio-blk-pci
  (,vhost=off,iommu_platform,disable-modern=off,disable-legacy=on)
- virtio-blk-pci uses irqfd: with GICv3, use
  "target/arm/kvm: Translate the MSI doorbell in kvm_arch_fixup_msi_route"
  available on my branch
- VFIO support will be brought by a separate series
- on x86 is hacked guest kernel (available on demand)

History:
v4 -> v5:
- new functionalities reported above + below fixes:
- in virtio_iommu_translate, check the dev->as is not NULL
- initialize as->device_list in virtio_iommu_get_as
- initialize bufstate.error to false in virtio_iommu_probe

v3-> v4:
- see above

v2 -> v3:
- rebase on top of 2.10-rc0 and especially
  [PATCH qemu v9 0/2] memory/iommu: QOM'fy IOMMU MemoryRegion
- add mutex init
- fix as->mappings deletion using g_tree_ref/unref
- when a dev is attached whereas it is already attached to
  another address space, first detach it
- fix some error values
- page_sizes = TARGET_PAGE_MASK;
- I haven't changed the unmap() semantics yet, waiting for the
  next virtio-iommu spec revision.

v1 -> v2:
- fix redifinition of viommu_as typedef


Eric Auger (22):
  machine: Add a get_primary_pci_bus callback
  hw/arm/virt: Implement get_primary_pci_bus
  pc: Implement get_primary_pci_bus
  update-linux-headers: Import virtio_iommu.h
  linux-headers: Partial update for virtio-iommu
  virtio-iommu: Add skeleton
  virtio-iommu: Decode the command payload
  virtio-iommu: Add the iommu regions
  virtio-iommu: Register attached endpoints
  virtio-iommu: Implement attach/detach command
  virtio-iommu: Implement map/unmap
  virtio-iommu: Implement translate
  virtio-iommu: Implement probe request
  virtio-iommu: Add an msi_bypass property
  virtio-iommu: Implement fault reporting
  virtio_iommu: Handle reserved regions in translation process
  hw/arm/virt: Add virtio-iommu to the virt board
  hw/arm/virt-acpi-build: Add virtio-iommu node in IORT table
  memory.h: Add set_page_size_mask IOMMUMemoryRegion callback
  hw/vfio/common: Set the IOMMUMemoryRegion supported page sizes
  virtio-iommu: Implement set_page_size_mask
  hw/vfio/common: Do not print error when viommu translates into an mmio
    region

 hw/arm/virt-acpi-build.c                      |   55 +-
 hw/arm/virt.c                                 |   99 ++-
 hw/i386/pc.c                                  |    8 +
 hw/vfio/common.c                              |    7 +-
 hw/virtio/Makefile.objs                       |    1 +
 hw/virtio/trace-events                        |   25 +
 hw/virtio/virtio-iommu.c                      | 1063 +++++++++++++++++++++++++
 include/exec/memory.h                         |    4 +
 include/hw/acpi/acpi-defs.h                   |   21 +-
 include/hw/arm/virt.h                         |   19 +
 include/hw/boards.h                           |    3 +
 include/hw/vfio/vfio-common.h                 |    1 +
 include/hw/virtio/virtio-iommu.h              |   63 ++
 include/standard-headers/linux/virtio_ids.h   |    1 +
 include/standard-headers/linux/virtio_iommu.h |  195 +++++
 linux-headers/linux/virtio_iommu.h            |    1 +
 scripts/update-linux-headers.sh               |    3 +
 17 files changed, 1552 insertions(+), 17 deletions(-)
 create mode 100644 hw/virtio/virtio-iommu.c
 create mode 100644 include/hw/virtio/virtio-iommu.h
 create mode 100644 include/standard-headers/linux/virtio_iommu.h
 create mode 100644 linux-headers/linux/virtio_iommu.h

-- 
1.9.1


WARNING: multiple messages have this Message-ID (diff)
From: Eric Auger <eric.auger@redhat.com>
To: eric.auger.pro@gmail.com, eric.auger@redhat.com,
	peter.maydell@linaro.org, alex.williamson@redhat.com,
	mst@redhat.com, qemu-arm@nongnu.org, qemu-devel@nongnu.org,
	jean-philippe.brucker@arm.com
Cc: will.deacon@arm.com, kevin.tian@intel.com, marc.zyngier@arm.com,
	christoffer.dall@linaro.org, drjones@redhat.com, wei@redhat.com,
	tn@semihalf.com, bharat.bhushan@nxp.com, peterx@redhat.com,
	linuc.decode@gmail.com
Subject: [Qemu-devel] [RFC v5 00/22] VIRTIO-IOMMU device
Date: Fri, 19 Jan 2018 14:48:53 +0000	[thread overview]
Message-ID: <1516373355-305-1-git-send-email-eric.auger@redhat.com> (raw)

This series implements the virtio-iommu device.

This v5 is an upgrade to v0.5 spec [1].

Compared to v4:
- event queue and fault reporting
- we now return the IOAPIC MSI region if the virtio-iommu is instantiated
  in a PC machine.
- we bypass transactions on MSI HW region and fault on reserved ones.
- We support ACPI boot with mach-virt (based on IORT proposal)
- We moved to the new driver naming conventions
- simplified mach-virt instantiation
- worked around the disappearing of pci_find_primary_bus

Best Regards

Eric

This series can be found at:
https://github.com/eauger/qemu/tree/v2.11.0-virtio-iommu-v5

References:
[1] [RFC] virtio-iommu version 0.5
git://linux-arm.org/virtio-iommu.git viommu/v0.5

[2] guest branch featuring the virtio-iommu driver v0.5
git://linux-arm.org/linux-jpb.git virtio-iommu/v0.5.1

Testing:
- tested with guest using virtio-pci-net and virtio-blk-pci
  (,vhost=off,iommu_platform,disable-modern=off,disable-legacy=on)
- virtio-blk-pci uses irqfd: with GICv3, use
  "target/arm/kvm: Translate the MSI doorbell in kvm_arch_fixup_msi_route"
  available on my branch
- VFIO support will be brought by a separate series
- on x86 is hacked guest kernel (available on demand)

History:
v4 -> v5:
- new functionalities reported above + below fixes:
- in virtio_iommu_translate, check the dev->as is not NULL
- initialize as->device_list in virtio_iommu_get_as
- initialize bufstate.error to false in virtio_iommu_probe

v3-> v4:
- see above

v2 -> v3:
- rebase on top of 2.10-rc0 and especially
  [PATCH qemu v9 0/2] memory/iommu: QOM'fy IOMMU MemoryRegion
- add mutex init
- fix as->mappings deletion using g_tree_ref/unref
- when a dev is attached whereas it is already attached to
  another address space, first detach it
- fix some error values
- page_sizes = TARGET_PAGE_MASK;
- I haven't changed the unmap() semantics yet, waiting for the
  next virtio-iommu spec revision.

v1 -> v2:
- fix redifinition of viommu_as typedef


Eric Auger (22):
  machine: Add a get_primary_pci_bus callback
  hw/arm/virt: Implement get_primary_pci_bus
  pc: Implement get_primary_pci_bus
  update-linux-headers: Import virtio_iommu.h
  linux-headers: Partial update for virtio-iommu
  virtio-iommu: Add skeleton
  virtio-iommu: Decode the command payload
  virtio-iommu: Add the iommu regions
  virtio-iommu: Register attached endpoints
  virtio-iommu: Implement attach/detach command
  virtio-iommu: Implement map/unmap
  virtio-iommu: Implement translate
  virtio-iommu: Implement probe request
  virtio-iommu: Add an msi_bypass property
  virtio-iommu: Implement fault reporting
  virtio_iommu: Handle reserved regions in translation process
  hw/arm/virt: Add virtio-iommu to the virt board
  hw/arm/virt-acpi-build: Add virtio-iommu node in IORT table
  memory.h: Add set_page_size_mask IOMMUMemoryRegion callback
  hw/vfio/common: Set the IOMMUMemoryRegion supported page sizes
  virtio-iommu: Implement set_page_size_mask
  hw/vfio/common: Do not print error when viommu translates into an mmio
    region

 hw/arm/virt-acpi-build.c                      |   55 +-
 hw/arm/virt.c                                 |   99 ++-
 hw/i386/pc.c                                  |    8 +
 hw/vfio/common.c                              |    7 +-
 hw/virtio/Makefile.objs                       |    1 +
 hw/virtio/trace-events                        |   25 +
 hw/virtio/virtio-iommu.c                      | 1063 +++++++++++++++++++++++++
 include/exec/memory.h                         |    4 +
 include/hw/acpi/acpi-defs.h                   |   21 +-
 include/hw/arm/virt.h                         |   19 +
 include/hw/boards.h                           |    3 +
 include/hw/vfio/vfio-common.h                 |    1 +
 include/hw/virtio/virtio-iommu.h              |   63 ++
 include/standard-headers/linux/virtio_ids.h   |    1 +
 include/standard-headers/linux/virtio_iommu.h |  195 +++++
 linux-headers/linux/virtio_iommu.h            |    1 +
 scripts/update-linux-headers.sh               |    3 +
 17 files changed, 1552 insertions(+), 17 deletions(-)
 create mode 100644 hw/virtio/virtio-iommu.c
 create mode 100644 include/hw/virtio/virtio-iommu.h
 create mode 100644 include/standard-headers/linux/virtio_iommu.h
 create mode 100644 linux-headers/linux/virtio_iommu.h

-- 
1.9.1

             reply	other threads:[~2018-01-19 14:50 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-19 14:48 Eric Auger [this message]
2018-01-19 14:48 ` [Qemu-devel] [RFC v5 00/22] VIRTIO-IOMMU device Eric Auger
2018-01-19 14:48 ` [Qemu-devel] [RFC v5 01/22] machine: Add a get_primary_pci_bus callback Eric Auger
2018-01-19 14:48   ` Eric Auger
2018-01-19 14:48 ` [Qemu-arm] [RFC v5 02/22] hw/arm/virt: Implement get_primary_pci_bus Eric Auger
2018-01-19 14:48   ` [Qemu-devel] " Eric Auger
2018-01-19 14:48 ` [Qemu-arm] [RFC v5 03/22] pc: " Eric Auger
2018-01-19 14:48   ` [Qemu-devel] " Eric Auger
2018-01-19 14:48 ` [Qemu-arm] [RFC v5 04/22] update-linux-headers: Import virtio_iommu.h Eric Auger
2018-01-19 14:48   ` [Qemu-devel] " Eric Auger
2018-01-19 14:48 ` [Qemu-arm] [RFC v5 05/22] linux-headers: Partial update for virtio-iommu Eric Auger
2018-01-19 14:48   ` [Qemu-devel] " Eric Auger
2018-01-19 14:48 ` [Qemu-arm] [RFC v5 06/22] virtio-iommu: Add skeleton Eric Auger
2018-01-19 14:48   ` [Qemu-devel] " Eric Auger
2018-01-19 14:49 ` [Qemu-arm] [RFC v5 07/22] virtio-iommu: Decode the command payload Eric Auger
2018-01-19 14:49   ` [Qemu-devel] " Eric Auger
2018-01-19 14:49 ` [Qemu-devel] [RFC v5 08/22] virtio-iommu: Add the iommu regions Eric Auger
2018-01-19 14:49   ` Eric Auger
2018-01-19 14:49 ` [Qemu-devel] [RFC v5 09/22] virtio-iommu: Register attached endpoints Eric Auger
2018-01-19 14:49   ` Eric Auger
2018-01-19 14:49 ` [Qemu-arm] [RFC v5 10/22] virtio-iommu: Implement attach/detach command Eric Auger
2018-01-19 14:49   ` [Qemu-devel] " Eric Auger
2018-01-19 14:49 ` [Qemu-arm] [RFC v5 11/22] virtio-iommu: Implement map/unmap Eric Auger
2018-01-19 14:49   ` [Qemu-devel] " Eric Auger
2018-01-19 14:49 ` [Qemu-arm] [RFC v5 12/22] virtio-iommu: Implement translate Eric Auger
2018-01-19 14:49   ` [Qemu-devel] " Eric Auger
2018-01-19 14:49 ` [Qemu-devel] [RFC v5 13/22] virtio-iommu: Implement probe request Eric Auger
2018-01-19 14:49   ` Eric Auger
2018-01-19 14:49 ` [Qemu-arm] [RFC v5 14/22] virtio-iommu: Add an msi_bypass property Eric Auger
2018-01-19 14:49   ` [Qemu-devel] " Eric Auger
2018-01-19 14:49 ` [Qemu-devel] [RFC v5 15/22] virtio-iommu: Implement fault reporting Eric Auger
2018-01-19 14:49   ` Eric Auger
2018-01-19 14:49 ` [Qemu-arm] [RFC v5 16/22] virtio_iommu: Handle reserved regions in translation process Eric Auger
2018-01-19 14:49   ` [Qemu-devel] " Eric Auger
2018-01-19 14:49 ` [Qemu-arm] [RFC v5 17/22] hw/arm/virt: Add virtio-iommu to the virt board Eric Auger
2018-01-19 14:49   ` [Qemu-devel] " Eric Auger
2018-01-19 14:49 ` [Qemu-arm] [RFC v5 18/22] hw/arm/virt-acpi-build: Add virtio-iommu node in IORT table Eric Auger
2018-01-19 14:49   ` [Qemu-devel] " Eric Auger
2018-01-19 14:49 ` [Qemu-arm] [RFC v5 19/22] memory.h: Add set_page_size_mask IOMMUMemoryRegion callback Eric Auger
2018-01-19 14:49   ` [Qemu-devel] " Eric Auger
2018-01-19 14:49 ` [Qemu-arm] [RFC v5 20/22] hw/vfio/common: Set the IOMMUMemoryRegion supported page sizes Eric Auger
2018-01-19 14:49   ` [Qemu-devel] " Eric Auger
2018-01-19 14:49 ` [Qemu-arm] [RFC v5 21/22] virtio-iommu: Implement set_page_size_mask Eric Auger
2018-01-19 14:49   ` [Qemu-devel] " Eric Auger
2018-01-19 14:49 ` [Qemu-devel] [RFC v5 22/22] hw/vfio/common: Do not print error when viommu translates into an mmio region Eric Auger
2018-01-19 14:49   ` Eric Auger

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=1516373355-305-1-git-send-email-eric.auger@redhat.com \
    --to=eric.auger@redhat.com \
    --cc=alex.williamson@redhat.com \
    --cc=bharat.bhushan@nxp.com \
    --cc=christoffer.dall@linaro.org \
    --cc=drjones@redhat.com \
    --cc=eric.auger.pro@gmail.com \
    --cc=jean-philippe.brucker@arm.com \
    --cc=kevin.tian@intel.com \
    --cc=linuc.decode@gmail.com \
    --cc=marc.zyngier@arm.com \
    --cc=mst@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=peterx@redhat.com \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=tn@semihalf.com \
    --cc=will.deacon@arm.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.