On 12/21/2017 05:39 PM, Paul E. McKenney wrote:
I left it out on purpose because the call in tiny is a little different

rcutiny.h:

static inline void kfree_call_rcu(struct rcu_head *head,
A A A  A A A  A A A  A A A  A  void (*func)(struct rcu_head *rcu))
{
A A A  call_rcu(head, func);
}

tree.c:

void kfree_call_rcu(struct rcu_head *head,
A A A  A A A  A A A  void (*func)(struct rcu_head *rcu))
{
A A A  __call_rcu(head, func, rcu_state_p, -1, 1);
}
EXPORT_SYMBOL_GPL(kfree_call_rcu);

If we want the code to be exactly same I can create a lazy version
for tiny as well. However,A  I don not know where to move
kfree_call_rcu() from it's current home in rcutiny.h though. Any
thoughts ?
I might be missing something subtle here, but in case I am not, my
suggestion is to simply rename rcutiny.h's kfree_call_rcu() and otherwise
leave it as is.  If you want to update the type of the second argument,
which got missed back in the day, there is always this:

static inline void call_rcu_lazy(struct rcu_head *head, rcu_callback_t func)
{
	call_rcu(head, func);
}

The reason that Tiny RCU doesn't handle laziness specially is because
Tree RCU's handling of laziness is a big no-op on the single CPU systems
on which Tiny RCU runs.  So Tiny RCU need do nothing special to support
laziness.

							Thanx, Paul

Hi Paul,

I can not just change the name as __kfree_call_rcu macro calls kfree_call_rcu(). I have made tiny version of kfree_call_rcu() call rcu_call_lazy() which calls call_rcu(). As far as the type is concerned, my bad, I cut and posted from an older release. Latest code is already using the typedef.

Shoaib