DPDK patches and discussions
 help / color / mirror / Atom feed
* [PATCH 1/3] common/qat: limit configuration to the primary process
@ 2023-09-17 15:42 Arkadiusz Kusztal
  2023-09-17 15:42 ` [PATCH 2/3] common/qat: move command line params to the device struct Arkadiusz Kusztal
                   ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: Arkadiusz Kusztal @ 2023-09-17 15:42 UTC (permalink / raw)
  To: dev; +Cc: gakhil, kai.ji, ciara.power, Arkadiusz Kusztal

This change prevents certain configuration functions from being
called by the secondary process.

Signed-off-by: Arkadiusz Kusztal <arkadiuszx.kusztal@intel.com>
---
 drivers/common/qat/qat_device.c | 113 +++++++++++++++++++++++-----------------
 drivers/common/qat/qat_device.h |   2 +
 2 files changed, 66 insertions(+), 49 deletions(-)

diff --git a/drivers/common/qat/qat_device.c b/drivers/common/qat/qat_device.c
index 2675f0d9d1..93aef9aeb1 100644
--- a/drivers/common/qat/qat_device.c
+++ b/drivers/common/qat/qat_device.c
@@ -13,6 +13,15 @@
 #include "adf_pf2vf_msg.h"
 #include "qat_pf2vf.h"
 
+#define NOT_NULL(arg, func, msg, ...)		\
+	do {					\
+		if (arg == NULL) {		\
+			QAT_LOG(ERR,		\
+			msg, ##__VA_ARGS__);	\
+			func;			\
+		}				\
+	} while (0)
+
 /* Hardware device information per generation */
 struct qat_gen_hw_data qat_gen_config[QAT_N_GENS];
 struct qat_dev_hw_spec_funcs *qat_dev_hw_spec[QAT_N_GENS];
@@ -170,6 +179,28 @@ qat_dev_parse_cmd(const char *str, struct qat_dev_cmd_param
 	}
 }
 
+static enum qat_device_gen
+pick_gen(struct rte_pci_device *pci_dev)
+{
+	switch (pci_dev->id.device_id) {
+	case 0x0443:
+		return QAT_GEN1;
+	case 0x37c9:
+	case 0x19e3:
+	case 0x6f55:
+	case 0x18ef:
+		return QAT_GEN2;
+	case 0x18a1:
+		return QAT_GEN3;
+	case 0x4941:
+	case 0x4943:
+		return QAT_GEN4;
+	default:
+		QAT_LOG(ERR, "Invalid dev_id, can't determine generation");
+		return QAT_N_GENS;
+	}
+}
+
 struct qat_pci_device *
 qat_pci_device_allocate(struct rte_pci_device *pci_dev,
 		struct qat_dev_cmd_param *qat_dev_cmd_param)
@@ -187,24 +218,8 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev,
 	rte_pci_device_name(&pci_dev->addr, name, sizeof(name));
 	snprintf(name+strlen(name), QAT_DEV_NAME_MAX_LEN-strlen(name), "_qat");
 
-	switch (pci_dev->id.device_id) {
-	case 0x0443:
-		qat_dev_gen = QAT_GEN1;
-		break;
-	case 0x37c9:
-	case 0x19e3:
-	case 0x6f55:
-	case 0x18ef:
-		qat_dev_gen = QAT_GEN2;
-		break;
-	case 0x18a1:
-		qat_dev_gen = QAT_GEN3;
-		break;
-	case 0x4941:
-	case 0x4943:
-		qat_dev_gen = QAT_GEN4;
-		break;
-	default:
+	qat_dev_gen = pick_gen(pci_dev);
+	if (qat_dev_gen == QAT_N_GENS) {
 		QAT_LOG(ERR, "Invalid dev_id, can't determine generation");
 		return NULL;
 	}
@@ -261,20 +276,15 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev,
 	qat_dev->dev_private = qat_dev + 1;
 	strlcpy(qat_dev->name, name, QAT_DEV_NAME_MAX_LEN);
 	qat_dev->qat_dev_id = qat_dev_id;
-	qat_pci_devs[qat_dev_id].pci_dev = pci_dev;
 	qat_dev->qat_dev_gen = qat_dev_gen;
 
 	ops_hw = qat_dev_hw_spec[qat_dev->qat_dev_gen];
-	if (ops_hw->qat_dev_get_misc_bar == NULL) {
-		QAT_LOG(ERR, "qat_dev_get_misc_bar function pointer not set");
-		rte_memzone_free(qat_dev_mz);
-		return NULL;
-	}
+	NOT_NULL(ops_hw->qat_dev_reset_ring_pairs, goto error,
+		"QAT internal error! qat_dev_get_misc_bar function not set");
 	if (ops_hw->qat_dev_get_misc_bar(&mem_resource, pci_dev) == 0) {
 		if (mem_resource->addr == NULL) {
 			QAT_LOG(ERR, "QAT cannot get access to VF misc bar");
-			rte_memzone_free(qat_dev_mz);
-			return NULL;
+			goto error;
 		}
 		qat_dev->misc_bar_io_addr = mem_resource->addr;
 	} else
@@ -287,22 +297,45 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev,
 		QAT_LOG(ERR,
 			"Cannot acquire ring configuration for QAT_%d",
 			qat_dev_id);
-			rte_memzone_free(qat_dev_mz);
-		return NULL;
+		goto error;
+	}
+	NOT_NULL(ops_hw->qat_dev_reset_ring_pairs, goto error,
+		"QAT internal error! Reset ring pairs function not set, gen : %d",
+		qat_dev_gen);
+	if (ops_hw->qat_dev_reset_ring_pairs(qat_dev)) {
+		QAT_LOG(ERR,
+			"Cannot reset ring pairs, does pf driver supports pf2vf comms?"
+			);
+		goto error;
 	}
+	NOT_NULL(ops_hw->qat_dev_get_slice_map, goto error,
+		"QAT internal error! Reset ring pairs function not set, gen : %d",
+		qat_dev_gen);
+	if (ops_hw->qat_dev_get_slice_map(&qat_dev->slice_map, pci_dev) < 0) {
+		RTE_LOG(ERR, EAL,
+			"Cannot read slice configuration\n");
+		goto error;
+	}
+	rte_spinlock_init(&qat_dev->arb_csr_lock);
 
 	/* No errors when allocating, attach memzone with
 	 * qat_dev to list of devices
 	 */
 	qat_pci_devs[qat_dev_id].mz = qat_dev_mz;
-
-	rte_spinlock_init(&qat_dev->arb_csr_lock);
+	qat_pci_devs[qat_dev_id].pci_dev = pci_dev;
 	qat_nb_pci_devices++;
 
 	QAT_LOG(DEBUG, "QAT device %d found, name %s, total QATs %d",
 			qat_dev->qat_dev_id, qat_dev->name, qat_nb_pci_devices);
 
 	return qat_dev;
+error:
+	if (rte_memzone_free(qat_dev_mz)) {
+		QAT_LOG(DEBUG,
+			"QAT internal error! Trying to free already allocated memzone: %s",
+			qat_dev_mz->name);
+	}
+	return NULL;
 }
 
 static int
@@ -367,9 +400,7 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 {
 	int sym_ret = 0, asym_ret = 0, comp_ret = 0;
 	int num_pmds_created = 0;
-	uint32_t capa = 0;
 	struct qat_pci_device *qat_pci_dev;
-	struct qat_dev_hw_spec_funcs *ops_hw;
 	struct qat_dev_cmd_param qat_dev_cmd_param[] = {
 			{ QAT_LEGACY_CAPA, 0 },
 			{ SYM_ENQ_THRESHOLD_NAME, 0 },
@@ -389,23 +420,7 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 	if (qat_pci_dev == NULL)
 		return -ENODEV;
 
-	ops_hw = qat_dev_hw_spec[qat_pci_dev->qat_dev_gen];
-	if (ops_hw->qat_dev_reset_ring_pairs == NULL)
-		return -ENOTSUP;
-	if (ops_hw->qat_dev_reset_ring_pairs(qat_pci_dev)) {
-		QAT_LOG(ERR,
-			"Cannot reset ring pairs, does pf driver supports pf2vf comms?"
-			);
-		return -ENODEV;
-	}
-
-	if (ops_hw->qat_dev_get_slice_map(&capa, pci_dev) < 0) {
-		RTE_LOG(ERR, EAL,
-			"Cannot read slice configuration\n");
-		return -1;
-	}
-	qat_dev_cmd_param[QAT_CMD_SLICE_MAP_POS].val = capa;
-
+	qat_dev_cmd_param[QAT_CMD_SLICE_MAP_POS].val = qat_pci_dev->slice_map;
 	sym_ret = qat_sym_dev_create(qat_pci_dev, qat_dev_cmd_param);
 	if (sym_ret == 0) {
 		num_pmds_created++;
diff --git a/drivers/common/qat/qat_device.h b/drivers/common/qat/qat_device.h
index afee83017b..23d7f54b61 100644
--- a/drivers/common/qat/qat_device.h
+++ b/drivers/common/qat/qat_device.h
@@ -133,6 +133,8 @@ struct qat_pci_device {
 	/**< Address of misc bar */
 	void *dev_private;
 	/**< Per generation specific information */
+	uint32_t slice_map;
+	/**< QAT slice map */
 };
 
 struct qat_gen_hw_data {
-- 
2.13.6


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 2/3] common/qat: move command line params to the device struct
  2023-09-17 15:42 [PATCH 1/3] common/qat: limit configuration to the primary process Arkadiusz Kusztal
@ 2023-09-17 15:42 ` Arkadiusz Kusztal
  2023-09-18 16:01   ` Power, Ciara
  2023-09-17 15:42 ` [PATCH 3/3] common/qat: decouple pmds from the common code Arkadiusz Kusztal
  2023-09-18 15:07 ` [PATCH 1/3] common/qat: limit configuration to the primary process Power, Ciara
  2 siblings, 1 reply; 12+ messages in thread
From: Arkadiusz Kusztal @ 2023-09-17 15:42 UTC (permalink / raw)
  To: dev; +Cc: gakhil, kai.ji, ciara.power, Arkadiusz Kusztal

Command line parameters was moved to the device struct.

Signed-off-by: Arkadiusz Kusztal <arkadiuszx.kusztal@intel.com>
---
 drivers/common/qat/qat_device.c     | 54 ++++++++++++++++++-------------------
 drivers/common/qat/qat_device.h     | 35 ++++++++++++------------
 drivers/compress/qat/qat_comp_pmd.c |  9 +++----
 drivers/compress/qat/qat_comp_pmd.h |  3 +--
 drivers/crypto/qat/qat_asym.c       | 13 +++++----
 drivers/crypto/qat/qat_sym.c        | 23 ++++++++--------
 6 files changed, 66 insertions(+), 71 deletions(-)

diff --git a/drivers/common/qat/qat_device.c b/drivers/common/qat/qat_device.c
index 93aef9aeb1..d9604e666d 100644
--- a/drivers/common/qat/qat_device.c
+++ b/drivers/common/qat/qat_device.c
@@ -22,6 +22,16 @@
 		}				\
 	} while (0)
 
+const char *cmd_arg_strings[] = {
+	[QAT_LEGACY_CAPA_POS]		= "qat_legacy_capa",
+	[SYM_ENQ_THRESHOLD_POS]		= "qat_sym_enq_threshold",
+	[ASYM_ENQ_THRESHOLD_POS]	= "qat_asym_enq_threshold",
+	[COMP_ENQ_THRESHOLD_POS]	= "qat_comp_enq_threshold",
+	[SYM_CIPHER_CRC_ENABLE_POS]	= "qat_sym_cipher_crc_enable",
+	[QAT_CMD_SLICE_MAP_POS]		= "qat_cmd_slice_disable",
+	[QAT_CMD_SLICE_MAP_POS + 1]	= NULL,
+};
+
 /* Hardware device information per generation */
 struct qat_gen_hw_data qat_gen_config[QAT_N_GENS];
 struct qat_dev_hw_spec_funcs *qat_dev_hw_spec[QAT_N_GENS];
@@ -117,7 +127,7 @@ qat_get_qat_dev_from_pci_dev(struct rte_pci_device *pci_dev)
 
 static void
 qat_dev_parse_cmd(const char *str, struct qat_dev_cmd_param
-		*qat_dev_cmd_param)
+		*cmd_line_param)
 {
 	int i = 0;
 	const char *param;
@@ -125,7 +135,7 @@ qat_dev_parse_cmd(const char *str, struct qat_dev_cmd_param
 	while (1) {
 		char value_str[4] = { };
 
-		param = qat_dev_cmd_param[i].name;
+		param = cmd_arg_strings[i];
 		if (param == NULL)
 			return;
 		long value = 0;
@@ -174,7 +184,7 @@ qat_dev_parse_cmd(const char *str, struct qat_dev_cmd_param
 						param, value);
 			}
 		}
-		qat_dev_cmd_param[i].val = value;
+		cmd_line_param[i].val = value;
 		i++;
 	}
 }
@@ -201,9 +211,8 @@ pick_gen(struct rte_pci_device *pci_dev)
 	}
 }
 
-struct qat_pci_device *
-qat_pci_device_allocate(struct rte_pci_device *pci_dev,
-		struct qat_dev_cmd_param *qat_dev_cmd_param)
+static struct qat_pci_device *
+qat_pci_device_allocate(struct rte_pci_device *pci_dev)
 {
 	struct qat_pci_device *qat_dev;
 	enum qat_device_gen qat_dev_gen;
@@ -291,7 +300,7 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev,
 		qat_dev->misc_bar_io_addr = NULL;
 
 	if (devargs && devargs->drv_str)
-		qat_dev_parse_cmd(devargs->drv_str, qat_dev_cmd_param);
+		qat_dev_parse_cmd(devargs->drv_str, qat_dev->cmd_line_param);
 
 	if (qat_read_qp_config(qat_dev)) {
 		QAT_LOG(ERR,
@@ -311,7 +320,9 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev,
 	NOT_NULL(ops_hw->qat_dev_get_slice_map, goto error,
 		"QAT internal error! Reset ring pairs function not set, gen : %d",
 		qat_dev_gen);
-	if (ops_hw->qat_dev_get_slice_map(&qat_dev->slice_map, pci_dev) < 0) {
+	if (ops_hw->qat_dev_get_slice_map(
+			&qat_dev->cmd_line_param[QAT_CMD_SLICE_MAP_POS].val,
+			pci_dev) < 0) {
 		RTE_LOG(ERR, EAL,
 			"Cannot read slice configuration\n");
 		goto error;
@@ -401,27 +412,17 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 	int sym_ret = 0, asym_ret = 0, comp_ret = 0;
 	int num_pmds_created = 0;
 	struct qat_pci_device *qat_pci_dev;
-	struct qat_dev_cmd_param qat_dev_cmd_param[] = {
-			{ QAT_LEGACY_CAPA, 0 },
-			{ SYM_ENQ_THRESHOLD_NAME, 0 },
-			{ ASYM_ENQ_THRESHOLD_NAME, 0 },
-			{ COMP_ENQ_THRESHOLD_NAME, 0 },
-			{ SYM_CIPHER_CRC_ENABLE_NAME, 0 },
-			[QAT_CMD_SLICE_MAP_POS] = { QAT_CMD_SLICE_MAP, 0},
-			{ NULL, 0 },
-	};
 
 	QAT_LOG(DEBUG, "Found QAT device at %02x:%02x.%x",
 			pci_dev->addr.bus,
 			pci_dev->addr.devid,
 			pci_dev->addr.function);
 
-	qat_pci_dev = qat_pci_device_allocate(pci_dev, qat_dev_cmd_param);
+	qat_pci_dev = qat_pci_device_allocate(pci_dev);
 	if (qat_pci_dev == NULL)
 		return -ENODEV;
 
-	qat_dev_cmd_param[QAT_CMD_SLICE_MAP_POS].val = qat_pci_dev->slice_map;
-	sym_ret = qat_sym_dev_create(qat_pci_dev, qat_dev_cmd_param);
+	sym_ret = qat_sym_dev_create(qat_pci_dev);
 	if (sym_ret == 0) {
 		num_pmds_created++;
 	}
@@ -430,7 +431,7 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 				"Failed to create QAT SYM PMD on device %s",
 				qat_pci_dev->name);
 
-	comp_ret = qat_comp_dev_create(qat_pci_dev, qat_dev_cmd_param);
+	comp_ret = qat_comp_dev_create(qat_pci_dev);
 	if (comp_ret == 0)
 		num_pmds_created++;
 	else
@@ -438,7 +439,7 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 				"Failed to create QAT COMP PMD on device %s",
 				qat_pci_dev->name);
 
-	asym_ret = qat_asym_dev_create(qat_pci_dev, qat_dev_cmd_param);
+	asym_ret = qat_asym_dev_create(qat_pci_dev);
 	if (asym_ret == 0)
 		num_pmds_created++;
 	else
@@ -475,15 +476,13 @@ static struct rte_pci_driver rte_qat_pmd = {
 };
 
 __rte_weak int
-qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused,
-		struct qat_dev_cmd_param *qat_dev_cmd_param __rte_unused)
+qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
 {
 	return 0;
 }
 
 __rte_weak int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused,
-		const struct qat_dev_cmd_param *qat_dev_cmd_param __rte_unused)
+qat_asym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
 {
 	return 0;
 }
@@ -501,8 +500,7 @@ qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused)
 }
 
 __rte_weak int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused,
-		struct qat_dev_cmd_param *qat_dev_cmd_param __rte_unused)
+qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
 {
 	return 0;
 }
diff --git a/drivers/common/qat/qat_device.h b/drivers/common/qat/qat_device.h
index 23d7f54b61..dcb5a42c89 100644
--- a/drivers/common/qat/qat_device.h
+++ b/drivers/common/qat/qat_device.h
@@ -17,14 +17,21 @@
 
 #define QAT_DEV_NAME_MAX_LEN	64
 
-#define QAT_LEGACY_CAPA "qat_legacy_capa"
+#define QAT_LEGACY_CAPA_NAME "qat_legacy_capa"
 #define SYM_ENQ_THRESHOLD_NAME "qat_sym_enq_threshold"
 #define ASYM_ENQ_THRESHOLD_NAME "qat_asym_enq_threshold"
 #define COMP_ENQ_THRESHOLD_NAME "qat_comp_enq_threshold"
 #define SYM_CIPHER_CRC_ENABLE_NAME "qat_sym_cipher_crc_enable"
-#define QAT_CMD_SLICE_MAP "qat_cmd_slice_disable"
-#define QAT_CMD_SLICE_MAP_POS	5
-#define MAX_QP_THRESHOLD_SIZE	32
+#define QAT_CMD_SLICE_MAP_NAME "qat_cmd_slice_disable"
+#define QAT_LEGACY_CAPA_POS		0
+#define SYM_ENQ_THRESHOLD_POS		1
+#define ASYM_ENQ_THRESHOLD_POS		2
+#define COMP_ENQ_THRESHOLD_POS		3
+#define SYM_CIPHER_CRC_ENABLE_POS	4
+#define QAT_CMD_SLICE_MAP_POS		5
+#define MAX_QP_THRESHOLD_SIZE		32
+
+extern const char *cmd_arg_strings[];
 
 /**
  * Function prototypes for GENx specific device operations.
@@ -53,8 +60,7 @@ struct qat_dev_hw_spec_funcs {
 extern struct qat_dev_hw_spec_funcs *qat_dev_hw_spec[];
 
 struct qat_dev_cmd_param {
-	const char *name;
-	uint16_t val;
+	uint32_t val;
 };
 
 struct qat_device_info {
@@ -133,8 +139,8 @@ struct qat_pci_device {
 	/**< Address of misc bar */
 	void *dev_private;
 	/**< Per generation specific information */
-	uint32_t slice_map;
-	/**< QAT slice map */
+	struct qat_dev_cmd_param cmd_line_param[QAT_CMD_SLICE_MAP_POS + 1];
+	/**< Command line parameters values */
 };
 
 struct qat_gen_hw_data {
@@ -155,20 +161,14 @@ struct qat_pf2vf_dev {
 extern struct qat_gen_hw_data qat_gen_config[];
 
 struct qat_pci_device *
-qat_pci_device_allocate(struct rte_pci_device *pci_dev,
-		struct qat_dev_cmd_param *qat_dev_cmd_param);
-
-struct qat_pci_device *
 qat_get_qat_dev_from_pci_dev(struct rte_pci_device *pci_dev);
 
 /* declaration needed for weak functions */
 int
-qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused,
-		struct qat_dev_cmd_param *qat_dev_cmd_param);
+qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused);
 
 int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev,
-		const struct qat_dev_cmd_param *qat_dev_cmd_param);
+qat_asym_dev_create(struct qat_pci_device *qat_pci_dev);
 
 int
 qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
@@ -177,8 +177,7 @@ int
 qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
 
 int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused,
-		struct qat_dev_cmd_param *qat_dev_cmd_param);
+qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused);
 
 int
 qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
diff --git a/drivers/compress/qat/qat_comp_pmd.c b/drivers/compress/qat/qat_comp_pmd.c
index 6fb8cf69be..cc91edca3a 100644
--- a/drivers/compress/qat/qat_comp_pmd.c
+++ b/drivers/compress/qat/qat_comp_pmd.c
@@ -663,8 +663,7 @@ static const struct rte_driver compdev_qat_driver = {
 };
 
 int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev,
-		struct qat_dev_cmd_param *qat_dev_cmd_param)
+qat_comp_dev_create(struct qat_pci_device *qat_pci_dev)
 {
 	int i = 0;
 	struct qat_device_info *qat_dev_instance =
@@ -759,11 +758,11 @@ qat_comp_dev_create(struct qat_pci_device *qat_pci_dev,
 	comp_dev->qat_dev_capabilities = comp_dev->capa_mz->addr;
 
 	while (1) {
-		if (qat_dev_cmd_param[i].name == NULL)
+		if (cmd_arg_strings[i] == NULL)
 			break;
-		if (!strcmp(qat_dev_cmd_param[i].name, COMP_ENQ_THRESHOLD_NAME))
+		if (!strcmp(cmd_arg_strings[i], COMP_ENQ_THRESHOLD_NAME))
 			comp_dev->min_enq_burst_threshold =
-					qat_dev_cmd_param[i].val;
+				qat_pci_dev->cmd_line_param[i].val;
 		i++;
 	}
 	qat_pci_dev->comp_dev = comp_dev;
diff --git a/drivers/compress/qat/qat_comp_pmd.h b/drivers/compress/qat/qat_comp_pmd.h
index 3c8682a768..1f5b0facf7 100644
--- a/drivers/compress/qat/qat_comp_pmd.h
+++ b/drivers/compress/qat/qat_comp_pmd.h
@@ -107,8 +107,7 @@ qat_comp_setup_inter_buffers(struct qat_comp_dev_private *comp_dev,
 		uint32_t buff_size);
 
 int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev,
-		struct qat_dev_cmd_param *qat_dev_cmd_param);
+qat_comp_dev_create(struct qat_pci_device *qat_pci_dev);
 
 int
 qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev);
diff --git a/drivers/crypto/qat/qat_asym.c b/drivers/crypto/qat/qat_asym.c
index 7abd513423..2b54b63e8f 100644
--- a/drivers/crypto/qat/qat_asym.c
+++ b/drivers/crypto/qat/qat_asym.c
@@ -1415,8 +1415,7 @@ qat_asym_init_op_cookie(void *op_cookie)
 }
 
 int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev,
-		const struct qat_dev_cmd_param *qat_dev_cmd_param)
+qat_asym_dev_create(struct qat_pci_device *qat_pci_dev)
 {
 	struct qat_cryptodev_private *internals;
 	struct rte_cryptodev *cryptodev;
@@ -1490,13 +1489,13 @@ qat_asym_dev_create(struct qat_pci_device *qat_pci_dev,
 	internals->dev_id = cryptodev->data->dev_id;
 
 	while (1) {
-		if (qat_dev_cmd_param[i].name == NULL)
+		if (cmd_arg_strings[i] == NULL)
 			break;
-		if (!strcmp(qat_dev_cmd_param[i].name, ASYM_ENQ_THRESHOLD_NAME))
+		if (!strcmp(cmd_arg_strings[i], ASYM_ENQ_THRESHOLD_NAME))
 			internals->min_enq_burst_threshold =
-					qat_dev_cmd_param[i].val;
-		if (!strcmp(qat_dev_cmd_param[i].name, QAT_CMD_SLICE_MAP))
-			slice_map = qat_dev_cmd_param[i].val;
+				qat_pci_dev->cmd_line_param[i].val;
+		if (!strcmp(cmd_arg_strings[i], QAT_CMD_SLICE_MAP_NAME))
+			slice_map = qat_pci_dev->cmd_line_param[i].val;
 		i++;
 	}
 
diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c
index 936c2615e4..c06b7120c0 100644
--- a/drivers/crypto/qat/qat_sym.c
+++ b/drivers/crypto/qat/qat_sym.c
@@ -15,6 +15,8 @@
 #include "qat_crypto.h"
 #include "qat_qp.h"
 
+extern const char *cmd_arg_strings[];
+
 uint8_t qat_sym_driver_id;
 int qat_legacy_capa;
 
@@ -182,8 +184,7 @@ qat_sym_dequeue_burst(void *qp, struct rte_crypto_op **ops,
 }
 
 int
-qat_sym_dev_create(struct qat_pci_device *qat_pci_dev,
-		struct qat_dev_cmd_param *qat_dev_cmd_param)
+qat_sym_dev_create(struct qat_pci_device *qat_pci_dev)
 {
 	int i = 0, ret = 0;
 	uint16_t slice_map = 0;
@@ -277,18 +278,18 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev,
 
 	internals->dev_id = cryptodev->data->dev_id;
 
-	while (qat_dev_cmd_param[i].name != NULL) {
-		if (!strcmp(qat_dev_cmd_param[i].name, SYM_ENQ_THRESHOLD_NAME))
+	while (cmd_arg_strings[i] != NULL) {
+		if (!strcmp(cmd_arg_strings[i], SYM_ENQ_THRESHOLD_NAME))
 			internals->min_enq_burst_threshold =
-					qat_dev_cmd_param[i].val;
-		if (!strcmp(qat_dev_cmd_param[i].name,
+				qat_pci_dev->cmd_line_param[i].val;
+		if (!strcmp(cmd_arg_strings[i],
 				SYM_CIPHER_CRC_ENABLE_NAME))
 			internals->cipher_crc_offload_enable =
-					qat_dev_cmd_param[i].val;
-		if (!strcmp(qat_dev_cmd_param[i].name, QAT_LEGACY_CAPA))
-			qat_legacy_capa = qat_dev_cmd_param[i].val;
-		if (!strcmp(qat_dev_cmd_param[i].name, QAT_CMD_SLICE_MAP))
-			slice_map = qat_dev_cmd_param[i].val;
+				qat_pci_dev->cmd_line_param[i].val;
+		if (!strcmp(cmd_arg_strings[i], QAT_LEGACY_CAPA_NAME))
+			qat_legacy_capa = qat_pci_dev->cmd_line_param[i].val;
+		if (!strcmp(cmd_arg_strings[i], QAT_CMD_SLICE_MAP_NAME))
+			slice_map = qat_pci_dev->cmd_line_param[i].val;
 		i++;
 	}
 
-- 
2.13.6


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 3/3] common/qat: decouple pmds from the common code
  2023-09-17 15:42 [PATCH 1/3] common/qat: limit configuration to the primary process Arkadiusz Kusztal
  2023-09-17 15:42 ` [PATCH 2/3] common/qat: move command line params to the device struct Arkadiusz Kusztal
@ 2023-09-17 15:42 ` Arkadiusz Kusztal
  2023-10-06 12:50   ` Power, Ciara
                     ` (2 more replies)
  2023-09-18 15:07 ` [PATCH 1/3] common/qat: limit configuration to the primary process Power, Ciara
  2 siblings, 3 replies; 12+ messages in thread
From: Arkadiusz Kusztal @ 2023-09-17 15:42 UTC (permalink / raw)
  To: dev; +Cc: gakhil, kai.ji, ciara.power, Arkadiusz Kusztal

Service specific functions were moved to services
files.

Signed-off-by: Arkadiusz Kusztal <arkadiuszx.kusztal@intel.com>
---
 drivers/common/qat/dev/qat_dev_gen1.c        |   1 +
 drivers/common/qat/dev/qat_dev_gen2.c        |   1 +
 drivers/common/qat/dev/qat_dev_gen3.c        |   2 +
 drivers/common/qat/dev/qat_dev_gen4.c        |   1 +
 drivers/common/qat/qat_device.c              | 128 +++++++++------------------
 drivers/common/qat/qat_device.h              |  52 +++--------
 drivers/common/qat/qat_pf2vf.c               |   1 +
 drivers/common/qat/qat_qp.c                  |   2 -
 drivers/compress/qat/dev/qat_comp_pmd_gen1.c |   1 +
 drivers/compress/qat/dev/qat_comp_pmd_gen2.c |   1 +
 drivers/compress/qat/dev/qat_comp_pmd_gen3.c |   1 +
 drivers/compress/qat/dev/qat_comp_pmd_gen4.c |   1 +
 drivers/compress/qat/qat_comp_pmd.c          |  44 +++++----
 drivers/compress/qat/qat_comp_pmd.h          |   7 --
 drivers/crypto/qat/qat_asym.c                |  30 +++++--
 drivers/crypto/qat/qat_sym.c                 |  28 ++++--
 16 files changed, 138 insertions(+), 163 deletions(-)

diff --git a/drivers/common/qat/dev/qat_dev_gen1.c b/drivers/common/qat/dev/qat_dev_gen1.c
index dd2e878e90..5a6ea40906 100644
--- a/drivers/common/qat/dev/qat_dev_gen1.c
+++ b/drivers/common/qat/dev/qat_dev_gen1.c
@@ -4,6 +4,7 @@
 
 #include "qat_device.h"
 #include "qat_qp.h"
+#include "qat_logs.h"
 #include "adf_transport_access_macros.h"
 #include "qat_dev_gens.h"
 
diff --git a/drivers/common/qat/dev/qat_dev_gen2.c b/drivers/common/qat/dev/qat_dev_gen2.c
index 061dfdb698..62be4d0681 100644
--- a/drivers/common/qat/dev/qat_dev_gen2.c
+++ b/drivers/common/qat/dev/qat_dev_gen2.c
@@ -4,6 +4,7 @@
 
 #include "qat_device.h"
 #include "qat_qp.h"
+#include "qat_logs.h"
 #include "adf_transport_access_macros.h"
 #include "qat_dev_gens.h"
 
diff --git a/drivers/common/qat/dev/qat_dev_gen3.c b/drivers/common/qat/dev/qat_dev_gen3.c
index f01b98ff86..f25c55e030 100644
--- a/drivers/common/qat/dev/qat_dev_gen3.c
+++ b/drivers/common/qat/dev/qat_dev_gen3.c
@@ -4,8 +4,10 @@
 
 #include "qat_device.h"
 #include "qat_qp.h"
+#include "qat_logs.h"
 #include "adf_transport_access_macros.h"
 #include "qat_dev_gens.h"
+#include "icp_qat_hw.h"
 
 #include <stdint.h>
 
diff --git a/drivers/common/qat/dev/qat_dev_gen4.c b/drivers/common/qat/dev/qat_dev_gen4.c
index 1ce262f715..67f89be0e2 100644
--- a/drivers/common/qat/dev/qat_dev_gen4.c
+++ b/drivers/common/qat/dev/qat_dev_gen4.c
@@ -7,6 +7,7 @@
 
 #include "qat_device.h"
 #include "qat_qp.h"
+#include "qat_logs.h"
 #include "adf_transport_access_macros_gen4vf.h"
 #include "adf_pf2vf_msg.h"
 #include "qat_pf2vf.h"
diff --git a/drivers/common/qat/qat_device.c b/drivers/common/qat/qat_device.c
index d9604e666d..81d9014764 100644
--- a/drivers/common/qat/qat_device.c
+++ b/drivers/common/qat/qat_device.c
@@ -2,16 +2,11 @@
  * Copyright(c) 2018-2022 Intel Corporation
  */
 
-#include <rte_string_fns.h>
 #include <rte_devargs.h>
 #include <ctype.h>
 
 #include "qat_device.h"
-#include "adf_transport_access_macros.h"
-#include "qat_sym.h"
-#include "qat_comp_pmd.h"
-#include "adf_pf2vf_msg.h"
-#include "qat_pf2vf.h"
+#include "qat_logs.h"
 
 #define NOT_NULL(arg, func, msg, ...)		\
 	do {					\
@@ -32,14 +27,30 @@ const char *cmd_arg_strings[] = {
 	[QAT_CMD_SLICE_MAP_POS + 1]	= NULL,
 };
 
+#define MAX_NO_OF_SERVICES	16
+
 /* Hardware device information per generation */
 struct qat_gen_hw_data qat_gen_config[QAT_N_GENS];
 struct qat_dev_hw_spec_funcs *qat_dev_hw_spec[QAT_N_GENS];
+int qat_dev_services_no;
+struct qat_dev_service qat_dev_service[MAX_NO_OF_SERVICES];
 
 /* per-process array of device data */
 struct qat_device_info qat_pci_devs[RTE_PMD_QAT_MAX_PCI_DEVICES];
 static int qat_nb_pci_devices;
 
+int
+get_service_pos(const char *name)
+{
+	int i;
+
+	for (i = 0; i < qat_dev_services_no; i++) {
+		if (strcmp(name, qat_dev_service[i].name) == 0)
+			return i;
+	}
+	return -1;
+}
+
 /*
  * The set of PCI devices this driver supports
  */
@@ -270,7 +281,8 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev)
 		return NULL;
 	}
 
-	qat_dev_size = sizeof(struct qat_pci_device) + extra_size;
+	qat_dev_size = sizeof(struct qat_pci_device) + sizeof(void *) *
+		qat_dev_services_no + extra_size;
 	qat_dev_mz = rte_memzone_reserve(name, qat_dev_size,
 		rte_socket_id(), 0);
 
@@ -355,6 +367,7 @@ qat_pci_device_release(struct rte_pci_device *pci_dev)
 	struct qat_pci_device *qat_dev;
 	char name[QAT_DEV_NAME_MAX_LEN];
 	int busy = 0;
+	int i;
 
 	if (pci_dev == NULL)
 		return -EINVAL;
@@ -369,20 +382,12 @@ qat_pci_device_release(struct rte_pci_device *pci_dev)
 		/* Check that there are no service devs still on pci device */
 
 		if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
-			if (qat_dev->sym_dev != NULL) {
-				QAT_LOG(DEBUG, "QAT sym device %s is busy",
-					name);
-				busy = 1;
-			}
-			if (qat_dev->asym_dev != NULL) {
-				QAT_LOG(DEBUG, "QAT asym device %s is busy",
-					name);
-				busy = 1;
-			}
-			if (qat_dev->comp_dev != NULL) {
-				QAT_LOG(DEBUG, "QAT comp device %s is busy",
-					name);
-				busy = 1;
+			for (i = 0; i < qat_dev_services_no; i++) {
+				if (qat_dev->pmd[i] != NULL) {
+					QAT_LOG(DEBUG, "QAT %s device %s is busy",
+						qat_dev_service[i].name, name);
+					busy = 1;
+				}
 			}
 			if (busy)
 				return -EBUSY;
@@ -400,16 +405,19 @@ static int
 qat_pci_dev_destroy(struct qat_pci_device *qat_pci_dev,
 		struct rte_pci_device *pci_dev)
 {
-	qat_sym_dev_destroy(qat_pci_dev);
-	qat_comp_dev_destroy(qat_pci_dev);
-	qat_asym_dev_destroy(qat_pci_dev);
+	int i;
+
+	for (i = 0; i < qat_dev_services_no; i++) {
+		if (qat_dev_service[i].dev_create)
+			qat_dev_service[i].dev_destroy(qat_pci_dev);
+	}
 	return qat_pci_device_release(pci_dev);
 }
 
 static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 		struct rte_pci_device *pci_dev)
 {
-	int sym_ret = 0, asym_ret = 0, comp_ret = 0;
+	int i, ret = 0;
 	int num_pmds_created = 0;
 	struct qat_pci_device *qat_pci_dev;
 
@@ -422,30 +430,18 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 	if (qat_pci_dev == NULL)
 		return -ENODEV;
 
-	sym_ret = qat_sym_dev_create(qat_pci_dev);
-	if (sym_ret == 0) {
-		num_pmds_created++;
+	for (i = 0; i < qat_dev_services_no; i++) {
+		if (qat_dev_service[i].dev_create) {
+			ret = qat_dev_service[i].dev_create(qat_pci_dev);
+			if (ret == 0)
+				num_pmds_created++;
+			else {
+				QAT_LOG(WARNING, "Failed to create %s PMD on device %s",
+					qat_dev_service[i].name,
+					qat_pci_dev->name);
+			}
+		}
 	}
-	else
-		QAT_LOG(WARNING,
-				"Failed to create QAT SYM PMD on device %s",
-				qat_pci_dev->name);
-
-	comp_ret = qat_comp_dev_create(qat_pci_dev);
-	if (comp_ret == 0)
-		num_pmds_created++;
-	else
-		QAT_LOG(WARNING,
-				"Failed to create QAT COMP PMD on device %s",
-				qat_pci_dev->name);
-
-	asym_ret = qat_asym_dev_create(qat_pci_dev);
-	if (asym_ret == 0)
-		num_pmds_created++;
-	else
-		QAT_LOG(WARNING,
-				"Failed to create QAT ASYM PMD on device %s",
-				qat_pci_dev->name);
 
 	if (num_pmds_created == 0)
 		qat_pci_dev_destroy(qat_pci_dev, pci_dev);
@@ -475,42 +471,6 @@ static struct rte_pci_driver rte_qat_pmd = {
 	.remove = qat_pci_remove
 };
 
-__rte_weak int
-qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-	return 0;
-}
-
-__rte_weak int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-	return 0;
-}
-
-__rte_weak int
-qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-	return 0;
-}
-
-__rte_weak int
-qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-	return 0;
-}
-
-__rte_weak int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-	return 0;
-}
-
-__rte_weak int
-qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-	return 0;
-}
-
 RTE_PMD_REGISTER_PCI(QAT_PCI_NAME, rte_qat_pmd);
 RTE_PMD_REGISTER_PCI_TABLE(QAT_PCI_NAME, pci_id_qat_map);
 RTE_PMD_REGISTER_KMOD_DEP(QAT_PCI_NAME, "* igb_uio | uio_pci_generic | vfio-pci");
diff --git a/drivers/common/qat/qat_device.h b/drivers/common/qat/qat_device.h
index dcb5a42c89..41d658e386 100644
--- a/drivers/common/qat/qat_device.h
+++ b/drivers/common/qat/qat_device.h
@@ -7,10 +7,7 @@
 #include <bus_pci_driver.h>
 
 #include "qat_common.h"
-#include "qat_logs.h"
 #include "qat_qp.h"
-#include "adf_transport_access_macros.h"
-#include "icp_qat_hw.h"
 
 #define QAT_DETACHED  (0)
 #define QAT_ATTACHED  (1)
@@ -63,6 +60,18 @@ struct qat_dev_cmd_param {
 	uint32_t val;
 };
 
+struct qat_dev_service {
+	const char *name;
+	int (*dev_create)(struct qat_pci_device *qat_pci_dev);
+	int (*dev_destroy)(struct qat_pci_device *qat_pci_dev);
+};
+
+extern int qat_dev_services_no;
+extern struct qat_dev_service qat_dev_service[];
+
+int
+get_service_pos(const char *name);
+
 struct qat_device_info {
 	const struct rte_memzone *mz;
 	/**< mz to store the qat_pci_device so it can be
@@ -90,9 +99,6 @@ struct qat_device_info {
 
 extern struct qat_device_info qat_pci_devs[];
 
-struct qat_cryptodev_private;
-struct qat_comp_dev_private;
-
 /*
  * This struct holds all the data about a QAT pci device
  * including data about all services it supports.
@@ -117,30 +123,17 @@ struct qat_pci_device {
 
 	struct qat_qp *qps_in_use[QAT_MAX_SERVICES][ADF_MAX_QPS_ON_ANY_SERVICE];
 	/**< links to qps set up for each service, index same as on API */
-
-	/* Data relating to symmetric crypto service */
-	struct qat_cryptodev_private *sym_dev;
-	/**< link back to cryptodev private data */
-
 	int qat_sym_driver_id;
 	/**< Symmetric driver id used by this device */
-
-	/* Data relating to asymmetric crypto service */
-	struct qat_cryptodev_private *asym_dev;
-	/**< link back to cryptodev private data */
-
 	int qat_asym_driver_id;
 	/**< Symmetric driver id used by this device */
-
-	/* Data relating to compression service */
-	struct qat_comp_dev_private *comp_dev;
-	/**< link back to compressdev private data */
 	void *misc_bar_io_addr;
 	/**< Address of misc bar */
 	void *dev_private;
 	/**< Per generation specific information */
 	struct qat_dev_cmd_param cmd_line_param[QAT_CMD_SLICE_MAP_POS + 1];
 	/**< Command line parameters values */
+	void *pmd[];
 };
 
 struct qat_gen_hw_data {
@@ -163,23 +156,4 @@ extern struct qat_gen_hw_data qat_gen_config[];
 struct qat_pci_device *
 qat_get_qat_dev_from_pci_dev(struct rte_pci_device *pci_dev);
 
-/* declaration needed for weak functions */
-int
-qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused);
-
-int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev);
-
-int
-qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
-
-int
-qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
-
-int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused);
-
-int
-qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
-
 #endif /* _QAT_DEVICE_H_ */
diff --git a/drivers/common/qat/qat_pf2vf.c b/drivers/common/qat/qat_pf2vf.c
index 621f12fce2..9a1816ae5e 100644
--- a/drivers/common/qat/qat_pf2vf.c
+++ b/drivers/common/qat/qat_pf2vf.c
@@ -4,6 +4,7 @@
 
 #include "qat_pf2vf.h"
 #include "adf_pf2vf_msg.h"
+#include "qat_logs.h"
 
 #include <rte_cycles.h>
 
diff --git a/drivers/common/qat/qat_qp.c b/drivers/common/qat/qat_qp.c
index f95dd33375..7fe7e3b869 100644
--- a/drivers/common/qat/qat_qp.c
+++ b/drivers/common/qat/qat_qp.c
@@ -19,8 +19,6 @@
 #include "qat_device.h"
 #include "qat_qp.h"
 #include "qat_sym.h"
-#include "qat_asym.h"
-#include "qat_comp.h"
 
 #define QAT_CQ_MAX_DEQ_RETRIES 10
 
diff --git a/drivers/compress/qat/dev/qat_comp_pmd_gen1.c b/drivers/compress/qat/dev/qat_comp_pmd_gen1.c
index 3a8484eef1..ec98c4a3ce 100644
--- a/drivers/compress/qat/dev/qat_comp_pmd_gen1.c
+++ b/drivers/compress/qat/dev/qat_comp_pmd_gen1.c
@@ -8,6 +8,7 @@
 #include "qat_comp_pmd.h"
 #include "qat_comp.h"
 #include "qat_comp_pmd_gens.h"
+#include "qat_logs.h"
 
 #define QAT_NUM_INTERM_BUFS_GEN1 12
 
diff --git a/drivers/compress/qat/dev/qat_comp_pmd_gen2.c b/drivers/compress/qat/dev/qat_comp_pmd_gen2.c
index fd6c966f26..5a93d8dc88 100644
--- a/drivers/compress/qat/dev/qat_comp_pmd_gen2.c
+++ b/drivers/compress/qat/dev/qat_comp_pmd_gen2.c
@@ -4,6 +4,7 @@
 
 #include "qat_comp_pmd.h"
 #include "qat_comp_pmd_gens.h"
+#include "qat_logs.h"
 
 #define QAT_NUM_INTERM_BUFS_GEN2 20
 
diff --git a/drivers/compress/qat/dev/qat_comp_pmd_gen3.c b/drivers/compress/qat/dev/qat_comp_pmd_gen3.c
index fccb0941f1..ca6f67d620 100644
--- a/drivers/compress/qat/dev/qat_comp_pmd_gen3.c
+++ b/drivers/compress/qat/dev/qat_comp_pmd_gen3.c
@@ -4,6 +4,7 @@
 
 #include "qat_comp_pmd.h"
 #include "qat_comp_pmd_gens.h"
+#include "qat_logs.h"
 
 #define QAT_NUM_INTERM_BUFS_GEN3 64
 
diff --git a/drivers/compress/qat/dev/qat_comp_pmd_gen4.c b/drivers/compress/qat/dev/qat_comp_pmd_gen4.c
index 05906f13e0..bc728bc0c9 100644
--- a/drivers/compress/qat/dev/qat_comp_pmd_gen4.c
+++ b/drivers/compress/qat/dev/qat_comp_pmd_gen4.c
@@ -7,6 +7,7 @@
 #include "qat_comp_pmd_gens.h"
 #include "icp_qat_hw_gen4_comp.h"
 #include "icp_qat_hw_gen4_comp_defs.h"
+#include "qat_logs.h"
 
 #define QAT_NUM_INTERM_BUFS_GEN4 0
 
diff --git a/drivers/compress/qat/qat_comp_pmd.c b/drivers/compress/qat/qat_comp_pmd.c
index cc91edca3a..60cebb00ca 100644
--- a/drivers/compress/qat/qat_comp_pmd.c
+++ b/drivers/compress/qat/qat_comp_pmd.c
@@ -6,8 +6,10 @@
 
 #include "qat_comp.h"
 #include "qat_comp_pmd.h"
+#include "qat_logs.h"
 
 #define QAT_PMD_COMP_SGL_DEF_SEGMENTS 16
+#define SERVICE_NAME "COMP"
 
 struct qat_comp_gen_dev_ops qat_comp_gen_dev_ops[QAT_N_GENS];
 
@@ -629,22 +631,25 @@ qat_comp_pmd_dequeue_first_op_burst(void *qp, struct rte_comp_op **ops,
 {
 	uint16_t ret = qat_comp_dequeue_burst(qp, ops, nb_ops);
 	struct qat_qp *tmp_qp = (struct qat_qp *)qp;
+	int dev_pos = get_service_pos(SERVICE_NAME);
+	struct qat_comp_dev_private *dev =
+		tmp_qp->qat_dev->pmd[dev_pos];
 
 	if (ret) {
 		if ((*ops)->debug_status ==
 				(uint64_t)ERR_CODE_QAT_COMP_WRONG_FW) {
-			tmp_qp->qat_dev->comp_dev->compressdev->enqueue_burst =
+			dev->compressdev->enqueue_burst =
 					qat_comp_pmd_enq_deq_dummy_op_burst;
-			tmp_qp->qat_dev->comp_dev->compressdev->dequeue_burst =
+			dev->compressdev->dequeue_burst =
 					qat_comp_pmd_enq_deq_dummy_op_burst;
 
-			tmp_qp->qat_dev->comp_dev->compressdev->dev_ops =
+			dev->compressdev->dev_ops =
 					&compress_qat_dummy_ops;
 			QAT_LOG(ERR,
 					"This QAT hardware doesn't support compression operation");
 
 		} else {
-			tmp_qp->qat_dev->comp_dev->compressdev->dequeue_burst =
+			dev->compressdev->dequeue_burst =
 					qat_comp_dequeue_burst;
 		}
 	}
@@ -662,7 +667,7 @@ static const struct rte_driver compdev_qat_driver = {
 	.alias = qat_comp_drv_name
 };
 
-int
+static int
 qat_comp_dev_create(struct qat_pci_device *qat_pci_dev)
 {
 	int i = 0;
@@ -681,6 +686,7 @@ qat_comp_dev_create(struct qat_pci_device *qat_pci_dev)
 	const struct qat_comp_gen_dev_ops *qat_comp_gen_ops =
 			&qat_comp_gen_dev_ops[qat_pci_dev->qat_dev_gen];
 	uint64_t capa_size;
+	int dev_pos = get_service_pos(SERVICE_NAME);
 
 	snprintf(name, RTE_COMPRESSDEV_NAME_MAX_LEN, "%s_%s",
 			qat_pci_dev->name, "comp");
@@ -765,7 +771,7 @@ qat_comp_dev_create(struct qat_pci_device *qat_pci_dev)
 				qat_pci_dev->cmd_line_param[i].val;
 		i++;
 	}
-	qat_pci_dev->comp_dev = comp_dev;
+	qat_pci_dev->pmd[dev_pos] = comp_dev;
 
 	QAT_LOG(DEBUG,
 		    "Created QAT COMP device %s as compressdev instance %d",
@@ -773,26 +779,32 @@ qat_comp_dev_create(struct qat_pci_device *qat_pci_dev)
 	return 0;
 }
 
-int
+static int
 qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev)
 {
-	struct qat_comp_dev_private *comp_dev;
+	int dev_pos = get_service_pos(SERVICE_NAME);
+	struct qat_comp_dev_private *dev =
+		qat_pci_dev->pmd[dev_pos];
 
 	if (qat_pci_dev == NULL)
 		return -ENODEV;
 
-	comp_dev = qat_pci_dev->comp_dev;
-	if (comp_dev == NULL)
-		return 0;
-
 	if (rte_eal_process_type() == RTE_PROC_PRIMARY)
-		rte_memzone_free(qat_pci_dev->comp_dev->capa_mz);
+		rte_memzone_free(dev->capa_mz);
 
 	/* clean up any resources used by the device */
-	qat_comp_dev_close(comp_dev->compressdev);
+	qat_comp_dev_close(dev->compressdev);
 
-	rte_compressdev_pmd_destroy(comp_dev->compressdev);
-	qat_pci_dev->comp_dev = NULL;
+	rte_compressdev_pmd_destroy(dev->compressdev);
+	qat_pci_dev->pmd[dev_pos] = NULL;
 
 	return 0;
 }
+
+RTE_INIT(qat_comp_dev_register)
+{
+	qat_dev_service[qat_dev_services_no].name = SERVICE_NAME;
+	qat_dev_service[qat_dev_services_no].dev_create = qat_comp_dev_create;
+	qat_dev_service[qat_dev_services_no].dev_destroy = qat_comp_dev_destroy;
+	qat_dev_services_no++;
+}
diff --git a/drivers/compress/qat/qat_comp_pmd.h b/drivers/compress/qat/qat_comp_pmd.h
index 1f5b0facf7..01a8983287 100644
--- a/drivers/compress/qat/qat_comp_pmd.h
+++ b/drivers/compress/qat/qat_comp_pmd.h
@@ -106,13 +106,6 @@ const struct rte_memzone *
 qat_comp_setup_inter_buffers(struct qat_comp_dev_private *comp_dev,
 		uint32_t buff_size);
 
-int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev);
-
-int
-qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev);
-
-
 static __rte_always_inline unsigned int
 qat_comp_get_num_im_bufs_required(enum qat_device_gen gen)
 {
diff --git a/drivers/crypto/qat/qat_asym.c b/drivers/crypto/qat/qat_asym.c
index 2b54b63e8f..c0267cfe7d 100644
--- a/drivers/crypto/qat/qat_asym.c
+++ b/drivers/crypto/qat/qat_asym.c
@@ -6,6 +6,8 @@
 
 #include <cryptodev_pmd.h>
 
+#include "adf_transport_access_macros.h"
+#include "icp_qat_hw.h"
 #include "qat_device.h"
 #include "qat_logs.h"
 
@@ -16,6 +18,7 @@
 #include "qat_ec.h"
 
 #define RSA_MODULUS_2048_BITS 2048
+#define SERVICE_NAME "ASYM"
 
 uint8_t qat_asym_driver_id;
 
@@ -1414,7 +1417,7 @@ qat_asym_init_op_cookie(void *op_cookie)
 	}
 }
 
-int
+static int
 qat_asym_dev_create(struct qat_pci_device *qat_pci_dev)
 {
 	struct qat_cryptodev_private *internals;
@@ -1432,6 +1435,7 @@ qat_asym_dev_create(struct qat_pci_device *qat_pci_dev)
 	char capa_memz_name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	int i = 0;
 	uint16_t slice_map = 0;
+	int sym_dev_pos = get_service_pos(SERVICE_NAME);
 
 	snprintf(name, RTE_CRYPTODEV_NAME_MAX_LEN, "%s_%s",
 			qat_pci_dev->name, "asym");
@@ -1519,31 +1523,33 @@ qat_asym_dev_create(struct qat_pci_device *qat_pci_dev)
 		return -1;
 	}
 
-	qat_pci_dev->asym_dev = internals;
+	qat_pci_dev->pmd[sym_dev_pos] = internals;
 	internals->service_type = QAT_SERVICE_ASYMMETRIC;
 	QAT_LOG(DEBUG, "Created QAT ASYM device %s as cryptodev instance %d",
 			cryptodev->data->name, internals->dev_id);
 	return 0;
 }
 
-int
+static int
 qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev)
 {
 	struct rte_cryptodev *cryptodev;
+	int dev_pos = get_service_pos(SERVICE_NAME);
+	struct qat_cryptodev_private *dev =
+		qat_pci_dev->pmd[dev_pos];
 
 	if (qat_pci_dev == NULL)
 		return -ENODEV;
-	if (qat_pci_dev->asym_dev == NULL)
+	if (qat_pci_dev->pmd[dev_pos] == NULL)
 		return 0;
 	if (rte_eal_process_type() == RTE_PROC_PRIMARY)
-		rte_memzone_free(qat_pci_dev->asym_dev->capa_mz);
+		rte_memzone_free(dev->capa_mz);
 
 	/* free crypto device */
-	cryptodev = rte_cryptodev_pmd_get_dev(
-			qat_pci_dev->asym_dev->dev_id);
+	cryptodev = rte_cryptodev_pmd_get_dev(dev->dev_id);
 	rte_cryptodev_pmd_destroy(cryptodev);
 	qat_pci_devs[qat_pci_dev->qat_dev_id].asym_rte_dev.name = NULL;
-	qat_pci_dev->asym_dev = NULL;
+	qat_pci_dev->pmd[dev_pos] = NULL;
 
 	return 0;
 }
@@ -1552,3 +1558,11 @@ static struct cryptodev_driver qat_crypto_drv;
 RTE_PMD_REGISTER_CRYPTO_DRIVER(qat_crypto_drv,
 		cryptodev_qat_asym_driver,
 		qat_asym_driver_id);
+
+RTE_INIT(qat_asym_dev_register)
+{
+	qat_dev_service[qat_dev_services_no].name = SERVICE_NAME;
+	qat_dev_service[qat_dev_services_no].dev_create = qat_asym_dev_create;
+	qat_dev_service[qat_dev_services_no].dev_destroy = qat_asym_dev_destroy;
+	qat_dev_services_no++;
+}
diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c
index c06b7120c0..d5c8e5986c 100644
--- a/drivers/crypto/qat/qat_sym.c
+++ b/drivers/crypto/qat/qat_sym.c
@@ -14,8 +14,10 @@
 #include "qat_sym.h"
 #include "qat_crypto.h"
 #include "qat_qp.h"
+#include "qat_device.h"
 
 extern const char *cmd_arg_strings[];
+#define SERVICE_NAME "SYM"
 
 uint8_t qat_sym_driver_id;
 int qat_legacy_capa;
@@ -183,7 +185,7 @@ qat_sym_dequeue_burst(void *qp, struct rte_crypto_op **ops,
 				qat_sym_process_response, nb_ops);
 }
 
-int
+static int
 qat_sym_dev_create(struct qat_pci_device *qat_pci_dev)
 {
 	int i = 0, ret = 0;
@@ -201,6 +203,7 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev)
 	struct qat_cryptodev_private *internals;
 	const struct qat_crypto_gen_dev_ops *gen_dev_ops =
 		&qat_sym_gen_dev_ops[qat_pci_dev->qat_dev_gen];
+	int dev_pos = get_service_pos(SERVICE_NAME);
 
 	snprintf(name, RTE_CRYPTODEV_NAME_MAX_LEN, "%s_%s",
 			qat_pci_dev->name, "sym");
@@ -302,7 +305,7 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev)
 		goto error;
 	}
 	internals->service_type = QAT_SERVICE_SYMMETRIC;
-	qat_pci_dev->sym_dev = internals;
+	qat_pci_dev->pmd[dev_pos] = internals;
 	QAT_LOG(DEBUG, "Created QAT SYM device %s as cryptodev instance %d",
 			cryptodev->data->name, internals->dev_id);
 
@@ -318,25 +321,28 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev)
 	return ret;
 }
 
-int
+static int
 qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev)
 {
 	struct rte_cryptodev *cryptodev;
+	int dev_pos = get_service_pos(SERVICE_NAME);
+	struct qat_cryptodev_private *dev =
+		qat_pci_dev->pmd[dev_pos];
 
 	if (qat_pci_dev == NULL)
 		return -ENODEV;
-	if (qat_pci_dev->sym_dev == NULL)
+	if (qat_pci_dev->pmd[dev_pos] == NULL)
 		return 0;
 	if (rte_eal_process_type() == RTE_PROC_PRIMARY)
-		rte_memzone_free(qat_pci_dev->sym_dev->capa_mz);
+		rte_memzone_free(dev->capa_mz);
 
 	/* free crypto device */
-	cryptodev = rte_cryptodev_pmd_get_dev(qat_pci_dev->sym_dev->dev_id);
+	cryptodev = rte_cryptodev_pmd_get_dev(dev->dev_id);
 	rte_free(cryptodev->security_ctx);
 	cryptodev->security_ctx = NULL;
 	rte_cryptodev_pmd_destroy(cryptodev);
 	qat_pci_devs[qat_pci_dev->qat_dev_id].sym_rte_dev.name = NULL;
-	qat_pci_dev->sym_dev = NULL;
+	qat_pci_dev->pmd[dev_pos] = NULL;
 
 	return 0;
 }
@@ -393,3 +399,11 @@ static struct cryptodev_driver qat_crypto_drv;
 RTE_PMD_REGISTER_CRYPTO_DRIVER(qat_crypto_drv,
 		cryptodev_qat_sym_driver,
 		qat_sym_driver_id);
+
+RTE_INIT(qat_sym_dev_register)
+{
+	qat_dev_service[qat_dev_services_no].name = SERVICE_NAME;
+	qat_dev_service[qat_dev_services_no].dev_create = qat_sym_dev_create;
+	qat_dev_service[qat_dev_services_no].dev_destroy = qat_sym_dev_destroy;
+	qat_dev_services_no++;
+}
-- 
2.13.6


^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: [PATCH 1/3] common/qat: limit configuration to the primary process
  2023-09-17 15:42 [PATCH 1/3] common/qat: limit configuration to the primary process Arkadiusz Kusztal
  2023-09-17 15:42 ` [PATCH 2/3] common/qat: move command line params to the device struct Arkadiusz Kusztal
  2023-09-17 15:42 ` [PATCH 3/3] common/qat: decouple pmds from the common code Arkadiusz Kusztal
@ 2023-09-18 15:07 ` Power, Ciara
  2 siblings, 0 replies; 12+ messages in thread
From: Power, Ciara @ 2023-09-18 15:07 UTC (permalink / raw)
  To: Kusztal, ArkadiuszX, dev; +Cc: gakhil, Ji, Kai

Hi Arek,

> -----Original Message-----
> From: Kusztal, ArkadiuszX <arkadiuszx.kusztal@intel.com>
> Sent: Sunday, September 17, 2023 4:43 PM
> To: dev@dpdk.org
> Cc: gakhil@marvell.com; Ji, Kai <kai.ji@intel.com>; Power, Ciara
> <ciara.power@intel.com>; Kusztal, ArkadiuszX
> <arkadiuszx.kusztal@intel.com>
> Subject: [PATCH 1/3] common/qat: limit configuration to the primary process
> 
> This change prevents certain configuration functions from being called by the
> secondary process.
> 
> Signed-off-by: Arkadiusz Kusztal <arkadiuszx.kusztal@intel.com>
> ---
>  drivers/common/qat/qat_device.c | 113 +++++++++++++++++++++++-------
> ----------
>  drivers/common/qat/qat_device.h |   2 +
>  2 files changed, 66 insertions(+), 49 deletions(-)
> 
<snip>
> +static enum qat_device_gen
> +pick_gen(struct rte_pci_device *pci_dev) {
> +	switch (pci_dev->id.device_id) {
> +	case 0x0443:
> +		return QAT_GEN1;
> +	case 0x37c9:
> +	case 0x19e3:
> +	case 0x6f55:
> +	case 0x18ef:
> +		return QAT_GEN2;
> +	case 0x18a1:
> +		return QAT_GEN3;
> +	case 0x4941:
> +	case 0x4943:
> +		return QAT_GEN4;
> +	default:
> +		QAT_LOG(ERR, "Invalid dev_id, can't determine generation");
> +		return QAT_N_GENS;
> +	}
> +}
> +
>  struct qat_pci_device *
>  qat_pci_device_allocate(struct rte_pci_device *pci_dev,
>  		struct qat_dev_cmd_param *qat_dev_cmd_param) @@ -
> 187,24 +218,8 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev,
>  	rte_pci_device_name(&pci_dev->addr, name, sizeof(name));
>  	snprintf(name+strlen(name), QAT_DEV_NAME_MAX_LEN-
> strlen(name), "_qat");
> 
> -	switch (pci_dev->id.device_id) {
> -	case 0x0443:
> -		qat_dev_gen = QAT_GEN1;
> -		break;
> -	case 0x37c9:
> -	case 0x19e3:
> -	case 0x6f55:
> -	case 0x18ef:
> -		qat_dev_gen = QAT_GEN2;
> -		break;
> -	case 0x18a1:
> -		qat_dev_gen = QAT_GEN3;
> -		break;
> -	case 0x4941:
> -	case 0x4943:
> -		qat_dev_gen = QAT_GEN4;
> -		break;
> -	default:
> +	qat_dev_gen = pick_gen(pci_dev);
> +	if (qat_dev_gen == QAT_N_GENS) {
>  		QAT_LOG(ERR, "Invalid dev_id, can't determine generation");
>  		return NULL;
>  	}

The above log is duplicated, once in pick_gen() and once here.

> @@ -261,20 +276,15 @@ qat_pci_device_allocate(struct rte_pci_device
> *pci_dev,
>  	qat_dev->dev_private = qat_dev + 1;
>  	strlcpy(qat_dev->name, name, QAT_DEV_NAME_MAX_LEN);
>  	qat_dev->qat_dev_id = qat_dev_id;
> -	qat_pci_devs[qat_dev_id].pci_dev = pci_dev;
>  	qat_dev->qat_dev_gen = qat_dev_gen;
> 
>  	ops_hw = qat_dev_hw_spec[qat_dev->qat_dev_gen];
> -	if (ops_hw->qat_dev_get_misc_bar == NULL) {
> -		QAT_LOG(ERR, "qat_dev_get_misc_bar function pointer not
> set");
> -		rte_memzone_free(qat_dev_mz);
> -		return NULL;
> -	}
> +	NOT_NULL(ops_hw->qat_dev_reset_ring_pairs, goto error,
> +		"QAT internal error! qat_dev_get_misc_bar function not set");

This check should be for ops_hw->qat_dev_get_misc_bar as mentioned in log.

Thanks,
Ciara

^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: [PATCH 2/3] common/qat: move command line params to the device struct
  2023-09-17 15:42 ` [PATCH 2/3] common/qat: move command line params to the device struct Arkadiusz Kusztal
