OSDN Git Service

devlink: move port_fn_hw_addr_get/set() to devlink_port_ops
authorJiri Pirko <jiri@nvidia.com>
Fri, 26 May 2023 10:28:36 +0000 (12:28 +0200)
committerJakub Kicinski <kuba@kernel.org>
Tue, 30 May 2023 17:32:20 +0000 (10:32 -0700)
Move port_fn_hw_addr_get/set() from devlink_ops into newly introduced
devlink_port_ops.

Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Acked-by: Martin Habets <habetsm.xilinx@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/devlink.c
drivers/net/ethernet/mellanox/mlx5/core/esw/devlink_port.c
drivers/net/ethernet/mellanox/mlx5/core/eswitch.h
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
drivers/net/ethernet/sfc/efx_devlink.c
include/net/devlink.h
net/devlink/leftover.c

index bfaec67..1e96f32 100644 (file)
@@ -310,8 +310,6 @@ static const struct devlink_ops mlx5_devlink_ops = {
        .eswitch_inline_mode_get = mlx5_devlink_eswitch_inline_mode_get,
        .eswitch_encap_mode_set = mlx5_devlink_eswitch_encap_mode_set,
        .eswitch_encap_mode_get = mlx5_devlink_eswitch_encap_mode_get,
-       .port_function_hw_addr_get = mlx5_devlink_port_function_hw_addr_get,
-       .port_function_hw_addr_set = mlx5_devlink_port_function_hw_addr_set,
        .rate_leaf_tx_share_set = mlx5_esw_devlink_rate_leaf_tx_share_set,
        .rate_leaf_tx_max_set = mlx5_esw_devlink_rate_leaf_tx_max_set,
        .rate_node_tx_share_set = mlx5_esw_devlink_rate_node_tx_share_set,
index d9c1748..78d12c3 100644 (file)
@@ -66,6 +66,8 @@ static void mlx5_esw_dl_port_free(struct devlink_port *dl_port)
 }
 
 static const struct devlink_port_ops mlx5_esw_dl_port_ops = {
+       .port_fn_hw_addr_get = mlx5_devlink_port_fn_hw_addr_get,
+       .port_fn_hw_addr_set = mlx5_devlink_port_fn_hw_addr_set,
 };
 
 int mlx5_esw_offloads_devlink_port_register(struct mlx5_eswitch *esw, u16 vport_num)
