All of lore.kernel.org
 help / color / mirror / Atom feed
From: Leon Romanovsky <leon@kernel.org>
To: Jason Gunthorpe <jgg@ziepe.ca>
Cc: "Marek Szyprowski" <m.szyprowski@samsung.com>,
	"Jens Axboe" <axboe@kernel.dk>, "Christoph Hellwig" <hch@lst.de>,
	"Keith Busch" <kbusch@kernel.org>, "Jake Edge" <jake@lwn.net>,
	"Jonathan Corbet" <corbet@lwn.net>,
	"Zhu Yanjun" <zyjzyj2000@gmail.com>,
	"Robin Murphy" <robin.murphy@arm.com>,
	"Joerg Roedel" <joro@8bytes.org>, "Will Deacon" <will@kernel.org>,
	"Sagi Grimberg" <sagi@grimberg.me>,
	"Bjorn Helgaas" <bhelgaas@google.com>,
	"Logan Gunthorpe" <logang@deltatee.com>,
	"Yishai Hadas" <yishaih@nvidia.com>,
	"Shameer Kolothum" <shameerali.kolothum.thodi@huawei.com>,
	"Kevin Tian" <kevin.tian@intel.com>,
	"Alex Williamson" <alex.williamson@redhat.com>,
	"Jérôme Glisse" <jglisse@redhat.com>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-block@vger.kernel.org, linux-rdma@vger.kernel.org,
	iommu@lists.linux.dev, linux-nvme@lists.infradead.org,
	linux-pci@vger.kernel.org, kvm@vger.kernel.org,
	linux-mm@kvack.org, "Niklas Schnelle" <schnelle@linux.ibm.com>,
	"Chuck Lever" <chuck.lever@oracle.com>,
	"Luis Chamberlain" <mcgrof@kernel.org>,
	"Matthew Wilcox" <willy@infradead.org>,
	"Dan Williams" <dan.j.williams@intel.com>,
	"Kanchan Joshi" <joshi.k@samsung.com>,
	"Chaitanya Kulkarni" <kch@nvidia.com>
Subject: Re: [PATCH v9 11/24] mm/hmm: provide generic DMA managing logic
Date: Thu, 24 Apr 2025 10:15:45 +0300	[thread overview]
Message-ID: <20250424071545.GM48485@unreal> (raw)
In-Reply-To: <20250423172856.GM1213339@ziepe.ca>

On Wed, Apr 23, 2025 at 02:28:56PM -0300, Jason Gunthorpe wrote:
> On Wed, Apr 23, 2025 at 11:13:02AM +0300, Leon Romanovsky wrote:
> > From: Leon Romanovsky <leonro@nvidia.com>
> > 
> > HMM callers use PFN list to populate range while calling
> > to hmm_range_fault(), the conversion from PFN to DMA address
> > is done by the callers with help of another DMA list. However,
> > it is wasteful on any modern platform and by doing the right
> > logic, that DMA list can be avoided.
> > 
> > Provide generic logic to manage these lists and gave an interface
> > to map/unmap PFNs to DMA addresses, without requiring from the callers
> > to be an experts in DMA core API.
> > 
> > Tested-by: Jens Axboe <axboe@kernel.dk>
> 
> I don't think Jens tested the RDMA and hmm parts :)

I know, but he posted his Tested-by tag on cover letter and b4 picked it
for whole series. I decided to keep it as is.

