drm/nouveau/dmaobj: reject unsupported parent types instead of half-succeeding
authorBen Skeggs <bskeggs@redhat.com>
Sun, 19 Aug 2012 05:58:38 +0000 (15:58 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Wed, 3 Oct 2012 03:13:06 +0000 (13:13 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/core/engine/dmaobj/nv04.c
drivers/gpu/drm/nouveau/core/engine/dmaobj/nv50.c

index 848aa3bdacd15d1bebb95d490346b59226cd94d9..5ad76f74416fde4f94db77e3e68d85c19a00ec62 100644 (file)
@@ -23,6 +23,7 @@
  */
 
 #include <core/gpuobj.h>
+#include <core/class.h>
 
 #include <subdev/fb.h>
 #include <subdev/vm/nv04.h>
@@ -118,16 +119,18 @@ nv04_dmaobj_ctor(struct nouveau_object *parent, struct nouveau_object *engine,
                return ret;
 
        switch (nv_mclass(parent)) {
-       case 0x006b:
-       case 0x006e:
-       case 0x176e:
-       case 0x406e:
+       case NV_DEVICE_CLASS:
+               break;
+       case NV03_CHANNEL_DMA_CLASS:
+       case NV10_CHANNEL_DMA_CLASS:
+       case NV17_CHANNEL_DMA_CLASS:
+       case NV40_CHANNEL_DMA_CLASS:
                ret = dmaeng->bind(dmaeng, *pobject, &dmaobj->base, &gpuobj);
                nouveau_object_ref(NULL, pobject);
                *pobject = nv_object(gpuobj);
                break;
        default:
-               break;
+               return -EINVAL;
        }
 
        return ret;
index be5c0df644dbf7f5cee67320dcedeb401a69899e..045d2565e28941cf8cf1162ed4e04183c14aba8c 100644 (file)
@@ -23,6 +23,7 @@
  */
 
 #include <core/gpuobj.h>
+#include <core/class.h>
 
 #include <subdev/fb.h>
 #include <engine/dmaobj.h>
@@ -109,16 +110,18 @@ nv50_dmaobj_ctor(struct nouveau_object *parent, struct nouveau_object *engine,
                return ret;
 
        switch (nv_mclass(parent)) {
-       case 0x506e:
-       case 0x506f:
-       case 0x826e:
-       case 0x826f:
+       case NV_DEVICE_CLASS:
+               break;
+       case NV50_CHANNEL_DMA_CLASS:
+       case NV84_CHANNEL_DMA_CLASS:
+       case NV50_CHANNEL_IND_CLASS:
+       case NV84_CHANNEL_IND_CLASS:
                ret = dmaeng->bind(dmaeng, *pobject, &dmaobj->base, &gpuobj);
                nouveau_object_ref(NULL, pobject);
                *pobject = nv_object(gpuobj);
                break;
        default:
-               break;
+               return -EINVAL;
        }
 
        return ret;