From: Boris Brezillon <boris.brezillon@collabora.com>
To: Liviu Dudau <liviu.dudau@arm.com>
Cc: "Danilo Krummrich" <dakr@kernel.org>,
asahi@lists.linux.dev, "Asahi Lina" <lina@asahilina.net>,
"Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
"Maxime Ripard" <mripard@kernel.org>,
"Thomas Zimmermann" <tzimmermann@suse.de>,
"David Airlie" <airlied@gmail.com>,
"Simona Vetter" <simona@ffwll.ch>,
"Frank Binns" <frank.binns@imgtec.com>,
"Matt Coster" <matt.coster@imgtec.com>,
"Karol Herbst" <kherbst@redhat.com>,
"Lyude Paul" <lyude@redhat.com>,
"Steven Price" <steven.price@arm.com>,
"Lucas De Marchi" <lucas.demarchi@intel.com>,
"Thomas Hellström" <thomas.hellstrom@linux.intel.com>,
"Rodrigo Vivi" <rodrigo.vivi@intel.com>,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
nouveau@lists.freedesktop.org, intel-xe@lists.freedesktop.org,
akash.goel@arm.com
Subject: Re: [PATCH 0/4] drm/gpuvm: Add support for single-page-filled mappings
Date: Mon, 3 Feb 2025 13:12:52 +0100 [thread overview]
Message-ID: <20250203131252.71a180ea@collabora.com> (raw)
In-Reply-To: <Z6CnSZz_Dm3YpZbx@e110455-lin.cambridge.arm.com>
On Mon, 3 Feb 2025 11:23:53 +0000
Liviu Dudau <liviu.dudau@arm.com> wrote:
> On Mon, Feb 03, 2025 at 10:21:53AM +0100, Boris Brezillon wrote:
> > +Akash with whom we've been discussing adding a 'REPEAT' mode to
> > drm_gpuvm/panthor.
> >
> > On Sun, 2 Feb 2025 19:53:47 +0100
> > Danilo Krummrich <dakr@kernel.org> wrote:
> >
> > > Hi Lina,
> > >
> > > On Sun, Feb 02, 2025 at 10:34:49PM +0900, Asahi Lina wrote:
> > > > Some hardware requires dummy page mappings to efficiently implement
> > > > Vulkan sparse features. These mappings consist of the same physical
> > > > memory page, repeated for a large range of address space (e.g. 16GiB).
> > > >
> > > > Add support for this to drm_gpuvm. Currently, drm_gpuvm expects BO
> > > > ranges to correspond 1:1 to virtual memory ranges that are mapped, and
> > > > does math on the BO offset accordingly. To make single page mappings
> > > > work, we need a way to turn off that math, keeping the BO offset always
> > > > constant and pointing to the same page (typically BO offset 0).
> > > >
> > > > To make this work, we need to handle all the corner cases when these
> > > > mappings intersect with regular mappings. The rules are simply to never
> > > > mix or merge a "regular" mapping with a single page mapping.
> > > >
> > > > drm_gpuvm has support for a flags field in drm_gpuva objects. This is
> > > > normally managed by drivers directly. We can introduce a
> > > > DRM_GPUVA_SINGLE_PAGE flag to handle this. However, to make it work,
> > > > sm_map and friends need to know ahead of time whether the new mapping is
> > > > a single page mapping or not. Therefore, we need to add an argument to
> > > > these functions so drivers can provide the flags to be filled into
> > > > drm_gpuva.flags.
> > > >
> > > > These changes should not affect any existing drivers that use drm_gpuvm
> > > > other than the API change:
> > > >
> > > > - imagination: Does not use flags at all
> > > > - nouveau: Only uses drm_gpuva_invalidate(), which is only called on
> > > > existing drm_gpuva objects (after the map steps)
> > > > - panthor: Does not use flags at all
> > > > - xe: Does not use drm_gpuva_init_from_op() or
> > > > drm_gpuva_remap()/drm_gpuva_map() (which call it). This means that the
> > > > flags field of the gpuva object is managed by the driver only, so these
> > > > changes cannot clobber it.
> > > >
> > > > Note that the way this is implemented, drm_gpuvm does not need to know
> > > > the GPU page size. It only has to never do math on the BO offset to meet
> > > > the requirements.
> > > >
> > > > I suspect that after this change there could be some cleanup possible in
> > > > the xe driver (which right now passes flags around in various
> > > > driver-specific ways from the map step through to drm_gpuva objects),
> > > > but I'll leave that to the Xe folks.
> > > >
> > > > Signed-off-by: Asahi Lina <lina@asahilina.net>
> > > > ---
> > > > Asahi Lina (4):
> > > > drm/gpuvm: Add a flags argument to drm_gpuvm_sm_map[_*]
> > > > drm/gpuvm: Plumb through flags into drm_gpuva_op_map
> > > > drm/gpuvm: Add DRM_GPUVA_SINGLE_PAGE flag and logic
> > > > drm/gpuvm: Plumb through flags into drm_gpuva_init
> > >
> > > Without looking into any details yet:
> > >
> > > This is a bit of tricky one, since we're not even close to having a user for
> > > this new feature upstream yet, are we?
> >
> > Actually, we would be interesting in having this feature hooked up in
> > panthor. One use case we have is Vulkan sparse bindings, of course. But
> > we also have cases where we need to map a dummy page repeatedly on the
> > FW side. The approach we've been considering is slightly different:
> > pass a DRM_GPUVA_REPEAT_FLAG along with GEM range, so we can repeat a
> > range of the GEM (see the below diff, which is completely untested by
> > the way), but I think we'd be fine with this SINGLE_PAGE flag.
>
> Unless I've misunderstood the intent completely, it looks like Xe also wants
> something similar although they call it CPU_ADDR_MIRROR for some reason:
>
> https://lore.kernel.org/r/20250129195212.745731-9-matthew.brost@intel.com
At first glance, it doesn't seem related. The Xe stuff looks more like
an alloc-on-fault mechanism. SINGLE_PAGE is about mapping a dummy page
repeatedly over a virtual address range so that sparse Vulkan images
never get a fault when an unbound image region is accessed.
next prev parent reply other threads:[~2025-02-03 12:13 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-02 13:34 [PATCH 0/4] drm/gpuvm: Add support for single-page-filled mappings Asahi Lina
2025-02-02 13:34 ` [PATCH 1/4] drm/gpuvm: Add a flags argument to drm_gpuvm_sm_map[_*] Asahi Lina
2025-02-02 13:34 ` [PATCH 2/4] drm/gpuvm: Plumb through flags into drm_gpuva_op_map Asahi Lina
2025-02-02 13:34 ` [PATCH 3/4] drm/gpuvm: Add DRM_GPUVA_SINGLE_PAGE flag and logic Asahi Lina
2025-02-02 13:34 ` [PATCH 4/4] drm/gpuvm: Plumb through flags into drm_gpuva_init Asahi Lina
2025-02-02 14:21 ` ✓ CI.Patch_applied: success for drm/gpuvm: Add support for single-page-filled mappings Patchwork
2025-02-02 14:21 ` ✓ CI.checkpatch: " Patchwork
2025-02-02 14:22 ` ✓ CI.KUnit: " Patchwork
2025-02-02 14:39 ` ✓ CI.Build: " Patchwork
2025-02-02 14:41 ` ✓ CI.Hooks: " Patchwork
2025-02-02 14:42 ` ✓ CI.checksparse: " Patchwork
2025-02-02 15:02 ` ✓ Xe.CI.BAT: " Patchwork
2025-02-02 16:12 ` ✗ Xe.CI.Full: failure " Patchwork
2025-02-02 17:49 ` Asahi Lina
2025-02-02 18:53 ` [PATCH 0/4] " Danilo Krummrich
2025-02-02 23:56 ` Asahi Lina
2025-02-03 9:21 ` Boris Brezillon
2025-02-03 11:23 ` Liviu Dudau
2025-02-03 12:12 ` Boris Brezillon [this message]
2025-02-03 12:17 ` Matthew Auld
2025-02-03 13:46 ` Asahi Lina
2025-02-03 17:13 ` Boris Brezillon
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=20250203131252.71a180ea@collabora.com \
--to=boris.brezillon@collabora.com \
--cc=airlied@gmail.com \
--cc=akash.goel@arm.com \
--cc=asahi@lists.linux.dev \
--cc=dakr@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=frank.binns@imgtec.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=kherbst@redhat.com \
--cc=lina@asahilina.net \
--cc=linux-kernel@vger.kernel.org \
--cc=liviu.dudau@arm.com \
--cc=lucas.demarchi@intel.com \
--cc=lyude@redhat.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=matt.coster@imgtec.com \
--cc=mripard@kernel.org \
--cc=nouveau@lists.freedesktop.org \
--cc=rodrigo.vivi@intel.com \
--cc=simona@ffwll.ch \
--cc=steven.price@arm.com \
--cc=thomas.hellstrom@linux.intel.com \
--cc=tzimmermann@suse.de \
/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.