]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Fix RCU TODOs
authorAndrew Dinh <andrewd@openssl.org>
Tue, 4 Mar 2025 15:32:56 +0000 (22:32 +0700)
committerNeil Horman <nhorman@openssl.org>
Wed, 12 Mar 2025 16:07:44 +0000 (12:07 -0400)
- Update allocate_new_qp_group to take unsigned int
- Move id_ctr in rcu_lock_st for better stack alignment

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
Reviewed-by: Neil Horman <nhorman@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/26972)

crypto/threads_pthread.c
crypto/threads_win.c

index 6b8fc258dc7d1e079ef365acb68c244e25ec1585..c0598c5a616d5d2226b4085fbbb4d243dacae393 100644 (file)
@@ -217,13 +217,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;
-
-    /* TODO: can be moved before id_ctr for better alignment */
     /* 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;
 
@@ -422,10 +421,8 @@ static void retire_qp(CRYPTO_RCU_LOCK *lock, struct rcu_qp *qp)
     pthread_mutex_unlock(&lock->alloc_lock);
 }
 
-/* TODO: count should be unsigned, e.g uint32_t */
-/* a negative value could result in unexpected behaviour */
 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);
index 084125b4aad9c68968680d06768996913e03f051..72f54f118c9af6d4b49a852dc394ffa6183680d4 100644 (file)
@@ -83,13 +83,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;
-
-    /* TODO: can be moved before id_ctr for better alignment */
     /* 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;
 
@@ -124,10 +123,8 @@ struct rcu_lock_st {
     CRYPTO_RWLOCK *rw_lock;
 };
 
-/* TODO: count should be unsigned, e.g uint32_t */
-/* a negative value could result in unexpected behaviour */
 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);