}
 }
 
-int mlx5_esw_offloads_pf_vf_devlink_port_init(struct mlx5_eswitch *esw, u16 vport_num)
+int mlx5_esw_offloads_pf_vf_devlink_port_init(struct mlx5_eswitch *esw,
+                                             struct mlx5_vport *vport)
 {
        struct mlx5_devlink_port *dl_port;
-       struct mlx5_vport *vport;
+       u16 vport_num = vport->vport;
 
        if (!mlx5_esw_devlink_port_supported(esw, vport_num))
                return 0;
 
-       vport = mlx5_eswitch_get_vport(esw, vport_num);
-       if (IS_ERR(vport))
-               return PTR_ERR(vport);
-
        dl_port = kzalloc(sizeof(*dl_port), GFP_KERNEL);
        if (!dl_port)
                return -ENOMEM;
        return 0;
 }
 
-void mlx5_esw_offloads_pf_vf_devlink_port_cleanup(struct mlx5_eswitch *esw, u16 vport_num)
+void mlx5_esw_offloads_pf_vf_devlink_port_cleanup(struct mlx5_eswitch *esw,
+                                                 struct mlx5_vport *vport)
 {
-       struct mlx5_vport *vport;
-
-       vport = mlx5_eswitch_get_vport(esw, vport_num);
-       if (IS_ERR(vport) || !vport->dl_port)
+       if (!vport->dl_port)
                return;
 
        kfree(vport->dl_port);
        devlink_port_attrs_pci_sf_set(dl_port, controller, pfnum, sfnum, !!controller);
 }
 