@ 2023-09-18 16:01   ` Power, Ciara
  0 siblings, 0 replies; 12+ messages in thread
From: Power, Ciara @ 2023-09-18 16:01 UTC (permalink / raw)
  To: Kusztal, ArkadiuszX, dev; +Cc: gakhil, Ji, Kai

Hi Arek,

> -----Original Message-----
> From: Kusztal, ArkadiuszX <arkadiuszx.kusztal@intel.com>
> Sent: Sunday, September 17, 2023 4:43 PM
> To: dev@dpdk.org
> Cc: gakhil@marvell.com; Ji, Kai <kai.ji@intel.com>; Power, Ciara
> <ciara.power@intel.com>; Kusztal, ArkadiuszX
> <arkadiuszx.kusztal@intel.com>
> Subject: [PATCH 2/3] common/qat: move command line params to the device
> struct
> 
> Command line parameters was moved to the device struct.
> 
> Signed-off-by: Arkadiusz Kusztal <arkadiuszx.kusztal@intel.com>
> ---
>  drivers/common/qat/qat_device.c     | 54 ++++++++++++++++++--------------
> -----
>  drivers/common/qat/qat_device.h     | 35 ++++++++++++------------
>  drivers/compress/qat/qat_comp_pmd.c |  9 +++----
> drivers/compress/qat/qat_comp_pmd.h |  3 +--
>  drivers/crypto/qat/qat_asym.c       | 13 +++++----
>  drivers/crypto/qat/qat_sym.c        | 23 ++++++++--------
>  6 files changed, 66 insertions(+), 71 deletions(-)
> 
> diff --git a/drivers/common/qat/qat_device.c
> b/drivers/common/qat/qat_device.c index 93aef9aeb1..d9604e666d
> 100644
> --- a/drivers/common/qat/qat_device.c
> +++ b/drivers/common/qat/qat_device.c
> @@ -22,6 +22,16 @@
<snip>
> diff --git a/drivers/common/qat/qat_device.h
> b/drivers/common/qat/qat_device.h index 23d7f54b61..dcb5a42c89
> 100644
> --- a/drivers/common/qat/qat_device.h
> +++ b/drivers/common/qat/qat_device.h
> @@ -17,14 +17,21 @@
> 
>  #define QAT_DEV_NAME_MAX_LEN	64
> 
> -#define QAT_LEGACY_CAPA "qat_legacy_capa"
> +#define QAT_LEGACY_CAPA_NAME "qat_legacy_capa"
>  #define SYM_ENQ_THRESHOLD_NAME "qat_sym_enq_threshold"
>  #define ASYM_ENQ_THRESHOLD_NAME "qat_asym_enq_threshold"
>  #define COMP_ENQ_THRESHOLD_NAME "qat_comp_enq_threshold"
>  #define SYM_CIPHER_CRC_ENABLE_NAME "qat_sym_cipher_crc_enable"
> -#define QAT_CMD_SLICE_MAP "qat_cmd_slice_disable"
> -#define QAT_CMD_SLICE_MAP_POS	5
> -#define MAX_QP_THRESHOLD_SIZE	32
> +#define QAT_CMD_SLICE_MAP_NAME "qat_cmd_slice_disable"
> +#define QAT_LEGACY_CAPA_POS		0
> +#define SYM_ENQ_THRESHOLD_POS		1
> +#define ASYM_ENQ_THRESHOLD_POS		2
> +#define COMP_ENQ_THRESHOLD_POS		3
> +#define SYM_CIPHER_CRC_ENABLE_POS	4
> +#define QAT_CMD_SLICE_MAP_POS		5

Small suggestion, maybe an enum could be used to group the above position macros together.


Acked-by: Ciara Power <ciara.power@intel.com>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: [PATCH 3/3] common/qat: decouple pmds from the common code
  2023-09-17 15:42 ` [PATCH 3/3] common/qat: decouple pmds from the common code Arkadiusz Kusztal
@ 2023-10-06 12:50   ` Power, Ciara
  2023-10-06 13:02   ` Power, Ciara
  2024-02-23  7:48   ` [PATCH v2 1/2] drivers/qat: isolate parser arguments configuration Arkadiusz Kusztal
  2 siblings, 0 replies; 12+ messages in thread
From: Power, Ciara @ 2023-10-06 12:50 UTC (permalink / raw)
  To: Kusztal, ArkadiuszX, dev; +Cc: gakhil, Ji, Kai

Hi Arek,

> -----Original Message-----
> From: Kusztal, ArkadiuszX <arkadiuszx.kusztal@intel.com>
> Sent: Sunday, September 17, 2023 4:43 PM
> To: dev@dpdk.org
> Cc: gakhil@marvell.com; Ji, Kai <kai.ji@intel.com>; Power, Ciara
> <ciara.power@intel.com>; Kusztal, ArkadiuszX
> <arkadiuszx.kusztal@intel.com>
> Subject: [PATCH 3/3] common/qat: decouple pmds from the common code
> 
> Service specific functions were moved to services files.
> 
> Signed-off-by: Arkadiusz Kusztal <arkadiuszx.kusztal@intel.com>
> ---
>  drivers/common/qat/dev/qat_dev_gen1.c        |   1 +
>  drivers/common/qat/dev/qat_dev_gen2.c        |   1 +
>  drivers/common/qat/dev/qat_dev_gen3.c        |   2 +
>  drivers/common/qat/dev/qat_dev_gen4.c        |   1 +
>  drivers/common/qat/qat_device.c              | 128 +++++++++------------------
>  drivers/common/qat/qat_device.h              |  52 +++--------
>  drivers/common/qat/qat_pf2vf.c               |   1 +
>  drivers/common/qat/qat_qp.c                  |   2 -
>  drivers/compress/qat/dev/qat_comp_pmd_gen1.c |   1 +
>  drivers/compress/qat/dev/qat_comp_pmd_gen2.c |   1 +
>  drivers/compress/qat/dev/qat_comp_pmd_gen3.c |   1 +
>  drivers/compress/qat/dev/qat_comp_pmd_gen4.c |   1 +
>  drivers/compress/qat/qat_comp_pmd.c          |  44 +++++----
>  drivers/compress/qat/qat_comp_pmd.h          |   7 --
>  drivers/crypto/qat/qat_asym.c                |  30 +++++--
>  drivers/crypto/qat/qat_sym.c                 |  28 ++++--
>  16 files changed, 138 insertions(+), 163 deletions(-)
> 

Acked-by: Ciara Power <ciara.power@intel.com>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: [PATCH 3/3] common/qat: decouple pmds from the common code
  2023-09-17 15:42 ` [PATCH 3/3] common/qat: decouple pmds from the common code Arkadiusz Kusztal
  2023-10-06 12:50   ` Power, Ciara
@ 2023-10-06 13:02   ` Power, Ciara
  2024-02-23  7:48   ` [PATCH v2 1/2] drivers/qat: isolate parser arguments configuration Arkadiusz Kusztal
  2 siblings, 0 replies; 12+ messages in thread
From: Power, Ciara @ 2023-10-06 13:02 UTC (permalink / raw)
  To: Kusztal, ArkadiuszX, dev; +Cc: gakhil, Ji, Kai

Hi Arek,

> -----Original Message-----
> From: Kusztal, ArkadiuszX <arkadiuszx.kusztal@intel.com>
> Sent: Sunday, September 17, 2023 4:43 PM
> To: dev@dpdk.org
> Cc: gakhil@marvell.com; Ji, Kai <kai.ji@intel.com>; Power, Ciara
> <ciara.power@intel.com>; Kusztal, ArkadiuszX
> <arkadiuszx.kusztal@intel.com>
> Subject: [PATCH 3/3] common/qat: decouple pmds from the common code
> 
> Service specific functions were moved to services files.
> 
> Signed-off-by: Arkadiusz Kusztal <arkadiuszx.kusztal@intel.com>
> ---

Added my ack after compiling on my own system, before I noticed the FreeBSD CI compilation failures.
Looks like some icp_qat_hw.h includes are missing for qp.c file, although not sure why its only affecting FreeBSD.

Ack for the intention of the code changes anyway, but v2 needed with that fix.

Thanks,
Ciara


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2 1/2] drivers/qat: isolate parser arguments configuration
  2023-09-17 15:42 ` [PATCH 3/3] common/qat: decouple pmds from the common code Arkadiusz Kusztal
  2023-10-06 12:50   ` Power, Ciara
  2023-10-06 13:02   ` Power, Ciara
@ 2024-02-23  7:48   ` Arkadiusz Kusztal
  2024-02-23  7:48     ` [PATCH v2 2/2] common/qat: decouple pmds from the common code Arkadiusz Kusztal
  2024-02-29  9:30     ` [PATCH v3 1/3] common/qat: isolate parser arguments configuration Arkadiusz Kusztal
  2 siblings, 2 replies; 12+ messages in thread
From: Arkadiusz Kusztal @ 2024-02-23  7:48 UTC (permalink / raw)
  To: dev; +Cc: gakhil, ciara.power, Arkadiusz Kusztal

This commit isolates qat device arguments from the common
code. Now arguments are defined per service, and only appear
in the application if the service is compiled-in.

Signed-off-by: Arkadiusz Kusztal <arkadiuszx.kusztal@intel.com>
---
 drivers/common/qat/qat_common.c     |  11 +++
 drivers/common/qat/qat_common.h     |   3 +
 drivers/common/qat/qat_device.c     | 162 ++++++++++++++++--------------------
 drivers/common/qat/qat_device.h     |  27 ++----
 drivers/compress/qat/qat_comp_pmd.c |  31 ++++---
 drivers/compress/qat/qat_comp_pmd.h |   3 +-
 drivers/crypto/qat/qat_asym.c       |  38 +++++----
 drivers/crypto/qat/qat_sym.c        |  49 ++++++-----
 8 files changed, 171 insertions(+), 153 deletions(-)

diff --git a/drivers/common/qat/qat_common.c b/drivers/common/qat/qat_common.c
index 59e7e02622..61bc97b0f3 100644
--- a/drivers/common/qat/qat_common.c
+++ b/drivers/common/qat/qat_common.c
@@ -6,6 +6,17 @@
 #include "qat_device.h"
 #include "qat_logs.h"
 
+#define QAT_LEGACY_CAPA "qat_legacy_capa"
+
+static const char *const arguments[] = {
+	QAT_LEGACY_CAPA,
+	NULL
+};
+
+const char *const *qat_cmdline_defines[QAT_MAX_SERVICES + 1] = {
+	[QAT_MAX_SERVICES] = arguments,
+};
+
 const char *
 qat_service_get_str(enum qat_service_type type)
 {
diff --git a/drivers/common/qat/qat_common.h b/drivers/common/qat/qat_common.h
index 9411a79301..4f6b076a83 100644
--- a/drivers/common/qat/qat_common.h
+++ b/drivers/common/qat/qat_common.h
@@ -16,6 +16,9 @@
  * from one according to the generation of the device.
  * QAT_GEN* is used as the index to find all devices
  */
+
+extern const char *const *qat_cmdline_defines[];
+
 enum qat_device_gen {
 	QAT_GEN1,
 	QAT_GEN2,
diff --git a/drivers/common/qat/qat_device.c b/drivers/common/qat/qat_device.c
index f55dc3c6f0..bbbb198273 100644
--- a/drivers/common/qat/qat_device.c
+++ b/drivers/common/qat/qat_device.c
@@ -118,70 +118,6 @@ qat_get_qat_dev_from_pci_dev(struct rte_pci_device *pci_dev)
 	return qat_pci_get_named_dev(name);
 }
 
-static void
-qat_dev_parse_cmd(const char *str, struct qat_dev_cmd_param
-		*qat_dev_cmd_param)
-{
-	int i = 0;
-	const char *param;
-
-	while (1) {
-		char value_str[4] = { };
-
-		param = qat_dev_cmd_param[i].name;
-		if (param == NULL)
-			return;
-		long value = 0;
-		const char *arg = strstr(str, param);
-		const char *arg2 = NULL;
-
-		if (arg) {
-			arg2 = arg + strlen(param);
-			if (*arg2 != '=') {
-				QAT_LOG(DEBUG, "parsing error '=' sign"
-						" should immediately follow %s",
-						param);
-				arg2 = NULL;
-			} else
-				arg2++;
-		} else {
-			QAT_LOG(DEBUG, "%s not provided", param);
-		}
-		if (arg2) {
-			int iter = 0;
-			while (iter < 2) {
-				if (!isdigit(*(arg2 + iter)))
-					break;
-				iter++;
-			}
-			if (!iter) {
-				QAT_LOG(DEBUG, "parsing error %s"
-					       " no number provided",
-					       param);
-			} else {
-				memcpy(value_str, arg2, iter);
-				value = strtol(value_str, NULL, 10);
-				if (strcmp(param,
-					 SYM_CIPHER_CRC_ENABLE_NAME) == 0) {
-					if (value < 0 || value > 1) {
-						QAT_LOG(DEBUG, "The value for qat_sym_cipher_crc_enable should be set to 0 or 1, setting to 0");
-						value = 0;
-					}
-				} else if (value > MAX_QP_THRESHOLD_SIZE) {
-					QAT_LOG(DEBUG, "Exceeded max size of"
-						" threshold, setting to %d",
-						MAX_QP_THRESHOLD_SIZE);
-					value = MAX_QP_THRESHOLD_SIZE;
-				}
-				QAT_LOG(DEBUG, "parsing %s = %ld",
-						param, value);
-			}
-		}
-		qat_dev_cmd_param[i].val = value;
-		i++;
-	}
-}
-
 static enum qat_device_gen
 pick_gen(const struct rte_pci_device *pci_dev)
 {
@@ -205,9 +141,48 @@ pick_gen(const struct rte_pci_device *pci_dev)
 	}
 }
 
-struct qat_pci_device *
-qat_pci_device_allocate(struct rte_pci_device *pci_dev,
-		struct qat_dev_cmd_param *qat_dev_cmd_param)
+char *qat_cmdline_get_val(struct qat_pci_device *qat_dev, const char *key)
+{
+	key = strstr(qat_dev->command_line, key);
+
+	return key ? strchr(key, '=') + 1 : NULL;
+}
+
+static int cmdline_validate(const char *arg)
+{
+	int i, len;
+	char *eq_sign = strchr(arg, '=');
+	/* Check for the equal sign */
+	if (eq_sign == NULL) {
+		QAT_LOG(ERR, "malformed string, no equals sign, %s", arg);
+		return 0;
+	}
+	/* Check if argument is not empty */
+	len = strlen(eq_sign) - 1;
+	if (len == 0) {
+		QAT_LOG(ERR, "malformed string, empty argument, %s", arg);
+		return 0;
+	}
+	len = eq_sign - arg;
+	for (i = 0; i < QAT_MAX_SERVICES + 1; i++) {
+		int j = 0;
+		const char *def;
+
+		if (!qat_cmdline_defines[i])
+			continue;
+		while ((def = qat_cmdline_defines[i][j++])) {
+			if (strncmp(def, arg, len))
+				continue;
+			QAT_LOG(DEBUG, "Found %s command line argument",
+				def);
+			return 1;
+		}
+	}
+	return 0;
+}
+
+static struct qat_pci_device *
+qat_pci_device_allocate(struct rte_pci_device *pci_dev)
 {
 	struct qat_pci_device *qat_dev;
 	enum qat_device_gen qat_dev_gen;
@@ -218,6 +193,7 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev,
 	struct rte_mem_resource *mem_resource;
 	const struct rte_memzone *qat_dev_mz;
 	int qat_dev_size, extra_size;
+	char *cmdline = NULL, *token = NULL;
 
 	rte_pci_device_name(&pci_dev->addr, name, sizeof(name));
 	snprintf(name+strlen(name), QAT_DEV_NAME_MAX_LEN-strlen(name), "_qat");
@@ -294,8 +270,28 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev,
 	} else
 		qat_dev->misc_bar_io_addr = NULL;
 
-	if (devargs && devargs->drv_str)
-		qat_dev_parse_cmd(devargs->drv_str, qat_dev_cmd_param);
+	/* Parse the command line s*/
+	qat_dev->command_line = rte_malloc(NULL, strlen(devargs->drv_str), 0);
+	if (qat_dev->command_line == NULL) {
+		QAT_LOG(ERR, "Cannot allocate memory for command line");
+		goto error;
+	}
+	strcpy(qat_dev->command_line, devargs->drv_str);
+	token = strtok(qat_dev->command_line, ",");
+	while (token != NULL) {
+		if (!cmdline_validate(token)) {
+			QAT_LOG(ERR, "Incorrect command line argument: %s",
+				token);
+			goto error;
+		}
+		token = strtok(NULL, ",");
+	}
+	/* Copy once againe the entire string, strtok already altered the contents */
+	strcpy(qat_dev->command_line, devargs->drv_str);
+	/* Parse the arguments */
+	cmdline = qat_cmdline_get_val(qat_dev, QAT_LEGACY_CAPA);
+	if (cmdline)
+		qat_legacy_capa = atoi(cmdline);
 
 	if (qat_read_qp_config(qat_dev)) {
 		QAT_LOG(ERR,
@@ -334,6 +330,7 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev,
 
 	return qat_dev;
 error:
+	rte_free(qat_dev->command_line);
 	if (rte_memzone_free(qat_dev_mz)) {
 		QAT_LOG(DEBUG,
 			"QAT internal error! Trying to free already allocated memzone: %s",
@@ -405,27 +402,17 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 	int sym_ret = 0, asym_ret = 0, comp_ret = 0;
 	int num_pmds_created = 0;
 	struct qat_pci_device *qat_pci_dev;
-	struct qat_dev_cmd_param qat_dev_cmd_param[] = {
-			{ QAT_LEGACY_CAPA, 0 },
-			{ SYM_ENQ_THRESHOLD_NAME, 0 },
-			{ ASYM_ENQ_THRESHOLD_NAME, 0 },
-			{ COMP_ENQ_THRESHOLD_NAME, 0 },
-			{ SYM_CIPHER_CRC_ENABLE_NAME, 0 },
-			[QAT_CMD_SLICE_MAP_POS] = { QAT_CMD_SLICE_MAP, 0},
-			{ NULL, 0 },
-	};
 
 	QAT_LOG(DEBUG, "Found QAT device at %02x:%02x.%x",
 			pci_dev->addr.bus,
 			pci_dev->addr.devid,
 			pci_dev->addr.function);
 
-	qat_pci_dev = qat_pci_device_allocate(pci_dev, qat_dev_cmd_param);
+	qat_pci_dev = qat_pci_device_allocate(pci_dev);
 	if (qat_pci_dev == NULL)
 		return -ENODEV;
 
-	qat_dev_cmd_param[QAT_CMD_SLICE_MAP_POS].val = qat_pci_dev->slice_map;
-	sym_ret = qat_sym_dev_create(qat_pci_dev, qat_dev_cmd_param);
+	sym_ret = qat_sym_dev_create(qat_pci_dev);
 	if (sym_ret == 0) {
 		num_pmds_created++;
 	}
@@ -434,7 +421,7 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 				"Failed to create QAT SYM PMD on device %s",
 				qat_pci_dev->name);
 
-	comp_ret = qat_comp_dev_create(qat_pci_dev, qat_dev_cmd_param);
+	comp_ret = qat_comp_dev_create(qat_pci_dev);
 	if (comp_ret == 0)
 		num_pmds_created++;
 	else
@@ -442,7 +429,7 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 				"Failed to create QAT COMP PMD on device %s",
 				qat_pci_dev->name);
 
-	asym_ret = qat_asym_dev_create(qat_pci_dev, qat_dev_cmd_param);
+	asym_ret = qat_asym_dev_create(qat_pci_dev);
 	if (asym_ret == 0)
 		num_pmds_created++;
 	else
@@ -479,15 +466,13 @@ static struct rte_pci_driver rte_qat_pmd = {
 };
 
 __rte_weak int
-qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused,
-		struct qat_dev_cmd_param *qat_dev_cmd_param __rte_unused)
+qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
 {
 	return 0;
 }
 
 __rte_weak int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused,
-		const struct qat_dev_cmd_param *qat_dev_cmd_param __rte_unused)
+qat_asym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
 {
 	return 0;
 }
@@ -505,8 +490,7 @@ qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused)
 }
 
 __rte_weak int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused,
-		struct qat_dev_cmd_param *qat_dev_cmd_param __rte_unused)
+qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
 {
 	return 0;
 }
diff --git a/drivers/common/qat/qat_device.h b/drivers/common/qat/qat_device.h
index aa7988bb74..4116548eeb 100644
--- a/drivers/common/qat/qat_device.h
+++ b/drivers/common/qat/qat_device.h
@@ -16,15 +16,8 @@
 #define QAT_ATTACHED  (1)
 
 #define QAT_DEV_NAME_MAX_LEN	64
-
-#define QAT_LEGACY_CAPA "qat_legacy_capa"
-#define SYM_ENQ_THRESHOLD_NAME "qat_sym_enq_threshold"
-#define ASYM_ENQ_THRESHOLD_NAME "qat_asym_enq_threshold"
-#define COMP_ENQ_THRESHOLD_NAME "qat_comp_enq_threshold"
-#define SYM_CIPHER_CRC_ENABLE_NAME "qat_sym_cipher_crc_enable"
-#define QAT_CMD_SLICE_MAP "qat_cmd_slice_disable"
-#define QAT_CMD_SLICE_MAP_POS	5
 #define MAX_QP_THRESHOLD_SIZE	32
+#define QAT_LEGACY_CAPA "qat_legacy_capa"
 
 /**
  * Function prototypes for GENx specific device operations.
@@ -41,6 +34,9 @@ typedef int (*qat_dev_get_extra_size_t)(void);
 typedef int (*qat_dev_get_slice_map_t)(uint32_t *map,
 		const struct rte_pci_device *pci_dev);
 
+extern int qat_legacy_capa;
+char *qat_cmdline_get_val(struct qat_pci_device *qat_dev, const char *key);
+
 struct qat_dev_hw_spec_funcs {
 	qat_dev_reset_ring_pairs_t	qat_dev_reset_ring_pairs;
 	qat_dev_get_transport_bar_t	qat_dev_get_transport_bar;
@@ -135,6 +131,8 @@ struct qat_pci_device {
 	/**< Per generation specific information */
 	uint32_t slice_map;
 	/**< Map of the crypto and compression slices */
+	char *command_line;
+	/**< Map of the crypto and compression slices */
 };
 
 struct qat_gen_hw_data {
@@ -155,20 +153,14 @@ struct qat_pf2vf_dev {
 extern struct qat_gen_hw_data qat_gen_config[];
 
 struct qat_pci_device *
-qat_pci_device_allocate(struct rte_pci_device *pci_dev,
-		struct qat_dev_cmd_param *qat_dev_cmd_param);
-
-struct qat_pci_device *
 qat_get_qat_dev_from_pci_dev(struct rte_pci_device *pci_dev);
 
 /* declaration needed for weak functions */
 int
-qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused,
-		struct qat_dev_cmd_param *qat_dev_cmd_param);
+qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused);
 
 int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev,
-		const struct qat_dev_cmd_param *qat_dev_cmd_param);
+qat_asym_dev_create(struct qat_pci_device *qat_pci_dev);
 
 int
 qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
@@ -177,8 +169,7 @@ int
 qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
 
 int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused,
-		struct qat_dev_cmd_param *qat_dev_cmd_param);
+qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused);
 
 int
 qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
diff --git a/drivers/compress/qat/qat_comp_pmd.c b/drivers/compress/qat/qat_comp_pmd.c
index 6fb8cf69be..1075337efe 100644
--- a/drivers/compress/qat/qat_comp_pmd.c
+++ b/drivers/compress/qat/qat_comp_pmd.c
@@ -9,6 +9,13 @@
 
 #define QAT_PMD_COMP_SGL_DEF_SEGMENTS 16
 
+#define COMP_ENQ_THRESHOLD_NAME "qat_comp_enq_threshold"
+
+static const char *const arguments[] = {
+	COMP_ENQ_THRESHOLD_NAME,
+	NULL
+};
+
 struct qat_comp_gen_dev_ops qat_comp_gen_dev_ops[QAT_N_GENS];
 
 struct stream_create_info {
@@ -663,10 +670,8 @@ static const struct rte_driver compdev_qat_driver = {
 };
 
 int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev,
-		struct qat_dev_cmd_param *qat_dev_cmd_param)
+qat_comp_dev_create(struct qat_pci_device *qat_pci_dev)
 {
-	int i = 0;
 	struct qat_device_info *qat_dev_instance =
 			&qat_pci_devs[qat_pci_dev->qat_dev_id];
 	struct rte_compressdev_pmd_init_params init_params = {
@@ -682,6 +687,7 @@ qat_comp_dev_create(struct qat_pci_device *qat_pci_dev,
 	const struct qat_comp_gen_dev_ops *qat_comp_gen_ops =
 			&qat_comp_gen_dev_ops[qat_pci_dev->qat_dev_gen];
 	uint64_t capa_size;
+	char *cmdline = NULL;
 
 	snprintf(name, RTE_COMPRESSDEV_NAME_MAX_LEN, "%s_%s",
 			qat_pci_dev->name, "comp");
@@ -758,13 +764,13 @@ qat_comp_dev_create(struct qat_pci_device *qat_pci_dev,
 	memcpy(comp_dev->capa_mz->addr, capabilities, capa_size);
 	comp_dev->qat_dev_capabilities = comp_dev->capa_mz->addr;
 
-	while (1) {
-		if (qat_dev_cmd_param[i].name == NULL)
-			break;
-		if (!strcmp(qat_dev_cmd_param[i].name, COMP_ENQ_THRESHOLD_NAME))
-			comp_dev->min_enq_burst_threshold =
-					qat_dev_cmd_param[i].val;
-		i++;
+	cmdline = qat_cmdline_get_val(qat_pci_dev,
+			COMP_ENQ_THRESHOLD_NAME);
+	if (cmdline) {
+		comp_dev->min_enq_burst_threshold =
+			atoi(cmdline) > MAX_QP_THRESHOLD_SIZE ?
+			MAX_QP_THRESHOLD_SIZE :
+			atoi(cmdline);
 	}
 	qat_pci_dev->comp_dev = comp_dev;
 
@@ -797,3 +803,8 @@ qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev)
 
 	return 0;
 }
+
+RTE_INIT(qat_sym_init)
+{
+	qat_cmdline_defines[QAT_SERVICE_COMPRESSION] = arguments;
+}
diff --git a/drivers/compress/qat/qat_comp_pmd.h b/drivers/compress/qat/qat_comp_pmd.h
index 3c8682a768..1f5b0facf7 100644
--- a/drivers/compress/qat/qat_comp_pmd.h
+++ b/drivers/compress/qat/qat_comp_pmd.h
@@ -107,8 +107,7 @@ qat_comp_setup_inter_buffers(struct qat_comp_dev_private *comp_dev,
 		uint32_t buff_size);
 
 int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev,
-		struct qat_dev_cmd_param *qat_dev_cmd_param);
+qat_comp_dev_create(struct qat_pci_device *qat_pci_dev);
 
 int
 qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev);
diff --git a/drivers/crypto/qat/qat_asym.c b/drivers/crypto/qat/qat_asym.c
index 2bf3060278..bc641ced48 100644
--- a/drivers/crypto/qat/qat_asym.c
+++ b/drivers/crypto/qat/qat_asym.c
@@ -15,12 +15,19 @@
 #include "qat_pke.h"
 #include "qat_ec.h"
 
+#define ASYM_ENQ_THRESHOLD_NAME "qat_asym_enq_threshold"
 #define RSA_MODULUS_2048_BITS 2048
 
 uint8_t qat_asym_driver_id;
 
 struct qat_crypto_gen_dev_ops qat_asym_gen_dev_ops[QAT_N_GENS];
 
+
+static const char *const arguments[] = {
+	ASYM_ENQ_THRESHOLD_NAME,
+	NULL
+};
+
 /* An rte_driver is needed in the registration of both the device and the driver
  * with cryptodev.
  * The actual qat pci's rte_driver can't be used as its name represents
@@ -1499,8 +1506,7 @@ qat_asym_init_op_cookie(void *op_cookie)
 }
 
 int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev,
-		const struct qat_dev_cmd_param *qat_dev_cmd_param)
+qat_asym_dev_create(struct qat_pci_device *qat_pci_dev)
 {
 	struct qat_cryptodev_private *internals;
 	struct rte_cryptodev *cryptodev;
@@ -1515,8 +1521,7 @@ qat_asym_dev_create(struct qat_pci_device *qat_pci_dev,
 		&qat_asym_gen_dev_ops[qat_pci_dev->qat_dev_gen];
 	char name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	char capa_memz_name[RTE_CRYPTODEV_NAME_MAX_LEN];
-	int i = 0;
-	uint16_t slice_map = 0;
+	char *cmdline = NULL;
 
 	snprintf(name, RTE_CRYPTODEV_NAME_MAX_LEN, "%s_%s",
 			qat_pci_dev->name, "asym");
@@ -1573,18 +1578,16 @@ qat_asym_dev_create(struct qat_pci_device *qat_pci_dev,
 	internals->qat_dev = qat_pci_dev;
 	internals->dev_id = cryptodev->data->dev_id;
 
-	while (1) {
-		if (qat_dev_cmd_param[i].name == NULL)
-			break;
-		if (!strcmp(qat_dev_cmd_param[i].name, ASYM_ENQ_THRESHOLD_NAME))
-			internals->min_enq_burst_threshold =
-					qat_dev_cmd_param[i].val;
-		if (!strcmp(qat_dev_cmd_param[i].name, QAT_CMD_SLICE_MAP))
-			slice_map = qat_dev_cmd_param[i].val;
-		i++;
+	cmdline = qat_cmdline_get_val(qat_pci_dev,
+			ASYM_ENQ_THRESHOLD_NAME);
+	if (cmdline) {
+		internals->min_enq_burst_threshold =
+			atoi(cmdline) > MAX_QP_THRESHOLD_SIZE ?
+			MAX_QP_THRESHOLD_SIZE :
+			atoi(cmdline);
 	}
 
-	if (slice_map & ICP_ACCEL_MASK_PKE_SLICE) {
+	if (qat_pci_dev->slice_map & ICP_ACCEL_MASK_PKE_SLICE) {
 		QAT_LOG(ERR, "Device %s does not support PKE slice",
 				name);
 		rte_cryptodev_pmd_destroy(cryptodev);
@@ -1594,7 +1597,7 @@ qat_asym_dev_create(struct qat_pci_device *qat_pci_dev,
 	}
 
 	if (gen_dev_ops->get_capabilities(internals,
-			capa_memz_name, slice_map) < 0) {
+			capa_memz_name, qat_pci_dev->slice_map) < 0) {
 		QAT_LOG(ERR,
 			"Device cannot obtain capabilities, destroying PMD for %s",
 			name);
@@ -1637,3 +1640,8 @@ static struct cryptodev_driver qat_crypto_drv;
 RTE_PMD_REGISTER_CRYPTO_DRIVER(qat_crypto_drv,
 		cryptodev_qat_asym_driver,
 		qat_asym_driver_id);
+
+RTE_INIT(qat_asym_init)
+{
+	qat_cmdline_defines[QAT_SERVICE_ASYMMETRIC] = arguments;
+}
diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c
index 6e03bde841..2c8d0421e7 100644
--- a/drivers/crypto/qat/qat_sym.c
+++ b/drivers/crypto/qat/qat_sym.c
@@ -13,6 +13,7 @@
 #include <rte_byteorder.h>
 #include <rte_security_driver.h>
 
+#include "qat_common.h"
 #include "qat_sym.h"
 #include "qat_crypto.h"
 #include "qat_qp.h"
@@ -20,6 +21,15 @@
 uint8_t qat_sym_driver_id;
 int qat_legacy_capa;
 
+#define SYM_ENQ_THRESHOLD_NAME "qat_sym_enq_threshold"
+#define SYM_CIPHER_CRC_ENABLE_NAME "qat_sym_cipher_crc_enable"
+
+static const char *const arguments[] = {
+	SYM_ENQ_THRESHOLD_NAME,
+	SYM_CIPHER_CRC_ENABLE_NAME,
+	NULL
+};
+
 struct qat_crypto_gen_dev_ops qat_sym_gen_dev_ops[QAT_N_GENS];
 
 /* An rte_driver is needed in the registration of both the device and the driver
@@ -184,11 +194,9 @@ qat_sym_dequeue_burst(void *qp, struct rte_crypto_op **ops,
 }
 
 int
-qat_sym_dev_create(struct qat_pci_device *qat_pci_dev,
-		struct qat_dev_cmd_param *qat_dev_cmd_param)
+qat_sym_dev_create(struct qat_pci_device *qat_pci_dev)
 {
-	int i = 0, ret = 0;
-	uint16_t slice_map = 0;
+	int ret = 0;
 	struct qat_device_info *qat_dev_instance =
 			&qat_pci_devs[qat_pci_dev->qat_dev_id];
 	struct rte_cryptodev_pmd_init_params init_params = {
@@ -202,6 +210,7 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev,
 	struct qat_cryptodev_private *internals;
 	const struct qat_crypto_gen_dev_ops *gen_dev_ops =
 		&qat_sym_gen_dev_ops[qat_pci_dev->qat_dev_gen];
+	char *cmdline = NULL;
 
 	snprintf(name, RTE_CRYPTODEV_NAME_MAX_LEN, "%s_%s",
 			qat_pci_dev->name, "sym");
@@ -276,26 +285,23 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev,
 
 	internals = cryptodev->data->dev_private;
 	internals->qat_dev = qat_pci_dev;
-
 	internals->dev_id = cryptodev->data->dev_id;
 
-	while (qat_dev_cmd_param[i].name != NULL) {
-		if (!strcmp(qat_dev_cmd_param[i].name, SYM_ENQ_THRESHOLD_NAME))
-			internals->min_enq_burst_threshold =
-					qat_dev_cmd_param[i].val;
-		if (!strcmp(qat_dev_cmd_param[i].name,
-				SYM_CIPHER_CRC_ENABLE_NAME))
-			internals->cipher_crc_offload_enable =
-					qat_dev_cmd_param[i].val;
-		if (!strcmp(qat_dev_cmd_param[i].name, QAT_LEGACY_CAPA))
-			qat_legacy_capa = qat_dev_cmd_param[i].val;
-		if (!strcmp(qat_dev_cmd_param[i].name, QAT_CMD_SLICE_MAP))
-			slice_map = qat_dev_cmd_param[i].val;
-		i++;
+	cmdline = qat_cmdline_get_val(qat_pci_dev,
+			SYM_ENQ_THRESHOLD_NAME);
+	if (cmdline) {
+		internals->min_enq_burst_threshold =
+			atoi(cmdline) > MAX_QP_THRESHOLD_SIZE ?
+			MAX_QP_THRESHOLD_SIZE :
+			atoi(cmdline);
 	}
+	cmdline = qat_cmdline_get_val(qat_pci_dev,
+			SYM_CIPHER_CRC_ENABLE_NAME);
+	if (cmdline)
+		internals->cipher_crc_offload_enable = atoi(cmdline);
 
 	if (gen_dev_ops->get_capabilities(internals,
-			capa_memz_name, slice_map) < 0) {
+			capa_memz_name, qat_pci_dev->slice_map) < 0) {
 		QAT_LOG(ERR,
 			"Device cannot obtain capabilities, destroying PMD for %s",
 			name);
@@ -394,3 +400,8 @@ static struct cryptodev_driver qat_crypto_drv;
 RTE_PMD_REGISTER_CRYPTO_DRIVER(qat_crypto_drv,
 		cryptodev_qat_sym_driver,
 		qat_sym_driver_id);
+
+RTE_INIT(qat_sym_init)
+{
+	qat_cmdline_defines[QAT_SERVICE_SYMMETRIC] = arguments;
+}
-- 
2.13.6


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2 2/2] common/qat: decouple pmds from the common code
  2024-02-23  7:48   ` [PATCH v2 1/2] drivers/qat: isolate parser arguments configuration Arkadiusz Kusztal
@ 2024-02-23  7:48     ` Arkadiusz Kusztal
  2024-02-29  9:30     ` [PATCH v3 1/3] common/qat: isolate parser arguments configuration Arkadiusz Kusztal
  1 sibling, 0 replies; 12+ messages in thread
From: Arkadiusz Kusztal @ 2024-02-23  7:48 UTC (permalink / raw)
  To: dev; +Cc: gakhil, ciara.power, Arkadiusz Kusztal

Service specific functions were moved to services
files. Weak symbols for device create/destroy were removed,
named private devs were replaced by an opaque array.

Signed-off-by: Arkadiusz Kusztal <arkadiuszx.kusztal@intel.com>
---
 drivers/common/qat/qat_device.c     | 112 ++++++++++--------------------------
 drivers/common/qat/qat_device.h     |  47 ++++-----------
 drivers/compress/qat/qat_comp_pmd.c |  34 +++++------
 drivers/compress/qat/qat_comp_pmd.h |   7 ---
 drivers/crypto/qat/qat_asym.c       |  20 ++++---
 drivers/crypto/qat/qat_sym.c        |  19 +++---
 6 files changed, 83 insertions(+), 156 deletions(-)

diff --git a/drivers/common/qat/qat_device.c b/drivers/common/qat/qat_device.c
index bbbb198273..cf2b14dab0 100644
--- a/drivers/common/qat/qat_device.c
+++ b/drivers/common/qat/qat_device.c
@@ -26,6 +26,8 @@
 struct qat_gen_hw_data qat_gen_config[QAT_N_GENS];
 struct qat_dev_hw_spec_funcs *qat_dev_hw_spec[QAT_N_GENS];
 
+struct qat_service qat_service[QAT_MAX_SERVICES];
+
 /* per-process array of device data */
 struct qat_device_info qat_pci_devs[RTE_PMD_QAT_MAX_PCI_DEVICES];
 static int qat_nb_pci_devices;
@@ -108,7 +110,7 @@ qat_pci_find_free_device_index(void)
 		return dev_id;
 }
 
-struct qat_pci_device *
+static struct qat_pci_device *
 qat_get_qat_dev_from_pci_dev(struct rte_pci_device *pci_dev)
 {
 	char name[QAT_DEV_NAME_MAX_LEN];
@@ -241,7 +243,8 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev)
 		return NULL;
 	}
 
-	qat_dev_size = sizeof(struct qat_pci_device) + extra_size;
+	qat_dev_size = sizeof(struct qat_pci_device) + sizeof(void *) *
+				QAT_MAX_SERVICES + extra_size;
 	qat_dev_mz = rte_memzone_reserve(name, qat_dev_size,
 		rte_socket_id(), 0);
 
@@ -344,7 +347,7 @@ qat_pci_device_release(struct rte_pci_device *pci_dev)
 {
 	struct qat_pci_device *qat_dev;
 	char name[QAT_DEV_NAME_MAX_LEN];
-	int busy = 0;
+	int busy = 0, i;
 
 	if (pci_dev == NULL)
 		return -EINVAL;
@@ -359,24 +362,16 @@ qat_pci_device_release(struct rte_pci_device *pci_dev)
 		/* Check that there are no service devs still on pci device */
 
 		if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
-			if (qat_dev->sym_dev != NULL) {
-				QAT_LOG(DEBUG, "QAT sym device %s is busy",
-					name);
-				busy = 1;
-			}
-			if (qat_dev->asym_dev != NULL) {
-				QAT_LOG(DEBUG, "QAT asym device %s is busy",
-					name);
-				busy = 1;
-			}
-			if (qat_dev->comp_dev != NULL) {
-				QAT_LOG(DEBUG, "QAT comp device %s is busy",
-					name);
+			for (i = 0; i < QAT_MAX_SERVICES; i++) {
+				if (qat_dev->pmd[i] == NULL)
+					continue;
+				QAT_LOG(DEBUG, "QAT %s device %s is busy",
+					qat_service[i].name, name);
 				busy = 1;
-			}
 			if (busy)
 				return -EBUSY;
 			rte_memzone_free(inst->mz);
+			}
 		}
 		memset(inst, 0, sizeof(struct qat_device_info));
 		qat_nb_pci_devices--;
@@ -390,17 +385,20 @@ static int
 qat_pci_dev_destroy(struct qat_pci_device *qat_pci_dev,
 		struct rte_pci_device *pci_dev)
 {
-	qat_sym_dev_destroy(qat_pci_dev);
-	qat_comp_dev_destroy(qat_pci_dev);
-	qat_asym_dev_destroy(qat_pci_dev);
+	int i;
+
+	for (i = 0; i < QAT_MAX_SERVICES; i++) {
+		if (!qat_service[i].dev_create)
+			continue;
+		qat_service[i].dev_destroy(qat_pci_dev);
+	}
 	return qat_pci_device_release(pci_dev);
 }
 
 static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 		struct rte_pci_device *pci_dev)
 {
-	int sym_ret = 0, asym_ret = 0, comp_ret = 0;
-	int num_pmds_created = 0;
+	int i, ret = 0, num_pmds_created = 0;
 	struct qat_pci_device *qat_pci_dev;
 
 	QAT_LOG(DEBUG, "Found QAT device at %02x:%02x.%x",
@@ -412,30 +410,18 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 	if (qat_pci_dev == NULL)
 		return -ENODEV;
 
-	sym_ret = qat_sym_dev_create(qat_pci_dev);
-	if (sym_ret == 0) {
-		num_pmds_created++;
-	}
-	else
-		QAT_LOG(WARNING,
-				"Failed to create QAT SYM PMD on device %s",
-				qat_pci_dev->name);
-
-	comp_ret = qat_comp_dev_create(qat_pci_dev);
-	if (comp_ret == 0)
-		num_pmds_created++;
-	else
-		QAT_LOG(WARNING,
-				"Failed to create QAT COMP PMD on device %s",
-				qat_pci_dev->name);
-
-	asym_ret = qat_asym_dev_create(qat_pci_dev);
-	if (asym_ret == 0)
-		num_pmds_created++;
-	else
-		QAT_LOG(WARNING,
-				"Failed to create QAT ASYM PMD on device %s",
+	for (i = 0; i < QAT_MAX_SERVICES; i++) {
+		if (!qat_service[i].dev_create)
+			continue;
+		ret = qat_service[i].dev_create(qat_pci_dev);
+		if (ret == 0)
+			num_pmds_created++;
+		else {
+			QAT_LOG(WARNING, "Failed to create %s PMD on device %s",
+				qat_service[i].name,
 				qat_pci_dev->name);
+		}
+	}
 
 	if (num_pmds_created == 0)
 		qat_pci_dev_destroy(qat_pci_dev, pci_dev);
@@ -465,42 +451,6 @@ static struct rte_pci_driver rte_qat_pmd = {
 	.remove = qat_pci_remove
 };
 
-__rte_weak int
-qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-	return 0;
-}
-
-__rte_weak int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-	return 0;
-}
-
-__rte_weak int
-qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-	return 0;
-}
-
-__rte_weak int
-qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-	return 0;
-}
-
-__rte_weak int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-	return 0;
-}
-
-__rte_weak int
-qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-	return 0;
-}
-
 RTE_PMD_REGISTER_PCI(QAT_PCI_NAME, rte_qat_pmd);
 RTE_PMD_REGISTER_PCI_TABLE(QAT_PCI_NAME, pci_id_qat_map);
 RTE_PMD_REGISTER_KMOD_DEP(QAT_PCI_NAME, "* igb_uio | uio_pci_generic | vfio-pci");
diff --git a/drivers/common/qat/qat_device.h b/drivers/common/qat/qat_device.h
index 4116548eeb..19319589ab 100644
--- a/drivers/common/qat/qat_device.h
+++ b/drivers/common/qat/qat_device.h
@@ -19,6 +19,14 @@
 #define MAX_QP_THRESHOLD_SIZE	32
 #define QAT_LEGACY_CAPA "qat_legacy_capa"
 
+struct qat_service {
+	const char *name;
+	int (*dev_create)(struct qat_pci_device *qat_pci_dev);
+	int (*dev_destroy)(struct qat_pci_device *qat_pci_dev);
+};
+
+extern struct qat_service qat_service[];
+
 /**
  * Function prototypes for GENx specific device operations.
  **/
@@ -104,27 +112,12 @@ struct qat_pci_device {
 	/**< QAT device generation */
 	rte_spinlock_t arb_csr_lock;
 	/**< lock to protect accesses to the arbiter CSR */
-
 	struct qat_qp *qps_in_use[QAT_MAX_SERVICES][ADF_MAX_QPS_ON_ANY_SERVICE];
 	/**< links to qps set up for each service, index same as on API */
-
-	/* Data relating to symmetric crypto service */
-	struct qat_cryptodev_private *sym_dev;
-	/**< link back to cryptodev private data */
-
 	int qat_sym_driver_id;
 	/**< Symmetric driver id used by this device */
-
-	/* Data relating to asymmetric crypto service */
-	struct qat_cryptodev_private *asym_dev;
-	/**< link back to cryptodev private data */
-
 	int qat_asym_driver_id;
 	/**< Symmetric driver id used by this device */
-
-	/* Data relating to compression service */
-	struct qat_comp_dev_private *comp_dev;
-	/**< link back to compressdev private data */
 	void *misc_bar_io_addr;
 	/**< Address of misc bar */
 	void *dev_private;
@@ -133,6 +126,8 @@ struct qat_pci_device {
 	/**< Map of the crypto and compression slices */
 	char *command_line;
 	/**< Map of the crypto and compression slices */
+	void *pmd[QAT_MAX_SERVICES];
+	/**< link back to pmd private data */
 };
 
 struct qat_gen_hw_data {
@@ -152,26 +147,4 @@ struct qat_pf2vf_dev {
 
 extern struct qat_gen_hw_data qat_gen_config[];
 
-struct qat_pci_device *
-qat_get_qat_dev_from_pci_dev(struct rte_pci_device *pci_dev);
-
-/* declaration needed for weak functions */
-int
-qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused);
-
-int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev);
-
-int
-qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
-
-int
-qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
-
-int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused);
-
-int
-qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
-
 #endif /* _QAT_DEVICE_H_ */
diff --git a/drivers/compress/qat/qat_comp_pmd.c b/drivers/compress/qat/qat_comp_pmd.c
index 1075337efe..19df9f34ab 100644
--- a/drivers/compress/qat/qat_comp_pmd.c
+++ b/drivers/compress/qat/qat_comp_pmd.c
@@ -636,22 +636,24 @@ qat_comp_pmd_dequeue_first_op_burst(void *qp, struct rte_comp_op **ops,
 {
 	uint16_t ret = qat_comp_dequeue_burst(qp, ops, nb_ops);
 	struct qat_qp *tmp_qp = (struct qat_qp *)qp;
+	struct qat_comp_dev_private *dev =
+		tmp_qp->qat_dev->pmd[QAT_SERVICE_COMPRESSION];
 
 	if (ret) {
 		if ((*ops)->debug_status ==
 				(uint64_t)ERR_CODE_QAT_COMP_WRONG_FW) {
-			tmp_qp->qat_dev->comp_dev->compressdev->enqueue_burst =
+			dev->compressdev->enqueue_burst =
 					qat_comp_pmd_enq_deq_dummy_op_burst;
-			tmp_qp->qat_dev->comp_dev->compressdev->dequeue_burst =
+			dev->compressdev->dequeue_burst =
 					qat_comp_pmd_enq_deq_dummy_op_burst;
 
-			tmp_qp->qat_dev->comp_dev->compressdev->dev_ops =
+			dev->compressdev->dev_ops =
 					&compress_qat_dummy_ops;
 			QAT_LOG(ERR,
 					"This QAT hardware doesn't support compression operation");
 
 		} else {
-			tmp_qp->qat_dev->comp_dev->compressdev->dequeue_burst =
+			dev->compressdev->dequeue_burst =
 					qat_comp_dequeue_burst;
 		}
 	}
@@ -669,7 +671,7 @@ static const struct rte_driver compdev_qat_driver = {
 	.alias = qat_comp_drv_name
 };
 
-int
+static int
 qat_comp_dev_create(struct qat_pci_device *qat_pci_dev)
 {
 	struct qat_device_info *qat_dev_instance =
@@ -772,7 +774,7 @@ qat_comp_dev_create(struct qat_pci_device *qat_pci_dev)
 			MAX_QP_THRESHOLD_SIZE :
 			atoi(cmdline);
 	}
-	qat_pci_dev->comp_dev = comp_dev;
+	qat_pci_dev->pmd[QAT_SERVICE_COMPRESSION] = comp_dev;
 
 	QAT_LOG(DEBUG,
 		    "Created QAT COMP device %s as compressdev instance %d",
@@ -780,26 +782,23 @@ qat_comp_dev_create(struct qat_pci_device *qat_pci_dev)
 	return 0;
 }
 
-int
+static int
 qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev)
 {
-	struct qat_comp_dev_private *comp_dev;
+	struct qat_comp_dev_private *dev =
+		qat_pci_dev->pmd[QAT_SERVICE_COMPRESSION];
 
 	if (qat_pci_dev == NULL)
 		return -ENODEV;
 
-	comp_dev = qat_pci_dev->comp_dev;
-	if (comp_dev == NULL)
-		return 0;
-
 	if (rte_eal_process_type() == RTE_PROC_PRIMARY)
-		rte_memzone_free(qat_pci_dev->comp_dev->capa_mz);
+		rte_memzone_free(dev->capa_mz);
 
 	/* clean up any resources used by the device */
-	qat_comp_dev_close(comp_dev->compressdev);
+	qat_comp_dev_close(dev->compressdev);
 
-	rte_compressdev_pmd_destroy(comp_dev->compressdev);
-	qat_pci_dev->comp_dev = NULL;
+	rte_compressdev_pmd_destroy(dev->compressdev);
+	qat_pci_dev->pmd[QAT_SERVICE_COMPRESSION] = NULL;
 
 	return 0;
 }
@@ -807,4 +806,7 @@ qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev)
 RTE_INIT(qat_sym_init)
 {
 	qat_cmdline_defines[QAT_SERVICE_COMPRESSION] = arguments;
+	qat_service[QAT_SERVICE_COMPRESSION].name = "symmetric crypto";
+	qat_service[QAT_SERVICE_COMPRESSION].dev_create = qat_comp_dev_create;
+	qat_service[QAT_SERVICE_COMPRESSION].dev_destroy = qat_comp_dev_destroy;
 }
diff --git a/drivers/compress/qat/qat_comp_pmd.h b/drivers/compress/qat/qat_comp_pmd.h
index 1f5b0facf7..01a8983287 100644
--- a/drivers/compress/qat/qat_comp_pmd.h
+++ b/drivers/compress/qat/qat_comp_pmd.h
@@ -106,13 +106,6 @@ const struct rte_memzone *
 qat_comp_setup_inter_buffers(struct qat_comp_dev_private *comp_dev,
 		uint32_t buff_size);
 
-int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev);
-
-int
-qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev);
-
-
 static __rte_always_inline unsigned int
 qat_comp_get_num_im_bufs_required(enum qat_device_gen gen)
 {
diff --git a/drivers/crypto/qat/qat_asym.c b/drivers/crypto/qat/qat_asym.c
index bc641ced48..7f0c78b269 100644
--- a/drivers/crypto/qat/qat_asym.c
+++ b/drivers/crypto/qat/qat_asym.c
@@ -1505,7 +1505,7 @@ qat_asym_init_op_cookie(void *op_cookie)
 	}
 }
 
-int
+static int
 qat_asym_dev_create(struct qat_pci_device *qat_pci_dev)
 {
 	struct qat_cryptodev_private *internals;
@@ -1607,31 +1607,32 @@ qat_asym_dev_create(struct qat_pci_device *qat_pci_dev)
 		return -1;
 	}
 
-	qat_pci_dev->asym_dev = internals;
+	qat_pci_dev->pmd[QAT_SERVICE_ASYMMETRIC] = internals;
 	internals->service_type = QAT_SERVICE_ASYMMETRIC;
 	QAT_LOG(DEBUG, "Created QAT ASYM device %s as cryptodev instance %d",
 			cryptodev->data->name, internals->dev_id);
 	return 0;
 }
 
-int
+static int
 qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev)
 {
 	struct rte_cryptodev *cryptodev;
+	struct qat_cryptodev_private *dev =
+		qat_pci_dev->pmd[QAT_SERVICE_ASYMMETRIC];
 
 	if (qat_pci_dev == NULL)
 		return -ENODEV;
-	if (qat_pci_dev->asym_dev == NULL)
+	if (dev == NULL)
 		return 0;
 	if (rte_eal_process_type() == RTE_PROC_PRIMARY)
-		rte_memzone_free(qat_pci_dev->asym_dev->capa_mz);
+		rte_memzone_free(dev->capa_mz);
 
 	/* free crypto device */
-	cryptodev = rte_cryptodev_pmd_get_dev(
-			qat_pci_dev->asym_dev->dev_id);
+	cryptodev = rte_cryptodev_pmd_get_dev(dev->dev_id);
 	rte_cryptodev_pmd_destroy(cryptodev);
 	qat_pci_devs[qat_pci_dev->qat_dev_id].asym_rte_dev.name = NULL;
-	qat_pci_dev->asym_dev = NULL;
+	qat_pci_dev->pmd[QAT_SERVICE_ASYMMETRIC] = NULL;
 
 	return 0;
 }
@@ -1644,4 +1645,7 @@ RTE_PMD_REGISTER_CRYPTO_DRIVER(qat_crypto_drv,
 RTE_INIT(qat_asym_init)
 {
 	qat_cmdline_defines[QAT_SERVICE_ASYMMETRIC] = arguments;
+	qat_service[QAT_SERVICE_ASYMMETRIC].name = "asymmetric crypto";
+	qat_service[QAT_SERVICE_ASYMMETRIC].dev_create = qat_asym_dev_create;
+	qat_service[QAT_SERVICE_ASYMMETRIC].dev_destroy = qat_asym_dev_destroy;
 }
diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c
index 2c8d0421e7..1ea029fe3b 100644
--- a/drivers/crypto/qat/qat_sym.c
+++ b/drivers/crypto/qat/qat_sym.c
@@ -193,7 +193,7 @@ qat_sym_dequeue_burst(void *qp, struct rte_crypto_op **ops,
 				qat_sym_process_response, nb_ops);
 }
 
-int
+static int
 qat_sym_dev_create(struct qat_pci_device *qat_pci_dev)
 {
 	int ret = 0;
@@ -309,7 +309,7 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev)
 		goto error;
 	}
 	internals->service_type = QAT_SERVICE_SYMMETRIC;
-	qat_pci_dev->sym_dev = internals;
+	qat_pci_dev->pmd[QAT_SERVICE_SYMMETRIC] = internals;
 	QAT_LOG(DEBUG, "Created QAT SYM device %s as cryptodev instance %d",
 			cryptodev->data->name, internals->dev_id);
 
@@ -325,25 +325,27 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev)
 	return ret;
 }
 
-int
+static int
 qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev)
 {
 	struct rte_cryptodev *cryptodev;
+	struct qat_cryptodev_private *dev =
+		qat_pci_dev->pmd[QAT_SERVICE_SYMMETRIC];
 
 	if (qat_pci_dev == NULL)
 		return -ENODEV;
-	if (qat_pci_dev->sym_dev == NULL)
+	if (dev == NULL)
 		return 0;
 	if (rte_eal_process_type() == RTE_PROC_PRIMARY)
-		rte_memzone_free(qat_pci_dev->sym_dev->capa_mz);
+		rte_memzone_free(dev->capa_mz);
 
 	/* free crypto device */
-	cryptodev = rte_cryptodev_pmd_get_dev(qat_pci_dev->sym_dev->dev_id);
+	cryptodev = rte_cryptodev_pmd_get_dev(dev->dev_id);
 	rte_free(cryptodev->security_ctx);
 	cryptodev->security_ctx = NULL;
 	rte_cryptodev_pmd_destroy(cryptodev);
 	qat_pci_devs[qat_pci_dev->qat_dev_id].sym_rte_dev.name = NULL;
-	qat_pci_dev->sym_dev = NULL;
+	qat_pci_dev->pmd[QAT_SERVICE_SYMMETRIC] = NULL;
 
 	return 0;
 }
@@ -404,4 +406,7 @@ RTE_PMD_REGISTER_CRYPTO_DRIVER(qat_crypto_drv,
 RTE_INIT(qat_sym_init)
 {
 	qat_cmdline_defines[QAT_SERVICE_SYMMETRIC] = arguments;
+	qat_service[QAT_SERVICE_SYMMETRIC].name = "symmetric crypto";
+	qat_service[QAT_SERVICE_SYMMETRIC].dev_create = qat_sym_dev_create;
+	qat_service[QAT_SERVICE_SYMMETRIC].dev_destroy = qat_sym_dev_destroy;
 }
-- 
2.13.6


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v3 1/3] common/qat: isolate parser arguments configuration
  2024-02-23  7:48   ` [PATCH v2 1/2] drivers/qat: isolate parser arguments configuration Arkadiusz Kusztal
  2024-02-23  7:48     ` [PATCH v2 2/2] common/qat: decouple pmds from the common code Arkadiusz Kusztal
@ 2024-02-29  9:30     ` Arkadiusz Kusztal
  2024-02-29  9:30       ` [PATCH v3 2/3] common/qat: decouple pmds from the common code Arkadiusz Kusztal
  2024-02-29  9:30       ` [PATCH v3 3/3] common/qat: fix incorrectly placed legacy flag Arkadiusz Kusztal
  1 sibling, 2 replies; 12+ messages in thread
From: Arkadiusz Kusztal @ 2024-02-29  9:30 UTC (permalink / raw)
  To: dev; +Cc: gakhil, ciara.power, Arkadiusz Kusztal

This commit isolates qat device arguments from the common
code. Now arguments are defined per service, and only appear
in the application if the service is compiled-in.

Signed-off-by: Arkadiusz Kusztal <arkadiuszx.kusztal@intel.com>
---
 drivers/common/qat/qat_common.c     |  11 +++
 drivers/common/qat/qat_common.h     |   3 +
 drivers/common/qat/qat_device.c     | 179 ++++++++++++++++++------------------
 drivers/common/qat/qat_device.h     |  27 ++----
 drivers/compress/qat/qat_comp_pmd.c |  31 +++++--
 drivers/compress/qat/qat_comp_pmd.h |   3 +-
 drivers/crypto/qat/qat_asym.c       |  38 +++++---
 drivers/crypto/qat/qat_sym.c        |  49 ++++++----
 8 files changed, 188 insertions(+), 153 deletions(-)

diff --git a/drivers/common/qat/qat_common.c b/drivers/common/qat/qat_common.c
index 59e7e02622..61bc97b0f3 100644
--- a/drivers/common/qat/qat_common.c
+++ b/drivers/common/qat/qat_common.c
@@ -6,6 +6,17 @@
 #include "qat_device.h"
 #include "qat_logs.h"
 
+#define QAT_LEGACY_CAPA "qat_legacy_capa"
+
+static const char *const arguments[] = {
+	QAT_LEGACY_CAPA,
+	NULL
+};
+
+const char *const *qat_cmdline_defines[QAT_MAX_SERVICES + 1] = {
+	[QAT_MAX_SERVICES] = arguments,
+};
+
 const char *
 qat_service_get_str(enum qat_service_type type)
 {
diff --git a/drivers/common/qat/qat_common.h b/drivers/common/qat/qat_common.h
index 53799ce174..7425600506 100644
--- a/drivers/common/qat/qat_common.h
+++ b/drivers/common/qat/qat_common.h
@@ -16,6 +16,9 @@
  * from one according to the generation of the device.
  * QAT_GEN* is used as the index to find all devices
  */
+
+extern const char *const *qat_cmdline_defines[];
+
 enum qat_device_gen {
 	QAT_GEN1,
 	QAT_GEN2,
diff --git a/drivers/common/qat/qat_device.c b/drivers/common/qat/qat_device.c
index a9ea4af5df..e367671267 100644
--- a/drivers/common/qat/qat_device.c
+++ b/drivers/common/qat/qat_device.c
@@ -121,70 +121,6 @@ qat_get_qat_dev_from_pci_dev(struct rte_pci_device *pci_dev)
 	return qat_pci_get_named_dev(name);
 }
 
-static void
-qat_dev_parse_cmd(const char *str, struct qat_dev_cmd_param
-		*qat_dev_cmd_param)
-{
-	int i = 0;
-	const char *param;
-
-	while (1) {
-		char value_str[4] = { };
-
-		param = qat_dev_cmd_param[i].name;
-		if (param == NULL)
-			return;
-		long value = 0;
-		const char *arg = strstr(str, param);
-		const char *arg2 = NULL;
-
-		if (arg) {
-			arg2 = arg + strlen(param);
-			if (*arg2 != '=') {
-				QAT_LOG(DEBUG, "parsing error '=' sign"
-						" should immediately follow %s",
-						param);
-				arg2 = NULL;
-			} else
-				arg2++;
-		} else {
-			QAT_LOG(DEBUG, "%s not provided", param);
-		}
-		if (arg2) {
-			int iter = 0;
-			while (iter < 2) {
-				if (!isdigit(*(arg2 + iter)))
-					break;
-				iter++;
-			}
-			if (!iter) {
-				QAT_LOG(DEBUG, "parsing error %s"
-					       " no number provided",
-					       param);
-			} else {
-				memcpy(value_str, arg2, iter);
-				value = strtol(value_str, NULL, 10);
-				if (strcmp(param,
-					 SYM_CIPHER_CRC_ENABLE_NAME) == 0) {
-					if (value < 0 || value > 1) {
-						QAT_LOG(DEBUG, "The value for qat_sym_cipher_crc_enable should be set to 0 or 1, setting to 0");
-						value = 0;
-					}
-				} else if (value > MAX_QP_THRESHOLD_SIZE) {
-					QAT_LOG(DEBUG, "Exceeded max size of"
-						" threshold, setting to %d",
-						MAX_QP_THRESHOLD_SIZE);
-					value = MAX_QP_THRESHOLD_SIZE;
-				}
-				QAT_LOG(DEBUG, "parsing %s = %ld",
-						param, value);
-			}
-		}
-		qat_dev_cmd_param[i].val = value;
-		i++;
-	}
-}
-
 static enum qat_device_gen
 pick_gen(const struct rte_pci_device *pci_dev)
 {
@@ -210,9 +146,79 @@ pick_gen(const struct rte_pci_device *pci_dev)
 	}
 }
 
-struct qat_pci_device *
-qat_pci_device_allocate(struct rte_pci_device *pci_dev,
-		struct qat_dev_cmd_param *qat_dev_cmd_param)
+char *qat_cmdline_get_val(struct qat_pci_device *qat_dev, const char *key)
+{
+	if (qat_dev->command_line == NULL)
+		return NULL;
+	key = strstr(qat_dev->command_line, key);
+
+	return key ? strchr(key, '=') + 1 : NULL;
+}
+
+static int cmdline_validate(const char *arg)
+{
+	int i, len;
+	char *eq_sign = strchr(arg, '=');
+	/* Check for the equal sign */
+	if (eq_sign == NULL) {
+		QAT_LOG(ERR, "malformed string, no equals sign, %s", arg);
+		return 0;
+	}
+	/* Check if argument is not empty */
+	len = strlen(eq_sign) - 1;
+	if (len == 0) {
+		QAT_LOG(ERR, "malformed string, empty argument, %s", arg);
+		return 0;
+	}
+	len = eq_sign - arg;
+	for (i = 0; i < QAT_MAX_SERVICES + 1; i++) {
+		int j = 0;
+		const char *def;
+
+		if (!qat_cmdline_defines[i])
+			continue;
+		while ((def = qat_cmdline_defines[i][j++])) {
+			if (strncmp(def, arg, len))
+				continue;
+			QAT_LOG(DEBUG, "Found %s command line argument",
+				def);
+			return 1;
+		}
+	}
+	return 0;
+}
+
+static int
+qat_dev_parse_command_line(struct qat_pci_device *qat_dev,
+	struct rte_devargs *devargs)
+{
+	int len = strlen(devargs->drv_str);
+	char *token = NULL;
+
+	if (len == 0)
+		return 0;
+	qat_dev->command_line = rte_malloc(NULL, len, 0);
+	if (qat_dev->command_line == NULL) {
+		QAT_LOG(ERR, "Cannot allocate memory for command line");
+		return -1;
+	}
+	strcpy(qat_dev->command_line, devargs->drv_str);
+	token = strtok(qat_dev->command_line, ",");
+	while (token != NULL) {
+		if (!cmdline_validate(token)) {
+			QAT_LOG(ERR, "Incorrect command line argument: %s",
+				token);
+			return -1;
+		}
+		token = strtok(NULL, ",");
+	}
+	/* Copy once againe the entire string, strtok already altered the contents */
+	strcpy(qat_dev->command_line, devargs->drv_str);
+	return 0;
+}
+
+static struct qat_pci_device *
+qat_pci_device_allocate(struct rte_pci_device *pci_dev)
 {
 	struct qat_pci_device *qat_dev;
 	enum qat_device_gen qat_dev_gen;
@@ -223,6 +229,7 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev,
 	struct rte_mem_resource *mem_resource;
 	const struct rte_memzone *qat_dev_mz;
 	int qat_dev_size, extra_size;
+	char *cmdline = NULL;
 
 	rte_pci_device_name(&pci_dev->addr, name, sizeof(name));
 	snprintf(name+strlen(name), QAT_DEV_NAME_MAX_LEN-strlen(name), "_qat");
@@ -300,8 +307,14 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev,
 	} else
 		qat_dev->misc_bar_io_addr = NULL;
 
-	if (devargs && devargs->drv_str)
-		qat_dev_parse_cmd(devargs->drv_str, qat_dev_cmd_param);
+	/* Parse the command line */
+	if (qat_dev_parse_command_line(qat_dev, devargs))
+		goto error;
+
+	/* Parse the arguments */
+	cmdline = qat_cmdline_get_val(qat_dev, QAT_LEGACY_CAPA);
+	if (cmdline)
+		qat_legacy_capa = atoi(cmdline);
 
 	if (qat_read_qp_config(qat_dev)) {
 		QAT_LOG(ERR,
@@ -339,6 +352,7 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev,
 
 	return qat_dev;
 error:
+	rte_free(qat_dev->command_line);
 	if (rte_memzone_free(qat_dev_mz)) {
 		QAT_LOG(DEBUG,
 			"QAT internal error! Trying to free already allocated memzone: %s",
@@ -410,27 +424,17 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 	int sym_ret = 0, asym_ret = 0, comp_ret = 0;
 	int num_pmds_created = 0;
 	struct qat_pci_device *qat_pci_dev;
-	struct qat_dev_cmd_param qat_dev_cmd_param[] = {
-			{ QAT_LEGACY_CAPA, 0 },
-			{ SYM_ENQ_THRESHOLD_NAME, 0 },
-			{ ASYM_ENQ_THRESHOLD_NAME, 0 },
-			{ COMP_ENQ_THRESHOLD_NAME, 0 },
-			{ SYM_CIPHER_CRC_ENABLE_NAME, 0 },
-			[QAT_CMD_SLICE_MAP_POS] = { QAT_CMD_SLICE_MAP, 0},
-			{ NULL, 0 },
-	};
 
 	QAT_LOG(DEBUG, "Found QAT device at %02x:%02x.%x",
 			pci_dev->addr.bus,
 			pci_dev->addr.devid,
 			pci_dev->addr.function);
 
-	qat_pci_dev = qat_pci_device_allocate(pci_dev, qat_dev_cmd_param);
+	qat_pci_dev = qat_pci_device_allocate(pci_dev);
 	if (qat_pci_dev == NULL)
 		return -ENODEV;
 
-	qat_dev_cmd_param[QAT_CMD_SLICE_MAP_POS].val = qat_pci_dev->slice_map;
-	sym_ret = qat_sym_dev_create(qat_pci_dev, qat_dev_cmd_param);
+	sym_ret = qat_sym_dev_create(qat_pci_dev);
 	if (sym_ret == 0) {
 		num_pmds_created++;
 	}
@@ -439,7 +443,7 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 				"Failed to create QAT SYM PMD on device %s",
 				qat_pci_dev->name);
 
-	comp_ret = qat_comp_dev_create(qat_pci_dev, qat_dev_cmd_param);
+	comp_ret = qat_comp_dev_create(qat_pci_dev);
 	if (comp_ret == 0)
 		num_pmds_created++;
 	else
@@ -447,7 +451,7 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 				"Failed to create QAT COMP PMD on device %s",
 				qat_pci_dev->name);
 
-	asym_ret = qat_asym_dev_create(qat_pci_dev, qat_dev_cmd_param);
+	asym_ret = qat_asym_dev_create(qat_pci_dev);
 	if (asym_ret == 0)
 		num_pmds_created++;
 	else
@@ -484,15 +488,13 @@ static struct rte_pci_driver rte_qat_pmd = {
 };
 
 __rte_weak int
-qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused,
-		struct qat_dev_cmd_param *qat_dev_cmd_param __rte_unused)
+qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
 {
 	return 0;
 }
 
 __rte_weak int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused,
-		const struct qat_dev_cmd_param *qat_dev_cmd_param __rte_unused)
+qat_asym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
 {
 	return 0;
 }
@@ -510,8 +512,7 @@ qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused)
 }
 
 __rte_weak int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused,
-		struct qat_dev_cmd_param *qat_dev_cmd_param __rte_unused)
+qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
 {
 	return 0;
 }
diff --git a/drivers/common/qat/qat_device.h b/drivers/common/qat/qat_device.h
index aa7988bb74..4116548eeb 100644
--- a/drivers/common/qat/qat_device.h
+++ b/drivers/common/qat/qat_device.h
@@ -16,15 +16,8 @@
 #define QAT_ATTACHED  (1)
 
 #define QAT_DEV_NAME_MAX_LEN	64
-
-#define QAT_LEGACY_CAPA "qat_legacy_capa"
-#define SYM_ENQ_THRESHOLD_NAME "qat_sym_enq_threshold"
-#define ASYM_ENQ_THRESHOLD_NAME "qat_asym_enq_threshold"
-#define COMP_ENQ_THRESHOLD_NAME "qat_comp_enq_threshold"
-#define SYM_CIPHER_CRC_ENABLE_NAME "qat_sym_cipher_crc_enable"
-#define QAT_CMD_SLICE_MAP "qat_cmd_slice_disable"
-#define QAT_CMD_SLICE_MAP_POS	5
 #define MAX_QP_THRESHOLD_SIZE	32
+#define QAT_LEGACY_CAPA "qat_legacy_capa"
 
 /**
  * Function prototypes for GENx specific device operations.
@@ -41,6 +34,9 @@ typedef int (*qat_dev_get_extra_size_t)(void);
 typedef int (*qat_dev_get_slice_map_t)(uint32_t *map,
 		const struct rte_pci_device *pci_dev);
 
+extern int qat_legacy_capa;
+char *qat_cmdline_get_val(struct qat_pci_device *qat_dev, const char *key);
+
 struct qat_dev_hw_spec_funcs {
 	qat_dev_reset_ring_pairs_t	qat_dev_reset_ring_pairs;
 	qat_dev_get_transport_bar_t	qat_dev_get_transport_bar;
@@ -135,6 +131,8 @@ struct qat_pci_device {
 	/**< Per generation specific information */
 	uint32_t slice_map;
 	/**< Map of the crypto and compression slices */
+	char *command_line;
+	/**< Map of the crypto and compression slices */
 };
 
 struct qat_gen_hw_data {
@@ -155,20 +153,14 @@ struct qat_pf2vf_dev {
 extern struct qat_gen_hw_data qat_gen_config[];
 
 struct qat_pci_device *
-qat_pci_device_allocate(struct rte_pci_device *pci_dev,
-		struct qat_dev_cmd_param *qat_dev_cmd_param);
-
-struct qat_pci_device *
 qat_get_qat_dev_from_pci_dev(struct rte_pci_device *pci_dev);
 
 /* declaration needed for weak functions */
 int
-qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused,
-		struct qat_dev_cmd_param *qat_dev_cmd_param);
+qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused);
 
 int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev,
-		const struct qat_dev_cmd_param *qat_dev_cmd_param);
+qat_asym_dev_create(struct qat_pci_device *qat_pci_dev);
 
 int
 qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
@@ -177,8 +169,7 @@ int
 qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
 
 int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused,
-		struct qat_dev_cmd_param *qat_dev_cmd_param);
+qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused);
 
 int
 qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
diff --git a/drivers/compress/qat/qat_comp_pmd.c b/drivers/compress/qat/qat_comp_pmd.c
index 815276fc9e..620afaffb6 100644
--- a/drivers/compress/qat/qat_comp_pmd.c
+++ b/drivers/compress/qat/qat_comp_pmd.c
@@ -9,6 +9,13 @@
 
 #define QAT_PMD_COMP_SGL_DEF_SEGMENTS 16
 
+#define COMP_ENQ_THRESHOLD_NAME "qat_comp_enq_threshold"
+
+static const char *const arguments[] = {
+	COMP_ENQ_THRESHOLD_NAME,
+	NULL
+};
+
 struct qat_comp_gen_dev_ops qat_comp_gen_dev_ops[QAT_N_GENS];
 
 struct stream_create_info {
@@ -663,10 +670,8 @@ static const struct rte_driver compdev_qat_driver = {
 };
 
 int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev,
-		struct qat_dev_cmd_param *qat_dev_cmd_param)
+qat_comp_dev_create(struct qat_pci_device *qat_pci_dev)
 {
-	int i = 0;
 	struct qat_device_info *qat_dev_instance =
 			&qat_pci_devs[qat_pci_dev->qat_dev_id];
 	struct rte_compressdev_pmd_init_params init_params = {
@@ -683,6 +688,7 @@ qat_comp_dev_create(struct qat_pci_device *qat_pci_dev,
 			&qat_comp_gen_dev_ops[qat_pci_dev->qat_dev_gen];
 	uint64_t capa_size;
 	uint16_t sub_id = qat_dev_instance->pci_dev->id.subsystem_device_id;
+	char *cmdline = NULL;
 
 	snprintf(name, RTE_COMPRESSDEV_NAME_MAX_LEN, "%s_%s",
 			qat_pci_dev->name, "comp");
@@ -765,13 +771,13 @@ qat_comp_dev_create(struct qat_pci_device *qat_pci_dev,
 	memcpy(comp_dev->capa_mz->addr, capabilities, capa_size);
 	comp_dev->qat_dev_capabilities = comp_dev->capa_mz->addr;
 
-	while (1) {
-		if (qat_dev_cmd_param[i].name == NULL)
-			break;
-		if (!strcmp(qat_dev_cmd_param[i].name, COMP_ENQ_THRESHOLD_NAME))
-			comp_dev->min_enq_burst_threshold =
-					qat_dev_cmd_param[i].val;
-		i++;
+	cmdline = qat_cmdline_get_val(qat_pci_dev,
+			COMP_ENQ_THRESHOLD_NAME);
+	if (cmdline) {
+		comp_dev->min_enq_burst_threshold =
+			atoi(cmdline) > MAX_QP_THRESHOLD_SIZE ?
+			MAX_QP_THRESHOLD_SIZE :
+			atoi(cmdline);
 	}
 	qat_pci_dev->comp_dev = comp_dev;
 
@@ -804,3 +810,8 @@ qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev)
 
 	return 0;
 }
+
+RTE_INIT(qat_sym_init)
+{
+	qat_cmdline_defines[QAT_SERVICE_COMPRESSION] = arguments;
+}
diff --git a/drivers/compress/qat/qat_comp_pmd.h b/drivers/compress/qat/qat_comp_pmd.h
index 3c8682a768..1f5b0facf7 100644
--- a/drivers/compress/qat/qat_comp_pmd.h
+++ b/drivers/compress/qat/qat_comp_pmd.h
@@ -107,8 +107,7 @@ qat_comp_setup_inter_buffers(struct qat_comp_dev_private *comp_dev,
 		uint32_t buff_size);
 
 int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev,
-		struct qat_dev_cmd_param *qat_dev_cmd_param);
+qat_comp_dev_create(struct qat_pci_device *qat_pci_dev);
 
 int
 qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev);
diff --git a/drivers/crypto/qat/qat_asym.c b/drivers/crypto/qat/qat_asym.c
index d96eb7ec6d..b112b6e66d 100644
--- a/drivers/crypto/qat/qat_asym.c
+++ b/drivers/crypto/qat/qat_asym.c
@@ -15,12 +15,19 @@
 #include "qat_pke.h"
 #include "qat_ec.h"
 
+#define ASYM_ENQ_THRESHOLD_NAME "qat_asym_enq_threshold"
 #define RSA_MODULUS_2048_BITS 2048
 
 uint8_t qat_asym_driver_id;
 
 struct qat_crypto_gen_dev_ops qat_asym_gen_dev_ops[QAT_N_GENS];
 
+
+static const char *const arguments[] = {
+	ASYM_ENQ_THRESHOLD_NAME,
+	NULL
+};
+
 /* An rte_driver is needed in the registration of both the device and the driver
  * with cryptodev.
  * The actual qat pci's rte_driver can't be used as its name represents
@@ -1499,8 +1506,7 @@ qat_asym_init_op_cookie(void *op_cookie)
 }
 
 int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev,
-		const struct qat_dev_cmd_param *qat_dev_cmd_param)
+qat_asym_dev_create(struct qat_pci_device *qat_pci_dev)
 {
 	struct qat_cryptodev_private *internals;
 	struct rte_cryptodev *cryptodev;
@@ -1515,9 +1521,8 @@ qat_asym_dev_create(struct qat_pci_device *qat_pci_dev,
 		&qat_asym_gen_dev_ops[qat_pci_dev->qat_dev_gen];
 	char name[RTE_CRYPTODEV_NAME_MAX_LEN];
 	char capa_memz_name[RTE_CRYPTODEV_NAME_MAX_LEN];
-	int i = 0;
-	uint16_t slice_map = 0;
 	uint16_t sub_id = qat_dev_instance->pci_dev->id.subsystem_device_id;
+	char *cmdline = NULL;
 
 	snprintf(name, RTE_CRYPTODEV_NAME_MAX_LEN, "%s_%s",
 			qat_pci_dev->name, "asym");
@@ -1580,18 +1585,16 @@ qat_asym_dev_create(struct qat_pci_device *qat_pci_dev,
 	internals->qat_dev = qat_pci_dev;
 	internals->dev_id = cryptodev->data->dev_id;
 
-	while (1) {
-		if (qat_dev_cmd_param[i].name == NULL)
-			break;
-		if (!strcmp(qat_dev_cmd_param[i].name, ASYM_ENQ_THRESHOLD_NAME))
-			internals->min_enq_burst_threshold =
-					qat_dev_cmd_param[i].val;
-		if (!strcmp(qat_dev_cmd_param[i].name, QAT_CMD_SLICE_MAP))
-			slice_map = qat_dev_cmd_param[i].val;
-		i++;
+	cmdline = qat_cmdline_get_val(qat_pci_dev,
+			ASYM_ENQ_THRESHOLD_NAME);
+	if (cmdline) {
+		internals->min_enq_burst_threshold =
+			atoi(cmdline) > MAX_QP_THRESHOLD_SIZE ?
+			MAX_QP_THRESHOLD_SIZE :
+			atoi(cmdline);
 	}
 
-	if (slice_map & ICP_ACCEL_MASK_PKE_SLICE) {
+	if (qat_pci_dev->slice_map & ICP_ACCEL_MASK_PKE_SLICE) {
 		QAT_LOG(ERR, "Device %s does not support PKE slice",
 				name);
 		rte_cryptodev_pmd_destroy(cryptodev);
@@ -1601,7 +1604,7 @@ qat_asym_dev_create(struct qat_pci_device *qat_pci_dev,
 	}
 
 	if (gen_dev_ops->get_capabilities(internals,
-			capa_memz_name, slice_map) < 0) {
+			capa_memz_name, qat_pci_dev->slice_map) < 0) {
 		QAT_LOG(ERR,
 			"Device cannot obtain capabilities, destroying PMD for %s",
 			name);
@@ -1644,3 +1647,8 @@ static struct cryptodev_driver qat_crypto_drv;
 RTE_PMD_REGISTER_CRYPTO_DRIVER(qat_crypto_drv,
 		cryptodev_qat_asym_driver,
 		qat_asym_driver_id);
+
+RTE_INIT(qat_asym_init)
+{
+	qat_cmdline_defines[QAT_SERVICE_ASYMMETRIC] = arguments;
+}
diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c
index 6301fdec0e..35b1f1a90b 100644
--- a/drivers/crypto/qat/qat_sym.c
+++ b/drivers/crypto/qat/qat_sym.c
@@ -13,6 +13,7 @@
 #include <rte_byteorder.h>
 #include <rte_security_driver.h>
 
+#include "qat_common.h"
 #include "qat_sym.h"
 #include "qat_crypto.h"
 #include "qat_qp.h"
@@ -20,6 +21,15 @@
 uint8_t qat_sym_driver_id;
 int qat_legacy_capa;
 
+#define SYM_ENQ_THRESHOLD_NAME "qat_sym_enq_threshold"
+#define SYM_CIPHER_CRC_ENABLE_NAME "qat_sym_cipher_crc_enable"
+
+static const char *const arguments[] = {
+	SYM_ENQ_THRESHOLD_NAME,
+	SYM_CIPHER_CRC_ENABLE_NAME,
+	NULL
+};
+
 struct qat_crypto_gen_dev_ops qat_sym_gen_dev_ops[QAT_N_GENS];
 
 /* An rte_driver is needed in the registration of both the device and the driver
@@ -184,11 +194,9 @@ qat_sym_dequeue_burst(void *qp, struct rte_crypto_op **ops,
 }
 
 int
-qat_sym_dev_create(struct qat_pci_device *qat_pci_dev,
-		struct qat_dev_cmd_param *qat_dev_cmd_param)
+qat_sym_dev_create(struct qat_pci_device *qat_pci_dev)
 {
-	int i = 0, ret = 0;
-	uint16_t slice_map = 0;
+	int ret = 0;
 	struct qat_device_info *qat_dev_instance =
 			&qat_pci_devs[qat_pci_dev->qat_dev_id];
 	struct rte_cryptodev_pmd_init_params init_params = {
@@ -203,6 +211,7 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev,
 	const struct qat_crypto_gen_dev_ops *gen_dev_ops =
 		&qat_sym_gen_dev_ops[qat_pci_dev->qat_dev_gen];
 	uint16_t sub_id = qat_dev_instance->pci_dev->id.subsystem_device_id;
+	char *cmdline = NULL;
 
 	snprintf(name, RTE_CRYPTODEV_NAME_MAX_LEN, "%s_%s",
 			qat_pci_dev->name, "sym");
@@ -283,26 +292,23 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev,
 
 	internals = cryptodev->data->dev_private;
 	internals->qat_dev = qat_pci_dev;
-
 	internals->dev_id = cryptodev->data->dev_id;
 
-	while (qat_dev_cmd_param[i].name != NULL) {
-		if (!strcmp(qat_dev_cmd_param[i].name, SYM_ENQ_THRESHOLD_NAME))
-			internals->min_enq_burst_threshold =
-					qat_dev_cmd_param[i].val;
-		if (!strcmp(qat_dev_cmd_param[i].name,
-				SYM_CIPHER_CRC_ENABLE_NAME))
-			internals->cipher_crc_offload_enable =
-					qat_dev_cmd_param[i].val;
-		if (!strcmp(qat_dev_cmd_param[i].name, QAT_LEGACY_CAPA))
-			qat_legacy_capa = qat_dev_cmd_param[i].val;
-		if (!strcmp(qat_dev_cmd_param[i].name, QAT_CMD_SLICE_MAP))
-			slice_map = qat_dev_cmd_param[i].val;
-		i++;
+	cmdline = qat_cmdline_get_val(qat_pci_dev,
+			SYM_ENQ_THRESHOLD_NAME);
+	if (cmdline) {
+		internals->min_enq_burst_threshold =
+			atoi(cmdline) > MAX_QP_THRESHOLD_SIZE ?
+			MAX_QP_THRESHOLD_SIZE :
+			atoi(cmdline);
 	}
+	cmdline = qat_cmdline_get_val(qat_pci_dev,
+			SYM_CIPHER_CRC_ENABLE_NAME);
+	if (cmdline)
+		internals->cipher_crc_offload_enable = atoi(cmdline);
 
 	if (gen_dev_ops->get_capabilities(internals,
-			capa_memz_name, slice_map) < 0) {
+			capa_memz_name, qat_pci_dev->slice_map) < 0) {
 		QAT_LOG(ERR,
 			"Device cannot obtain capabilities, destroying PMD for %s",
 			name);
@@ -401,3 +407,8 @@ static struct cryptodev_driver qat_crypto_drv;
 RTE_PMD_REGISTER_CRYPTO_DRIVER(qat_crypto_drv,
 		cryptodev_qat_sym_driver,
 		qat_sym_driver_id);
+
+RTE_INIT(qat_sym_init)
+{
+	qat_cmdline_defines[QAT_SERVICE_SYMMETRIC] = arguments;
+}
-- 
2.13.6


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v3 2/3] common/qat: decouple pmds from the common code
  2024-02-29  9:30     ` [PATCH v3 1/3] common/qat: isolate parser arguments configuration Arkadiusz Kusztal
@ 2024-02-29  9:30       ` Arkadiusz Kusztal
  2024-02-29  9:30       ` [PATCH v3 3/3] common/qat: fix incorrectly placed legacy flag Arkadiusz Kusztal
  1 sibling, 0 replies; 12+ messages in thread
From: Arkadiusz Kusztal @ 2024-02-29  9:30 UTC (permalink / raw)
  To: dev; +Cc: gakhil, ciara.power, Arkadiusz Kusztal

Service specific functions were moved to services
files. Weak symbols for device create/destroy were removed,
named private devs were replaced by an opaque array.

Signed-off-by: Arkadiusz Kusztal <arkadiuszx.kusztal@intel.com>
---
 drivers/common/qat/qat_device.c     | 112 ++++++++++--------------------------
 drivers/common/qat/qat_device.h     |  47 ++++-----------
 drivers/compress/qat/qat_comp_pmd.c |  34 +++++------
 drivers/compress/qat/qat_comp_pmd.h |   7 ---
 drivers/crypto/qat/qat_asym.c       |  20 ++++---
 drivers/crypto/qat/qat_sym.c        |  19 +++---
 6 files changed, 83 insertions(+), 156 deletions(-)

diff --git a/drivers/common/qat/qat_device.c b/drivers/common/qat/qat_device.c
index e367671267..e1cea4d9b2 100644
--- a/drivers/common/qat/qat_device.c
+++ b/drivers/common/qat/qat_device.c
@@ -26,6 +26,8 @@
 struct qat_gen_hw_data qat_gen_config[QAT_N_GENS];
 struct qat_dev_hw_spec_funcs *qat_dev_hw_spec[QAT_N_GENS];
 
+struct qat_service qat_service[QAT_MAX_SERVICES];
+
 /* per-process array of device data */
 struct qat_device_info qat_pci_devs[RTE_PMD_QAT_MAX_PCI_DEVICES];
 static int qat_nb_pci_devices;
@@ -111,7 +113,7 @@ qat_pci_find_free_device_index(void)
 		return dev_id;
 }
 
-struct qat_pci_device *
+static struct qat_pci_device *
 qat_get_qat_dev_from_pci_dev(struct rte_pci_device *pci_dev)
 {
 	char name[QAT_DEV_NAME_MAX_LEN];
@@ -277,7 +279,8 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev)
 		return NULL;
 	}
 
-	qat_dev_size = sizeof(struct qat_pci_device) + extra_size;
+	qat_dev_size = sizeof(struct qat_pci_device) + sizeof(void *) *
+				QAT_MAX_SERVICES + extra_size;
 	qat_dev_mz = rte_memzone_reserve(name, qat_dev_size,
 		rte_socket_id(), 0);
 
@@ -366,7 +369,7 @@ qat_pci_device_release(struct rte_pci_device *pci_dev)
 {
 	struct qat_pci_device *qat_dev;
 	char name[QAT_DEV_NAME_MAX_LEN];
-	int busy = 0;
+	int busy = 0, i;
 
 	if (pci_dev == NULL)
 		return -EINVAL;
@@ -381,24 +384,16 @@ qat_pci_device_release(struct rte_pci_device *pci_dev)
 		/* Check that there are no service devs still on pci device */
 
 		if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
-			if (qat_dev->sym_dev != NULL) {
-				QAT_LOG(DEBUG, "QAT sym device %s is busy",
-					name);
-				busy = 1;
-			}
-			if (qat_dev->asym_dev != NULL) {
-				QAT_LOG(DEBUG, "QAT asym device %s is busy",
-					name);
-				busy = 1;
-			}
-			if (qat_dev->comp_dev != NULL) {
-				QAT_LOG(DEBUG, "QAT comp device %s is busy",
-					name);
+			for (i = 0; i < QAT_MAX_SERVICES; i++) {
+				if (qat_dev->pmd[i] == NULL)
+					continue;
+				QAT_LOG(DEBUG, "QAT %s device %s is busy",
+					qat_service[i].name, name);
 				busy = 1;
-			}
 			if (busy)
 				return -EBUSY;
 			rte_memzone_free(inst->mz);
+			}
 		}
 		memset(inst, 0, sizeof(struct qat_device_info));
 		qat_nb_pci_devices--;
@@ -412,17 +407,20 @@ static int
 qat_pci_dev_destroy(struct qat_pci_device *qat_pci_dev,
 		struct rte_pci_device *pci_dev)
 {
-	qat_sym_dev_destroy(qat_pci_dev);
-	qat_comp_dev_destroy(qat_pci_dev);
-	qat_asym_dev_destroy(qat_pci_dev);
+	int i;
+
+	for (i = 0; i < QAT_MAX_SERVICES; i++) {
+		if (!qat_service[i].dev_create)
+			continue;
+		qat_service[i].dev_destroy(qat_pci_dev);
+	}
 	return qat_pci_device_release(pci_dev);
 }
 
 static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 		struct rte_pci_device *pci_dev)
 {
-	int sym_ret = 0, asym_ret = 0, comp_ret = 0;
-	int num_pmds_created = 0;
+	int i, ret = 0, num_pmds_created = 0;
 	struct qat_pci_device *qat_pci_dev;
 
 	QAT_LOG(DEBUG, "Found QAT device at %02x:%02x.%x",
@@ -434,30 +432,18 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 	if (qat_pci_dev == NULL)
 		return -ENODEV;
 
-	sym_ret = qat_sym_dev_create(qat_pci_dev);
-	if (sym_ret == 0) {
-		num_pmds_created++;
-	}
-	else
-		QAT_LOG(WARNING,
-				"Failed to create QAT SYM PMD on device %s",
-				qat_pci_dev->name);
-
-	comp_ret = qat_comp_dev_create(qat_pci_dev);
-	if (comp_ret == 0)
-		num_pmds_created++;
-	else
-		QAT_LOG(WARNING,
-				"Failed to create QAT COMP PMD on device %s",
-				qat_pci_dev->name);
-
-	asym_ret = qat_asym_dev_create(qat_pci_dev);
-	if (asym_ret == 0)
-		num_pmds_created++;
-	else
-		QAT_LOG(WARNING,
-				"Failed to create QAT ASYM PMD on device %s",
+	for (i = 0; i < QAT_MAX_SERVICES; i++) {
+		if (!qat_service[i].dev_create)
+			continue;
+		ret = qat_service[i].dev_create(qat_pci_dev);
+		if (ret == 0)
+			num_pmds_created++;
+		else {
+			QAT_LOG(WARNING, "Failed to create %s PMD on device %s",
+				qat_service[i].name,
 				qat_pci_dev->name);
+		}
+	}
 
 	if (num_pmds_created == 0)
 		qat_pci_dev_destroy(qat_pci_dev, pci_dev);
@@ -487,42 +473,6 @@ static struct rte_pci_driver rte_qat_pmd = {
 	.remove = qat_pci_remove
 };
 
-__rte_weak int
-qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-	return 0;
-}
-
-__rte_weak int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-	return 0;
-}
-
-__rte_weak int
-qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-	return 0;
-}
-
-__rte_weak int
-qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-	return 0;
-}
-
-__rte_weak int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-	return 0;
-}
-
-__rte_weak int
-qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused)
-{
-	return 0;
-}
-
 RTE_PMD_REGISTER_PCI(QAT_PCI_NAME, rte_qat_pmd);
 RTE_PMD_REGISTER_PCI_TABLE(QAT_PCI_NAME, pci_id_qat_map);
 RTE_PMD_REGISTER_KMOD_DEP(QAT_PCI_NAME, "* igb_uio | uio_pci_generic | vfio-pci");
diff --git a/drivers/common/qat/qat_device.h b/drivers/common/qat/qat_device.h
index 4116548eeb..19319589ab 100644
--- a/drivers/common/qat/qat_device.h
+++ b/drivers/common/qat/qat_device.h
@@ -19,6 +19,14 @@
 #define MAX_QP_THRESHOLD_SIZE	32
 #define QAT_LEGACY_CAPA "qat_legacy_capa"
 
+struct qat_service {
+	const char *name;
+	int (*dev_create)(struct qat_pci_device *qat_pci_dev);
+	int (*dev_destroy)(struct qat_pci_device *qat_pci_dev);
+};
+
+extern struct qat_service qat_service[];
+
 /**
  * Function prototypes for GENx specific device operations.
  **/
@@ -104,27 +112,12 @@ struct qat_pci_device {
 	/**< QAT device generation */
 	rte_spinlock_t arb_csr_lock;
 	/**< lock to protect accesses to the arbiter CSR */
-
 	struct qat_qp *qps_in_use[QAT_MAX_SERVICES][ADF_MAX_QPS_ON_ANY_SERVICE];
 	/**< links to qps set up for each service, index same as on API */
-
-	/* Data relating to symmetric crypto service */
-	struct qat_cryptodev_private *sym_dev;
-	/**< link back to cryptodev private data */
-
 	int qat_sym_driver_id;
 	/**< Symmetric driver id used by this device */
-
-	/* Data relating to asymmetric crypto service */
-	struct qat_cryptodev_private *asym_dev;
-	/**< link back to cryptodev private data */
-
 	int qat_asym_driver_id;
 	/**< Symmetric driver id used by this device */
-
-	/* Data relating to compression service */
-	struct qat_comp_dev_private *comp_dev;
-	/**< link back to compressdev private data */
 	void *misc_bar_io_addr;
 	/**< Address of misc bar */
 	void *dev_private;
@@ -133,6 +126,8 @@ struct qat_pci_device {
 	/**< Map of the crypto and compression slices */
 	char *command_line;
 	/**< Map of the crypto and compression slices */
+	void *pmd[QAT_MAX_SERVICES];
+	/**< link back to pmd private data */
 };
 
 struct qat_gen_hw_data {
@@ -152,26 +147,4 @@ struct qat_pf2vf_dev {
 
 extern struct qat_gen_hw_data qat_gen_config[];
 
-struct qat_pci_device *
-qat_get_qat_dev_from_pci_dev(struct rte_pci_device *pci_dev);
-
-/* declaration needed for weak functions */
-int
-qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused);
-
-int
-qat_asym_dev_create(struct qat_pci_device *qat_pci_dev);
-
-int
-qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
-
-int
-qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
-
-int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused);
-
-int
-qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
-
 #endif /* _QAT_DEVICE_H_ */
diff --git a/drivers/compress/qat/qat_comp_pmd.c b/drivers/compress/qat/qat_comp_pmd.c
index 620afaffb6..85c965f5fd 100644
--- a/drivers/compress/qat/qat_comp_pmd.c
+++ b/drivers/compress/qat/qat_comp_pmd.c
@@ -636,22 +636,24 @@ qat_comp_pmd_dequeue_first_op_burst(void *qp, struct rte_comp_op **ops,
 {
 	uint16_t ret = qat_comp_dequeue_burst(qp, ops, nb_ops);
 	struct qat_qp *tmp_qp = (struct qat_qp *)qp;
+	struct qat_comp_dev_private *dev =
+		tmp_qp->qat_dev->pmd[QAT_SERVICE_COMPRESSION];
 
 	if (ret) {
 		if ((*ops)->debug_status ==
 				(uint64_t)ERR_CODE_QAT_COMP_WRONG_FW) {
-			tmp_qp->qat_dev->comp_dev->compressdev->enqueue_burst =
+			dev->compressdev->enqueue_burst =
 					qat_comp_pmd_enq_deq_dummy_op_burst;
-			tmp_qp->qat_dev->comp_dev->compressdev->dequeue_burst =
+			dev->compressdev->dequeue_burst =
 					qat_comp_pmd_enq_deq_dummy_op_burst;
 
-			tmp_qp->qat_dev->comp_dev->compressdev->dev_ops =
+			dev->compressdev->dev_ops =
 					&compress_qat_dummy_ops;
 			QAT_LOG(ERR,
 					"This QAT hardware doesn't support compression operation");
 
 		} else {
-			tmp_qp->qat_dev->comp_dev->compressdev->dequeue_burst =
+			dev->compressdev->dequeue_burst =
 					qat_comp_dequeue_burst;
 		}
 	}
@@ -669,7 +671,7 @@ static const struct rte_driver compdev_qat_driver = {
 	.alias = qat_comp_drv_name
 };
 
-int
+static int
 qat_comp_dev_create(struct qat_pci_device *qat_pci_dev)
 {
 	struct qat_device_info *qat_dev_instance =
@@ -779,7 +781,7 @@ qat_comp_dev_create(struct qat_pci_device *qat_pci_dev)
 			MAX_QP_THRESHOLD_SIZE :
 			atoi(cmdline);
 	}
-	qat_pci_dev->comp_dev = comp_dev;
+	qat_pci_dev->pmd[QAT_SERVICE_COMPRESSION] = comp_dev;
 
 	QAT_LOG(DEBUG,
 		    "Created QAT COMP device %s as compressdev instance %d",
@@ -787,26 +789,23 @@ qat_comp_dev_create(struct qat_pci_device *qat_pci_dev)
 	return 0;
 }
 
-int
+static int
 qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev)
 {
-	struct qat_comp_dev_private *comp_dev;
+	struct qat_comp_dev_private *dev =
+		qat_pci_dev->pmd[QAT_SERVICE_COMPRESSION];
 
 	if (qat_pci_dev == NULL)
 		return -ENODEV;
 
-	comp_dev = qat_pci_dev->comp_dev;
-	if (comp_dev == NULL)
-		return 0;
-
 	if (rte_eal_process_type() == RTE_PROC_PRIMARY)
-		rte_memzone_free(qat_pci_dev->comp_dev->capa_mz);
+		rte_memzone_free(dev->capa_mz);
 
 	/* clean up any resources used by the device */
-	qat_comp_dev_close(comp_dev->compressdev);
+	qat_comp_dev_close(dev->compressdev);
 
-	rte_compressdev_pmd_destroy(comp_dev->compressdev);
-	qat_pci_dev->comp_dev = NULL;
+	rte_compressdev_pmd_destroy(dev->compressdev);
+	qat_pci_dev->pmd[QAT_SERVICE_COMPRESSION] = NULL;
 
 	return 0;
 }
@@ -814,4 +813,7 @@ qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev)
 RTE_INIT(qat_sym_init)
 {
 	qat_cmdline_defines[QAT_SERVICE_COMPRESSION] = arguments;
+	qat_service[QAT_SERVICE_COMPRESSION].name = "symmetric crypto";
+	qat_service[QAT_SERVICE_COMPRESSION].dev_create = qat_comp_dev_create;
+	qat_service[QAT_SERVICE_COMPRESSION].dev_destroy = qat_comp_dev_destroy;
 }
diff --git a/drivers/compress/qat/qat_comp_pmd.h b/drivers/compress/qat/qat_comp_pmd.h
index 1f5b0facf7..01a8983287 100644
--- a/drivers/compress/qat/qat_comp_pmd.h
+++ b/drivers/compress/qat/qat_comp_pmd.h
@@ -106,13 +106,6 @@ const struct rte_memzone *
 qat_comp_setup_inter_buffers(struct qat_comp_dev_private *comp_dev,
 		uint32_t buff_size);
 
-int
-qat_comp_dev_create(struct qat_pci_device *qat_pci_dev);
-
-int
-qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev);
-
-
 static __rte_always_inline unsigned int
 qat_comp_get_num_im_bufs_required(enum qat_device_gen gen)
 {
diff --git a/drivers/crypto/qat/qat_asym.c b/drivers/crypto/qat/qat_asym.c
index b112b6e66d..7875b31c7e 100644
--- a/drivers/crypto/qat/qat_asym.c
+++ b/drivers/crypto/qat/qat_asym.c
@@ -1505,7 +1505,7 @@ qat_asym_init_op_cookie(void *op_cookie)
 	}
 }
 
-int
+static int
 qat_asym_dev_create(struct qat_pci_device *qat_pci_dev)
 {
 	struct qat_cryptodev_private *internals;
@@ -1614,31 +1614,32 @@ qat_asym_dev_create(struct qat_pci_device *qat_pci_dev)
 		return -1;
 	}
 
-	qat_pci_dev->asym_dev = internals;
+	qat_pci_dev->pmd[QAT_SERVICE_ASYMMETRIC] = internals;
 	internals->service_type = QAT_SERVICE_ASYMMETRIC;
 	QAT_LOG(DEBUG, "Created QAT ASYM device %s as cryptodev instance %d",
 			cryptodev->data->name, internals->dev_id);
 	return 0;
 }
 
-int
+static int
 qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev)
 {
 	struct rte_cryptodev *cryptodev;
+	struct qat_cryptodev_private *dev =
+		qat_pci_dev->pmd[QAT_SERVICE_ASYMMETRIC];
 
 	if (qat_pci_dev == NULL)
 		return -ENODEV;
-	if (qat_pci_dev->asym_dev == NULL)
+	if (dev == NULL)
 		return 0;
 	if (rte_eal_process_type() == RTE_PROC_PRIMARY)
-		rte_memzone_free(qat_pci_dev->asym_dev->capa_mz);
+		rte_memzone_free(dev->capa_mz);
 
 	/* free crypto device */
-	cryptodev = rte_cryptodev_pmd_get_dev(
-			qat_pci_dev->asym_dev->dev_id);
+	cryptodev = rte_cryptodev_pmd_get_dev(dev->dev_id);
 	rte_cryptodev_pmd_destroy(cryptodev);
 	qat_pci_devs[qat_pci_dev->qat_dev_id].asym_rte_dev.name = NULL;
-	qat_pci_dev->asym_dev = NULL;
+	qat_pci_dev->pmd[QAT_SERVICE_ASYMMETRIC] = NULL;
 
 	return 0;
 }
@@ -1651,4 +1652,7 @@ RTE_PMD_REGISTER_CRYPTO_DRIVER(qat_crypto_drv,
 RTE_INIT(qat_asym_init)
 {
 	qat_cmdline_defines[QAT_SERVICE_ASYMMETRIC] = arguments;
+	qat_service[QAT_SERVICE_ASYMMETRIC].name = "asymmetric crypto";
+	qat_service[QAT_SERVICE_ASYMMETRIC].dev_create = qat_asym_dev_create;
+	qat_service[QAT_SERVICE_ASYMMETRIC].dev_destroy = qat_asym_dev_destroy;
 }
diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c
index 35b1f1a90b..83254a03c1 100644
--- a/drivers/crypto/qat/qat_sym.c
+++ b/drivers/crypto/qat/qat_sym.c
@@ -193,7 +193,7 @@ qat_sym_dequeue_burst(void *qp, struct rte_crypto_op **ops,
 				qat_sym_process_response, nb_ops);
 }
 
-int
+static int
 qat_sym_dev_create(struct qat_pci_device *qat_pci_dev)
 {
 	int ret = 0;
@@ -316,7 +316,7 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev)
 		goto error;
 	}
 	internals->service_type = QAT_SERVICE_SYMMETRIC;
-	qat_pci_dev->sym_dev = internals;
+	qat_pci_dev->pmd[QAT_SERVICE_SYMMETRIC] = internals;
 	QAT_LOG(DEBUG, "Created QAT SYM device %s as cryptodev instance %d",
 			cryptodev->data->name, internals->dev_id);
 
@@ -332,25 +332,27 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev)
 	return ret;
 }
 
-int
+static int
 qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev)
 {
 	struct rte_cryptodev *cryptodev;
+	struct qat_cryptodev_private *dev =
+		qat_pci_dev->pmd[QAT_SERVICE_SYMMETRIC];
 
 	if (qat_pci_dev == NULL)
 		return -ENODEV;
-	if (qat_pci_dev->sym_dev == NULL)
+	if (dev == NULL)
 		return 0;
 	if (rte_eal_process_type() == RTE_PROC_PRIMARY)
-		rte_memzone_free(qat_pci_dev->sym_dev->capa_mz);
+		rte_memzone_free(dev->capa_mz);
 
 	/* free crypto device */
-	cryptodev = rte_cryptodev_pmd_get_dev(qat_pci_dev->sym_dev->dev_id);
+	cryptodev = rte_cryptodev_pmd_get_dev(dev->dev_id);
 	rte_free(cryptodev->security_ctx);
 	cryptodev->security_ctx = NULL;
 	rte_cryptodev_pmd_destroy(cryptodev);
 	qat_pci_devs[qat_pci_dev->qat_dev_id].sym_rte_dev.name = NULL;
-	qat_pci_dev->sym_dev = NULL;
+	qat_pci_dev->pmd[QAT_SERVICE_SYMMETRIC] = NULL;
 
 	return 0;
 }
@@ -411,4 +413,7 @@ RTE_PMD_REGISTER_CRYPTO_DRIVER(qat_crypto_drv,
 RTE_INIT(qat_sym_init)
 {
 	qat_cmdline_defines[QAT_SERVICE_SYMMETRIC] = arguments;
+	qat_service[QAT_SERVICE_SYMMETRIC].name = "symmetric crypto";
+	qat_service[QAT_SERVICE_SYMMETRIC].dev_create = qat_sym_dev_create;
+	qat_service[QAT_SERVICE_SYMMETRIC].dev_destroy = qat_sym_dev_destroy;
 }
-- 
2.13.6


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v3 3/3] common/qat: fix incorrectly placed legacy flag
  2024-02-29  9:30     ` [PATCH v3 1/3] common/qat: isolate parser arguments configuration Arkadiusz Kusztal
  2024-02-29  9:30       ` [PATCH v3 2/3] common/qat: decouple pmds from the common code Arkadiusz Kusztal
@ 2024-02-29  9:30       ` Arkadiusz Kusztal
  1 sibling, 0 replies; 12+ messages in thread
From: Arkadiusz Kusztal @ 2024-02-29  9:30 UTC (permalink / raw)
  To: dev; +Cc: gakhil, ciara.power, Arkadiusz Kusztal

This commit fixes a legacy flag, which was placed in a file
that may not be included in a building process.

Fixes: cffb726b7797 ("crypto/qat: enable insecure algorithms")

Signed-off-by: Arkadiusz Kusztal <arkadiuszx.kusztal@intel.com>
---
 drivers/common/qat/qat_device.c | 1 +
 drivers/crypto/qat/qat_sym.c    | 1 -
 2 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/common/qat/qat_device.c b/drivers/common/qat/qat_device.c
index e1cea4d9b2..fcae35c2b5 100644
--- a/drivers/common/qat/qat_device.c
+++ b/drivers/common/qat/qat_device.c
@@ -31,6 +31,7 @@ struct qat_service qat_service[QAT_MAX_SERVICES];
 /* per-process array of device data */
 struct qat_device_info qat_pci_devs[RTE_PMD_QAT_MAX_PCI_DEVICES];
 static int qat_nb_pci_devices;
+int qat_legacy_capa;
 
 /*
  * The set of PCI devices this driver supports
diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c
index 83254a03c1..6d333447c9 100644
--- a/drivers/crypto/qat/qat_sym.c
+++ b/drivers/crypto/qat/qat_sym.c
@@ -19,7 +19,6 @@
 #include "qat_qp.h"
 
 uint8_t qat_sym_driver_id;
-int qat_legacy_capa;
 
 #define SYM_ENQ_THRESHOLD_NAME "qat_sym_enq_threshold"
 #define SYM_CIPHER_CRC_ENABLE_NAME "qat_sym_cipher_crc_enable"
-- 
2.13.6


^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2024-02-29  9:30 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-17 15:42 [PATCH 1/3] common/qat: limit configuration to the primary process Arkadiusz Kusztal
2023-09-17 15:42 ` [PATCH 2/3] common/qat: move command line params to the device struct Arkadiusz Kusztal
2023-09-18 16:01   ` Power, Ciara
2023-09-17 15:42 ` [PATCH 3/3] common/qat: decouple pmds from the common code Arkadiusz Kusztal
2023-10-06 12:50   ` Power, Ciara
2023-10-06 13:02   ` Power, Ciara
2024-02-23  7:48   ` [PATCH v2 1/2] drivers/qat: isolate parser arguments configuration Arkadiusz Kusztal
2024-02-23  7:48     ` [PATCH v2 2/2] common/qat: decouple pmds from the common code Arkadiusz Kusztal
2024-02-29  9:30     ` [PATCH v3 1/3] common/qat: isolate parser arguments configuration Arkadiusz Kusztal
2024-02-29  9:30       ` [PATCH v3 2/3] common/qat: decouple pmds from the common code Arkadiusz Kusztal
2024-02-29  9:30       ` [PATCH v3 3/3] common/qat: fix incorrectly placed legacy flag Arkadiusz Kusztal
2023-09-18 15:07 ` [PATCH 1/3] common/qat: limit configuration to the primary process Power, Ciara

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).