net/bonding: fix race condition
[dpdk.git] / drivers / net / qede / qede_ethdev.c
index 4a26836..df52ea9 100644 (file)
@@ -1,9 +1,7 @@
-/*
+/* SPDX-License-Identifier: BSD-3-Clause
  * Copyright (c) 2016 - 2018 Cavium Inc.
  * All rights reserved.
  * www.cavium.com
- *
- * See LICENSE.qede_pmd for copyright and licensing details.
  */
 
 #include "qede_ethdev.h"
@@ -961,7 +959,10 @@ qede_mac_int_ops(struct rte_eth_dev *eth_dev, struct ecore_filter_ucast *ucast,
        if (rc == 0)
                rc = ecore_filter_ucast_cmd(edev, ucast,
                                            ECORE_SPQ_MODE_CB, NULL);
-       if (rc != ECORE_SUCCESS)
+       /* Indicate error only for add filter operation.
+        * Delete filter operations are not severe.
+        */
+       if ((rc != ECORE_SUCCESS) && add)
                DP_ERR(edev, "MAC filter failed, rc = %d, op = %d\n",
                       rc, add);
 
@@ -1731,8 +1732,20 @@ static void qede_dev_close(struct rte_eth_dev *eth_dev)
        qdev->ops->common->slowpath_stop(edev);
        qdev->ops->common->remove(edev);
        rte_intr_disable(&pci_dev->intr_handle);
-       rte_intr_callback_unregister(&pci_dev->intr_handle,
-                                    qede_interrupt_handler, (void *)eth_dev);
+
+       switch (pci_dev->intr_handle.type) {
+       case RTE_INTR_HANDLE_UIO_INTX:
+       case RTE_INTR_HANDLE_VFIO_LEGACY:
+               rte_intr_callback_unregister(&pci_dev->intr_handle,
+                                            qede_interrupt_handler_intx,
+                                            (void *)eth_dev);
+               break;
+       default:
+               rte_intr_callback_unregister(&pci_dev->intr_handle,
+                                          qede_interrupt_handler,
+                                          (void *)eth_dev);
+       }
+
        if (ECORE_IS_CMT(edev))
                rte_eal_alarm_cancel(qede_poll_sp_sb_cb, (void *)eth_dev);
 }