diff --git a/0001-support-clang-compile.patch b/0001-support-clang-compile.patch new file mode 100644 index 0000000..c083990 --- /dev/null +++ b/0001-support-clang-compile.patch @@ -0,0 +1,223 @@ +From 566d703c6739cf3a854cfd6321d1b367aacf5ff4 Mon Sep 17 00:00:00 2001 +From: 15859157387 <977713017@qq.com> +Date: Tue, 24 Oct 2023 14:50:37 +0800 +Subject: [PATCH] support clang compile + +--- + test/wd_mempool_test.c | 4 +--- + v1/wd_rsa.c | 18 ++++++++++-------- + wd_mempool.c | 7 +------ + wd_rsa.c | 22 ++++++++++++---------- + 4 files changed, 24 insertions(+), 27 deletions(-) + +diff --git a/test/wd_mempool_test.c b/test/wd_mempool_test.c +index ad04636..7d18752 100644 +--- a/test/wd_mempool_test.c ++++ b/test/wd_mempool_test.c +@@ -644,7 +644,7 @@ static void *sva_sec_cipher_async(void *arg) + int cnt = g_times; + handle_t h_sess; + int ret; +- int j, i; ++ int j; + + setup->alg = WD_CIPHER_AES; + setup->mode = WD_CIPHER_CBC; +@@ -658,7 +658,6 @@ static void *sva_sec_cipher_async(void *arg) + SEC_TST_PRT("test sec cipher set key is failed!\n"); + goto out;; + } +- i = cnt; + /* run task */ + do { + try_do_again: +@@ -666,7 +665,6 @@ try_do_again: + req->src = pdata->bd_pool->bds[j].src; + req->dst = pdata->bd_pool->bds[j].dst; + ret = wd_do_cipher_async(h_sess, req); +- i--; + if (ret == -EBUSY) { // busy + usleep(100); + goto try_do_again; +diff --git a/v1/wd_rsa.c b/v1/wd_rsa.c +index 61de3cc..49249b4 100644 +--- a/v1/wd_rsa.c ++++ b/v1/wd_rsa.c +@@ -105,8 +105,10 @@ struct wcrypto_rsa_prikey2 { + }; + + struct wcrypto_rsa_prikey { +- struct wcrypto_rsa_prikey1 pkey1; +- struct wcrypto_rsa_prikey2 pkey2; ++ union { ++ struct wcrypto_rsa_prikey1 pkey1; ++ struct wcrypto_rsa_prikey2 pkey2; ++ } pkey; + }; + + /* RSA CRT private key parameter types */ +@@ -444,7 +446,7 @@ static int create_ctx_key(struct wcrypto_rsa_ctx_setup *setup, + WD_ERR("alloc prikey2 fail!\n"); + return -WD_ENOMEM; + } +- pkey2 = &ctx->prikey->pkey2; ++ pkey2 = &ctx->prikey->pkey.pkey2; + memset(ctx->prikey, 0, len); + init_pkey2(pkey2, ctx->key_size); + } else { +@@ -459,7 +461,7 @@ static int create_ctx_key(struct wcrypto_rsa_ctx_setup *setup, + WD_ERR("alloc prikey1 fail!\n"); + return -WD_ENOMEM; + } +- pkey1 = &ctx->prikey->pkey1; ++ pkey1 = &ctx->prikey->pkey.pkey1; + memset(ctx->prikey, 0, len); + init_pkey1(pkey1, ctx->key_size); + } +@@ -713,7 +715,7 @@ int wcrypto_set_rsa_prikey_params(void *ctx, struct wd_dtb *d, struct wd_dtb *n) + WD_ERR("ctx err in set rsa private key1!\n"); + return -WD_EINVAL; + } +- pkey1 = &c->prikey->pkey1; ++ pkey1 = &c->prikey->pkey.pkey1; + if (d) { + if (d->dsize > pkey1->key_size || !d->data) { + WD_ERR("d err in set rsa private key1!\n"); +@@ -747,7 +749,7 @@ void wcrypto_get_rsa_prikey_params(struct wcrypto_rsa_prikey *pvk, struct wd_dtb + return; + } + +- pkey1 = &pvk->pkey1; ++ pkey1 = &pvk->pkey.pkey1; + + if (d) + *d = &pkey1->d; +@@ -819,7 +821,7 @@ int wcrypto_set_rsa_crt_prikey_params(void *ctx, struct wd_dtb *dq, + return ret; + } + +- pkey2 = &c->prikey->pkey2; ++ pkey2 = &c->prikey->pkey.pkey2; + ret = rsa_prikey2_param_set(pkey2, dq, WD_CRT_PRIKEY_DQ); + if (ret) { + WD_ERR("dq err in set rsa private key2!\n"); +@@ -865,7 +867,7 @@ void wcrypto_get_rsa_crt_prikey_params(struct wcrypto_rsa_prikey *pvk, + return; + } + +- pkey2 = &pvk->pkey2; ++ pkey2 = &pvk->pkey.pkey2; + + if (dq) + *dq = &pkey2->dq; +diff --git a/wd_mempool.c b/wd_mempool.c +index cb8c80b..864ba13 100644 +--- a/wd_mempool.c ++++ b/wd_mempool.c +@@ -71,7 +71,7 @@ static inline int wd_atomic_test_add(struct wd_ref *ref, int a, int u) + c = __atomic_load_n(&ref->ref, __ATOMIC_RELAXED); + if (c == u) + break; +- } while (! __atomic_compare_exchange_n(&ref->ref, &c, c + a, true, ++ } while (! __atomic_compare_exchange_n(&ref->ref, (__u32 *)&c, c + a, true, + __ATOMIC_RELAXED, __ATOMIC_RELAXED)); + + return c; +@@ -299,11 +299,6 @@ static int test_bit(struct bitmap *bm, unsigned int nr) + return !(*p & mask); + } + +-inline static size_t wd_get_page_size(void) +-{ +- return sysconf(_SC_PAGESIZE); +-} +- + void *wd_block_alloc(handle_t blkpool) + { + struct blkpool *bp = (struct blkpool*)blkpool; +diff --git a/wd_rsa.c b/wd_rsa.c +index 4bd1d30..8301d57 100644 +--- a/wd_rsa.c ++++ b/wd_rsa.c +@@ -48,8 +48,10 @@ struct wd_rsa_prikey2 { + }; + + struct wd_rsa_prikey { +- struct wd_rsa_prikey1 pkey1; +- struct wd_rsa_prikey2 pkey2; ++ union { ++ struct wd_rsa_prikey1 pkey1; ++ struct wd_rsa_prikey2 pkey2; ++ } pkey; + }; + + /* RSA private key parameter types */ +@@ -844,7 +846,7 @@ static int create_sess_key(struct wd_rsa_sess_setup *setup, + WD_ERR("failed to alloc sess prikey2!\n"); + return -WD_ENOMEM; + } +- pkey2 = &sess->prikey->pkey2; ++ pkey2 = &sess->prikey->pkey.pkey2; + memset(sess->prikey, 0, len); + init_pkey2(pkey2, sess->key_size); + } else { +@@ -855,7 +857,7 @@ static int create_sess_key(struct wd_rsa_sess_setup *setup, + WD_ERR("failed to alloc sess prikey1!\n"); + return -WD_ENOMEM; + } +- pkey1 = &sess->prikey->pkey1; ++ pkey1 = &sess->prikey->pkey.pkey1; + memset(sess->prikey, 0, len); + init_pkey1(pkey1, sess->key_size); + } +@@ -886,9 +888,9 @@ static void del_sess_key(struct wd_rsa_sess *sess) + } + + if (sess->setup.is_crt) +- wd_memset_zero(prk->pkey2.data, CRT_PARAMS_SZ(sess->key_size)); ++ wd_memset_zero(prk->pkey.pkey2.data, CRT_PARAMS_SZ(sess->key_size)); + else +- wd_memset_zero(prk->pkey1.data, GEN_PARAMS_SZ(sess->key_size)); ++ wd_memset_zero(prk->pkey.pkey1.data, GEN_PARAMS_SZ(sess->key_size)); + free(sess->prikey); + free(sess->pubkey); + } +@@ -1041,7 +1043,7 @@ int wd_rsa_set_prikey_params(handle_t sess, struct wd_dtb *d, struct wd_dtb *n) + WD_ERR("invalid: sess err in set rsa private key1!\n"); + return -WD_EINVAL; + } +- pkey1 = &c->prikey->pkey1; ++ pkey1 = &c->prikey->pkey.pkey1; + if (d) { + if (!d->dsize || !d->data || d->dsize > pkey1->key_size) { + WD_ERR("invalid: d err in set rsa private key1!\n"); +@@ -1076,7 +1078,7 @@ void wd_rsa_get_prikey_params(struct wd_rsa_prikey *pvk, struct wd_dtb **d, + return; + } + +- pkey1 = &pvk->pkey1; ++ pkey1 = &pvk->pkey.pkey1; + + if (d) + *d = &pkey1->d; +@@ -1148,7 +1150,7 @@ int wd_rsa_set_crt_prikey_params(handle_t sess, struct wd_dtb *dq, + return ret; + } + +- pkey2 = &c->prikey->pkey2; ++ pkey2 = &c->prikey->pkey.pkey2; + ret = rsa_prikey2_param_set(pkey2, dq, WD_CRT_PRIKEY_DQ); + if (ret) { + WD_ERR("failed to set dq for rsa private key2!\n"); +@@ -1194,7 +1196,7 @@ void wd_rsa_get_crt_prikey_params(struct wd_rsa_prikey *pvk, + return; + } + +- pkey2 = &pvk->pkey2; ++ pkey2 = &pvk->pkey.pkey2; + + if (dq) + *dq = &pkey2->dq; +-- +2.27.0 + diff --git a/warpdrive.spec b/warpdrive.spec index 4a46254..f19ad40 100644 --- a/warpdrive.spec +++ b/warpdrive.spec @@ -1,9 +1,12 @@ Name: libwd Summary: User Space Accelerator Development Kit Version: 2.5.0 -Release: 3 +Release: 4 License: Apache-2.0 Source: %{name}-%{version}.tar.gz + +Patch01: 0001-support-clang-compile.patch + Vendor: Huawei Corporation ExclusiveOS: linux URL: https://support.huawei.com @@ -187,6 +190,9 @@ fi /sbin/ldconfig %changelog +* Mon Sep 18 2023 renyi <977713017@qq.com> 2.5.0-4 +- support clang compile + * Mon Sep 4 2023 JiangShui Yang 2.5.0-3 - libwd: Deleting rpath information from the dynamic library