int mlx5_esw_offloads_pf_vf_devlink_port_init(struct mlx5_eswitch *esw, u16 vport_num)
 {
-       struct devlink_port *dl_port;
+       struct mlx5_devlink_port *dl_port;
        struct mlx5_vport *vport;
 
        if (!mlx5_esw_devlink_port_supported(esw, vport_num))
        if (!dl_port)
                return -ENOMEM;
 
-       mlx5_esw_offloads_pf_vf_devlink_port_attrs_set(esw, vport_num, dl_port);
+       mlx5_esw_offloads_pf_vf_devlink_port_attrs_set(esw, vport_num,
+                                                      &dl_port->dl_port);
 
        vport->dl_port = dl_port;
        return 0;
 }
 
 int mlx5_esw_offloads_sf_devlink_port_init(struct mlx5_eswitch *esw, u16 vport_num,
-                                          struct devlink_port *dl_port,
+                                          struct mlx5_devlink_port *dl_port,
                                           u32 controller, u32 sfnum)
 {
        struct mlx5_vport *vport;
        if (IS_ERR(vport))
                return PTR_ERR(vport);
 
-       mlx5_esw_offloads_sf_devlink_port_attrs_set(esw, dl_port, controller, sfnum);
+       mlx5_esw_offloads_sf_devlink_port_attrs_set(esw, &dl_port->dl_port, controller, sfnum);
 
        vport->dl_port = dl_port;
        return 0;
 {
        struct mlx5_core_dev *dev = esw->dev;
        const struct devlink_port_ops *ops;
-       struct devlink_port *dl_port;
+       struct mlx5_devlink_port *dl_port;
        unsigned int dl_port_index;
        struct mlx5_vport *vport;
        struct devlink *devlink;
 
        devlink = priv_to_devlink(dev);
        dl_port_index = mlx5_esw_vport_to_devlink_port_index(dev, vport_num);
-       err = devl_port_register_with_ops(devlink, dl_port, dl_port_index, ops);
+       err = devl_port_register_with_ops(devlink, &dl_port->dl_port, dl_port_index, ops);
        if (err)
                return err;
 
-       err = devl_rate_leaf_create(dl_port, vport, NULL);
+       err = devl_rate_leaf_create(&dl_port->dl_port, vport, NULL);
        if (err)
                goto rate_err;
 
        return 0;
 
 rate_err:
-       devl_port_unregister(dl_port);
+       devl_port_unregister(&dl_port->dl_port);
        return err;
 }
 
 void mlx5_esw_offloads_devlink_port_unregister(struct mlx5_eswitch *esw, u16 vport_num)
 {
+       struct mlx5_devlink_port *dl_port;
        struct mlx5_vport *vport;
 
        vport = mlx5_eswitch_get_vport(esw, vport_num);
        if (IS_ERR(vport) || !vport->dl_port)
                return;
+       dl_port = vport->dl_port;
 
        mlx5_esw_qos_vport_update_group(esw, vport, NULL, NULL);
-       devl_rate_leaf_destroy(vport->dl_port);
+       devl_rate_leaf_destroy(&dl_port->dl_port);
 
-       devl_port_unregister(vport->dl_port);
+       devl_port_unregister(&dl_port->dl_port);
 }
 
 struct devlink_port *mlx5_esw_offloads_devlink_port(struct mlx5_eswitch *esw, u16 vport_num)
        struct mlx5_vport *vport;
 
        vport = mlx5_eswitch_get_vport(esw, vport_num);
-       return IS_ERR(vport) ? ERR_CAST(vport) : vport->dl_port;
+       return IS_ERR(vport) ? ERR_CAST(vport) : &vport->dl_port->dl_port;
 }
 
        MLX5_VPORT_PROMISC_CHANGE = BIT(3),
 };
 
+struct mlx5_devlink_port {
+       struct devlink_port dl_port;
+};
+
 struct mlx5_vport {
        struct mlx5_core_dev    *dev;
        struct hlist_head       uc_list[MLX5_L2_ADDR_HASH_SIZE];
        bool                    enabled;
        enum mlx5_eswitch_vport_event enabled_events;
        int index;
-       struct devlink_port *dl_port;
+       struct mlx5_devlink_port *dl_port;
 };
 
 struct mlx5_esw_indir_table;
 void mlx5_esw_offloads_cleanup_pf_vf_rep(struct mlx5_eswitch *esw, u16 vport_num);
 
 int mlx5_esw_offloads_init_sf_rep(struct mlx5_eswitch *esw, u16 vport_num,
-                                 struct devlink_port *dl_port,
+                                 struct mlx5_devlink_port *dl_port,
                                  u32 controller, u32 sfnum);
 void mlx5_esw_offloads_cleanup_sf_rep(struct mlx5_eswitch *esw, u16 vport_num);
 
 
 int mlx5_eswitch_load_sf_vport(struct mlx5_eswitch *esw, u16 vport_num,
                               enum mlx5_eswitch_vport_event enabled_events,
-                              struct devlink_port *dl_port, u32 controller, u32 sfnum);
+                              struct mlx5_devlink_port *dl_port, u32 controller, u32 sfnum);
 void mlx5_eswitch_unload_sf_vport(struct mlx5_eswitch *esw, u16 vport_num);
 
 int mlx5_eswitch_load_vf_vports(struct mlx5_eswitch *esw, u16 num_vfs,
 void mlx5_esw_offloads_pf_vf_devlink_port_cleanup(struct mlx5_eswitch *esw, u16 vport_num);
 
 int mlx5_esw_offloads_sf_devlink_port_init(struct mlx5_eswitch *esw, u16 vport_num,
-                                          struct devlink_port *dl_port,
+                                          struct mlx5_devlink_port *dl_port,
                                           u32 controller, u32 sfnum);
 void mlx5_esw_offloads_sf_devlink_port_cleanup(struct mlx5_eswitch *esw, u16 vport_num);