/* need to bring up power immediately if opening device */
        ret = pm_runtime_get_sync(dev->dev);
-       if (ret < 0 && ret != -EACCES)
+       if (ret < 0 && ret != -EACCES) {
+               pm_runtime_put_autosuspend(dev->dev);
                return ret;
+       }
 
        get_task_comm(tmpname, current);
        snprintf(name, sizeof(name), "%s[%d]", tmpname, pid_nr(fpriv->pid));
        long ret;
 
        ret = pm_runtime_get_sync(dev->dev);
-       if (ret < 0 && ret != -EACCES)
+       if (ret < 0 && ret != -EACCES) {
+               pm_runtime_put_autosuspend(dev->dev);
                return ret;
+       }
 
        switch (_IOC_NR(cmd) - DRM_COMMAND_BASE) {
        case DRM_NOUVEAU_NVIF:
 
        int ret;
 
        ret = pm_runtime_get_sync(dev);
-       if (WARN_ON(ret < 0 && ret != -EACCES))
+       if (WARN_ON(ret < 0 && ret != -EACCES)) {
+               pm_runtime_put_autosuspend(dev);
                return;
+       }
 
        if (gem->import_attach)
                drm_prime_gem_destroy(gem, nvbo->bo.sg);