powerpc/rtas: Provide mechanism by which the rtas_event_scan can be disabled/re-enabled by other portions of the powerpc code. Among other things, this simplifies the usage of locking mechanisms for shared kernel resources.
Signed-off-by: Michael Bringmann <m...@linux.vnet.ibm.com> --- arch/powerpc/include/asm/rtas.h | 4 ++++ arch/powerpc/kernel/rtasd.c | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/arch/powerpc/include/asm/rtas.h b/arch/powerpc/include/asm/rtas.h index 4f601c7..4ab605a 100644 --- a/arch/powerpc/include/asm/rtas.h +++ b/arch/powerpc/include/asm/rtas.h @@ -386,8 +386,12 @@ extern int early_init_dt_scan_rtas(unsigned long node, #ifdef CONFIG_PPC_RTAS_DAEMON extern void rtas_cancel_event_scan(void); +extern void rtas_event_scan_disable(void); +extern void rtas_event_scan_enable(void); #else static inline void rtas_cancel_event_scan(void) { } +static inline void rtas_event_scan_disable(void) { } +static inline void rtas_event_scan_enable(void) { } #endif /* Error types logged. */ diff --git a/arch/powerpc/kernel/rtasd.c b/arch/powerpc/kernel/rtasd.c index 44d66c33d..af69e44 100644 --- a/arch/powerpc/kernel/rtasd.c +++ b/arch/powerpc/kernel/rtasd.c @@ -455,11 +455,25 @@ static void do_event_scan(void) */ static unsigned long event_scan_delay = 1*HZ; static int first_pass = 1; +static int res_enable = 1; + +void rtas_event_scan_disable(void) +{ + res_enable = 0; +} + +void rtas_event_scan_enable(void) +{ + res_enable = 1; +} static void rtas_event_scan(struct work_struct *w) { unsigned int cpu; + if (!res_enable) + return; + do_event_scan(); get_online_cpus();