From: "Ghimiray, Himal Prasad" <himal.prasad.ghimiray@intel.com>
To: Tejas Upadhyay <tejas.upadhyay@intel.com>,
<intel-xe@lists.freedesktop.org>
Subject: Re: [PATCH V15 07/14] drm/xe/vram: Extract buddy alloc and free helpers
Date: Wed, 12 Aug 2026 08:55:09 +0530 [thread overview]
Message-ID: <5cc8001c-d791-41ac-b002-9773ad841066@intel.com> (raw)
In-Reply-To: <20260811124016.3614699-23-tejas.upadhyay@intel.com>
On 11-08-2026 18:10, Tejas Upadhyay wrote:
> Factor out xe_ttm_vram_buddy_alloc() and xe_ttm_vram_buddy_free()
> from xe_ttm_vram_mgr_new() and xe_ttm_vram_mgr_del(). These helpers
> consolidate block allocation with visible-size tracking and
> block->private tagging, making them reusable by the upcoming VRAM
> page offline reservation path.
>
> No functional change.
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
>
> Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
> ---
> drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 82 +++++++++++++++++-----------
> 1 file changed, 51 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> index 5ab5dfdb183c..49eeec90a470 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> @@ -46,6 +46,40 @@ static inline bool xe_is_vram_mgr_blocks_contiguous(struct gpu_buddy *mm,
> return true;
> }
>
> +static int xe_ttm_vram_buddy_alloc(struct xe_ttm_vram_mgr *mgr, u64 start,
> + u64 end, u64 size, u64 min_page_size,
> + struct list_head *blocks, unsigned long flags,
> + void *priv, u64 *used_visible)
> +{
> + struct gpu_buddy *mm = &mgr->mm;
> + struct gpu_buddy_block *block;
> + int err;
> +
> + err = gpu_buddy_alloc_blocks(mm, start, end, size, min_page_size, blocks, flags);
> + if (err)
> + return err;
> +
> + list_for_each_entry(block, blocks, link)
> + block->private = priv;
> +
> + if (end <= mgr->visible_size) {
> + *used_visible = size;
> + } else {
> + list_for_each_entry(block, blocks, link) {
> + u64 blk_start = gpu_buddy_block_offset(block);
> +
> + if (blk_start < mgr->visible_size) {
> + u64 blk_end = blk_start + gpu_buddy_block_size(mm, block);
> +
> + *used_visible += min(blk_end, mgr->visible_size) - blk_start;
> + }
> + }
> + }
> +
> + mgr->visible_avail -= *used_visible;
> + return 0;
> +}
> +
> static int xe_ttm_vram_mgr_new(struct ttm_resource_manager *man,
> struct ttm_buffer_object *tbo,
> const struct ttm_place *place,
> @@ -54,7 +88,6 @@ static int xe_ttm_vram_mgr_new(struct ttm_resource_manager *man,
> struct xe_ttm_vram_mgr *mgr = to_xe_ttm_vram_mgr(man);
> struct xe_ttm_vram_mgr_resource *vres;
> struct gpu_buddy *mm = &mgr->mm;
> - struct gpu_buddy_block *block;
> u64 size, min_page_size;
> unsigned long lpfn;
> int err;
> @@ -115,32 +148,12 @@ static int xe_ttm_vram_mgr_new(struct ttm_resource_manager *man,
> goto error_unlock;
> }
>
> - err = gpu_buddy_alloc_blocks(mm, (u64)place->fpfn << PAGE_SHIFT,
> - (u64)lpfn << PAGE_SHIFT, size,
> - min_page_size, &vres->blocks, vres->flags);
> + err = xe_ttm_vram_buddy_alloc(mgr, (u64)place->fpfn << PAGE_SHIFT,
> + (u64)lpfn << PAGE_SHIFT, size,
> + min_page_size, &vres->blocks, vres->flags,
> + tbo, &vres->used_visible_size);
> if (err)
> goto error_unlock;
> -
> - if (lpfn <= mgr->visible_size >> PAGE_SHIFT) {
> - vres->used_visible_size = size;
> - } else {
> - struct gpu_buddy_block *block;
> -
> - list_for_each_entry(block, &vres->blocks, link) {
> - u64 start = gpu_buddy_block_offset(block);
> -
> - if (start < mgr->visible_size) {
> - u64 end = start + gpu_buddy_block_size(mm, block);
> -
> - vres->used_visible_size +=
> - min(end, mgr->visible_size) - start;
> - }
> - }
> - }
> -
> - mgr->visible_avail -= vres->used_visible_size;
> - list_for_each_entry(block, &vres->blocks, link)
> - block->private = tbo;
> mutex_unlock(&mgr->lock);
>
> if (!(vres->base.placement & TTM_PL_FLAG_CONTIGUOUS) &&
> @@ -172,20 +185,27 @@ static int xe_ttm_vram_mgr_new(struct ttm_resource_manager *man,
> return err;
> }
>
> +static void xe_ttm_vram_buddy_free(struct xe_ttm_vram_mgr *mgr,
> + struct list_head *blocks,
> + u64 used_visible)
> +{
> + struct gpu_buddy_block *block;
> +
> + list_for_each_entry(block, blocks, link)
> + block->private = NULL;
> + gpu_buddy_free_list(&mgr->mm, blocks, 0);
> + mgr->visible_avail += used_visible;
> +}
> +
> static void xe_ttm_vram_mgr_del(struct ttm_resource_manager *man,
> struct ttm_resource *res)
> {
> struct xe_ttm_vram_mgr_resource *vres =
> to_xe_ttm_vram_mgr_resource(res);
> struct xe_ttm_vram_mgr *mgr = to_xe_ttm_vram_mgr(man);
> - struct gpu_buddy *mm = &mgr->mm;
> - struct gpu_buddy_block *block;
>
> mutex_lock(&mgr->lock);
> - list_for_each_entry(block, &vres->blocks, link)
> - block->private = NULL;
> - gpu_buddy_free_list(mm, &vres->blocks, 0);
> - mgr->visible_avail += vres->used_visible_size;
> + xe_ttm_vram_buddy_free(mgr, &vres->blocks, vres->used_visible_size);
> mutex_unlock(&mgr->lock);
>
> ttm_resource_fini(man, res);
next prev parent reply other threads:[~2026-08-12 3:25 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-11 12:40 [PATCH V15 00/14] Add memory page offlining support Tejas Upadhyay
2026-08-11 12:40 ` [PATCH V15 01/14] drm/xe: Link VRAM object with gpu buddy Tejas Upadhyay
2026-08-11 12:40 ` [PATCH V15 02/14] [DO_NOT_MERGE]drm/gpu: Add gpu_buddy_allocated_addr_to_block helper Tejas Upadhyay
2026-08-11 12:40 ` [PATCH V15 03/14] drm/xe: Link LRC BO and its execution Queue Tejas Upadhyay
2026-08-11 12:40 ` [PATCH V15 04/14] drm/xe: Extend BO purge to handle vram pages as well Tejas Upadhyay
2026-08-11 12:40 ` [PATCH V15 05/14] drm/xe/bo: Make xe_bo_is_user() public Tejas Upadhyay
2026-08-11 15:38 ` Ghimiray, Himal Prasad
2026-08-11 12:40 ` [PATCH V15 06/14] drm/xe: Guard teardown paths against purged BOs Tejas Upadhyay
2026-08-12 3:24 ` Ghimiray, Himal Prasad
2026-08-12 9:40 ` Upadhyay, Tejas
2026-08-11 12:40 ` [PATCH V15 07/14] drm/xe/vram: Extract buddy alloc and free helpers Tejas Upadhyay
2026-08-12 3:25 ` Ghimiray, Himal Prasad [this message]
2026-08-11 12:40 ` [PATCH V15 08/14] drm/xe/vram: Add page offline data structures and lifecycle Tejas Upadhyay
2026-08-12 12:01 ` Ghimiray, Himal Prasad
2026-08-14 6:38 ` Upadhyay, Tejas
2026-08-11 12:40 ` [PATCH V15 09/14] drm/xe/vram: Add VRAM page offline fault handler Tejas Upadhyay
2026-08-13 12:44 ` Ghimiray, Himal Prasad
2026-08-14 5:19 ` Upadhyay, Tejas
2026-08-14 10:16 ` Upadhyay, Tejas
2026-08-11 12:40 ` [PATCH V15 10/14] drm/xe/configfs: Add vram bad page reservation policy Tejas Upadhyay
2026-08-12 12:21 ` Ghimiray, Himal Prasad
2026-08-11 12:40 ` [PATCH V15 11/14] drm/xe/vram: Use RCU for lock-free sysfs reads of bad page lists Tejas Upadhyay
2026-08-12 12:14 ` Ghimiray, Himal Prasad
2026-08-11 12:40 ` [PATCH V15 12/14] drm/xe: Add sysfs interface for bad gpu vram pages Tejas Upadhyay
2026-08-12 12:27 ` Ghimiray, Himal Prasad
2026-08-11 12:40 ` [PATCH V15 13/14] drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN Tejas Upadhyay
2026-08-11 20:08 ` Rodrigo Vivi
2026-08-12 12:24 ` Ghimiray, Himal Prasad
2026-08-11 12:40 ` [PATCH V15 14/14] drm/xe: Add fault-inject based VRAM page offline injection Tejas Upadhyay
2026-08-16 14:35 ` Ghimiray, Himal Prasad
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=5cc8001c-d791-41ac-b002-9773ad841066@intel.com \
--to=himal.prasad.ghimiray@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=tejas.upadhyay@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox