From: Matthew Brost <matthew.brost@intel.com>
To: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: <intel-xe@lists.freedesktop.org>,
<umesh.nerlige.ramappa@intel.com>, <riana.tauro@intel.com>
Subject: Re: [PATCH 1/3] drm/xe: Add XE_BO_FLAG_PINNED_WONTNEED
Date: Tue, 29 Oct 2024 14:55:11 +0000 [thread overview]
Message-ID: <ZyD3T8pU8Q8H4k8k@DUT025-TGLU.fm.intel.com> (raw)
In-Reply-To: <ZyDjiuhhGqSPLEl_@intel.com>
On Tue, Oct 29, 2024 at 09:30:50AM -0400, Rodrigo Vivi wrote:
> On Mon, Oct 28, 2024 at 05:32:22PM -0700, Matthew Brost wrote:
> > Not all BOs need to restored on resume / d3cold exit, add
> > XE_BO_FLAG_PINNED_WONTNEED which skips restoring of BOs rather just
> > allocates VRAM for the BO. This should slighly speedup resume / d3cold
> > exit flows.
> >
> > Marking GuC ADS, GuC CT, GuC log, GuC PC, and SA as WONTNEED.
>
> What about s/WONTNEED/NORESTORE ?
>
Yea that seems better.
Matt
> >
> > Signed-off-by: Matthew Brost <matthew.brost@intel.com>
> > ---
> > drivers/gpu/drm/xe/xe_bo.c | 24 +++++++++++++++++-------
> > drivers/gpu/drm/xe/xe_bo.h | 1 +
> > drivers/gpu/drm/xe/xe_guc_ads.c | 3 ++-
> > drivers/gpu/drm/xe/xe_guc_ct.c | 3 ++-
> > drivers/gpu/drm/xe/xe_guc_log.c | 3 ++-
> > drivers/gpu/drm/xe/xe_guc_pc.c | 3 ++-
> > drivers/gpu/drm/xe/xe_sa.c | 3 ++-
> > 7 files changed, 28 insertions(+), 12 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
> > index 5b232f2951b1..bd747e53eb9b 100644
> > --- a/drivers/gpu/drm/xe/xe_bo.c
> > +++ b/drivers/gpu/drm/xe/xe_bo.c
> > @@ -771,7 +771,9 @@ static int xe_bo_move(struct ttm_buffer_object *ttm_bo, bool evict,
> > xe_pm_runtime_get_noresume(xe);
> > }
> >
> > - if (xe_bo_is_pinned(bo) && !xe_bo_is_user(bo)) {
> > + if (bo->flags & XE_BO_FLAG_PINNED_WONTNEED) {
> > + ttm_bo_move_null(&bo->ttm, new_mem);
> > + } else if (xe_bo_is_pinned(bo) && !xe_bo_is_user(bo)) {
> > /*
> > * Kernel memory that is pinned should only be moved on suspend
> > * / resume, some of the pinned memory is required for the
> > @@ -891,6 +893,11 @@ int xe_bo_evict_pinned(struct xe_bo *bo)
> > if (WARN_ON(!xe_bo_is_vram(bo)))
> > return -EINVAL;
> >
> > + if (bo->flags & XE_BO_FLAG_PINNED_WONTNEED) {
> > + ttm_bo_move_null(&bo->ttm, NULL);
> > + return 0;
> > + }
> > +
> > ret = ttm_bo_mem_space(&bo->ttm, &placement, &new_mem, &ctx);
> > if (ret)
> > return ret;
> > @@ -943,14 +950,16 @@ int xe_bo_restore_pinned(struct xe_bo *bo)
> >
> > xe_bo_assert_held(bo);
> >
> > - if (WARN_ON(!bo->ttm.resource))
> > - return -EINVAL;
> > -
> > if (WARN_ON(!xe_bo_is_pinned(bo)))
> > return -EINVAL;
> >
> > - if (WARN_ON(xe_bo_is_vram(bo) || !bo->ttm.ttm))
> > - return -EINVAL;
> > + if (!(bo->flags & XE_BO_FLAG_PINNED_WONTNEED)) {
> > + if (WARN_ON(!bo->ttm.resource))
> > + return -EINVAL;
> > +
> > + if (WARN_ON(xe_bo_is_vram(bo) || !bo->ttm.ttm))
> > + return -EINVAL;
> > + }
> >
> > ret = ttm_bo_mem_space(&bo->ttm, &bo->placement, &new_mem, &ctx);
> > if (ret)
> > @@ -1692,7 +1701,8 @@ int xe_managed_bo_reinit_in_vram(struct xe_device *xe, struct xe_tile *tile, str
> > struct xe_bo *bo;
> > u32 dst_flags = XE_BO_FLAG_VRAM_IF_DGFX(tile) | XE_BO_FLAG_GGTT;
> >
> > - dst_flags |= (*src)->flags & XE_BO_FLAG_GGTT_INVALIDATE;
> > + dst_flags |= (*src)->flags & (XE_BO_FLAG_GGTT_INVALIDATE |
> > + XE_BO_FLAG_PINNED_WONTNEED);
> >
> > xe_assert(xe, IS_DGFX(xe));
> > xe_assert(xe, !(*src)->vmap.is_iomem);
> > diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
> > index 7fa44a0138b0..854ab8624d7a 100644
> > --- a/drivers/gpu/drm/xe/xe_bo.h
> > +++ b/drivers/gpu/drm/xe/xe_bo.h
> > @@ -39,6 +39,7 @@
> > #define XE_BO_FLAG_NEEDS_64K BIT(15)
> > #define XE_BO_FLAG_NEEDS_2M BIT(16)
> > #define XE_BO_FLAG_GGTT_INVALIDATE BIT(17)
> > +#define XE_BO_FLAG_PINNED_WONTNEED BIT(18)
> > /* this one is trigger internally only */
> > #define XE_BO_FLAG_INTERNAL_TEST BIT(30)
> > #define XE_BO_FLAG_INTERNAL_64K BIT(31)
> > diff --git a/drivers/gpu/drm/xe/xe_guc_ads.c b/drivers/gpu/drm/xe/xe_guc_ads.c
> > index 4e746ae98888..506b26ea7b74 100644
> > --- a/drivers/gpu/drm/xe/xe_guc_ads.c
> > +++ b/drivers/gpu/drm/xe/xe_guc_ads.c
> > @@ -418,7 +418,8 @@ int xe_guc_ads_init(struct xe_guc_ads *ads)
> > bo = xe_managed_bo_create_pin_map(xe, tile, guc_ads_size(ads) + MAX_GOLDEN_LRC_SIZE,
> > XE_BO_FLAG_SYSTEM |
> > XE_BO_FLAG_GGTT |
> > - XE_BO_FLAG_GGTT_INVALIDATE);
> > + XE_BO_FLAG_GGTT_INVALIDATE |
> > + XE_BO_FLAG_PINNED_WONTNEED);
> > if (IS_ERR(bo))
> > return PTR_ERR(bo);
> >
> > diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c
> > index 1b5d8fb1033a..61641329fa95 100644
> > --- a/drivers/gpu/drm/xe/xe_guc_ct.c
> > +++ b/drivers/gpu/drm/xe/xe_guc_ct.c
> > @@ -237,7 +237,8 @@ int xe_guc_ct_init(struct xe_guc_ct *ct)
> > bo = xe_managed_bo_create_pin_map(xe, tile, guc_ct_size(),
> > XE_BO_FLAG_SYSTEM |
> > XE_BO_FLAG_GGTT |
> > - XE_BO_FLAG_GGTT_INVALIDATE);
> > + XE_BO_FLAG_GGTT_INVALIDATE |
> > + XE_BO_FLAG_PINNED_WONTNEED);
> > if (IS_ERR(bo))
> > return PTR_ERR(bo);
> >
> > diff --git a/drivers/gpu/drm/xe/xe_guc_log.c b/drivers/gpu/drm/xe/xe_guc_log.c
> > index fead96216243..2a4886f25835 100644
> > --- a/drivers/gpu/drm/xe/xe_guc_log.c
> > +++ b/drivers/gpu/drm/xe/xe_guc_log.c
> > @@ -261,7 +261,8 @@ int xe_guc_log_init(struct xe_guc_log *log)
> > bo = xe_managed_bo_create_pin_map(xe, tile, guc_log_size(),
> > XE_BO_FLAG_SYSTEM |
> > XE_BO_FLAG_GGTT |
> > - XE_BO_FLAG_GGTT_INVALIDATE);
> > + XE_BO_FLAG_GGTT_INVALIDATE |
> > + XE_BO_FLAG_PINNED_WONTNEED);
> > if (IS_ERR(bo))
> > return PTR_ERR(bo);
> >
> > diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/xe_guc_pc.c
> > index e8b9faeaef64..751c38c41f26 100644
> > --- a/drivers/gpu/drm/xe/xe_guc_pc.c
> > +++ b/drivers/gpu/drm/xe/xe_guc_pc.c
> > @@ -1086,7 +1086,8 @@ int xe_guc_pc_init(struct xe_guc_pc *pc)
> > bo = xe_managed_bo_create_pin_map(xe, tile, size,
> > XE_BO_FLAG_VRAM_IF_DGFX(tile) |
> > XE_BO_FLAG_GGTT |
> > - XE_BO_FLAG_GGTT_INVALIDATE);
> > + XE_BO_FLAG_GGTT_INVALIDATE |
> > + XE_BO_FLAG_PINNED_WONTNEED);
> > if (IS_ERR(bo))
> > return PTR_ERR(bo);
> >
> > diff --git a/drivers/gpu/drm/xe/xe_sa.c b/drivers/gpu/drm/xe/xe_sa.c
> > index e055bed7ae55..a31b085d2d9b 100644
> > --- a/drivers/gpu/drm/xe/xe_sa.c
> > +++ b/drivers/gpu/drm/xe/xe_sa.c
> > @@ -49,7 +49,8 @@ struct xe_sa_manager *xe_sa_bo_manager_init(struct xe_tile *tile, u32 size, u32
> > bo = xe_managed_bo_create_pin_map(xe, tile, size,
> > XE_BO_FLAG_VRAM_IF_DGFX(tile) |
> > XE_BO_FLAG_GGTT |
> > - XE_BO_FLAG_GGTT_INVALIDATE);
> > + XE_BO_FLAG_GGTT_INVALIDATE |
> > + XE_BO_FLAG_PINNED_WONTNEED);
> > if (IS_ERR(bo)) {
> > drm_err(&xe->drm, "failed to allocate bo for sa manager: %ld\n",
> > PTR_ERR(bo));
> > --
> > 2.34.1
> >
next prev parent reply other threads:[~2024-10-29 14:56 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-29 0:32 [PATCH 0/3] Suspend, resume, and d3cold tweaks Matthew Brost
2024-10-29 0:32 ` [PATCH 1/3] drm/xe: Add XE_BO_FLAG_PINNED_WONTNEED Matthew Brost
2024-10-29 13:30 ` Rodrigo Vivi
2024-10-29 14:55 ` Matthew Brost [this message]
2024-10-31 4:23 ` Lucas De Marchi
2024-10-31 5:10 ` Matthew Brost
2024-10-29 0:32 ` [PATCH 2/3] drm/xe: Restore system memory GGTT mappings Matthew Brost
2024-10-29 9:44 ` Matthew Auld
2024-10-29 14:57 ` Matthew Brost
2024-10-30 11:53 ` Matthew Auld
2024-10-31 0:49 ` Matthew Brost
2024-10-31 8:44 ` Matthew Auld
2024-10-29 0:32 ` [PATCH 3/3] drm/xe: Add XE_BO_FLAG_PINNED_NEED_LOAD Matthew Brost
2024-10-29 1:07 ` Matthew Brost
2024-10-29 0:44 ` ✓ CI.Patch_applied: success for Suspend, resume, and d3cold tweaks Patchwork
2024-10-29 0:45 ` ✗ CI.checkpatch: warning " Patchwork
2024-10-29 0:46 ` ✓ CI.KUnit: success " Patchwork
2024-10-29 0:58 ` ✓ CI.Build: " Patchwork
2024-10-29 1:00 ` ✓ CI.Hooks: " Patchwork
2024-10-29 1:01 ` ✓ CI.checksparse: " Patchwork
2024-10-29 1:29 ` ✗ CI.BAT: failure " Patchwork
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=ZyD3T8pU8Q8H4k8k@DUT025-TGLU.fm.intel.com \
--to=matthew.brost@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=riana.tauro@intel.com \
--cc=rodrigo.vivi@intel.com \
--cc=umesh.nerlige.ramappa@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.