Commit bb6178b0 authored by Maarten Lankhorst's avatar Maarten Lankhorst

drm/nouveau: export reservation_object from dmabuf to ttm

Adds an extra argument to nouveau_bo_new, which is only used in nouveau_prime.c.
Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@canonical.com>
parent f4f4e3e3
...@@ -1127,7 +1127,7 @@ nv04_crtc_create(struct drm_device *dev, int crtc_num) ...@@ -1127,7 +1127,7 @@ nv04_crtc_create(struct drm_device *dev, int crtc_num)
drm_mode_crtc_set_gamma_size(&nv_crtc->base, 256); drm_mode_crtc_set_gamma_size(&nv_crtc->base, 256);
ret = nouveau_bo_new(dev, 64*64*4, 0x100, TTM_PL_FLAG_VRAM, ret = nouveau_bo_new(dev, 64*64*4, 0x100, TTM_PL_FLAG_VRAM,
0, 0x0000, NULL, &nv_crtc->cursor.nvbo); 0, 0x0000, NULL, NULL, &nv_crtc->cursor.nvbo);
if (!ret) { if (!ret) {
ret = nouveau_bo_pin(nv_crtc->cursor.nvbo, TTM_PL_FLAG_VRAM); ret = nouveau_bo_pin(nv_crtc->cursor.nvbo, TTM_PL_FLAG_VRAM);
if (!ret) { if (!ret) {
......
...@@ -181,7 +181,7 @@ nouveau_bo_fixup_align(struct nouveau_bo *nvbo, u32 flags, ...@@ -181,7 +181,7 @@ nouveau_bo_fixup_align(struct nouveau_bo *nvbo, u32 flags,
int int
nouveau_bo_new(struct drm_device *dev, int size, int align, nouveau_bo_new(struct drm_device *dev, int size, int align,
uint32_t flags, uint32_t tile_mode, uint32_t tile_flags, uint32_t flags, uint32_t tile_mode, uint32_t tile_flags,
struct sg_table *sg, struct sg_table *sg, struct reservation_object *robj,
struct nouveau_bo **pnvbo) struct nouveau_bo **pnvbo)
{ {
struct nouveau_drm *drm = nouveau_drm(dev); struct nouveau_drm *drm = nouveau_drm(dev);
...@@ -230,7 +230,7 @@ nouveau_bo_new(struct drm_device *dev, int size, int align, ...@@ -230,7 +230,7 @@ nouveau_bo_new(struct drm_device *dev, int size, int align,
ret = ttm_bo_init(&drm->ttm.bdev, &nvbo->bo, size, ret = ttm_bo_init(&drm->ttm.bdev, &nvbo->bo, size,
type, &nvbo->placement, type, &nvbo->placement,
align >> PAGE_SHIFT, false, NULL, acc_size, sg, align >> PAGE_SHIFT, false, NULL, acc_size, sg,
NULL, nouveau_bo_del_ttm); robj, nouveau_bo_del_ttm);
if (ret) { if (ret) {
/* ttm will call nouveau_bo_del_ttm if it fails.. */ /* ttm will call nouveau_bo_del_ttm if it fails.. */
return ret; return ret;
......
...@@ -70,6 +70,7 @@ extern struct ttm_bo_driver nouveau_bo_driver; ...@@ -70,6 +70,7 @@ extern struct ttm_bo_driver nouveau_bo_driver;
void nouveau_bo_move_init(struct nouveau_drm *); void nouveau_bo_move_init(struct nouveau_drm *);
int nouveau_bo_new(struct drm_device *, int size, int align, u32 flags, int nouveau_bo_new(struct drm_device *, int size, int align, u32 flags,
u32 tile_mode, u32 tile_flags, struct sg_table *sg, u32 tile_mode, u32 tile_flags, struct sg_table *sg,
struct reservation_object *robj,
struct nouveau_bo **); struct nouveau_bo **);
int nouveau_bo_pin(struct nouveau_bo *, u32 flags); int nouveau_bo_pin(struct nouveau_bo *, u32 flags);
int nouveau_bo_unpin(struct nouveau_bo *); int nouveau_bo_unpin(struct nouveau_bo *);
......
...@@ -106,7 +106,7 @@ nouveau_channel_prep(struct nouveau_drm *drm, struct nvif_device *device, ...@@ -106,7 +106,7 @@ nouveau_channel_prep(struct nouveau_drm *drm, struct nvif_device *device,
if (nouveau_vram_pushbuf) if (nouveau_vram_pushbuf)
target = TTM_PL_FLAG_VRAM; target = TTM_PL_FLAG_VRAM;
ret = nouveau_bo_new(drm->dev, size, 0, target, 0, 0, NULL, ret = nouveau_bo_new(drm->dev, size, 0, target, 0, 0, NULL, NULL,
&chan->push.buffer); &chan->push.buffer);
if (ret == 0) { if (ret == 0) {
ret = nouveau_bo_pin(chan->push.buffer, target); ret = nouveau_bo_pin(chan->push.buffer, target);
......
...@@ -216,8 +216,12 @@ nouveau_fence_work(struct fence *fence, ...@@ -216,8 +216,12 @@ nouveau_fence_work(struct fence *fence,
work = kmalloc(sizeof(*work), GFP_KERNEL); work = kmalloc(sizeof(*work), GFP_KERNEL);
if (!work) { if (!work) {
/*
* this might not be a nouveau fence any more,
* so force a lazy wait here
*/
WARN_ON(nouveau_fence_wait((struct nouveau_fence *)fence, WARN_ON(nouveau_fence_wait((struct nouveau_fence *)fence,
false, false)); true, false));
goto err; goto err;
} }
......
...@@ -165,7 +165,7 @@ nouveau_gem_new(struct drm_device *dev, int size, int align, uint32_t domain, ...@@ -165,7 +165,7 @@ nouveau_gem_new(struct drm_device *dev, int size, int align, uint32_t domain,
flags |= TTM_PL_FLAG_SYSTEM; flags |= TTM_PL_FLAG_SYSTEM;
ret = nouveau_bo_new(dev, size, align, flags, tile_mode, ret = nouveau_bo_new(dev, size, align, flags, tile_mode,
tile_flags, NULL, pnvbo); tile_flags, NULL, NULL, pnvbo);
if (ret) if (ret)
return ret; return ret;
nvbo = *pnvbo; nvbo = *pnvbo;
......
...@@ -61,13 +61,16 @@ struct drm_gem_object *nouveau_gem_prime_import_sg_table(struct drm_device *dev, ...@@ -61,13 +61,16 @@ struct drm_gem_object *nouveau_gem_prime_import_sg_table(struct drm_device *dev,
struct sg_table *sg) struct sg_table *sg)
{ {
struct nouveau_bo *nvbo; struct nouveau_bo *nvbo;
struct reservation_object *robj = attach->dmabuf->resv;
u32 flags = 0; u32 flags = 0;
int ret; int ret;
flags = TTM_PL_FLAG_TT; flags = TTM_PL_FLAG_TT;
ww_mutex_lock(&robj->lock, NULL);
ret = nouveau_bo_new(dev, attach->dmabuf->size, 0, flags, 0, 0, ret = nouveau_bo_new(dev, attach->dmabuf->size, 0, flags, 0, 0,
sg, &nvbo); sg, robj, &nvbo);
ww_mutex_unlock(&robj->lock);
if (ret) if (ret)
return ERR_PTR(ret); return ERR_PTR(ret);
......
...@@ -129,7 +129,7 @@ nv17_fence_create(struct nouveau_drm *drm) ...@@ -129,7 +129,7 @@ nv17_fence_create(struct nouveau_drm *drm)
spin_lock_init(&priv->lock); spin_lock_init(&priv->lock);
ret = nouveau_bo_new(drm->dev, 4096, 0x1000, TTM_PL_FLAG_VRAM, ret = nouveau_bo_new(drm->dev, 4096, 0x1000, TTM_PL_FLAG_VRAM,
0, 0x0000, NULL, &priv->bo); 0, 0x0000, NULL, NULL, &priv->bo);
if (!ret) { if (!ret) {
ret = nouveau_bo_pin(priv->bo, TTM_PL_FLAG_VRAM); ret = nouveau_bo_pin(priv->bo, TTM_PL_FLAG_VRAM);
if (!ret) { if (!ret) {
......
...@@ -1383,7 +1383,7 @@ nv50_crtc_create(struct drm_device *dev, int index) ...@@ -1383,7 +1383,7 @@ nv50_crtc_create(struct drm_device *dev, int index)
drm_mode_crtc_set_gamma_size(crtc, 256); drm_mode_crtc_set_gamma_size(crtc, 256);
ret = nouveau_bo_new(dev, 8192, 0x100, TTM_PL_FLAG_VRAM, ret = nouveau_bo_new(dev, 8192, 0x100, TTM_PL_FLAG_VRAM,
0, 0x0000, NULL, &head->base.lut.nvbo); 0, 0x0000, NULL, NULL, &head->base.lut.nvbo);
if (!ret) { if (!ret) {
ret = nouveau_bo_pin(head->base.lut.nvbo, TTM_PL_FLAG_VRAM); ret = nouveau_bo_pin(head->base.lut.nvbo, TTM_PL_FLAG_VRAM);
if (!ret) { if (!ret) {
...@@ -1406,7 +1406,7 @@ nv50_crtc_create(struct drm_device *dev, int index) ...@@ -1406,7 +1406,7 @@ nv50_crtc_create(struct drm_device *dev, int index)
goto out; goto out;
ret = nouveau_bo_new(dev, 64 * 64 * 4, 0x100, TTM_PL_FLAG_VRAM, ret = nouveau_bo_new(dev, 64 * 64 * 4, 0x100, TTM_PL_FLAG_VRAM,
0, 0x0000, NULL, &head->base.cursor.nvbo); 0, 0x0000, NULL, NULL, &head->base.cursor.nvbo);
if (!ret) { if (!ret) {
ret = nouveau_bo_pin(head->base.cursor.nvbo, TTM_PL_FLAG_VRAM); ret = nouveau_bo_pin(head->base.cursor.nvbo, TTM_PL_FLAG_VRAM);
if (!ret) { if (!ret) {
...@@ -2468,7 +2468,7 @@ nv50_display_create(struct drm_device *dev) ...@@ -2468,7 +2468,7 @@ nv50_display_create(struct drm_device *dev)
/* small shared memory area we use for notifiers and semaphores */ /* small shared memory area we use for notifiers and semaphores */
ret = nouveau_bo_new(dev, 4096, 0x1000, TTM_PL_FLAG_VRAM, ret = nouveau_bo_new(dev, 4096, 0x1000, TTM_PL_FLAG_VRAM,
0, 0x0000, NULL, &disp->sync); 0, 0x0000, NULL, NULL, &disp->sync);
if (!ret) { if (!ret) {
ret = nouveau_bo_pin(disp->sync, TTM_PL_FLAG_VRAM); ret = nouveau_bo_pin(disp->sync, TTM_PL_FLAG_VRAM);
if (!ret) { if (!ret) {
......
...@@ -100,7 +100,7 @@ nv50_fence_create(struct nouveau_drm *drm) ...@@ -100,7 +100,7 @@ nv50_fence_create(struct nouveau_drm *drm)
spin_lock_init(&priv->lock); spin_lock_init(&priv->lock);
ret = nouveau_bo_new(drm->dev, 4096, 0x1000, TTM_PL_FLAG_VRAM, ret = nouveau_bo_new(drm->dev, 4096, 0x1000, TTM_PL_FLAG_VRAM,
0, 0x0000, NULL, &priv->bo); 0, 0x0000, NULL, NULL, &priv->bo);
if (!ret) { if (!ret) {
ret = nouveau_bo_pin(priv->bo, TTM_PL_FLAG_VRAM); ret = nouveau_bo_pin(priv->bo, TTM_PL_FLAG_VRAM);
if (!ret) { if (!ret) {
......
...@@ -232,7 +232,7 @@ nv84_fence_create(struct nouveau_drm *drm) ...@@ -232,7 +232,7 @@ nv84_fence_create(struct nouveau_drm *drm)
priv->base.uevent = true; priv->base.uevent = true;
ret = nouveau_bo_new(drm->dev, 16 * priv->base.contexts, 0, ret = nouveau_bo_new(drm->dev, 16 * priv->base.contexts, 0,
TTM_PL_FLAG_VRAM, 0, 0, NULL, &priv->bo); TTM_PL_FLAG_VRAM, 0, 0, NULL, NULL, &priv->bo);
if (ret == 0) { if (ret == 0) {
ret = nouveau_bo_pin(priv->bo, TTM_PL_FLAG_VRAM); ret = nouveau_bo_pin(priv->bo, TTM_PL_FLAG_VRAM);
if (ret == 0) { if (ret == 0) {
...@@ -246,7 +246,7 @@ nv84_fence_create(struct nouveau_drm *drm) ...@@ -246,7 +246,7 @@ nv84_fence_create(struct nouveau_drm *drm)
if (ret == 0) if (ret == 0)
ret = nouveau_bo_new(drm->dev, 16 * priv->base.contexts, 0, ret = nouveau_bo_new(drm->dev, 16 * priv->base.contexts, 0,
TTM_PL_FLAG_TT, 0, 0, NULL, TTM_PL_FLAG_TT, 0, 0, NULL, NULL,
&priv->bo_gart); &priv->bo_gart);
if (ret == 0) { if (ret == 0) {
ret = nouveau_bo_pin(priv->bo_gart, TTM_PL_FLAG_TT); ret = nouveau_bo_pin(priv->bo_gart, TTM_PL_FLAG_TT);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment