mirror of
https://github.com/szehl/ath9k-hmac.git
synced 2025-03-23 12:35:43 +00:00
52 lines
1.3 KiB
C
52 lines
1.3 KiB
C
|
#ifndef __BACKPORT_LINUX_RCUPDATE_H
|
||
|
#define __BACKPORT_LINUX_RCUPDATE_H
|
||
|
#include_next <linux/rcupdate.h>
|
||
|
|
||
|
/*
|
||
|
* This adds a nested function everywhere kfree_rcu() was called. This
|
||
|
* function frees the memory and is given as a function to call_rcu().
|
||
|
* The rcu callback could happen every time also after the module was
|
||
|
* unloaded and this will cause problems. To address that problem, we
|
||
|
* put rcu_barrier() into each module_exit() in module.h.
|
||
|
*/
|
||
|
#if !defined(kfree_rcu)
|
||
|
#define kfree_rcu(data, rcuhead) do { \
|
||
|
void __kfree_rcu_fn(struct rcu_head *rcu_head) \
|
||
|
{ \
|
||
|
void *___ptr; \
|
||
|
___ptr = container_of(rcu_head, typeof(*(data)), rcuhead);\
|
||
|
kfree(___ptr); \
|
||
|
} \
|
||
|
call_rcu(&(data)->rcuhead, __kfree_rcu_fn); \
|
||
|
} while (0)
|
||
|
#endif
|
||
|
|
||
|
#ifndef RCU_INIT_POINTER
|
||
|
#define RCU_INIT_POINTER(p, v) \
|
||
|
p = (typeof(*v) __force __rcu *)(v)
|
||
|
#endif
|
||
|
|
||
|
#ifndef rcu_dereference_check
|
||
|
#define rcu_dereference_check(p, c) rcu_dereference(p)
|
||
|
#endif
|
||
|
|
||
|
#ifndef rcu_dereference_protected
|
||
|
#define rcu_dereference_protected(p, c) (p)
|
||
|
#endif
|
||
|
#ifndef rcu_access_pointer
|
||
|
#define rcu_access_pointer(p) ACCESS_ONCE(p)
|
||
|
#endif
|
||
|
|
||
|
#ifndef rcu_dereference_raw
|
||
|
#define rcu_dereference_raw(p) rcu_dereference(p)
|
||
|
#endif
|
||
|
|
||
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34)
|
||
|
static inline int rcu_read_lock_held(void)
|
||
|
{
|
||
|
return 1;
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif /* __BACKPORT_LINUX_RCUPDATE_H */
|