Re: [PATCH net-next v5 07/10] forcedeth: implementndo_get_stats64() API

From: Eric Dumazet
Date: Wed Nov 16 2011 - 15:32:38 EST


Le mercredi 16 novembre 2011 Ã 19:32 +0000, Ben Hutchings a Ãcrit :
> On Wed, 2011-11-16 at 11:25 -0800, David Decotigny wrote:
> > Thanks for your feedback on these concerns.
> >
> > On Wed, Nov 16, 2011 at 9:14 AM, Ben Hutchings
> > <bhutchings@xxxxxxxxxxxxxx> wrote:
> > > On Wed, 2011-11-16 at 08:55 -0800, Stephen Hemminger wrote:
> > >> Or realize that the Tx side is single threaded by dev->xmit_lock already
> > >> and the Rx side is single threaded by NAPI.
> > >
> > > Right.
> >
> > Yes, that's what I meant by "Each software stat field is updated by
> > one single writer." in a previous email. However, I think that TX and
> > RX paths are not always synchronized. So I'm afraid that if I'm using
> > a single seqcount, I might run into trouble in the absence of a lock
> > around each update.... and I'd really prefer to avoid such a lock. Are
> > you suggesting I should use 2 independent seqcounts? One for RX path,
> > the other for TX path, all this without a lock around writers?
>
> Yes, there should be 1 for each path.

David, drivers/net/ethernet/marvell/sky2.c contains code like that
(different syncpfor rx/tx)

TX path:
u64_stats_update_begin(&sky2->tx_stats.syncp);
++sky2->tx_stats.packets;
sky2->tx_stats.bytes += skb->len;
u64_stats_update_end(&sky2->tx_stats.syncp);


RX path:

u64_stats_update_begin(&sky2->rx_stats.syncp);
sky2->rx_stats.packets += packets;
sky2->rx_stats.bytes += bytes;
u64_stats_update_end(&sky2->rx_stats.syncp);


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/