[PATCH 1/2] try unbreak nouveau #1

From: Gerd Hoffmann
Date: Wed Aug 14 2019 - 01:23:31 EST


---
include/drm/drm_gem.h | 11 +++++++++++
drivers/gpu/drm/drm_gem.c | 6 ++++--
drivers/gpu/drm/ttm/ttm_bo.c | 3 ++-
3 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h
index ae693c0666cd..24e8fc58a3e1 100644
--- a/include/drm/drm_gem.h
+++ b/include/drm/drm_gem.h
@@ -297,6 +297,17 @@ struct drm_gem_object {
*
*/
const struct drm_gem_object_funcs *funcs;
+
+ /**
+ * @ttm_init: indicate ttm has initialized _resv and vma_node fields.
+ *
+ * ttm_bo_uses_embedded_gem_object() assumes gem is
+ * initialized before ttm, nouveau does it the other way
+ * around though.
+ *
+ * This is a temporary stopgap to handle that case.
+ */
+ bool ttm_init;
};

/**
diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
index afc38cece3f5..0a75d8cf7ac7 100644
--- a/drivers/gpu/drm/drm_gem.c
+++ b/drivers/gpu/drm/drm_gem.c
@@ -159,11 +159,13 @@ void drm_gem_private_object_init(struct drm_device *dev,
kref_init(&obj->refcount);
obj->handle_count = 0;
obj->size = size;
- reservation_object_init(&obj->_resv);
if (!obj->resv)
obj->resv = &obj->_resv;

- drm_vma_node_reset(&obj->vma_node);
+ if (!obj->ttm_init) {
+ reservation_object_init(&obj->_resv);
+ drm_vma_node_reset(&obj->vma_node);
+ }
}
EXPORT_SYMBOL(drm_gem_private_object_init);

diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index 10a861a1690c..83b389fc117e 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -160,7 +160,7 @@ static void ttm_bo_release_list(struct kref *list_kref)
ttm_tt_destroy(bo->ttm);
atomic_dec(&bo->bdev->glob->bo_count);
dma_fence_put(bo->moving);
- if (!ttm_bo_uses_embedded_gem_object(bo))
+ if (bo->base.ttm_init)
reservation_object_fini(&bo->base._resv);
mutex_destroy(&bo->wu_mutex);
bo->destroy(bo);
@@ -1344,6 +1344,7 @@ int ttm_bo_init_reserved(struct ttm_bo_device *bdev,
*/
reservation_object_init(&bo->base._resv);
drm_vma_node_reset(&bo->base.vma_node);
+ bo->base.ttm_init = true;
}
atomic_inc(&bo->bdev->glob->bo_count);

--
2.18.1


--2ebq6yfgxr3jfnrh
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="0002-try-unbreak-nouveau-2.patch"