Message ID | 1290606058-26703-5-git-send-email-jonas@southpole.se |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
On Wed, 2010-11-24 at 14:40 +0100, Jonas Bonn wrote: > Rewind cur_rx to prevent it from overflowing. > > Signed-off-by: Jonas Bonn <jonas@southpole.se> > --- > drivers/net/ethoc.c | 3 +++ > 1 files changed, 3 insertions(+), 0 deletions(-) > > diff --git a/drivers/net/ethoc.c b/drivers/net/ethoc.c > index 53c03f2..7d1b5d8 100644 > --- a/drivers/net/ethoc.c > +++ b/drivers/net/ethoc.c > @@ -408,6 +408,9 @@ static int ethoc_rx(struct net_device *dev, int limit) > struct ethoc *priv = netdev_priv(dev); > int count; > > + /* Prevent overflow of priv->cur_rx by rewinding it */ > + priv->cur_rx = priv->cur_rx % priv->num_rx; > + Division is expensive; you should either use masking (if priv->num_rx is guaranteed to be a power of 2) or check for overflow whenever you increment priv->cur_rx: if (++priv->cur_rx == priv->num_rx) priv->cur_rx = 0; Ben. > for (count = 0; count < limit; ++count) { > unsigned int entry; > struct ethoc_bd bd;
From: Jonas Bonn <jonas@southpole.se> Date: Wed, 24 Nov 2010 14:40:54 +0100 > Rewind cur_rx to prevent it from overflowing. > > Signed-off-by: Jonas Bonn <jonas@southpole.se> ... > + /* Prevent overflow of priv->cur_rx by rewinding it */ Trailing whitespace, also please integrate the feedback from Ben and Eric Dumazet about making this computation less expensive. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/ethoc.c b/drivers/net/ethoc.c index 53c03f2..7d1b5d8 100644 --- a/drivers/net/ethoc.c +++ b/drivers/net/ethoc.c @@ -408,6 +408,9 @@ static int ethoc_rx(struct net_device *dev, int limit) struct ethoc *priv = netdev_priv(dev); int count; + /* Prevent overflow of priv->cur_rx by rewinding it */ + priv->cur_rx = priv->cur_rx % priv->num_rx; + for (count = 0; count < limit; ++count) { unsigned int entry; struct ethoc_bd bd;
Rewind cur_rx to prevent it from overflowing. Signed-off-by: Jonas Bonn <jonas@southpole.se> --- drivers/net/ethoc.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-)