From: Jiri Pirko <jiri@resnulli.us>
To: Jakub Kicinski <jakub.kicinski@netronome.com>
Cc: davem@davemloft.net, netdev@vger.kernel.org, oss-drivers@netronome.com
Subject: Re: [PATCH net-next v2 3/7] nfp: register devlink ports of all reprs
Date: Mon, 4 Mar 2019 08:36:31 +0100 [thread overview]
Message-ID: <20190304073631.GU2314@nanopsycho> (raw)
In-Reply-To: <20190302110724.75d1bdf5@cakuba.netronome.com>
Sat, Mar 02, 2019 at 08:07:24PM CET, jakub.kicinski@netronome.com wrote:
>On Sat, 2 Mar 2019 09:43:47 +0100, Jiri Pirko wrote:
>> Fri, Mar 01, 2019 at 07:04:49PM CET, jakub.kicinski@netronome.com wrote:
>> >Register all representors as devlink ports.
>> >
>> >The port_index is slightly tricky to figure out, we use a bit of
>> >arbitrary math to create unique IDs for PCI ports.
>> >
>> >Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
>> >---
>> > .../net/ethernet/netronome/nfp/nfp_devlink.c | 40 ++++++++++++++++++-
>> > .../net/ethernet/netronome/nfp/nfp_net_repr.c | 16 +++++++-
>> > 2 files changed, 53 insertions(+), 3 deletions(-)
>> >
>> >diff --git a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
>> >index 9af3cb1f2f17..bf7fd9614152 100644
>> >--- a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
>> >+++ b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
>> >@@ -350,7 +350,8 @@ const struct devlink_ops nfp_devlink_ops = {
>> > .flash_update = nfp_devlink_flash_update,
>> > };
>> >
>> >-int nfp_devlink_port_init(struct nfp_app *app, struct nfp_port *port)
>> >+static int
>> >+nfp_devlink_port_init_phys(struct devlink *devlink, struct nfp_port *port)
>> > {
>> > struct nfp_eth_table_port eth_port;
>> > int ret;
>> >@@ -368,6 +369,27 @@ int nfp_devlink_port_init(struct nfp_app *app, struct nfp_port *port)
>> > return 0;
>> > }
>> >
>> >+int nfp_devlink_port_init(struct nfp_app *app, struct nfp_port *port)
>> >+{
>> >+ struct devlink *devlink = priv_to_devlink(app->pf);
>> >+
>> >+ switch (port->type) {
>> >+ case NFP_PORT_PHYS_PORT:
>> >+ return nfp_devlink_port_init_phys(devlink, port);
>> >+ case NFP_PORT_PF_PORT:
>> >+ devlink_port_type_eth_set(&port->dl_port, port->netdev);
>> >+ devlink_port_attrs_pci_pf_set(&port->dl_port, port->pf_id);
>> >+ return 0;
>> >+ case NFP_PORT_VF_PORT:
>> >+ devlink_port_type_eth_set(&port->dl_port, port->netdev);
>> >+ devlink_port_attrs_pci_vf_set(&port->dl_port, port->pf_id,
>> >+ port->vf_id);
>>
>> What is the reason to expose vf/pf id for switch port? Isn't it rather
>> an attribute of a peer?
>
>Naw, its an attribute of the port. I leave the ASIC via PF n or VF m
>of PF n. Whatever is on the other side is isolated from the topology
>of the ASIC.
Ok.
>
>Is the physical port ID an attribute of the other end of the cable?
>
>> >+ return 0;
>> >+ default:
>> >+ return -EINVAL;
>> >+ }
>> >+}
>> >+
>> > void nfp_devlink_port_clean(struct nfp_port *port)
>> > {
>> > }
>> >@@ -376,7 +398,21 @@ int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port)
>> > {
>> > struct devlink *devlink = priv_to_devlink(app->pf);
>> >
>> >- return devlink_port_register(devlink, &port->dl_port, port->eth_id);
>> >+ switch (port->type) {
>> >+ case NFP_PORT_PHYS_PORT:
>> >+ return devlink_port_register(devlink, &port->dl_port,
>> >+ port->eth_id);
>> >+ case NFP_PORT_PF_PORT:
>> >+ return devlink_port_register(devlink, &port->dl_port,
>> >+ (port->pf_id + 1) * 10000 +
>> >+ port->pf_split_id * 1000);
>>
>> Wait. What this 10000/1000 magic about?
>
>port_index has to be unique, I need some unique number here, as I
>stated both in the commit message and the cover letter, this is
>arbitrary.
You can at least use some defines for that.
>
>I can put the datapath port identifier in there but its (a)
>meaningless, (b) a bitfield, so it will look like 8972367083. And it
>may change depending on the FW load, so its not stable either.
>
>> >+ case NFP_PORT_VF_PORT:
>> >+ return devlink_port_register(devlink, &port->dl_port,
>> >+ (port->pf_id + 1) * 10000 +
>> >+ port->vf_id + 1);
>> >+ default:
>> >+ return -EINVAL;
>> >+ }
>> > }
>> >
>> > void nfp_devlink_port_unregister(struct nfp_port *port)
>> >diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
>> >index d2c803bb4e56..869d22760a6e 100644
>> >--- a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
>> >+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
>> >@@ -292,7 +292,9 @@ nfp_repr_transfer_features(struct net_device *netdev, struct net_device *lower)
>> >
>> > static void nfp_repr_clean(struct nfp_repr *repr)
>> > {
>> >+ nfp_devlink_port_unregister(repr->port);
>> > unregister_netdev(repr->netdev);
>> >+ nfp_devlink_port_clean(repr->port);
>> > nfp_app_repr_clean(repr->app, repr->netdev);
>> > dst_release((struct dst_entry *)repr->dst);
>> > nfp_port_free(repr->port);
>> >@@ -395,12 +397,24 @@ int nfp_repr_init(struct nfp_app *app, struct net_device *netdev,
>> > if (err)
>> > goto err_clean;
>> >
>> >- err = register_netdev(netdev);
>> >+ err = nfp_devlink_port_init(app, repr->port);
>> > if (err)
>> > goto err_repr_clean;
>> >
>> >+ err = register_netdev(netdev);
>> >+ if (err)
>> >+ goto err_port_clean;
>> >+
>> >+ err = nfp_devlink_port_register(app, repr->port);
>>
>> Don't you want to take my patch ("nfp: register devlink port before
>> netdev") to change order of register_netdev and devlink_port_register,
>> include it to this patchset before this patch and change the order in
>> this patch too? I think it would be clearer to do it from the beginning.
>
>This way both netdev and devlink_port can get registered fully
>initialized. Otherwise we'd get two notifications. Are we trying to
>establish some ordering rules to get around the rtnl locking? :)
The order of devlink_port_register and register_netdev is given by
layering. For example, for port change, the devlink_port is still there
and registered, only the netdev is unregistered and ib_dev registered
instead of vice versa. It has really no relation to rtnl locking.
>
>> >+ if (err)
>> >+ goto err_unreg_netdev;
>> >+
>> > return 0;
>> >
>> >+err_unreg_netdev:
>> >+ unregister_netdev(repr->netdev);
>> >+err_port_clean:
>> >+ nfp_devlink_port_clean(repr->port);
>> > err_repr_clean:
>> > nfp_app_repr_clean(app, netdev);
>> > err_clean:
next prev parent reply other threads:[~2019-03-04 7:46 UTC|newest]
Thread overview: 100+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-01 18:04 [PATCH net-next v2 0/7] devlink: expose PF and VF representors as ports Jakub Kicinski
2019-03-01 18:04 ` [PATCH net-next v2 1/7] nfp: split devlink port init from registration Jakub Kicinski
2019-03-01 18:04 ` [PATCH net-next v2 2/7] devlink: add PF and VF port flavours Jakub Kicinski
2019-03-01 18:04 ` [PATCH net-next v2 3/7] nfp: register devlink ports of all reprs Jakub Kicinski
2019-03-02 8:43 ` Jiri Pirko
2019-03-02 19:07 ` Jakub Kicinski
2019-03-04 7:36 ` Jiri Pirko [this message]
2019-03-04 23:32 ` Jakub Kicinski
2019-03-01 18:04 ` [PATCH net-next v2 4/7] devlink: allow subports on devlink PCI ports Jakub Kicinski
2019-03-02 9:41 ` Jiri Pirko
2019-03-02 19:48 ` Jakub Kicinski
2019-03-04 7:56 ` Jiri Pirko
2019-03-05 0:33 ` Jakub Kicinski
2019-03-05 11:06 ` Jiri Pirko
2019-03-05 17:15 ` Jakub Kicinski
2019-03-05 19:59 ` Parav Pandit
2019-03-06 12:20 ` Jiri Pirko
2019-03-06 17:56 ` Jakub Kicinski
2019-03-07 3:56 ` Parav Pandit
2019-03-07 9:48 ` Jiri Pirko
2019-03-08 2:52 ` Jakub Kicinski
2019-03-08 14:54 ` Jiri Pirko
2019-03-08 19:09 ` Jakub Kicinski
2019-03-11 8:52 ` Jiri Pirko
2019-03-12 2:10 ` Jakub Kicinski
2019-03-12 14:02 ` Jiri Pirko
2019-03-12 20:56 ` Jakub Kicinski
2019-03-13 6:07 ` Jiri Pirko
2019-03-13 16:17 ` Jakub Kicinski
2019-03-13 16:22 ` Jiri Pirko
2019-03-13 16:55 ` Jakub Kicinski
2019-03-14 7:38 ` Jiri Pirko
2019-03-14 22:09 ` Jakub Kicinski
2019-03-14 22:35 ` Parav Pandit
2019-03-14 23:39 ` Jakub Kicinski
2019-03-15 1:28 ` Parav Pandit
2019-03-15 1:31 ` Parav Pandit
2019-03-15 2:15 ` Samudrala, Sridhar
2019-03-15 2:40 ` Parav Pandit
[not found] ` <ae938b4f-5fa9-3c33-8ae6-eab2d3d9f1ec@intel.com>
2019-03-15 15:32 ` Parav Pandit
2019-03-15 20:08 ` Jiri Pirko
2019-03-15 20:44 ` Jakub Kicinski
2019-03-15 22:12 ` Parav Pandit
2019-03-16 1:16 ` Jakub Kicinski
2019-03-18 15:43 ` Parav Pandit
2019-03-18 19:29 ` Jakub Kicinski
2019-03-18 12:11 ` Jiri Pirko
2019-03-18 19:16 ` Jakub Kicinski
2019-03-21 8:45 ` Jiri Pirko
2019-03-21 15:14 ` Parav Pandit
2019-03-21 16:14 ` Jiri Pirko
2019-03-21 16:52 ` Parav Pandit
2019-03-21 17:20 ` Jiri Pirko
2019-03-21 17:34 ` Parav Pandit
2019-03-22 16:27 ` Jiri Pirko
2019-03-23 0:37 ` Parav Pandit
2019-03-15 21:59 ` Parav Pandit
2019-03-18 12:21 ` Jiri Pirko
2019-03-18 15:56 ` Parav Pandit
2019-03-18 16:22 ` Parav Pandit
2019-03-18 19:36 ` Jakub Kicinski
2019-03-18 19:44 ` Parav Pandit
2019-03-18 19:59 ` Jakub Kicinski
2019-03-18 20:35 ` Parav Pandit
2019-03-18 21:29 ` Jakub Kicinski
2019-03-18 22:11 ` Parav Pandit
2019-03-20 18:24 ` Parav Pandit
2019-03-20 20:22 ` Jakub Kicinski
2019-03-20 23:39 ` Parav Pandit
2019-03-21 9:08 ` Jiri Pirko
2019-03-21 15:03 ` Parav Pandit
2019-03-21 16:16 ` Jiri Pirko
2019-03-21 16:50 ` Parav Pandit
2019-03-21 17:23 ` Jiri Pirko
2019-03-21 17:42 ` Parav Pandit
2019-03-22 13:32 ` Jiri Pirko
2019-03-23 0:40 ` Parav Pandit
2019-03-25 20:34 ` Parav Pandit
2019-03-18 19:19 ` Jakub Kicinski
2019-03-18 19:38 ` Parav Pandit
2019-03-21 9:09 ` Jiri Pirko
2019-03-15 7:00 ` Jiri Pirko
[not found] ` <7227d58e-ac58-d549-b921-ca0a0dd3f4b0@intel.com>
2019-03-13 7:37 ` Jiri Pirko
2019-03-13 16:03 ` Samudrala, Sridhar
2019-03-13 16:24 ` Jiri Pirko
2019-03-04 11:19 ` Jiri Pirko
2019-03-05 0:40 ` Jakub Kicinski
2019-03-05 11:07 ` Jiri Pirko
2019-03-04 11:08 ` Jiri Pirko
2019-03-05 0:51 ` Jakub Kicinski
2019-03-05 11:09 ` Jiri Pirko
2019-03-01 18:04 ` [PATCH net-next v2 5/7] nfp: switch to devlink_port_get_phys_port_name() Jakub Kicinski
2019-03-01 18:04 ` [PATCH net-next v2 6/7] devlink: introduce port's peer netdevs Jakub Kicinski
2019-03-01 18:04 ` [PATCH net-next v2 7/7] nfp: expose PF " Jakub Kicinski
2019-03-02 10:13 ` [PATCH net-next v2 0/7] devlink: expose PF and VF representors as ports Jiri Pirko
2019-03-02 19:49 ` [oss-drivers] " Jakub Kicinski
2019-03-04 5:12 ` Parav Pandit
2019-03-04 18:22 ` David Miller
2019-03-20 20:25 ` Jakub Kicinski
2019-03-21 9:11 ` Jiri Pirko
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=20190304073631.GU2314@nanopsycho \
--to=jiri@resnulli.us \
--cc=davem@davemloft.net \
--cc=jakub.kicinski@netronome.com \
--cc=netdev@vger.kernel.org \
--cc=oss-drivers@netronome.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox