diff --git a/drivers/net/cpfl/cpfl_ethdev.c b/drivers/net/cpfl/cpfl_ethdev.c
index 0093deab5a..8aa86b823c 100644
--- a/drivers/net/cpfl/cpfl_ethdev.c
+++ b/drivers/net/cpfl/cpfl_ethdev.c
@@ -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,7 +2270,8 @@ 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;
@@ -2330,7 +2328,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 +2624,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 +2660,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 +2677,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 +2694,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 +2705,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 +2723,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 +2767,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;
diff --git a/drivers/net/cpfl/cpfl_ethdev.h b/drivers/net/cpfl/cpfl_ethdev.h
index bb53fca7c0..7a31a376b6 100644
--- a/drivers/net/cpfl/cpfl_ethdev.h
+++ b/drivers/net/cpfl/cpfl_ethdev.h
@@ -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;
diff --git a/drivers/net/cpfl/cpfl_flow.c b/drivers/net/cpfl/cpfl_flow.c
index 4c9e375cca..3ba6c0f0e7 100644
--- a/drivers/net/cpfl/cpfl_flow.c
+++ b/drivers/net/cpfl/cpfl_flow.c
@@ -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);
diff --git a/drivers/net/cpfl/cpfl_flow.h b/drivers/net/cpfl/cpfl_flow.h
index 22c0cb4e65..1bde847763 100644
--- a/drivers/net/cpfl/cpfl_flow.h
+++ b/drivers/net/cpfl/cpfl_flow.h
@@ -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,
diff --git a/drivers/net/cpfl/cpfl_representor.c b/drivers/net/cpfl/cpfl_representor.c
index cb253f7af4..e2ed9eda04 100644
--- a/drivers/net/cpfl/cpfl_representor.c
+++ b/drivers/net/cpfl/cpfl_representor.c
@@ -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 */
diff --git a/drivers/net/cpfl/cpfl_representor.h b/drivers/net/cpfl/cpfl_representor.h
index d3a4de531e..d7f6e186f8 100644
--- a/drivers/net/cpfl/cpfl_representor.h
+++ b/drivers/net/cpfl/cpfl_representor.h
@@ -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
