net/qede/base: add DPC sync after PF stop
authorRasesh Mody <rasesh.mody@cavium.com>
Sat, 29 Sep 2018 08:14:28 +0000 (08:14 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Thu, 11 Oct 2018 16:53:48 +0000 (18:53 +0200)
Add DPC sync after stopping the physical funciton to allow clean up of
asyncronous events. Post this the driver don't expect the FW to send
async events.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
drivers/net/qede/base/ecore_dev.c
drivers/net/qede/base/ecore_spq.c

index f09f771..4558306 100644 (file)
@@ -2804,6 +2804,12 @@ enum _ecore_status_t ecore_hw_stop(struct ecore_dev *p_dev)
                        rc2 = ECORE_UNKNOWN_ERROR;
                }
 
+               OSAL_DPC_SYNC(p_hwfn);
+
+               /* After this point we don't expect the FW to send us async
+                * events
+                */
+
                /* perform debug action after PF stop was sent */
                OSAL_AFTER_PF_STOP((void *)p_dev, p_hwfn->my_id);
 
index 776c86f..1a02ba2 100644 (file)
@@ -283,8 +283,10 @@ ecore_async_event_completion(struct ecore_hwfn *p_hwfn,
 {
        ecore_spq_async_comp_cb cb;
 
-       if (!p_hwfn->p_spq || (p_eqe->protocol_id >= MAX_PROTOCOL_TYPE))
+       if (p_eqe->protocol_id >= MAX_PROTOCOL_TYPE) {
+               DP_ERR(p_hwfn, "Wrong protocol: %d\n", p_eqe->protocol_id);
                return ECORE_INVAL;
+       }
 
        cb = p_hwfn->p_spq->async_comp_cb[p_eqe->protocol_id];
        if (cb) {
@@ -339,10 +341,16 @@ enum _ecore_status_t ecore_eq_completion(struct ecore_hwfn *p_hwfn,
 {
        struct ecore_eq *p_eq = cookie;
        struct ecore_chain *p_chain = &p_eq->chain;
+       u16 fw_cons_idx             = 0;
        enum _ecore_status_t rc = 0;
 
+       if (!p_hwfn->p_spq) {
+               DP_ERR(p_hwfn, "Unexpected NULL p_spq\n");
+               return ECORE_INVAL;
+       }
+
        /* take a snapshot of the FW consumer */
-       u16 fw_cons_idx = OSAL_LE16_TO_CPU(*p_eq->p_fw_cons);
+       fw_cons_idx = OSAL_LE16_TO_CPU(*p_eq->p_fw_cons);
 
        DP_VERBOSE(p_hwfn, ECORE_MSG_SPQ, "fw_cons_idx %x\n", fw_cons_idx);