All of lore.kernel.org
 help / color / mirror / Atom feed
* [Accel-config] [PATCH v2 1/1] accel-config/dsa_test: Add device and wq selection for test
@ 2021-09-24 11:34 Tony Zhu
  0 siblings, 0 replies; only message in thread
From: Tony Zhu @ 2021-09-24 11:34 UTC (permalink / raw)
  To: accel-config

[-- Attachment #1: Type: text/plain, Size: 5198 bytes --]

Add -d to input device like dsa0/wq0.0 which allows the device and wq selection.

Signed-off-by: Tony Zhu <tony.zhu(a)intel.com>
Reviewed-by: Dave Jiang <dave.jiang(a)intel.com>
---
 test/dsa.c      | 63 +++++++++++++++++++++++++++++++++++++++++++++----
 test/dsa.h      |  2 +-
 test/dsa_test.c | 14 +++++++++--
 3 files changed, 71 insertions(+), 8 deletions(-)

diff --git a/test/dsa.c b/test/dsa.c
index ce6f6a1..83e4b4e 100644
--- a/test/dsa.c
+++ b/test/dsa.c
@@ -146,6 +146,55 @@ static struct accfg_wq *dsa_get_wq(struct dsa_context *ctx,
 	return NULL;
 }
 
+static struct accfg_wq *dsa_get_wq_byid(struct dsa_context *ctx,
+		int dev_id, int wq_id)
+{
+	struct accfg_device *device;
+	struct accfg_wq *wq;
+	int rc;
+
+	accfg_device_foreach(ctx->ctx, device) {
+		enum accfg_device_state dstate;
+
+		/* Make sure that the device is enabled */
+		dstate = accfg_device_get_state(device);
+		if (dstate != ACCFG_DEVICE_ENABLED)
+			continue;
+
+		/* Match the device to the id requested */
+		if (accfg_device_get_id(device) != dev_id &&
+				dev_id != -1)
+			continue;
+
+		accfg_wq_foreach(device, wq) {
+			enum accfg_wq_state wstate;
+			enum accfg_wq_type type;
+
+			/* Get a workqueue that's enabled */
+			wstate = accfg_wq_get_state(wq);
+			if (wstate != ACCFG_WQ_ENABLED)
+				continue;
+
+			/* The wq type should be user */
+			type = accfg_wq_get_type(wq);
+			if (type != ACCFG_WQT_USER)
+				continue;
+
+			/* Make sure the wq id is correct */
+			if(wq_id != accfg_wq_get_id(wq))
+				continue;
+
+			rc = dsa_setup_wq(ctx, wq);
+			if (rc < 0)
+				return NULL;
+
+			return wq;
+		}
+	}
+
+	return NULL;
+}
+
 static uint32_t bsr(uint32_t val)
 {
 	uint32_t msb;
@@ -154,7 +203,7 @@ static uint32_t bsr(uint32_t val)
 	return msb - 1;
 }
 
-int dsa_alloc(struct dsa_context *ctx, int shared)
+int dsa_alloc(struct dsa_context *ctx, int shared, int dev_id, int wq_id)
 {
 	struct accfg_device *dev;
 
@@ -162,14 +211,18 @@ int dsa_alloc(struct dsa_context *ctx, int shared)
 	if (ctx->wq_reg)
 		return 0;
 
-	ctx->wq = dsa_get_wq(ctx, -1, shared);
+	if(wq_id != -1){
+		ctx->wq = dsa_get_wq_byid(ctx, dev_id, wq_id);
+	}else{
+		ctx->wq = dsa_get_wq(ctx, dev_id, shared);
+	}
+
 	if (!ctx->wq) {
 		err("No usable wq found\n");
 		return -ENODEV;
 	}
 	dev = accfg_wq_get_device(ctx->wq);
-
-	ctx->dedicated = !shared;
+	ctx->dedicated = accfg_wq_get_mode(ctx->wq);
 	ctx->wq_size = accfg_wq_get_size(ctx->wq);
 	ctx->wq_idx = accfg_wq_get_id(ctx->wq);
 	ctx->bof = accfg_wq_get_block_on_fault(ctx->wq);
@@ -182,7 +235,7 @@ int dsa_alloc(struct dsa_context *ctx, int shared)
 	ctx->max_xfer_bits = bsr(ctx->max_xfer_size);
 
 	info("alloc wq %d shared %d size %d addr %p batch sz %#x xfer sz %#x\n",
-			ctx->wq_idx, shared, ctx->wq_size, ctx->wq_reg,
+			ctx->wq_idx, ctx->dedicated, ctx->wq_size, ctx->wq_reg,
 			ctx->max_batch_size, ctx->max_xfer_size);
 
 	return 0;
diff --git a/test/dsa.h b/test/dsa.h
index 5db0c02..393221b 100644
--- a/test/dsa.h
+++ b/test/dsa.h
@@ -211,7 +211,7 @@ int memcmp_pattern(const void *src, const uint64_t pattern, size_t len);
 int dsa_enqcmd(struct dsa_context *ctx, struct dsa_hw_desc *hw);
 
 struct dsa_context *dsa_init(void);
-int dsa_alloc(struct dsa_context *ctx, int shared);
+int dsa_alloc(struct dsa_context *ctx, int shared, int dev_id, int wq_id);
 int alloc_task(struct dsa_context *ctx);
 struct task *__alloc_task(void);
 int init_task(struct task *tsk, int tflags, int opcode,
diff --git a/test/dsa_test.c b/test/dsa_test.c
index 5f7a7f1..a2bffe8 100644
--- a/test/dsa_test.c
+++ b/test/dsa_test.c
@@ -23,6 +23,7 @@ static void usage(void)
 	"-o <opcode>     ; opcode, same value as in DSA spec\n"
 	"-b <opcode> ; if batch opcode, opcode in the batch\n"
 	"-c <batch_size> ; if batch opcode, number of descriptors for batch\n"
+	"-d              ; wq device such as dsa0/wq0.0\n"
 	"-t <ms timeout> ; ms to wait for descs to complete\n"
 	"-v              ; verbose\n"
 	"-h              ; print this message\n");
@@ -110,8 +111,10 @@ int main(int argc, char *argv[])
 	int tflags = TEST_FLAGS_BOF;
 	int opt;
 	unsigned int bsize = 0;
+	char dev_type[MAX_DEV_LEN];
+	int wq_id = -1, dev_id=-1, dev_wq_id=-1;
 
-	while ((opt = getopt(argc, argv, "w:l:f:o:b:c:t:p:vh")) != -1) {
+	while ((opt = getopt(argc, argv, "w:l:f:o:b:c:d:t:p:vh")) != -1) {
 		switch (opt) {
 		case 'w':
 			wq_type = atoi(optarg);
@@ -131,6 +134,13 @@ int main(int argc, char *argv[])
 		case 'c':
 			bsize = strtoul(optarg, NULL, 0);
 			break;
+		case 'd':
+			if (sscanf(optarg, "%[a-z]%u/%*[a-z]%u.%u", dev_type, \
+						&dev_id, &dev_wq_id, &wq_id) != 4) {
+				err("invalid input device:dev_wq_id:%d ,wq_id:%d\n", dev_wq_id, wq_id);
+				return -EINVAL;
+			}
+			break;
 		case 't':
 			ms_timeout = strtoul(optarg, NULL, 0);
 			break;
@@ -150,7 +160,7 @@ int main(int argc, char *argv[])
 	if (dsa == NULL)
 		return -ENOMEM;
 
-	rc = dsa_alloc(dsa, wq_type);
+	rc = dsa_alloc(dsa, wq_type, dev_id, wq_id);
 	if (rc < 0)
 		return -ENOMEM;
 
-- 
2.17.1

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2021-09-24 11:34 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-24 11:34 [Accel-config] [PATCH v2 1/1] accel-config/dsa_test: Add device and wq selection for test Tony Zhu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.