Hi,

> +int
> +rte_regexdev_configure(uint8_t dev_id, const struct rte_regexdev_config
> +*cfg) {
> +     struct rte_regexdev *dev;
> +     struct rte_regexdev_info dev_info;
> +     int ret;
> +
> +     RTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);
> +     if (cfg == NULL)
> +             return -EINVAL;
> +     dev = &rte_regex_devices[dev_id];
> +     RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_configure, -
> ENOTSUP);
> +     if (dev->data->dev_started) {
> +             RTE_REGEXDEV_LOG
> +                     (ERR, "Dev %u must be stopped to allow
> configuration\n",
> +                      dev_id);
> +             return -EBUSY;
> +     }
> +     ret = regexdev_info_get(dev_id, &dev_info);
> +     if (ret < 0)
> +             return ret;
> +     if ((cfg->dev_cfg_flags &
> RTE_REGEXDEV_CFG_CROSS_BUFFER_SCAN_F) &&
> +         !(dev_info.regexdev_capa &
> RTE_REGEXDEV_SUPP_CROSS_BUFFER_F)) {
> +             RTE_REGEXDEV_LOG(ERR,
> +                              "Dev %u doesn't support cross buffer
> scan\n",
> +                              dev_id);
> +             return -EINVAL;
> +     }
> +     if ((cfg->dev_cfg_flags & RTE_REGEXDEV_CFG_MATCH_AS_END_F)
> &&
> +         !(dev_info.regexdev_capa &
> RTE_REGEXDEV_SUPP_MATCH_AS_END_F)) {
> +             RTE_REGEXDEV_LOG(ERR,
> +                              "Dev %u doesn't support match as end\n",
> +                              dev_id);
> +             return -EINVAL;
> +     }
> +     if ((cfg->dev_cfg_flags & RTE_REGEXDEV_CFG_MATCH_ALL_F) &&
> +         !(dev_info.regexdev_capa &
> RTE_REGEXDEV_SUPP_MATCH_ALL_F)) {
> +             RTE_REGEXDEV_LOG(ERR,
> +                              "Dev %u doesn't support match all\n",
> +                              dev_id);
> +             return -EINVAL;
> +     }
> +     if (cfg->nb_groups == 0) {
> +             RTE_REGEXDEV_LOG(ERR, "Dev %u num of groups must be >
> 0\n",
> +                              dev_id);
> +             return -EINVAL;
> +     }
> +     if (cfg->nb_groups >= dev_info.max_groups) {
> +             RTE_REGEXDEV_LOG(ERR, "Dev %u num of groups %d >
> %d\n",
> +                              dev_id, cfg->nb_groups,
> dev_info.max_groups);
> +             return -EINVAL;
> +     }

The comparison should be > and not >=

> +     if (cfg->nb_max_matches == 0) {
> +             RTE_REGEXDEV_LOG(ERR, "Dev %u num of matches must be
> > 0\n",
> +                              dev_id);
> +             return -EINVAL;
> +     }
> +     if (cfg->nb_max_matches >= dev_info.max_matches) {
> +             RTE_REGEXDEV_LOG(ERR, "Dev %u num of matches %d >
> %d\n",
> +                              dev_id, cfg->nb_max_matches,
> +                              dev_info.max_matches);
> +             return -EINVAL;
> +     }

The comparison should be > and not >=

> +     if (cfg->nb_queue_pairs == 0) {
> +             RTE_REGEXDEV_LOG(ERR, "Dev %u num of queues must be
> > 0\n",
> +                              dev_id);
> +             return -EINVAL;
> +     }
> +     if (cfg->nb_queue_pairs >= dev_info.max_queue_pairs) {
> +             RTE_REGEXDEV_LOG(ERR, "Dev %u num of queues %d >
> %d\n",
> +                              dev_id, cfg->nb_queue_pairs,
> +                              dev_info.max_queue_pairs);
> +             return -EINVAL;
> +     }

The comparison should be > and not >=

> +     if (cfg->nb_rules_per_group == 0) {
> +             RTE_REGEXDEV_LOG(ERR,
> +                              "Dev %u num of rules per group must be >
> 0\n",
> +                              dev_id);
> +             return -EINVAL;
> +     }
> +     if (cfg->nb_rules_per_group >= dev_info.max_rules_per_group) {
> +             RTE_REGEXDEV_LOG(ERR,
> +                              "Dev %u num of rules per group %d > %d\n",
> +                              dev_id, cfg->nb_rules_per_group,
> +                              dev_info.max_rules_per_group);
> +             return -EINVAL;
> +     }

The comparison should be > and not >=

> +     ret = (*dev->dev_ops->dev_configure)(dev, cfg);
> +     if (ret == 0)
> +             dev->data->dev_conf = *cfg;
> +     return ret;
> +}

In general I think that the validation of the cfg values should be done by the 
PMD

Reply via email to