From: David Arinzon Date: Tue, 17 Jun 2025 11:05:40 +0000 (+0300) Subject: net: ena: Add devlink port support X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9d67d534e4e0db2cc8b6aeb450edbc997e2594d4;p=thirdparty%2Flinux.git net: ena: Add devlink port support 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 Link: https://patch.msgid.link/20250617110545.5659-5-darinzon@amazon.com Signed-off-by: Jakub Kicinski --- diff --git a/drivers/net/ethernet/amazon/ena/ena_devlink.c b/drivers/net/ethernet/amazon/ena/ena_devlink.c index db56916c7f126..1aa977a6733d0 100644 --- a/drivers/net/ethernet/amazon/ena/ena_devlink.c +++ b/drivers/net/ethernet/amazon/ena/ena_devlink.c @@ -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); } diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.h b/drivers/net/ethernet/amazon/ena/ena_netdev.h index a732a19ea97ba..cba67867ccd2a 100644 --- a/drivers/net/ethernet/amazon/ena/ena_netdev.h +++ b/drivers/net/ethernet/amazon/ena/ena_netdev.h @@ -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);