mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
[PATCH] rcu: uninline __rcu_pending()
__rcu_pending() is rather fat and called twice from rcu_pending(). rcu_pending() has multiple callers, and not that small too. This patch uninlines both of them. Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru> Acked-by: Paul E. McKenney <paulmck@us.ibm.com> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
e2688f00dc
commit
677517771b
2 changed files with 31 additions and 30 deletions
|
@ -125,36 +125,7 @@ static inline void rcu_bh_qsctr_inc(int cpu)
|
||||||
rdp->passed_quiesc = 1;
|
rdp->passed_quiesc = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int __rcu_pending(struct rcu_ctrlblk *rcp,
|
extern int rcu_pending(int cpu);
|
||||||
struct rcu_data *rdp)
|
|
||||||
{
|
|
||||||
/* This cpu has pending rcu entries and the grace period
|
|
||||||
* for them has completed.
|
|
||||||
*/
|
|
||||||
if (rdp->curlist && !rcu_batch_before(rcp->completed, rdp->batch))
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
/* This cpu has no pending entries, but there are new entries */
|
|
||||||
if (!rdp->curlist && rdp->nxtlist)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
/* This cpu has finished callbacks to invoke */
|
|
||||||
if (rdp->donelist)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
/* The rcu core waits for a quiescent state from the cpu */
|
|
||||||
if (rdp->quiescbatch != rcp->cur || rdp->qs_pending)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
/* nothing to do */
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int rcu_pending(int cpu)
|
|
||||||
{
|
|
||||||
return __rcu_pending(&rcu_ctrlblk, &per_cpu(rcu_data, cpu)) ||
|
|
||||||
__rcu_pending(&rcu_bh_ctrlblk, &per_cpu(rcu_bh_data, cpu));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rcu_read_lock - mark the beginning of an RCU read-side critical section.
|
* rcu_read_lock - mark the beginning of an RCU read-side critical section.
|
||||||
|
|
|
@ -429,6 +429,36 @@ static void rcu_process_callbacks(unsigned long unused)
|
||||||
&__get_cpu_var(rcu_bh_data));
|
&__get_cpu_var(rcu_bh_data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int __rcu_pending(struct rcu_ctrlblk *rcp, struct rcu_data *rdp)
|
||||||
|
{
|
||||||
|
/* This cpu has pending rcu entries and the grace period
|
||||||
|
* for them has completed.
|
||||||
|
*/
|
||||||
|
if (rdp->curlist && !rcu_batch_before(rcp->completed, rdp->batch))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* This cpu has no pending entries, but there are new entries */
|
||||||
|
if (!rdp->curlist && rdp->nxtlist)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* This cpu has finished callbacks to invoke */
|
||||||
|
if (rdp->donelist)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* The rcu core waits for a quiescent state from the cpu */
|
||||||
|
if (rdp->quiescbatch != rcp->cur || rdp->qs_pending)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* nothing to do */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int rcu_pending(int cpu)
|
||||||
|
{
|
||||||
|
return __rcu_pending(&rcu_ctrlblk, &per_cpu(rcu_data, cpu)) ||
|
||||||
|
__rcu_pending(&rcu_bh_ctrlblk, &per_cpu(rcu_bh_data, cpu));
|
||||||
|
}
|
||||||
|
|
||||||
void rcu_check_callbacks(int cpu, int user)
|
void rcu_check_callbacks(int cpu, int user)
|
||||||
{
|
{
|
||||||
if (user ||
|
if (user ||
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue