Hi Ryan,

>  int
> @@ -398,33 +397,24 @@ pvr_power_device_resume(struct device *dev)
>         struct platform_device *plat_dev = to_platform_device(dev);
>         struct drm_device *drm_dev = platform_get_drvdata(plat_dev);
>         struct pvr_device *pvr_dev = to_pvr_device(drm_dev);
> -       int idx;
>         int err;
>
> -       if (!drm_dev_enter(drm_dev, &idx))
> -               return -EIO;
> +       if (pvr_dev->lost)
> +               return 0;
>

'lost' looks protected by reset_sem, but it's read here without the
lock. Shouldn't this at least be READ_ONCE()?

>         err = pvr_dev->device_data->pwr_ops->power_on(pvr_dev);
>         if (err)
> -               goto err_drm_dev_exit;
> +               return err;
>
>         if (READ_ONCE(pvr_dev->fw_dev.initialised)) {
>                 err = pvr_power_fw_enable(pvr_dev, true);
> -               if (err)
> -                       goto err_power_off;
> +               if (err) {
> +                       pvr_dev->device_data->pwr_ops->power_off(pvr_dev);
> +                       return err;
> +               }
>         }
>
> -       drm_dev_exit(idx);
> -
>         return 0;
> -
> -err_power_off:
> -       pvr_dev->device_data->pwr_ops->power_off(pvr_dev);
> -
> -err_drm_dev_exit:
> -       drm_dev_exit(idx);
> -
> -       return err;
>  }
>
>  int
>
> --
> 2.55.0
>

-- 
Thanks,
Gyeyoung

Reply via email to