struct mlx5_flow_namespace *ns = NULL;
        struct mlx5_ib_flow_prio *prio;
        struct mlx5_flow_table *ft;
+       int max_table_size;
        int num_entries;
        int num_groups;
        int priority;
        int err = 0;
 
+       max_table_size = BIT(MLX5_CAP_FLOWTABLE_NIC_RX(dev->mdev,
+                                                      log_max_ft_size));
        if (flow_attr->type == IB_FLOW_ATTR_NORMAL) {
                if (flow_is_multicast_only(flow_attr) &&
                    !dont_trap)
        if (!ns)
                return ERR_PTR(-ENOTSUPP);
 
+       if (num_entries > max_table_size)
+               return ERR_PTR(-ENOMEM);
+
        ft = prio->flow_table;
        if (!ft) {
                ft = mlx5_create_auto_grouped_flow_table(ns, priority,
        int err;
 
        if (flow_attr->priority > MLX5_IB_FLOW_LAST_PRIO)
-               return ERR_PTR(-ENOSPC);
+               return ERR_PTR(-ENOMEM);
 
        if (domain != IB_FLOW_DOMAIN_USER ||
            flow_attr->port > MLX5_CAP_GEN(dev->mdev, num_ports) ||