Add deprecated_for_modules
Subsystems (2)
RFC PATCH 1/4 Add deprecated_for_modules
Add a deprecated_for_modules macro that allows symbols to be deprecated only when used by modules, as suggested by Andrew Morton some months back.
Signed-off-by <[email protected]>
---
include/linux/module.h +6 -0
@@ -195,6 +195,12 @@ void *__symbol_get_gpl(const char *symbo#define EXPORT_SYMBOL_GPL (sym) \ __EXPORT_SYMBOL(sym, "_gpl") +#ifdef MODULE +#define deprecated_for_modules __deprecated +#else +#define deprecated_for_modules +#endif +#endif struct module_ref
include/linux/module.h void *__symbol_get_gpl(const char *symbo · line 203
Quoted 9 lines · Paul E. McKenney
Add a
deprecated_for_modulesmacro that allows symbols to beinclude/linux/module.h +6
-0+#ifdef MODULE +#define deprecated_for_modules __deprecated +#else +#define deprecated_for_modules +#endif +
how about also starting it with __ like __deprecated is ?
Quoted 4 lines · Arjan van de Ven
Quoted 1 line · Paul E. McKenney
Add a
deprecated_for_modulesmacro that allows symbols to be
Quoted 8 lines
Review
Quoted 6 lines
(quoted diff) +6
-0+#ifdef MODULE +#define deprecated_for_modules __deprecated +#else +#define deprecated_for_modules +#endif +how about also starting it with __ like
__deprecatedis ?
Good point, how about the following? This changes patch 2/4 as well, have included both below.
Thanx, Paul
Signed-off-by <[email protected]>
include/linux/module.h +6 -0
@@ -195,6 +195,12 @@ void *__symbol_get_gpl(const char *symbo#define EXPORT_SYMBOL_GPL (sym) \ __EXPORT_SYMBOL(sym, "_gpl") +#ifdef MODULE +#define __deprecated_for_modules __deprecated +#else +#define __deprecated_for_modules +#endif +#endif struct module_ref
include/linux/rcupdate.h +21 -3
@@ -41,6 +41,7 @@#include <linux/percpu.h> #include <linux/cpumask.h> #include <linux/seqlock.h> +#include <linux/module.h> /** * struct rcu_head - callback structure for use with RCU
@@ -157,9 +158,9 @@ static inline int rcu_pending(int cpu)/** * rcu_read_lock - mark the beginning of an RCU read-side critical section. * -* When synchronize_kernel() is invoked on one CPU while other CPUs +* When synchronize_rcu() is invoked on one CPU while other CPUs * are within RCU read-side critical sections, then the -* synchronize_kernel() is guaranteed to block until after all the other +* synchronize_rcu() is guaranteed to block until after all the other * CPUs exit their critical sections. Similarly, if call_rcu() is invoked * on one CPU while other CPUs are within RCU read-side critical * sections, invocation of the corresponding RCU callback is deferred
@@ -256,6 +257,21 @@ static inline int rcu_pending(int cpu) (p) = (v); \ }) +/** +* synchronize_sched - block until all CPUs have exited any non-preemptive +* kernel code sequences. +* +* This means that all preempt_disable code sequences, including NMI and +* hardware-interrupt handlers, in progress on entry will have completed +* before this primitive returns. However, this does not guarantee that +* softirq handlers will have completed, since in some kernels +* +* This primitive provides the guarantees made by the (deprecated) +* synchronize_kernel() API. In contrast, synchronize_rcu() only +* guarantees that rcu_read_lock() sections will have completed. +*/ +#define synchronize_sched () synchronize_rcu() +extern void rcu_init (void );extern void rcu_check_callbacks (int cpu,int user);extern void rcu_restart_cpu (int cpu);
@@ -265,7 +281,9 @@ extern void FASTCALL(call_rcu(struct rcu void (*func)(struct rcu_head *head)));extern void FASTCALL (call_rcu_bh (struct rcu_head *head,void (*func)(struct rcu_head *head))); -extern void synchronize_kernel (void ); +extern __deprecated_for_modules void synchronize_kernel(void); +extern void synchronize_rcu (void ); +void synchronize_idle (void );#endif /* __KERNEL__ */ #endif /* __LINUX_RCUPDATE_H */
kernel/rcupdate.c +14 -2
@@ -444,15 +444,18 @@ static void wakeme_after_rcu(struct rcu_ }/** -* synchronize_kernel - wait until a grace period has elapsed. +* synchronize_rcu - wait until a grace period has elapsed. * * Control will return to the caller some time after a full grace * period has elapsed, in other words after all currently executing RCU * read-side critical sections have completed. RCU read-side critical * sections are delimited by rcu_read_lock() and rcu_read_unlock(), * and may be nested. +* +* If your read-side code is not protected by rcu_read_lock(), do -not- +* use synchronize_rcu(). */ -void synchronize_kernel (void ) +void synchronize_rcu (void ) {struct rcu_synchronize rcu;
@@ -464,7 +467,16 @@ void synchronize_kernel(void)wait_for_completion (&rcu.completion); } +/* +* Deprecated, use synchronize_rcu() or synchronize_sched() instead. +*/ +void synchronize_kernel (void ) +{ +synchronize_rcu (); +} +module_param (maxbatch, int,0 );EXPORT_SYMBOL (call_rcu);EXPORT_SYMBOL (call_rcu_bh); +EXPORT_SYMBOL_GPL (synchronize_rcu);EXPORT_SYMBOL (synchronize_kernel);