Skip to content

virtio DMA API, yet again

Andy Lutomirski kvm linux-s390 lkml sparclinux virtualization xen-devel 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v5 Latest10 patches 41 repliesIn review

Changes in v5 from the cover letter

- Bake vring_use_dma_api in from the beginning.
- Automatically enable only on Xen.
- Add module parameter.
- Add s390 and alpha DMA API implementations.
- Rebase to 4.5-rc1.

Patches in v5 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/10dma: Provide simple noop dma opsinclude/linux/dma-mapping.h lib/Makefile lib/dma-noop.c+78 -00 replies
1/10dma: Provide simple noop dma opsinclude/linux/dma-mapping.h lib/Makefile lib/dma-noop.c+78 -00 replies
2/10alpha/dma: use common noop dma opsarch/alpha/kernel/pci-noop.c+4 -420 replies
2/10alpha/dma: use common noop dma opsarch/alpha/kernel/pci-noop.c+4 -420 replies
3/10s390/dma: Allow per device dma opsarch/s390/Kconfig arch/s390/include/asm/device.h arch/s390/include/asm/dma-mapping.h +2 more+14 -90 replies
3/10s390/dma: Allow per device dma opsarch/s390/Kconfig arch/s390/include/asm/device.h arch/s390/include/asm/dma-mapping.h +2 more+14 -90 replies
4/10vring: Introduce vring_use_dma_api()drivers/virtio/virtio_ring.c+24 -010 replies
4/10vring: Introduce vring_use_dma_api()drivers/virtio/virtio_ring.c+24 -00 replies
4/10vring: Introduce vring_use_dma_api()drivers/virtio/virtio_ring.c+24 -00 replies
5/10virtio_ring: Support DMA APIsdrivers/virtio/Kconfig drivers/virtio/virtio_ring.c tools/virtio/linux/dma-mapping.h+183 -360 replies
5/10virtio_ring: Support DMA APIsdrivers/virtio/Kconfig drivers/virtio/virtio_ring.c tools/virtio/linux/dma-mapping.h+183 -360 replies
6/10virtio: Add improved queue allocation APIdrivers/virtio/virtio_ring.c include/linux/virtio.h include/linux/virtio_ring.h+204 -320 replies
6/10virtio: Add improved queue allocation APIdrivers/virtio/virtio_ring.c include/linux/virtio.h include/linux/virtio_ring.h+204 -320 replies
7/10virtio_mmio: Use the DMA API if enableddrivers/virtio/virtio_mmio.c+15 -520 replies
7/10virtio_mmio: Use the DMA API if enableddrivers/virtio/virtio_mmio.c+15 -520 replies
8/10virtio_pci: Use the DMA API if enableddrivers/virtio/virtio_pci_common.h drivers/virtio/virtio_pci_legacy.c drivers/virtio/virtio_pci_modern.c+33 -760 replies
8/10virtio_pci: Use the DMA API if enableddrivers/virtio/virtio_pci_common.h drivers/virtio/virtio_pci_legacy.c drivers/virtio/virtio_pci_modern.c+33 -760 replies
8/10virtio_pci: Use the DMA API if enableddrivers/virtio/virtio_pci_common.h drivers/virtio/virtio_pci_legacy.c drivers/virtio/virtio_pci_modern.c+33 -760 replies
9/10vring: Use the DMA API on Xendrivers/virtio/virtio_ring.c+12 -014 replies
9/10vring: Use the DMA API on Xendrivers/virtio/virtio_ring.c+12 -00 replies
9/10vring: Use the DMA API on Xendrivers/virtio/virtio_ring.c+12 -00 replies
10/10vring: Add a module parameter to force-enable the DMA APIdrivers/virtio/virtio_ring.c+5 -10 replies
10/10vring: Add a module parameter to force-enable the DMA APIdrivers/virtio/virtio_ring.c+5 -10 replies
10/10vring: Add a module parameter to force-enable the DMA APIdrivers/virtio/virtio_ring.c+5 -10 replies

Reviews trailers per patch

6 of 24 patches have a Reviewed-by or Acked-by.

PatchJoerg RoedelSebastian Ott
1/10R-b R-b
1/10R-b R-b
2/10R-b R-b
2/10R-b R-b
3/10R-b R-b A-b A-b
3/10R-b R-b A-b A-b
4/10
4/10
4/10
5/10
5/10
6/10
6/10
7/10
7/10
8/10
8/10
8/10
9/10
9/10
9/10
10/10
10/10
10/10

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v5 thread

Cover letter [PATCH v5 00/10] virtio DMA API, yet again

This switches virtio to use the DMA API on Xen and if requested by module option.

This fixes virtio on Xen, and it should break anything because it's off by default on everything except Xen PV on x86.

To the Xen people: is this okay? If it doesn't work on other Xen variants (PVH? HVM?), can you submit follow-up patches to fix it?

To everyone else: we've waffled on this for way too long. I think we should to get DMA API implementation in with a conservative policy like this rather than waiting until we achieve perfection. I'm tired of carrying these patches around.

Michael, if these survive review, can you stage these in your tree? Can you also take a look at tools/virtio? I probably broke it, but I couldn't get it to build without these patches either, so I'm stuck.

Changes from v4:
- Bake vring_use_dma_api in from the beginning.
- Automatically enable only on Xen.
- Add module parameter.
- Add s390 and alpha DMA API implementations.
- Rebase to 4.5-rc1.

Changes from v3:
- More big-endian fixes.
- Added better virtio-ring APIs that handle allocation and use them in virtio-mmio and virtio-pci.
- Switch to Michael's virtio-net patch.

Changes from v2:
- Fix vring_mapping_error incorrect argument

Changes from v1:
- Fix an endian conversion error causing a BUG to hit.
- Fix a DMA ordering issue (swiotlb=force works now).
- Minor cleanups.

Andy Lutomirski (7):
vring: Introduce vring_use_dma_api()
virtio_ring: Support DMA APIs
virtio: Add improved queue allocation API
virtio_mmio: Use the DMA API if enabled
virtio_pci: Use the DMA API if enabled
vring: Use the DMA API on Xen
vring: Add a module parameter to force-enable the DMA API

Christian Borntraeger (3):
dma: Provide simple noop dma ops
alpha/dma: use common noop dma ops
s390/dma: Allow per device dma ops

 arch/alpha/kernel/pci-noop.c        |  46 +---
 arch/s390/Kconfig                   |   6 +-
 arch/s390/include/asm/device.h      |   6 +-
 arch/s390/include/asm/dma-mapping.h |   6 +-
 arch/s390/pci/pci.c                 |   1 +
 arch/s390/pci/pci_dma.c             |   4 +-
 drivers/virtio/Kconfig              |   2 +-
 drivers/virtio/virtio_mmio.c        |  67 ++----
 drivers/virtio/virtio_pci_common.h  |   6 -
 drivers/virtio/virtio_pci_legacy.c  |  42 ++--
 drivers/virtio/virtio_pci_modern.c  |  61 ++----
 drivers/virtio/virtio_ring.c        | 412 ++++++++++++++++++++++++++++++------
 include/linux/dma-mapping.h         |   2 +
 include/linux/virtio.h              |  23 +-
 include/linux/virtio_ring.h         |  35 +++
 lib/Makefile                        |   1 +
 lib/dma-noop.c                      |  75 +++++++
 tools/virtio/linux/dma-mapping.h    |  17 ++
 18 files changed, 568 insertions(+), 244 deletions(-)
 create mode 100644 lib/dma-noop.c
 create mode 100644 tools/virtio/linux/dma-mapping.h
Signature · 1 line
2.5.0