drm/nouveau/core: object.engine is always a nouveau_engine now

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
diff --git a/drivers/gpu/drm/nouveau/core/core/engctx.c b/drivers/gpu/drm/nouveau/core/core/engctx.c
index 6b9c728..16f09b1 100644
--- a/drivers/gpu/drm/nouveau/core/core/engctx.c
+++ b/drivers/gpu/drm/nouveau/core/core/engctx.c
@@ -102,7 +102,7 @@
 	}
 
 	if (client->vm)
-		atomic_inc(&client->vm->engref[nv_engidx(engobj)]);
+		atomic_inc(&client->vm->engref[nv_engidx(engine)]);
 	list_add(&nv_engctx(engctx)->head, &engine->contexts);
 	nv_engctx(engctx)->addr = ~0ULL;
 	spin_unlock_irqrestore(&engine->lock, save);
@@ -112,8 +112,7 @@
 void
 nouveau_engctx_destroy(struct nouveau_engctx *engctx)
 {
-	struct nouveau_object *engobj = nv_object(engctx)->engine;
-	struct nouveau_engine *engine = nv_engine(engobj);
+	struct nouveau_engine *engine = engctx->gpuobj.object.engine;
 	struct nouveau_client *client = nouveau_client(engctx);
 	unsigned long save;
 
@@ -123,7 +122,7 @@
 	spin_unlock_irqrestore(&engine->lock, save);
 
 	if (client->vm)
-		atomic_dec(&client->vm->engref[nv_engidx(engobj)]);
+		atomic_dec(&client->vm->engref[nv_engidx(engine)]);
 
 	if (engctx->gpuobj.size)
 		nouveau_gpuobj_destroy(&engctx->gpuobj);
diff --git a/drivers/gpu/drm/nouveau/core/core/engine.c b/drivers/gpu/drm/nouveau/core/core/engine.c
index 85bf4b3..c9414b1 100644
--- a/drivers/gpu/drm/nouveau/core/core/engine.c
+++ b/drivers/gpu/drm/nouveau/core/core/engine.c
@@ -53,7 +53,7 @@
 
 	if (parent) {
 		struct nouveau_device *device = nv_device(parent);
-		int engidx = nv_engidx(nv_object(engine));
+		int engidx = nv_engidx(engine);
 
 		if (device->disable_mask & (1ULL << engidx)) {
 			if (!nouveau_boolopt(device->cfgopt, iname, false)) {
diff --git a/drivers/gpu/drm/nouveau/core/core/gpuobj.c b/drivers/gpu/drm/nouveau/core/core/gpuobj.c
index 0a9ea1f..0fa6457 100644
--- a/drivers/gpu/drm/nouveau/core/core/gpuobj.c
+++ b/drivers/gpu/drm/nouveau/core/core/gpuobj.c
@@ -229,7 +229,7 @@
 	};
 
 	if (!nv_iclass(engine, NV_SUBDEV_CLASS))
-		engine = engine->engine;
+		engine = &engine->engine->subdev.object;
 	BUG_ON(engine == NULL);
 
 	return nouveau_object_ctor(parent, engine, &_nouveau_gpuobj_oclass,
@@ -310,7 +310,7 @@
 	struct nouveau_gpuobj *gpuobj;
 	int ret;
 
-	ret = nouveau_object_create(parent, parent->engine,
+	ret = nouveau_object_create(parent, &parent->engine->subdev.object,
 				   &nouveau_gpudup_oclass, 0, &gpuobj);
 	*pgpuobj = gpuobj;
 	if (ret)
diff --git a/drivers/gpu/drm/nouveau/core/core/object.c b/drivers/gpu/drm/nouveau/core/core/object.c
index b086305..b160860 100644
--- a/drivers/gpu/drm/nouveau/core/core/object.c
+++ b/drivers/gpu/drm/nouveau/core/core/object.c
@@ -43,7 +43,7 @@
 		return -ENOMEM;
 
 	nouveau_object_ref(parent, &object->parent);
-	nouveau_object_ref(engine, &object->engine);
+	nouveau_object_ref(engine, (struct nouveau_object **)&object->engine);
 	object->oclass = oclass;
 	object->oclass->handle |= pclass;
 	atomic_set(&object->refcount, 1);
@@ -77,7 +77,7 @@
 	list_del(&object->list);
 	spin_unlock(&_objlist_lock);
 #endif
-	nouveau_object_ref(NULL, &object->engine);
+	nouveau_object_ref(NULL, (struct nouveau_object **)&object->engine);
 	nouveau_object_ref(NULL, &object->parent);
 	kfree(object);
 }
@@ -182,7 +182,7 @@
 
 	if (object->engine) {
 		mutex_lock(&nv_subdev(object->engine)->mutex);
-		ret = nouveau_object_inc(object->engine);
+		ret = nouveau_object_inc(&object->engine->subdev.object);
 		mutex_unlock(&nv_subdev(object->engine)->mutex);
 		if (ret) {
 			nv_error(object, "engine failed, %d\n", ret);
@@ -203,7 +203,7 @@
 fail_self:
 	if (object->engine) {
 		mutex_lock(&nv_subdev(object->engine)->mutex);
-		nouveau_object_dec(object->engine, false);
+		nouveau_object_dec(&object->engine->subdev.object, false);
 		mutex_unlock(&nv_subdev(object->engine)->mutex);
 	}
 fail_engine:
@@ -228,7 +228,7 @@
 
 	if (object->engine) {
 		mutex_lock(&nv_subdev(object->engine)->mutex);
-		nouveau_object_dec(object->engine, false);
+		nouveau_object_dec(&object->engine->subdev.object, false);
 		mutex_unlock(&nv_subdev(object->engine)->mutex);
 	}
 
@@ -255,7 +255,7 @@
 
 	if (object->engine) {
 		mutex_lock(&nv_subdev(object->engine)->mutex);
-		ret = nouveau_object_dec(object->engine, true);
+		ret = nouveau_object_dec(&object->engine->subdev.object, true);
 		mutex_unlock(&nv_subdev(object->engine)->mutex);
 		if (ret) {
 			nv_warn(object, "engine failed suspend, %d\n", ret);
@@ -277,7 +277,7 @@
 fail_parent:
 	if (object->engine) {
 		mutex_lock(&nv_subdev(object->engine)->mutex);
-		rret = nouveau_object_inc(object->engine);
+		rret = nouveau_object_inc(&object->engine->subdev.object);
 		mutex_unlock(&nv_subdev(object->engine)->mutex);
 		if (rret)
 			nv_fatal(object, "engine failed to reinit, %d\n", rret);
diff --git a/drivers/gpu/drm/nouveau/core/core/parent.c b/drivers/gpu/drm/nouveau/core/core/parent.c
index 07a2006..1f28fa12 100644
--- a/drivers/gpu/drm/nouveau/core/core/parent.c
+++ b/drivers/gpu/drm/nouveau/core/core/parent.c
@@ -39,7 +39,7 @@
 	sclass = nv_parent(parent)->sclass;
 	while (sclass) {
 		if ((sclass->oclass->handle & 0xffff) == handle) {
-			*pengine = parent->engine;
+			*pengine = &parent->engine->subdev.object;
 			*poclass = sclass->oclass;
 			return 0;
 		}
diff --git a/drivers/gpu/drm/nouveau/core/core/printk.c b/drivers/gpu/drm/nouveau/core/core/printk.c
index 81f5596..ed424f9 100644
--- a/drivers/gpu/drm/nouveau/core/core/printk.c
+++ b/drivers/gpu/drm/nouveau/core/core/printk.c
@@ -69,7 +69,7 @@
 			while (subdev && !nv_iclass(subdev, NV_SUBDEV_CLASS))
 				subdev = subdev->parent;
 		} else {
-			subdev = object->engine;
+			subdev = &object->engine->subdev.object;
 		}
 
 		device = subdev;
diff --git a/drivers/gpu/drm/nouveau/core/core/ramht.c b/drivers/gpu/drm/nouveau/core/core/ramht.c
index f3b9bdd..25cd6f2 100644
--- a/drivers/gpu/drm/nouveau/core/core/ramht.c
+++ b/drivers/gpu/drm/nouveau/core/core/ramht.c
@@ -96,7 +96,7 @@
 	int ret;
 
 	ret = nouveau_gpuobj_create(parent, parent->engine ?
-				    parent->engine : parent, /* <nv50 ramht */
+				    &parent->engine->subdev.object : parent, /* <nv50 ramht */
 				    &nouveau_ramht_oclass, 0, pargpu, size,
 				    align, NVOBJ_FLAG_ZERO_ALLOC, &ramht);
 	*pramht = ramht;
diff --git a/drivers/gpu/drm/nouveau/core/core/subdev.c b/drivers/gpu/drm/nouveau/core/core/subdev.c
index 69ba148..cb1c49c 100644
--- a/drivers/gpu/drm/nouveau/core/core/subdev.c
+++ b/drivers/gpu/drm/nouveau/core/core/subdev.c
@@ -33,7 +33,7 @@
 	struct nouveau_object *object = nv_object(obj);
 	while (object && !nv_iclass(object, NV_SUBDEV_CLASS))
 		object = object->parent;
-	if (object == NULL || nv_subidx(object) != idx)
+	if (object == NULL || nv_subidx(nv_subdev(object)) != idx)
 		object = nv_device(obj)->subdev[idx];
 	return object ? nv_subdev(object) : NULL;
 }
diff --git a/drivers/gpu/drm/nouveau/core/engine/copy/nvc0.c b/drivers/gpu/drm/nouveau/core/engine/copy/nvc0.c
index 9261694..20a8cd7 100644
--- a/drivers/gpu/drm/nouveau/core/engine/copy/nvc0.c
+++ b/drivers/gpu/drm/nouveau/core/engine/copy/nvc0.c
@@ -91,7 +91,7 @@
 	if (ret)
 		return ret;
 
-	nv_wo32(priv, 0x084, nv_engidx(object) - NVDEV_ENGINE_COPY0);
+	nv_wo32(priv, 0x084, nv_engidx(&priv->base.base) - NVDEV_ENGINE_COPY0);
 	return 0;
 }
 
diff --git a/drivers/gpu/drm/nouveau/core/engine/copy/nve0.c b/drivers/gpu/drm/nouveau/core/engine/copy/nve0.c
index c7194b3..b140a01 100644
--- a/drivers/gpu/drm/nouveau/core/engine/copy/nve0.c
+++ b/drivers/gpu/drm/nouveau/core/engine/copy/nve0.c
@@ -69,7 +69,7 @@
 static void
 nve0_copy_intr(struct nouveau_subdev *subdev)
 {
-	const int ce = nv_subidx(nv_object(subdev)) - NVDEV_ENGINE_COPY0;
+	const int ce = nv_subidx(subdev) - NVDEV_ENGINE_COPY0;
 	struct nve0_copy_priv *priv = (void *)subdev;
 	u32 stat = nv_rd32(priv, 0x104908 + (ce * 0x1000));
 
diff --git a/drivers/gpu/drm/nouveau/core/engine/device/base.c b/drivers/gpu/drm/nouveau/core/engine/device/base.c
index 0a6abc2..f74f9cb 100644
--- a/drivers/gpu/drm/nouveau/core/engine/device/base.c
+++ b/drivers/gpu/drm/nouveau/core/engine/device/base.c
@@ -516,7 +516,7 @@
 		while (device && device->parent)
 			device = device->parent;
 	} else {
-		device = nv_object(obj)->engine;
+		device = &nv_object(obj)->engine->subdev.object;
 		if (device && device->parent)
 			device = device->parent;
 	}
diff --git a/drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c b/drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c
index 074d434..e8ef8cb 100644
--- a/drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c
+++ b/drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c
@@ -445,7 +445,6 @@
 nvc0_fifo_recover(struct nvc0_fifo_priv *priv, struct nouveau_engine *engine,
 		  struct nvc0_fifo_chan *chan)
 {
-	struct nouveau_object *engobj = nv_object(engine);
 	u32 chid = chan->base.chid;
 	unsigned long flags;
 
@@ -456,7 +455,7 @@
 	chan->state = KILLED;
 
 	spin_lock_irqsave(&priv->base.lock, flags);
-	priv->mask |= 1ULL << nv_engidx(engobj);
+	priv->mask |= 1ULL << nv_engidx(engine);
 	spin_unlock_irqrestore(&priv->base.lock, flags);
 	schedule_work(&priv->fault);
 }
diff --git a/drivers/gpu/drm/nouveau/core/engine/fifo/nve0.c b/drivers/gpu/drm/nouveau/core/engine/fifo/nve0.c
index 6a8db7c..c9c1680 100644
--- a/drivers/gpu/drm/nouveau/core/engine/fifo/nve0.c
+++ b/drivers/gpu/drm/nouveau/core/engine/fifo/nve0.c
@@ -471,7 +471,6 @@
 nve0_fifo_recover(struct nve0_fifo_priv *priv, struct nouveau_engine *engine,
 		  struct nve0_fifo_chan *chan)
 {
-	struct nouveau_object *engobj = nv_object(engine);
 	u32 chid = chan->base.chid;
 	unsigned long flags;
 
@@ -482,7 +481,7 @@
 	chan->state = KILLED;
 
 	spin_lock_irqsave(&priv->base.lock, flags);
-	priv->mask |= 1ULL << nv_engidx(engobj);
+	priv->mask |= 1ULL << nv_engidx(engine);
 	spin_unlock_irqrestore(&priv->base.lock, flags);
 	schedule_work(&priv->fault);
 }
diff --git a/drivers/gpu/drm/nouveau/core/include/core/engine.h b/drivers/gpu/drm/nouveau/core/include/core/engine.h
index be04250..d7ebd35 100644
--- a/drivers/gpu/drm/nouveau/core/include/core/engine.h
+++ b/drivers/gpu/drm/nouveau/core/include/core/engine.h
@@ -30,9 +30,9 @@
 }
 
 static inline int
-nv_engidx(struct nouveau_object *object)
+nv_engidx(struct nouveau_engine *engine)
 {
-	return nv_subidx(object);
+	return nv_subidx(&engine->subdev);
 }
 
 struct nouveau_engine *nouveau_engine(void *obj, int idx);
diff --git a/drivers/gpu/drm/nouveau/core/include/core/object.h b/drivers/gpu/drm/nouveau/core/include/core/object.h
index 2e2afa5..64c0038 100644
--- a/drivers/gpu/drm/nouveau/core/include/core/object.h
+++ b/drivers/gpu/drm/nouveau/core/include/core/object.h
@@ -17,7 +17,7 @@
 struct nouveau_object {
 	struct nouveau_oclass *oclass;
 	struct nouveau_object *parent;
-	struct nouveau_object *engine;
+	struct nouveau_engine *engine;
 	atomic_t refcount;
 	atomic_t usecount;
 #if CONFIG_NOUVEAU_DEBUG >= NV_DBG_PARANOIA
diff --git a/drivers/gpu/drm/nouveau/core/include/core/subdev.h b/drivers/gpu/drm/nouveau/core/include/core/subdev.h
index d9739ae..68f1c41 100644
--- a/drivers/gpu/drm/nouveau/core/include/core/subdev.h
+++ b/drivers/gpu/drm/nouveau/core/include/core/subdev.h
@@ -28,9 +28,9 @@
 }
 
 static inline int
-nv_subidx(struct nouveau_object *object)
+nv_subidx(struct nouveau_subdev *subdev)
 {
-	return nv_hclass(nv_subdev(object)) & 0xff;
+	return nv_hclass(subdev) & 0xff;
 }
 
 struct nouveau_subdev *nouveau_subdev(void *obj, int idx);
diff --git a/drivers/gpu/drm/nouveau/core/subdev/bar/base.c b/drivers/gpu/drm/nouveau/core/subdev/bar/base.c
index 24fb89f..188c638 100644
--- a/drivers/gpu/drm/nouveau/core/subdev/bar/base.c
+++ b/drivers/gpu/drm/nouveau/core/subdev/bar/base.c
@@ -110,7 +110,7 @@
 		  struct nouveau_mem *mem, struct nouveau_object **pobject)
 {
 	struct nouveau_object *gpuobj;
-	int ret = nouveau_object_ctor(parent, parent->engine,
+	int ret = nouveau_object_ctor(parent, &parent->engine->subdev.object,
 				      &nouveau_barobj_oclass,
 				      mem, 0, &gpuobj);
 	if (ret == 0)
diff --git a/drivers/gpu/drm/nouveau/core/subdev/instmem/base.c b/drivers/gpu/drm/nouveau/core/subdev/instmem/base.c
index b2dac4a..767fcf7 100644
--- a/drivers/gpu/drm/nouveau/core/subdev/instmem/base.c
+++ b/drivers/gpu/drm/nouveau/core/subdev/instmem/base.c
@@ -74,8 +74,8 @@
 {
 	struct nouveau_instmem_impl *impl = (void *)imem->base.object.oclass;
 	struct nouveau_instobj_args args = { .size = size, .align = align };
-	return nouveau_object_ctor(parent, parent->engine, impl->instobj, &args,
-				   sizeof(args), pobject);
+	return nouveau_object_ctor(parent, &parent->engine->subdev.object,
+				   impl->instobj, &args, sizeof(args), pobject);
 }
 
 int