On Mon, Aug 28, 2017 at 01:40:30PM -0400, Michael Chan wrote: > If we cannot allocate RX buffers in the NAPI poll loop when processing > an RX event, the current code does not count that event towards the NAPI > budget. This can cause us to potentially loop forever in NAPI if we > consistently cannot allocate new buffers. Improve it by counting > -ENOMEM event as 1 towards the NAPI budget. > > Cc: Martin KaFai Lau <ka...@fb.com> > Signed-off-by: Michael Chan <michael.c...@broadcom.com> Thanks for fixing it.
Reported-by: Martin KaFai Lau <ka...@fb.com> Acked-by: Martin KaFai Lau <ka...@fb.com> > --- > drivers/net/ethernet/broadcom/bnxt/bnxt.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c > b/drivers/net/ethernet/broadcom/bnxt/bnxt.c > index 1afb408..a34fcdd 100644 > --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c > +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c > @@ -1850,6 +1850,13 @@ static int bnxt_poll_work(struct bnxt *bp, struct > bnxt_napi *bnapi, int budget) > &event); > if (likely(rc >= 0)) > rx_pkts += rc; > + /* Increment rx_pkts when rc is -ENOMEM to count towards > + * the NAPI budget. Otherwise, we may potentially loop > + * here forever if we consistently cannot allocate > + * buffers. > + */ > + else if (rc == -ENOMEM) > + rx_pkts++; > else if (rc == -EBUSY) /* partial completion */ > break; > } else if (unlikely((TX_CMP_TYPE(txcmp) == > -- > 1.8.3.1 >