[Accel-config] [PATCH v4 2/7] accel-config/test: restructure init task to break data init into sub-functions
Tony Zhu <tony.zhu at intel.com> Mon, 21 Feb 2022 09:34:18 +0800
| Newsgroups | dev.linux.lists.accel-config |
|---|---|
| Message-ID | <[email protected]> |
Break data into sub-functions according opcodes. The init function will
become large and large after we add all opcode support and difficult to
track issues.
Signed-off-by: Tony Zhu <tony.zhu(a)intel.com>
---
test/dsa.c | 164 ++++++++++++++++++++++++++++++++++++++++-------------
test/dsa.h | 7 +++
2 files changed, 133 insertions(+), 38 deletions(-)
diff --git a/test/dsa.c b/test/dsa.c
index 1608b08..8498d01 100644
--- a/test/dsa.c
+++ b/test/dsa.c
@@ -280,11 +280,9 @@ struct task *__alloc_task(void)
return tsk;
}
-/* this function is re-used by batch task */
-int init_task(struct task *tsk, int tflags, int opcode,
- unsigned long xfer_size)
+int init_memcpy(struct task *tsk, int tflags, int opcode, unsigned long xfer_size)
{
- dbg("initilizing single task %#lx\n", tsk);
+ unsigned long force_align = ADDR_ALIGNMENT;
tsk->pattern = 0x0123456789abcdef;
tsk->pattern2 = 0xfedcba9876543210;
@@ -292,47 +290,137 @@ int init_task(struct task *tsk, int tflags, int opcode,
tsk->test_flags = tflags;
tsk->xfer_size = xfer_size;
- /* allocate memory: src1*/
- switch (opcode) {
- case DSA_OPCODE_MEMMOVE: /* intentionally empty */
- case DSA_OPCODE_COMPARE: /* intentionally empty */
- case DSA_OPCODE_COMPVAL: /* intentionally empty */
- case DSA_OPCODE_DUALCAST:
- tsk->src1 = malloc(xfer_size);
- if (!tsk->src1)
- return -ENOMEM;
- memset_pattern(tsk->src1, tsk->pattern, xfer_size);
- }
+ tsk->src1 = aligned_alloc(force_align, xfer_size);
+ if (!tsk->src1)
+ return -ENOMEM;
+ memset_pattern(tsk->src1, tsk->pattern, xfer_size);
+
+ tsk->dst1 = aligned_alloc(force_align, xfer_size);
+ if (!tsk->dst1)
+ return -ENOMEM;
+ memset_pattern(tsk->dst1, tsk->pattern2, xfer_size);
+
+ return DSA_STATUS_OK;
+}
+
+int init_memfill(struct task *tsk, int tflags, int opcode, unsigned long xfer_size)
+{
+ unsigned long force_align = ADDR_ALIGNMENT;
+
+ tsk->pattern = 0x0123456789abcdef;
+ tsk->pattern2 = 0xfedcba9876543210;
+ tsk->opcode = opcode;
+ tsk->test_flags = tflags;
+ tsk->xfer_size = xfer_size;
+
+ tsk->dst1 = aligned_alloc(force_align, xfer_size);
+ if (!tsk->dst1)
+ return -ENOMEM;
+ memset(tsk->dst1, tsk->pattern2, xfer_size);
+
+ return DSA_STATUS_OK;
+}
+
+int init_compare(struct task *tsk, int tflags, int opcode, unsigned long xfer_size)
+{
+ unsigned long force_align = ADDR_ALIGNMENT;
+
+ tsk->pattern = 0x0123456789abcdef;
+ tsk->opcode = opcode;
+ tsk->test_flags = tflags;
+ tsk->xfer_size = xfer_size;
+
+ tsk->src1 = aligned_alloc(force_align, xfer_size);
+ if (!tsk->src1)
+ return -ENOMEM;
+ memset_pattern(tsk->src1, tsk->pattern, xfer_size);
+
+ tsk->src2 = aligned_alloc(force_align, xfer_size);
+ if (!tsk->src2)
+ return -ENOMEM;
+ memset_pattern(tsk->src2, tsk->pattern, xfer_size);
+
+ return DSA_STATUS_OK;
+}
+
+int init_compval(struct task *tsk, int tflags, int opcode, unsigned long xfer_size)
+{
+ unsigned long force_align = ADDR_ALIGNMENT;
+
+ tsk->pattern = 0x0123456789abcdef;
+ tsk->opcode = opcode;
+ tsk->test_flags = tflags;
+ tsk->xfer_size = xfer_size;
+
+ tsk->src1 = aligned_alloc(force_align, xfer_size);
+ if (!tsk->src1)
+ return -ENOMEM;
+ memset_pattern(tsk->src1, tsk->pattern, xfer_size);
+
+ return DSA_STATUS_OK;
+}
+
+int init_dualcast(struct task *tsk, int tflags, int opcode, unsigned long xfer_size)
+{
+ unsigned long force_align = ADDR_ALIGNMENT;
+
+ tsk->pattern = 0x0123456789abcdef;
+ tsk->pattern2 = 0xfedcba9876543210;
+ tsk->opcode = opcode;
+ tsk->test_flags = tflags;
+ tsk->xfer_size = xfer_size;
+
+ tsk->src1 = aligned_alloc(force_align, xfer_size);
+ if (!tsk->src1)
+ return -ENOMEM;
+ memset_pattern(tsk->src1, tsk->pattern, xfer_size);
+
+ tsk->dst1 = aligned_alloc(1 << 12, xfer_size);
+ if (!tsk->dst1)
+ return -ENOMEM;
+ memset_pattern(tsk->dst1, tsk->pattern2, xfer_size);
+
+ tsk->dst2 = aligned_alloc(1 << 12, xfer_size);
+ if (!tsk->dst2)
+ return -ENOMEM;
+ memset_pattern(tsk->dst2, tsk->pattern2, xfer_size);
+
+ return DSA_STATUS_OK;
+}
+
+/* this function is re-used by batch task */
+int init_task(struct task *tsk, int tflags, int opcode,
+ unsigned long xfer_size)
+{
+ int rc = 0;
+
+ dbg("initilizing task %#lx\n", tsk);
- /* allocate memory: src2*/
switch (opcode) {
+ case DSA_OPCODE_MEMMOVE:
+ rc = init_memcpy(tsk, tflags, opcode, xfer_size);
+ break;
+
+ case DSA_OPCODE_MEMFILL:
+ rc = init_memfill(tsk, tflags, opcode, xfer_size);
+ break;
+
case DSA_OPCODE_COMPARE:
- tsk->src2 = malloc(xfer_size);
- if (!tsk->src2)
- return -ENOMEM;
- memset_pattern(tsk->src2, tsk->pattern, xfer_size);
- }
+ rc = init_compare(tsk, tflags, opcode, xfer_size);
+ break;
+
+ case DSA_OPCODE_COMPVAL:
+ rc = init_compval(tsk, tflags, opcode, xfer_size);
+ break;
- /* allocate memory: dst1*/
- switch (opcode) {
- case DSA_OPCODE_MEMMOVE: /* intentionally empty */
- case DSA_OPCODE_MEMFILL: /* intentionally empty */
case DSA_OPCODE_DUALCAST:
- /* DUALCAST: dst1/dst2 lower 12 bits must be same */
- tsk->dst1 = aligned_alloc(1 << 12, xfer_size);
- if (!tsk->dst1)
- return -ENOMEM;
- memset_pattern(tsk->dst1, tsk->pattern2, xfer_size);
+ rc = init_dualcast(tsk, tflags, opcode, xfer_size);
+ break;
}
- /* allocate memory: dst2*/
- switch (opcode) {
- case DSA_OPCODE_DUALCAST:
- /* DUALCAST: dst1/dst2 lower 12 bits must be same */
- tsk->dst2 = aligned_alloc(1 << 12, xfer_size);
- if (!tsk->dst2)
- return -ENOMEM;
- memset_pattern(tsk->dst2, tsk->pattern2, xfer_size);
+ if (rc != DSA_STATUS_OK) {
+ err("init: opcode %d data failed\n", opcode);
+ return rc;
}
dbg("Mem allocated: s1 %#lx s2 %#lx d1 %#lx d2 %#lx\n",
diff --git a/test/dsa.h b/test/dsa.h
index 249e8cd..9a4016b 100644
--- a/test/dsa.h
+++ b/test/dsa.h
@@ -41,6 +41,8 @@
#define DSA_COMP_STAT_CODE_MASK 0x3F
#define DSA_COMP_STAT_RW_MASK 0x80
+#define ADDR_ALIGNMENT 32
+
/* helper macro to get lower 6 bits (ret code) from completion status */
#define stat_val(status) ((status) & DSA_COMP_STAT_CODE_MASK)
@@ -228,6 +230,11 @@ struct dsa_context *dsa_init(void);
int dsa_alloc(struct dsa_context *ctx, int shared, int dev_id, int wq_id);
int alloc_multiple_tasks(struct dsa_context *ctx, int num_itr);
struct task *__alloc_task(void);
+int init_memcpy(struct task *tsk, int tflags, int opcode, unsigned long xfer_size);
+int init_memfill(struct task *tsk, int tflags, int opcode, unsigned long xfer_size);
+int init_compare(struct task *tsk, int tflags, int opcode, unsigned long xfer_size);
+int init_compval(struct task *tsk, int tflags, int opcode, unsigned long xfer_size);
+int init_dualcast(struct task *tsk, int tflags, int opcode, unsigned long xfer_size);
int init_task(struct task *tsk, int tflags, int opcode,
unsigned long xfer_size);
--
2.27.0