From: David Arinzon <darinzon@amazon.com>
To: David Miller <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, <netdev@vger.kernel.org>
Cc: David Arinzon <darinzon@amazon.com>,
"Machulsky, Zorik" <zorik@amazon.com>,
"Matushevsky, Alexander" <matua@amazon.com>,
Saeed Bshara <saeedb@amazon.com>,
"Bshara, Nafea" <nafea@amazon.com>,
"Saidi, Ali" <alisaidi@amazon.com>,
"Kiyanovski, Arthur" <akiyano@amazon.com>,
"Dagan, Noam" <ndagan@amazon.com>,
"Agroskin, Shay" <shayagr@amazon.com>,
"Itzko, Shahar" <itzko@amazon.com>,
"Abboud, Osama" <osamaabb@amazon.com>
Subject: [PATCH V1 net-next 1/5] net: ena: Register ena device to devlink
Date: Sun, 8 Jan 2023 10:35:29 +0000 [thread overview]
Message-ID: <20230108103533.10104-2-darinzon@amazon.com> (raw)
In-Reply-To: <20230108103533.10104-1-darinzon@amazon.com>
This patch registers ena as a device that supports devlink.
This makes it listed when running
$ devlink dev show
The patch lands the base upon which the driver's devlink callbacks will
be added.
Signed-off-by: Shay Agroskin <shayagr@amazon.com>
Signed-off-by: David Arinzon <darinzon@amazon.com>
---
drivers/net/ethernet/amazon/Kconfig | 1 +
drivers/net/ethernet/amazon/ena/Makefile | 2 +-
drivers/net/ethernet/amazon/ena/ena_devlink.c | 42 +++++++++++++++++++
drivers/net/ethernet/amazon/ena/ena_devlink.h | 20 +++++++++
drivers/net/ethernet/amazon/ena/ena_netdev.c | 24 ++++++++++-
drivers/net/ethernet/amazon/ena/ena_netdev.h | 2 +
6 files changed, 88 insertions(+), 3 deletions(-)
create mode 100644 drivers/net/ethernet/amazon/ena/ena_devlink.c
create mode 100644 drivers/net/ethernet/amazon/ena/ena_devlink.h
diff --git a/drivers/net/ethernet/amazon/Kconfig b/drivers/net/ethernet/amazon/Kconfig
index c37fa393b99e..8f1b3302a89e 100644
--- a/drivers/net/ethernet/amazon/Kconfig
+++ b/drivers/net/ethernet/amazon/Kconfig
@@ -18,6 +18,7 @@ if NET_VENDOR_AMAZON
config ENA_ETHERNET
tristate "Elastic Network Adapter (ENA) support"
+ select NET_DEVLINK
depends on PCI_MSI && !CPU_BIG_ENDIAN
select DIMLIB
help
diff --git a/drivers/net/ethernet/amazon/ena/Makefile b/drivers/net/ethernet/amazon/ena/Makefile
index f1f752a8f7bb..34abcedd9132 100644
--- a/drivers/net/ethernet/amazon/ena/Makefile
+++ b/drivers/net/ethernet/amazon/ena/Makefile
@@ -5,4 +5,4 @@
obj-$(CONFIG_ENA_ETHERNET) += ena.o
-ena-y := ena_netdev.o ena_com.o ena_eth_com.o ena_ethtool.o
+ena-y := ena_netdev.o ena_com.o ena_eth_com.o ena_ethtool.o ena_devlink.o
diff --git a/drivers/net/ethernet/amazon/ena/ena_devlink.c b/drivers/net/ethernet/amazon/ena/ena_devlink.c
new file mode 100644
index 000000000000..6897d60d8376
--- /dev/null
+++ b/drivers/net/ethernet/amazon/ena/ena_devlink.c
@@ -0,0 +1,42 @@
+// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
+/*
+ * Copyright 2015-2021 Amazon.com, Inc. or its affiliates. All rights reserved.
+ */
+
+#include "linux/pci.h"
+
+#include "ena_devlink.h"
+
+static const struct devlink_ops ena_devlink_ops = {};
+
+struct devlink *ena_devlink_alloc(struct ena_adapter *adapter)
+{
+ struct device *dev = &adapter->pdev->dev;
+ struct devlink *devlink;
+
+ devlink = devlink_alloc(&ena_devlink_ops, sizeof(struct ena_adapter *), dev);
+ if (!devlink) {
+ netdev_err(adapter->netdev, "Failed to allocate devlink struct\n");
+ return NULL;
+ }
+
+ ENA_DEVLINK_PRIV(devlink) = adapter;
+ adapter->devlink = devlink;
+
+ return devlink;
+}
+
+void ena_devlink_free(struct devlink *devlink)
+{
+ devlink_free(devlink);
+}
+
+void ena_devlink_register(struct devlink *devlink, struct device *dev)
+{
+ devlink_register(devlink);
+}
+
+void ena_devlink_unregister(struct devlink *devlink)
+{
+ devlink_unregister(devlink);
+}
diff --git a/drivers/net/ethernet/amazon/ena/ena_devlink.h b/drivers/net/ethernet/amazon/ena/ena_devlink.h
new file mode 100644
index 000000000000..6f737884b850
--- /dev/null
+++ b/drivers/net/ethernet/amazon/ena/ena_devlink.h
@@ -0,0 +1,20 @@
+/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
+/*
+ * Copyright 2015-2021 Amazon.com, Inc. or its affiliates. All rights reserved.
+ */
+
+#ifndef DEVLINK_H
+#define DEVLINK_H
+
+#include "ena_netdev.h"
+#include <net/devlink.h>
+
+#define ENA_DEVLINK_PRIV(devlink) \
+ (*(struct ena_adapter **)devlink_priv(devlink))
+
+struct devlink *ena_devlink_alloc(struct ena_adapter *adapter);
+void ena_devlink_free(struct devlink *devlink);
+void ena_devlink_register(struct devlink *devlink, struct device *dev);
+void ena_devlink_unregister(struct devlink *devlink);
+
+#endif /* DEVLINK_H */
diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
index e8ad5ea31aff..ce79a0c42e6a 100644
--- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
@@ -22,6 +22,8 @@
#include <linux/bpf_trace.h>
#include "ena_pci_id_tbl.h"
+#include "ena_devlink.h"
+
MODULE_AUTHOR("Amazon.com, Inc. or its affiliates");
MODULE_DESCRIPTION(DEVICE_NAME);
MODULE_LICENSE("GPL");
@@ -4243,6 +4245,7 @@ static int ena_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
struct ena_adapter *adapter;
struct net_device *netdev;
static int adapters_found;
+ struct devlink *devlink;
u32 max_num_io_queues;
bool wd_state;
int bars, rc;
@@ -4308,12 +4311,18 @@ static int ena_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
pci_set_drvdata(pdev, adapter);
- rc = ena_device_init(ena_dev, pdev, &get_feat_ctx, &wd_state);
+ devlink = ena_devlink_alloc(adapter);
+ if (!devlink) {
+ netdev_err(netdev, "ena_devlink_alloc failed\n");
+ goto err_netdev_destroy;
+ }
+
+ rc = ena_device_init(adapter, pdev, &get_feat_ctx, &wd_state);
if (rc) {
dev_err(&pdev->dev, "ENA device init failed\n");
if (rc == -ETIME)
rc = -EPROBE_DEFER;
- goto err_netdev_destroy;
+ goto err_devlink_destroy;
}
rc = ena_map_llq_mem_bar(pdev, ena_dev, bars);
@@ -4362,6 +4371,7 @@ static int ena_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
"Failed to query interrupt moderation feature\n");
goto err_device_destroy;
}
+
ena_init_io_rings(adapter,
0,
adapter->xdp_num_queues +
@@ -4420,6 +4430,8 @@ static int ena_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
adapters_found++;
+ ena_devlink_register(devlink, &pdev->dev);
+
return 0;
err_rss:
@@ -4436,6 +4448,8 @@ static int ena_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
err_device_destroy:
ena_com_delete_host_info(ena_dev);
ena_com_admin_destroy(ena_dev);
+err_devlink_destroy:
+ ena_devlink_free(devlink);
err_netdev_destroy:
free_netdev(netdev);
err_free_region:
@@ -4462,10 +4476,15 @@ static void __ena_shutoff(struct pci_dev *pdev, bool shutdown)
struct ena_adapter *adapter = pci_get_drvdata(pdev);
struct ena_com_dev *ena_dev;
struct net_device *netdev;
+ struct devlink *devlink;
ena_dev = adapter->ena_dev;
netdev = adapter->netdev;
+ devlink = adapter->devlink;
+ ena_devlink_unregister(devlink);
+ ena_devlink_free(devlink);
+
#ifdef CONFIG_RFS_ACCEL
if ((adapter->msix_vecs >= 1) && (netdev->rx_cpu_rmap)) {
free_irq_cpu_rmap(netdev->rx_cpu_rmap);
@@ -4482,6 +4501,7 @@ static void __ena_shutoff(struct pci_dev *pdev, bool shutdown)
rtnl_lock(); /* lock released inside the below if-else block */
adapter->reset_reason = ENA_REGS_RESET_SHUTDOWN;
ena_destroy_device(adapter, true);
+
if (shutdown) {
netif_device_detach(netdev);
dev_close(netdev);
diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.h b/drivers/net/ethernet/amazon/ena/ena_netdev.h
index 2cb141079474..c6132aa229df 100644
--- a/drivers/net/ethernet/amazon/ena/ena_netdev.h
+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.h
@@ -313,6 +313,8 @@ struct ena_adapter {
struct net_device *netdev;
struct pci_dev *pdev;
+ struct devlink *devlink;
+
/* rx packets that shorter that this len will be copied to the skb
* header
*/
--
2.38.1
next prev parent reply other threads:[~2023-01-08 10:35 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-08 10:35 [PATCH V1 net-next 0/5] Add devlink support to ena David Arinzon
2023-01-08 10:35 ` David Arinzon [this message]
2023-01-09 5:59 ` [PATCH V1 net-next 1/5] net: ena: Register ena device to devlink Kuniyuki Iwashima
2023-01-10 15:17 ` Arinzon, David
2023-01-08 10:35 ` [PATCH V1 net-next 2/5] net: ena: Add devlink reload functionality David Arinzon
2023-01-08 10:35 ` [PATCH V1 net-next 3/5] net: ena: Configure large LLQ using devlink params David Arinzon
2023-01-08 10:35 ` [PATCH V1 net-next 4/5] net: ena: Several changes to support large LLQ configuration David Arinzon
2023-01-08 10:35 ` [PATCH V1 net-next 5/5] net: ena: Add devlink documentation David Arinzon
2023-01-08 20:15 ` kernel test robot
2023-01-09 6:00 ` Kuniyuki Iwashima
2023-01-10 15:20 ` Arinzon, David
2023-01-10 0:45 ` [PATCH V1 net-next 0/5] Add devlink support to ena Jakub Kicinski
2023-01-10 20:11 ` Arinzon, David
2023-01-10 20:44 ` Jakub Kicinski
2023-01-11 8:58 ` Arinzon, David
2023-01-11 19:00 ` Jakub Kicinski
2023-01-11 19:31 ` Arinzon, David
2023-01-11 20:00 ` Jakub Kicinski
2023-01-11 21:21 ` Arinzon, David
2023-01-12 3:39 ` Jakub Kicinski
2023-01-12 10:31 ` Gal Pressman
2023-01-12 13:47 ` Shay Agroskin
2023-01-12 19:56 ` Jakub Kicinski
2023-01-15 10:05 ` Gal Pressman
2023-01-17 17:31 ` Jakub Kicinski
2023-01-16 14:23 ` Shay Agroskin
2023-01-17 17:36 ` Jakub Kicinski
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=20230108103533.10104-2-darinzon@amazon.com \
--to=darinzon@amazon.com \
--cc=akiyano@amazon.com \
--cc=alisaidi@amazon.com \
--cc=davem@davemloft.net \
--cc=itzko@amazon.com \
--cc=kuba@kernel.org \
--cc=matua@amazon.com \
--cc=nafea@amazon.com \
--cc=ndagan@amazon.com \
--cc=netdev@vger.kernel.org \
--cc=osamaabb@amazon.com \
--cc=saeedb@amazon.com \
--cc=shayagr@amazon.com \
--cc=zorik@amazon.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.