@@ -139,6 +141,8 @@ struct devlink_port *mlx5_esw_offloads_devlink_port(struct mlx5_eswitch *esw, u1
 }
 
 static const struct devlink_port_ops mlx5_esw_dl_sf_port_ops = {
+       .port_fn_hw_addr_get = mlx5_devlink_port_fn_hw_addr_get,
+       .port_fn_hw_addr_set = mlx5_devlink_port_fn_hw_addr_set,
 };
 
 int mlx5_esw_devlink_sf_port_register(struct mlx5_eswitch *esw, struct devlink_port *dl_port,
index 280dc71..f70124a 100644 (file)
@@ -506,12 +506,12 @@ int mlx5_devlink_eswitch_encap_mode_set(struct devlink *devlink,
                                        struct netlink_ext_ack *extack);
 int mlx5_devlink_eswitch_encap_mode_get(struct devlink *devlink,
                                        enum devlink_eswitch_encap_mode *encap);
-int mlx5_devlink_port_function_hw_addr_get(struct devlink_port *port,
-                                          u8 *hw_addr, int *hw_addr_len,
-                                          struct netlink_ext_ack *extack);
-int mlx5_devlink_port_function_hw_addr_set(struct devlink_port *port,
-                                          const u8 *hw_addr, int hw_addr_len,
-                                          struct netlink_ext_ack *extack);
+int mlx5_devlink_port_fn_hw_addr_get(struct devlink_port *port,
+                                    u8 *hw_addr, int *hw_addr_len,
+                                    struct netlink_ext_ack *extack);
+int mlx5_devlink_port_fn_hw_addr_set(struct devlink_port *port,
+                                    const u8 *hw_addr, int hw_addr_len,
+                                    struct netlink_ext_ack *extack);
 int mlx5_devlink_port_fn_roce_get(struct devlink_port *port, bool *is_enabled,
                                  struct netlink_ext_ack *extack);
 int mlx5_devlink_port_fn_roce_set(struct devlink_port *port, bool enable,
index 7a65dcf..1b2f5e2 100644 (file)
@@ -3957,9 +3957,9 @@ is_port_function_supported(struct mlx5_eswitch *esw, u16 vport_num)
               mlx5_esw_is_sf_vport(esw, vport_num);
 }
 
-int mlx5_devlink_port_function_hw_addr_get(struct devlink_port *port,
-                                          u8 *hw_addr, int *hw_addr_len,
-                                          struct netlink_ext_ack *extack)
+int mlx5_devlink_port_fn_hw_addr_get(struct devlink_port *port,
+                                    u8 *hw_addr, int *hw_addr_len,
+                                    struct netlink_ext_ack *extack)
 {
        struct mlx5_eswitch *esw;
        struct mlx5_vport *vport;
@@ -3986,9 +3986,9 @@ int mlx5_devlink_port_function_hw_addr_get(struct devlink_port *port,
        return 0;
 }
 
-int mlx5_devlink_port_function_hw_addr_set(struct devlink_port *port,
-                                          const u8 *hw_addr, int hw_addr_len,
-                                          struct netlink_ext_ack *extack)
+int mlx5_devlink_port_fn_hw_addr_set(struct devlink_port *port,
+                                    const u8 *hw_addr, int hw_addr_len,
+                                    struct netlink_ext_ack *extack)
 {
        struct mlx5_eswitch *esw;
        u16 vport_num;
index e74f740..b82dad5 100644 (file)
@@ -26,46 +26,6 @@ struct efx_devlink {
 
 #ifdef CONFIG_SFC_SRIOV
 
-static const struct devlink_port_ops sfc_devlink_port_ops = {
-};
-
-static void efx_devlink_del_port(struct devlink_port *dl_port)
-{
-       if (!dl_port)
-               return;
-       devl_port_unregister(dl_port);
-}
-
-static int efx_devlink_add_port(struct efx_nic *efx,
-                               struct mae_mport_desc *mport)
-{
-       bool external = false;
-
-       if (!ef100_mport_on_local_intf(efx, mport))
-               external = true;
-
-       switch (mport->mport_type) {
-       case MAE_MPORT_DESC_MPORT_TYPE_VNIC:
-               if (mport->vf_idx != MAE_MPORT_DESC_VF_IDX_NULL)
-                       devlink_port_attrs_pci_vf_set(&mport->dl_port, 0, mport->pf_idx,
-                                                     mport->vf_idx,
-                                                     external);
-               else
-                       devlink_port_attrs_pci_pf_set(&mport->dl_port, 0, mport->pf_idx,
-                                                     external);
-               break;
-       default:
-               /* MAE_MPORT_DESC_MPORT_ALIAS and UNDEFINED */
-               return 0;
-       }
-
-       mport->dl_port.index = mport->mport_id;
-
-       return devl_port_register_with_ops(efx->devlink, &mport->dl_port,
-                                          mport->mport_id,
-                                          &sfc_devlink_port_ops);
-}
-
 static int efx_devlink_port_addr_get(struct devlink_port *port, u8 *hw_addr,
                                     int *hw_addr_len,
                                     struct netlink_ext_ack *extack)
@@ -164,6 +124,48 @@ static int efx_devlink_port_addr_set(struct devlink_port *port,
        return rc;
 }
 
+static const struct devlink_port_ops sfc_devlink_port_ops = {
+       .port_fn_hw_addr_get = efx_devlink_port_addr_get,
+       .port_fn_hw_addr_set = efx_devlink_port_addr_set,
+};
+
+static void efx_devlink_del_port(struct devlink_port *dl_port)
+{
+       if (!dl_port)
+               return;
+       devl_port_unregister(dl_port);
+}
+
+static int efx_devlink_add_port(struct efx_nic *efx,
+                               struct mae_mport_desc *mport)
+{
+       bool external = false;
+
+       if (!ef100_mport_on_local_intf(efx, mport))
+               external = true;
+
+       switch (mport->mport_type) {
+       case MAE_MPORT_DESC_MPORT_TYPE_VNIC:
+               if (mport->vf_idx != MAE_MPORT_DESC_VF_IDX_NULL)
+                       devlink_port_attrs_pci_vf_set(&mport->dl_port, 0, mport->pf_idx,
+                                                     mport->vf_idx,
+                                                     external);
+               else
+                       devlink_port_attrs_pci_pf_set(&mport->dl_port, 0, mport->pf_idx,
+                                                     external);
+               break;
+       default:
+               /* MAE_MPORT_DESC_MPORT_ALIAS and UNDEFINED */
+               return 0;
+       }
+
+       mport->dl_port.index = mport->mport_id;
+
+       return devl_port_register_with_ops(efx->devlink, &mport->dl_port,
+                                          mport->mport_id,
+                                          &sfc_devlink_port_ops);
+}
+
 #endif
 
 static int efx_devlink_info_nvram_partition(struct efx_nic *efx,
@@ -615,10 +617,6 @@ static int efx_devlink_info_get(struct devlink *devlink,
 
 static const struct devlink_ops sfc_devlink_ops = {
        .info_get                       = efx_devlink_info_get,
-#ifdef CONFIG_SFC_SRIOV
-       .port_function_hw_addr_get      = efx_devlink_port_addr_get,
-       .port_function_hw_addr_set      = efx_devlink_port_addr_set,
-#endif
 };
 
 #ifdef CONFIG_SFC_SRIOV
index 0dfadc2..c580b15 100644 (file)
@@ -1430,28 +1430,6 @@ struct devlink_ops {
                                        const struct devlink_trap_policer *policer,
                                        u64 *p_drops);
        /**
-        * @port_function_hw_addr_get: Port function's hardware address get function.
-        *
-        * Should be used by device drivers to report the hardware address of a function managed
-        * by the devlink port. Driver should return -EOPNOTSUPP if it doesn't support port
-        * function handling for a particular port.
-        *
-        * Note: @extack can be NULL when port notifier queries the port function.
-        */
-       int (*port_function_hw_addr_get)(struct devlink_port *port, u8 *hw_addr,
-                                        int *hw_addr_len,
-                                        struct netlink_ext_ack *extack);
-       /**
-        * @port_function_hw_addr_set: Port function's hardware address set function.
-        *
-        * Should be used by device drivers to set the hardware address of a function managed
-        * by the devlink port. Driver should return -EOPNOTSUPP if it doesn't support port
-        * function handling for a particular port.
-        */
-       int (*port_function_hw_addr_set)(struct devlink_port *port,
-                                        const u8 *hw_addr, int hw_addr_len,
-                                        struct netlink_ext_ack *extack);
-       /**
         * @port_fn_roce_get: Port function's roce get function.
         *
         * Query RoCE state of a function managed by the devlink port.
@@ -1651,6 +1629,16 @@ void devlink_free(struct devlink *devlink);
  * @port_unsplit: Callback used to unsplit the port group back into
  *               a single port.
  * @port_type_set: Callback used to set a type of a port.
+ * @port_fn_hw_addr_get: Callback used to set port function's hardware address.
+ *                      Should be used by device drivers to report
+ *                      the hardware address of a function managed
+ *                      by the devlink port.
+ * @port_fn_hw_addr_set: Callback used to set port function's hardware address.
+ *                      Should be used by device drivers to set the hardware
+ *                      address of a function managed by the devlink port.
+ *
+ * Note: Driver should return -EOPNOTSUPP if it doesn't support
+ * port function (@port_fn_*) handling for a particular port.
  */
 struct devlink_port_ops {
        int (*port_split)(struct devlink *devlink, struct devlink_port *port,
@@ -1659,6 +1647,12 @@ struct devlink_port_ops {
                            struct netlink_ext_ack *extack);
        int (*port_type_set)(struct devlink_port *devlink_port,
                             enum devlink_port_type port_type);
+       int (*port_fn_hw_addr_get)(struct devlink_port *port, u8 *hw_addr,
+                                  int *hw_addr_len,
+                                  struct netlink_ext_ack *extack);
+       int (*port_fn_hw_addr_set)(struct devlink_port *port,
+                                  const u8 *hw_addr, int hw_addr_len,
+                                  struct netlink_ext_ack *extack);
 };
 
 void devlink_port_init(struct devlink *devlink,
index d69e278..ac171ea 100644 (file)
@@ -691,8 +691,7 @@ static int devlink_nl_port_attrs_put(struct sk_buff *msg,
        return 0;
 }
 
-static int devlink_port_fn_hw_addr_fill(const struct devlink_ops *ops,
-                                       struct devlink_port *port,
+static int devlink_port_fn_hw_addr_fill(struct devlink_port *port,
                                        struct sk_buff *msg,
                                        struct netlink_ext_ack *extack,
                                        bool *msg_updated)
@@ -701,10 +700,10 @@ static int devlink_port_fn_hw_addr_fill(const struct devlink_ops *ops,
        int hw_addr_len;
        int err;
 
-       if (!ops->port_function_hw_addr_get)
+       if (!port->ops->port_fn_hw_addr_get)
                return 0;
 
-       err = ops->port_function_hw_addr_get(port, hw_addr, &hw_addr_len,
+       err = port->ops->port_fn_hw_addr_get(port, hw_addr, &hw_addr_len,
                                             extack);
        if (err) {
                if (err == -EOPNOTSUPP)
@@ -884,8 +883,7 @@ devlink_nl_port_function_attrs_put(struct sk_buff *msg, struct devlink_port *por
                return -EMSGSIZE;
 
        ops = port->devlink->ops;
-       err = devlink_port_fn_hw_addr_fill(ops, port, msg, extack,
-                                          &msg_updated);
+       err = devlink_port_fn_hw_addr_fill(port, msg, extack, &msg_updated);
        if (err)
                goto out;
        err = devlink_port_fn_caps_fill(ops, port, msg, extack,
@@ -1156,7 +1154,6 @@ static int devlink_port_function_hw_addr_set(struct devlink_port *port,
                                             const struct nlattr *attr,
                                             struct netlink_ext_ack *extack)
 {
-       const struct devlink_ops *ops = port->devlink->ops;
        const u8 *hw_addr;
        int hw_addr_len;
 
@@ -1177,7 +1174,7 @@ static int devlink_port_function_hw_addr_set(struct devlink_port *port,
                }
        }
 
-       return ops->port_function_hw_addr_set(port, hw_addr, hw_addr_len,
+       return port->ops->port_fn_hw_addr_set(port, hw_addr, hw_addr_len,
                                              extack);
 }
 
@@ -1201,7 +1198,7 @@ static int devlink_port_function_validate(struct devlink_port *devlink_port,
        struct nlattr *attr;
 
        if (tb[DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR] &&
-           !ops->port_function_hw_addr_set) {
+           !devlink_port->ops->port_fn_hw_addr_set) {
                NL_SET_ERR_MSG_ATTR(extack, tb[DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR],
                                    "Port doesn't support function attributes");
                return -EOPNOTSUPP;