From: Stephen Hemminger <stephen@networkplumber.org>
To: Thomas Monjalon <thomas@monjalon.net>
Cc: dev@dpdk.org, "Yang, Qiming" <qiming.yang@intel.com>,
Stephen Hemminger <sthemmin@microsoft.com>
Subject: Re: [dpdk-dev] [RFC 01/14] ethdev: add link status read/write functions
Date: Fri, 5 Jan 2018 12:15:03 -0800 [thread overview]
Message-ID: <20180105121503.6fb6dff4@xeon-e3> (raw)
In-Reply-To: <2251657.F6TyrEKx4p@xps>
On Fri, 05 Jan 2018 15:24:48 +0100
Thomas Monjalon <thomas@monjalon.net> wrote:
> Stephen,
> Qiming was suggesting a name change for the functions.
> What do you think?
>
> 13/10/2017 17:12, Stephen Hemminger:
> > On Wed, 11 Oct 2017 08:32:12 +0000
> > "Yang, Qiming" <qiming.yang@intel.com> wrote:
> >
> > > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Stephen Hemminger
> > > > Sent: Saturday, July 15, 2017 2:30 AM
> > > > To: dev@dpdk.org
> > > > Cc: Stephen Hemminger <stephen@networkplumber.org>; Stephen Hemminger
> > > > <sthemmin@microsoft.com>
> > > > Subject: [dpdk-dev] [RFC 01/14] ethdev: add link status read/write functions
> > > >
> > > > Many drivers are all doing copy/paste of the same code to atomicly update the
> > > > link status. Reduce duplication, and allow for future changes by having common
> > > > function for this.
> > > >
> > > > Signed-off-by: Stephen Hemminger <sthemmin@microsoft.com>
> > > > ---
> > > > lib/librte_ether/rte_ethdev.c | 36 ++++++++++++++++++++++++++++++++++++
> > > > lib/librte_ether/rte_ethdev.h | 28 ++++++++++++++++++++++++++++
> > > > 2 files changed, 64 insertions(+)
> > > >
> > > > diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index
> > > > a1b744704f3a..7532fc6b65f0 100644
> > > > --- a/lib/librte_ether/rte_ethdev.c
> > > > +++ b/lib/librte_ether/rte_ethdev.c
> > > > @@ -1332,6 +1332,42 @@ rte_eth_link_get_nowait(uint8_t port_id, struct
> > > > rte_eth_link *eth_link) }
> > > >
> > > > int
> > > > +_rte_eth_link_update(struct rte_eth_dev *dev,
> > > > + const struct rte_eth_link *link)
> > > > +{
> > > > + volatile struct rte_eth_link *dev_link = &(dev->data->dev_link);
> > > > + struct rte_eth_link old;
> > > > +
> > > > + RTE_BUILD_BUG_ON(sizeof(*link) != sizeof(uint64_t));
> > > > +
> > > > + old = *dev_link;
> > > > +
> > > > + /* Only reason we use cmpset rather than set is
> > > > + * that on some architecture may use sign bit as a flag value.
> > > > + */
> > > > + while (rte_atomic64_cmpset((volatile uint64_t *)dev_link,
> > > > + *(volatile uint64_t *)dev_link,
> > > > + *(const uint64_t *)link) == 0)
> > > > + continue;
> > > > +
> > > > + return (old.link_status == link->link_status) ? -1 : 0; }
> > > > +
> > > > +void _rte_eth_link_read(struct rte_eth_dev *dev,
> > > > + struct rte_eth_link *link)
> > > > +{
> > > > + const uint64_t *src = (const uint64_t *)&(dev->data->dev_link);
> > > > + volatile uint64_t *dst = (uint64_t *)link;
> > > > +
> > > > + RTE_BUILD_BUG_ON(sizeof(*link) != sizeof(uint64_t));
> > > > +
> > > > + /* Note: this should never fail since both destination and expected
> > > > + * values are the same and are a pointer from caller.
> > > > + */
> > > > + rte_atomic64_cmpset(dst, *dst, *src);
> > > > +}
> > > > +
> > > > +int
> > > > rte_eth_stats_get(uint8_t port_id, struct rte_eth_stats *stats) {
> > > > struct rte_eth_dev *dev;
> > > > diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index
> > > > f6837278521c..974657933f23 100644
> > > > --- a/lib/librte_ether/rte_ethdev.h
> > > > +++ b/lib/librte_ether/rte_ethdev.h
> > > > @@ -2219,6 +2219,34 @@ void rte_eth_link_get(uint8_t port_id, struct
> > > > rte_eth_link *link);
> > > > */
> > > > void rte_eth_link_get_nowait(uint8_t port_id, struct rte_eth_link *link);
> > > >
> > > > +
> > > > +/**
> > > > + * @internal
> > > > + * Atomically write the link status for the specific device.
> > > > + * It is for use by DPDK device driver use only.
> > > > + * User applications should not call it
> > > > + *
> > > > + * @param dev
> > > > + * Pointer to struct rte_eth_dev.
> > > > + * @param link
> > > > + * New link status value.
> > > > + * @return
> > > > + * -1 if link state has changed, 0 if the same.
> > > > + */
> > > > +int _rte_eth_link_update(struct rte_eth_dev *dev,
> > > > + const struct rte_eth_link *link);
> > > > +
> > > This function is only do the atomically write, what do you think to change the function name to _rte_eth_atomic_write_link_status,
> > > Use name link_update makes me confused, and mix up it with dev_ops link_update.
> > > > +/**
> > > > + * @internal
> > > > + * Atomically read the link speed and status.
> > > > + * @param dev
> > > > + * Pointer to struct rte_eth_dev.
> > > > + * @param link
> > > > + * link status value.
> > > > + */
> > > > +void _rte_eth_link_read(struct rte_eth_dev *dev,
> > > > + struct rte_eth_link *link);
> > > > +
> > > This name is also not very clear. I think change to _rte_eth_atomic_read_link_status will better.
> > > > /**
> > > > * Retrieve the general I/O statistics of an Ethernet device.
> > > > *
> > > > --
> > > > 2.11.0
> > >
> >
> > The first set of patches was just trying to combine multiple copies of same code.
> > Every place was doing same thing for atomic update.
I would just change the name to linkstatsus update.
Also since writes of unsigned long are guaranteed atomic, the code could
be optimized on 64bit platforms.
next prev parent reply other threads:[~2018-01-05 20:15 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-14 18:30 [dpdk-dev] [RFC 00/14] link status API improvement and bugfixes Stephen Hemminger
2017-07-14 18:30 ` [dpdk-dev] [RFC 01/14] ethdev: add link status read/write functions Stephen Hemminger
2017-07-16 13:26 ` Andrew Rybchenko
2017-07-17 15:58 ` Stephen Hemminger
2017-07-17 16:12 ` Andrew Rybchenko
2017-07-17 16:21 ` Stephen Hemminger
2017-07-17 16:31 ` Andrew Rybchenko
2017-10-11 8:32 ` Yang, Qiming
2017-10-13 15:12 ` Stephen Hemminger
2018-01-05 14:24 ` Thomas Monjalon
2018-01-05 20:15 ` Stephen Hemminger [this message]
2017-07-14 18:30 ` [dpdk-dev] [RFC 02/14] virtio: use eth_link_read/write (and bug fix) Stephen Hemminger
2017-07-16 12:33 ` Andrew Rybchenko
2017-07-17 16:01 ` Stephen Hemminger
2017-07-17 16:14 ` [dpdk-dev] ***Spam*** " Andrew Rybchenko
2017-07-17 16:28 ` [dpdk-dev] " Stephen Hemminger
2018-01-05 15:04 ` Thomas Monjalon
2017-07-14 18:30 ` [dpdk-dev] [RFC 03/14] bnxt: use rte_link_update Stephen Hemminger
2017-07-14 18:30 ` [dpdk-dev] [RFC 04/14] vmxnet3: use rte_eth_link_update Stephen Hemminger
2017-07-14 18:30 ` [dpdk-dev] [RFC 05/14] dpaa2: " Stephen Hemminger
2017-07-14 18:30 ` [dpdk-dev] [RFC 06/14] nfp: " Stephen Hemminger
2017-07-14 18:30 ` [dpdk-dev] [RFC 07/14] e1000: " Stephen Hemminger
2017-07-14 18:30 ` [dpdk-dev] [RFC 08/14] ixgbe: " Stephen Hemminger
2017-07-14 18:30 ` [dpdk-dev] [RFC 09/14] sfc: use new rte_eth_link helpers Stephen Hemminger
2017-07-16 13:48 ` Andrew Rybchenko
2017-07-17 16:02 ` Stephen Hemminger
2017-07-17 16:19 ` Andrew Rybchenko
2017-07-14 18:30 ` [dpdk-dev] [RFC 10/14] i40e: use rte_eth_link_update (and bug fix) Stephen Hemminger
2017-07-14 18:30 ` [dpdk-dev] [RFC 11/14] liquidio: use _rte_eth_link_update Stephen Hemminger
2017-07-18 10:17 ` Shijith Thotton
2017-07-14 18:30 ` [dpdk-dev] [RFC 12/14] thunderx: " Stephen Hemminger
2017-07-14 18:30 ` [dpdk-dev] [RFC 13/14] szedata: " Stephen Hemminger
2017-07-16 12:46 ` Andrew Rybchenko
2017-07-14 18:30 ` [dpdk-dev] [RFC 14/14] enic: " Stephen Hemminger
2017-07-16 13:55 ` [dpdk-dev] [RFC 00/14] link status API improvement and bugfixes Andrew Rybchenko
2018-01-05 14:29 ` Thomas Monjalon
2018-01-05 20:18 ` Stephen Hemminger
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=20180105121503.6fb6dff4@xeon-e3 \
--to=stephen@networkplumber.org \
--cc=dev@dpdk.org \
--cc=qiming.yang@intel.com \
--cc=sthemmin@microsoft.com \
--cc=thomas@monjalon.net \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).