> 
> > +	/*
> > +	 * The HMM API violates our normal DMA buffer ownership rules and can't
> > +	 * transfer buffer ownership.  The dma_addressing_limited() check is a
> > +	 * best approximation to ensure no swiotlb buffering happens.
> > +	 */
> 
> This is a bit unclear, HMM inherently can't do cache flushing or
> swiotlb bounce buffering because its entire purpose is to DMA directly
> and coherently to a mm_struct's page tables. There are no sensible
> points we could put the required flushing that wouldn't break the
> entire model.
> 
> FWIW I view that fact that we now fail back to userspace in these
> cases instead of quietly malfunction to be a big improvement.
> 
> > +bool hmm_dma_unmap_pfn(struct device *dev, struct hmm_dma_map *map, size_t idx)
> > +{
> > +	struct dma_iova_state *state = &map->state;
> > +	dma_addr_t *dma_addrs = map->dma_list;
> > +	unsigned long *pfns = map->pfn_list;
> > +	unsigned long attrs = 0;
> > +
> > +#define HMM_PFN_VALID_DMA (HMM_PFN_VALID | HMM_PFN_DMA_MAPPED)
> > +	if ((pfns[idx] & HMM_PFN_VALID_DMA) != HMM_PFN_VALID_DMA)
> > +		return false;
> > +#undef HMM_PFN_VALID_DMA
> 
> If a v10 comes I'd put this in a const function level variable:
> 
>           const unsigned int HMM_PFN_VALID_DMA = HMM_PFN_VALID | HMM_PFN_DMA_MAPPED;
> 
> Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>

I have no idea if v10 is needed. DMA API is stable for a long time and
only DMA part should go in shared branch. Everything else will need to
go through relevant subsystems anyway.

Thanks

> 
> Jason

  reply	other threads:[~2025-04-24  7:15 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-23  8:12 [PATCH v9 00/24] Provide a new two step DMA mapping API Leon Romanovsky
2025-04-23  8:12 ` [PATCH v9 01/24] PCI/P2PDMA: Refactor the p2pdma mapping helpers Leon Romanovsky
2025-04-26  0:21   ` Luis Chamberlain
2025-04-27  7:25     ` Leon Romanovsky
2025-04-23  8:12 ` [PATCH v9 02/24] dma-mapping: move the PCI P2PDMA mapping helpers to pci-p2pdma.h Leon Romanovsky
2025-04-26  0:34   ` Luis Chamberlain
2025-04-27  7:53     ` Leon Romanovsky
2025-04-23  8:12 ` [PATCH v9 03/24] iommu: generalize the batched sync after map interface Leon Romanovsky
2025-04-23 17:15   ` Jason Gunthorpe
2025-04-24  6:55     ` Leon Romanovsky
2025-04-26  0:52   ` Luis Chamberlain
2025-04-27  7:54     ` Leon Romanovsky
2025-04-23  8:12 ` [PATCH v9 04/24] iommu: add kernel-doc for iommu_unmap_fast Leon Romanovsky
2025-04-23 17:15   ` Jason Gunthorpe
2025-04-26  0:55   ` Luis Chamberlain
2025-04-23  8:12 ` [PATCH v9 05/24] dma-mapping: Provide an interface to allow allocate IOVA Leon Romanovsky
2025-04-26  1:10   ` Luis Chamberlain
2025-04-23  8:12 ` [PATCH v9 06/24] iommu/dma: Factor out a iommu_dma_map_swiotlb helper Leon Romanovsky
2025-04-26  1:14   ` Luis Chamberlain
2025-04-23  8:12 ` [PATCH v9 07/24] dma-mapping: Implement link/unlink ranges API Leon Romanovsky
2025-04-26 22:46   ` Luis Chamberlain
2025-04-27  8:13     ` Leon Romanovsky
2025-04-28 13:16       ` Jason Gunthorpe
2025-04-28 13:20       ` Christoph Hellwig
2025-04-23  8:12 ` [PATCH v9 08/24] dma-mapping: add a dma_need_unmap helper Leon Romanovsky
2025-04-26 22:49   ` Luis Chamberlain
2025-04-23  8:13 ` [PATCH v9 09/24] docs: core-api: document the IOVA-based API Leon Romanovsky
2025-04-23  8:13 ` [PATCH v9 10/24] mm/hmm: let users to tag specific PFN with DMA mapped bit Leon Romanovsky
2025-04-23 17:17   ` Jason Gunthorpe
2025-04-23 17:54   ` Mika Penttilä
2025-04-23 18:17     ` Jason Gunthorpe
2025-04-23 18:37       ` Mika Penttilä
2025-04-23 23:33         ` Jason Gunthorpe
2025-04-24  8:07           ` Leon Romanovsky
2025-04-24  8:11             ` Christoph Hellwig
2025-04-24  8:46               ` Leon Romanovsky
2025-04-24 12:07                 ` Jason Gunthorpe
2025-04-24 12:50                   ` Leon Romanovsky
2025-04-24 16:01                     ` Leon Romanovsky
2025-04-23  8:13 ` [PATCH v9 11/24] mm/hmm: provide generic DMA managing logic Leon Romanovsky
2025-04-23 17:28   ` Jason Gunthorpe
2025-04-24  7:15     ` Leon Romanovsky [this message]
2025-04-24  7:22       ` Leon Romanovsky
2025-04-23  8:13 ` [PATCH v9 12/24] RDMA/umem: Store ODP access mask information in PFN Leon Romanovsky
2025-04-23 17:34   ` Jason Gunthorpe
2025-04-23  8:13 ` [PATCH v9 13/24] RDMA/core: Convert UMEM ODP DMA mapping to caching IOVA and page linkage Leon Romanovsky
2025-04-23 17:36   ` Jason Gunthorpe
2025-04-23  8:13 ` [PATCH v9 14/24] RDMA/umem: Separate implicit ODP initialization from explicit ODP Leon Romanovsky
2025-04-23 17:38   ` Jason Gunthorpe
2025-04-23  8:13 ` [PATCH v9 15/24] vfio/mlx5: Explicitly use number of pages instead of allocated length Leon Romanovsky
2025-04-23 17:39   ` Jason Gunthorpe
2025-04-23  8:13 ` [PATCH v9 16/24] vfio/mlx5: Rewrite create mkey flow to allow better code reuse Leon Romanovsky
2025-04-23 18:02   ` Jason Gunthorpe
2025-04-23  8:13 ` [PATCH v9 17/24] vfio/mlx5: Enable the DMA link API Leon Romanovsky
2025-04-23 18:09   ` Jason Gunthorpe
2025-04-24  7:55     ` Leon Romanovsky
2025-04-23  8:13 ` [PATCH v9 18/24] block: share more code for bio addition helper Leon Romanovsky
2025-04-23  8:13 ` [PATCH v9 19/24] block: don't merge different kinds of P2P transfers in a single bio Leon Romanovsky
2025-04-23  8:13 ` [PATCH v9 20/24] blk-mq: add scatterlist-less DMA mapping helpers Leon Romanovsky
2025-04-23  8:13 ` [PATCH v9 21/24] nvme-pci: remove struct nvme_descriptor Leon Romanovsky
2025-04-23  8:13 ` [PATCH v9 22/24] nvme-pci: use a better encoding for small prp pool allocations Leon Romanovsky
2025-04-23  9:05   ` Christoph Hellwig
2025-04-23 13:39     ` Leon Romanovsky
2025-04-23  8:13 ` [PATCH v9 23/24] nvme-pci: convert to blk_rq_dma_map Leon Romanovsky
2025-04-23  9:24   ` Christoph Hellwig
2025-04-23 10:03     ` Leon Romanovsky
2025-04-23 15:47       ` Christoph Hellwig
2025-04-23 17:00         ` Jason Gunthorpe
2025-04-23 15:05     ` Keith Busch
2025-04-27  7:10     ` Leon Romanovsky
2025-04-23 14:58   ` Keith Busch
2025-04-23 17:11     ` Leon Romanovsky
2025-04-23  8:13 ` [PATCH v9 24/24] nvme-pci: store aborted state in flags variable Leon Romanovsky

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=20250424071545.GM48485@unreal \
    --to=leon@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=alex.williamson@redhat.com \
    --cc=axboe@kernel.dk \
    --cc=bhelgaas@google.com \
    --cc=chuck.lever@oracle.com \
    --cc=corbet@lwn.net \
    --cc=dan.j.williams@intel.com \
    --cc=hch@lst.de \
    --cc=iommu@lists.linux.dev \
    --cc=jake@lwn.net \
    --cc=jgg@ziepe.ca \
    --cc=jglisse@redhat.com \
    --cc=joro@8bytes.org \
    --cc=joshi.k@samsung.com \
    --cc=kbusch@kernel.org \
    --cc=kch@nvidia.com \
    --cc=kevin.tian@intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-nvme@lists.infradead.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=logang@deltatee.com \
    --cc=m.szyprowski@samsung.com \
    --cc=mcgrof@kernel.org \
    --cc=robin.murphy@arm.com \
    --cc=sagi@grimberg.me \
    --cc=schnelle@linux.ibm.com \
    --cc=shameerali.kolothum.thodi@huawei.com \
    --cc=will@kernel.org \
    --cc=willy@infradead.org \
    --cc=yishaih@nvidia.com \
    --cc=zyjzyj2000@gmail.com \
    /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.