All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zhi Wang <zhiw@nvidia.com>
To: <nouveau@lists.freedesktop.org>
Subject: Re: [bug report] drm/nouveau/gsp: add hal for gsp.get_static_info()
Date: Sun, 25 May 2025 14:01:31 +0300	[thread overview]
Message-ID: <20250525140131.00003c7c@nvidia.com> (raw)
In-Reply-To: <55e0883c9ae9ccb96babe7e9641217e1ddf3d36c.camel@nvidia.com>

On Fri, 23 May 2025 20:53:44 +0000
Timur Tabi <ttabi@nvidia.com> wrote:

> On Fri, 2025-05-23 at 19:03 +0300, Dan Carpenter wrote:
> > [ Did these files get renamed or something?  No idea why the warnings
> >   are showing up as new now. ]  
> 
> Ben posted a large refactor of the code last week.
> 
> > Hello Ben Skeggs,
> > 
> > Commit 7bb77eacdb85 ("drm/nouveau/gsp: add hal for
> > gsp.get_static_info()") from Nov 14, 2024 (linux-next), leads to the
> > following Smatch static checker warning:
> > 
> > drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/ctrl.c:47 r535_gsp_rpc_rm_ctrl_push() warn:
> > passing zero to 'PTR_ERR'
> > drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c:223 r535_gsp_get_static_info() warn: 'rpc'
> > can also be NULL
> > drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c:90 r570_gsp_get_static_info() warn: 'rpc'
> > can also be NULL
> > 
> > drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c
> >     212 static int
> >     213 r535_gsp_get_static_info(struct nvkm_gsp *gsp)
> >     214 {
> >     215         GspStaticConfigInfo *rpc;
> >     216 
> >     217         rpc = nvkm_gsp_rpc_rd(gsp, NV_VGPU_MSG_FUNCTION_GET_GSP_STATIC_INFO,
> > sizeof(*rpc));
> >     218         if (IS_ERR(rpc))
> >     219                 return PTR_ERR(rpc);
> >     220 
> >     221         gsp->internal.client.object.client = &gsp->internal.client;
> >     222         gsp->internal.client.object.parent = NULL;  
> > --> 223         gsp->internal.client.object.handle = rpc->hInternalClient;  
> >                                                      ^^^^^
> > 
> > The nvkm_gsp_rpc_rd() function returns a mix of error pointers and NULL but
> > if it returns NULL then obviously this dereference will crash.
> > 
> > https://staticthinking.wordpress.com/2022/08/01/mixing-error-pointers-and-null/  
> 
> Well, there's definitely something weird going on with this code.  It appears that nvkm_gsp_rpc_rd()
> actually returns NULL on success.  
> 
> 	nvkm_gsp_rpc_rd -> r535_gsp_rpc_push -> r535_gsp_rpc_handle_reply()
> 
> So either I'm confused, or this will need further debugging.

It won't return a NULL with a policy NVKM_GSP_RPC_REPLY_RECV.

nvkm_gsp_rpc_rd -> r535_gsp_rpc_push -> r535_gsp_rpc_send->
r535_gsp_rpc_handle_reply

It will be either a error pointer or the reply pointer.

And I agree mixing NULL and error pointers seems confusing. It needs a
clean up.

Z.

      reply	other threads:[~2025-05-25 11:02 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-23 16:03 [bug report] drm/nouveau/gsp: add hal for gsp.get_static_info() Dan Carpenter
2025-05-23 20:53 ` Timur Tabi
2025-05-25 11:01   ` Zhi Wang [this message]

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=20250525140131.00003c7c@nvidia.com \
    --to=zhiw@nvidia.com \
    --cc=nouveau@lists.freedesktop.org \
    /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.