forked from Minki/linux
drm/nouveau: remove cpu_writers lock
No other driver uses this, and userspace should be responsible for handling locking between them if they share BOs. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
b12120a58e
commit
21e86c1c8a
@ -96,7 +96,6 @@ struct nouveau_bo {
|
|||||||
struct nouveau_tile_reg *tile;
|
struct nouveau_tile_reg *tile;
|
||||||
|
|
||||||
struct drm_gem_object *gem;
|
struct drm_gem_object *gem;
|
||||||
struct drm_file *cpu_filp;
|
|
||||||
int pin_refcnt;
|
int pin_refcnt;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -48,9 +48,6 @@ nouveau_gem_object_del(struct drm_gem_object *gem)
|
|||||||
return;
|
return;
|
||||||
nvbo->gem = NULL;
|
nvbo->gem = NULL;
|
||||||
|
|
||||||
if (unlikely(nvbo->cpu_filp))
|
|
||||||
ttm_bo_synccpu_write_release(bo);
|
|
||||||
|
|
||||||
if (unlikely(nvbo->pin_refcnt)) {
|
if (unlikely(nvbo->pin_refcnt)) {
|
||||||
nvbo->pin_refcnt = 1;
|
nvbo->pin_refcnt = 1;
|
||||||
nouveau_bo_unpin(nvbo);
|
nouveau_bo_unpin(nvbo);
|
||||||
@ -334,23 +331,6 @@ retry:
|
|||||||
validate_fini(op, NULL);
|
validate_fini(op, NULL);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unlikely(atomic_read(&nvbo->bo.cpu_writers) > 0)) {
|
|
||||||
validate_fini(op, NULL);
|
|
||||||
|
|
||||||
if (nvbo->cpu_filp == file_priv) {
|
|
||||||
NV_ERROR(dev, "bo %p mapped by process trying "
|
|
||||||
"to validate it!\n", nvbo);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = ttm_bo_wait_cpu(&nvbo->bo, false);
|
|
||||||
if (ret) {
|
|
||||||
NV_ERROR(dev, "fail wait_cpu\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
goto retry;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -791,26 +771,9 @@ nouveau_gem_ioctl_cpu_prep(struct drm_device *dev, void *data,
|
|||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
nvbo = nouveau_gem_object(gem);
|
nvbo = nouveau_gem_object(gem);
|
||||||
|
|
||||||
if (nvbo->cpu_filp) {
|
spin_lock(&nvbo->bo.bdev->fence_lock);
|
||||||
if (nvbo->cpu_filp == file_priv)
|
ret = ttm_bo_wait(&nvbo->bo, true, true, no_wait);
|
||||||
goto out;
|
spin_unlock(&nvbo->bo.bdev->fence_lock);
|
||||||
|
|
||||||
ret = ttm_bo_wait_cpu(&nvbo->bo, no_wait);
|
|
||||||
if (ret)
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (req->flags & NOUVEAU_GEM_CPU_PREP_NOBLOCK) {
|
|
||||||
spin_lock(&nvbo->bo.bdev->fence_lock);
|
|
||||||
ret = ttm_bo_wait(&nvbo->bo, false, false, no_wait);
|
|
||||||
spin_unlock(&nvbo->bo.bdev->fence_lock);
|
|
||||||
} else {
|
|
||||||
ret = ttm_bo_synccpu_write_grab(&nvbo->bo, no_wait);
|
|
||||||
if (ret == 0)
|
|
||||||
nvbo->cpu_filp = file_priv;
|
|
||||||
}
|
|
||||||
|
|
||||||
out:
|
|
||||||
drm_gem_object_unreference_unlocked(gem);
|
drm_gem_object_unreference_unlocked(gem);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -819,26 +782,7 @@ int
|
|||||||
nouveau_gem_ioctl_cpu_fini(struct drm_device *dev, void *data,
|
nouveau_gem_ioctl_cpu_fini(struct drm_device *dev, void *data,
|
||||||
struct drm_file *file_priv)
|
struct drm_file *file_priv)
|
||||||
{
|
{
|
||||||
struct drm_nouveau_gem_cpu_prep *req = data;
|
return 0;
|
||||||
struct drm_gem_object *gem;
|
|
||||||
struct nouveau_bo *nvbo;
|
|
||||||
int ret = -EINVAL;
|
|
||||||
|
|
||||||
gem = drm_gem_object_lookup(dev, file_priv, req->handle);
|
|
||||||
if (!gem)
|
|
||||||
return -ENOENT;
|
|
||||||
nvbo = nouveau_gem_object(gem);
|
|
||||||
|
|
||||||
if (nvbo->cpu_filp != file_priv)
|
|
||||||
goto out;
|
|
||||||
nvbo->cpu_filp = NULL;
|
|
||||||
|
|
||||||
ttm_bo_synccpu_write_release(&nvbo->bo);
|
|
||||||
ret = 0;
|
|
||||||
|
|
||||||
out:
|
|
||||||
drm_gem_object_unreference_unlocked(gem);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -171,7 +171,6 @@ struct drm_nouveau_gem_pushbuf {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define NOUVEAU_GEM_CPU_PREP_NOWAIT 0x00000001
|
#define NOUVEAU_GEM_CPU_PREP_NOWAIT 0x00000001
|
||||||
#define NOUVEAU_GEM_CPU_PREP_NOBLOCK 0x00000002
|
|
||||||
#define NOUVEAU_GEM_CPU_PREP_WRITE 0x00000004
|
#define NOUVEAU_GEM_CPU_PREP_WRITE 0x00000004
|
||||||
struct drm_nouveau_gem_cpu_prep {
|
struct drm_nouveau_gem_cpu_prep {
|
||||||
uint32_t handle;
|
uint32_t handle;
|
||||||
|
Loading…
Reference in New Issue
Block a user