net/bnxt: add dpool allocator for EM allocation
[dpdk.git] / drivers / net / qede / qede_sriov.c
index 93f7a2a..0b99a8d 100644 (file)
@@ -151,6 +151,7 @@ static void qed_handle_bulletin_post(struct ecore_hwfn *hwfn)
 void qed_iov_pf_task(void *arg)
 {
        struct ecore_hwfn *p_hwfn = arg;
+       int rc;
 
        if (OSAL_GET_BIT(QED_IOV_WQ_MSG_FLAG, &p_hwfn->iov_task_flags)) {
                OSAL_CLEAR_BIT(QED_IOV_WQ_MSG_FLAG, &p_hwfn->iov_task_flags);
@@ -163,6 +164,23 @@ void qed_iov_pf_task(void *arg)
                               &p_hwfn->iov_task_flags);
                qed_handle_bulletin_post(p_hwfn);
        }
+
+       if (OSAL_GET_BIT(QED_IOV_WQ_FLR_FLAG, &p_hwfn->iov_task_flags)) {
+               struct ecore_ptt *p_ptt = ecore_ptt_acquire(p_hwfn);
+
+               OSAL_CLEAR_BIT(QED_IOV_WQ_FLR_FLAG, &p_hwfn->iov_task_flags);
+
+               if (!p_ptt) {
+                       qed_schedule_iov(p_hwfn, QED_IOV_WQ_FLR_FLAG);
+                       return;
+               }
+
+               rc = ecore_iov_vf_flr_cleanup(p_hwfn, p_ptt);
+               if (rc)
+                       qed_schedule_iov(p_hwfn, QED_IOV_WQ_FLR_FLAG);
+
+               ecore_ptt_release(p_hwfn, p_ptt);
+       }
 }
 
 int qed_schedule_iov(struct ecore_hwfn *p_hwfn, enum qed_iov_wq_flag flag)