|
@@ -916,24 +916,6 @@ static inline notrace void rcu_read_unlock_sched_notrace(void)
|
|
|
#define RCU_POINTER_INITIALIZER(p, v) \
|
|
|
.p = (typeof(*v) __force __rcu *)(v)
|
|
|
|
|
|
-static __always_inline bool __is_kfree_rcu_offset(unsigned long offset)
|
|
|
-{
|
|
|
- return offset < 4096;
|
|
|
-}
|
|
|
-
|
|
|
-static __always_inline
|
|
|
-void __kfree_rcu(struct rcu_head *head, unsigned long offset)
|
|
|
-{
|
|
|
- typedef void (*rcu_callback)(struct rcu_head *);
|
|
|
-
|
|
|
- BUILD_BUG_ON(!__builtin_constant_p(offset));
|
|
|
-
|
|
|
- /* See the kfree_rcu() header comment. */
|
|
|
- BUILD_BUG_ON(!__is_kfree_rcu_offset(offset));
|
|
|
-
|
|
|
- kfree_call_rcu(head, (rcu_callback)offset);
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* Does the specified offset indicate that the corresponding rcu_head
|
|
|
* structure can be handled by kfree_rcu()?
|