From: Danilo Krummrich <dakr@kernel.org>
To: Rob Clark <robdclark@gmail.com>
Cc: dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org,
linux-arm-msm@vger.kernel.org,
Connor Abbott <cwabbott0@gmail.com>,
Rob Clark <robdclark@chromium.org>,
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>,
open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v5 02/40] drm/gpuvm: Allow VAs to hold soft reference to BOs
Date: Tue, 20 May 2025 09:40:47 +0200 [thread overview]
Message-ID: <aCwx_9KIc9QBd7_0@pollux> (raw)
In-Reply-To: <20250519175348.11924-3-robdclark@gmail.com>
On Mon, May 19, 2025 at 10:51:25AM -0700, Rob Clark wrote:
> From: Rob Clark <robdclark@chromium.org>
>
> Eases migration for drivers where VAs don't hold hard references to
> their associated BO, avoiding reference loops.
>
> In particular, msm uses soft references to optimistically keep around
> mappings until the BO is distroyed. Which obviously won't work if the
> VA (the mapping) is holding a reference to the BO.
>
> By making this a per-VM flag, we can use normal hard-references for
> mappings in a "VM_BIND" managed VM, but soft references in other cases,
> such as kernel-internal VMs (for display scanout, etc).
>
> Cc: Danilo Krummrich <dakr@kernel.org>
> Signed-off-by: Rob Clark <robdclark@chromium.org>
> ---
> drivers/gpu/drm/drm_gpuvm.c | 37 ++++++++++++++++++++++++++++++++-----
> include/drm/drm_gpuvm.h | 19 +++++++++++++++++--
> 2 files changed, 49 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_gpuvm.c b/drivers/gpu/drm/drm_gpuvm.c
> index 1e89a98caad4..892b62130ff8 100644
> --- a/drivers/gpu/drm/drm_gpuvm.c
> +++ b/drivers/gpu/drm/drm_gpuvm.c
> @@ -1125,6 +1125,8 @@ __drm_gpuvm_prepare_objects(struct drm_gpuvm *gpuvm,
> LIST_HEAD(extobjs);
> int ret = 0;
>
> + WARN_ON(gpuvm->flags & DRM_GPUVM_VA_WEAK_REF);
No, here and below, please don't scatter WARN_ON() calls in various code paths
for this hack.
This won't ever be a valid and supported mode, please keep the diff as small as
possible.
<snip>
> diff --git a/include/drm/drm_gpuvm.h b/include/drm/drm_gpuvm.h
> index 2a9629377633..652e0fb66413 100644
> --- a/include/drm/drm_gpuvm.h
> +++ b/include/drm/drm_gpuvm.h
> @@ -205,10 +205,25 @@ enum drm_gpuvm_flags {
> */
> DRM_GPUVM_RESV_PROTECTED = BIT(0),
>
> + /**
> + * @DRM_GPUVM_VA_WEAK_REF:
> + *
> + * Flag indicating that the &drm_gpuva (or more correctly, the
> + * &drm_gpuvm_bo) only holds a weak reference to the &drm_gem_object.
> + * This mode is intended to ease migration to drm_gpuvm for drivers
> + * where the GEM object holds a referece to the VA, rather than the
> + * other way around.
> + *
> + * In this mode, drm_gpuvm does not track evicted or external objects.
> + * It is intended for legacy mode, where the needed objects are attached
> + * to the command submission ioctl, therefore this tracking is unneeded.
> + */
> + DRM_GPUVM_VA_WEAK_REF = BIT(1),
As mentioned in v4, I do *not* agree with making this a valid and supported
mode. If at all, it should be an exception for MSM, i.e.
DRM_GPUVM_MSM_LEGACY_QUIRK with an explicit approval from Dave / Sima [1].
It invalidates the whole design and makes a lot of functions fundamentally
invalid to call, which is well demonstrated by all the WARN_ON() calls this
patch attempts to add.
> +
> /**
> * @DRM_GPUVM_USERBITS: user defined bits
> */
> - DRM_GPUVM_USERBITS = BIT(1),
> + DRM_GPUVM_USERBITS = BIT(2),
> };
[1] https://lore.kernel.org/dri-devel/aCb-72KH-NrzvGXy@pollux/
next prev parent reply other threads:[~2025-05-20 7:40 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-19 17:51 [PATCH v5 00/40] drm/msm: sparse / "VM_BIND" support Rob Clark
2025-05-19 17:51 ` [PATCH v5 01/40] drm/gpuvm: Don't require obj lock in destructor path Rob Clark
2025-05-20 7:23 ` Danilo Krummrich
2025-05-20 14:57 ` Rob Clark
2025-05-20 15:21 ` Danilo Krummrich
2025-05-20 15:45 ` Rob Clark
2025-05-20 15:49 ` Danilo Krummrich
2025-05-19 17:51 ` [PATCH v5 02/40] drm/gpuvm: Allow VAs to hold soft reference to BOs Rob Clark
2025-05-20 7:40 ` Danilo Krummrich [this message]
2025-05-20 15:54 ` Rob Clark
2025-05-20 16:22 ` Danilo Krummrich
2025-05-19 17:51 ` [PATCH v5 03/40] drm/gem: Add ww_acquire_ctx support to drm_gem_lru_scan() Rob Clark
2025-05-19 17:51 ` [PATCH v5 04/40] drm/sched: Add enqueue credit limit Rob Clark
2025-05-19 17:51 ` [PATCH v5 05/40] iommu/io-pgtable-arm: Add quirk to quiet WARN_ON() Rob Clark
2025-05-19 17:51 ` [PATCH v5 06/40] drm/msm: Rename msm_file_private -> msm_context Rob Clark
2025-05-19 17:51 ` [PATCH v5 07/40] drm/msm: Improve msm_context comments Rob Clark
2025-05-19 17:51 ` [PATCH v5 08/40] drm/msm: Rename msm_gem_address_space -> msm_gem_vm Rob Clark
2025-05-19 17:51 ` [PATCH v5 09/40] drm/msm: Remove vram carveout support Rob Clark
2025-05-19 17:51 ` [PATCH v5 10/40] drm/msm: Collapse vma allocation and initialization Rob Clark
2025-05-19 17:51 ` [PATCH v5 11/40] drm/msm: Collapse vma close and delete Rob Clark
2025-05-19 17:51 ` [PATCH v5 12/40] drm/msm: Don't close VMAs on purge Rob Clark
2025-05-19 17:57 ` [PATCH v5 13/40] drm/msm: drm_gpuvm conversion Rob Clark
2025-05-19 17:57 ` [PATCH v5 14/40] drm/msm: Convert vm locking Rob Clark
2025-05-19 17:57 ` [PATCH v5 15/40] drm/msm: Use drm_gpuvm types more Rob Clark
2025-05-19 17:57 ` [PATCH v5 16/40] drm/msm: Split out helper to get iommu prot flags Rob Clark
2025-05-19 17:57 ` [PATCH v5 17/40] drm/msm: Add mmu support for non-zero offset Rob Clark
2025-05-19 17:57 ` [PATCH v5 18/40] drm/msm: Add PRR support Rob Clark
2025-05-19 17:57 ` [PATCH v5 19/40] drm/msm: Rename msm_gem_vma_purge() -> _unmap() Rob Clark
2025-05-19 17:57 ` [PATCH v5 20/40] drm/msm: Drop queued submits on lastclose() Rob Clark
2025-05-19 17:57 ` [PATCH v5 21/40] drm/msm: Lazily create context VM Rob Clark
2025-05-19 17:57 ` [PATCH v5 22/40] drm/msm: Add opt-in for VM_BIND Rob Clark
2025-05-19 17:57 ` [PATCH v5 23/40] drm/msm: Mark VM as unusable on GPU hangs Rob Clark
2025-05-19 17:57 ` [PATCH v5 24/40] drm/msm: Add _NO_SHARE flag Rob Clark
2025-05-19 17:57 ` [PATCH v5 25/40] drm/msm: Crashdump prep for sparse mappings Rob Clark
2025-05-19 17:57 ` [PATCH v5 26/40] drm/msm: rd dumping " Rob Clark
2025-05-19 17:57 ` [PATCH v5 27/40] drm/msm: Crashdec support for sparse Rob Clark
2025-05-19 17:57 ` [PATCH v5 28/40] drm/msm: rd dumping " Rob Clark
2025-05-19 17:57 ` [PATCH v5 29/40] drm/msm: Extract out syncobj helpers Rob Clark
2025-05-19 17:57 ` [PATCH v5 30/40] drm/msm: Use DMA_RESV_USAGE_BOOKKEEP/KERNEL Rob Clark
2025-05-19 17:57 ` [PATCH v5 31/40] drm/msm: Add VM_BIND submitqueue Rob Clark
2025-05-19 17:57 ` [PATCH v5 32/40] drm/msm: Support IO_PGTABLE_QUIRK_NO_WARN_ON Rob Clark
2025-05-19 17:57 ` [PATCH v5 33/40] drm/msm: Support pgtable preallocation Rob Clark
2025-05-19 17:57 ` [PATCH v5 34/40] drm/msm: Split out map/unmap ops Rob Clark
2025-05-19 17:57 ` [PATCH v5 35/40] drm/msm: Add VM_BIND ioctl Rob Clark
2025-05-19 17:57 ` [PATCH v5 36/40] drm/msm: Add VM logging for VM_BIND updates Rob Clark
2025-05-19 17:57 ` [PATCH v5 37/40] drm/msm: Add VMA unmap reason Rob Clark
2025-05-19 17:57 ` [PATCH v5 38/40] drm/msm: Add mmu prealloc tracepoint Rob Clark
2025-05-19 17:57 ` [PATCH v5 39/40] drm/msm: use trylock for debugfs Rob Clark
2025-05-19 17:57 ` [PATCH v5 40/40] drm/msm: Bump UAPI version Rob Clark
2025-05-19 21:15 ` [Linaro-mm-sig] [PATCH v5 00/40] drm/msm: sparse / "VM_BIND" support Dave Airlie
2025-05-19 21:24 ` Rob Clark
2025-05-19 21:45 ` Dave Airlie
2025-05-19 21:51 ` Rob Clark
2025-05-19 22:23 ` Connor Abbott
2025-05-20 15:41 ` Will Deacon
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=aCwx_9KIc9QBd7_0@pollux \
--to=dakr@kernel.org \
--cc=airlied@gmail.com \
--cc=cwabbott0@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=freedreno@lists.freedesktop.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=robdclark@chromium.org \
--cc=robdclark@gmail.com \
--cc=simona@ffwll.ch \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).