]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/gpu/drm/nouveau/nvkm/engine/dma/base.c
drm/nouveau/dma: lookup objects with nvkm_object_search()
[karo-tx-linux.git] / drivers / gpu / drm / nouveau / nvkm / engine / dma / base.c
index f11ebdd16c77f0a8516d01336bef6837f660eea6..11b7b8fd5ddaf356b5a9bee8dbde507c70cf92ac 100644 (file)
 
 #include <nvif/class.h>
 
-struct nvkm_dmaobj *
-nvkm_dma_search(struct nvkm_dma *dma, struct nvkm_client *client, u64 object)
-{
-       struct rb_node *node = client->dmaroot.rb_node;
-       while (node) {
-               struct nvkm_dmaobj *dmaobj =
-                       container_of(node, typeof(*dmaobj), rb);
-               if (object < dmaobj->handle)
-                       node = node->rb_left;
-               else
-               if (object > dmaobj->handle)
-                       node = node->rb_right;
-               else
-                       return dmaobj;
-       }
-       return NULL;
-}
-
 static int
 nvkm_dma_oclass_new(struct nvkm_device *device,
                    const struct nvkm_oclass *oclass, void *data, u32 size,
@@ -53,34 +35,12 @@ nvkm_dma_oclass_new(struct nvkm_device *device,
 {
        struct nvkm_dma *dma = nvkm_dma(oclass->engine);
        struct nvkm_dmaobj *dmaobj = NULL;
-       struct nvkm_client *client = oclass->client;
-       struct rb_node **ptr = &client->dmaroot.rb_node;
-       struct rb_node *parent = NULL;
        int ret;
 
        ret = dma->func->class_new(dma, oclass, data, size, &dmaobj);
        if (dmaobj)
                *pobject = &dmaobj->object;
-       if (ret)
-               return ret;
-
-       dmaobj->handle = oclass->object;
-
-       while (*ptr) {
-               struct nvkm_dmaobj *obj = container_of(*ptr, typeof(*obj), rb);
-               parent = *ptr;
-               if (dmaobj->handle < obj->handle)
-                       ptr = &parent->rb_left;
-               else
-               if (dmaobj->handle > obj->handle)
-                       ptr = &parent->rb_right;
-               else
-                       return -EEXIST;
-       }
-
-       rb_link_node(&dmaobj->rb, parent, ptr);
-       rb_insert_color(&dmaobj->rb, &client->dmaroot);
-       return 0;
+       return ret;
 }
 
 static const struct nvkm_device_oclass