diff --git a/drivers/gpu/drm/nouveau/core/core/engctx.c b/drivers/gpu/drm/nouveau/core/core/engctx.c index 6b9c728053d056d90b875e2df88500fadc0230de..16f09b1280dc47e4ed603d3e7b31fa838d20cd97 100644 --- a/drivers/gpu/drm/nouveau/core/core/engctx.c +++ b/drivers/gpu/drm/nouveau/core/core/engctx.c @@ -102,7 +102,7 @@ nouveau_engctx_create_(struct nouveau_object *parent, } 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 @@ nouveau_engctx_create_(struct nouveau_object *parent, 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 @@ nouveau_engctx_destroy(struct nouveau_engctx *engctx) 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 85bf4b3d1fe4ef85446c1ac02a42375bf2a7f770..c9414b1532ff755010ff7690ab5e87c009a1ecbf 100644 --- a/drivers/gpu/drm/nouveau/core/core/engine.c +++ b/drivers/gpu/drm/nouveau/core/core/engine.c @@ -53,7 +53,7 @@ nouveau_engine_create_(struct nouveau_object *parent, 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 0a9ea1fa9b55253411495a040302018f0a9d35b4..0fa64576b8d64d4148da3689c558874a0d59f4b5 100644 --- a/drivers/gpu/drm/nouveau/core/core/gpuobj.c +++ b/drivers/gpu/drm/nouveau/core/core/gpuobj.c @@ -229,7 +229,7 @@ nouveau_gpuobj_new(struct nouveau_object *parent, struct nouveau_object *pargpu, }; 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 @@ nouveau_gpuobj_dup(struct nouveau_object *parent, struct nouveau_gpuobj *base, 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 b08630577c820061c63d8d5eeb2015f4972acf65..b160860edf54bede42a43ae9e8b6cca1f693c272 100644 --- a/drivers/gpu/drm/nouveau/core/core/object.c +++ b/drivers/gpu/drm/nouveau/core/core/object.c @@ -43,7 +43,7 @@ nouveau_object_create_(struct nouveau_object *parent, 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 @@ nouveau_object_destroy(struct nouveau_object *object) 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 @@ nouveau_object_inc(struct nouveau_object *object) 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 @@ nouveau_object_inc(struct nouveau_object *object) 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 @@ nouveau_object_decf(struct nouveau_object *object) 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 @@ nouveau_object_decs(struct nouveau_object *object) 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 @@ nouveau_object_decs(struct nouveau_object *object) 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 07a2006a1d7840187646df252ae119455adf70bc..1f28fa12e98f9cfe0cef25f8114e29f94874be0a 100644 --- a/drivers/gpu/drm/nouveau/core/core/parent.c +++ b/drivers/gpu/drm/nouveau/core/core/parent.c @@ -39,7 +39,7 @@ nouveau_parent_sclass(struct nouveau_object *parent, u16 handle, 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 81f5596926249aa5b800ca0cb8da53bccccea853..ed424f99f3839adc3d377e081d505052490a669b 100644 --- a/drivers/gpu/drm/nouveau/core/core/printk.c +++ b/drivers/gpu/drm/nouveau/core/core/printk.c @@ -69,7 +69,7 @@ nv_printk_(struct nouveau_object *object, int level, const char *fmt, ...) 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 f3b9bddc3875f9254c93ab65c9345642cd4d82b2..25cd6f29072bf011b6fa03adf4acf326b23f819c 100644 --- a/drivers/gpu/drm/nouveau/core/core/ramht.c +++ b/drivers/gpu/drm/nouveau/core/core/ramht.c @@ -96,7 +96,7 @@ nouveau_ramht_new(struct nouveau_object *parent, struct nouveau_object *pargpu, int ret; ret = nouveau_gpuobj_create(parent, parent->engine ? - parent->engine : parent, /* engine->subdev.object : parent, /* 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 9261694d0d3572701b8b1b4a79faf2ab1d4d340e..20a8cd7f77309881c6c1c73675a5e821e12d2e9e 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 @@ nvc0_copy_init(struct nouveau_object *object) 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 c7194b3546057e14726bf2330ce27ece287bd916..b140a01dd323d13c1a45f0387a7795ff686a5843 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 @@ nve0_copy_cclass = { 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 0a6abc23f85d4825934f7fe9fed05642e2b607d9..f74f9cbbf3d862efb8f802941dff22d49907287c 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 @@ nv_device(void *obj) 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 074d434c3077a53b74410b033a495ae58c3cd666..e8ef8cb058cd6eb401f05d9dc51b34f91a834a3a 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 @@ static void 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 @@ nvc0_fifo_recover(struct nvc0_fifo_priv *priv, struct nouveau_engine *engine, 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 6a8db7c80bd148e150e6c4497c43f5bedc6249fe..c9c168035b4d042ba2990798ebc1169fd8afb6a7 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 @@ static void 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 @@ nve0_fifo_recover(struct nve0_fifo_priv *priv, struct nouveau_engine *engine, 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 be04250a1c0097ce96daac31861f7e2ba5afac9f..d7ebd35ef1adb14b1a90a556d79e1faf4999816a 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 @@ nv_engine(void *obj) } 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 2e2afa502c990228b23f0227f69c0ade14354174..64c0038f197131d5cd3420ae62275aa269e2f7ec 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 d9739aed0150e69d2aada513207c8c412f130d05..68f1c419d15658527b499bae01c7ac2de3645d2a 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 @@ nv_subdev(void *obj) } 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 24fb89fd580f0b0cb7655999d2312aaf731d136a..188c638411b2d5f6bbe89c539dc7dfc802be9de3 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 @@ nouveau_bar_alloc(struct nouveau_bar *bar, struct nouveau_object *parent, 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 b2dac4a088a1f1d3198ea7e43b8179ba7566fcee..767fcf70f98f4930f7ba3b113603a9fc517423d4 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 @@ nouveau_instmem_alloc(struct nouveau_instmem *imem, { 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