Marcin KoĆcielnicki
2009-Dec-14 18:08 UTC
[Nouveau] [PATCH] drm/nouveau: Unregister irq handler if init fails.
--- drivers/gpu/drm/nouveau/nouveau_state.c | 25 ++++++++++++++++--------- 1 files changed, 16 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_state.c b/drivers/gpu/drm/nouveau/nouveau_state.c index 2ed41d3..285e6da 100644 --- a/drivers/gpu/drm/nouveau/nouveau_state.c +++ b/drivers/gpu/drm/nouveau/nouveau_state.c @@ -390,21 +390,26 @@ nouveau_card_init(struct drm_device *dev) ret = nouveau_channel_alloc(dev, &dev_priv->channel, (struct drm_file *)-2, NvDmaFB, NvDmaTT); - if (ret) + if (ret) { + drm_irq_uninstall(dev); return ret; + } gpuobj = NULL; ret = nouveau_gpuobj_dma_new(dev_priv->channel, NV_CLASS_DMA_IN_MEMORY, 0, nouveau_mem_fb_amount(dev), NV_DMA_ACCESS_RW, NV_DMA_TARGET_VIDMEM, &gpuobj); - if (ret) + if (ret) { + drm_irq_uninstall(dev); return ret; + } ret = nouveau_gpuobj_ref_add(dev, dev_priv->channel, NvDmaVRAM, gpuobj, NULL); if (ret) { nouveau_gpuobj_del(dev, &gpuobj); + drm_irq_uninstall(dev); return ret; } @@ -412,25 +417,27 @@ nouveau_card_init(struct drm_device *dev) ret = nouveau_gpuobj_gart_dma_new(dev_priv->channel, 0, dev_priv->gart_info.aper_size, NV_DMA_ACCESS_RW, &gpuobj, NULL); - if (ret) + if (ret) { + drm_irq_uninstall(dev); return ret; + } ret = nouveau_gpuobj_ref_add(dev, dev_priv->channel, NvDmaGART, gpuobj, NULL); if (ret) { + drm_irq_uninstall(dev); nouveau_gpuobj_del(dev, &gpuobj); return ret; } if (drm_core_check_feature(dev, DRIVER_MODESET)) { - if (dev_priv->card_type >= NV_50) { + if (dev_priv->card_type >= NV_50) ret = nv50_display_create(dev); - if (ret) - return ret; - } else { + else ret = nv04_display_create(dev); - if (ret) - return ret; + if (ret) { + drm_irq_uninstall(dev); + return ret; } } -- 1.6.5.6