From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Jiri Pirko <jpirko@redhat.com>
Cc: Neil Horman <nhorman@tuxdriver.com>,
Eric Dumazet <dada1@cosmosbay.com>,
netdev@vger.kernel.org, davem@davemloft.net
Subject: Re: [PATCH] dropmon: add ability to detect when hardwaredropsrxpackets
Date: Thu, 14 May 2009 09:17:28 -0700 [thread overview]
Message-ID: <20090514161728.GH6744@linux.vnet.ibm.com> (raw)
In-Reply-To: <20090514124407.GP3517@psychotron.englab.brq.redhat.com>
On Thu, May 14, 2009 at 02:44:08PM +0200, Jiri Pirko wrote:
> Thu, May 14, 2009 at 02:33:00PM CEST, nhorman@tuxdriver.com wrote:
> >>
> >> The purpose of list_add_rcu() and list_del_rcu() is to be able to permit
> >> concurrent readers to traverse the list while you are modifying that same
> >> list. You still need something to handle concurrent updates to the list.
> >> The usual approach is to use locks, in this case, to hold trace_state_lock
> >> across the addition, given that it is already held across the removal.
> >>
> >> The reason that I expect holding the lock to be OK is that you cannot
> >> add elements faster than you delete them long-term, so given that you
> >> are willing to hold the lock over deletions, you are probably OK also
> >> holding that same lock over additions. But please let me know if that
> >> is not the case!
> >>
> >> Thanx, Paul
> >>
> >
> >
> >Ahh, I did learn something then :). That makes sense, ok. New patch attached.
> >
> >Patch to add the ability to detect drops in hardware interfaces via dropwatch.
> >Adds a tracepoint to net_rx_action to signal everytime a napi instance is
> >polled. The dropmon code then periodically checks to see if the rx_frames
> >counter has changed, and if so, adds a drop notification to the netlink
> >protocol, using the reserved all-0's vector to indicate the drop location was in
> >hardware, rather than somewhere in the code.
> >
> >change notes:
> >1) added use of trace_state_lock around list_add_rcu operation
> >
> >
> >Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
> >
> >
> > include/linux/net_dropmon.h | 7 ++
> > include/trace/napi.h | 11 ++++
> > net/core/dev.c | 5 +
> > net/core/drop_monitor.c | 115 ++++++++++++++++++++++++++++++++++++++++++--
> > net/core/net-traces.c | 4 +
> > net/core/netpoll.c | 2
> > 6 files changed, 139 insertions(+), 5 deletions(-)
> >
> >diff --git a/include/linux/net_dropmon.h b/include/linux/net_dropmon.h
[ . . . ]
> > static int set_all_monitor_traces(int state)
> > {
> > int rc = 0;
> >+ struct dm_hw_stat_delta *new_stat = NULL;
> >+
> >+ spin_lock(&trace_state_lock);
> >
> > switch (state) {
> > case TRACE_ON:
> > rc |= register_trace_kfree_skb(trace_kfree_skb_hit);
> >+ rc |= register_trace_napi_poll(trace_napi_poll_hit);
> > break;
> > case TRACE_OFF:
> > rc |= unregister_trace_kfree_skb(trace_kfree_skb_hit);
> >+ rc |= unregister_trace_napi_poll(trace_napi_poll_hit);
> >
> > tracepoint_synchronize_unregister();
> >+
> >+ /*
> >+ * Clean the device list
> >+ */
> >+ list_for_each_entry_rcu(new_stat, &hw_stats_list, list) {
> ^^^^^^^^^^^^^^^^^^^^^^^
> This is meaningless here. Use list_for_each_entry_rcu only under rcu_read_lock.
> Also it would be good to use list_for_each_entry_safe here since you're
> modifying the list.
Either way works, as the list_del_rcu() leaves the forward pointers
intact. So I don't have an opinion either way on this particular piece
of code. More experience will be needed to work out which approach is
less confusing. :-/
If this code was shared between the read side and the update side, then
you really would want to be able to use list_for_each_entry_rcu() on the
update side.
Thanx, Paul
next prev parent reply other threads:[~2009-05-14 16:17 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-08 19:50 [PATCH] dropmon: add ability to detect when hardware drops rx packets Neil Horman
2009-05-09 6:30 ` Eric Dumazet
2009-05-09 18:07 ` Neil Horman
2009-05-12 16:30 ` Neil Horman
2009-05-13 18:23 ` [PATCH] dropmon: add ability to detect when hardware drops rxpackets Paul E. McKenney
2009-05-14 0:45 ` Neil Horman
2009-05-14 1:03 ` [PATCH] dropmon: add ability to detect when hardware dropsrxpackets Paul E. McKenney
2009-05-14 12:33 ` Neil Horman
2009-05-14 12:44 ` Jiri Pirko
2009-05-14 16:17 ` Paul E. McKenney [this message]
2009-05-14 17:29 ` Neil Horman
2009-05-15 5:49 ` Jarek Poplawski
2009-05-15 11:01 ` Neil Horman
2009-05-15 11:12 ` Jarek Poplawski
2009-05-15 11:15 ` Neil Horman
2009-05-15 11:40 ` Jarek Poplawski
2009-05-16 0:07 ` Paul E. McKenney
2009-05-15 6:51 ` Jiri Pirko
2009-05-15 7:37 ` Eric Dumazet
2009-05-15 11:12 ` Neil Horman
2009-05-15 10:59 ` Neil Horman
2009-05-15 11:27 ` Jiri Pirko
2009-05-15 16:07 ` Neil Horman
2009-05-15 18:11 ` Eric Dumazet
2009-05-15 18:23 ` Stephen Hemminger
2009-05-15 19:53 ` Neil Horman
2009-05-15 19:23 ` Neil Horman
2009-05-16 12:40 ` Neil Horman
2009-05-18 14:46 ` Neil Horman
2009-05-21 7:17 ` David Miller
2009-05-21 17:36 ` Neil Horman
2009-05-21 22:15 ` David Miller
2009-05-22 0:09 ` Neil Horman
2009-05-15 18:18 ` Stephen Hemminger
2009-05-15 19:12 ` Neil Horman
2009-05-14 16:18 ` [PATCH] dropmon: add ability to detect when hardwaredropsrxpackets Paul E. McKenney
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090514161728.GH6744@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=dada1@cosmosbay.com \
--cc=davem@davemloft.net \
--cc=jpirko@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=nhorman@tuxdriver.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.