rt2x00: Clean up error handling of PCI queue DMA allocation.
authorIvo van Doorn <ivdoorn@gmail.com>
Mon, 5 May 2008 15:24:03 +0000 (17:24 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 13 May 2008 01:22:18 +0000 (21:22 -0400)
When, for some reason, the rt2x00pci module fails to allocate DMA memory for
the queues, it tries to undo the complete initialization of the PCI device,
including freeing of the irq. This results in the following error in dmesg, as
the irq hadn't been requested yet:

[  78.123456] Trying to free already-free IRQ 17

Fix this by implementing proper error handling code, instead of just using the
full uninitialization function.

Signed-off-by: Gertjan van Wingerde <gwingerde@kpnplanet.nl>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/rt2x00/rt2x00pci.c

index 7867ec64bd2cceda4b25c7a97ddc8ae4ab9a0da1..971af2546b59a85e3e820f6d9b7e14e9276a515f 100644 (file)
@@ -314,13 +314,14 @@ int rt2x00pci_initialize(struct rt2x00_dev *rt2x00dev)
        if (status) {
                ERROR(rt2x00dev, "IRQ %d allocation failed (error %d).\n",
                      pci_dev->irq, status);
-               return status;
+               goto exit;
        }
 
        return 0;
 
 exit:
-       rt2x00pci_uninitialize(rt2x00dev);
+       queue_for_each(rt2x00dev, queue)
+               rt2x00pci_free_queue_dma(rt2x00dev, queue);
 
        return status;
 }