[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1340619125.10893.20.camel@edumazet-glaptop>
Date: Mon, 25 Jun 2012 12:12:05 +0200
From: Eric Dumazet <eric.dumazet@...il.com>
To: David Laight <David.Laight@...LAB.COM>
Cc: David Miller <davem@...emloft.net>, yevgenyp@...lanox.co.il,
netdev@...r.kernel.org
Subject: RE: [PATCH 4/4] net/mlx4_en: Use atomic counter to decide when
queue is full
On Mon, 2012-06-25 at 10:00 +0100, David Laight wrote:
> > > The Transmit and transmit completion flows execute from different
> contexts,
> > > which are not synchronized. Hence naive reading the of consumer
> index might
> > > give wrong value by the time it is being used, That could lead to a
> state of transmit timeout.
> > > Fix that by using atomic variable to maintain that index.
> > >
> > > Signed-off-by: Yevgeny Petrilin <yevgenyp@...lanox.co.il>
> >
> > I'm not convinced. There is only one place that actually changes
> > the counter.
> >
> > So it seems more like you have a missing memory barrier somewhere.
>
> Or just keep the two ring indexes - instead of keeping the
> number of 'active' entries as well.
> Then you don't have a variable which the tx setup and
> tx completion routines both update.
This is what was implied by David.
Using a producer/consumer index and appropriate memory barriers.
start_xmit() and tx completion can be truly lockless and atomicless in
their fast path.
There are many drivers doing that correctly.
tg3 driver is a good example.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists