From: Peter Gonda <pgonda@google.com>
To: stable@vger.kernel.org
Cc: Peter Gonda <pgonda@google.com>
Subject: [PATCH 00/30 for 5.4] Backport unencrypted non-blocking DMA allocations
Date: Fri, 25 Sep 2020 09:18:46 -0700 [thread overview]
Message-ID: <20200925161916.204667-1-pgonda@google.com> (raw)
Currently SEV enabled guests hit might_sleep() warnings when a driver (nvme in
this case) allocates through the DMA API in a non-blockable context. Making
these unencrypted non-blocking DMA allocations come from the coherent pools
prevents this BUG.
BUG: sleeping function called from invalid context at mm/vmalloc.c:1710
in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 3383, name: fio
2 locks held by fio/3383:
#0: ffff93b6a8568348 (&sb->s_type->i_mutex_key#16){+.+.}, at: ext4_file_write_iter+0xa2/0x5d0
#1: ffffffffa52a61a0 (rcu_read_lock){....}, at: hctx_lock+0x1a/0xe0
CPU: 0 PID: 3383 Comm: fio Tainted: G W 5.5.10 #14
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Call Trace:
dump_stack+0x98/0xd5
___might_sleep+0x175/0x260
__might_sleep+0x4a/0x80
_vm_unmap_aliases+0x45/0x250
vm_unmap_aliases+0x19/0x20
__set_memory_enc_dec+0xa4/0x130
set_memory_decrypted+0x10/0x20
dma_direct_alloc_pages+0x148/0x150
dma_direct_alloc+0xe/0x10
dma_alloc_attrs+0x86/0xc0
dma_pool_alloc+0x16f/0x2b0
nvme_queue_rq+0x878/0xc30 [nvme]
__blk_mq_try_issue_directly+0x135/0x200
blk_mq_request_issue_directly+0x4f/0x80
blk_mq_try_issue_list_directly+0x46/0xb0
blk_mq_sched_insert_requests+0x19b/0x2b0
blk_mq_flush_plug_list+0x22f/0x3b0
blk_flush_plug_list+0xd1/0x100
blk_finish_plug+0x2c/0x40
iomap_dio_rw+0x427/0x490
ext4_file_write_iter+0x181/0x5d0
aio_write+0x109/0x1b0
io_submit_one+0x7d0/0xfa0
__x64_sys_io_submit+0xa2/0x280
do_syscall_64+0x5f/0x250
entry_SYSCALL_64_after_hwframe+0x49/0xbe
Christoph Hellwig (9):
dma-direct: remove __dma_direct_free_pages
dma-direct: remove the dma_handle argument to __dma_direct_alloc_pages
dma-direct: provide mmap and get_sgtable method overrides
dma-mapping: merge the generic remapping helpers into dma-direct
dma-direct: consolidate the error handling in dma_direct_alloc_pages
xtensa: use the generic uncached segment support
dma-direct: make uncached_kernel_address more general
dma-mapping: DMA_COHERENT_POOL should select GENERIC_ALLOCATOR
dma-pool: fix coherent pool allocations for IOMMU mappings
David Rientjes (13):
dma-remap: separate DMA atomic pools from direct remap code
dma-pool: add additional coherent pools to map to gfp mask
dma-pool: dynamically expanding atomic pools
dma-direct: atomic allocations must come from atomic coherent pools
dma-pool: add pool sizes to debugfs
x86/mm: unencrypted non-blocking DMA allocations use coherent pools
dma-pool: scale the default DMA coherent pool size with memory
capacity
dma-pool: decouple DMA_REMAP from DMA_COHERENT_POOL
dma-direct: always align allocation size in dma_direct_alloc_pages()
dma-direct: re-encrypt memory if dma_direct_alloc_pages() fails
dma-direct: check return value when encrypting or decrypting memory
dma-direct: add missing set_memory_decrypted() for coherent mapping
dma-mapping: warn when coherent pool is depleted
Geert Uytterhoeven (1):
dma-pool: fix too large DMA pools on medium memory size systems
Huang Shijie (1):
lib/genalloc.c: rename addr_in_gen_pool to gen_pool_has_addr
Nicolas Saenz Julienne (6):
dma-direct: provide function to check physical memory area validity
dma-pool: get rid of dma_in_atomic_pool()
dma-pool: introduce dma_guess_pool()
dma-pool: make sure atomic pool suits device
dma-pool: do not allocate pool memory from CMA
dma/direct: turn ARCH_ZONE_DMA_BITS into a variable
Documentation/core-api/genalloc.rst | 2 +-
arch/Kconfig | 8 +-
arch/arc/Kconfig | 1 -
arch/arm/Kconfig | 1 -
arch/arm/mm/dma-mapping.c | 8 +-
arch/arm64/Kconfig | 1 -
arch/arm64/mm/init.c | 9 +-
arch/ia64/Kconfig | 2 +-
arch/ia64/kernel/dma-mapping.c | 6 -
arch/microblaze/Kconfig | 3 +-
arch/microblaze/mm/consistent.c | 2 +-
arch/mips/Kconfig | 7 +-
arch/mips/mm/dma-noncoherent.c | 8 +-
arch/nios2/Kconfig | 3 +-
arch/nios2/mm/dma-mapping.c | 2 +-
arch/powerpc/include/asm/page.h | 9 -
arch/powerpc/mm/mem.c | 20 +-
arch/powerpc/platforms/Kconfig.cputype | 1 -
arch/s390/include/asm/page.h | 2 -
arch/s390/mm/init.c | 1 +
arch/x86/Kconfig | 1 +
arch/xtensa/Kconfig | 6 +-
arch/xtensa/include/asm/platform.h | 27 ---
arch/xtensa/kernel/Makefile | 3 +-
arch/xtensa/kernel/pci-dma.c | 121 ++---------
drivers/iommu/dma-iommu.c | 5 +-
drivers/misc/sram-exec.c | 2 +-
include/linux/dma-direct.h | 12 +-
include/linux/dma-mapping.h | 7 +-
include/linux/dma-noncoherent.h | 4 +-
include/linux/genalloc.h | 2 +-
kernel/dma/Kconfig | 20 +-
kernel/dma/Makefile | 1 +
kernel/dma/direct.c | 224 ++++++++++++++++----
kernel/dma/mapping.c | 45 +----
kernel/dma/pool.c | 270 +++++++++++++++++++++++++
kernel/dma/remap.c | 176 +---------------
lib/genalloc.c | 5 +-
38 files changed, 564 insertions(+), 463 deletions(-)
create mode 100644 kernel/dma/pool.c
--
2.28.0.618.gf4bc123cb7-goog
next reply other threads:[~2020-09-25 16:19 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-25 16:18 Peter Gonda [this message]
2020-09-25 16:18 ` [PATCH 01/30 for 5.4] dma-direct: remove __dma_direct_free_pages Peter Gonda
2020-09-25 16:18 ` [PATCH 02/30 for 5.4] dma-direct: remove the dma_handle argument to __dma_direct_alloc_pages Peter Gonda
2020-09-25 16:18 ` [PATCH 03/30 for 5.4] dma-direct: provide mmap and get_sgtable method overrides Peter Gonda
2020-09-25 16:18 ` [PATCH 04/30 for 5.4] dma-mapping: merge the generic remapping helpers into dma-direct Peter Gonda
2020-09-25 16:18 ` [PATCH 05/30 for 5.4] lib/genalloc.c: rename addr_in_gen_pool to gen_pool_has_addr Peter Gonda
2020-09-25 16:18 ` [PATCH 06/30 for 5.4] dma-remap: separate DMA atomic pools from direct remap code Peter Gonda
2020-09-25 16:18 ` [PATCH 07/30 for 5.4] dma-pool: add additional coherent pools to map to gfp mask Peter Gonda
2020-09-25 16:18 ` [PATCH 08/30 for 5.4] dma-pool: dynamically expanding atomic pools Peter Gonda
2020-09-25 16:18 ` [PATCH 09/30 for 5.4] dma-direct: atomic allocations must come from atomic coherent pools Peter Gonda
2020-09-25 16:18 ` [PATCH 10/30 for 5.4] dma-pool: add pool sizes to debugfs Peter Gonda
2020-09-25 16:18 ` [PATCH 11/30 for 5.4] x86/mm: unencrypted non-blocking DMA allocations use coherent pools Peter Gonda
2020-09-25 16:18 ` [PATCH 12/30 for 5.4] dma-pool: scale the default DMA coherent pool size with memory capacity Peter Gonda
2020-09-25 16:18 ` [PATCH 13/30 for 5.4] dma-pool: fix too large DMA pools on medium memory size systems Peter Gonda
2020-09-25 16:19 ` [PATCH 14/30 for 5.4] dma-pool: decouple DMA_REMAP from DMA_COHERENT_POOL Peter Gonda
2020-09-25 16:19 ` [PATCH 15/30 for 5.4] dma-direct: consolidate the error handling in dma_direct_alloc_pages Peter Gonda
2020-09-25 16:19 ` [PATCH 16/30 for 5.4] xtensa: use the generic uncached segment support Peter Gonda
2020-09-25 16:19 ` [PATCH 17/30 for 5.4] dma-direct: make uncached_kernel_address more general Peter Gonda
2020-09-25 16:19 ` [PATCH 18/30 for 5.4] dma-direct: always align allocation size in dma_direct_alloc_pages() Peter Gonda
2020-09-25 16:19 ` [PATCH 19/30 for 5.4] dma-direct: re-encrypt memory if dma_direct_alloc_pages() fails Peter Gonda
2020-09-25 16:19 ` [PATCH 20/30 for 5.4] dma-direct: check return value when encrypting or decrypting memory Peter Gonda
2020-09-25 16:19 ` [PATCH 21/30 for 5.4] dma-direct: add missing set_memory_decrypted() for coherent mapping Peter Gonda
2020-09-25 16:19 ` [PATCH 22/30 for 5.4] dma-mapping: DMA_COHERENT_POOL should select GENERIC_ALLOCATOR Peter Gonda
2020-09-25 16:19 ` [PATCH 23/30 for 5.4] dma-mapping: warn when coherent pool is depleted Peter Gonda
2020-09-25 16:19 ` [PATCH 24/30 for 5.4] dma-direct: provide function to check physical memory area validity Peter Gonda
2020-09-25 16:19 ` [PATCH 25/30 for 5.4] dma-pool: get rid of dma_in_atomic_pool() Peter Gonda
2020-09-25 16:19 ` [PATCH 26/30 for 5.4] dma-pool: introduce dma_guess_pool() Peter Gonda
2020-09-25 16:19 ` [PATCH 27/30 for 5.4] dma-pool: make sure atomic pool suits device Peter Gonda
2020-09-25 16:19 ` [PATCH 28/30 for 5.4] dma-pool: do not allocate pool memory from CMA Peter Gonda
2020-09-25 16:19 ` [PATCH 29/30 for 5.4] dma-pool: fix coherent pool allocations for IOMMU mappings Peter Gonda
2020-09-25 16:19 ` [PATCH 30/30 for 5.4] dma/direct: turn ARCH_ZONE_DMA_BITS into a variable Peter Gonda
2020-10-05 13:07 ` [PATCH 00/30 for 5.4] Backport unencrypted non-blocking DMA allocations Greg KH
2020-10-06 15:26 ` Peter Gonda
2020-10-06 18:10 ` David Rientjes
2021-01-04 13:00 ` Greg KH
2021-01-04 22:37 ` David Rientjes
2021-01-05 5:58 ` Greg KH
2021-01-05 6:38 ` David Rientjes
2021-05-12 19:06 ` Peter Gonda
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=20200925161916.204667-1-pgonda@google.com \
--to=pgonda@google.com \
--cc=stable@vger.kernel.org \
/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.