net: ravb: Align poll function with NAPI docs
Align ravb_poll() with the documentation in `Documentation/networking/kapi.rst` and `Documentation/networking/napi.rst`. The documentation says that we should prefer napi_complete_done() over napi_complete(), and using the former allows us to properly support busy polling. We should ensure that napi_complete_done() is only called if the work budget has not been exhausted, and we should only re-arm interrupts if it returns true. Signed-off-by: Paul Barker <paul.barker.ct@bp.renesas.com> Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
@@ -1341,23 +1341,19 @@ static int ravb_poll(struct napi_struct *napi, int budget)
|
||||
if (priv->rx_fifo_errors != ndev->stats.rx_fifo_errors)
|
||||
ndev->stats.rx_fifo_errors = priv->rx_fifo_errors;
|
||||
|
||||
if (work_done == budget)
|
||||
goto out;
|
||||
|
||||
napi_complete(napi);
|
||||
|
||||
/* Re-enable RX/TX interrupts */
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
if (!info->irq_en_dis) {
|
||||
ravb_modify(ndev, RIC0, mask, mask);
|
||||
ravb_modify(ndev, TIC, mask, mask);
|
||||
} else {
|
||||
ravb_write(ndev, mask, RIE0);
|
||||
ravb_write(ndev, mask, TIE);
|
||||
if (work_done < budget && napi_complete_done(napi, work_done)) {
|
||||
/* Re-enable RX/TX interrupts */
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
if (!info->irq_en_dis) {
|
||||
ravb_modify(ndev, RIC0, mask, mask);
|
||||
ravb_modify(ndev, TIC, mask, mask);
|
||||
} else {
|
||||
ravb_write(ndev, mask, RIE0);
|
||||
ravb_write(ndev, mask, TIE);
|
||||
}
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
}
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
|
||||
out:
|
||||
return work_done;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user