[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250409-page-pool-track-dma-v9-0-6a9ef2e0cba8@redhat.com>
Date: Wed, 09 Apr 2025 12:41:35 +0200
From: Toke Høiland-Jørgensen <toke@...hat.com>
To: "David S. Miller" <davem@...emloft.net>,
Jakub Kicinski <kuba@...nel.org>, Jesper Dangaard Brouer <hawk@...nel.org>,
Saeed Mahameed <saeedm@...dia.com>, Leon Romanovsky <leon@...nel.org>,
Tariq Toukan <tariqt@...dia.com>, Andrew Lunn <andrew+netdev@...n.ch>,
Eric Dumazet <edumazet@...gle.com>, Paolo Abeni <pabeni@...hat.com>,
Ilias Apalodimas <ilias.apalodimas@...aro.org>,
Simon Horman <horms@...nel.org>, Andrew Morton <akpm@...ux-foundation.org>,
Mina Almasry <almasrymina@...gle.com>,
Yonglong Liu <liuyonglong@...wei.com>,
Yunsheng Lin <linyunsheng@...wei.com>,
Pavel Begunkov <asml.silence@...il.com>,
Matthew Wilcox <willy@...radead.org>
Cc: netdev@...r.kernel.org, bpf@...r.kernel.org, linux-rdma@...r.kernel.org,
linux-mm@...ck.org,
Toke Høiland-Jørgensen <toke@...hat.com>,
Qiuling Ren <qren@...hat.com>, Yuying Ma <yuma@...hat.com>
Subject: [PATCH net-next v9 0/2] Fix late DMA unmap crash for page pool
This series fixes the late dma_unmap crash for page pool first reported
by Yonglong Liu in [0]. It is an alternative approach to the one
submitted by Yunsheng Lin, most recently in [1]. The first commit just
wraps some tests in a helper function, in preparation of the main change
in patch 2. See the commit message of patch 2 for the details.
-Toke
[0] https://lore.kernel.org/lkml/8067f204-1380-4d37-8ffd-007fc6f26738@kernel.org/T/
[1] https://lore.kernel.org/r/20250307092356.638242-1-linyunsheng@huawei.com
Signed-off-by: Toke Høiland-Jørgensen <toke@...hat.com>
---
Changes in v9:
- Remove empty lines left over in patch 1
- Link to v8: https://lore.kernel.org/r/20250407-page-pool-track-dma-v8-0-da9500d4ba21@redhat.com
Changes in v8:
- Move defines to mm.h
- Keep pp->dma_sync as 1-bit wide
- Unset pp->dma_addr on id alloc failure
- Rebase on -rc1
- Link to v7: https://lore.kernel.org/r/20250404-page-pool-track-dma-v7-0-ad34f069bc18@redhat.com
Changes in v7:
- Change WARN_ON logic if xarray alloc fails
- Don't leak xarray ID if page_pool_set_dma_addr_netmem() fails
- Unconditionally init xarray in page_pool_init()
- Rebase on current net-next
- Link to v6: https://lore.kernel.org/r/20250401-page-pool-track-dma-v6-0-8b83474870d4@redhat.com
Changes in v6:
- Add READ_ONCE() around both reads of pp->dma_sync
- Link to v5: https://lore.kernel.org/r/20250328-page-pool-track-dma-v5-0-55002af683ad@redhat.com
Changes in v5:
- Dereferencing pp->p.dev if pp->pma_sync is unset could lead to a
crash, so make sure we don't do that.
- With the change above, patch 2 was just changing a single field, so
squash it into patch 3
- Link to v4: https://lore.kernel.org/r/20250327-page-pool-track-dma-v4-0-b380dc6706d0@redhat.com
Changes in v4:
- Rebase on net-next
- Collect tags
- Link to v3: https://lore.kernel.org/r/20250326-page-pool-track-dma-v3-0-8e464016e0ac@redhat.com
Changes in v3:
- Use a full-width bool for pp->dma_sync instead of a full unsigned
long (in patch 2), and leave pp->dma_sync_cpu alone.
- Link to v2: https://lore.kernel.org/r/20250325-page-pool-track-dma-v2-0-113ebc1946f3@redhat.com
Changes in v2:
- Always leave two bits at the top of pp_magic as zero, instead of one
- Add an rcu_read_lock() around __page_pool_dma_sync_for_device()
- Add a comment in poison.h with a reference to the bitmask definition
- Add a longer description of the logic of the bitmask definitions to
the comment in types.h, and a summary of the security implications of
using the pp_magic field to the commit message of patch 3
- Collect Mina's Reviewed-by and Yonglong's Tested-by tags
- Link to v1: https://lore.kernel.org/r/20250314-page-pool-track-dma-v1-0-c212e57a74c2@redhat.com
---
Toke Høiland-Jørgensen (2):
page_pool: Move pp_magic check into helper functions
page_pool: Track DMA-mapped pages and unmap them when destroying the pool
drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c | 4 +-
include/linux/mm.h | 58 +++++++++++++++++
include/linux/poison.h | 4 ++
include/net/page_pool/types.h | 6 ++
mm/page_alloc.c | 8 +--
net/core/netmem_priv.h | 33 +++++++++-
net/core/page_pool.c | 81 ++++++++++++++++++++----
net/core/skbuff.c | 16 +----
net/core/xdp.c | 4 +-
9 files changed, 176 insertions(+), 38 deletions(-)
---
base-commit: 420aabef3ab5fa743afb4d3d391f03ef0e777ca8
change-id: 20250310-page-pool-track-dma-0332343a460e
Powered by blists - more mailing lists