[PATCH v2 1/2] lib: sbi: Fix __atomic_op_bit_ord and comments
Anup Patel
anup at brainfault.org
Fri Dec 8 02:59:50 PST 2023
On Wed, Nov 15, 2023 at 8:31 PM Xiang W <wxjstz at 126.com> wrote:
>
> The original code returns the value of the word before modification.
> When modifying the upper 32 bits under RV64, the value returned via
> int return will have no meaning. Corrected to return the value of the
> bit. And modify the function description.
>
> Signed-off-by: Xiang W <wxjstz at 126.com>
Applied this patch to the riscv/opensbi repo.
Thanks,
Anup
> ---
> include/sbi/riscv_atomic.h | 8 ++++----
> lib/sbi/riscv_atomic.c | 2 +-
> 2 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/include/sbi/riscv_atomic.h b/include/sbi/riscv_atomic.h
> index 3972e0b..c5aa05e 100644
> --- a/include/sbi/riscv_atomic.h
> +++ b/include/sbi/riscv_atomic.h
> @@ -39,14 +39,14 @@ unsigned int atomic_raw_xchg_uint(volatile unsigned int *ptr,
> unsigned long atomic_raw_xchg_ulong(volatile unsigned long *ptr,
> unsigned long newval);
> /**
> - * Set a bit in an atomic variable and return the new value.
> + * Set a bit in an atomic variable and return the value of bit before modify.
> * @nr : Bit to set.
> * @atom: atomic variable to modify
> */
> int atomic_set_bit(int nr, atomic_t *atom);
>
> /**
> - * Clear a bit in an atomic variable and return the new value.
> + * Clear a bit in an atomic variable and return the value of bit before modify.
> * @nr : Bit to set.
> * @atom: atomic variable to modify
> */
> @@ -54,14 +54,14 @@ int atomic_set_bit(int nr, atomic_t *atom);
> int atomic_clear_bit(int nr, atomic_t *atom);
>
> /**
> - * Set a bit in any address and return the new value .
> + * Set a bit in any address and return the value of bit before modify.
> * @nr : Bit to set.
> * @addr: Address to modify
> */
> int atomic_raw_set_bit(int nr, volatile unsigned long *addr);
>
> /**
> - * Clear a bit in any address and return the new value .
> + * Clear a bit in any address and return the value of bit before modify.
> * @nr : Bit to set.
> * @addr: Address to modify
> */
> diff --git a/lib/sbi/riscv_atomic.c b/lib/sbi/riscv_atomic.c
> index 528686f..477f709 100644
> --- a/lib/sbi/riscv_atomic.c
> +++ b/lib/sbi/riscv_atomic.c
> @@ -222,7 +222,7 @@ unsigned long atomic_raw_xchg_ulong(volatile unsigned long *ptr,
> : "=r"(__res), "+A"(addr[BIT_WORD(nr)]) \
> : "r"(mod(__mask)) \
> : "memory"); \
> - __res; \
> + __res & mask ? 1 : 0; \
> })
>
> #define __atomic_op_bit(op, mod, nr, addr) \
> --
> 2.42.0
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
More information about the opensbi
mailing list