linux-doc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/7] Allow dynamic allocation of software IO TLB bounce buffers
@ 2023-04-19 10:03 Petr Tesarik
  2023-04-19 10:03 ` [PATCH v2 1/7] swiotlb: Use a helper to initialize swiotlb fields in struct device Petr Tesarik
                   ` (8 more replies)
  0 siblings, 9 replies; 20+ messages in thread
From: Petr Tesarik @ 2023-04-19 10:03 UTC (permalink / raw)
  To: Jonathan Corbet, Greg Kroah-Hartman, Rafael J. Wysocki,
	Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Daniel Vetter, Christoph Hellwig, Marek Szyprowski, Robin Murphy,
	Borislav Petkov, Paul E. McKenney, Catalin Marinas, Will Deacon,
	Zhen Lei, Randy Dunlap, Damien Le Moal, Kim Phillips,
	Steven Rostedt (Google), Muchun Song, Ondrej Zary,
	Jason A. Donenfeld, Petr Tesarik, Hans de Goede, Dan Williams,
	Andy Shevchenko, Kees Cook, Thomas Gleixner, Won Chung,
	open list:DOCUMENTATION, open list, open list:DRM DRIVERS,
	open list:DMA MAPPING HELPERS
  Cc: Roberto Sassu, Kefeng Wang, petr

From: Petr Tesarik <petr.tesarik.ext@huawei.com>

The goal of my work is to provide more flexibility in the sizing of
SWIOTLB.

The software IO TLB was designed with these assumptions:

1. It would not be used much, especially on 64-bit systems.
2. A small fixed memory area (64 MiB by default) is sufficient to
   handle the few cases which require a bounce buffer.
3. 64 MiB is little enough that it has no impact on the rest of the
   system.

First, if SEV is active, all DMA must be done through shared
unencrypted pages, and SWIOTLB is used to make this happen without
changing device drivers. The software IO TLB size is increased to
6% of total memory in sev_setup_arch(), but that is more of an
approximation. The actual requirements may vary depending on the
amount of I/O and which drivers are used. These factors may not be
know at boot time, i.e. when SWIOTLB is allocated.

Second, other colleagues have noticed that they can reliably get
rid of occasional OOM kills on an Arm embedded device by reducing
the SWIOTLB size. This can be achieved with a kernel parameter, but
determining the right value puts additional burden on pre-release
testing, which could be avoided if SWIOTLB is allocated small and
grows only when necessary.

Changes from v1-devel-v7:
- Add comments to acquire/release barriers
- Fix whitespace issues reported by checkpatch.pl

Changes from v1-devel-v6:
- Provide long description of functions
- Fix kernel-doc (Returns: to Return:)
- Rename __lookup_dyn_slot() to lookup_dyn_slot_locked()

Changes from RFC:
- Track dynamic buffers per device instead of per swiotlb
- Use a linked list instead of a maple tree
- Move initialization of swiotlb fields of struct device to a
  helper function
- Rename __lookup_dyn_slot() to lookup_dyn_slot_locked()
- Introduce per-device flag if dynamic buffers are in use
- Add one more user of DMA_ATTR_MAY_SLEEP
- Add kernel-doc comments for new (and some old) code
- Properly escape '*' in dma-attributes.rst

Petr Tesarik (7):
  swiotlb: Use a helper to initialize swiotlb fields in struct device
  swiotlb: Move code around in preparation for dynamic bounce buffers
  dma-mapping: introduce the DMA_ATTR_MAY_SLEEP attribute
  swiotlb: Dynamically allocated bounce buffers
  swiotlb: Add a boot option to enable dynamic bounce buffers
  drm: Use DMA_ATTR_MAY_SLEEP from process context
  swiotlb: per-device flag if there are dynamically allocated buffers

 .../admin-guide/kernel-parameters.txt         |   6 +-
 Documentation/core-api/dma-attributes.rst     |  10 +
 drivers/base/core.c                           |   4 +-
 drivers/gpu/drm/drm_gem_shmem_helper.c        |   2 +-
 drivers/gpu/drm/drm_prime.c                   |   2 +-
 include/linux/device.h                        |  12 +
 include/linux/dma-mapping.h                   |   6 +
 include/linux/swiotlb.h                       |  54 ++-
 kernel/dma/swiotlb.c                          | 382 ++++++++++++++++--
 9 files changed, 443 insertions(+), 35 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2023-07-10 22:24 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-19 10:03 [PATCH v2 0/7] Allow dynamic allocation of software IO TLB bounce buffers Petr Tesarik
2023-04-19 10:03 ` [PATCH v2 1/7] swiotlb: Use a helper to initialize swiotlb fields in struct device Petr Tesarik
2023-04-19 10:03 ` [PATCH v2 2/7] swiotlb: Move code around in preparation for dynamic bounce buffers Petr Tesarik
2023-04-19 10:03 ` [PATCH v2 3/7] dma-mapping: introduce the DMA_ATTR_MAY_SLEEP attribute Petr Tesarik
2023-04-19 10:03 ` [PATCH v2 4/7] swiotlb: Dynamically allocated bounce buffers Petr Tesarik
2023-04-19 10:03 ` [PATCH v2 5/7] swiotlb: Add a boot option to enable dynamic " Petr Tesarik
2023-04-19 10:03 ` [PATCH v2 6/7] drm: Use DMA_ATTR_MAY_SLEEP from process context Petr Tesarik
2023-04-19 10:03 ` [PATCH v2 7/7] swiotlb: per-device flag if there are dynamically allocated buffers Petr Tesarik
2023-04-26 12:15 ` [PATCH v2 0/7] Allow dynamic allocation of software IO TLB bounce buffers Petr Tesařík
2023-04-26 12:26   ` Greg Kroah-Hartman
2023-04-26 12:44     ` Petr Tesařík
2023-04-26 12:53       ` Greg Kroah-Hartman
2023-04-26 13:16         ` Petr Tesařík
2023-05-09  7:16       ` Petr Tesařík
2023-05-09  7:32         ` Greg Kroah-Hartman
2023-07-10 22:23           ` Mike Lothian
2023-04-28  8:53 ` Mike Lothian
2023-04-28  9:07   ` Petr Tesařík
2023-05-01 10:29     ` Mike Lothian
2023-05-02 12:15       ` Petr Tesarik

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).