All of lore.kernel.org
 help / color / mirror / Atom feed
From: Keith Busch <kbusch@meta.com>
To: <linux-block@vger.kernel.org>, <linux-nvme@lists.infradead.org>
Cc: <hch@lst.de>, <axboe@kernel.dk>, <joshi.k@samsung.com>,
	Keith Busch <kbusch@kernel.org>
Subject: [PATCHv7 3/9] blk-mq-dma: require unmap caller provide p2p map type
Date: Wed, 13 Aug 2025 08:31:47 -0700	[thread overview]
Message-ID: <20250813153153.3260897-4-kbusch@meta.com> (raw)
In-Reply-To: <20250813153153.3260897-1-kbusch@meta.com>

From: Keith Busch <kbusch@kernel.org>

In preparing for integrity dma mappings, we can't rely on the request
flag because data and metadata may have different mapping types.

Signed-off-by: Keith Busch <kbusch@kernel.org>
---
 drivers/nvme/host/pci.c    | 9 ++++++++-
 include/linux/blk-mq-dma.h | 5 +++--
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
index 2c6d9506b1725..111b6bc6c93eb 100644
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
@@ -261,6 +261,9 @@ enum nvme_iod_flags {
 
 	/* single segment dma mapping */
 	IOD_SINGLE_SEGMENT	= 1U << 2,
+
+	/* DMA mapped with PCI_P2PDMA_MAP_BUS_ADDR */
+	IOD_P2P_BUS_ADDR	= 1U << 3,
 };
 
 struct nvme_dma_vec {
@@ -725,7 +728,8 @@ static void nvme_unmap_data(struct request *req)
 		return;
 	}
 
-	if (!blk_rq_dma_unmap(req, dma_dev, &iod->dma_state, iod->total_len)) {
+	if (!blk_rq_dma_unmap(req, dma_dev, &iod->dma_state, iod->total_len,
+				iod->flags & IOD_P2P_BUS_ADDR)) {
 		if (nvme_pci_cmd_use_sgl(&iod->cmd))
 			nvme_free_sgls(req);
 		else
@@ -1000,6 +1004,9 @@ static blk_status_t nvme_map_data(struct request *req)
 	if (!blk_rq_dma_map_iter_start(req, dev->dev, &iod->dma_state, &iter))
 		return iter.status;
 
+	if (iter.p2pdma.map == PCI_P2PDMA_MAP_BUS_ADDR)
+		iod->flags |= IOD_P2P_BUS_ADDR;
+
 	if (use_sgl == SGL_FORCED ||
 	    (use_sgl == SGL_SUPPORTED &&
 	     (sgl_threshold && nvme_pci_avg_seg_size(req) >= sgl_threshold)))
diff --git a/include/linux/blk-mq-dma.h b/include/linux/blk-mq-dma.h
index e5cb5e46fc928..881880095e0da 100644
--- a/include/linux/blk-mq-dma.h
+++ b/include/linux/blk-mq-dma.h
@@ -47,14 +47,15 @@ static inline bool blk_rq_dma_map_coalesce(struct dma_iova_state *state)
  * @dma_dev:	device to unmap from
  * @state:	DMA IOVA state
  * @mapped_len: number of bytes to unmap
+ * @is_p2p:	true if mapped with PCI_P2PDMA_MAP_BUS_ADDR
  *
  * Returns %false if the callers need to manually unmap every DMA segment
  * mapped using @iter or %true if no work is left to be done.
  */
 static inline bool blk_rq_dma_unmap(struct request *req, struct device *dma_dev,
-		struct dma_iova_state *state, size_t mapped_len)
+		struct dma_iova_state *state, size_t mapped_len, bool is_p2p)
 {
-	if (req->cmd_flags & REQ_P2PDMA)
+	if (is_p2p)
 		return true;
 
 	if (dma_use_iova(state)) {
-- 
2.47.3


  parent reply	other threads:[~2025-08-13 15:32 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-13 15:31 [PATCHv7 0/9] blk dma iter for integrity metadata Keith Busch
2025-08-13 15:31 ` [PATCHv7 1/9] blk-mq-dma: create blk_map_iter type Keith Busch
2025-08-14 10:17   ` Kanchan Joshi
2025-08-13 15:31 ` [PATCHv7 2/9] blk-mq-dma: provide the bio_vec array being iterated Keith Busch
2025-08-14 10:17   ` Kanchan Joshi
2025-08-13 15:31 ` Keith Busch [this message]
2025-08-13 15:53   ` [PATCHv7 3/9] blk-mq-dma: require unmap caller provide p2p map type Christoph Hellwig
2025-08-14 10:18   ` Kanchan Joshi
2025-08-13 15:31 ` [PATCHv7 4/9] blk-mq: remove REQ_P2PDMA flag Keith Busch
2025-08-13 15:53   ` Christoph Hellwig
2025-08-14 10:19   ` Kanchan Joshi
2025-08-13 15:31 ` [PATCHv7 5/9] blk-mq-dma: move common dma start code to a helper Keith Busch
2025-08-13 15:53   ` Christoph Hellwig
2025-08-14 10:19   ` Kanchan Joshi
2025-08-13 15:31 ` [PATCHv7 6/9] blk-mq-dma: add scatter-less integrity data DMA mapping Keith Busch
2025-08-13 15:55   ` Christoph Hellwig
2025-08-14 10:36   ` Kanchan Joshi
2025-08-13 15:31 ` [PATCHv7 7/9] blk-integrity: use iterator for mapping sg Keith Busch
2025-08-13 15:55   ` Christoph Hellwig
2025-08-13 16:53   ` Martin K. Petersen
2025-08-13 15:31 ` [PATCHv7 8/9] nvme-pci: create common sgl unmapping helper Keith Busch
2025-08-13 15:56   ` Christoph Hellwig
2025-08-13 15:31 ` [PATCHv7 9/9] nvme-pci: convert metadata mapping to dma iter Keith Busch
2025-08-13 16:57 ` [PATCHv7 0/9] blk dma iter for integrity metadata Martin K. Petersen
2025-08-25  7:55 ` Christoph Hellwig
2025-08-25 13:47 ` Jens Axboe

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=20250813153153.3260897-4-kbusch@meta.com \
    --to=kbusch@meta.com \
    --cc=axboe@kernel.dk \
    --cc=hch@lst.de \
    --cc=joshi.k@samsung.com \
    --cc=kbusch@kernel.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-nvme@lists.infradead.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.