From: Alistair Popple <apopple@nvidia.com>
To: Matthew Wilcox <willy@infradead.org>
Cc: "Jason Gunthorpe" <jgg@ziepe.ca>,
"Yonatan Maman" <ymaman@nvidia.com>,
"Jérôme Glisse" <jglisse@redhat.com>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Leon Romanovsky" <leon@kernel.org>,
"Lyude Paul" <lyude@redhat.com>,
"Danilo Krummrich" <dakr@kernel.org>,
"David Airlie" <airlied@gmail.com>,
"Simona Vetter" <simona@ffwll.ch>,
"Ben Skeggs" <bskeggs@nvidia.com>,
"Michael Guralnik" <michaelgur@nvidia.com>,
"Or Har-Toov" <ohartoov@nvidia.com>,
"Daisuke Matsuda" <dskmtsd@gmail.com>,
"Shay Drory" <shayd@nvidia.com>,
linux-mm@kvack.org, linux-rdma@vger.kernel.org,
dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org,
linux-kernel@vger.kernel.org, "Gal Shalom" <GalShalom@nvidia.com>
Subject: Re: [PATCH v2 1/5] mm/hmm: HMM API to enable P2P DMA for device private pages
Date: Tue, 22 Jul 2025 10:49:10 +1000 [thread overview]
Message-ID: <7lvduvov3rvfsgixbkyyinnzz3plpp3szxam46ccgjmh6v5d7q@zoz4k723vs3d> (raw)
In-Reply-To: <aH4_QaNtIJMrPqOw@casper.infradead.org>
On Mon, Jul 21, 2025 at 02:23:13PM +0100, Matthew Wilcox wrote:
> On Fri, Jul 18, 2025 at 11:44:42AM -0300, Jason Gunthorpe wrote:
> > On Fri, Jul 18, 2025 at 03:17:00PM +0100, Matthew Wilcox wrote:
> > > On Fri, Jul 18, 2025 at 02:51:08PM +0300, Yonatan Maman wrote:
> > > > +++ b/include/linux/memremap.h
> > > > @@ -89,6 +89,14 @@ struct dev_pagemap_ops {
> > > > */
> > > > vm_fault_t (*migrate_to_ram)(struct vm_fault *vmf);
> > > >
> > > > + /*
> > > > + * Used for private (un-addressable) device memory only. Return a
> > > > + * corresponding PFN for a page that can be mapped to device
> > > > + * (e.g using dma_map_page)
> > > > + */
> > > > + int (*get_dma_pfn_for_device)(struct page *private_page,
> > > > + unsigned long *dma_pfn);
> > >
> > > This makes no sense. If a page is addressable then it has a PFN.
> > > If a page is not addressable then it doesn't have a PFN.
> >
> > The DEVICE_PRIVATE pages have a PFN, but it is not usable for
> > anything.
>
> OK, then I don't understand what DEVICE PRIVATE means.
>
> I thought it was for memory on a PCIe device that isn't even visible
> through a BAR and so the CPU has no way of addressing it directly.
Correct.
> But now you say that it has a PFN, which means it has a physical
> address, which means it's accessible to the CPU.
Having a PFN doesn't mean it's actually accessible to the CPU. It is a real
physical address in the CPU address space, but it is a completely bogus/invalid
address - if the CPU actually tries to access it will cause a machine check
or whatever other exception gets generated when accessing an invalid physical
address.
Obviously we're careful to avoid that. The PFN is used solely to get to/from a
struct page (via pfn_to_page() or page_to_pfn()).
> So what is it?
IMHO a hack, because obviously we shouldn't require real physical addresses for
something the CPU can't actually address anyway and this causes real problems
(eg. it doesn't actually work on anything other than x86_64). There's no reason
the "PFN" we store in device-private entries couldn't instead just be an index
into some data structure holding pointers to the struct pages. So instead of
using pfn_to_page()/page_to_pfn() we would use device_private_index_to_page()
and page_to_device_private_index().
We discussed this briefly at LSFMM, I think your suggestion for a data structure
was to use a maple tree. I'm yet to look at this more deeply but I'd like to
figure out where memdescs fit in this picture too.
- Alistair
> > This is effectively converting from a DEVICE_PRIVATE page to an actual
> > DMA'able address of some kind. The DEVICE_PRIVATE is just a non-usable
> > proxy, like a swap entry, for where the real data is sitting.
> >
> > Jason
> >
next prev parent reply other threads:[~2025-07-22 0:49 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-18 11:51 [PATCH v2 0/5] *** GPU Direct RDMA (P2P DMA) for Device Private Pages *** Yonatan Maman
2025-07-18 11:51 ` [PATCH v2 1/5] mm/hmm: HMM API to enable P2P DMA for device private pages Yonatan Maman
2025-07-18 14:17 ` Matthew Wilcox
2025-07-18 14:44 ` Jason Gunthorpe
2025-07-21 0:11 ` Alistair Popple
2025-07-21 13:23 ` Matthew Wilcox
2025-07-22 0:49 ` Alistair Popple [this message]
2025-07-23 3:51 ` Jason Gunthorpe
2025-07-23 4:10 ` Alistair Popple
2025-07-24 8:52 ` David Hildenbrand
2025-07-25 0:31 ` Alistair Popple
2025-07-25 9:51 ` David Hildenbrand
2025-08-01 16:40 ` Jason Gunthorpe
2025-08-01 16:50 ` David Hildenbrand
2025-08-01 16:57 ` Jason Gunthorpe
2025-08-04 1:51 ` Alistair Popple
2025-08-05 14:09 ` Jason Gunthorpe
2025-08-04 7:48 ` David Hildenbrand
2025-07-21 6:59 ` Christoph Hellwig
2025-07-22 5:42 ` Yonatan Maman
2025-08-01 16:52 ` Jason Gunthorpe
2025-07-18 11:51 ` [PATCH v2 2/5] nouveau/dmem: HMM P2P DMA for private dev pages Yonatan Maman
2025-07-21 7:00 ` Christoph Hellwig
2025-07-22 5:23 ` Yonatan Maman
2025-07-18 11:51 ` [PATCH v2 3/5] IB/core: P2P DMA for device private pages Yonatan Maman
2025-07-18 11:51 ` [PATCH v2 4/5] RDMA/mlx5: Enable P2P DMA with fallback mechanism Yonatan Maman
2025-07-21 7:03 ` Christoph Hellwig
2025-07-23 3:55 ` Jason Gunthorpe
2025-07-24 7:30 ` Christoph Hellwig
2025-08-01 16:46 ` Jason Gunthorpe
2025-07-18 11:51 ` [PATCH v2 5/5] RDMA/mlx5: Enabling ATS for ODP memory Yonatan Maman
2025-07-20 10:30 ` [PATCH v2 0/5] *** GPU Direct RDMA (P2P DMA) for Device Private Pages *** Leon Romanovsky
2025-07-20 21:03 ` Yonatan Maman
2025-07-21 6:49 ` Leon Romanovsky
2025-07-23 4:03 ` Jason Gunthorpe
2025-07-23 8:44 ` Leon Romanovsky
2025-07-21 6:54 ` Christoph Hellwig
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=7lvduvov3rvfsgixbkyyinnzz3plpp3szxam46ccgjmh6v5d7q@zoz4k723vs3d \
--to=apopple@nvidia.com \
--cc=GalShalom@nvidia.com \
--cc=airlied@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=bskeggs@nvidia.com \
--cc=dakr@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=dskmtsd@gmail.com \
--cc=jgg@ziepe.ca \
--cc=jglisse@redhat.com \
--cc=leon@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-rdma@vger.kernel.org \
--cc=lyude@redhat.com \
--cc=michaelgur@nvidia.com \
--cc=nouveau@lists.freedesktop.org \
--cc=ohartoov@nvidia.com \
--cc=shayd@nvidia.com \
--cc=simona@ffwll.ch \
--cc=willy@infradead.org \
--cc=ymaman@nvidia.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox