]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: ena: Add devlink port support
authorDavid Arinzon <darinzon@amazon.com>
Tue, 17 Jun 2025 11:05:40 +0000 (14:05 +0300)
committerJakub Kicinski <kuba@kernel.org>
Thu, 19 Jun 2025 01:57:28 +0000 (18:57 -0700)
Add the basic functionality to support devlink port
for devlink model completeness purposes.
Current support is for registration/un-registration.

Signed-off-by: David Arinzon <darinzon@amazon.com>
Link: https://patch.msgid.link/20250617110545.5659-5-darinzon@amazon.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/amazon/ena/ena_devlink.c
drivers/net/ethernet/amazon/ena/ena_netdev.h

index db56916c7f126e1a4c6d2cee9c9725a097c24c9d..1aa977a6733d022d1959cc7127451a0753b132cf 100644 (file)
@@ -6,6 +6,23 @@
 #include "linux/pci.h"
 #include "ena_devlink.h"
 
+static void ena_devlink_port_register(struct devlink *devlink)
+{
+       struct ena_adapter *adapter = ENA_DEVLINK_PRIV(devlink);
+       struct devlink_port_attrs attrs = {};
+
+       attrs.flavour = DEVLINK_PORT_FLAVOUR_PHYSICAL;
+       devlink_port_attrs_set(&adapter->devlink_port, &attrs);
+       devl_port_register(devlink, &adapter->devlink_port, 0);
+}
+
+static void ena_devlink_port_unregister(struct devlink *devlink)
+{
+       struct ena_adapter *adapter = ENA_DEVLINK_PRIV(devlink);
+
+       devl_port_unregister(&adapter->devlink_port);
+}
+
 static int ena_devlink_reload_down(struct devlink *devlink,
                                   bool netns_change,
                                   enum devlink_reload_action action,
@@ -20,6 +37,8 @@ static int ena_devlink_reload_down(struct devlink *devlink,
                return -EOPNOTSUPP;
        }
 
+       ena_devlink_port_unregister(devlink);
+
        rtnl_lock();
        ena_destroy_device(adapter, false);
        rtnl_unlock();
@@ -46,6 +65,8 @@ static int ena_devlink_reload_up(struct devlink *devlink,
 
        rtnl_unlock();
 
+       ena_devlink_port_register(devlink);
+
        if (!err)
                *actions_performed = BIT(DEVLINK_RELOAD_ACTION_DRIVER_REINIT);
 
@@ -85,10 +106,16 @@ void ena_devlink_free(struct devlink *devlink)
 
 void ena_devlink_register(struct devlink *devlink, struct device *dev)
 {
-       devlink_register(devlink);
+       devl_lock(devlink);
+       ena_devlink_port_register(devlink);
+       devl_register(devlink);
+       devl_unlock(devlink);
 }
 
 void ena_devlink_unregister(struct devlink *devlink)
 {
-       devlink_unregister(devlink);
+       devl_lock(devlink);
+       ena_devlink_port_unregister(devlink);
+       devl_unregister(devlink);
+       devl_unlock(devlink);
 }
index a732a19ea97ba11a032692db2d85d47c1d3958a1..cba67867ccd2a48a4c54b71042bc9aa232aa86ad 100644 (file)
@@ -390,6 +390,7 @@ struct ena_adapter {
        u32 xdp_num_queues;
 
        struct devlink *devlink;
+       struct devlink_port devlink_port;
 };
 
 void ena_set_ethtool_ops(struct net_device *netdev);