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:
Ivan Khoronzhuk 2016-11-29 17:00:50 +02:00 committed by David S. Miller
parent 83fcad0c98
commit 342934a558
1 changed files with 6 additions and 18 deletions

View File

@ -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) {