On Thu, 4 Jan 2024 at 00:47, Dan Carpenter <dan.carpenter@xxxxxxxxxx> wrote: > > Hi Dave, > > kernel test robot noticed the following build warnings: > > https://git-scm.com/docs/git-format-patch#_base_tree_information] > > url: https://github.com/intel-lab-lkp/linux/commits/Dave-Airlie/nouveau-gsp-drop-some-acpi-related-debug/20231222-180432 > base: git://anongit.freedesktop.org/drm/drm-misc drm-misc-next > patch link: https://lore.kernel.org/r/20231222043308.3090089-9-airlied%40gmail.com > patch subject: [PATCH 08/11] nouveau/gsp: don't free ctrl messages on errors > config: powerpc-randconfig-r071-20231226 (https://download.01.org/0day-ci/archive/20231227/202312271917.55xuDMdc-lkp@xxxxxxxxx/config) > compiler: clang version 18.0.0git (https://github.com/llvm/llvm-project d3ef86708241a3bee902615c190dead1638c4e09) > > If you fix the issue in a separate patch/commit (i.e. not just a new version of > the same patch/commit), kindly add following tags > | Reported-by: kernel test robot <lkp@xxxxxxxxx> > | Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx> > | Closes: https://lore.kernel.org/r/202312271917.55xuDMdc-lkp@xxxxxxxxx/ This is a false positive, I think the code is operating like I'd expect, we maybe could restructure it to avoid this warning? The idea is you send an rpc msg, if there's a reply you get a reply, if no reply you get NULL and if an error you get an error. So in the case you get an error or NULL you just want to return 0 for the NULL as it's successful, and error otherwise. Would using PTR_ERR_OR_ZERO make smatch happy? (even if it's not really what we want). Dave. > > New smatch warnings: > drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c:659 r535_gsp_rpc_rm_ctrl_push() warn: passing zero to 'PTR_ERR' > drivers/gpu/drm/nouveau/nvkm/engine/disp/r535.c:1063 r535_dp_aux_xfer() warn: passing a valid pointer to 'PTR_ERR' > > Old smatch warnings: > drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c:1887 nvkm_gsp_radix3_sg() error: uninitialized symbol 'addr'. > > vim +/PTR_ERR +659 drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c > > af265ee961627a Dave Airlie 2023-12-22 649 static int > af265ee961627a Dave Airlie 2023-12-22 650 r535_gsp_rpc_rm_ctrl_push(struct nvkm_gsp_object *object, void **argv, u32 repc) > 4cf2c83eb3a4c4 Ben Skeggs 2023-09-19 651 { > af265ee961627a Dave Airlie 2023-12-22 652 rpc_gsp_rm_control_v03_00 *rpc = container_of((*argv), typeof(*rpc), params); > 4cf2c83eb3a4c4 Ben Skeggs 2023-09-19 653 struct nvkm_gsp *gsp = object->client->gsp; > af265ee961627a Dave Airlie 2023-12-22 654 int ret = 0; > 4cf2c83eb3a4c4 Ben Skeggs 2023-09-19 655 > 4cf2c83eb3a4c4 Ben Skeggs 2023-09-19 656 rpc = nvkm_gsp_rpc_push(gsp, rpc, true, repc); > af265ee961627a Dave Airlie 2023-12-22 657 if (IS_ERR_OR_NULL(rpc)) { > af265ee961627a Dave Airlie 2023-12-22 658 *argv = NULL; > af265ee961627a Dave Airlie 2023-12-22 @659 return PTR_ERR(rpc); > > If nvkm_gsp_rpc_push() returns NULL (probably a failure) then this > returns PTR_ERR(NULL) which is zero/success. > > af265ee961627a Dave Airlie 2023-12-22 660 } > 4cf2c83eb3a4c4 Ben Skeggs 2023-09-19 661 > 4cf2c83eb3a4c4 Ben Skeggs 2023-09-19 662 if (rpc->status) { > af265ee961627a Dave Airlie 2023-12-22 663 ret = r535_rpc_status_to_errno(rpc->status); > 555bb9c29a45be Dave Airlie 2023-12-22 664 if (ret != -EAGAIN) > 4cf2c83eb3a4c4 Ben Skeggs 2023-09-19 665 nvkm_error(&gsp->subdev, "cli:0x%08x obj:0x%08x ctrl cmd:0x%08x failed: 0x%08x\n", > 4cf2c83eb3a4c4 Ben Skeggs 2023-09-19 666 object->client->object.handle, object->handle, rpc->cmd, rpc->status); > 4cf2c83eb3a4c4 Ben Skeggs 2023-09-19 667 } > 4cf2c83eb3a4c4 Ben Skeggs 2023-09-19 668 > af265ee961627a Dave Airlie 2023-12-22 669 if (repc) > af265ee961627a Dave Airlie 2023-12-22 670 *argv = rpc->params; > af265ee961627a Dave Airlie 2023-12-22 671 else > 4cf2c83eb3a4c4 Ben Skeggs 2023-09-19 672 nvkm_gsp_rpc_done(gsp, rpc); > 4cf2c83eb3a4c4 Ben Skeggs 2023-09-19 673 > 4cf2c83eb3a4c4 Ben Skeggs 2023-09-19 674 return ret; > 4cf2c83eb3a4c4 Ben Skeggs 2023-09-19 675 } > > -- > 0-DAY CI Kernel Test Service > https://github.com/intel/lkp-tests/wiki >