return err;
 }
 
-static void qlcnic_enable_msi_legacy(struct qlcnic_adapter *adapter)
+static int qlcnic_enable_msi_legacy(struct qlcnic_adapter *adapter)
 {
+       int err = 0;
        u32 offset, mask_reg;
        const struct qlcnic_legacy_intr_set *legacy_intrp;
        struct qlcnic_hardware_context *ahw = adapter->ahw;
                                                            offset);
                dev_info(&pdev->dev, "using msi interrupts\n");
                adapter->msix_entries[0].vector = pdev->irq;
-               return;
+               return err;
        }
+       if (qlcnic_use_msi || qlcnic_use_msi_x)
+               return -EOPNOTSUPP;
 
        legacy_intrp = &legacy_intr[adapter->ahw->pci_func];
        adapter->ahw->int_vec_bit = legacy_intrp->int_vec_bit;
        adapter->crb_int_state_reg = qlcnic_get_ioaddr(ahw, ISR_INT_STATE_REG);
        dev_info(&pdev->dev, "using legacy interrupts\n");
        adapter->msix_entries[0].vector = pdev->irq;
+       return err;
 }
 
 int qlcnic_82xx_setup_intr(struct qlcnic_adapter *adapter, u8 num_intr)
 {
-       int num_msix, err;
+       int num_msix, err = 0;
 
        if (!num_intr)
                num_intr = QLCNIC_DEF_NUM_STS_DESC_RINGS;
        if (err == -ENOMEM || !err)
                return err;
 
-       qlcnic_enable_msi_legacy(adapter);
-       return 0;
+       err = qlcnic_enable_msi_legacy(adapter);
+       if (!err)
+               return err;
+
+       return -EIO;
 }
 
 void qlcnic_teardown_intr(struct qlcnic_adapter *adapter)
                        board_name, adapter->ahw->revision_id);
        }
        err = qlcnic_setup_intr(adapter, 0);
-       if (err)
+       if (err) {
+               dev_err(&pdev->dev, "Failed to setup interrupt\n");
                goto err_out_disable_msi;
+       }
 
        if (qlcnic_83xx_check(adapter)) {
                err = qlcnic_83xx_setup_mbx_intr(adapter);
        adapter->msix_entries = NULL;
        err = qlcnic_setup_intr(adapter, 0);
 
+       if (err) {
+               kfree(adapter->msix_entries);
+               netdev_err(netdev, "failed to setup interrupt\n");
+               return err;
+       }
+
        if (qlcnic_83xx_check(adapter)) {
                err = qlcnic_83xx_setup_mbx_intr(adapter);
                if (err) {
        qlcnic_detach(adapter);
        qlcnic_teardown_intr(adapter);
        err = qlcnic_setup_intr(adapter, data);
-       if (err)
-               dev_err(&adapter->pdev->dev,
-                       "failed setting max_rss; rss disabled\n");
+       if (err) {
+               kfree(adapter->msix_entries);
+               netdev_err(netdev, "failed to setup interrupt\n");
+               return err;
+       }
 
        if (qlcnic_83xx_check(adapter)) {
                err = qlcnic_83xx_setup_mbx_intr(adapter);