summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2014-12-05 12:37:19 +1000
committerBen Skeggs <bskeggs@redhat.com>2015-01-10 23:57:07 +1000
commitd23e5d3f7943eb816026f04a8b069710313522f4 (patch)
treef70431fc4bc192ac4f8a1e0d2a2aeda46e1e5700
parent0f7caae334a9340c7d00d725c5c32120e47d790b (diff)
core: object.engine is always a nouveau_engine now
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
-rw-r--r--nvkm/core/engctx.c7
-rw-r--r--nvkm/core/engine.c2
-rw-r--r--nvkm/core/gpuobj.c4
-rw-r--r--nvkm/core/object.c14
-rw-r--r--nvkm/core/parent.c2
-rw-r--r--nvkm/core/printk.c2
-rw-r--r--nvkm/core/ramht.c2
-rw-r--r--nvkm/core/subdev.c2
-rw-r--r--nvkm/engine/copy/nvc0.c2
-rw-r--r--nvkm/engine/copy/nve0.c2
-rw-r--r--nvkm/engine/device/base.c2
-rw-r--r--nvkm/engine/fifo/nvc0.c3
-rw-r--r--nvkm/engine/fifo/nve0.c3
-rw-r--r--nvkm/include/core/engine.h4
-rw-r--r--nvkm/include/core/object.h2
-rw-r--r--nvkm/include/core/subdev.h4
-rw-r--r--nvkm/subdev/bar/base.c2
-rw-r--r--nvkm/subdev/instmem/base.c4
18 files changed, 30 insertions, 33 deletions
diff --git a/nvkm/core/engctx.c b/nvkm/core/engctx.c
index 6b9c7280..16f09b12 100644
--- a/nvkm/core/engctx.c
+++ b/nvkm/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/nvkm/core/engine.c b/nvkm/core/engine.c
index 85bf4b3d..c9414b15 100644
--- a/nvkm/core/engine.c
+++ b/nvkm/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/nvkm/core/gpuobj.c b/nvkm/core/gpuobj.c
index 0a9ea1fa..0fa64576 100644
--- a/nvkm/core/gpuobj.c
+++ b/nvkm/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/nvkm/core/object.c b/nvkm/core/object.c
index b0863057..b160860e 100644
--- a/nvkm/core/object.c
+++ b/nvkm/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/nvkm/core/parent.c b/nvkm/core/parent.c
index 07a2006a..1f28fa12 100644
--- a/nvkm/core/parent.c
+++ b/nvkm/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/nvkm/core/printk.c b/nvkm/core/printk.c
index 81f55969..ed424f99 100644
--- a/nvkm/core/printk.c
+++ b/nvkm/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/nvkm/core/ramht.c b/nvkm/core/ramht.c
index f3b9bddc..25cd6f29 100644
--- a/nvkm/core/ramht.c
+++ b/nvkm/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, /* <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/nvkm/core/subdev.c b/nvkm/core/subdev.c
index 69ba1482..cb1c49c2 100644
--- a/nvkm/core/subdev.c
+++ b/nvkm/core/subdev.c
@@ -33,7 +33,7 @@ nouveau_subdev(void *obj, int idx)
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/nvkm/engine/copy/nvc0.c b/nvkm/engine/copy/nvc0.c
index 9261694d..20a8cd7f 100644
--- a/nvkm/engine/copy/nvc0.c
+++ b/nvkm/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/nvkm/engine/copy/nve0.c b/nvkm/engine/copy/nve0.c
index c7194b35..b140a01d 100644
--- a/nvkm/engine/copy/nve0.c
+++ b/nvkm/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/nvkm/engine/device/base.c b/nvkm/engine/device/base.c
index 0a6abc23..f74f9cbb 100644
--- a/nvkm/engine/device/base.c
+++ b/nvkm/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/nvkm/engine/fifo/nvc0.c b/nvkm/engine/fifo/nvc0.c
index 074d434c..e8ef8cb0 100644
--- a/nvkm/engine/fifo/nvc0.c
+++ b/nvkm/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/nvkm/engine/fifo/nve0.c b/nvkm/engine/fifo/nve0.c
index 6a8db7c8..c9c16803 100644
--- a/nvkm/engine/fifo/nve0.c
+++ b/nvkm/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/nvkm/include/core/engine.h b/nvkm/include/core/engine.h
index be04250a..d7ebd35e 100644
--- a/nvkm/include/core/engine.h
+++ b/nvkm/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/nvkm/include/core/object.h b/nvkm/include/core/object.h
index 2e2afa50..64c0038f 100644
--- a/nvkm/include/core/object.h
+++ b/nvkm/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/nvkm/include/core/subdev.h b/nvkm/include/core/subdev.h
index d9739aed..68f1c419 100644
--- a/nvkm/include/core/subdev.h
+++ b/nvkm/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/nvkm/subdev/bar/base.c b/nvkm/subdev/bar/base.c
index 24fb89fd..188c6384 100644
--- a/nvkm/subdev/bar/base.c
+++ b/nvkm/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/nvkm/subdev/instmem/base.c b/nvkm/subdev/instmem/base.c
index b2dac4a0..767fcf70 100644
--- a/nvkm/subdev/instmem/base.c
+++ b/nvkm/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