return 0;
 }
 
-struct mlx5_eswitch *mlx5_devlink_eswitch_get(struct devlink *devlink)
+static struct mlx5_eswitch *__mlx5_devlink_eswitch_get(struct devlink *devlink, bool check)
 {
        struct mlx5_core_dev *dev = devlink_priv(devlink);
        int err;
 
-       err = mlx5_eswitch_check(dev);
-       if (err)
-               return ERR_PTR(err);
+       if (check) {
+               err = mlx5_eswitch_check(dev);
+               if (err)
+                       return ERR_PTR(err);
+       }
 
        return dev->priv.eswitch;
 }
 
+struct mlx5_eswitch *__must_check
+mlx5_devlink_eswitch_get(struct devlink *devlink)
+{
+       return __mlx5_devlink_eswitch_get(devlink, true);
+}
+
+struct mlx5_eswitch *mlx5_devlink_eswitch_nocheck_get(struct devlink *devlink)
+{
+       return __mlx5_devlink_eswitch_get(devlink, false);
+}
+
 struct mlx5_vport *__must_check
 mlx5_eswitch_get_vport(struct mlx5_eswitch *esw, u16 vport_num)
 {
 
        struct net *devl_net, *netdev_net;
        struct mlx5_eswitch *esw;
 
-       esw = mlx5_devlink_eswitch_get(devlink);
+       esw = mlx5_devlink_eswitch_nocheck_get(devlink);
        netdev_net = dev_net(esw->dev->mlx5e_res.uplink_netdev);
        devl_net = devlink_net(devlink);
 
                                     u8 *hw_addr, int *hw_addr_len,
                                     struct netlink_ext_ack *extack)
 {
-       struct mlx5_eswitch *esw;
+       struct mlx5_eswitch *esw = mlx5_devlink_eswitch_nocheck_get(port->devlink);
        struct mlx5_vport *vport;
        u16 vport_num;
 
-       esw = mlx5_devlink_eswitch_get(port->devlink);
-       if (IS_ERR(esw))
-               return PTR_ERR(esw);
 
        vport_num = mlx5_esw_devlink_port_index_to_vport_num(port->index);
 
                                     const u8 *hw_addr, int hw_addr_len,
                                     struct netlink_ext_ack *extack)
 {
-       struct mlx5_eswitch *esw;
+       struct mlx5_eswitch *esw = mlx5_devlink_eswitch_nocheck_get(port->devlink);
        u16 vport_num;
 
-       esw = mlx5_devlink_eswitch_get(port->devlink);
-       if (IS_ERR(esw)) {
-               NL_SET_ERR_MSG_MOD(extack, "Eswitch doesn't support set hw_addr");
-               return PTR_ERR(esw);
-       }
-
        vport_num = mlx5_esw_devlink_port_index_to_vport_num(port->index);
        return mlx5_eswitch_set_vport_mac(esw, vport_num, hw_addr);
 }
 int mlx5_devlink_port_fn_migratable_get(struct devlink_port *port, bool *is_enabled,
                                        struct netlink_ext_ack *extack)
 {
-       struct mlx5_eswitch *esw;
+       struct mlx5_eswitch *esw = mlx5_devlink_eswitch_nocheck_get(port->devlink);
        struct mlx5_vport *vport;
 
-       esw = mlx5_devlink_eswitch_get(port->devlink);
-       if (IS_ERR(esw))
-               return PTR_ERR(esw);
-
        if (!MLX5_CAP_GEN(esw->dev, migration)) {
                NL_SET_ERR_MSG_MOD(extack, "Device doesn't support migration");
                return -EOPNOTSUPP;
 int mlx5_devlink_port_fn_migratable_set(struct devlink_port *port, bool enable,
                                        struct netlink_ext_ack *extack)
 {
+       struct mlx5_eswitch *esw = mlx5_devlink_eswitch_nocheck_get(port->devlink);
        int query_out_sz = MLX5_ST_SZ_BYTES(query_hca_cap_out);
-       struct mlx5_eswitch *esw;
        struct mlx5_vport *vport;
        void *query_ctx;
        void *hca_caps;
        int err;
 
-       esw = mlx5_devlink_eswitch_get(port->devlink);
-       if (IS_ERR(esw))
-               return PTR_ERR(esw);
-
        if (!MLX5_CAP_GEN(esw->dev, migration)) {
                NL_SET_ERR_MSG_MOD(extack, "Device doesn't support migration");
                return -EOPNOTSUPP;
 int mlx5_devlink_port_fn_roce_get(struct devlink_port *port, bool *is_enabled,
                                  struct netlink_ext_ack *extack)
 {
-       struct mlx5_eswitch *esw;
+       struct mlx5_eswitch *esw = mlx5_devlink_eswitch_nocheck_get(port->devlink);
        struct mlx5_vport *vport;
 
-       esw = mlx5_devlink_eswitch_get(port->devlink);
-       if (IS_ERR(esw))
-               return PTR_ERR(esw);
-
        vport = mlx5_devlink_port_fn_get_vport(port, esw);
        if (IS_ERR(vport)) {
                NL_SET_ERR_MSG_MOD(extack, "Invalid port");
 int mlx5_devlink_port_fn_roce_set(struct devlink_port *port, bool enable,
                                  struct netlink_ext_ack *extack)
 {
+       struct mlx5_eswitch *esw = mlx5_devlink_eswitch_nocheck_get(port->devlink);
        int query_out_sz = MLX5_ST_SZ_BYTES(query_hca_cap_out);
-       struct mlx5_eswitch *esw;
        struct mlx5_vport *vport;
        void *query_ctx;
        void *hca_caps;
        u16 vport_num;
        int err;
 
-       esw = mlx5_devlink_eswitch_get(port->devlink);
-       if (IS_ERR(esw))
-               return PTR_ERR(esw);
-
        vport = mlx5_devlink_port_fn_get_vport(port, esw);
        if (IS_ERR(vport)) {
                NL_SET_ERR_MSG_MOD(extack, "Invalid port");