diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2013-04-25 17:56:03 +1000 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2013-04-26 00:36:59 +1000 |
commit | 66a75090726d59f9d3dfa95d3062c13e28b533a7 (patch) | |
tree | 48f13c49860449e4abcccece809c14ca64a51bc7 /nvkm/core | |
parent | 3a9a2bc46c9df865ffd7dbc010a9186cea744c7b (diff) | |
download | nouveau-66a75090726d59f9d3dfa95d3062c13e28b533a7.tar.gz |
device: have engine object initialised before creation
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'nvkm/core')
-rw-r--r-- | nvkm/core/client.c | 5 | ||||
-rw-r--r-- | nvkm/core/parent.c | 8 |
2 files changed, 10 insertions, 3 deletions
diff --git a/nvkm/core/client.c b/nvkm/core/client.c index 2be389d72..9079c0ac5 100644 --- a/nvkm/core/client.c +++ b/nvkm/core/client.c @@ -58,8 +58,9 @@ nouveau_client_create_(const char *name, u64 devname, const char *cfg, return -ENODEV; ret = nouveau_namedb_create_(NULL, NULL, &nouveau_client_oclass, - NV_CLIENT_CLASS, nouveau_device_sclass, - 0, length, pobject); + NV_CLIENT_CLASS, NULL, + (1ULL << NVDEV_ENGINE_DEVICE), + length, pobject); client = *pobject; if (ret) return ret; diff --git a/nvkm/core/parent.c b/nvkm/core/parent.c index db7c54943..313380ce6 100644 --- a/nvkm/core/parent.c +++ b/nvkm/core/parent.c @@ -24,6 +24,7 @@ #include <core/object.h> #include <core/parent.h> +#include <core/client.h> int nouveau_parent_sclass(struct nouveau_object *parent, u16 handle, @@ -50,7 +51,12 @@ nouveau_parent_sclass(struct nouveau_object *parent, u16 handle, while (mask) { int i = ffsll(mask) - 1; - if ((engine = nouveau_engine(parent, i))) { + if (nv_iclass(parent, NV_CLIENT_CLASS)) + engine = nv_engine(nv_client(parent)->device); + else + engine = nouveau_engine(parent, i); + + if (engine) { oclass = engine->sclass; while (oclass->ofuncs) { if ((oclass->handle & 0xffff) == handle) { |