rcu: Stopgap fix for synchronize_rcu_expedited() for TREE_PREEMPT_RCU
For the short term, map synchronize_rcu_expedited() to synchronize_rcu() for TREE_PREEMPT_RCU and to synchronize_sched_expedited() for TREE_RCU. Longer term, there needs to be a real expedited grace period for TREE_PREEMPT_RCU, but candidate patches to date are considerably more complex and intrusive. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: laijs@cn.fujitsu.com Cc: dipankar@in.ibm.com Cc: mathieu.desnoyers@polymtl.ca Cc: josh@joshtriplett.org Cc: dvhltc@us.ibm.com Cc: niv@us.ibm.com Cc: peterz@infradead.org Cc: rostedt@goodmis.org Cc: Valdis.Kletnieks@vt.edu Cc: dhowells@redhat.com Cc: npiggin@suse.de Cc: jens.axboe@oracle.com LKML-Reference: <12555405592331-git-send-email-> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Родитель
37c72e56f6
Коммит
019129d595
|
@ -76,11 +76,7 @@ static inline void __rcu_read_unlock_bh(void)
|
||||||
|
|
||||||
extern void call_rcu_sched(struct rcu_head *head,
|
extern void call_rcu_sched(struct rcu_head *head,
|
||||||
void (*func)(struct rcu_head *rcu));
|
void (*func)(struct rcu_head *rcu));
|
||||||
|
extern void synchronize_rcu_expedited(void);
|
||||||
static inline void synchronize_rcu_expedited(void)
|
|
||||||
{
|
|
||||||
synchronize_sched_expedited();
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void synchronize_rcu_bh_expedited(void)
|
static inline void synchronize_rcu_bh_expedited(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -392,6 +392,17 @@ void call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu))
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(call_rcu);
|
EXPORT_SYMBOL_GPL(call_rcu);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Wait for an rcu-preempt grace period. We are supposed to expedite the
|
||||||
|
* grace period, but this is the crude slow compatability hack, so just
|
||||||
|
* invoke synchronize_rcu().
|
||||||
|
*/
|
||||||
|
void synchronize_rcu_expedited(void)
|
||||||
|
{
|
||||||
|
synchronize_rcu();
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(synchronize_rcu_expedited);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check to see if there is any immediate preemptable-RCU-related work
|
* Check to see if there is any immediate preemptable-RCU-related work
|
||||||
* to be done.
|
* to be done.
|
||||||
|
@ -564,6 +575,16 @@ void call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu))
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(call_rcu);
|
EXPORT_SYMBOL_GPL(call_rcu);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Wait for an rcu-preempt grace period, but make it happen quickly.
|
||||||
|
* But because preemptable RCU does not exist, map to rcu-sched.
|
||||||
|
*/
|
||||||
|
void synchronize_rcu_expedited(void)
|
||||||
|
{
|
||||||
|
synchronize_sched_expedited();
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(synchronize_rcu_expedited);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Because preemptable RCU does not exist, it never has any work to do.
|
* Because preemptable RCU does not exist, it never has any work to do.
|
||||||
*/
|
*/
|
||||||
|
|
Загрузка…
Ссылка в новой задаче