Loading drivers/cpuidle/cpuidle.c +12 −0 Original line number Diff line number Diff line Loading @@ -252,6 +252,18 @@ noinstr int cpuidle_enter_state(struct cpuidle_device *dev, instrumentation_begin(); } /* * NOTE!! * * For cpuidle_state::enter() methods that do *NOT* set * CPUIDLE_FLAG_RCU_IDLE RCU will be disabled here and these functions * must be marked either noinstr or __cpuidle. * * For cpuidle_state::enter() methods that *DO* set * CPUIDLE_FLAG_RCU_IDLE this isn't required, but they must mark the * function calling ct_cpuidle_enter() as noinstr/__cpuidle and all * functions called within the RCU-idle region. */ entered_state = target_state->enter(dev, drv, index); if (WARN_ONCE(!irqs_disabled(), "%ps leaked IRQ state", target_state->enter)) Loading include/linux/compiler_types.h +10 −0 Original line number Diff line number Diff line Loading @@ -239,6 +239,16 @@ struct ftrace_likely_data { #define noinstr __noinstr_section(".noinstr.text") /* * The __cpuidle section is used twofold: * * 1) the original use -- identifying if a CPU is 'stuck' in idle state based * on it's instruction pointer. See cpu_in_idle(). * * 2) supressing instrumentation around where cpuidle disables RCU; where the * function isn't strictly required for #1, this is interchangeable with * noinstr. */ #define __cpuidle __noinstr_section(".cpuidle.text") #endif /* __KERNEL__ */ Loading Loading
drivers/cpuidle/cpuidle.c +12 −0 Original line number Diff line number Diff line Loading @@ -252,6 +252,18 @@ noinstr int cpuidle_enter_state(struct cpuidle_device *dev, instrumentation_begin(); } /* * NOTE!! * * For cpuidle_state::enter() methods that do *NOT* set * CPUIDLE_FLAG_RCU_IDLE RCU will be disabled here and these functions * must be marked either noinstr or __cpuidle. * * For cpuidle_state::enter() methods that *DO* set * CPUIDLE_FLAG_RCU_IDLE this isn't required, but they must mark the * function calling ct_cpuidle_enter() as noinstr/__cpuidle and all * functions called within the RCU-idle region. */ entered_state = target_state->enter(dev, drv, index); if (WARN_ONCE(!irqs_disabled(), "%ps leaked IRQ state", target_state->enter)) Loading
include/linux/compiler_types.h +10 −0 Original line number Diff line number Diff line Loading @@ -239,6 +239,16 @@ struct ftrace_likely_data { #define noinstr __noinstr_section(".noinstr.text") /* * The __cpuidle section is used twofold: * * 1) the original use -- identifying if a CPU is 'stuck' in idle state based * on it's instruction pointer. See cpu_in_idle(). * * 2) supressing instrumentation around where cpuidle disables RCU; where the * function isn't strictly required for #1, this is interchangeable with * noinstr. */ #define __cpuidle __noinstr_section(".cpuidle.text") #endif /* __KERNEL__ */ Loading