@@ -1604,19 +1604,16 @@ parse_file(const char *key, const char *value, void *args)
#endif
static int
-cpfl_parse_devargs(struct rte_pci_device *pci_dev, struct cpfl_adapter_ext *adapter, bool first)
+cpfl_parse_devargs(struct rte_pci_device *pci_dev, struct cpfl_adapter_ext *adapter,
+ bool first, struct cpfl_devargs *cpfl_args)
{
struct rte_devargs *devargs = pci_dev->device.devargs;
- struct cpfl_devargs *cpfl_args = &adapter->devargs;
struct rte_kvargs *kvlist;
int ret;
if (devargs == NULL)
return 0;
- if (first)
- memset(cpfl_args, 0, sizeof(struct cpfl_devargs));
-
kvlist = rte_kvargs_parse(devargs->args,
first ? cpfl_valid_args_first : cpfl_valid_args_again);
if (kvlist == NULL) {
@@ -2273,12 +2270,17 @@ cpfl_repr_allowlist_uninit(struct cpfl_adapter_ext *adapter)
static int
-cpfl_adapter_ext_init(struct rte_pci_device *pci_dev, struct cpfl_adapter_ext *adapter)
+cpfl_adapter_ext_init(struct rte_pci_device *pci_dev, struct cpfl_adapter_ext *adapter,
+ struct cpfl_devargs *devargs)
{
struct idpf_adapter *base = &adapter->base;
struct idpf_hw *hw = &base->hw;
int ret = 0;
+#ifndef RTE_HAS_JANSSON
+ RTE_SET_USED(devargs);
+#endif
+
hw->hw_addr = (void *)pci_dev->mem_resource[0].addr;
hw->hw_addr_len = pci_dev->mem_resource[0].len;
hw->back = base;
@@ -2330,7 +2332,7 @@ cpfl_adapter_ext_init(struct rte_pci_device *pci_dev, struct cpfl_adapter_ext *a
}
#ifdef RTE_HAS_JANSSON
- ret = cpfl_flow_init(adapter);
+ ret = cpfl_flow_init(adapter, devargs);
if (ret) {
PMD_INIT_LOG(ERR, "Failed to init flow module");
goto err_flow_init;
@@ -2626,9 +2628,8 @@ cpfl_adapter_ext_deinit(struct cpfl_adapter_ext *adapter)
}
static int
-cpfl_vport_devargs_process(struct cpfl_adapter_ext *adapter)
+cpfl_vport_devargs_process(struct cpfl_adapter_ext *adapter, struct cpfl_devargs *devargs)
{
- struct cpfl_devargs *devargs = &adapter->devargs;
int i;
/* refine vport number, at least 1 vport */
@@ -2663,15 +2664,16 @@ cpfl_vport_devargs_process(struct cpfl_adapter_ext *adapter)
}
static int
-cpfl_vport_create(struct rte_pci_device *pci_dev, struct cpfl_adapter_ext *adapter)
+cpfl_vport_create(struct rte_pci_device *pci_dev, struct cpfl_adapter_ext *adapter,
+ struct cpfl_devargs *devargs)
{
struct cpfl_vport_param vport_param;
char name[RTE_ETH_NAME_MAX_LEN];
int ret, i;
- for (i = 0; i < adapter->devargs.req_vport_nb; i++) {
+ for (i = 0; i < devargs->req_vport_nb; i++) {
vport_param.adapter = adapter;
- vport_param.devarg_id = adapter->devargs.req_vports[i];
+ vport_param.devarg_id = devargs->req_vports[i];
vport_param.idx = cpfl_vport_idx_alloc(adapter);
if (vport_param.idx == CPFL_INVALID_VPORT_IDX) {
PMD_INIT_LOG(ERR, "No space for vport %u", vport_param.devarg_id);
@@ -2679,7 +2681,7 @@ cpfl_vport_create(struct rte_pci_device *pci_dev, struct cpfl_adapter_ext *adapt
}
snprintf(name, sizeof(name), "net_%s_vport_%d",
pci_dev->device.name,
- adapter->devargs.req_vports[i]);
+ devargs->req_vports[i]);
ret = rte_eth_dev_create(&pci_dev->device, name,
sizeof(struct cpfl_vport),
NULL, NULL, cpfl_dev_vport_init,
@@ -2696,6 +2698,7 @@ static int
cpfl_pci_probe_first(struct rte_pci_device *pci_dev)
{
struct cpfl_adapter_ext *adapter;
+ struct cpfl_devargs devargs;
int retval;
uint16_t port_id;
@@ -2706,13 +2709,15 @@ cpfl_pci_probe_first(struct rte_pci_device *pci_dev)
return -ENOMEM;
}
- retval = cpfl_parse_devargs(pci_dev, adapter, true);
+ memset(&devargs, 0, sizeof(devargs));
+
+ retval = cpfl_parse_devargs(pci_dev, adapter, true, &devargs);
if (retval != 0) {
PMD_INIT_LOG(ERR, "Failed to parse private devargs");
return retval;
}
- retval = cpfl_adapter_ext_init(pci_dev, adapter);
+ retval = cpfl_adapter_ext_init(pci_dev, adapter, &devargs);
if (retval != 0) {
PMD_INIT_LOG(ERR, "Failed to init adapter.");
return retval;
@@ -2722,19 +2727,19 @@ cpfl_pci_probe_first(struct rte_pci_device *pci_dev)
TAILQ_INSERT_TAIL(&cpfl_adapter_list, adapter, next);
rte_spinlock_unlock(&cpfl_adapter_lock);
- retval = cpfl_vport_devargs_process(adapter);
+ retval = cpfl_vport_devargs_process(adapter, &devargs);
if (retval != 0) {
PMD_INIT_LOG(ERR, "Failed to process vport devargs");
goto err;
}
- retval = cpfl_vport_create(pci_dev, adapter);
+ retval = cpfl_vport_create(pci_dev, adapter, &devargs);
if (retval != 0) {
PMD_INIT_LOG(ERR, "Failed to create vports.");
goto err;
}
- retval = cpfl_repr_devargs_process(adapter);
+ retval = cpfl_repr_devargs_process(adapter, &devargs);
if (retval != 0) {
PMD_INIT_LOG(ERR, "Failed to process repr devargs");
goto close_ethdev;
@@ -2766,15 +2771,17 @@ cpfl_pci_probe_first(struct rte_pci_device *pci_dev)
static int
cpfl_pci_probe_again(struct rte_pci_device *pci_dev, struct cpfl_adapter_ext *adapter)
{
+ struct cpfl_devargs devargs;
int ret;
- ret = cpfl_parse_devargs(pci_dev, adapter, false);
+ memset(&devargs, 0, sizeof(devargs));
+ ret = cpfl_parse_devargs(pci_dev, adapter, false, &devargs);
if (ret != 0) {
PMD_INIT_LOG(ERR, "Failed to parse private devargs");
return ret;
}
- ret = cpfl_repr_devargs_process(adapter);
+ ret = cpfl_repr_devargs_process(adapter, &devargs);
if (ret != 0) {
PMD_INIT_LOG(ERR, "Failed to process reprenstor devargs");
return ret;
@@ -212,7 +212,6 @@ struct cpfl_adapter_ext {
uint16_t cur_vport_nb;
uint16_t used_vecs_num;
- struct cpfl_devargs devargs;
rte_spinlock_t vport_map_lock;
struct rte_hash *vport_map_hash;
@@ -300,11 +300,11 @@ const struct rte_flow_ops cpfl_flow_ops = {
};
int
-cpfl_flow_init(struct cpfl_adapter_ext *ad)
+cpfl_flow_init(struct cpfl_adapter_ext *ad, struct cpfl_devargs *devargs)
{
int ret;
- if (ad->devargs.flow_parser[0] == '\0') {
+ if (devargs->flow_parser[0] == '\0') {
PMD_INIT_LOG(WARNING, "flow module is not initialized");
return 0;
}
@@ -315,7 +315,7 @@ cpfl_flow_init(struct cpfl_adapter_ext *ad)
goto err;
}
- ret = cpfl_parser_create(&ad->flow_parser, ad->devargs.flow_parser);
+ ret = cpfl_parser_create(&ad->flow_parser, devargs->flow_parser);
if (ret) {
PMD_DRV_LOG(ERR, "Failed to create flow parser");
goto err;
@@ -331,7 +331,7 @@ cpfl_flow_init(struct cpfl_adapter_ext *ad)
void
cpfl_flow_uninit(struct cpfl_adapter_ext *ad)
{
- if (ad->devargs.flow_parser[0] == '\0')
+ if (ad->flow_parser == NULL)
return;
cpfl_parser_destroy(ad->flow_parser);
@@ -63,7 +63,7 @@ struct cpfl_flow_engine *cpfl_flow_engine_match(struct rte_eth_dev *dev,
void **meta);
int cpfl_flow_engine_init(struct cpfl_adapter_ext *adapter);
void cpfl_flow_engine_uninit(struct cpfl_adapter_ext *adapter);
-int cpfl_flow_init(struct cpfl_adapter_ext *ad);
+int cpfl_flow_init(struct cpfl_adapter_ext *ad, struct cpfl_devargs *devargs);
void cpfl_flow_uninit(struct cpfl_adapter_ext *ad);
struct rte_flow *cpfl_flow_create(struct rte_eth_dev *dev,
const struct rte_flow_attr *attr,
@@ -93,9 +93,8 @@ cpfl_repr_devargs_process_one(struct cpfl_adapter_ext *adapter,
}
int
-cpfl_repr_devargs_process(struct cpfl_adapter_ext *adapter)
+cpfl_repr_devargs_process(struct cpfl_adapter_ext *adapter, struct cpfl_devargs *devargs)
{
- struct cpfl_devargs *devargs = &adapter->devargs;
int ret, i, j;
/* check and refine repr args */
@@ -21,6 +21,8 @@ struct cpfl_repr_param {
struct cpfl_vport_info *vport_info;
};
-int cpfl_repr_devargs_process(struct cpfl_adapter_ext *adapter);
+extern struct cpfl_devargs *devargs;
+
+int cpfl_repr_devargs_process(struct cpfl_adapter_ext *adapter, struct cpfl_devargs *devargs);
int cpfl_repr_create(struct rte_pci_device *pci_dev, struct cpfl_adapter_ext *adapter);
#endif