libwd/0102-uadk-some-clean-code-for-wd.patch
Yang Shen ec2f993b84 libwd: backport for uadk from 2.3.31 to 2.3.36
Update some patch for uadk from mainline.
To get more information, please visit the homepage:
https://github.comp/Linaro/uadk

Signed-off-by: Yang Shen <shenyang39@huawei.com>
2022-07-28 15:32:23 +08:00

143 lines
3.7 KiB
Diff

From 60cc5e8ead870777d36eed1242163f678de08226 Mon Sep 17 00:00:00 2001
From: Wenkai Lin <linwenkai6@hisilicon.com>
Date: Sat, 2 Apr 2022 09:47:10 +0800
Subject: [PATCH 112/183] uadk: some clean code for wd
1.remove unused header file
2.simplify code
3.add branch prediction to IO path
Signed-off-by: Wenkai Lin <linwenkai6@hisilicon.com>
---
wd_cipher.c | 1 -
wd_mempool.c | 6 ++----
wd_sched.c | 39 +++++++++++++++++++++++++--------------
3 files changed, 27 insertions(+), 19 deletions(-)
diff --git a/wd_cipher.c b/wd_cipher.c
index 6d286f9..6cf1377 100644
--- a/wd_cipher.c
+++ b/wd_cipher.c
@@ -7,7 +7,6 @@
#include <stdlib.h>
#include <pthread.h>
#include <sched.h>
-#include <numa.h>
#include "wd_cipher.h"
#include "wd_util.h"
#include "include/drv/wd_cipher_drv.h"
diff --git a/wd_mempool.c b/wd_mempool.c
index 7701f63..03df19a 100644
--- a/wd_mempool.c
+++ b/wd_mempool.c
@@ -488,14 +488,12 @@ static int alloc_mem_one_need_multi(struct mempool *mp, struct blkpool *bp)
int mem_combined_num = bp->blk_size / mp->blk_size +
(bp->blk_size % mp->blk_size ? 1 : 0);
int blk_num = bp->depth;
+ int ret = -WD_ENOMEM;
int pos = 0;
- int ret;
wd_spinlock(&mp->lock);
- if (check_mempool_real_size(mp, bp)) {
- ret = -WD_ENOMEM;
+ if (check_mempool_real_size(mp, bp))
goto err_check_size;
- }
while (blk_num > 0) {
ret = alloc_block_from_mempool(mp, bp, pos,
diff --git a/wd_sched.c b/wd_sched.c
index dfd390b..3a19780 100644
--- a/wd_sched.c
+++ b/wd_sched.c
@@ -180,7 +180,7 @@ static int session_poll_policy_rr(struct wd_sched_ctx *ctx, int numa_id,
end = region[SCHED_MODE_ASYNC][i].end;
ret = session_poll_region(ctx, begin, end, expect,
count);
- if (ret)
+ if (unlikely(ret))
return ret;
}
@@ -207,12 +207,12 @@ static int session_sched_poll_policy(handle_t sched_ctx,
__u16 i;
int ret;
- if (!count || !ctx) {
+ if (unlikely(!count || !ctx)) {
WD_ERR("invalid: sched ctx is NULL or count is zero!\n");
return -WD_EINVAL;
}
- if (ctx->numa_num > NUMA_NUM_NODES) {
+ if (unlikely(ctx->numa_num > NUMA_NUM_NODES)) {
WD_ERR("invalid: ctx's numa number is %u!\n", ctx->numa_num);
return -WD_EINVAL;
}
@@ -224,8 +224,7 @@ static int session_sched_poll_policy(handle_t sched_ctx,
* package last time, it is more efficient. In most
* bad situation, poll ends after MAX_POLL_TIMES loop.
*/
- while (loop_time < MAX_POLL_TIMES) {
- loop_time++;
+ while (++loop_time < MAX_POLL_TIMES) {
for (i = 0; i < ctx->numa_num;) {
/* If current numa is not valid, find next. */
if (!sched_info[i].valid) {
@@ -235,7 +234,7 @@ static int session_sched_poll_policy(handle_t sched_ctx,
last_count = *count;
ret = session_poll_policy_rr(ctx, i, expect, count);
- if (ret)
+ if (unlikely(ret))
return ret;
if (expect == *count)
@@ -438,22 +437,34 @@ out:
return;
}
+static int numa_num_check(__u16 numa_num)
+{
+ int max_node;
+
+ max_node = numa_max_node() + 1;
+ if (max_node <= 0) {
+ WD_ERR("invalid: numa max node is %d!\n", max_node);
+ return -WD_EINVAL;
+ }
+
+ if (!numa_num || numa_num > max_node) {
+ WD_ERR("invalid: numa number is %u!\n", numa_num);
+ return -WD_EINVAL;
+ }
+
+ return 0;
+}
+
struct wd_sched *wd_sched_rr_alloc(__u8 sched_type, __u8 type_num,
__u16 numa_num, user_poll_func func)
{
struct wd_sched_info *sched_info;
struct wd_sched_ctx *sched_ctx;
struct wd_sched *sched;
- int i, j, max_node;
-
- max_node = numa_max_node() + 1;
- if (max_node <= 0)
- return NULL;
+ int i, j;
- if (!numa_num || numa_num > max_node) {
- WD_ERR("invalid: numa number is %u!\n", numa_num);
+ if (numa_num_check(numa_num))
return NULL;
- }
if (sched_type >= SCHED_POLICY_BUTT || !type_num) {
WD_ERR("invalid: sched_type is %u or type_num is %u!\n",
--
2.27.0