2012-06-14 11:53:15

by Alexander Block

[permalink] [raw]
Subject: [PATCH] rcu: remove unused __kfree_rcu inline functions

Patch "rcu: Make __kfree_rcu() less dependent on compiler choice"
from Jan Engelhardt intended to replace the inline functions
__kfree_rcu and __is_kfree_rcu_offset with macros.

Unfortunately, the patch only added the new macros but did not
remove the old inline functions. This patch removes them finally.

With the unused functions still being around, module builds with
-O0 still fail.

Signed-off-by: Alexander Block <[email protected]>
---
include/linux/rcupdate.h | 18 ------------------
1 file changed, 18 deletions(-)

diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
index 26d1a47..0ae2c55 100644
--- a/include/linux/rcupdate.h
+++ b/include/linux/rcupdate.h
@@ -906,24 +906,6 @@ static inline notrace void rcu_read_unlock_sched_notrace(void)
#define RCU_INIT_POINTER(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()?
--
1.7.10


2012-06-14 17:30:51

by Paul E. McKenney

[permalink] [raw]
Subject: Re: [PATCH] rcu: remove unused __kfree_rcu inline functions

On Thu, Jun 14, 2012 at 01:53:14PM +0200, Alexander Block wrote:
> Patch "rcu: Make __kfree_rcu() less dependent on compiler choice"
> from Jan Engelhardt intended to replace the inline functions
> __kfree_rcu and __is_kfree_rcu_offset with macros.
>
> Unfortunately, the patch only added the new macros but did not
> remove the old inline functions. This patch removes them finally.
>
> With the unused functions still being around, module builds with
> -O0 still fail.

Good stuff, but someone beat you to it. Please see commmit 3855cf05
(Remove function versions of __kfree_rcu and __is_kfree_rcu_offset) in:

git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git

Thanx, Paul

> Signed-off-by: Alexander Block <[email protected]>
> ---
> include/linux/rcupdate.h | 18 ------------------
> 1 file changed, 18 deletions(-)
>
> diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
> index 26d1a47..0ae2c55 100644
> --- a/include/linux/rcupdate.h
> +++ b/include/linux/rcupdate.h
> @@ -906,24 +906,6 @@ static inline notrace void rcu_read_unlock_sched_notrace(void)
> #define RCU_INIT_POINTER(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()?
> --
> 1.7.10
>