srcu: Shrink srcu.h by moving docbook and private function
The call_srcu() docbook entry is currently in include/linux/srcu.h, which causes needless processing for each include point. This commit therefore moves this entry to kernel/rcu/srcutree.c, which the compiler reads only once. In addition, the srcu_batches_completed() function is used only within RCU and its torture-test suites. This commit therefore also moves this function's declaration from include/linux/srcutiny.h, include/linux/srcutree.h, and include/linux/srcuclassic.h to kernel/rcu/rcu.h. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
This commit is contained in:
parent
c350c00829
commit
5a0465e17a
6 changed files with 23 additions and 27 deletions
|
@ -65,32 +65,12 @@ int init_srcu_struct(struct srcu_struct *sp);
|
||||||
#elif defined(CONFIG_SRCU)
|
#elif defined(CONFIG_SRCU)
|
||||||
#error "Unknown SRCU implementation specified to kernel configuration"
|
#error "Unknown SRCU implementation specified to kernel configuration"
|
||||||
#else
|
#else
|
||||||
|
|
||||||
/* Dummy definition for things like notifiers. Actual use gets link error. */
|
/* Dummy definition for things like notifiers. Actual use gets link error. */
|
||||||
struct srcu_struct { };
|
struct srcu_struct { };
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
|
||||||
* call_srcu() - Queue a callback for invocation after an SRCU grace period
|
|
||||||
* @sp: srcu_struct in queue the callback
|
|
||||||
* @head: structure to be used for queueing the SRCU callback.
|
|
||||||
* @func: function to be invoked after the SRCU grace period
|
|
||||||
*
|
|
||||||
* The callback function will be invoked some time after a full SRCU
|
|
||||||
* grace period elapses, in other words after all pre-existing SRCU
|
|
||||||
* read-side critical sections have completed. However, the callback
|
|
||||||
* function might well execute concurrently with other SRCU read-side
|
|
||||||
* critical sections that started after call_srcu() was invoked. SRCU
|
|
||||||
* read-side critical sections are delimited by srcu_read_lock() and
|
|
||||||
* srcu_read_unlock(), and may be nested.
|
|
||||||
*
|
|
||||||
* The callback will be invoked from process context, but must nevertheless
|
|
||||||
* be fast and must not block.
|
|
||||||
*/
|
|
||||||
void call_srcu(struct srcu_struct *sp, struct rcu_head *head,
|
void call_srcu(struct srcu_struct *sp, struct rcu_head *head,
|
||||||
void (*func)(struct rcu_head *head));
|
void (*func)(struct rcu_head *head));
|
||||||
|
|
||||||
void cleanup_srcu_struct(struct srcu_struct *sp);
|
void cleanup_srcu_struct(struct srcu_struct *sp);
|
||||||
int __srcu_read_lock(struct srcu_struct *sp) __acquires(sp);
|
int __srcu_read_lock(struct srcu_struct *sp) __acquires(sp);
|
||||||
void __srcu_read_unlock(struct srcu_struct *sp, int idx) __releases(sp);
|
void __srcu_read_unlock(struct srcu_struct *sp, int idx) __releases(sp);
|
||||||
|
|
|
@ -96,6 +96,5 @@ void process_srcu(struct work_struct *work);
|
||||||
|
|
||||||
void synchronize_srcu_expedited(struct srcu_struct *sp);
|
void synchronize_srcu_expedited(struct srcu_struct *sp);
|
||||||
void srcu_barrier(struct srcu_struct *sp);
|
void srcu_barrier(struct srcu_struct *sp);
|
||||||
unsigned long srcu_batches_completed(struct srcu_struct *sp);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -88,9 +88,4 @@ static inline void srcu_barrier(struct srcu_struct *sp)
|
||||||
synchronize_srcu(sp);
|
synchronize_srcu(sp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline unsigned long srcu_batches_completed(struct srcu_struct *sp)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -141,6 +141,5 @@ void process_srcu(struct work_struct *work);
|
||||||
|
|
||||||
void synchronize_srcu_expedited(struct srcu_struct *sp);
|
void synchronize_srcu_expedited(struct srcu_struct *sp);
|
||||||
void srcu_barrier(struct srcu_struct *sp);
|
void srcu_barrier(struct srcu_struct *sp);
|
||||||
unsigned long srcu_batches_completed(struct srcu_struct *sp);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -492,6 +492,11 @@ static inline unsigned long rcu_exp_batches_completed_sched(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline unsigned long srcu_batches_completed(struct srcu_struct *sp)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static inline void rcu_force_quiescent_state(void)
|
static inline void rcu_force_quiescent_state(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -519,6 +524,7 @@ unsigned long rcu_batches_completed_bh(void);
|
||||||
unsigned long rcu_batches_completed_sched(void);
|
unsigned long rcu_batches_completed_sched(void);
|
||||||
unsigned long rcu_exp_batches_completed(void);
|
unsigned long rcu_exp_batches_completed(void);
|
||||||
unsigned long rcu_exp_batches_completed_sched(void);
|
unsigned long rcu_exp_batches_completed_sched(void);
|
||||||
|
unsigned long srcu_batches_completed(struct srcu_struct *sp);
|
||||||
void show_rcu_gp_kthreads(void);
|
void show_rcu_gp_kthreads(void);
|
||||||
void rcu_force_quiescent_state(void);
|
void rcu_force_quiescent_state(void);
|
||||||
void rcu_bh_force_quiescent_state(void);
|
void rcu_bh_force_quiescent_state(void);
|
||||||
|
|
|
@ -854,6 +854,23 @@ void __call_srcu(struct srcu_struct *sp, struct rcu_head *rhp,
|
||||||
srcu_funnel_exp_start(sp, sdp->mynode, s);
|
srcu_funnel_exp_start(sp, sdp->mynode, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* call_srcu() - Queue a callback for invocation after an SRCU grace period
|
||||||
|
* @sp: srcu_struct in queue the callback
|
||||||
|
* @head: structure to be used for queueing the SRCU callback.
|
||||||
|
* @func: function to be invoked after the SRCU grace period
|
||||||
|
*
|
||||||
|
* The callback function will be invoked some time after a full SRCU
|
||||||
|
* grace period elapses, in other words after all pre-existing SRCU
|
||||||
|
* read-side critical sections have completed. However, the callback
|
||||||
|
* function might well execute concurrently with other SRCU read-side
|
||||||
|
* critical sections that started after call_srcu() was invoked. SRCU
|
||||||
|
* read-side critical sections are delimited by srcu_read_lock() and
|
||||||
|
* srcu_read_unlock(), and may be nested.
|
||||||
|
*
|
||||||
|
* The callback will be invoked from process context, but must nevertheless
|
||||||
|
* be fast and must not block.
|
||||||
|
*/
|
||||||
void call_srcu(struct srcu_struct *sp, struct rcu_head *rhp,
|
void call_srcu(struct srcu_struct *sp, struct rcu_head *rhp,
|
||||||
rcu_callback_t func)
|
rcu_callback_t func)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue