Hi Bruce,
<snip>The DDP package file being loaded at init time may contain an alternative Tx Scheduler topology in it. Add driver option to load this topology at init time. Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- doc/guides/nics/ice.rst | 15 +++++++++++++++ drivers/net/ice/base/ice_ddp.c | 20 +++++++++++++++++--- drivers/net/ice/base/ice_ddp.h | 4 ++-- drivers/net/ice/ice_ethdev.c | 24 +++++++++++++++--------- drivers/net/ice/ice_ethdev.h | 1 + 5 files changed, 50 insertions(+), 14 deletions(-)
@@ -2030,19 +2032,18 @@ static int parse_bool(const char *key, const char *value, void *args) { int *i = (int *)args; - char *end; - int num; - num = strtoul(value, &end, 10); - - if (num != 0 && num != 1) { - PMD_DRV_LOG(WARNING, "invalid value:\"%s\" for key:\"%s\", " - "value must be 0 or 1", + if (value == NULL || value[0] == '\0') { + PMD_DRV_LOG(WARNING, "key:\"%s\", requires a value, which must be 0 or 1", key); + return -1; + } + if (value[1] != '\0' || (value[0] != '0' && value[0] != '1')) { + PMD_DRV_LOG(WARNING, "invalid value:\"%s\" for key:\"%s\", value must be 0 or 1", value, key); return -1; } - *i = num; + *i = value[0] - '0';
I think that instead of using char arithmetic, it would be better to:
*i = !(value[0] == '0')
return 0; } @@ -2307,6 +2308,10 @@ static int ice_parse_devargs(struct rte_eth_dev *dev) if (ret) goto bail; + ret = rte_kvargs_process(kvlist, ICE_DDP_LOAD_SCHED_ARG, + &parse_bool, &ad->devargs.ddp_load_sched); + if (ret) + goto bail; bail: rte_kvargs_free(kvlist); return ret; @@ -7185,6 +7190,7 @@ RTE_PMD_REGISTER_PARAM_STRING(net_ice, ICE_SAFE_MODE_SUPPORT_ARG "=<0|1>" ICE_DEFAULT_MAC_DISABLE "=<0|1>" ICE_DDP_FILENAME_ARG "=</path/to/file>" + ICE_DDP_LOAD_SCHED_ARG "=<0|1>" ICE_RX_LOW_LATENCY_ARG "=<0|1>"); RTE_LOG_REGISTER_SUFFIX(ice_logtype_init, init, NOTICE); diff --git a/drivers/net/ice/ice_ethdev.h b/drivers/net/ice/ice_ethdev.h index 076cf595e8..2794a76096 100644 --- a/drivers/net/ice/ice_ethdev.h +++ b/drivers/net/ice/ice_ethdev.h @@ -564,6 +564,7 @@ struct ice_devargs { uint8_t proto_xtr[ICE_MAX_QUEUE_NUM]; uint8_t pin_idx; uint8_t pps_out_ena; + uint8_t ddp_load_sched; int xtr_field_offs; uint8_t xtr_flag_offs[PROTO_XTR_MAX]; /* Name of the field. */
-- Regards, Vladimir