[drm-misc:drm-misc-next 2/3] drivers/gpu/drm/loongson/lsdc_plane.c:199 lsdc_cursor_plane_atomic_async_check() warn: variable dereferenced before check 'state' (see line 180)

suijingfeng suijingfeng at loongson.cn
Mon Jul 10 07:36:24 UTC 2023


Hi,

On 2023/7/10 15:19, Thomas Zimmermann wrote:
> Hi
>
> Am 10.07.23 um 09:02 schrieb suijingfeng:
>> Hi,
>>
>>
>> Thanks for testing,
>>
>> What do you means about tell me this?
>>
>> I means that would you like to help fixing this warning?
>
> The code in drm_atomic_get_new_plane_state() dereferences the state 
> parameter.  Later in your function, you test for state to be non-NULL.
> That's what the warning is about.
>
> You should be able to silence this warning by removing the state test 
> from your function (and also delete that else branch). There should 
> always be an atomic state present and the atomic-check callbacks 
> should not be called without a state. If not, the driver most likely 
> failed to initialize correctly.
>

Yes, I will create a patch to fix this warning before tonight.

The driver works very well, it never print with kernel 'cmd drm.debug=0x02'.

I just feel interesting,  thanks.


> Best regards
> Thomas
>
>>
>> Or otherwise, I will fix this someday.
>>
>>
>> On 2023/7/10 14:29, Dan Carpenter wrote:
>>> tree: git://anongit.freedesktop.org/drm/drm-misc drm-misc-next
>>> head:   8d1077cf2e43b15fefd76ebec2b71541eb27ef2c
>>> commit: f39db26c54281da6a785259498ca74b5e470476f [2/3] drm: Add kms 
>>> driver for loongson display controller
>>> config: i386-randconfig-m021-20230710 
>>> (https://download.01.org/0day-ci/archive/20230710/202307100423.rV7D05Uq-lkp@intel.com/config)
>>> compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
>>> reproduce: 
>>> (https://download.01.org/0day-ci/archive/20230710/202307100423.rV7D05Uq-lkp@intel.com/reproduce)
>>>
>>> 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 at intel.com>
>>> | Reported-by: Dan Carpenter <dan.carpenter at linaro.org>
>>> | Closes: 
>>> https://lore.kernel.org/r/202307100423.rV7D05Uq-lkp@intel.com/
>>>
>>> smatch warnings:
>>> drivers/gpu/drm/loongson/lsdc_plane.c:199 
>>> lsdc_cursor_plane_atomic_async_check() warn: variable dereferenced 
>>> before check 'state' (see line 180)
>>>
>>> vim +/state +199 drivers/gpu/drm/loongson/lsdc_plane.c
>>>
>>> f39db26c54281d Sui Jingfeng 2023-06-15  174  static int 
>>> lsdc_cursor_plane_atomic_async_check(struct drm_plane *plane,
>>> f39db26c54281d Sui Jingfeng 2023-06-15 175                          
>>> struct drm_atomic_state *state)
>>> f39db26c54281d Sui Jingfeng 2023-06-15  176  {
>>> f39db26c54281d Sui Jingfeng 2023-06-15  177      struct 
>>> drm_plane_state *new_state;
>>> f39db26c54281d Sui Jingfeng 2023-06-15  178      struct 
>>> drm_crtc_state *crtc_state;
>>> f39db26c54281d Sui Jingfeng 2023-06-15  179
>>> f39db26c54281d Sui Jingfeng 2023-06-15 @180      new_state = 
>>> drm_atomic_get_new_plane_state(state, plane);
>>> ^^^^^
>>> state is dereferenced inside this function
>>>
>>> f39db26c54281d Sui Jingfeng 2023-06-15  181
>>> f39db26c54281d Sui Jingfeng 2023-06-15  182      if (!plane->state 
>>> || !plane->state->fb) {
>>> f39db26c54281d Sui Jingfeng 2023-06-15  183 drm_dbg(plane->dev, "%s: 
>>> state is NULL\n", plane->name);
>>> f39db26c54281d Sui Jingfeng 2023-06-15  184          return -EINVAL;
>>> f39db26c54281d Sui Jingfeng 2023-06-15  185      }
>>> f39db26c54281d Sui Jingfeng 2023-06-15  186
>>> f39db26c54281d Sui Jingfeng 2023-06-15  187      if 
>>> (new_state->crtc_w != new_state->crtc_h) {
>>> f39db26c54281d Sui Jingfeng 2023-06-15  188 drm_dbg(plane->dev, 
>>> "unsupported cursor size: %ux%u\n",
>>> f39db26c54281d Sui Jingfeng 2023-06-15  189 new_state->crtc_w, 
>>> new_state->crtc_h);
>>> f39db26c54281d Sui Jingfeng 2023-06-15  190          return -EINVAL;
>>> f39db26c54281d Sui Jingfeng 2023-06-15  191      }
>>> f39db26c54281d Sui Jingfeng 2023-06-15  192
>>> f39db26c54281d Sui Jingfeng 2023-06-15  193      if 
>>> (new_state->crtc_w != 64 && new_state->crtc_w != 32) {
>>> f39db26c54281d Sui Jingfeng 2023-06-15  194 drm_dbg(plane->dev, 
>>> "unsupported cursor size: %ux%u\n",
>>> f39db26c54281d Sui Jingfeng 2023-06-15  195 new_state->crtc_w, 
>>> new_state->crtc_h);
>>> f39db26c54281d Sui Jingfeng 2023-06-15  196          return -EINVAL;
>>> f39db26c54281d Sui Jingfeng 2023-06-15  197      }
>>> f39db26c54281d Sui Jingfeng 2023-06-15  198
>>> f39db26c54281d Sui Jingfeng 2023-06-15 @199      if (state) {
>>>                                                      ^^^^^
>>> Checked too late
>>>
>>> f39db26c54281d Sui Jingfeng 2023-06-15  200 crtc_state = 
>>> drm_atomic_get_existing_crtc_state(state, new_state->crtc);
>>> f39db26c54281d Sui Jingfeng 2023-06-15  201      } else {
>>> f39db26c54281d Sui Jingfeng 2023-06-15  202 crtc_state = 
>>> plane->crtc->state;
>>> f39db26c54281d Sui Jingfeng 2023-06-15  203 drm_dbg(plane->dev, "%s: 
>>> atomic state is NULL\n", plane->name);
>>> f39db26c54281d Sui Jingfeng 2023-06-15  204      }
>>> f39db26c54281d Sui Jingfeng 2023-06-15  205
>>> f39db26c54281d Sui Jingfeng 2023-06-15  206      if 
>>> (!crtc_state->active)
>>> f39db26c54281d Sui Jingfeng 2023-06-15  207          return -EINVAL;
>>> f39db26c54281d Sui Jingfeng 2023-06-15  208
>>> f39db26c54281d Sui Jingfeng 2023-06-15  209      if 
>>> (plane->state->crtc != new_state->crtc ||
>>> f39db26c54281d Sui Jingfeng 2023-06-15  210 plane->state->src_w != 
>>> new_state->src_w ||
>>> f39db26c54281d Sui Jingfeng 2023-06-15  211 plane->state->src_h != 
>>> new_state->src_h ||
>>> f39db26c54281d Sui Jingfeng 2023-06-15  212 plane->state->crtc_w != 
>>> new_state->crtc_w ||
>>> f39db26c54281d Sui Jingfeng 2023-06-15  213 plane->state->crtc_h != 
>>> new_state->crtc_h)
>>> f39db26c54281d Sui Jingfeng 2023-06-15  214          return -EINVAL;
>>> f39db26c54281d Sui Jingfeng 2023-06-15  215
>>> f39db26c54281d Sui Jingfeng 2023-06-15  216      if 
>>> (new_state->visible != plane->state->visible)
>>> f39db26c54281d Sui Jingfeng 2023-06-15  217          return -EINVAL;
>>> f39db26c54281d Sui Jingfeng 2023-06-15  218
>>> f39db26c54281d Sui Jingfeng 2023-06-15  219      return 
>>> drm_atomic_helper_check_plane_state(plane->state,
>>> f39db26c54281d Sui Jingfeng 2023-06-15 
>>> 220                             crtc_state,
>>> f39db26c54281d Sui Jingfeng 2023-06-15 
>>> 221                             DRM_PLANE_NO_SCALING,
>>> f39db26c54281d Sui Jingfeng 2023-06-15 
>>> 222                             DRM_PLANE_NO_SCALING,
>>> f39db26c54281d Sui Jingfeng 2023-06-15 
>>> 223                             true, true);
>>> f39db26c54281d Sui Jingfeng 2023-06-15  224  }
>>>
>>
>



More information about the dri-devel mailing list