mirror of
git://git.openwrt.org/openwrt/openwrt.git
synced 2024-12-27 09:02:33 +00:00
ramips: improve NAPI polling to increase GRO batch size
Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
798497c66e
commit
968b861612
@ -882,17 +882,17 @@ release_desc:
|
|||||||
rxd->rxd2 = RX_DMA_LSO;
|
rxd->rxd2 = RX_DMA_LSO;
|
||||||
|
|
||||||
ring->rx_calc_idx = idx;
|
ring->rx_calc_idx = idx;
|
||||||
|
done++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (done) {
|
||||||
/* make sure that all changes to the dma ring are flushed before
|
/* make sure that all changes to the dma ring are flushed before
|
||||||
* we continue
|
* we continue
|
||||||
*/
|
*/
|
||||||
wmb();
|
wmb();
|
||||||
fe_reg_w32(ring->rx_calc_idx, FE_REG_RX_CALC_IDX0);
|
fe_reg_w32(ring->rx_calc_idx, FE_REG_RX_CALC_IDX0);
|
||||||
done++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (done < budget)
|
|
||||||
fe_reg_w32(rx_intr, FE_REG_FE_INT_STATUS);
|
|
||||||
|
|
||||||
return done;
|
return done;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -928,16 +928,12 @@ static int fe_poll_tx(struct fe_priv *priv, int budget, u32 tx_intr,
|
|||||||
}
|
}
|
||||||
ring->tx_free_idx = idx;
|
ring->tx_free_idx = idx;
|
||||||
|
|
||||||
if (idx == hwidx) {
|
if (idx == hwidx)
|
||||||
/* read hw index again make sure no new tx packet */
|
/* read hw index again make sure no new tx packet */
|
||||||
hwidx = fe_reg_r32(FE_REG_TX_DTX_IDX0);
|
hwidx = fe_reg_r32(FE_REG_TX_DTX_IDX0);
|
||||||
if (idx == hwidx)
|
|
||||||
fe_reg_w32(tx_intr, FE_REG_FE_INT_STATUS);
|
if (idx != hwidx)
|
||||||
else
|
|
||||||
*tx_again = 1;
|
|
||||||
} else {
|
|
||||||
*tx_again = 1;
|
*tx_again = 1;
|
||||||
}
|
|
||||||
|
|
||||||
if (done) {
|
if (done) {
|
||||||
netdev_completed_queue(netdev, done, bytes_compl);
|
netdev_completed_queue(netdev, done, bytes_compl);
|
||||||
@ -958,8 +954,6 @@ static int fe_poll(struct napi_struct *napi, int budget)
|
|||||||
u32 status, fe_status, status_reg, mask;
|
u32 status, fe_status, status_reg, mask;
|
||||||
u32 tx_intr, rx_intr, status_intr;
|
u32 tx_intr, rx_intr, status_intr;
|
||||||
|
|
||||||
status = fe_reg_r32(FE_REG_FE_INT_STATUS);
|
|
||||||
fe_status = status;
|
|
||||||
tx_intr = priv->soc->tx_int;
|
tx_intr = priv->soc->tx_int;
|
||||||
rx_intr = priv->soc->rx_int;
|
rx_intr = priv->soc->rx_int;
|
||||||
status_intr = priv->soc->status_int;
|
status_intr = priv->soc->status_int;
|
||||||
@ -967,6 +961,7 @@ static int fe_poll(struct napi_struct *napi, int budget)
|
|||||||
rx_done = 0;
|
rx_done = 0;
|
||||||
tx_again = 0;
|
tx_again = 0;
|
||||||
|
|
||||||
|
fe_status = status = fe_reg_r32(FE_REG_FE_INT_STATUS);
|
||||||
if (fe_reg_table[FE_REG_FE_INT_STATUS2]) {
|
if (fe_reg_table[FE_REG_FE_INT_STATUS2]) {
|
||||||
fe_status = fe_reg_r32(FE_REG_FE_INT_STATUS2);
|
fe_status = fe_reg_r32(FE_REG_FE_INT_STATUS2);
|
||||||
status_reg = FE_REG_FE_INT_STATUS2;
|
status_reg = FE_REG_FE_INT_STATUS2;
|
||||||
@ -974,11 +969,14 @@ static int fe_poll(struct napi_struct *napi, int budget)
|
|||||||
status_reg = FE_REG_FE_INT_STATUS;
|
status_reg = FE_REG_FE_INT_STATUS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
poll_again:
|
||||||
|
fe_reg_w32(status & (rx_intr | tx_intr), FE_REG_FE_INT_STATUS);
|
||||||
|
|
||||||
if (status & tx_intr)
|
if (status & tx_intr)
|
||||||
tx_done = fe_poll_tx(priv, budget, tx_intr, &tx_again);
|
tx_done += fe_poll_tx(priv, budget, tx_intr, &tx_again);
|
||||||
|
|
||||||
if (status & rx_intr)
|
if (status & rx_intr)
|
||||||
rx_done = fe_poll_rx(napi, budget, priv, rx_intr);
|
rx_done += fe_poll_rx(napi, budget - rx_done, priv, rx_intr);
|
||||||
|
|
||||||
if (unlikely(fe_status & status_intr)) {
|
if (unlikely(fe_status & status_intr)) {
|
||||||
if (hwstat && spin_trylock(&hwstat->stats_lock)) {
|
if (hwstat && spin_trylock(&hwstat->stats_lock)) {
|
||||||
@ -1009,7 +1007,6 @@ static int fe_poll(struct napi_struct *napi, int budget)
|
|||||||
rx_done = budget;
|
rx_done = budget;
|
||||||
}
|
}
|
||||||
|
|
||||||
poll_again:
|
|
||||||
return rx_done;
|
return rx_done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user