Skip to content

Commit

Permalink
net: ethernet: mtk_eth_soc: rework NAPI callbacks
Browse files Browse the repository at this point in the history
Use napi_complete_done to communicate total TX and RX work done to NAPI.
Count total RX work up instead of remaining work down for clarity.
Remove unneeded local variables for clarity. Use do {} while instead of
goto for clarity.

Suggested-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Ilya Lipnitskiy authored and David S. Miller committed Apr 23, 2021
1 parent 16769a8 commit db2c7b3
Showing 1 changed file with 24 additions and 30 deletions.
54 changes: 24 additions & 30 deletions drivers/net/ethernet/mediatek/mtk_eth_soc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1496,7 +1496,6 @@ static void mtk_handle_status_irq(struct mtk_eth *eth)
static int mtk_napi_tx(struct napi_struct *napi, int budget)
{
struct mtk_eth *eth = container_of(napi, struct mtk_eth, tx_napi);
u32 status, mask;
int tx_done = 0;

if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
Expand All @@ -1505,21 +1504,19 @@ static int mtk_napi_tx(struct napi_struct *napi, int budget)
tx_done = mtk_poll_tx(eth, budget);

if (unlikely(netif_msg_intr(eth))) {
status = mtk_r32(eth, eth->tx_int_status_reg);
mask = mtk_r32(eth, eth->tx_int_mask_reg);
dev_info(eth->dev,
"done tx %d, intr 0x%08x/0x%x\n",
tx_done, status, mask);
"done tx %d, intr 0x%08x/0x%x\n", tx_done,
mtk_r32(eth, eth->tx_int_status_reg),
mtk_r32(eth, eth->tx_int_mask_reg));
}

if (tx_done == budget)
return budget;

status = mtk_r32(eth, eth->tx_int_status_reg);
if (status & MTK_TX_DONE_INT)
if (mtk_r32(eth, eth->tx_int_status_reg) & MTK_TX_DONE_INT)
return budget;

if (napi_complete(napi))
if (napi_complete_done(napi, tx_done))
mtk_tx_irq_enable(eth, MTK_TX_DONE_INT);

return tx_done;
Expand All @@ -1528,36 +1525,33 @@ static int mtk_napi_tx(struct napi_struct *napi, int budget)
static int mtk_napi_rx(struct napi_struct *napi, int budget)
{
struct mtk_eth *eth = container_of(napi, struct mtk_eth, rx_napi);
u32 status, mask;
int rx_done = 0;
int remain_budget = budget;
int rx_done_total = 0;

mtk_handle_status_irq(eth);

poll_again:
mtk_w32(eth, MTK_RX_DONE_INT, MTK_PDMA_INT_STATUS);
rx_done = mtk_poll_rx(napi, remain_budget, eth);
do {
int rx_done;

if (unlikely(netif_msg_intr(eth))) {
status = mtk_r32(eth, MTK_PDMA_INT_STATUS);
mask = mtk_r32(eth, MTK_PDMA_INT_MASK);
dev_info(eth->dev,
"done rx %d, intr 0x%08x/0x%x\n",
rx_done, status, mask);
}
if (rx_done == remain_budget)
return budget;
mtk_w32(eth, MTK_RX_DONE_INT, MTK_PDMA_INT_STATUS);
rx_done = mtk_poll_rx(napi, budget - rx_done_total, eth);
rx_done_total += rx_done;

status = mtk_r32(eth, MTK_PDMA_INT_STATUS);
if (status & MTK_RX_DONE_INT) {
remain_budget -= rx_done;
goto poll_again;
}
if (unlikely(netif_msg_intr(eth))) {
dev_info(eth->dev,
"done rx %d, intr 0x%08x/0x%x\n", rx_done,
mtk_r32(eth, MTK_PDMA_INT_STATUS),
mtk_r32(eth, MTK_PDMA_INT_MASK));
}

if (rx_done_total == budget)
return budget;

} while (mtk_r32(eth, MTK_PDMA_INT_STATUS) & MTK_RX_DONE_INT);

if (napi_complete(napi))
if (napi_complete_done(napi, rx_done_total))
mtk_rx_irq_enable(eth, MTK_RX_DONE_INT);

return rx_done + budget - remain_budget;
return rx_done_total;
}

static int mtk_tx_alloc(struct mtk_eth *eth)
Expand Down

0 comments on commit db2c7b3

Please sign in to comment.