From: Vladimir Oltean <olteanv@gmail.com>
To: Andrew Lunn <andrew@lunn.ch>
Cc: Jakub Kicinski <kuba@kernel.org>,
George McCollister <george.mccollister@gmail.com>,
Vivien Didelot <vivien.didelot@gmail.com>,
Florian Fainelli <f.fainelli@gmail.com>,
"David S . Miller" <davem@davemloft.net>,
netdev@vger.kernel.org,
"open list:OPEN FIRMWARE AND..." <devicetree@vger.kernel.org>
Subject: Re: [PATCH net-next v2 2/3] net: dsa: add Arrow SpeedChips XRS700x driver
Date: Sat, 28 Nov 2020 02:02:34 +0200 [thread overview]
Message-ID: <20201128000234.hwd5zo2d4giiikjc@skbuf> (raw)
In-Reply-To: <20201127233916.bmhvcep6sjs5so2e@skbuf>
On Sat, Nov 28, 2020 at 01:39:16AM +0200, Vladimir Oltean wrote:
> On Sat, Nov 28, 2020 at 12:30:48AM +0100, Andrew Lunn wrote:
> > > If there is a better alternative I'm all ears but having /proc and
> > > ifconfig return zeros for error counts while ip link doesn't will lead
> > > to too much confusion IMO. While delayed update of stats is a fact of
> > > life for _years_ now (hence it was backed into the ethtool -C API).
> >
> > How about dev_seq_start() issues a netdev notifier chain event, asking
> > devices which care to update their cached rtnl_link_stats64 counters.
> > They can decide if their cache is too old, and do a blocking read for
> > new values.
> >
> > Once the notifier has completed, dev_seq_start() can then
> > rcu_read_lock() and do the actual collection of stats from the drivers
> > non-blocking.
>
> That sounds smart. I can try to prototype that and see how well it
> works, or do you want to?
The situation is like this:
static int call_netdevice_notifiers_info(unsigned long val,
struct netdev_notifier_info *info);
expects a non-NULL info->dev argument.
To get a net device you need to call:
#define for_each_netdev(net, d) \
list_for_each_entry(d, &(net)->dev_base_head, dev_list)
which has the following protection rules:
/*
* The @dev_base_head list is protected by @dev_base_lock and the rtnl
* semaphore.
*
* Pure readers hold dev_base_lock for reading, or rcu_read_lock()
*
* Writers must hold the rtnl semaphore while they loop through the
* dev_base_head list, and hold dev_base_lock for writing when they do the
* actual updates. This allows pure readers to access the list even
* while a writer is preparing to update it.
*
* To put it another way, dev_base_lock is held for writing only to
* protect against pure readers; the rtnl semaphore provides the
* protection against other writers.
*
* See, for example usages, register_netdevice() and
* unregister_netdevice(), which must be called with the rtnl
* semaphore held.
*/
This means, as far as I understand, 2 things:
1. call_netdevice_notifiers_info doesn't help, since our problem is the
same
2. I think that holding the RTNL should also be a valid way to iterate
through the net devices in the current netns, and doing just that
could be the simplest way out. It certainly worked when I tried it.
But those could also be famous last words...
next prev parent reply other threads:[~2020-11-28 0:06 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-25 19:37 [PATCH net-next v2 0/3] Arrow SpeedChips XRS700x DSA Driver George McCollister
2020-11-25 19:37 ` [PATCH net-next v2 1/3] dsa: add support for Arrow XRS700x tag trailer George McCollister
2020-11-25 20:34 ` Andrew Lunn
2020-11-26 13:50 ` Vladimir Oltean
2020-11-26 14:01 ` Andrew Lunn
2020-11-26 14:28 ` Vladimir Oltean
2020-11-25 20:34 ` Andrew Lunn
2020-11-26 1:31 ` Florian Fainelli
2020-11-25 19:37 ` [PATCH net-next v2 2/3] net: dsa: add Arrow SpeedChips XRS700x driver George McCollister
2020-11-26 1:42 ` Jakub Kicinski
2020-11-26 2:25 ` George McCollister
2020-11-26 13:24 ` Vladimir Oltean
2020-11-26 17:56 ` Vladimir Oltean
2020-11-26 19:07 ` George McCollister
2020-11-26 22:05 ` Vladimir Oltean
2020-11-27 18:35 ` Jakub Kicinski
[not found] ` <CAFSKS=MAdnR2jzmkQfTnSQZ7GY5x5KJE=oeqPCQdbZdf5n=4ZQ@mail.gmail.com>
2020-11-27 19:50 ` Vladimir Oltean
2020-11-27 20:58 ` George McCollister
2020-11-27 21:37 ` Jakub Kicinski
2020-11-27 22:42 ` Vladimir Oltean
2020-11-27 23:21 ` Vladimir Oltean
2020-11-27 23:51 ` Jakub Kicinski
2020-11-27 23:30 ` Andrew Lunn
2020-11-27 23:39 ` Vladimir Oltean
2020-11-27 23:56 ` Jakub Kicinski
2020-11-28 1:45 ` Vladimir Oltean
2020-11-28 0:02 ` Vladimir Oltean [this message]
2020-11-28 0:39 ` Andrew Lunn
2020-11-28 1:41 ` Vladimir Oltean
2020-11-28 2:15 ` Jakub Kicinski
2020-11-30 16:52 ` George McCollister
2020-11-30 23:50 ` Vladimir Oltean
2020-11-30 23:58 ` George McCollister
2020-12-01 0:19 ` Vladimir Oltean
2020-11-27 20:47 ` Andrew Lunn
2020-11-27 21:13 ` Jakub Kicinski
2020-11-27 21:23 ` Vladimir Oltean
2020-11-27 21:36 ` Andrew Lunn
2020-12-02 0:28 ` Vladimir Oltean
2020-12-02 0:54 ` Jakub Kicinski
2020-11-27 22:03 ` Jakub Kicinski
2020-11-27 21:32 ` Andrew Lunn
2020-11-27 22:14 ` Jakub Kicinski
2020-11-27 22:46 ` Andrew Lunn
2020-11-25 19:37 ` [PATCH net-next v2 3/3] dt-bindings: net: dsa: add bindings for xrs700x switches George McCollister
2020-11-26 1:30 ` Florian Fainelli
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=20201128000234.hwd5zo2d4giiikjc@skbuf \
--to=olteanv@gmail.com \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=f.fainelli@gmail.com \
--cc=george.mccollister@gmail.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=vivien.didelot@gmail.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.