reverting RCU changes back (#47)

Co-authored-by: neelimap <neelimaps@neominds.in>
Reviewed-on: http://13.234.246.121:3000/Neominds/ossl35vx69/pulls/47
Co-authored-by: Neelima P S <neelima.ps@neominds.in>
Co-committed-by: Neelima P S <neelima.ps@neominds.in>
This commit is contained in:
2026-07-30 20:15:19 +05:30
committed by neelimap
co-authored by neelimap
parent 84c6fbc79b
commit baa4eb0263
@@ -1,3 +1,6 @@
#ifndef RCU_VX69_H
#define RCU_VX69_H
#include <semLib.h>
#include <vxAtomicLib.h>
#include "../crypto/rcu_internal.h"
@@ -6,8 +9,6 @@ typedef struct crypto_rwlock_st {
SEM_ID sem;
}CRYPTO_RWLOCK_VX;
static CRYPTO_RWLOCK_VX *local_rcu_rwlock;
static int is_rwlock_init = 0;
/*---------- Atomic routines ----------*/
int CRYPTO_atomic_load_int(int *val, int *ret, CRYPTO_RWLOCK *lock)
@@ -47,30 +48,14 @@ CRYPTO_RCU_LOCK *ossl_rcu_lock_new(int num_writers, OSSL_LIB_CTX *ctx)
if (!lock)
return NULL;
lock->writer_lock = semBCreate (SEM_Q_PRIORITY |
SEM_DELETE_SAFE | SEM_INVERSION_SAFE,
SEM_EMPTY);
lock->writer_lock = semBCreate (SEM_Q_PRIORITY | SEM_DELETE_SAFE, SEM_EMPTY);
lock->active_readers = 0;
if (!is_rwlock_init)
{
local_rcu_rwlock->sem = semBCreate (SEM_Q_PRIORITY |
SEM_DELETE_SAFE | SEM_INVERSION_SAFE,
SEM_EMPTY);
is_rwlock_init = 1;
}
return lock;
}
void ossl_rcu_lock_free(CRYPTO_RCU_LOCK *lock)
{
if (is_rwlock_init)
{
semDelete (local_rcu_rwlock->sem);
is_rwlock_init = 0;
}
if (!lock) return;
semDelete (lock->writer_lock);
@@ -105,17 +90,13 @@ void *ossl_rcu_uptr_deref(void **p)
void ossl_rcu_assign_uptr(void **p, void **v)
{
void *ret, *val;
ret = p;
val = v;
/* publish new pointer immediately */
CRYPTO_atomic_load_int (val, ret, local_rcu_rwlock);
*p = *v;
}
void ossl_synchronize_rcu(CRYPTO_RCU_LOCK *lock)
{
int retVal=0;
struct rcu_cb_item *cb_items, *tmpcb;
semBTake (lock->writer_lock, WAIT_FOREVER);
@@ -124,10 +105,8 @@ void ossl_synchronize_rcu(CRYPTO_RCU_LOCK *lock)
semBGive (lock->writer_lock);
/* Wait until all readers finish */
do {
CRYPTO_atomic_load_int(&(lock->active_readers), &retVal, local_rcu_rwlock);
taskDelay(0);
}while (retVal > 0);
while (lock->active_readers > 0)
taskDelay(1);
/* handle any callbacks that we have */
while (cb_items != NULL) {
@@ -156,3 +135,4 @@ int ossl_rcu_call(CRYPTO_RCU_LOCK *lock, rcu_cb_fn cb, void *data)
return 1;
}
#endif