Merge remote branch 'nouveau/for-airlied' of /ssd/git/drm-nouveau-next into drm-fixes
authorDave Airlie <airlied@redhat.com>
Fri, 3 Sep 2010 03:31:33 +0000 (13:31 +1000)
committerDave Airlie <airlied@redhat.com>
Fri, 3 Sep 2010 03:31:33 +0000 (13:31 +1000)
* 'nouveau/for-airlied' of /ssd/git/drm-nouveau-next:
  drm/nv50: initialize ramht_refs list for faked 0 channel
  drm/nouveau: Don't take struct_mutex around the pushbuf IOCTL.
  drm/nouveau: Take fence spinlock before reading the last sequence.

1  2 
drivers/gpu/drm/nouveau/nouveau_gem.c

@@@ -245,7 -245,7 +245,7 @@@ validate_fini_list(struct list_head *li
                list_del(&nvbo->entry);
                nvbo->reserved_by = NULL;
                ttm_bo_unreserve(&nvbo->bo);
-               drm_gem_object_unreference(nvbo->gem);
+               drm_gem_object_unreference_unlocked(nvbo->gem);
        }
  }
  
@@@ -284,7 -284,7 +284,7 @@@ retry
                if (!gem) {
                        NV_ERROR(dev, "Unknown handle 0x%08x\n", b->handle);
                        validate_fini(op, NULL);
 -                      return -EINVAL;
 +                      return -ENOENT;
                }
                nvbo = gem->driver_private;
  
                        validate_fini(op, NULL);
                        if (ret == -EAGAIN)
                                ret = ttm_bo_wait_unreserved(&nvbo->bo, false);
-                       drm_gem_object_unreference(gem);
+                       drm_gem_object_unreference_unlocked(gem);
                        if (ret) {
                                NV_ERROR(dev, "fail reserve\n");
                                return ret;
@@@ -616,8 -616,6 +616,6 @@@ nouveau_gem_ioctl_pushbuf(struct drm_de
                return PTR_ERR(bo);
        }
  
-       mutex_lock(&dev->struct_mutex);
        /* Mark push buffers as being used on PFIFO, the validation code
         * will then make sure that if the pushbuf bo moves, that they
         * happen on the kernel channel, which will in turn cause a sync
  out:
        validate_fini(&op, fence);
        nouveau_fence_unref((void**)&fence);
-       mutex_unlock(&dev->struct_mutex);
        kfree(bo);
        kfree(push);
  
@@@ -777,7 -774,7 +774,7 @@@ nouveau_gem_ioctl_cpu_prep(struct drm_d
  
        gem = drm_gem_object_lookup(dev, file_priv, req->handle);
        if (!gem)
 -              return ret;
 +              return -ENOENT;
        nvbo = nouveau_gem_object(gem);
  
        if (nvbo->cpu_filp) {
@@@ -815,7 -812,7 +812,7 @@@ nouveau_gem_ioctl_cpu_fini(struct drm_d
  
        gem = drm_gem_object_lookup(dev, file_priv, req->handle);
        if (!gem)
 -              return ret;
 +              return -ENOENT;
        nvbo = nouveau_gem_object(gem);
  
        if (nvbo->cpu_filp != file_priv)
@@@ -840,7 -837,7 +837,7 @@@ nouveau_gem_ioctl_info(struct drm_devic
  
        gem = drm_gem_object_lookup(dev, file_priv, req->handle);
        if (!gem)
 -              return -EINVAL;
 +              return -ENOENT;
  
        ret = nouveau_gem_info(gem, req);
        drm_gem_object_unreference_unlocked(gem);