Commit 340ac85e authored by Michael Chan's avatar Michael Chan Committed by David S. Miller

bnxt_en: Simplify __bnxt_poll_cqs_done().

Simplify the function by removing tha 'all' parameter.  In the current
code, the caller has to specify whether to update/arm both completion
rings with the 'all' parameter.

Instead of this, we can just update/arm all the completion rings
that have been polled.  By setting cpr->had_work_done earlier in
__bnxt_poll_work(), we know which completion ring has been polled
and can just update/arm all the completion rings with
cpr->had_work_done set.

This simplifies the function with one less parameter and works just
as well.
Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 54a9062f
...@@ -2162,6 +2162,7 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, ...@@ -2162,6 +2162,7 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
struct tx_cmp *txcmp; struct tx_cmp *txcmp;
cpr->has_more_work = 0; cpr->has_more_work = 0;
cpr->had_work_done = 1;
while (1) { while (1) {
int rc; int rc;
...@@ -2175,7 +2176,6 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, ...@@ -2175,7 +2176,6 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
* reading any further. * reading any further.
*/ */
dma_rmb(); dma_rmb();
cpr->had_work_done = 1;
if (TX_CMP_TYPE(txcmp) == CMP_TYPE_TX_L2_CMP) { if (TX_CMP_TYPE(txcmp) == CMP_TYPE_TX_L2_CMP) {
tx_pkts++; tx_pkts++;
/* return full budget so NAPI will complete. */ /* return full budget so NAPI will complete. */
...@@ -2392,7 +2392,7 @@ static int __bnxt_poll_cqs(struct bnxt *bp, struct bnxt_napi *bnapi, int budget) ...@@ -2392,7 +2392,7 @@ static int __bnxt_poll_cqs(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
} }
static void __bnxt_poll_cqs_done(struct bnxt *bp, struct bnxt_napi *bnapi, static void __bnxt_poll_cqs_done(struct bnxt *bp, struct bnxt_napi *bnapi,
u64 dbr_type, bool all) u64 dbr_type)
{ {
struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring; struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
int i; int i;
...@@ -2401,7 +2401,7 @@ static void __bnxt_poll_cqs_done(struct bnxt *bp, struct bnxt_napi *bnapi, ...@@ -2401,7 +2401,7 @@ static void __bnxt_poll_cqs_done(struct bnxt *bp, struct bnxt_napi *bnapi,
struct bnxt_cp_ring_info *cpr2 = cpr->cp_ring_arr[i]; struct bnxt_cp_ring_info *cpr2 = cpr->cp_ring_arr[i];
struct bnxt_db_info *db; struct bnxt_db_info *db;
if (cpr2 && (all || cpr2->had_work_done)) { if (cpr2 && cpr2->had_work_done) {
db = &cpr2->cp_db; db = &cpr2->cp_db;
writeq(db->db_key64 | dbr_type | writeq(db->db_key64 | dbr_type |
RING_CMP(cpr2->cp_raw_cons), db->doorbell); RING_CMP(cpr2->cp_raw_cons), db->doorbell);
...@@ -2425,10 +2425,10 @@ static int bnxt_poll_p5(struct napi_struct *napi, int budget) ...@@ -2425,10 +2425,10 @@ static int bnxt_poll_p5(struct napi_struct *napi, int budget)
cpr->has_more_work = 0; cpr->has_more_work = 0;
work_done = __bnxt_poll_cqs(bp, bnapi, budget); work_done = __bnxt_poll_cqs(bp, bnapi, budget);
if (cpr->has_more_work) { if (cpr->has_more_work) {
__bnxt_poll_cqs_done(bp, bnapi, DBR_TYPE_CQ, false); __bnxt_poll_cqs_done(bp, bnapi, DBR_TYPE_CQ);
return work_done; return work_done;
} }
__bnxt_poll_cqs_done(bp, bnapi, DBR_TYPE_CQ_ARMALL, true); __bnxt_poll_cqs_done(bp, bnapi, DBR_TYPE_CQ_ARMALL);
if (napi_complete_done(napi, work_done)) if (napi_complete_done(napi, work_done))
BNXT_DB_NQ_ARM_P5(&cpr->cp_db, cpr->cp_raw_cons); BNXT_DB_NQ_ARM_P5(&cpr->cp_db, cpr->cp_raw_cons);
return work_done; return work_done;
...@@ -2441,8 +2441,7 @@ static int bnxt_poll_p5(struct napi_struct *napi, int budget) ...@@ -2441,8 +2441,7 @@ static int bnxt_poll_p5(struct napi_struct *napi, int budget)
if (cpr->has_more_work) if (cpr->has_more_work)
break; break;
__bnxt_poll_cqs_done(bp, bnapi, DBR_TYPE_CQ_ARMALL, __bnxt_poll_cqs_done(bp, bnapi, DBR_TYPE_CQ_ARMALL);
false);
cpr->cp_raw_cons = raw_cons; cpr->cp_raw_cons = raw_cons;
if (napi_complete_done(napi, work_done)) if (napi_complete_done(napi, work_done))
BNXT_DB_NQ_ARM_P5(&cpr->cp_db, BNXT_DB_NQ_ARM_P5(&cpr->cp_db,
...@@ -2468,7 +2467,7 @@ static int bnxt_poll_p5(struct napi_struct *napi, int budget) ...@@ -2468,7 +2467,7 @@ static int bnxt_poll_p5(struct napi_struct *napi, int budget)
} }
raw_cons = NEXT_RAW_CMP(raw_cons); raw_cons = NEXT_RAW_CMP(raw_cons);
} }
__bnxt_poll_cqs_done(bp, bnapi, DBR_TYPE_CQ, true); __bnxt_poll_cqs_done(bp, bnapi, DBR_TYPE_CQ);
cpr->cp_raw_cons = raw_cons; cpr->cp_raw_cons = raw_cons;
return work_done; return work_done;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment