From 8000fb219179e0be23cef03588dcd6c00a2035f3 Mon Sep 17 00:00:00 2001
From: Ben Skeggs <bskeggs@redhat.com>
Date: Fri, 5 Dec 2014 12:21:34 +1000
Subject: [PATCH] drm/nouveau/core: can now assume client/device object tree
 based on object.engine

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
---
 drivers/gpu/drm/nouveau/core/core/printk.c        | 10 ++++++----
 drivers/gpu/drm/nouveau/core/engine/device/base.c |  7 ++++---
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/core/core/printk.c b/drivers/gpu/drm/nouveau/core/core/printk.c
index 1060e3a173fe..81f559692624 100644
--- a/drivers/gpu/drm/nouveau/core/core/printk.c
+++ b/drivers/gpu/drm/nouveau/core/core/printk.c
@@ -64,11 +64,13 @@ nv_printk_(struct nouveau_object *object, int level, const char *fmt, ...)
 		struct nouveau_object *subdev;
 		char obuf[64], *ofmt = "";
 
-		subdev = object;
-		while (subdev && !nv_iclass(subdev, NV_SUBDEV_CLASS))
-			subdev = subdev->parent;
-		if (!subdev)
+		if (object->engine == NULL) {
+			subdev = object;
+			while (subdev && !nv_iclass(subdev, NV_SUBDEV_CLASS))
+				subdev = subdev->parent;
+		} else {
 			subdev = object->engine;
+		}
 
 		device = subdev;
 		if (device->parent)
diff --git a/drivers/gpu/drm/nouveau/core/engine/device/base.c b/drivers/gpu/drm/nouveau/core/engine/device/base.c
index 7c0cbcde7b2f..0a6abc23f85d 100644
--- a/drivers/gpu/drm/nouveau/core/engine/device/base.c
+++ b/drivers/gpu/drm/nouveau/core/engine/device/base.c
@@ -512,9 +512,10 @@ struct nouveau_device *
 nv_device(void *obj)
 {
 	struct nouveau_object *device = nv_object(obj);
-	while (device && device->parent)
-		device = device->parent;
-	if (!nv_iclass(device, NV_ENGINE_CLASS)) {
+	if (device->engine == NULL) {
+		while (device && device->parent)
+			device = device->parent;
+	} else {
 		device = nv_object(obj)->engine;
 		if (device && device->parent)
 			device = device->parent;
-- 
GitLab