From: Kuniyuki Iwashima <kuniyu@amazon.com>
To: <darinzon@amazon.com>
Cc: <akiyano@amazon.com>, <alisaidi@amazon.com>,
<davem@davemloft.net>, <itzko@amazon.com>, <kuba@kernel.org>,
<matua@amazon.com>, <nafea@amazon.com>, <ndagan@amazon.com>,
<netdev@vger.kernel.org>, <osamaabb@amazon.com>,
<saeedb@amazon.com>, <shayagr@amazon.com>, <zorik@amazon.com>,
<kuniyu@amazon.com>
Subject: Re: [PATCH V1 net-next 1/5] net: ena: Register ena device to devlink
Date: Mon, 9 Jan 2023 14:59:01 +0900 [thread overview]
Message-ID: <20230109055901.30730-1-kuniyu@amazon.com> (raw)
In-Reply-To: <20230108103533.10104-2-darinzon@amazon.com>
From: David Arinzon <darinzon@amazon.com>
Date: Sun, 8 Jan 2023 10:35:29 +0000
> 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.
nit: s/2015-2021 //
---8<---
Copyright dates are not needed in open source code that Amazon creates. I.e.,
“Copyright [YEAR]-[YEAR] Amazon.com Inc. or its affiliates” will become
“Copyright Amazon.com Inc. or its affiliates.”
---8<---
> + */
> +
> +#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.
Same here.
> + */
> +
> +#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-09 5:59 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 ` [PATCH V1 net-next 1/5] net: ena: Register ena device to devlink David Arinzon
2023-01-09 5:59 ` Kuniyuki Iwashima [this message]
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=20230109055901.30730-1-kuniyu@amazon.com \
--to=kuniyu@amazon.com \
--cc=akiyano@amazon.com \
--cc=alisaidi@amazon.com \
--cc=darinzon@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 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).