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,
	qemu-devel@nongnu.org, qemu-arm@nongnu.org,
	peter.maydell@linaro.org, jean-philippe@linaro.org,
	dgilbert@redhat.com, quintela@redhat.com, mst@redhat.com,
	peterx@redhat.com
Cc: kevin.tian@intel.com, bharatb.linux@gmail.com, tnowicki@marvell.com
Subject: [PATCH v14 00/11] VIRTIO-IOMMU device
Date: Fri,  7 Feb 2020 10:31:52 +0100	[thread overview]
Message-ID: <20200207093203.3788-1-eric.auger@redhat.com> (raw)

This series implements the QEMU virtio-iommu device.

This matches the v0.12 spec (voted) and the corresponding
virtio-iommu driver upstreamed in 5.3. All kernel dependencies
are resolved for DT integration. The virtio-iommu can be
instantiated in ARM virt using:

"-device virtio-iommu-pci,x-dt-binding".

Non DT mode is not yet supported as it has non resolved kernel
dependencies [1].

This feature targets 5.0.

Integration with vhost devices and vfio devices is not part
of this series. Please follow Bharat's respins [2].

Best Regards

Eric

This series can be found at:
https://github.com/eauger/qemu/tree/v4.2-virtio-iommu-v14

References:
[1] [RFC 00/13] virtio-iommu on non-devicetree platforms
[2] [PATCH RFC v5 0/5] virtio-iommu: VFIO integration

Testing:
- tested with guest using virtio-net-pci
  (,vhost=off,iommu_platform,disable-modern=off,disable-legacy=on)
  and virtio-blk-pci
- migration

History:

v13 -> v14:
- added "virtio-iommu-pci: Introduce the x-dt-binding option"
- Removed the mappings gtree ref counting and simply delete
  the gtree when the last EP is detached from the domain
- call virtio_iommu_detach_endpoint_from_domain from
  virtio_iommu_put_endpoint

v12 -> v13:
- Take into account Peter's comments
- fix qtest error and accomodate for directory changes in
  test
- remove "[PATCH v12 01/13] migration: Support QLIST migration"
  which is now upstream
- fix iommu_find_iommu_pcibus()
- squash commits as requested by Peter
- remove spurious guest log

v11 -> v12:
- took into account Peter and Jean's comments
  - use guest features
  - restore as_by_bus_num and when attaching devices, check they are
    actually protected by the IOMMU. Updated the tests accordingly.
  - fix the mapping ref counting and make sure mappings are properly
    cleaned.
  - Use CamelCase for data types
  - simplify postload callback as suggested by Peter
  - add R-bs
- fix mingw compilation issue
- add IOMMU migration priority
- qlist migration load simplified following Juan's suggestion

v10 -> v11:
- introduce virtio_iommu_handle_req macro
- migration support
- introduce DEFINE_PROP_INTERVAL and pass reserved regions
  through an array of those
- domain gtree simplification

v9 -> v10:
- rebase on 4.1.0-rc2, compliance with 0.12 spec
- removed ACPI part
- cleanup (see individual change logs)
- moved to a PATCH series

v8 -> v9:
- virtio-iommu-pci device needs to be instantiated from the command
  line (RID is not imposed anymore).
- tail structure properly initialized

v7 -> v8:
- virtio-iommu-pci added
- virt instantiation modified
- DT and ACPI modified to exclude the iommu RID from the mapping
- VIRTIO_IOMMU_F_BYPASS, VIRTIO_F_VERSION_1 features exposed

v6 -> v7:
- rebase on qemu 3.0.0-rc3
- minor update against v0.7
- fix issue with EP not on pci.0 and ACPI probing
- change the instantiation method

v5 -> v6:
- minor update against v0.6 spec
- fix g_hash_table_lookup in virtio_iommu_find_add_as
- replace some error_reports by qemu_log_mask(LOG_GUEST_ERROR, ...)

v4 -> v5:
- 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
- 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:
- probe request support although no reserved region is returned at
  the moment
- unmap semantics less strict, as specified in v0.4
- device registration, attach/detach revisited
- split into smaller patches to ease review
- propose a way to inform the IOMMU mr about the page_size_mask
  of underlying HW IOMMU, if any
- remove warning associated with the translation of the MSI doorbell

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 redefinition of viommu_as typedef


