Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
[linux-2.6-microblaze.git] / drivers / atm / nicstar.c
index b015c3e..bc5a6ab 100644 (file)
@@ -527,6 +527,15 @@ static int ns_init_card(int i, struct pci_dev *pcidev)
        /* Set the VPI/VCI MSb mask to zero so we can receive OAM cells */
        writel(0x00000000, card->membase + VPM);
 
+       card->intcnt = 0;
+       if (request_irq
+           (pcidev->irq, &ns_irq_handler, IRQF_SHARED, "nicstar", card) != 0) {
+               pr_err("nicstar%d: can't allocate IRQ %d.\n", i, pcidev->irq);
+               error = 9;
+               ns_init_card_error(card, error);
+               return error;
+       }
+
        /* Initialize TSQ */
        card->tsq.org = dma_alloc_coherent(&card->pcidev->dev,
                                           NS_TSQSIZE + NS_TSQ_ALIGNMENT,
@@ -753,15 +762,6 @@ static int ns_init_card(int i, struct pci_dev *pcidev)
 
        card->efbie = 1;
 
-       card->intcnt = 0;
-       if (request_irq
-           (pcidev->irq, &ns_irq_handler, IRQF_SHARED, "nicstar", card) != 0) {
-               printk("nicstar%d: can't allocate IRQ %d.\n", i, pcidev->irq);
-               error = 9;
-               ns_init_card_error(card, error);
-               return error;
-       }
-
        /* Register device */
        card->atmdev = atm_dev_register("nicstar", &card->pcidev->dev, &atm_ops,
                                        -1, NULL);
@@ -839,10 +839,12 @@ static void ns_init_card_error(ns_dev *card, int error)
                        dev_kfree_skb_any(hb);
        }
        if (error >= 12) {
-               kfree(card->rsq.org);
+               dma_free_coherent(&card->pcidev->dev, NS_RSQSIZE + NS_RSQ_ALIGNMENT,
+                               card->rsq.org, card->rsq.dma);
        }
        if (error >= 11) {
-               kfree(card->tsq.org);
+               dma_free_coherent(&card->pcidev->dev, NS_TSQSIZE + NS_TSQ_ALIGNMENT,
+                               card->tsq.org, card->tsq.dma);
        }
        if (error >= 10) {
                free_irq(card->pcidev->irq, card);