From 93cd3362042017395334cf4a9b8d45eb0ca41c11 Mon Sep 17 00:00:00 2001 From: Tomasz Bursztyka Date: Fri, 10 Jul 2020 14:17:51 +0200 Subject: [PATCH] arch: Apply dynamic IRQ API change Switching to constant parameter. Fixes #27399 Signed-off-by: Tomasz Bursztyka --- arch/arc/core/irq_manage.c | 6 +++--- arch/arm/core/aarch32/irq_manage.c | 6 +++--- arch/arm/core/aarch64/irq_manage.c | 6 +++--- arch/common/sw_isr_common.c | 7 ++++--- arch/nios2/core/irq_manage.c | 6 +++--- arch/posix/core/irq.c | 4 ++-- arch/riscv/core/irq_manage.c | 6 +++--- arch/x86/core/ia32/irq_manage.c | 8 ++++---- arch/x86/core/intel64/irq.c | 3 ++- arch/xtensa/core/irq_manage.c | 8 ++++---- arch/xtensa/core/xtensa-asm2.c | 2 +- include/arch/arc/v2/irq.h | 2 +- include/arch/arm/aarch32/irq.h | 2 +- include/arch/arm/aarch64/irq.h | 2 +- include/arch/nios2/arch.h | 2 +- include/arch/riscv/arch.h | 2 +- include/arch/x86/intel64/arch.h | 5 ++++- include/arch/xtensa/arch.h | 2 +- soc/xtensa/intel_apl_adsp/soc.c | 4 ++-- 19 files changed, 44 insertions(+), 39 deletions(-) diff --git a/arch/arc/core/irq_manage.c b/arch/arc/core/irq_manage.c index 37d974278d2..073d049e8f3 100644 --- a/arch/arc/core/irq_manage.c +++ b/arch/arc/core/irq_manage.c @@ -165,7 +165,7 @@ void z_irq_priority_set(unsigned int irq, unsigned int prio, uint32_t flags) * @return N/A */ -void z_irq_spurious(void *unused) +void z_irq_spurious(const void *unused) { ARG_UNUSED(unused); z_fatal_error(K_ERR_SPURIOUS_IRQ, NULL); @@ -173,8 +173,8 @@ void z_irq_spurious(void *unused) #ifdef CONFIG_DYNAMIC_INTERRUPTS int arch_irq_connect_dynamic(unsigned int irq, unsigned int priority, - void (*routine)(void *parameter), void *parameter, - uint32_t flags) + void (*routine)(const void *parameter), + const void *parameter, uint32_t flags) { z_isr_install(irq, routine, parameter); z_irq_priority_set(irq, priority, flags); diff --git a/arch/arm/core/aarch32/irq_manage.c b/arch/arm/core/aarch32/irq_manage.c index fae6ae6c71e..aafed3168b1 100644 --- a/arch/arm/core/aarch32/irq_manage.c +++ b/arch/arm/core/aarch32/irq_manage.c @@ -154,7 +154,7 @@ void z_arm_fatal_error(unsigned int reason, const z_arch_esf_t *esf); * * @return N/A */ -void z_irq_spurious(void *unused) +void z_irq_spurious(const void *unused) { ARG_UNUSED(unused); @@ -257,8 +257,8 @@ int irq_target_state_is_secure(unsigned int irq) #ifdef CONFIG_DYNAMIC_INTERRUPTS int arch_irq_connect_dynamic(unsigned int irq, unsigned int priority, - void (*routine)(void *parameter), void *parameter, - uint32_t flags) + void (*routine)(const void *parameter), + const void *parameter, uint32_t flags) { z_isr_install(irq, routine, parameter); z_arm_irq_priority_set(irq, priority, flags); diff --git a/arch/arm/core/aarch64/irq_manage.c b/arch/arm/core/aarch64/irq_manage.c index b529f19fd59..a2cdd27eaf3 100644 --- a/arch/arm/core/aarch64/irq_manage.c +++ b/arch/arm/core/aarch64/irq_manage.c @@ -55,8 +55,8 @@ void z_arm64_irq_priority_set(unsigned int irq, unsigned int prio, uint32_t flag #ifdef CONFIG_DYNAMIC_INTERRUPTS int arch_irq_connect_dynamic(unsigned int irq, unsigned int priority, - void (*routine)(void *parameter), void *parameter, - uint32_t flags) + void (*routine)(const void *parameter), + const void *parameter, uint32_t flags) { z_isr_install(irq, routine, parameter); z_arm64_irq_priority_set(irq, priority, flags); @@ -64,7 +64,7 @@ int arch_irq_connect_dynamic(unsigned int irq, unsigned int priority, } #endif -void z_irq_spurious(void *unused) +void z_irq_spurious(const void *unused) { ARG_UNUSED(unused); diff --git a/arch/common/sw_isr_common.c b/arch/common/sw_isr_common.c index 030d057c9c9..b0b68f9c9b6 100644 --- a/arch/common/sw_isr_common.c +++ b/arch/common/sw_isr_common.c @@ -70,7 +70,8 @@ unsigned int get_parent_offset(unsigned int parent_irq, #endif /* CONFIG_MULTI_LEVEL_INTERRUPTS */ -void z_isr_install(unsigned int irq, void (*routine)(void *), void *param) +void z_isr_install(unsigned int irq, void (*routine)(const void *), + const void *param) { unsigned int table_idx; @@ -127,8 +128,8 @@ void z_isr_install(unsigned int irq, void (*routine)(void *), void *param) */ int __weak arch_irq_connect_dynamic(unsigned int irq, unsigned int priority, - void (*routine)(void *), - void *parameter, + void (*routine)(const void *), + const void *parameter, uint32_t flags) { ARG_UNUSED(flags); diff --git a/arch/nios2/core/irq_manage.c b/arch/nios2/core/irq_manage.c index 5bc9e283ac9..cdb5ddb862a 100644 --- a/arch/nios2/core/irq_manage.c +++ b/arch/nios2/core/irq_manage.c @@ -22,7 +22,7 @@ #include LOG_MODULE_DECLARE(os); -FUNC_NORETURN void z_irq_spurious(void *unused) +FUNC_NORETURN void z_irq_spurious(const void *unused) { ARG_UNUSED(unused); LOG_ERR("Spurious interrupt detected! ipending: %x", @@ -121,8 +121,8 @@ void _enter_irq(uint32_t ipending) #ifdef CONFIG_DYNAMIC_INTERRUPTS int arch_irq_connect_dynamic(unsigned int irq, unsigned int priority, - void (*routine)(void *parameter), void *parameter, - uint32_t flags) + void (*routine)(const void *parameter), + const void *parameter, uint32_t flags) { ARG_UNUSED(flags); ARG_UNUSED(priority); diff --git a/arch/posix/core/irq.c b/arch/posix/core/irq.c index a7d783a3369..8722757cff8 100644 --- a/arch/posix/core/irq.c +++ b/arch/posix/core/irq.c @@ -46,8 +46,8 @@ int arch_irq_is_enabled(unsigned int irq) * @return The vector assigned to this interrupt */ int arch_irq_connect_dynamic(unsigned int irq, unsigned int priority, - void (*routine)(void *parameter), - void *parameter, uint32_t flags) + void (*routine)(const void *parameter), + const void *parameter, uint32_t flags) { posix_isr_declare(irq, (int)flags, routine, parameter); posix_irq_priority_set(irq, priority, flags); diff --git a/arch/riscv/core/irq_manage.c b/arch/riscv/core/irq_manage.c index 247e25cfc0c..c2798e3e3d1 100644 --- a/arch/riscv/core/irq_manage.c +++ b/arch/riscv/core/irq_manage.c @@ -9,7 +9,7 @@ #include LOG_MODULE_DECLARE(os); -FUNC_NORETURN void z_irq_spurious(void *unused) +FUNC_NORETURN void z_irq_spurious(const void *unused) { ulong_t mcause; @@ -31,8 +31,8 @@ FUNC_NORETURN void z_irq_spurious(void *unused) #ifdef CONFIG_DYNAMIC_INTERRUPTS int arch_irq_connect_dynamic(unsigned int irq, unsigned int priority, - void (*routine)(void *parameter), void *parameter, - uint32_t flags) + void (*routine)(const void *parameter), + const void *parameter, uint32_t flags) { ARG_UNUSED(flags); diff --git a/arch/x86/core/ia32/irq_manage.c b/arch/x86/core/ia32/irq_manage.c index e474fdd553a..8fc4035abeb 100644 --- a/arch/x86/core/ia32/irq_manage.c +++ b/arch/x86/core/ia32/irq_manage.c @@ -56,9 +56,9 @@ extern unsigned int z_interrupt_vectors_allocated[]; struct dyn_irq_info { /** IRQ handler */ - void (*handler)(void *param); + void (*handler)(const void *param); /** Parameter to pass to the handler */ - void *param; + const void *param; }; /* @@ -197,8 +197,8 @@ static void idt_vector_install(int vector, void *irq_handler) } int arch_irq_connect_dynamic(unsigned int irq, unsigned int priority, - void (*routine)(void *parameter), void *parameter, - uint32_t flags) + void (*routine)(const void *parameter), + const void *parameter, uint32_t flags) { int vector, stub_idx, key; diff --git a/arch/x86/core/intel64/irq.c b/arch/x86/core/intel64/irq.c index e6297a0f439..b362ad01d98 100644 --- a/arch/x86/core/intel64/irq.c +++ b/arch/x86/core/intel64/irq.c @@ -83,7 +83,8 @@ static int allocate_vector(unsigned int priority) */ int arch_irq_connect_dynamic(unsigned int irq, unsigned int priority, - void (*func)(void *arg), void *arg, uint32_t flags) + void (*func)(const void *arg), + const void *arg, uint32_t flags) { uint32_t key; int vector; diff --git a/arch/xtensa/core/irq_manage.c b/arch/xtensa/core/irq_manage.c index de7ecaa6c56..b38d8d95aab 100644 --- a/arch/xtensa/core/irq_manage.c +++ b/arch/xtensa/core/irq_manage.c @@ -40,8 +40,8 @@ void z_irq_priority_set(unsigned int irq, unsigned int prio, uint32_t flags) #ifdef CONFIG_DYNAMIC_INTERRUPTS #ifndef CONFIG_MULTI_LEVEL_INTERRUPTS int z_arch_irq_connect_dynamic(unsigned int irq, unsigned int priority, - void (*routine)(void *parameter), - void *parameter, uint32_t flags) + void (*routine)(const void *parameter), + const void *parameter, uint32_t flags) { ARG_UNUSED(flags); ARG_UNUSED(priority); @@ -51,8 +51,8 @@ int z_arch_irq_connect_dynamic(unsigned int irq, unsigned int priority, } #else /* !CONFIG_MULTI_LEVEL_INTERRUPTS */ int z_arch_irq_connect_dynamic(unsigned int irq, unsigned int priority, - void (*routine)(void *parameter), - void *parameter, uint32_t flags) + void (*routine)(const void *parameter), + const void *parameter, uint32_t flags) { return z_soc_irq_connect_dynamic(irq, priority, routine, parameter, flags); diff --git a/arch/xtensa/core/xtensa-asm2.c b/arch/xtensa/core/xtensa-asm2.c index 0805e267ac0..64f1b2ca5a8 100644 --- a/arch/xtensa/core/xtensa-asm2.c +++ b/arch/xtensa/core/xtensa-asm2.c @@ -64,7 +64,7 @@ void arch_new_thread(struct k_thread *thread, k_thread_stack_t *stack, p1, p2, p3); } -void z_irq_spurious(void *arg) +void z_irq_spurious(const void *arg) { int irqs, ie; diff --git a/include/arch/arc/v2/irq.h b/include/arch/arc/v2/irq.h index 4e0f727f455..c810cd9be52 100644 --- a/include/arch/arc/v2/irq.h +++ b/include/arch/arc/v2/irq.h @@ -44,7 +44,7 @@ extern void _irq_exit(void); extern void z_irq_priority_set(unsigned int irq, unsigned int prio, uint32_t flags); extern void _isr_wrapper(void); -extern void z_irq_spurious(void *unused); +extern void z_irq_spurious(const void *unused); /* Z_ISR_DECLARE will populate the .intList section with the interrupt's * parameters, which will then be used by gen_irq_tables.py to create diff --git a/include/arch/arm/aarch32/irq.h b/include/arch/arm/aarch32/irq.h index 187aaef9211..04eab77fc1e 100644 --- a/include/arch/arm/aarch32/irq.h +++ b/include/arch/arm/aarch32/irq.h @@ -221,7 +221,7 @@ extern void z_arm_irq_direct_dynamic_dispatch_no_reschedule(void); #endif /* CONFIG_DYNAMIC_DIRECT_INTERRUPTS */ /* Spurious interrupt handler. Throws an error if called */ -extern void z_irq_spurious(void *unused); +extern void z_irq_spurious(const void *unused); #ifdef CONFIG_GEN_SW_ISR_TABLE /* Architecture-specific common entry point for interrupts from the vector diff --git a/include/arch/arm/aarch64/irq.h b/include/arch/arm/aarch64/irq.h index e2da9969d0a..ebc3f806a78 100644 --- a/include/arch/arm/aarch64/irq.h +++ b/include/arch/arm/aarch64/irq.h @@ -95,7 +95,7 @@ extern void z_arm64_interrupt_init(void); } /* Spurious interrupt handler. Throws an error if called */ -extern void z_irq_spurious(void *unused); +extern void z_irq_spurious(const void *unused); #ifdef CONFIG_GEN_SW_ISR_TABLE /* Architecture-specific common entry point for interrupts from the vector diff --git a/include/arch/nios2/arch.h b/include/arch/nios2/arch.h index 13473007ef6..aabf81a2959 100644 --- a/include/arch/nios2/arch.h +++ b/include/arch/nios2/arch.h @@ -44,7 +44,7 @@ extern "C" { Z_ISR_DECLARE(irq_p, 0, isr_p, isr_param_p); \ } -extern void z_irq_spurious(void *unused); +extern void z_irq_spurious(const void *unused); static ALWAYS_INLINE unsigned int arch_irq_lock(void) { diff --git a/include/arch/riscv/arch.h b/include/arch/riscv/arch.h index c2880dcdf29..750e9fe1b19 100644 --- a/include/arch/riscv/arch.h +++ b/include/arch/riscv/arch.h @@ -97,7 +97,7 @@ void arch_irq_enable(unsigned int irq); void arch_irq_disable(unsigned int irq); int arch_irq_is_enabled(unsigned int irq); void arch_irq_priority_set(unsigned int irq, unsigned int prio); -void z_irq_spurious(void *unused); +void z_irq_spurious(const void *unused); #if defined(CONFIG_RISCV_HAS_PLIC) #define ARCH_IRQ_CONNECT(irq_p, priority_p, isr_p, isr_param_p, flags_p) \ diff --git a/include/arch/x86/intel64/arch.h b/include/arch/x86/intel64/arch.h index 9a61de7da2d..ce46a6c2e11 100644 --- a/include/arch/x86/intel64/arch.h +++ b/include/arch/x86/intel64/arch.h @@ -97,6 +97,9 @@ struct x86_ssf { * All Intel64 interrupts are dynamically connected. */ -#define ARCH_IRQ_CONNECT arch_irq_connect_dynamic +#define ARCH_IRQ_CONNECT(irq_p, priority_p, isr_p, isr_param_p, flags_p) \ + arch_irq_connect_dynamic(irq_p, priority_p, \ + (void (*)(const void *))isr_p, \ + isr_param_p, flags_p) #endif /* ZEPHYR_INCLUDE_ARCH_X86_INTEL64_ARCH_H_ */ diff --git a/include/arch/xtensa/arch.h b/include/arch/xtensa/arch.h index 93f5f50100b..553c8abe05d 100644 --- a/include/arch/xtensa/arch.h +++ b/include/arch/xtensa/arch.h @@ -48,7 +48,7 @@ extern void z_irq_priority_set(uint32_t irq, uint32_t prio, uint32_t flags); } /* Spurious interrupt handler. Throws an error if called */ -extern void z_irq_spurious(void *unused); +extern void z_irq_spurious(const void *unused); #define XTENSA_ERR_NORET diff --git a/soc/xtensa/intel_apl_adsp/soc.c b/soc/xtensa/intel_apl_adsp/soc.c index 7f3c7a555f8..08cf1246dcf 100644 --- a/soc/xtensa/intel_apl_adsp/soc.c +++ b/soc/xtensa/intel_apl_adsp/soc.c @@ -140,8 +140,8 @@ out: #ifdef CONFIG_DYNAMIC_INTERRUPTS int z_soc_irq_connect_dynamic(unsigned int irq, unsigned int priority, - void (*routine)(void *parameter), - void *parameter, uint32_t flags) + void (*routine)(const void *parameter), + const void *parameter, uint32_t flags) { uint32_t table_idx; uint32_t cavs_irq, cavs_idx;