From: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
To: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: <intel-xe@lists.freedesktop.org>,
John Harrison <John.C.Harrison@intel.com>,
Alan Previn <alan.previn.teres.alexis@intel.com>
Subject: Re: [PATCH 2/3] drm/xe/uc: Use managed bo for HuC and GSC objects
Date: Thu, 15 Aug 2024 13:44:22 -0700 [thread overview]
Message-ID: <676abc4b-f557-46da-8dc4-8e71eac57673@intel.com> (raw)
In-Reply-To: <ari3brrrs5gfzoudcp6lsmf5kcl7cnzvrf7tsssqeg3s2e36sb@4bnlvwdkqry4>
On 8/15/2024 1:00 PM, Lucas De Marchi wrote:
> On Fri, Aug 09, 2024 at 04:12:36PM GMT, Daniele Ceraolo Spurio wrote:
>> Drmm actions are not the right ones to clean up BOs and we should use
>> devm instead. However, we can also instead just allocate the objects
>> using the managed_bo function, which will internally register the
>> correct cleanup call and therefore allows us to simplify the code.
>>
>> While at it, switch to drmm_kzalloc for the GSC proxy allocation to
>> further simplify the cleanup.
>>
>> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
>> Cc: John Harrison <John.C.Harrison@Intel.com>
>> Cc: Alan Previn <alan.previn.teres.alexis@intel.com>
>> ---
>> drivers/gpu/drm/xe/xe_gsc.c | 12 +++--------
>> drivers/gpu/drm/xe/xe_gsc_proxy.c | 36 ++++++-------------------------
>> drivers/gpu/drm/xe/xe_huc.c | 19 +++++-----------
>> 3 files changed, 14 insertions(+), 53 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_gsc.c b/drivers/gpu/drm/xe/xe_gsc.c
>> index 66963e26c574..b84f2e020c8c 100644
>> --- a/drivers/gpu/drm/xe/xe_gsc.c
>> +++ b/drivers/gpu/drm/xe/xe_gsc.c
>> @@ -450,11 +450,6 @@ static void free_resources(struct drm_device
>> *drm, void *arg)
>> xe_exec_queue_put(gsc->q);
>> gsc->q = NULL;
>> }
>> -
>> - if (gsc->private) {
>> - xe_bo_unpin_map_no_vm(gsc->private);
>> - gsc->private = NULL;
>> - }
>> }
>>
>> int xe_gsc_init_post_hwconfig(struct xe_gsc *gsc)
>> @@ -474,10 +469,9 @@ int xe_gsc_init_post_hwconfig(struct xe_gsc *gsc)
>> if (!hwe)
>> return -ENODEV;
>>
>> - bo = xe_bo_create_pin_map(xe, tile, NULL, SZ_4M,
>> - ttm_bo_type_kernel,
>> - XE_BO_FLAG_STOLEN |
>> - XE_BO_FLAG_GGTT);
>> + bo = xe_managed_bo_create_pin_map(xe, tile, SZ_4M,
>> + XE_BO_FLAG_STOLEN |
>> + XE_BO_FLAG_GGTT);
>> if (IS_ERR(bo))
>> return PTR_ERR(bo);
>>
>> diff --git a/drivers/gpu/drm/xe/xe_gsc_proxy.c
>> b/drivers/gpu/drm/xe/xe_gsc_proxy.c
>> index aa812a2bc3ed..8f880c44211d 100644
>> --- a/drivers/gpu/drm/xe/xe_gsc_proxy.c
>> +++ b/drivers/gpu/drm/xe/xe_gsc_proxy.c
>> @@ -376,27 +376,6 @@ static const struct component_ops
>> xe_gsc_proxy_component_ops = {
>> .unbind = xe_gsc_proxy_component_unbind,
>> };
>>
>> -static void proxy_channel_free(struct drm_device *drm, void *arg)
>> -{
>> - struct xe_gsc *gsc = arg;
>> -
>> - if (!gsc->proxy.bo)
>> - return;
>> -
>> - if (gsc->proxy.to_csme) {
>> - kfree(gsc->proxy.to_csme);
>> - gsc->proxy.to_csme = NULL;
>> - gsc->proxy.from_csme = NULL;
>> - }
>> -
>> - if (gsc->proxy.bo) {
>> - iosys_map_clear(&gsc->proxy.to_gsc);
>> - iosys_map_clear(&gsc->proxy.from_gsc);
>
> clearing these was not important?
No. At cleanup time the proxy component has already been removed so
we're not going to touch these pointers, so it is safe to not set them
back to NULL. I had it the clears there just to make the _free mirror
the _alloc.
Daniele
>
> Lucas De Marchi
>
>> - xe_bo_unpin_map_no_vm(gsc->proxy.bo);
>> - gsc->proxy.bo = NULL;
>> - }
>> -}
>> -
>> static int proxy_channel_alloc(struct xe_gsc *gsc)
>> {
>> struct xe_gt *gt = gsc_to_gt(gsc);
>> @@ -405,18 +384,15 @@ static int proxy_channel_alloc(struct xe_gsc *gsc)
>> struct xe_bo *bo;
>> void *csme;
>>
>> - csme = kzalloc(GSC_PROXY_CHANNEL_SIZE, GFP_KERNEL);
>> + csme = drmm_kzalloc(&xe->drm, GSC_PROXY_CHANNEL_SIZE, GFP_KERNEL);
>> if (!csme)
>> return -ENOMEM;
>>
>> - bo = xe_bo_create_pin_map(xe, tile, NULL, GSC_PROXY_CHANNEL_SIZE,
>> - ttm_bo_type_kernel,
>> - XE_BO_FLAG_SYSTEM |
>> - XE_BO_FLAG_GGTT);
>> - if (IS_ERR(bo)) {
>> - kfree(csme);
>> + bo = xe_managed_bo_create_pin_map(xe, tile, GSC_PROXY_CHANNEL_SIZE,
>> + XE_BO_FLAG_SYSTEM |
>> + XE_BO_FLAG_GGTT);
>> + if (IS_ERR(bo))
>> return PTR_ERR(bo);
>> - }
>>
>> gsc->proxy.bo = bo;
>> gsc->proxy.to_gsc = IOSYS_MAP_INIT_OFFSET(&bo->vmap, 0);
>> @@ -424,7 +400,7 @@ static int proxy_channel_alloc(struct xe_gsc *gsc)
>> gsc->proxy.to_csme = csme;
>> gsc->proxy.from_csme = csme + GSC_PROXY_BUFFER_SIZE;
>>
>> - return drmm_add_action_or_reset(&xe->drm, proxy_channel_free, gsc);
>> + return 0;
>> }
>>
>> /**
>> diff --git a/drivers/gpu/drm/xe/xe_huc.c b/drivers/gpu/drm/xe/xe_huc.c
>> index bec4366e5513..f5459f97af23 100644
>> --- a/drivers/gpu/drm/xe/xe_huc.c
>> +++ b/drivers/gpu/drm/xe/xe_huc.c
>> @@ -43,14 +43,6 @@ huc_to_guc(struct xe_huc *huc)
>> return &container_of(huc, struct xe_uc, huc)->guc;
>> }
>>
>> -static void free_gsc_pkt(struct drm_device *drm, void *arg)
>> -{
>> - struct xe_huc *huc = arg;
>> -
>> - xe_bo_unpin_map_no_vm(huc->gsc_pkt);
>> - huc->gsc_pkt = NULL;
>> -}
>> -
>> #define PXP43_HUC_AUTH_INOUT_SIZE SZ_4K
>> static int huc_alloc_gsc_pkt(struct xe_huc *huc)
>> {
>> @@ -59,17 +51,16 @@ static int huc_alloc_gsc_pkt(struct xe_huc *huc)
>> struct xe_bo *bo;
>>
>> /* we use a single object for both input and output */
>> - bo = xe_bo_create_pin_map(xe, gt_to_tile(gt), NULL,
>> - PXP43_HUC_AUTH_INOUT_SIZE * 2,
>> - ttm_bo_type_kernel,
>> - XE_BO_FLAG_SYSTEM |
>> - XE_BO_FLAG_GGTT);
>> + bo = xe_managed_bo_create_pin_map(xe, gt_to_tile(gt),
>> + PXP43_HUC_AUTH_INOUT_SIZE * 2,
>> + XE_BO_FLAG_SYSTEM |
>> + XE_BO_FLAG_GGTT);
>> if (IS_ERR(bo))
>> return PTR_ERR(bo);
>>
>> huc->gsc_pkt = bo;
>>
>> - return drmm_add_action_or_reset(&xe->drm, free_gsc_pkt, huc);
>> + return 0;
>> }
>>
>> int xe_huc_init(struct xe_huc *huc)
>> --
>> 2.43.0
>>
next prev parent reply other threads:[~2024-08-15 20:44 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-09 23:12 [PATCH 0/3] uC-related drmm vs devm fixes Daniele Ceraolo Spurio
2024-08-09 23:12 ` [PATCH 1/3] drm/xe: use devm instead of drmm for managed bo Daniele Ceraolo Spurio
2024-08-10 4:39 ` Lucas De Marchi
2024-08-12 10:41 ` Matthew Auld
2024-08-12 16:38 ` Daniele Ceraolo Spurio
2024-08-12 18:17 ` Matthew Auld
2024-08-12 18:43 ` Daniele Ceraolo Spurio
2024-08-09 23:12 ` [PATCH 2/3] drm/xe/uc: Use managed bo for HuC and GSC objects Daniele Ceraolo Spurio
2024-08-15 20:00 ` Lucas De Marchi
2024-08-15 20:44 ` Daniele Ceraolo Spurio [this message]
2024-08-09 23:12 ` [PATCH 3/3] drm/xe/uc: Use devm to register cleanup that includes exec_queues Daniele Ceraolo Spurio
2024-08-09 23:46 ` [PATCH 0/3] uC-related drmm vs devm fixes Matthew Brost
2024-08-10 0:06 ` ✓ CI.Patch_applied: success for " Patchwork
2024-08-10 0:06 ` ✓ CI.checkpatch: " Patchwork
2024-08-10 0:07 ` ✓ CI.KUnit: " Patchwork
2024-08-10 0:24 ` ✓ CI.Build: " Patchwork
2024-08-10 0:29 ` ✓ CI.Hooks: " Patchwork
2024-08-10 0:31 ` ✓ CI.checksparse: " Patchwork
2024-08-10 0:52 ` ✗ CI.BAT: failure " Patchwork
2024-08-10 3:44 ` ✗ CI.FULL: " 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=676abc4b-f557-46da-8dc4-8e71eac57673@intel.com \
--to=daniele.ceraolospurio@intel.com \
--cc=John.C.Harrison@intel.com \
--cc=alan.previn.teres.alexis@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=lucas.demarchi@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