irqtrace-option-off-compile-fix
PATCH 1/1 irqtrace-option-off-compile-fix
When CONFIG_TRACE_IRQFLAGS_SUPPORT is turned off, the latest kernel has compile errors. The patch below fix the problems.
Regards,
Tim Chen
include/linux/irqflags.h +13 -14
@@ -41,10 +41,10 @@# define INIT_TRACE_IRQFLAGS #endif -#ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT -#include <asm/irqflags.h> +#ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT +#define local_irq_enable () \ do { trace_hardirqs_on(); raw_local_irq_enable(); } while (0)#define local_irq_disable () \
@@ -62,24 +62,24 @@ raw_local_irq_restore(flags); \ } \ } while (0) +#define safe_halt () \ + do { \ + trace_hardirqs_on(); \ + raw_safe_halt(); \ + } while (0) +#else /* !CONFIG_TRACE_IRQFLAGS_SUPPORT */ /* * The local_irq_*() APIs are equal to the raw_local_irq*() * if !TRACE_IRQFLAGS. */ -# define raw_local_irq_disable () local_irq_disable() -# define raw_local_irq_enable () local_irq_enable() -# define raw_local_irq_save (flags) local_irq_save(flags) -# define raw_local_irq_restore (flags) local_irq_restore(flags) +#define local_irq_disable () raw_local_irq_disable() +#define local_irq_enable () raw_local_irq_enable() +#define local_irq_save (flags) raw_local_irq_save(flags) +#define local_irq_restore (flags) raw_local_irq_restore(flags) +#define safe_halt () raw_safe_halt()#endif /* CONFIG_TRACE_IRQFLAGS_SUPPORT */ -#ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT -#define safe_halt () \ - do { \ - trace_hardirqs_on(); \ - raw_safe_halt(); \ - } while (0) -#define local_save_flags (flags) raw_local_save_flags(flags)#define irqs_disabled () \
@@ -91,6 +91,5 @@ })#define irqs_disabled_flags (flags) raw_irqs_disabled_flags(flags) -#endif /* CONFIG_X86 */ #endif
Quoted 2 lines · Tim Chen
When
CONFIG_TRACE_IRQFLAGS_SUPPORTis turned off, the latest kernel has compile errors. The patch below fix the problems.
Hi,
which architecture did you see this on? (asking because IA64 and PPC compile just fine without this, and for x86 and x86-64 this is not an option you can turn off as user, it's not a user selectable config option but it's a "I have this feature in arch" option)
Greetings,
Arjan van de Ven
I was testing on x86_64 and turned off the option in arch/x86_64/Kconfig.debug.
When the option is turned off, the following functions become undefined:local_irq_disable()local_irq_enable()local_irq_save(flags)local_irq_restore(flags)safe_halt()local_save_flags()irqs_disabled()irqs_disabled_flags(flags)
It seems plausible that some users may want to avoid the overhead of tracing IRQFLAGS by turning the option off.
Regards,
Tim Chen
Quoted 14 lines · Arjan van de Ven
Quoted 2 lines · Tim Chen
When
CONFIG_TRACE_IRQFLAGS_SUPPORTis turned off, the latest kernel has compile errors. The patch below fix the problems.Hi,
which architecture did you see this on? (asking because IA64 and PPC compile just fine without this, and for x86 and x86-64 this is not an option you can turn off as user, it's not a user selectable config option but it's a "I have this feature in arch" option)
Greetings,
Arjan van de Ven
Quoted 13 lines · Tim Chen
I was testing on
x86_64and turned off the option inarch/x86_64/Kconfig.debug.When the option is turned off, the following functions become undefined:
local_irq_disable()local_irq_enable()local_irq_save(flags)local_irq_restore(flags)safe_halt()local_save_flags()irqs_disabled()irqs_disabled_flags(flags)
Quoted 2 lines
It seems plausible that some users may want to avoid the overhead of tracing IRQFLAGS by turning the option off.
eh that is a different config option!
Quoted 14 lines · Arjan van de Ven
Quoted 13 lines · Tim Chen
I was testing on
x86_64and turned off the option inarch/x86_64/Kconfig.debug.When the option is turned off, the following functions become undefined:
local_irq_disable()local_irq_enable()local_irq_save(flags)local_irq_restore(flags)safe_halt()local_save_flags()irqs_disabled()irqs_disabled_flags(flags)
Quoted 4 lines
Quoted 2 lines
It seems plausible that some users may want to avoid the overhead of tracing IRQFLAGS by turning the option off.
eh that is a different config option!
My typo, it is TRACE_IRQFLAGS_SUPPORT in arch/x86_64/Kconfig.debug.
Quoted 15 lines · Tim Chen
Quoted 14 lines · Arjan van de Ven
Quoted 13 lines · Tim Chen
I was testing on
x86_64and turned off the option inarch/x86_64/Kconfig.debug.When the option is turned off, the following functions become undefined:
local_irq_disable()local_irq_enable()local_irq_save(flags)local_irq_restore(flags)safe_halt()local_save_flags()irqs_disabled()irqs_disabled_flags(flags)
Quoted 6 lines
Quoted 4 lines
Quoted 2 lines
It seems plausible that some users may want to avoid the overhead of tracing IRQFLAGS by turning the option off.
eh that is a different config option!
My typo, it is
TRACE_IRQFLAGS_SUPPORTinarch/x86_64/Kconfig.debug.
that should never ever be user setable. That just says if you have support for the api.
The one you want is CONFIG_TRACE_IRQFLAGS .. which is the one that actually turns the tracing on
Quoted 21 lines · Arjan van de Ven
Quoted 20 lines · Tim Chen
Quoted 18 lines · Arjan van de Ven
Quoted 13 lines · Tim Chen
I was testing on
x86_64and turned off the option inarch/x86_64/Kconfig.debug.When the option is turned off, the following functions become undefined:
local_irq_disable()local_irq_enable()local_irq_save(flags)local_irq_restore(flags)safe_halt()local_save_flags()irqs_disabled()irqs_disabled_flags(flags)Quoted 2 lines
It seems plausible that some users may want to avoid the overhead of tracing IRQFLAGS by turning the option off.
eh that is a different config option!
Quoted 9 lines
Quoted 1 line
My typo, it is
TRACE_IRQFLAGS_SUPPORTinarch/x86_64/Kconfig.debug.that should never ever be user setable. That just says if you have support for the api.
The one you want is
CONFIG_TRACE_IRQFLAGS.. which is the one that actually turns the tracing on
I could not turn off CONFIG_TRACE_IRQFLAGS_SUPPORT in .config directly. The command "scripts/kconfig/conf -s arch/x86_64/Kconfig" in Makefile overwrites changes made to CONFIG_TRACE_IRQFLAGS_SUPPORT in .config file. So this is always turned on in .config if the option TRACE_IRQFLAGS_SUPPORT is set in arch/x86_64/Kconfig.debug. I may be missing something. Any suggestions?
Quoted 9 lines · Tim Chen
Quoted 2 lines
The one you want is
CONFIG_TRACE_IRQFLAGS.. which is the one that actually turns the tracing onI could not turn off
CONFIG_TRACE_IRQFLAGS_SUPPORTin .config directly. The command "scripts/kconfig/conf-sarch/x86_64/Kconfig" inMakefileoverwrites changes made toCONFIG_TRACE_IRQFLAGS_SUPPORTin .config file. So this is always turned on in .config if the optionTRACE_IRQFLAGS_SUPPORTis set inarch/x86_64/Kconfig.debug. I may be missing something. Any suggestions?
correct, that flag is always set - it signals towards the core kernel that the architecture in question (x86_64) that it has trace-irqflags support. NOTE: this does not mean that irqflags tracing is turned on - that is another option: CONFIG_TRACE_IRQFLAGS.
unsetting the support flag makes no sense and will likely break the build. There is no overhead from irqflags tracing if it's turned off. (even if the CONFIG_TRACE_IRQFLAGS_SUPPORT option is set)
does this explain things? We could rename the boolean value to CONFIG_TRACE_IRQFLAGS_SUPPORT_AVAILABLE perhaps, to avoid future confusion.
Ingo
Quoted 21 lines · Ingo Molnar
Quoted 9 lines · Tim Chen
Quoted 2 lines
The one you want is
CONFIG_TRACE_IRQFLAGS.. which is the one that actually turns the tracing onI could not turn off
CONFIG_TRACE_IRQFLAGS_SUPPORTin .config directly. The command "scripts/kconfig/conf-sarch/x86_64/Kconfig" inMakefileoverwrites changes made toCONFIG_TRACE_IRQFLAGS_SUPPORTin .config file. So this is always turned on in .config if the optionTRACE_IRQFLAGS_SUPPORTis set inarch/x86_64/Kconfig.debug. I may be missing something. Any suggestions?correct, that flag is always set - it signals towards the core kernel that the architecture in question (
x86_64) that it has trace-irqflags support. NOTE: this does not mean that irqflags tracing is turned on - that is another option:CONFIG_TRACE_IRQFLAGS.unsetting the support flag makes no sense and will likely break the build. There is no overhead from irqflags tracing if it's turned off. (even if the
CONFIG_TRACE_IRQFLAGS_SUPPORToption is set)
Quoted 5 lines
does this explain things? We could rename the boolean value to
CONFIG_TRACE_IRQFLAGS_SUPPORT_AVAILABLEperhaps, to avoid future confusion.Ingo
Thanks for clarifying.