freebsd_network: Additions and motifications for FreeBSD 15 iflib drivers.

* Rewrite machine/atomic.h for clarity and correctness, and add
   a few methods.

 * Add two methods to libkern.h.
This commit is contained in:
Augustin Cavalier
2025-12-30 21:55:45 -05:00
parent a564fd3ccd
commit 829caf8905
2 changed files with 25 additions and 25 deletions
@@ -1,5 +1,5 @@
/*
* Copyright 2007, Hugo Santos. All Rights Reserved.
* Copyright 2025, Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _FBSD_COMPAT_MACHINE_ATOMIC_H_
@@ -9,39 +9,37 @@
#include <KernelExport.h>
#define atomic_add_int(ptr, value) \
atomic_add((int32 *)(ptr), value)
#define atomic_subtract_int(ptr, value) \
atomic_add((int32 *)(ptr), -value)
#define atomic_load_int(ptr) \
atomic_get((int32 *)ptr)
#define atomic_set_acq_32(ptr, value) \
atomic_set_int(ptr, value)
#define atomic_set_int(ptr, value) \
atomic_or((int32 *)(ptr), value)
#define atomic_readandclear_int(ptr) \
atomic_set((int32 *)(ptr), 0)
#define atomic_cmpset_int(ptr, old, new) \
(atomic_test_and_set((int32 *)(ptr), new, old) == (int32)old)
#define atomic_add_32 atomic_add_int
#define atomic_subtract_32 atomic_subtract_int
#define atomic_load_acq_32 atomic_load_int
#define atomic_store_rel_int atomic_set_acq_32
#define atomic_cmpset_acq_int atomic_cmpset_int
#define atomic_load_32(ptr) (*(volatile uint32 *)(ptr))
#define atomic_set_32(ptr, val) atomic_set((int32 *)ptr, val)
#define atomic_load_32(ptr) atomic_get((int32*)ptr)
#define atomic_set_32(ptr, val) (void)atomic_set((int32*)ptr, val)
#define atomic_fetchadd_32(ptr, val) atomic_add((int32*)ptr, val)
#define atomic_add_32(ptr, val) (void)atomic_add((int32*)ptr, val)
#define atomic_subtract_32(ptr, val) (void)atomic_add((int32*)ptr, -val)
#define atomic_readandclear_32(ptr) atomic_set((int32*)ptr, 0)
#define atomic_cmpset_32(ptr, old, new) \
(atomic_test_and_set((int32*)ptr, new, old) == old)
#define atomic_load_acq_32 atomic_load_32
#define atomic_set_acq_32 atomic_set_32
#define atomic_load_64(ptr) atomic_get64((int64*)ptr)
#define atomic_add_int atomic_add_32
#define atomic_subtract_int atomic_subtract_32
#define atomic_set_int atomic_set_32
#define atomic_load_int atomic_load_32
#define atomic_cmpset_int atomic_cmpset_32
#define atomic_store_rel_int atomic_set_32
#define atomic_cmpset_acq_int atomic_cmpset_32
#define atomic_readandclear_int atomic_readandclear_32
#define atomic_load_long atomic_load_64
#define mb() memory_full_barrier()
#define wmb() memory_write_barrier_inline()
#define wmb() memory_write_barrier()
#define rmb() memory_read_barrier()
#endif /* _FBSD_COMPAT_MACHINE_ATOMIC_H_ */
@@ -24,6 +24,8 @@ int timingsafe_bcmp(const void *, const void *, size_t);
static __inline int imax(int a, int b) { return (a > b ? a : b); }
static __inline int imin(int a, int b) { return (a < b ? a : b); }
static __inline long lmax(long a, long b) { return (a > b ? a : b); }
static __inline long lmin(long a, long b) { return (a < b ? a : b); }
extern int abs(int a);