From: Andrew Dinh Date: Tue, 4 Mar 2025 15:32:56 +0000 (+0700) Subject: Fix RCU TODOs X-Git-Tag: openssl-3.3.4~138 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bc2380a20ee70f709552525ab6360fa75a712746;p=thirdparty%2Fopenssl.git Fix RCU TODOs - Update allocate_new_qp_group to take unsigned int - Move id_ctr in rcu_lock_st for better stack alignment Reviewed-by: Tomas Mraz Reviewed-by: Bernd Edlinger Reviewed-by: Neil Horman (Merged from https://github.com/openssl/openssl/pull/26972) (cherry picked from commit 7097d2e00ea9f0119a5e42f13a51487fb1e67aa3) --- diff --git a/crypto/threads_pthread.c b/crypto/threads_pthread.c index a06756926e7..9e3b83e17d3 100644 --- a/crypto/threads_pthread.c +++ b/crypto/threads_pthread.c @@ -195,12 +195,12 @@ struct rcu_lock_st { /* The context we are being created against */ OSSL_LIB_CTX *ctx; - /* rcu generation counter for in-order retirement */ - uint32_t id_ctr; - /* Array of quiescent points for synchronization */ struct rcu_qp *qp_group; + /* rcu generation counter for in-order retirement */ + uint32_t id_ctr; + /* Number of elements in qp_group array */ uint32_t group_count; @@ -400,7 +400,7 @@ static void retire_qp(CRYPTO_RCU_LOCK *lock, struct rcu_qp *qp) } static struct rcu_qp *allocate_new_qp_group(CRYPTO_RCU_LOCK *lock, - int count) + uint32_t count) { struct rcu_qp *new = OPENSSL_zalloc(sizeof(*new) * count); diff --git a/crypto/threads_win.c b/crypto/threads_win.c index 993411a55e4..0e411efc8aa 100644 --- a/crypto/threads_win.c +++ b/crypto/threads_win.c @@ -79,8 +79,14 @@ struct rcu_thr_data { struct rcu_lock_st { struct rcu_cb_item *cb_items; OSSL_LIB_CTX *ctx; - uint32_t id_ctr; + + /* Array of quiescent points for synchronization */ struct rcu_qp *qp_group; + + /* rcu generation counter for in-order retirement */ + uint32_t id_ctr; + + /* Number of elements in qp_group array */ uint32_t group_count; uint32_t next_to_retire; volatile long int reader_idx; @@ -94,7 +100,7 @@ struct rcu_lock_st { }; static struct rcu_qp *allocate_new_qp_group(struct rcu_lock_st *lock, - int count) + uint32_t count) { struct rcu_qp *new = OPENSSL_zalloc(sizeof(*new) * count);