summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/amazon/ena/ena_devlink.c31
-rw-r--r--drivers/net/ethernet/amazon/ena/ena_netdev.h1
2 files changed, 30 insertions, 2 deletions
diff --git a/drivers/net/ethernet/amazon/ena/ena_devlink.c b/drivers/net/ethernet/amazon/ena/ena_devlink.c
index db56916c7f12..1aa977a6733d 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 a732a19ea97b..cba67867ccd2 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);