From: Danilo Krummrich <dakr@redhat.com>
To: Matthew Brost <matthew.brost@intel.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH drm-next 03/14] drm: manager to keep track of GPUs VA mappings
Date: Sat, 28 Jan 2023 02:51:14 +0100 [thread overview]
Message-ID: <63d47f94.170a0220.fe009.d8bb@mx.google.com> (raw)
In-Reply-To: <Y9MZp2Uu2xwVBO2d@DUT025-TGLU.fm.intel.com>
On Fri, Jan 27, 2023 at 12:24:07AM +0000, Matthew Brost wrote:
> On Wed, Jan 18, 2023 at 07:12:45AM +0100, Danilo Krummrich wrote:
> > This adds the infrastructure for a manager implementation to keep track
> > of GPU virtual address (VA) mappings.
> >
> > New UAPIs, motivated by Vulkan sparse memory bindings graphics drivers
> > start implementing, allow userspace applications to request multiple and
> > arbitrary GPU VA mappings of buffer objects. The DRM GPU VA manager is
> > intended to serve the following purposes in this context.
> >
> > 1) Provide a dedicated range allocator to track GPU VA allocations and
> > mappings, making use of the drm_mm range allocator.
> >
> > 2) Generically connect GPU VA mappings to their backing buffers, in
> > particular DRM GEM objects.
> >
> > 3) Provide a common implementation to perform more complex mapping
> > operations on the GPU VA space. In particular splitting and merging
> > of GPU VA mappings, e.g. for intersecting mapping requests or partial
> > unmap requests.
> >
> > Idea-suggested-by: Dave Airlie <airlied@redhat.com>
> > Signed-off-by: Danilo Krummrich <dakr@redhat.com>
>
> <snip>
>
> > +++ b/drivers/gpu/drm/drm_gpuva_mgr.c
>
> <snip>
>
> > +struct drm_gpuva *
> > +drm_gpuva_find(struct drm_gpuva_manager *mgr,
> > + u64 addr, u64 range)
> > +{
> > + struct drm_gpuva *va;
> > +
> > + drm_gpuva_for_each_va_in_range(va, mgr, addr, range) {
>
> Last argument should be: range + addr, right?
>
Thanks, good catch.
> > + if (va->node.start == addr &&
> > + va->node.size == range)
> > + return va;
> > + }
> > +
> > + return NULL;
> > +}
> > +EXPORT_SYMBOL(drm_gpuva_find);
> > +
> > +/**
> > + * drm_gpuva_find_prev - find the &drm_gpuva before the given address
> > + * @mgr: the &drm_gpuva_manager to search in
> > + * @start: the given GPU VA's start address
> > + *
> > + * Find the adjacent &drm_gpuva before the GPU VA with given &start address.
> > + *
> > + * Note that if there is any free space between the GPU VA mappings no mapping
> > + * is returned.
> > + *
> > + * Returns: a pointer to the found &drm_gpuva or NULL if none was found
> > + */
> > +struct drm_gpuva *
> > +drm_gpuva_find_prev(struct drm_gpuva_manager *mgr, u64 start)
> > +{
> > + struct drm_mm_node *node;
> > +
> > + if (start <= mgr->mm_start ||
> > + start > (mgr->mm_start + mgr->mm_range))
> > + return NULL;
> > +
> > + node = __drm_mm_interval_first(&mgr->va_mm, start - 1, start);
> > + if (node == &mgr->va_mm.head_node)
> > + return NULL;
> > +
> > + return (struct drm_gpuva *)node;
> > +}
> > +EXPORT_SYMBOL(drm_gpuva_find_prev);
> > +
> > +/**
> > + * drm_gpuva_find_next - find the &drm_gpuva after the given address
> > + * @mgr: the &drm_gpuva_manager to search in
> > + * @end: the given GPU VA's end address
> > + *
> > + * Find the adjacent &drm_gpuva after the GPU VA with given &end address.
> > + *
> > + * Note that if there is any free space between the GPU VA mappings no mapping
> > + * is returned.
> > + *
> > + * Returns: a pointer to the found &drm_gpuva or NULL if none was found
> > + */
> > +struct drm_gpuva *
> > +drm_gpuva_find_next(struct drm_gpuva_manager *mgr, u64 end)
> > +{
> > + struct drm_mm_node *node;
> > +
> > + if (end < mgr->mm_start ||
> > + end >= (mgr->mm_start + mgr->mm_range))
> > + return NULL;
> > +
> > + node = __drm_mm_interval_first(&mgr->va_mm, end, end + 1);
> > + if (node == &mgr->va_mm.head_node)
> > + return NULL;
> > +
> > + return (struct drm_gpuva *)node;
> > +}
> > +EXPORT_SYMBOL(drm_gpuva_find_next);
> > +
> > +/**
> > + * drm_gpuva_region_insert - insert a &drm_gpuva_region
> > + * @mgr: the &drm_gpuva_manager to insert the &drm_gpuva in
> > + * @reg: the &drm_gpuva_region to insert
> > + * @addr: the start address of the GPU VA
> > + * @range: the range of the GPU VA
> > + *
> > + * Insert a &drm_gpuva_region with a given address and range into a
> > + * &drm_gpuva_manager.
> > + *
> > + * Returns: 0 on success, negative error code on failure.
> > + */
> > +int
> > +drm_gpuva_region_insert(struct drm_gpuva_manager *mgr,
> > + struct drm_gpuva_region *reg,
> > + u64 addr, u64 range)
> > +{
> > + int ret;
> > +
> > + ret = drm_mm_insert_node_in_range(&mgr->region_mm, ®->node,
> > + range, 0,
> > + 0, addr,
> > + addr + range,
> > + DRM_MM_INSERT_LOW|
> > + DRM_MM_INSERT_ONCE);
> > + if (ret)
> > + return ret;
> > +
> > + reg->mgr = mgr;
> > +
> > + return 0;
> > +}
> > +EXPORT_SYMBOL(drm_gpuva_region_insert);
> > +
> > +/**
> > + * drm_gpuva_region_destroy - destroy a &drm_gpuva_region
> > + * @mgr: the &drm_gpuva_manager holding the region
> > + * @reg: the &drm_gpuva to destroy
> > + *
> > + * This removes the given ® from the underlaying range allocator.
> > + */
> > +void
> > +drm_gpuva_region_destroy(struct drm_gpuva_manager *mgr,
> > + struct drm_gpuva_region *reg)
> > +{
> > + struct drm_gpuva *va;
> > +
> > + drm_gpuva_for_each_va_in_range(va, mgr,
> > + reg->node.start,
> > + reg->node.size) {
>
> Last argument should be: reg->node.start + reg->node.size, right?
Thanks, pushed the fix to new-uapi-drm-next-fixes.
>
> Matt
>
> > + WARN(1, "GPU VA region must be empty on destroy.\n");
> > + return;
> > + }
> > +
> > + if (®->node == &mgr->kernel_alloc_node) {
> > + WARN(1, "Can't destroy kernel reserved region.\n");
> > + return;
> > + }
> > +
> > + drm_mm_remove_node(®->node);
> > +}
> > +EXPORT_SYMBOL(drm_gpuva_region_destroy);
>
next prev parent reply other threads:[~2023-01-28 1:51 UTC|newest]
Thread overview: 230+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-18 6:12 [PATCH drm-next 00/14] [RFC] DRM GPUVA Manager & Nouveau VM_BIND UAPI Danilo Krummrich
2023-01-18 6:12 ` Danilo Krummrich
2023-01-18 6:12 ` [Nouveau] " Danilo Krummrich
2023-01-18 6:12 ` [PATCH drm-next 01/14] drm: execution context for GEM buffers Danilo Krummrich
2023-01-18 6:12 ` Danilo Krummrich
2023-01-18 6:12 ` [Nouveau] " Danilo Krummrich
2023-01-18 6:12 ` [PATCH drm-next 02/14] drm/exec: fix memory leak in drm_exec_prepare_obj() Danilo Krummrich
2023-01-18 6:12 ` Danilo Krummrich
2023-01-18 6:12 ` [Nouveau] " Danilo Krummrich
2023-01-18 8:51 ` Christian König
2023-01-18 8:51 ` Christian König
2023-01-18 8:51 ` [Nouveau] " Christian König
2023-01-18 19:00 ` Danilo Krummrich
2023-01-18 19:00 ` Danilo Krummrich
2023-01-18 19:00 ` [Nouveau] " Danilo Krummrich
2023-01-18 6:12 ` [PATCH drm-next 03/14] drm: manager to keep track of GPUs VA mappings Danilo Krummrich
2023-01-18 6:12 ` Danilo Krummrich
2023-01-18 6:12 ` [Nouveau] " Danilo Krummrich
2023-01-19 4:14 ` Bagas Sanjaya
2023-01-19 4:14 ` Bagas Sanjaya
2023-01-19 4:14 ` [Nouveau] " Bagas Sanjaya
2023-01-20 18:32 ` Danilo Krummrich
2023-01-23 23:23 ` Niranjana Vishwanathapura
2023-01-23 23:23 ` Niranjana Vishwanathapura
2023-01-24 0:11 ` [Nouveau] " Danilo Krummrich
2023-01-24 0:11 ` Danilo Krummrich
2023-01-24 17:26 ` Niranjana Vishwanathapura
2023-01-26 23:43 ` Matthew Brost
2023-01-26 23:43 ` Matthew Brost
2023-01-27 0:24 ` Matthew Brost
2023-01-27 0:24 ` Matthew Brost
2023-01-28 1:51 ` Danilo Krummrich [this message]
2023-02-03 17:37 ` Matthew Brost
2023-02-03 17:37 ` Matthew Brost
2023-02-06 13:35 ` Christian König
2023-02-06 13:35 ` Christian König
2023-02-06 13:35 ` [Nouveau] " Christian König
2023-02-06 13:46 ` Danilo Krummrich
2023-02-06 13:46 ` Danilo Krummrich
2023-02-06 13:46 ` [Nouveau] " Danilo Krummrich
2023-02-14 11:52 ` Danilo Krummrich
2023-02-14 11:52 ` Danilo Krummrich
2023-02-14 11:52 ` [Nouveau] " Danilo Krummrich
2023-01-18 6:12 ` [PATCH drm-next 04/14] drm: debugfs: provide infrastructure to dump a DRM GPU VA space Danilo Krummrich
2023-01-18 6:12 ` Danilo Krummrich
2023-01-18 6:12 ` [Nouveau] " Danilo Krummrich
2023-01-18 13:55 ` kernel test robot
2023-01-18 13:55 ` kernel test robot
2023-01-18 13:55 ` [Nouveau] " kernel test robot
2023-01-18 15:47 ` kernel test robot
2023-01-18 15:47 ` kernel test robot
2023-01-18 15:47 ` [Nouveau] " kernel test robot
2023-01-18 6:12 ` [PATCH drm-next 05/14] drm/nouveau: new VM_BIND uapi interfaces Danilo Krummrich
2023-01-18 6:12 ` Danilo Krummrich
2023-01-18 6:12 ` [Nouveau] " Danilo Krummrich
2023-01-27 1:05 ` Matthew Brost
2023-01-27 1:05 ` Matthew Brost
2023-01-27 1:26 ` Danilo Krummrich
2023-01-27 1:26 ` Danilo Krummrich
2023-01-27 1:26 ` [Nouveau] " Danilo Krummrich
2023-01-27 7:55 ` Christian König
2023-01-27 7:55 ` Christian König
2023-01-27 7:55 ` [Nouveau] " Christian König
2023-01-27 13:12 ` Danilo Krummrich
2023-01-27 13:12 ` Danilo Krummrich
2023-01-27 13:12 ` [Nouveau] " Danilo Krummrich
2023-01-27 13:23 ` Christian König
2023-01-27 13:23 ` Christian König
2023-01-27 13:23 ` [Nouveau] " Christian König
2023-01-27 14:44 ` Danilo Krummrich
2023-01-27 14:44 ` Danilo Krummrich
2023-01-27 14:44 ` [Nouveau] " Danilo Krummrich
2023-01-27 15:17 ` Christian König
2023-01-27 15:17 ` Christian König
2023-01-27 15:17 ` [Nouveau] " Christian König
2023-01-27 20:25 ` David Airlie
2023-01-27 20:25 ` David Airlie
2023-01-27 20:25 ` [Nouveau] " David Airlie
2023-01-30 12:58 ` Christian König
2023-01-30 12:58 ` Christian König
2023-01-30 12:58 ` [Nouveau] " Christian König
2023-01-27 21:09 ` Danilo Krummrich
2023-01-27 21:09 ` Danilo Krummrich
2023-01-27 21:09 ` [Nouveau] " Danilo Krummrich
2023-01-29 18:46 ` Danilo Krummrich
2023-01-29 18:46 ` Danilo Krummrich
2023-01-29 18:46 ` [Nouveau] " Danilo Krummrich
2023-01-30 13:02 ` Christian König
2023-01-30 13:02 ` Christian König
2023-01-30 13:02 ` [Nouveau] " Christian König
2023-01-30 23:38 ` Danilo Krummrich
2023-01-30 23:38 ` Danilo Krummrich
2023-01-30 23:38 ` [Nouveau] " Danilo Krummrich
2023-02-01 8:10 ` Dave Airlie
2023-02-01 8:10 ` Dave Airlie
2023-02-01 8:10 ` Dave Airlie
2023-02-02 11:53 ` Christian König
2023-02-02 11:53 ` Christian König
2023-02-02 11:53 ` Christian König
2023-02-02 18:31 ` Danilo Krummrich
2023-02-02 18:31 ` Danilo Krummrich
2023-02-02 18:31 ` Danilo Krummrich
2023-02-06 9:48 ` Christian König
2023-02-06 9:48 ` Christian König
2023-02-06 9:48 ` Christian König
2023-02-06 13:27 ` Danilo Krummrich
2023-02-06 13:27 ` Danilo Krummrich
2023-02-06 13:27 ` Danilo Krummrich
2023-02-06 16:14 ` Christian König
2023-02-06 16:14 ` Christian König
2023-02-06 16:14 ` Christian König
2023-02-06 18:20 ` Danilo Krummrich
2023-02-06 18:20 ` Danilo Krummrich
2023-02-06 18:20 ` Danilo Krummrich
2023-02-07 9:35 ` Christian König
2023-02-07 9:35 ` Christian König
2023-02-07 9:35 ` Christian König
2023-02-07 10:50 ` Danilo Krummrich
2023-02-07 10:50 ` Danilo Krummrich
2023-02-07 10:50 ` Danilo Krummrich
2023-02-10 11:50 ` Christian König
2023-02-10 11:50 ` Christian König
2023-02-10 11:50 ` Christian König
2023-02-10 12:47 ` Danilo Krummrich
2023-02-10 12:47 ` Danilo Krummrich
2023-02-10 12:47 ` Danilo Krummrich
2023-01-27 1:43 ` Danilo Krummrich
2023-01-27 1:43 ` Danilo Krummrich
2023-01-27 1:43 ` [Nouveau] " Danilo Krummrich
2023-01-27 3:21 ` Matthew Brost
2023-01-27 3:21 ` Matthew Brost
2023-01-27 3:33 ` Danilo Krummrich
2023-01-27 3:33 ` Danilo Krummrich
2023-01-27 3:33 ` [Nouveau] " Danilo Krummrich
2023-01-18 6:12 ` [PATCH drm-next 06/14] drm/nouveau: get vmm via nouveau_cli_vmm() Danilo Krummrich
2023-01-18 6:12 ` Danilo Krummrich
2023-01-18 6:12 ` [Nouveau] " Danilo Krummrich
2023-01-18 6:12 ` [PATCH drm-next 07/14] drm/nouveau: bo: initialize GEM GPU VA interface Danilo Krummrich
2023-01-18 6:12 ` Danilo Krummrich
2023-01-18 6:12 ` [Nouveau] " Danilo Krummrich
2023-01-18 6:12 ` [PATCH drm-next 08/14] drm/nouveau: move usercopy helpers to nouveau_drv.h Danilo Krummrich
2023-01-18 6:12 ` Danilo Krummrich
2023-01-18 6:12 ` [Nouveau] " Danilo Krummrich
2023-01-18 6:12 ` [PATCH drm-next 09/14] drm/nouveau: fence: fail to emit when fence context is killed Danilo Krummrich
2023-01-18 6:12 ` Danilo Krummrich
2023-01-18 6:12 ` [Nouveau] " Danilo Krummrich
2023-01-18 6:12 ` [PATCH drm-next 10/14] drm/nouveau: chan: provide nouveau_channel_kill() Danilo Krummrich
2023-01-18 6:12 ` Danilo Krummrich
2023-01-18 6:12 ` [Nouveau] " Danilo Krummrich
2023-01-18 6:12 ` [PATCH drm-next 11/14] drm/nouveau: nvkm/vmm: implement raw ops to manage uvmm Danilo Krummrich
2023-01-18 6:12 ` Danilo Krummrich
2023-01-18 6:12 ` [Nouveau] " Danilo Krummrich
2023-01-18 9:37 ` kernel test robot
2023-01-18 9:37 ` kernel test robot
2023-01-20 3:37 ` kernel test robot
2023-01-20 3:37 ` kernel test robot
2023-01-20 3:37 ` [Nouveau] " kernel test robot
2023-01-18 6:12 ` [PATCH drm-next 12/14] drm/nouveau: implement uvmm for user mode bindings Danilo Krummrich
2023-01-18 6:12 ` Danilo Krummrich
2023-01-18 6:12 ` [Nouveau] " Danilo Krummrich
2023-01-18 6:12 ` [PATCH drm-next 13/14] drm/nouveau: implement new VM_BIND UAPI Danilo Krummrich
2023-01-18 6:12 ` Danilo Krummrich
2023-01-18 6:12 ` [Nouveau] " Danilo Krummrich
2023-01-18 8:37 ` kernel test robot
2023-01-18 8:37 ` kernel test robot
2023-01-18 20:37 ` Thomas Hellström (Intel)
2023-01-18 20:37 ` [Nouveau] " Thomas Hellström (Intel)
2023-01-19 3:44 ` Danilo Krummrich
2023-01-19 3:44 ` [Nouveau] " Danilo Krummrich
2023-01-19 4:58 ` Matthew Brost
2023-01-19 4:58 ` Matthew Brost
2023-01-19 7:32 ` Thomas Hellström (Intel)
2023-01-19 7:32 ` Thomas Hellström (Intel)
2023-01-19 7:32 ` [Nouveau] " Thomas Hellström (Intel)
2023-01-19 15:36 ` Danilo Krummrich
2023-01-19 16:38 ` Matthew Brost
2023-01-19 17:46 ` Danilo Krummrich
2023-01-19 21:47 ` Matthew Brost
2023-01-19 22:25 ` Danilo Krummrich
2023-01-20 4:30 ` Matthew Brost
2023-01-20 10:22 ` Boris Brezillon
2023-01-22 17:48 ` Matthew Brost
2023-01-23 10:01 ` Boris Brezillon
2023-01-20 10:08 ` Boris Brezillon
2023-01-20 10:08 ` Boris Brezillon
2023-01-20 10:08 ` [Nouveau] " Boris Brezillon
2023-01-18 6:12 ` [PATCH drm-next 14/14] drm/nouveau: debugfs: implement DRM GPU VA debugfs Danilo Krummrich
2023-01-18 6:12 ` Danilo Krummrich
2023-01-18 6:12 ` [Nouveau] " Danilo Krummrich
2023-01-18 8:53 ` [PATCH drm-next 00/14] [RFC] DRM GPUVA Manager & Nouveau VM_BIND UAPI Christian König
2023-01-18 8:53 ` Christian König
2023-01-18 8:53 ` [Nouveau] " Christian König
2023-01-18 15:34 ` Danilo Krummrich
2023-01-18 15:34 ` Danilo Krummrich
2023-01-18 15:34 ` [Nouveau] " Danilo Krummrich
2023-01-18 15:37 ` Christian König
2023-01-18 15:37 ` Christian König
2023-01-18 15:37 ` [Nouveau] " Christian König
2023-01-18 16:19 ` Danilo Krummrich
2023-01-18 16:19 ` Danilo Krummrich
2023-01-18 16:19 ` [Nouveau] " Danilo Krummrich
2023-01-18 16:30 ` Alex Deucher
2023-01-18 16:30 ` Alex Deucher
2023-01-18 16:30 ` [Nouveau] " Alex Deucher
2023-01-18 16:50 ` Danilo Krummrich
2023-01-18 16:50 ` Danilo Krummrich
2023-01-18 16:50 ` [Nouveau] " Danilo Krummrich
2023-01-18 16:54 ` Alex Deucher
2023-01-18 16:54 ` Alex Deucher
2023-01-18 16:54 ` [Nouveau] " Alex Deucher
2023-01-18 19:17 ` Dave Airlie
2023-01-18 19:17 ` Dave Airlie
2023-01-18 19:17 ` [Nouveau] " Dave Airlie
2023-01-18 19:48 ` Christian König
2023-01-18 19:48 ` Christian König
2023-01-18 19:48 ` [Nouveau] " Christian König
2023-01-19 4:04 ` Danilo Krummrich
2023-01-19 4:04 ` Danilo Krummrich
2023-01-19 4:04 ` [Nouveau] " Danilo Krummrich
2023-01-19 5:23 ` Matthew Brost
2023-01-19 5:23 ` Matthew Brost
2023-01-19 11:33 ` drm_gpuva_manager requirements (was Re: [PATCH drm-next 00/14] [RFC] DRM GPUVA Manager & Nouveau VM_BIND UAPI) Christian König
2023-01-19 11:33 ` Christian König
2023-01-19 11:33 ` [Nouveau] " Christian König
2023-02-06 14:48 ` [PATCH drm-next 00/14] [RFC] DRM GPUVA Manager & Nouveau VM_BIND UAPI Oded Gabbay
2023-02-06 14:48 ` Oded Gabbay
2023-03-16 16:39 ` Danilo Krummrich
2023-03-16 16:39 ` Danilo Krummrich
2023-03-16 16:39 ` [Nouveau] " Danilo Krummrich
-- strict thread matches above, loose matches on Subject: below --
2023-01-18 16:50 [PATCH drm-next 03/14] drm: manager to keep track of GPUs VA mappings kernel test robot
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=63d47f94.170a0220.fe009.d8bb@mx.google.com \
--to=dakr@redhat.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=matthew.brost@intel.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.