-int mlx5_esw_offloads_sf_devlink_port_init(struct mlx5_eswitch *esw, u16 vport_num,
+int mlx5_esw_offloads_sf_devlink_port_init(struct mlx5_eswitch *esw, struct mlx5_vport *vport,
                                           struct mlx5_devlink_port *dl_port,
                                           u32 controller, u32 sfnum)
 {
-       struct mlx5_vport *vport;
-
-       vport = mlx5_eswitch_get_vport(esw, vport_num);
-       if (IS_ERR(vport))
-               return PTR_ERR(vport);
-
        mlx5_esw_offloads_sf_devlink_port_attrs_set(esw, &dl_port->dl_port, controller, sfnum);
 
        vport->dl_port = dl_port;
        return 0;
 }
 
-void mlx5_esw_offloads_sf_devlink_port_cleanup(struct mlx5_eswitch *esw, u16 vport_num)
+void mlx5_esw_offloads_sf_devlink_port_cleanup(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
 {
-       struct mlx5_vport *vport;
-
-       vport = mlx5_eswitch_get_vport(esw, vport_num);
-       if (IS_ERR(vport))
-               return;
-
        vport->dl_port = NULL;
 }
 
 #endif
 };
 
-int mlx5_esw_offloads_devlink_port_register(struct mlx5_eswitch *esw, u16 vport_num)
+int mlx5_esw_offloads_devlink_port_register(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
 {
        struct mlx5_core_dev *dev = esw->dev;
        const struct devlink_port_ops *ops;
        struct mlx5_devlink_port *dl_port;
+       u16 vport_num = vport->vport;
        unsigned int dl_port_index;
-       struct mlx5_vport *vport;
        struct devlink *devlink;
        int err;
 
-       vport = mlx5_eswitch_get_vport(esw, vport_num);
-       if (IS_ERR(vport))
-               return PTR_ERR(vport);
-
        dl_port = vport->dl_port;
        if (!dl_port)
                return 0;
        return err;
 }
 
-void mlx5_esw_offloads_devlink_port_unregister(struct mlx5_eswitch *esw, u16 vport_num)
+void mlx5_esw_offloads_devlink_port_unregister(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
 {
        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)
+       if (!vport->dl_port)
                return;
        dl_port = vport->dl_port;
 
 
        esw_vport_cleanup_acl(esw, vport);
 }
 
-int mlx5_esw_vport_enable(struct mlx5_eswitch *esw, u16 vport_num,
+int mlx5_esw_vport_enable(struct mlx5_eswitch *esw, struct mlx5_vport *vport,
                          enum mlx5_eswitch_vport_event enabled_events)
 {
-       struct mlx5_vport *vport;
+       u16 vport_num = vport->vport;
        int ret;
 
-       vport = mlx5_eswitch_get_vport(esw, vport_num);
-       if (IS_ERR(vport))
-               return PTR_ERR(vport);
-
        mutex_lock(&esw->state_lock);
        WARN_ON(vport->enabled);
 
            (!vport_num && mlx5_core_is_ecpf(esw->dev)))
                vport->info.trusted = true;
 
-       if (!mlx5_esw_is_manager_vport(esw, vport->vport) &&
+       if (!mlx5_esw_is_manager_vport(esw, vport_num) &&
            MLX5_CAP_GEN(esw->dev, vhca_resource_manager)) {
                ret = mlx5_esw_vport_vhca_id_set(esw, vport_num);
                if (ret)
        return ret;
 }
 
-void mlx5_esw_vport_disable(struct mlx5_eswitch *esw, u16 vport_num)
+void mlx5_esw_vport_disable(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
 {
-       struct mlx5_vport *vport;
-
-       vport = mlx5_eswitch_get_vport(esw, vport_num);
-       if (IS_ERR(vport))
-               return;
+       u16 vport_num = vport->vport;
 
        mutex_lock(&esw->state_lock);
+
        if (!vport->enabled)
                goto done;
 
 
        /* Disable events from this vport */
        if (MLX5_CAP_GEN(esw->dev, log_max_l2_table))
-               arm_vport_context_events_cmd(esw->dev, vport->vport, 0);
+               arm_vport_context_events_cmd(esw->dev, vport_num, 0);
 
-       if (!mlx5_esw_is_manager_vport(esw, vport->vport) &&
+       if (!mlx5_esw_is_manager_vport(esw, vport_num) &&
            MLX5_CAP_GEN(esw->dev, vhca_resource_manager))
                mlx5_esw_vport_vhca_id_clear(esw, vport_num);
 
        }
 }
 
-static int mlx5_eswitch_load_vport(struct mlx5_eswitch *esw, u16 vport_num,
+static int mlx5_eswitch_load_vport(struct mlx5_eswitch *esw, struct mlx5_vport *vport,
                                   enum mlx5_eswitch_vport_event enabled_events)
 {
        int err;
 
-       err = mlx5_esw_vport_enable(esw, vport_num, enabled_events);
+       err = mlx5_esw_vport_enable(esw, vport, enabled_events);
        if (err)
                return err;
 
-       err = mlx5_esw_offloads_load_rep(esw, vport_num);
+       err = mlx5_esw_offloads_load_rep(esw, vport);
        if (err)
                goto err_rep;
 
        return err;
 
 err_rep:
-       mlx5_esw_vport_disable(esw, vport_num);
+       mlx5_esw_vport_disable(esw, vport);
        return err;
 }
 
-static void mlx5_eswitch_unload_vport(struct mlx5_eswitch *esw, u16 vport_num)
+static void mlx5_eswitch_unload_vport(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
 {
-       mlx5_esw_offloads_unload_rep(esw, vport_num);
-       mlx5_esw_vport_disable(esw, vport_num);
+       mlx5_esw_offloads_unload_rep(esw, vport);
+       mlx5_esw_vport_disable(esw, vport);
 }
 
 static int mlx5_eswitch_load_pf_vf_vport(struct mlx5_eswitch *esw, u16 vport_num,
                                         enum mlx5_eswitch_vport_event enabled_events)
 {
+       struct mlx5_vport *vport;
        int err;
 
-       err = mlx5_esw_offloads_init_pf_vf_rep(esw, vport_num);
+       vport = mlx5_eswitch_get_vport(esw, vport_num);
+       if (IS_ERR(vport))
+               return PTR_ERR(vport);
+
+       err = mlx5_esw_offloads_init_pf_vf_rep(esw, vport);
        if (err)
                return err;
 
-       err = mlx5_eswitch_load_vport(esw, vport_num, enabled_events);
+       err = mlx5_eswitch_load_vport(esw, vport, enabled_events);
        if (err)
                goto err_load;
        return 0;
 
 err_load:
-       mlx5_esw_offloads_cleanup_pf_vf_rep(esw, vport_num);
+       mlx5_esw_offloads_cleanup_pf_vf_rep(esw, vport);
        return err;
 }
 
 static void mlx5_eswitch_unload_pf_vf_vport(struct mlx5_eswitch *esw, u16 vport_num)
 {
-       mlx5_eswitch_unload_vport(esw, vport_num);
-       mlx5_esw_offloads_cleanup_pf_vf_rep(esw, vport_num);
+       struct mlx5_vport *vport;
+
+       vport = mlx5_eswitch_get_vport(esw, vport_num);
+       if (IS_ERR(vport))
+               return;
+
+       mlx5_eswitch_unload_vport(esw, vport);
+       mlx5_esw_offloads_cleanup_pf_vf_rep(esw, vport);
 }
 
 int mlx5_eswitch_load_sf_vport(struct mlx5_eswitch *esw, u16 vport_num,
                               enum mlx5_eswitch_vport_event enabled_events,
                               struct mlx5_devlink_port *dl_port, u32 controller, u32 sfnum)
 {
+       struct mlx5_vport *vport;
        int err;
 
-       err = mlx5_esw_offloads_init_sf_rep(esw, vport_num, dl_port, controller, sfnum);
+       vport = mlx5_eswitch_get_vport(esw, vport_num);
+       if (IS_ERR(vport))
+               return PTR_ERR(vport);
+
+       err = mlx5_esw_offloads_init_sf_rep(esw, vport, dl_port, controller, sfnum);
        if (err)
                return err;
 
-       err = mlx5_eswitch_load_vport(esw, vport_num, enabled_events);
+       err = mlx5_eswitch_load_vport(esw, vport, enabled_events);
        if (err)
                goto err_load;
 
        return 0;
 
 err_load:
-       mlx5_esw_offloads_cleanup_sf_rep(esw, vport_num);
+       mlx5_esw_offloads_cleanup_sf_rep(esw, vport);
        return err;
 }
 
 void mlx5_eswitch_unload_sf_vport(struct mlx5_eswitch *esw, u16 vport_num)
 {
-       mlx5_eswitch_unload_vport(esw, vport_num);
-       mlx5_esw_offloads_cleanup_sf_rep(esw, vport_num);
+       struct mlx5_vport *vport;
+
+       vport = mlx5_eswitch_get_vport(esw, vport_num);
+       if (IS_ERR(vport))
+               return;
+
+       mlx5_eswitch_unload_vport(esw, vport);
+       mlx5_esw_offloads_cleanup_sf_rep(esw, vport);
 }
 
 void mlx5_eswitch_unload_vf_vports(struct mlx5_eswitch *esw, u16 num_vfs)
 
                                 enum mlx5_eswitch_vport_event enabled_events);
 void mlx5_eswitch_disable_pf_vf_vports(struct mlx5_eswitch *esw);
 
-int mlx5_esw_vport_enable(struct mlx5_eswitch *esw, u16 vport_num,
+int mlx5_esw_vport_enable(struct mlx5_eswitch *esw, struct mlx5_vport *vport,
                          enum mlx5_eswitch_vport_event enabled_events);
-void mlx5_esw_vport_disable(struct mlx5_eswitch *esw, u16 vport_num);
+void mlx5_esw_vport_disable(struct mlx5_eswitch *esw, struct mlx5_vport *vport);
 
 int
 esw_vport_create_offloads_acl_tables(struct mlx5_eswitch *esw,
                                   u16 vport,
                                   struct mlx5_flow_spec *spec);
 
-int mlx5_esw_offloads_init_pf_vf_rep(struct mlx5_eswitch *esw, u16 vport_num);
-void mlx5_esw_offloads_cleanup_pf_vf_rep(struct mlx5_eswitch *esw, u16 vport_num);
+int mlx5_esw_offloads_init_pf_vf_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport);
+void mlx5_esw_offloads_cleanup_pf_vf_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport);
 
-int mlx5_esw_offloads_init_sf_rep(struct mlx5_eswitch *esw, u16 vport_num,
+int mlx5_esw_offloads_init_sf_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport,
                                  struct mlx5_devlink_port *dl_port,
                                  u32 controller, u32 sfnum);
-void mlx5_esw_offloads_cleanup_sf_rep(struct mlx5_eswitch *esw, u16 vport_num);
+void mlx5_esw_offloads_cleanup_sf_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport);
 
-int mlx5_esw_offloads_load_rep(struct mlx5_eswitch *esw, u16 vport_num);
-void mlx5_esw_offloads_unload_rep(struct mlx5_eswitch *esw, u16 vport_num);
+int mlx5_esw_offloads_load_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport);
+void mlx5_esw_offloads_unload_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport);
 
 int mlx5_eswitch_load_sf_vport(struct mlx5_eswitch *esw, u16 vport_num,
                               enum mlx5_eswitch_vport_event enabled_events,
                                enum mlx5_eswitch_vport_event enabled_events);
 void mlx5_eswitch_unload_vf_vports(struct mlx5_eswitch *esw, u16 num_vfs);
 
-int mlx5_esw_offloads_pf_vf_devlink_port_init(struct mlx5_eswitch *esw, u16 vport_num);
-void mlx5_esw_offloads_pf_vf_devlink_port_cleanup(struct mlx5_eswitch *esw, u16 vport_num);
+int mlx5_esw_offloads_pf_vf_devlink_port_init(struct mlx5_eswitch *esw,
+                                             struct mlx5_vport *vport);
+void mlx5_esw_offloads_pf_vf_devlink_port_cleanup(struct mlx5_eswitch *esw,
+                                                 struct mlx5_vport *vport);
 
-int mlx5_esw_offloads_sf_devlink_port_init(struct mlx5_eswitch *esw, u16 vport_num,
+int mlx5_esw_offloads_sf_devlink_port_init(struct mlx5_eswitch *esw, struct mlx5_vport *vport,
                                           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);
+void mlx5_esw_offloads_sf_devlink_port_cleanup(struct mlx5_eswitch *esw, struct mlx5_vport *vport);
 
-int mlx5_esw_offloads_devlink_port_register(struct mlx5_eswitch *esw, u16 vport_num);
-void mlx5_esw_offloads_devlink_port_unregister(struct mlx5_eswitch *esw, u16 vport_num);
+int mlx5_esw_offloads_devlink_port_register(struct mlx5_eswitch *esw, struct mlx5_vport *vport);
+void mlx5_esw_offloads_devlink_port_unregister(struct mlx5_eswitch *esw, struct mlx5_vport *vport);
 struct devlink_port *mlx5_esw_offloads_devlink_port(struct mlx5_eswitch *esw, u16 vport_num);
 
 int mlx5_esw_sf_max_hpf_functions(struct mlx5_core_dev *dev, u16 *max_sfs, u16 *sf_base_id);
 
                __esw_offloads_unload_rep(esw, rep, rep_type);
 }
 
-int mlx5_esw_offloads_init_pf_vf_rep(struct mlx5_eswitch *esw, u16 vport_num)
+int mlx5_esw_offloads_init_pf_vf_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
 {
        if (esw->mode != MLX5_ESWITCH_OFFLOADS)
                return 0;
 
-       return mlx5_esw_offloads_pf_vf_devlink_port_init(esw, vport_num);
+       return mlx5_esw_offloads_pf_vf_devlink_port_init(esw, vport);
 }
 
-void mlx5_esw_offloads_cleanup_pf_vf_rep(struct mlx5_eswitch *esw, u16 vport_num)
+void mlx5_esw_offloads_cleanup_pf_vf_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
 {
        if (esw->mode != MLX5_ESWITCH_OFFLOADS)
                return;
 
-       mlx5_esw_offloads_pf_vf_devlink_port_cleanup(esw, vport_num);
+       mlx5_esw_offloads_pf_vf_devlink_port_cleanup(esw, vport);
 }
 
-int mlx5_esw_offloads_init_sf_rep(struct mlx5_eswitch *esw, u16 vport_num,
+int mlx5_esw_offloads_init_sf_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport,
                                  struct mlx5_devlink_port *dl_port,
                                  u32 controller, u32 sfnum)
 {
-       return mlx5_esw_offloads_sf_devlink_port_init(esw, vport_num, dl_port, controller, sfnum);
+       return mlx5_esw_offloads_sf_devlink_port_init(esw, vport, dl_port, controller, sfnum);
 }
 
-void mlx5_esw_offloads_cleanup_sf_rep(struct mlx5_eswitch *esw, u16 vport_num)
+void mlx5_esw_offloads_cleanup_sf_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
 {
-       mlx5_esw_offloads_sf_devlink_port_cleanup(esw, vport_num);
+       mlx5_esw_offloads_sf_devlink_port_cleanup(esw, vport);
 }
 
-int mlx5_esw_offloads_load_rep(struct mlx5_eswitch *esw, u16 vport_num)
+int mlx5_esw_offloads_load_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
 {
        int err;
 
        if (esw->mode != MLX5_ESWITCH_OFFLOADS)
                return 0;
 
-       err = mlx5_esw_offloads_devlink_port_register(esw, vport_num);
+       err = mlx5_esw_offloads_devlink_port_register(esw, vport);
        if (err)
                return err;
 
-       err = mlx5_esw_offloads_rep_load(esw, vport_num);
+       err = mlx5_esw_offloads_rep_load(esw, vport->vport);
        if (err)
                goto load_err;
        return err;
 
 load_err:
-       mlx5_esw_offloads_devlink_port_unregister(esw, vport_num);
+       mlx5_esw_offloads_devlink_port_unregister(esw, vport);
        return err;
 }
 
-void mlx5_esw_offloads_unload_rep(struct mlx5_eswitch *esw, u16 vport_num)
+void mlx5_esw_offloads_unload_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
 {
        if (esw->mode != MLX5_ESWITCH_OFFLOADS)
                return;
 
-       mlx5_esw_offloads_rep_unload(esw, vport_num);
+       mlx5_esw_offloads_rep_unload(esw, vport->vport);
 
-       mlx5_esw_offloads_devlink_port_unregister(esw, vport_num);
+       mlx5_esw_offloads_devlink_port_unregister(esw, vport);
 }
 
 static int esw_set_slave_root_fdb(struct mlx5_core_dev *master,