From a38f37a7e06b7ea1bca966805e7a0d03191731f4 Mon Sep 17 00:00:00 2001
From: Ben Skeggs <bskeggs@redhat.com>
Date: Fri, 5 Dec 2014 11:20:19 +1000
Subject: [PATCH] drm/nouveau/core: uninline subdev/engine/device lookup
 functions

These are a tad more complex than a direct cast with paranoia safeties.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
---
 drivers/gpu/drm/nouveau/core/core/engine.c    |  9 +++++
 drivers/gpu/drm/nouveau/core/core/subdev.c    |  8 ++++
 .../gpu/drm/nouveau/core/engine/device/base.c | 22 +++++++++++
 .../drm/nouveau/core/include/core/device.h    | 39 +------------------
 .../drm/nouveau/core/include/core/engine.h    |  2 +
 .../drm/nouveau/core/include/core/subdev.h    |  2 +
 6 files changed, 44 insertions(+), 38 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/core/core/engine.c b/drivers/gpu/drm/nouveau/core/core/engine.c
index 1f6954ae9dd36..4835056b06896 100644
--- a/drivers/gpu/drm/nouveau/core/core/engine.c
+++ b/drivers/gpu/drm/nouveau/core/core/engine.c
@@ -26,6 +26,15 @@
 #include <core/engine.h>
 #include <core/option.h>
 
+struct nouveau_engine *
+nouveau_engine(void *obj, int sub)
+{
+	struct nouveau_subdev *subdev = nouveau_subdev(obj, sub);
+	if (subdev && nv_iclass(subdev, NV_ENGINE_CLASS))
+		return nv_engine(subdev);
+	return NULL;
+}
+
 int
 nouveau_engine_create_(struct nouveau_object *parent,
 		       struct nouveau_object *engobj,
diff --git a/drivers/gpu/drm/nouveau/core/core/subdev.c b/drivers/gpu/drm/nouveau/core/core/subdev.c
index 28157bf57da15..edae535406e57 100644
--- a/drivers/gpu/drm/nouveau/core/core/subdev.c
+++ b/drivers/gpu/drm/nouveau/core/core/subdev.c
@@ -27,6 +27,14 @@
 #include <core/device.h>
 #include <core/option.h>
 
+struct nouveau_subdev *
+nouveau_subdev(void *obj, int sub)
+{
+	if (nv_device(obj)->subdev[sub])
+		return nv_subdev(nv_device(obj)->subdev[sub]);
+	return NULL;
+}
+
 void
 nouveau_subdev_reset(struct nouveau_object *subdev)
 {
diff --git a/drivers/gpu/drm/nouveau/core/engine/device/base.c b/drivers/gpu/drm/nouveau/core/engine/device/base.c
index 714a93eb1fd3d..e2da1d4029cd6 100644
--- a/drivers/gpu/drm/nouveau/core/engine/device/base.c
+++ b/drivers/gpu/drm/nouveau/core/engine/device/base.c
@@ -508,6 +508,28 @@ nouveau_devobj_ofuncs = {
  * nouveau_device: engine functions
  *****************************************************************************/
 
+struct nouveau_device *
+nv_device(void *obj)
+{
+	struct nouveau_object *object = nv_object(obj);
+	struct nouveau_object *device = object;
+
+	if (device->engine)
+		device = device->engine;
+	if (device->parent)
+		device = device->parent;
+
+#if CONFIG_NOUVEAU_DEBUG >= NV_DBG_PARANOIA
+	if (unlikely(!nv_iclass(device, NV_SUBDEV_CLASS) ||
+		     (nv_hclass(device) & 0xff) != NVDEV_ENGINE_DEVICE)) {
+		nv_assert("BAD CAST -> NvDevice, 0x%08x 0x%08x",
+			  nv_hclass(object), nv_hclass(device));
+	}
+#endif
+
+	return (void *)device;
+}
+
 static struct nouveau_oclass
 nouveau_device_sclass[] = {
 	{ 0x0080, &nouveau_devobj_ofuncs },
diff --git a/drivers/gpu/drm/nouveau/core/include/core/device.h b/drivers/gpu/drm/nouveau/core/include/core/device.h
index 33b35c487cba6..21a055aca5131 100644
--- a/drivers/gpu/drm/nouveau/core/include/core/device.h
+++ b/drivers/gpu/drm/nouveau/core/include/core/device.h
@@ -105,44 +105,7 @@ struct nouveau_device {
 
 int nouveau_device_list(u64 *name, int size);
 
-static inline struct nouveau_device *
-nv_device(void *obj)
-{
-	struct nouveau_object *object = nv_object(obj);
-	struct nouveau_object *device = object;
-
-	if (device->engine)
-		device = device->engine;
-	if (device->parent)
-		device = device->parent;
-
-#if CONFIG_NOUVEAU_DEBUG >= NV_DBG_PARANOIA
-	if (unlikely(!nv_iclass(device, NV_SUBDEV_CLASS) ||
-		     (nv_hclass(device) & 0xff) != NVDEV_ENGINE_DEVICE)) {
-		nv_assert("BAD CAST -> NvDevice, 0x%08x 0x%08x",
-			  nv_hclass(object), nv_hclass(device));
-	}
-#endif
-
-	return (void *)device;
-}
-
-static inline struct nouveau_subdev *
-nouveau_subdev(void *obj, int sub)
-{
-	if (nv_device(obj)->subdev[sub])
-		return nv_subdev(nv_device(obj)->subdev[sub]);
-	return NULL;
-}
-
-static inline struct nouveau_engine *
-nouveau_engine(void *obj, int sub)
-{
-	struct nouveau_subdev *subdev = nouveau_subdev(obj, sub);
-	if (subdev && nv_iclass(subdev, NV_ENGINE_CLASS))
-		return nv_engine(subdev);
-	return NULL;
-}
+struct nouveau_device *nv_device(void *obj);
 
 static inline bool
 nv_device_match(struct nouveau_object *object, u16 dev, u16 ven, u16 sub)
diff --git a/drivers/gpu/drm/nouveau/core/include/core/engine.h b/drivers/gpu/drm/nouveau/core/include/core/engine.h
index 8945755eeec04..be04250a1c009 100644
--- a/drivers/gpu/drm/nouveau/core/include/core/engine.h
+++ b/drivers/gpu/drm/nouveau/core/include/core/engine.h
@@ -35,6 +35,8 @@ nv_engidx(struct nouveau_object *object)
 	return nv_subidx(object);
 }
 
+struct nouveau_engine *nouveau_engine(void *obj, int idx);
+
 #define nouveau_engine_create(p,e,c,d,i,f,r)                                   \
 	nouveau_engine_create_((p), (e), (c), (d), (i), (f),                   \
 			       sizeof(**r),(void **)r)
diff --git a/drivers/gpu/drm/nouveau/core/include/core/subdev.h b/drivers/gpu/drm/nouveau/core/include/core/subdev.h
index c24d64ba9a6bd..d9739aed0150e 100644
--- a/drivers/gpu/drm/nouveau/core/include/core/subdev.h
+++ b/drivers/gpu/drm/nouveau/core/include/core/subdev.h
@@ -33,6 +33,8 @@ nv_subidx(struct nouveau_object *object)
 	return nv_hclass(nv_subdev(object)) & 0xff;
 }
 
+struct nouveau_subdev *nouveau_subdev(void *obj, int idx);
+
 #define nouveau_subdev_create(p,e,o,v,s,f,d)                                   \
 	nouveau_subdev_create_((p), (e), (o), (v), (s), (f),                   \
 			       sizeof(**d),(void **)d)
-- 
GitLab