|
@@ -967,7 +967,12 @@ static int qlcnic_poll(struct napi_struct *napi, int budget)
|
|
|
tx_complete = qlcnic_process_cmd_ring(adapter, tx_ring,
|
|
|
budget);
|
|
|
work_done = qlcnic_process_rcv_ring(sds_ring, budget);
|
|
|
- if ((work_done < budget) && tx_complete) {
|
|
|
+
|
|
|
+ /* Check if we need a repoll */
|
|
|
+ if (!tx_complete)
|
|
|
+ work_done = budget;
|
|
|
+
|
|
|
+ if (work_done < budget) {
|
|
|
napi_complete(&sds_ring->napi);
|
|
|
if (test_bit(__QLCNIC_DEV_UP, &adapter->state)) {
|
|
|
qlcnic_enable_sds_intr(adapter, sds_ring);
|
|
@@ -992,6 +997,9 @@ static int qlcnic_tx_poll(struct napi_struct *napi, int budget)
|
|
|
napi_complete(&tx_ring->napi);
|
|
|
if (test_bit(__QLCNIC_DEV_UP, &adapter->state))
|
|
|
qlcnic_enable_tx_intr(adapter, tx_ring);
|
|
|
+ } else {
|
|
|
+ /* As qlcnic_process_cmd_ring() returned 0, we need a repoll*/
|
|
|
+ work_done = budget;
|
|
|
}
|
|
|
|
|
|
return work_done;
|
|
@@ -1950,7 +1958,12 @@ static int qlcnic_83xx_msix_sriov_vf_poll(struct napi_struct *napi, int budget)
|
|
|
|
|
|
tx_complete = qlcnic_process_cmd_ring(adapter, tx_ring, budget);
|
|
|
work_done = qlcnic_83xx_process_rcv_ring(sds_ring, budget);
|
|
|
- if ((work_done < budget) && tx_complete) {
|
|
|
+
|
|
|
+ /* Check if we need a repoll */
|
|
|
+ if (!tx_complete)
|
|
|
+ work_done = budget;
|
|
|
+
|
|
|
+ if (work_done < budget) {
|
|
|
napi_complete(&sds_ring->napi);
|
|
|
qlcnic_enable_sds_intr(adapter, sds_ring);
|
|
|
}
|
|
@@ -1973,7 +1986,12 @@ static int qlcnic_83xx_poll(struct napi_struct *napi, int budget)
|
|
|
|
|
|
tx_complete = qlcnic_process_cmd_ring(adapter, tx_ring, budget);
|
|
|
work_done = qlcnic_83xx_process_rcv_ring(sds_ring, budget);
|
|
|
- if ((work_done < budget) && tx_complete) {
|
|
|
+
|
|
|
+ /* Check if we need a repoll */
|
|
|
+ if (!tx_complete)
|
|
|
+ work_done = budget;
|
|
|
+
|
|
|
+ if (work_done < budget) {
|
|
|
napi_complete(&sds_ring->napi);
|
|
|
qlcnic_enable_sds_intr(adapter, sds_ring);
|
|
|
}
|
|
@@ -1995,6 +2013,9 @@ static int qlcnic_83xx_msix_tx_poll(struct napi_struct *napi, int budget)
|
|
|
napi_complete(&tx_ring->napi);
|
|
|
if (test_bit(__QLCNIC_DEV_UP , &adapter->state))
|
|
|
qlcnic_enable_tx_intr(adapter, tx_ring);
|
|
|
+ } else {
|
|
|
+ /* need a repoll */
|
|
|
+ work_done = budget;
|
|
|
}
|
|
|
|
|
|
return work_done;
|