mirror of https://gitee.com/openkylin/linux.git
net: ethernet: ti: cpsw: optimize end of poll cycle
Check budget fullness only after it's updated and update channel mask only once to keep budget balance between channels. It's also needed for farther changes. Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
83fcad0c98
commit
342934a558
|
@ -788,19 +788,13 @@ static int cpsw_tx_poll(struct napi_struct *napi_tx, int budget)
|
||||||
|
|
||||||
/* process every unprocessed channel */
|
/* process every unprocessed channel */
|
||||||
ch_map = cpdma_ctrl_txchs_state(cpsw->dma);
|
ch_map = cpdma_ctrl_txchs_state(cpsw->dma);
|
||||||
for (ch = 0, num_tx = 0; num_tx < budget; ch_map >>= 1, ch++) {
|
for (ch = 0, num_tx = 0; ch_map; ch_map >>= 1, ch++) {
|
||||||
if (!ch_map) {
|
|
||||||
ch_map = cpdma_ctrl_txchs_state(cpsw->dma);
|
|
||||||
if (!ch_map)
|
|
||||||
break;
|
|
||||||
|
|
||||||
ch = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(ch_map & 0x01))
|
if (!(ch_map & 0x01))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
num_tx += cpdma_chan_process(cpsw->txch[ch], budget - num_tx);
|
num_tx += cpdma_chan_process(cpsw->txch[ch], budget - num_tx);
|
||||||
|
if (num_tx >= budget)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (num_tx < budget) {
|
if (num_tx < budget) {
|
||||||
|
@ -823,19 +817,13 @@ static int cpsw_rx_poll(struct napi_struct *napi_rx, int budget)
|
||||||
|
|
||||||
/* process every unprocessed channel */
|
/* process every unprocessed channel */
|
||||||
ch_map = cpdma_ctrl_rxchs_state(cpsw->dma);
|
ch_map = cpdma_ctrl_rxchs_state(cpsw->dma);
|
||||||
for (ch = 0, num_rx = 0; num_rx < budget; ch_map >>= 1, ch++) {
|
for (ch = 0, num_rx = 0; ch_map; ch_map >>= 1, ch++) {
|
||||||
if (!ch_map) {
|
|
||||||
ch_map = cpdma_ctrl_rxchs_state(cpsw->dma);
|
|
||||||
if (!ch_map)
|
|
||||||
break;
|
|
||||||
|
|
||||||
ch = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(ch_map & 0x01))
|
if (!(ch_map & 0x01))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
num_rx += cpdma_chan_process(cpsw->rxch[ch], budget - num_rx);
|
num_rx += cpdma_chan_process(cpsw->rxch[ch], budget - num_rx);
|
||||||
|
if (num_rx >= budget)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (num_rx < budget) {
|
if (num_rx < budget) {
|
||||||
|
|
Loading…
Reference in New Issue