[PATCH] drm/xe/guc: Check response data of CLIENT_SOFT_RESET action
Cavitt, Jonathan
jonathan.cavitt at intel.com
Wed Feb 19 22:10:26 UTC 2025
-----Original Message-----
From: Intel-xe <intel-xe-bounces at lists.freedesktop.org> On Behalf Of Michal Wajdeczko
Sent: Wednesday, February 19, 2025 11:27 AM
To: intel-xe at lists.freedesktop.org
Cc: Wajdeczko, Michal <Michal.Wajdeczko at intel.com>; Dan Carpenter <dan.carpenter at linaro.org>; Brost, Matthew <matthew.brost at intel.com>
Subject: [PATCH] drm/xe/guc: Check response data of CLIENT_SOFT_RESET action
>
> Treat unexpected non-zero response data from GuC as -EPROTO error.
> This will also prevent passing positive value to ERR_PTR().
>
> Reported-by: Dan Carpenter <dan.carpenter at linaro.org>
> Closes: https://lore.kernel.org/intel-xe/5fd5a4b9-88ee-47f1-ac3e-32a20960c5b0@stanley.mountain/
> Fixes: 12f95f9900c0 ("drm/xe/guc: Prefer GT oriented logs for GuC messages")
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko at intel.com>
> Cc: Dan Carpenter <dan.carpenter at linaro.org>
> Cc: Matthew Brost <matthew.brost at intel.com>
> ---
> drivers/gpu/drm/xe/xe_guc.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/xe_guc.c b/drivers/gpu/drm/xe/xe_guc.c
> index 1619c0a52db9..bb03db361512 100644
> --- a/drivers/gpu/drm/xe/xe_guc.c
> +++ b/drivers/gpu/drm/xe/xe_guc.c
> @@ -1238,6 +1238,8 @@ int xe_guc_suspend(struct xe_guc *guc)
>
> ret = xe_guc_mmio_send(guc, action, ARRAY_SIZE(action));
> if (ret) {
> + if (ret > 0)
> + ret = -EPROTO;
I don't see anything wrong with this current implementation, though it's perhaps
a bit unnecessary to nest this if statement in the "if (ret)" check.
Maybe:
"""
ret = xe_guc_mmio_send(guc, action, ARRAY_SIZE(action));
if (ret > 0)
ret = -EPROTO;
if (ret) {
...
"""
Or, if you don't mind ternary operations:
"""
ret = xe_guc_mmio_send(guc, action, ARRAY_SIZE(action));
ret = ret > 0 ? -EPROTO : ret;
if (ret) {
...
"""
Alternatively, given we do something similar everywhere we call
xe_guc_mmio_send (except for in xe_guc_hwconfig.c), we might
want to consider modifying the function to perform this -EPROTO
step automatically:
"""
int xe_guc_mmio_send(struct xe_guc *guc, const u32 *request, u32 len)
{
int ret = xe_guc_mmio_send_recv(guc, request, len, NULL);
return ret > 0 ? -EPROTO : ret;
}
...
+++ b/drivers/gpu/drm/xe/xe_guc_hwconfig.c
static int send_get_hwconfig(struct xe_guc *guc, u64 ggtt_addr, u32 size)
{
u32 action[] = {
XE_GUC_ACTION_GET_HWCONFIG,
lower_32_bits(ggtt_addr),
upper_32_bits(ggtt_addr),
size,
};
return xe_guc_mmio_send_recv(guc, action, ARRAY_SIZE(action), NULL);
}
"""
These aren't necessary changes, by the way. They're perhaps nice-to-haves,
but I won't block on it:
Reviewed-by: Jonathan Cavitt <jonathan.cavitt at intel.com>
-Jonathan Cavitt
> xe_gt_err(gt, "GuC suspend failed: %pe\n", ERR_PTR(ret));
> return ret;
> }
> --
> 2.47.1
>
>
More information about the Intel-xe
mailing list