On Thu, Aug 25, 2016 at 9:45 AM, <f...@ikuai8.com> wrote: > From: Gao Feng <f...@ikuai8.com> > > When cp_rx_poll does not get enough packet, it will check the rx > interrupt status again. If so, it will jumpt to rx_status_loop again. > But the goto jump resets the rx variable as zero too. > > As a result, it causes one possible deadloop. Assume this case, > rx_status_loop only gets the packet count which is less than budget, > and (cpr16(IntrStatus) & cp_rx_intr_mask) condition is always true. > It causes the deadloop happens and system is blocked. > > Signed-off-by: Gao Feng <f...@ikuai8.com> > --- > drivers/net/ethernet/realtek/8139cp.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/realtek/8139cp.c > b/drivers/net/ethernet/realtek/8139cp.c > index deae10d..5297bf7 100644 > --- a/drivers/net/ethernet/realtek/8139cp.c > +++ b/drivers/net/ethernet/realtek/8139cp.c > @@ -467,8 +467,8 @@ static int cp_rx_poll(struct napi_struct *napi, int > budget) > unsigned int rx_tail = cp->rx_tail; > int rx; > > -rx_status_loop: > rx = 0; > +rx_status_loop: > cpw16(IntrStatus, cp_rx_intr_mask); > > while (rx < budget) { > -- > 1.9.1 > >
Sorry, this commit should be for net.git, not net-next.git Because it fixed one possible infinite loop. Best Regards Feng