Skip to content

Generic IOMMU pooled allocator

Sowmini Varadhan linuxppc-dev sparclinux 6 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v10 Latest3 patches 2 repliesIn review
  2. v9 RFC3 patches 4 repliesSuperseded
  3. v8 RFC3 patches 26 repliesSuperseded
Earlier versions · 3
VersionPostedPatchesRepliesStatus
v73 patches10 repliesSuperseded
v63 patches2 repliesSuperseded
v5 RFC3 patches1 replySuperseded

v2 changes from the cover letter

- incorporate David Miller editorial comments: sparc specific fields moved from iommu-common into sparc's iommu_64.h
- make the npools value an input parameter, for the case when the iommu map size is not very large
- cookie_to_index mapping, and optimizations for span-boundary check, for use case such as LDC.

Patches in v10 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/3Break up monolithic iommu table/lock into finer graularity pools and lockinclude/linux/iommu-common.h lib/Makefile lib/iommu-common.c+318 -10 replies
2/3sparc: Make sparc64 use scalable lib/iommu-common.c functionsarch/sparc/include/asm/iommu_64.h arch/sparc/kernel/iommu.c arch/sparc/kernel/iommu_common.h +1 more+128 -2420 replies
3/3sparc: Make LDC use common iommu poll management functionsarch/sparc/kernel/ldc.c+65 -880 replies

Reviews trailers per patch

All 3 patches have a Reviewed-by or Acked-by.

PatchBenjamin Herrenschmidt
1/3A-b
2/3A-b
3/3A-b

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

Read the v10 thread

Cover letter [PATCH v10 0/3] Generic IOMMU pooled allocator

Investigation of network performance on Sparc shows a high degree of locking contention in the IOMMU allocator, and it was noticed that the PowerPC code has a better locking model.

This patch series tries to extract the generic parts of the PowerPC code so that it can be shared across multiple PCI devices and architectures.

v10: resend patchv9 without RFC tag, and a new mail Message-Id, (previous non-RFC attempt did not show up on the patchwork queue?)

Full revision history below:
v2 changes:
- incorporate David Miller editorial comments: sparc specific fields moved from iommu-common into sparc's iommu_64.h
- make the npools value an input parameter, for the case when the iommu map size is not very large
- cookie_to_index mapping, and optimizations for span-boundary check, for use case such as LDC.

v3: eliminate iommu_sparc, rearrange the ->demap indirection to
be invoked under the pool lock.

v4: David Miller review changes:
- s/IOMMU_ERROR_CODE/DMA_ERROR_CODE
- page_table_map_base and page_table_shift are unsigned long, not u32.

v5: removed ->cookie_to_index and ->demap indirection from the
iommu_tbl_ops The caller needs to call these functions as needed, before invoking the generic arena allocator functions. Added the "skip_span_boundary" argument to iommu_tbl_pool_init() for those callers like LDC which do no care about span boundary checks.

v6: removed iommu_tbl_ops, and instead pass the ->flush_all as
an indirection to iommu_tbl_pool_init(); only invoke ->flush_all when there is no large_pool, based on the assumption that large-pool usage is infrequently encountered

v7: moved pool_hash initialization to lib/iommu-common.c and cleaned up
code duplication from sun4v/sun4u/ldc.

v8: Addresses BenH comments with one exception: I've left the
IOMMU_POOL_HASH as is, so that powerpc can tailor it to their convenience. Discard trylock for simple spin_lock to acquire pool

v9: Addresses latest BenH comments: need_flush checks, add support
for dma mask and align_order.

v10: resend without RFC tag, and new mail Message-Id.

Sowmini Varadhan (3):
Break up monolithic iommu table/lock into finer graularity pools and
lock
Make sparc64 use scalable lib/iommu-common.c functions Make LDC use common iommu poll management functions

 arch/sparc/include/asm/iommu_64.h |    7 +-
 arch/sparc/kernel/iommu.c         |  172 ++++++------------------
 arch/sparc/kernel/iommu_common.h  |    8 -
 arch/sparc/kernel/ldc.c           |  153 +++++++++------------
 arch/sparc/kernel/pci_sun4v.c     |  183 ++++++++++++--------------
 include/linux/iommu-common.h      |   51 +++++++
 lib/Makefile                      |    2 +-
 lib/iommu-common.c                |  266 +++++++++++++++++++++++++++++++++++++
 8 files changed, 511 insertions(+), 331 deletions(-)
 create mode 100644 include/linux/iommu-common.h
 create mode 100644 lib/iommu-common.c