nouveau_bo_unmap(nv_crtc->cursor.nvbo);
        nouveau_bo_unpin(nv_crtc->cursor.nvbo);
        nouveau_bo_ref(NULL, &nv_crtc->cursor.nvbo);
-       nvif_notify_fini(&nv_crtc->vblank);
+       nvif_notify_dtor(&nv_crtc->vblank);
        kfree(nv_crtc);
 }
 
 
        nv04_cursor_init(nv_crtc);
 
-       ret = nvif_notify_init(&disp->disp.object, nv04_crtc_vblank_handler,
+       ret = nvif_notify_ctor(&disp->disp.object, "kmsVbl", nv04_crtc_vblank_handler,
                               false, NV04_DISP_NTFY_VBLANK,
                               &(struct nvif_notify_head_req_v0) {
                                    .head = nv_crtc->index,
 
 
        nouveau_hw_save_vga_fonts(dev, 0);
 
-       nvif_notify_fini(&disp->flip);
+       nvif_notify_dtor(&disp->flip);
 
        nouveau_display(dev)->priv = NULL;
        kfree(disp);
 
        /* Request page flip completion event. */
        if (drm->nvsw.client) {
-               nvif_notify_init(&drm->nvsw, nv04_flip_complete,
+               nvif_notify_ctor(&drm->nvsw, "kmsFlip", nv04_flip_complete,
                                 false, NV04_NVSW_NTFY_UEVENT,
                                 NULL, 0, 0, &disp->flip);
        }
 
                return ret;
        }
 
-       ret = nvif_notify_init(&wndw->wndw.base.user, wndw->notify.func,
-                              false, NV50_DISP_BASE_CHANNEL_DMA_V0_NTFY_UEVENT,
+       ret = nvif_notify_ctor(&wndw->wndw.base.user, "kmsBaseNtfy",
+                              wndw->notify.func, false,
+                              NV50_DISP_BASE_CHANNEL_DMA_V0_NTFY_UEVENT,
                               &(struct nvif_notify_uevent_req) {},
                               sizeof(struct nvif_notify_uevent_req),
                               sizeof(struct nvif_notify_uevent_rep),
 
 {
        struct nv50_head *head = nv50_head(crtc);
 
-       nvif_notify_fini(&head->base.vblank);
+       nvif_notify_dtor(&head->base.vblank);
        nv50_lut_fini(&head->olut);
        drm_crtc_cleanup(crtc);
        kfree(head);
                }
        }
 
-       ret = nvif_notify_init(&disp->disp->object, nv50_head_vblank_handler,
+       ret = nvif_notify_ctor(&disp->disp->object, "kmsVbl", nv50_head_vblank_handler,
                               false, NV04_DISP_NTFY_VBLANK,
                               &(struct nvif_notify_head_req_v0) {
                                    .head = nv_crtc->index,
 
                return ret;
        }
 
-       ret = nvif_notify_init(&wndw->wndw.base.user, wndw->notify.func, false,
+       ret = nvif_notify_ctor(&wndw->wndw.base.user, "kmsOvlyNtfy",
+                              wndw->notify.func, false,
                               NV50_DISP_OVERLAY_CHANNEL_DMA_V0_NTFY_UEVENT,
                               &(struct nvif_notify_uevent_req) {},
                               sizeof(struct nvif_notify_uevent_req),
 
                nv50_wndw_ctxdma_del(ctxdma);
        }
 
-       nvif_notify_fini(&wndw->notify);
+       nvif_notify_dtor(&wndw->notify);
        nv50_dmac_destroy(&wndw->wimm);
        nv50_dmac_destroy(&wndw->wndw);
 
 
 
 struct nvif_notify {
        struct nvif_object *object;
+       const char *name;
        int index;
 
 #define NVIF_NOTIFY_USER 0
        struct work_struct work;
 };
 
-int  nvif_notify_init(struct nvif_object *, int (*func)(struct nvif_notify *),
-                     bool work, u8 type, void *data, u32 size, u32 reply,
-                     struct nvif_notify *);
-int  nvif_notify_fini(struct nvif_notify *);
+int  nvif_notify_ctor(struct nvif_object *, const char *name,
+                     int (*func)(struct nvif_notify *), bool work, u8 type,
+                     void *data, u32 size, u32 reply, struct nvif_notify *);
+int  nvif_notify_dtor(struct nvif_notify *);
 int  nvif_notify_get(struct nvif_notify *);
 int  nvif_notify_put(struct nvif_notify *);
 int  nvif_notify(const void *, u32, const void *, u32);
 
                nvif_object_dtor(&chan->nvsw);
                nvif_object_dtor(&chan->gart);
                nvif_object_dtor(&chan->vram);
-               nvif_notify_fini(&chan->kill);
+               nvif_notify_dtor(&chan->kill);
                nvif_object_dtor(&chan->user);
                nvif_object_dtor(&chan->push.ctxdma);
                nouveau_vma_del(&chan->push.vma);
        nvif_object_map(&chan->user, NULL, 0);
 
        if (chan->user.oclass >= FERMI_CHANNEL_GPFIFO) {
-               ret = nvif_notify_init(&chan->user, nouveau_channel_killed,
+               ret = nvif_notify_ctor(&chan->user, "abi16ChanKilled",
+                                      nouveau_channel_killed,
                                       true, NV906F_V0_NTFY_KILLED,
                                       NULL, 0, 0, &chan->kill);
                if (ret == 0)
 
 nouveau_connector_destroy(struct drm_connector *connector)
 {
        struct nouveau_connector *nv_connector = nouveau_connector(connector);
-       nvif_notify_fini(&nv_connector->hpd);
+       nvif_notify_dtor(&nv_connector->hpd);
        kfree(nv_connector->edid);
        drm_connector_unregister(connector);
        drm_connector_cleanup(connector);
                break;
        }
 
-       ret = nvif_notify_init(&disp->disp.object, nouveau_connector_hotplug,
+       ret = nvif_notify_ctor(&disp->disp.object, "kmsHotplug",
+                              nouveau_connector_hotplug,
                               true, NV04_DISP_NTFY_CONN,
                               &(struct nvif_notify_conn_req_v0) {
                                .mask = NVIF_NOTIFY_CONN_V0_ANY,
 
 nouveau_fence_context_del(struct nouveau_fence_chan *fctx)
 {
        nouveau_fence_context_kill(fctx, 0);
-       nvif_notify_fini(&fctx->notify);
+       nvif_notify_dtor(&fctx->notify);
        fctx->dead = 1;
 
        /*
        if (!priv->uevent)
                return;
 
-       ret = nvif_notify_init(&chan->user, nouveau_fence_wait_uevent_handler,
+       ret = nvif_notify_ctor(&chan->user, "fenceNonStallIntr",
+                              nouveau_fence_wait_uevent_handler,
                               false, NV826E_V0_NTFY_NON_STALL_INTERRUPT,
                               &(struct nvif_notify_uevent_req) { },
                               sizeof(struct nvif_notify_uevent_req),
 
 
        nouveau_svm_fault_buffer_fini(svm, id);
 
-       nvif_notify_fini(&buffer->notify);
+       nvif_notify_dtor(&buffer->notify);
        nvif_object_dtor(&buffer->object);
 }
 
        buffer->getaddr = args.get;
        buffer->putaddr = args.put;
 
-       ret = nvif_notify_init(&buffer->object, nouveau_svm_fault, true,
-                              NVB069_V0_NTFY_FAULT, NULL, 0, 0,
+       ret = nvif_notify_ctor(&buffer->object, "svmFault", nouveau_svm_fault,
+                              true, NVB069_V0_NTFY_FAULT, NULL, 0, 0,
                               &buffer->notify);
        if (ret)
                return ret;
 
 }
 
 int
-nvif_notify_fini(struct nvif_notify *notify)
+nvif_notify_dtor(struct nvif_notify *notify)
 {
        struct nvif_object *object = notify->object;
        struct {
 }
 
 int
-nvif_notify_init(struct nvif_object *object, int (*func)(struct nvif_notify *),
-                bool work, u8 event, void *data, u32 size, u32 reply,
-                struct nvif_notify *notify)
+nvif_notify_ctor(struct nvif_object *object, const char *name,
+                int (*func)(struct nvif_notify *), bool work, u8 event,
+                void *data, u32 size, u32 reply, struct nvif_notify *notify)
 {
        struct {
                struct nvif_ioctl_v0 ioctl;
        int ret = -ENOMEM;
 
        notify->object = object;
+       notify->name = name ? name : "nvifNotify";
        notify->flags = 0;
        atomic_set(¬ify->putcnt, 1);
        notify->func = func;
        kfree(args);
 done:
        if (ret)
-               nvif_notify_fini(notify);
+               nvif_notify_dtor(notify);
        return ret;
 }