Eric Auger (11):
  virtio-iommu: Add skeleton
  virtio-iommu: Decode the command payload
  virtio-iommu: Implement attach/detach command
  virtio-iommu: Implement map/unmap
  virtio-iommu: Implement translate
  virtio-iommu: Implement fault reporting
  virtio-iommu-pci: Add virtio iommu pci support
  virtio-iommu-pci: Introduce the x-dt-binding option
  hw/arm/virt: Add the virtio-iommu device tree mappings
  virtio-iommu: Support migration
  tests: Add virtio-iommu test

 hw/arm/virt.c                     |  54 +-
 hw/virtio/Kconfig                 |   5 +
 hw/virtio/Makefile.objs           |   2 +
 hw/virtio/trace-events            |  20 +
 hw/virtio/virtio-iommu-pci.c      | 106 ++++
 hw/virtio/virtio-iommu.c          | 890 ++++++++++++++++++++++++++++++
 include/hw/arm/virt.h             |   2 +
 include/hw/pci/pci.h              |   1 +
 include/hw/virtio/virtio-iommu.h  |  61 ++
 qdev-monitor.c                    |   1 +
 tests/qtest/Makefile.include      |   2 +
 tests/qtest/libqos/virtio-iommu.c | 177 ++++++
 tests/qtest/libqos/virtio-iommu.h |  45 ++
 tests/qtest/virtio-iommu-test.c   | 306 ++++++++++
 14 files changed, 1664 insertions(+), 8 deletions(-)
 create mode 100644 hw/virtio/virtio-iommu-pci.c
 create mode 100644 hw/virtio/virtio-iommu.c
 create mode 100644 include/hw/virtio/virtio-iommu.h
 create mode 100644 tests/qtest/libqos/virtio-iommu.c
 create mode 100644 tests/qtest/libqos/virtio-iommu.h
 create mode 100644 tests/qtest/virtio-iommu-test.c

-- 
2.20.1



             reply	other threads:[~2020-02-07  9:34 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-07  9:31 Eric Auger [this message]
2020-02-07  9:31 ` [PATCH v14 01/11] virtio-iommu: Add skeleton Eric Auger
2020-02-07  9:31 ` [PATCH v14 02/11] virtio-iommu: Decode the command payload Eric Auger
2020-02-07  9:31 ` [PATCH v14 03/11] virtio-iommu: Implement attach/detach command Eric Auger
2020-02-07 20:26   ` Peter Xu
2020-02-08 11:50     ` Auger Eric
2020-02-07  9:31 ` [PATCH v14 04/11] virtio-iommu: Implement map/unmap Eric Auger
2020-02-07  9:31 ` [PATCH v14 05/11] virtio-iommu: Implement translate Eric Auger
2020-02-07  9:31 ` [PATCH v14 06/11] virtio-iommu: Implement fault reporting Eric Auger
2020-02-07  9:31 ` [PATCH v14 07/11] virtio-iommu-pci: Add virtio iommu pci support Eric Auger
2020-02-07  9:32 ` [PATCH v14 08/11] virtio-iommu-pci: Introduce the x-dt-binding option Eric Auger
2020-02-07 10:05   ` Jean-Philippe Brucker
2020-02-07 10:19     ` Auger Eric
2020-02-07 10:24     ` Michael S. Tsirkin
2020-02-07 10:33       ` Auger Eric
2020-02-07 23:04       ` Peter Xu
2020-02-09 20:58         ` Michael S. Tsirkin
2020-02-10 16:48           ` Peter Xu
2020-02-07 10:23   ` Michael S. Tsirkin
2020-02-07 10:51     ` Auger Eric
2020-02-07 11:15       ` Jean-Philippe Brucker
2020-02-07 13:36         ` Auger Eric
2020-02-07 12:00       ` Michael S. Tsirkin
2020-02-07 13:38         ` Auger Eric
2020-02-07  9:32 ` [PATCH v14 09/11] hw/arm/virt: Add the virtio-iommu device tree mappings Eric Auger
2020-02-07  9:32 ` [PATCH v14 10/11] virtio-iommu: Support migration Eric Auger
2020-02-07  9:32 ` [PATCH v14 11/11] tests: Add virtio-iommu test Eric Auger
2020-02-07 10:11 ` [PATCH v14 00/11] VIRTIO-IOMMU device no-reply

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=20200207093203.3788-1-eric.auger@redhat.com \
    --to=eric.auger@redhat.com \
    --cc=bharatb.linux@gmail.com \
    --cc=dgilbert@redhat.com \
    --cc=eric.auger.pro@gmail.com \
    --cc=jean-philippe@linaro.org \
    --cc=kevin.tian@intel.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=quintela@redhat.com \
    --cc=tnowicki@marvell.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.