From: Jiri Pirko <jiri@resnulli.us>
To: alejandro.lucero-palau@amd.com
Cc: netdev@vger.kernel.org, linux-net-drivers@amd.com,
davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com,
edumazet@google.com, habetsm.xilinx@gmail.com,
ecree.xilinx@gmail.com, linux-doc@vger.kernel.org,
corbet@lwn.net, jiri@nvidia.com
Subject: Re: [PATCH v4 net-next 1/8] sfc: add devlink support for ef100
Date: Tue, 31 Jan 2023 17:00:02 +0100 [thread overview]
Message-ID: <Y9k7Ap4Irby7vnWg@nanopsycho> (raw)
In-Reply-To: <20230131145822.36208-2-alejandro.lucero-palau@amd.com>
Tue, Jan 31, 2023 at 03:58:15PM CET, alejandro.lucero-palau@amd.com wrote:
>From: Alejandro Lucero <alejandro.lucero-palau@amd.com>
>
>Basic devlink infrastructure support.
>
>Signed-off-by: Alejandro Lucero <alejandro.lucero-palau@amd.com>
>---
> drivers/net/ethernet/sfc/Kconfig | 1 +
> drivers/net/ethernet/sfc/Makefile | 3 +-
> drivers/net/ethernet/sfc/ef100_netdev.c | 12 +++++
> drivers/net/ethernet/sfc/ef100_nic.c | 3 +-
> drivers/net/ethernet/sfc/efx_devlink.c | 71 +++++++++++++++++++++++++
> drivers/net/ethernet/sfc/efx_devlink.h | 22 ++++++++
> drivers/net/ethernet/sfc/net_driver.h | 2 +
> 7 files changed, 111 insertions(+), 3 deletions(-)
> create mode 100644 drivers/net/ethernet/sfc/efx_devlink.c
> create mode 100644 drivers/net/ethernet/sfc/efx_devlink.h
>
>diff --git a/drivers/net/ethernet/sfc/Kconfig b/drivers/net/ethernet/sfc/Kconfig
>index 0950e6b0508f..4af36ba8906b 100644
>--- a/drivers/net/ethernet/sfc/Kconfig
>+++ b/drivers/net/ethernet/sfc/Kconfig
>@@ -22,6 +22,7 @@ config SFC
> depends on PTP_1588_CLOCK_OPTIONAL
> select MDIO
> select CRC32
>+ select NET_DEVLINK
> help
> This driver supports 10/40-gigabit Ethernet cards based on
> the Solarflare SFC9100-family controllers.
>diff --git a/drivers/net/ethernet/sfc/Makefile b/drivers/net/ethernet/sfc/Makefile
>index 712a48d00069..55b9c73cd8ef 100644
>--- a/drivers/net/ethernet/sfc/Makefile
>+++ b/drivers/net/ethernet/sfc/Makefile
>@@ -6,7 +6,8 @@ sfc-y += efx.o efx_common.o efx_channels.o nic.o \
> mcdi.o mcdi_port.o mcdi_port_common.o \
> mcdi_functions.o mcdi_filters.o mcdi_mon.o \
> ef100.o ef100_nic.o ef100_netdev.o \
>- ef100_ethtool.o ef100_rx.o ef100_tx.o
>+ ef100_ethtool.o ef100_rx.o ef100_tx.o \
>+ efx_devlink.o
> sfc-$(CONFIG_SFC_MTD) += mtd.o
> sfc-$(CONFIG_SFC_SRIOV) += sriov.o ef10_sriov.o ef100_sriov.o ef100_rep.o \
> mae.o tc.o tc_bindings.o tc_counters.o
>diff --git a/drivers/net/ethernet/sfc/ef100_netdev.c b/drivers/net/ethernet/sfc/ef100_netdev.c
>index ddcc325ed570..b10a226f4a07 100644
>--- a/drivers/net/ethernet/sfc/ef100_netdev.c
>+++ b/drivers/net/ethernet/sfc/ef100_netdev.c
>@@ -24,6 +24,7 @@
> #include "rx_common.h"
> #include "ef100_sriov.h"
> #include "tc_bindings.h"
>+#include "efx_devlink.h"
>
> static void ef100_update_name(struct efx_nic *efx)
> {
>@@ -332,6 +333,8 @@ void ef100_remove_netdev(struct efx_probe_data *probe_data)
> efx_ef100_pci_sriov_disable(efx, true);
> #endif
>
>+ /* devlink lock */
>+ efx_fini_devlink_start(efx);
> ef100_unregister_netdev(efx);
>
> #ifdef CONFIG_SFC_SRIOV
>@@ -345,6 +348,9 @@ void ef100_remove_netdev(struct efx_probe_data *probe_data)
> kfree(efx->phy_data);
> efx->phy_data = NULL;
>
>+ /* devlink unlock */
>+ efx_fini_devlink(efx);
>+
> free_netdev(efx->net_dev);
> efx->net_dev = NULL;
> efx->state = STATE_PROBED;
>@@ -405,6 +411,10 @@ int ef100_probe_netdev(struct efx_probe_data *probe_data)
> /* Don't fail init if RSS setup doesn't work. */
> efx_mcdi_push_default_indir_table(efx, efx->n_rx_channels);
>
>+ /* devlink creation, registration and lock */
>+ if (efx_probe_devlink(efx))
Use variable to store the return value and check that in if.
>+ pci_info(efx->pci_dev, "devlink registration failed");
>+
> rc = ef100_register_netdev(efx);
> if (rc)
> goto fail;
>@@ -424,5 +434,7 @@ int ef100_probe_netdev(struct efx_probe_data *probe_data)
> }
>
> fail:
>+ /* devlink unlock */
>+ efx_probe_devlink_done(efx);
> return rc;
> }
>diff --git a/drivers/net/ethernet/sfc/ef100_nic.c b/drivers/net/ethernet/sfc/ef100_nic.c
>index ad686c671ab8..e4aacb4ec666 100644
>--- a/drivers/net/ethernet/sfc/ef100_nic.c
>+++ b/drivers/net/ethernet/sfc/ef100_nic.c
>@@ -1120,11 +1120,10 @@ int ef100_probe_netdev_pf(struct efx_nic *efx)
> return rc;
>
> rc = efx_ef100_get_base_mport(efx);
>- if (rc) {
>+ if (rc)
> netif_warn(efx, probe, net_dev,
> "Failed to probe base mport rc %d; representors will not function\n",
> rc);
>- }
I don't see how this hunk is related to this patch. Please remove.
>
> rc = efx_init_tc(efx);
> if (rc) {
>diff --git a/drivers/net/ethernet/sfc/efx_devlink.c b/drivers/net/ethernet/sfc/efx_devlink.c
>new file mode 100644
>index 000000000000..fab06aaa4b8a
>--- /dev/null
>+++ b/drivers/net/ethernet/sfc/efx_devlink.c
>@@ -0,0 +1,71 @@
>+// SPDX-License-Identifier: GPL-2.0-only
>+/****************************************************************************
>+ * Driver for AMD network controllers and boards
>+ * Copyright (C) 2023, Advanced Micro Devices, Inc.
>+ *
>+ * This program is free software; you can redistribute it and/or modify it
>+ * under the terms of the GNU General Public License version 2 as published
>+ * by the Free Software Foundation, incorporated herein by reference.
>+ */
>+
>+#include <linux/rtc.h>
>+#include "net_driver.h"
>+#include "ef100_nic.h"
>+#include "efx_devlink.h"
>+#include "nic.h"
>+#include "mcdi.h"
>+#include "mcdi_functions.h"
>+#include "mcdi_pcol.h"
>+
>+struct efx_devlink {
>+ struct efx_nic *efx;
>+};
>+
>+static const struct devlink_ops sfc_devlink_ops = {
>+};
>+
>+void efx_fini_devlink_start(struct efx_nic *efx)
>+{
>+ if (efx->devlink)
>+ devl_lock(efx->devlink);
>+}
>+
>+void efx_fini_devlink(struct efx_nic *efx)
>+{
>+ if (efx->devlink) {
>+ devl_unregister(efx->devlink);
>+ devl_unlock(efx->devlink);
>+ devlink_free(efx->devlink);
>+ efx->devlink = NULL;
>+ }
>+}
>+
>+int efx_probe_devlink(struct efx_nic *efx)
>+{
>+ struct efx_devlink *devlink_private;
>+
>+ if (efx->type->is_vf)
>+ return 0;
>+
>+ efx->devlink = devlink_alloc(&sfc_devlink_ops,
>+ sizeof(struct efx_devlink),
>+ &efx->pci_dev->dev);
>+ if (!efx->devlink)
>+ return -ENOMEM;
>+
>+ devl_lock(efx->devlink);
>+ devlink_private = devlink_priv(efx->devlink);
>+ devlink_private->efx = efx;
>+
>+ devl_register(efx->devlink);
>+
>+ return 0;
>+}
>+
>+void efx_probe_devlink_done(struct efx_nic *efx)
>+{
>+ if (!efx->devlink)
>+ return;
>+
>+ devl_unlock(efx->devlink);
>+}
>diff --git a/drivers/net/ethernet/sfc/efx_devlink.h b/drivers/net/ethernet/sfc/efx_devlink.h
>new file mode 100644
>index 000000000000..55d0d8aeca1e
>--- /dev/null
>+++ b/drivers/net/ethernet/sfc/efx_devlink.h
>@@ -0,0 +1,22 @@
>+/* SPDX-License-Identifier: GPL-2.0-only */
>+/****************************************************************************
>+ * Driver for AMD network controllers and boards
>+ * Copyright (C) 2023, Advanced Micro Devices, Inc.
>+ *
>+ * This program is free software; you can redistribute it and/or modify it
>+ * under the terms of the GNU General Public License version 2 as published
>+ * by the Free Software Foundation, incorporated herein by reference.
>+ */
>+
>+#ifndef _EFX_DEVLINK_H
>+#define _EFX_DEVLINK_H
>+
>+#include "net_driver.h"
>+#include <net/devlink.h>
>+
>+int efx_probe_devlink(struct efx_nic *efx);
>+void efx_probe_devlink_done(struct efx_nic *efx);
>+void efx_fini_devlink_start(struct efx_nic *efx);
>+void efx_fini_devlink(struct efx_nic *efx);
Odd naming... Just saying.
>+
>+#endif /* _EFX_DEVLINK_H */
>diff --git a/drivers/net/ethernet/sfc/net_driver.h b/drivers/net/ethernet/sfc/net_driver.h
>index 3b49e216768b..d036641dc043 100644
>--- a/drivers/net/ethernet/sfc/net_driver.h
>+++ b/drivers/net/ethernet/sfc/net_driver.h
>@@ -994,6 +994,7 @@ enum efx_xdp_tx_queues_mode {
> * xdp_rxq_info structures?
> * @netdev_notifier: Netdevice notifier.
> * @tc: state for TC offload (EF100).
>+ * @devlink: reference to devlink structure owned by this device
> * @mem_bar: The BAR that is mapped into membase.
> * @reg_base: Offset from the start of the bar to the function control window.
> * @monitor_work: Hardware monitor workitem
>@@ -1179,6 +1180,7 @@ struct efx_nic {
> struct notifier_block netdev_notifier;
> struct efx_tc_state *tc;
>
>+ struct devlink *devlink;
> unsigned int mem_bar;
> u32 reg_base;
>
>--
>2.17.1
>
next prev parent reply other threads:[~2023-01-31 16:00 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-31 14:58 [PATCH v4 net-next 0/8] sfc: devlink support for ef100 alejandro.lucero-palau
2023-01-31 14:58 ` [PATCH v4 net-next 1/8] sfc: add " alejandro.lucero-palau
2023-01-31 16:00 ` Jiri Pirko [this message]
2023-02-01 8:49 ` Lucero Palau, Alejandro
2023-02-01 9:07 ` Jiri Pirko
2023-02-01 19:01 ` Jakub Kicinski
2023-02-02 6:41 ` Lucero Palau, Alejandro
2023-02-02 9:24 ` Martin Habets
2023-02-02 17:43 ` Jakub Kicinski
2023-01-31 14:58 ` [PATCH v4 net-next 2/8] sfc: add devlink info " alejandro.lucero-palau
2023-01-31 16:03 ` Jiri Pirko
2023-02-01 9:09 ` Lucero Palau, Alejandro
2023-02-01 12:03 ` Jiri Pirko
2023-01-31 14:58 ` [PATCH v4 net-next 3/8] sfc: enumerate mports in ef100 alejandro.lucero-palau
2023-02-01 11:12 ` kernel test robot
2023-01-31 14:58 ` [PATCH v4 net-next 4/8] sfc: add mport lookup based on driver's mport data alejandro.lucero-palau
2023-01-31 14:58 ` [PATCH v4 net-next 5/8] sfc: add devlink port support for ef100 alejandro.lucero-palau
2023-01-31 16:12 ` Jiri Pirko
2023-02-01 9:03 ` Lucero Palau, Alejandro
2023-02-01 9:08 ` Jiri Pirko
2023-02-01 14:57 ` kernel test robot
2023-01-31 14:58 ` [PATCH v4 net-next 6/8] sfc: obtain device mac address based on firmware handle " alejandro.lucero-palau
2023-01-31 14:58 ` [PATCH v4 net-next 7/8] sfc: add support for devlink port_function_hw_addr_get in ef100 alejandro.lucero-palau
2023-02-01 19:15 ` kernel test robot
2023-01-31 14:58 ` [PATCH v4 net-next 8/8] sfc: add support for devlink port_function_hw_addr_set " alejandro.lucero-palau
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=Y9k7Ap4Irby7vnWg@nanopsycho \
--to=jiri@resnulli.us \
--cc=alejandro.lucero-palau@amd.com \
--cc=corbet@lwn.net \
--cc=davem@davemloft.net \
--cc=ecree.xilinx@gmail.com \
--cc=edumazet@google.com \
--cc=habetsm.xilinx@gmail.com \
--cc=jiri@nvidia.com \
--cc=kuba@kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-net-drivers@amd.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.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;
as well as URLs for NNTP newsgroup(s).