[PATCH] drm, ttm Fix uninitialized warning

David Herrmann dh.herrmann at gmail.com
Fri Sep 13 09:04:28 PDT 2013


Hi

On Fri, Sep 13, 2013 at 2:33 PM, Prarit Bhargava <prarit at redhat.com> wrote:
> Fix uninitialized warning.
>
> drivers/gpu/drm/ttm/ttm_object.c: In function ‘ttm_base_object_lookup’:
> drivers/gpu/drm/ttm/ttm_object.c:213:10: error: ‘base’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
>   kref_put(&base->refcount, ttm_release_base);
>           ^
> drivers/gpu/drm/ttm/ttm_object.c:221:26: note: ‘base’ was declared here
>   struct ttm_base_object *base;
>
> Signed-off-by: Prarit Bhargava <prarit at redhat.com>
> Cc: David Airlie <airlied at linux.ie>
> Cc: rclark at redhat.com

Did some research on that, another fix is:

diff --git a/drivers/gpu/drm/ttm/ttm_object.c b/drivers/gpu/drm/ttm/ttm_object.c
index 58a5f32..6b7f7b7 100644
--- a/drivers/gpu/drm/ttm/ttm_object.c
+++ b/drivers/gpu/drm/ttm/ttm_object.c
@@ -228,7 +228,10 @@ struct ttm_base_object
*ttm_base_object_lookup(struct ttm_object_file *tfile,
        if (likely(ret == 0)) {
                base = drm_hash_entry(hash, struct ttm_base_object, hash);
                ret = kref_get_unless_zero(&base->refcount) ? 0 : -EINVAL;
+       } else {
+               ret = -EINVAL;
        }
+
        rcu_read_unlock();

        if (unlikely(ret != 0))

Looks totally stupid but also silences the warning. In fact, the
warning is triggered by rcu_read_unlock(); and only if PROVE_LOCKING
and DEBUG_LOCK_ALLOC are enabled. And it's related to the IP-size of
the rcu_read_unlock() path.

I'd actually prefer "buf = NULL;" and an extended bail-out condition:
  if (unlikely(ret != 0 || !buf))
but it's not my decision, so:
Reviewed-by: David Herrmann <dh.herrmann at gmail.com>

Cheers
David

> ---
>  drivers/gpu/drm/ttm/ttm_object.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_object.c b/drivers/gpu/drm/ttm/ttm_object.c
> index 58a5f32..a868176 100644
> --- a/drivers/gpu/drm/ttm/ttm_object.c
> +++ b/drivers/gpu/drm/ttm/ttm_object.c
> @@ -218,7 +218,7 @@ struct ttm_base_object *ttm_base_object_lookup(struct ttm_object_file *tfile,
>                                                uint32_t key)
>  {
>         struct ttm_object_device *tdev = tfile->tdev;
> -       struct ttm_base_object *base;
> +       struct ttm_base_object *uninitialized_var(base);
>         struct drm_hash_item *hash;
>         int ret;
>
> --
> 1.7.9.3
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel


More information about the dri-devel mailing list