Skip to content

Commit 7e225ef

Browse files
committed
arch: initialize irq_offload during boot, do not use SYS_INIT
Do not use SYS_INIT for initializing irq_offload when enabled, instead using a new interface that is called during the boot process for all architectures. Signed-off-by: Anas Nashif <anas.nashif@intel.com>
1 parent c9f7b51 commit 7e225ef

File tree

14 files changed

+49
-13
lines changed

14 files changed

+49
-13
lines changed

arch/arc/core/irq_offload.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ void arch_irq_offload(irq_offload_routine_t routine, const void *parameter)
5454
}
5555

5656
/* need to be executed on every core in the system */
57-
int arc_irq_offload_init(void)
57+
void arch_irq_offload_init(void)
5858
{
5959

6060
IRQ_CONNECT(IRQ_OFFLOAD_LINE, IRQ_OFFLOAD_PRIO, arc_irq_offload_handler, NULL, 0);
@@ -64,8 +64,4 @@ int arc_irq_offload_init(void)
6464
* with generic irq_enable() but via z_arc_v2_irq_unit_int_enable().
6565
*/
6666
z_arc_v2_irq_unit_int_enable(IRQ_OFFLOAD_LINE);
67-
68-
return 0;
6967
}
70-
71-
SYS_INIT(arc_irq_offload_init, POST_KERNEL, 0);

arch/arc/include/arc_irq_offload.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,9 @@
99

1010
#ifdef CONFIG_IRQ_OFFLOAD
1111

12-
int arc_irq_offload_init(const struct device *unused);
13-
1412
static inline void arc_irq_offload_init_smp(void)
1513
{
16-
arc_irq_offload_init(NULL);
14+
arch_irq_offload_init();
1715
}
1816

1917
#else

arch/arm/core/irq_offload.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,7 @@ void arch_irq_offload(irq_offload_routine_t routine, const void *parameter)
4242
offload_routine = NULL;
4343
k_sched_unlock();
4444
}
45+
46+
void arch_irq_offload_init(void)
47+
{
48+
}

arch/arm64/core/irq_offload.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,7 @@ void arch_irq_offload(irq_offload_routine_t routine, const void *parameter)
2323
: [svid] "i" (_SVC_CALL_IRQ_OFFLOAD),
2424
"r" (x0), "r" (x1));
2525
}
26+
27+
void arch_irq_offload_init(void)
28+
{
29+
}

arch/mips/core/irq_offload.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,7 @@ void arch_irq_offload(irq_offload_routine_t routine, const void *parameter)
4848

4949
irq_unlock(key);
5050
}
51+
52+
void arch_irq_offload_init(void)
53+
{
54+
}

arch/nios2/core/irq_offload.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,7 @@ void arch_irq_offload(irq_offload_routine_t routine, const void *parameter)
4141

4242
irq_unlock(key);
4343
}
44+
45+
void arch_irq_offload_init(void)
46+
{
47+
}

arch/posix/core/irq.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ void arch_irq_offload(irq_offload_routine_t routine, const void *parameter)
1414
{
1515
posix_irq_offload(routine, parameter);
1616
}
17+
18+
void arch_irq_offload_init(void)
19+
{
20+
}
1721
#endif
1822

1923
void arch_irq_enable(unsigned int irq)

arch/riscv/core/irq_offload.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,7 @@ void arch_irq_offload(irq_offload_routine_t routine, const void *parameter)
1111
{
1212
arch_syscall_invoke2((uintptr_t)routine, (uintptr_t)parameter, RV_ECALL_IRQ_OFFLOAD);
1313
}
14+
15+
void arch_irq_offload_init(void)
16+
{
17+
}

arch/sparc/core/irq_offload.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,7 @@ void arch_irq_offload(irq_offload_routine_t routine, const void *parameter)
3939

4040
irq_unlock(key);
4141
}
42+
43+
void arch_irq_offload_init(void)
44+
{
45+
}

arch/x86/core/ia32/irq_offload.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,7 @@ void arch_irq_offload(irq_offload_routine_t routine, const void *parameter)
4747

4848
irq_unlock(key);
4949
}
50+
51+
void arch_irq_offload_init(void)
52+
{
53+
}

arch/x86/core/intel64/irq_offload.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,7 @@ void arch_irq_offload(irq_offload_routine_t routine, const void *parameter)
4444
arch_irq_unlock(key);
4545
}
4646

47-
int irq_offload_init(void)
47+
void arch_irq_offload_init(void)
4848
{
4949
x86_irq_funcs[CONFIG_IRQ_OFFLOAD_VECTOR - IV_IRQS] = dispatcher;
50-
51-
return 0;
5250
}
53-
54-
SYS_INIT(irq_offload_init, PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);

arch/xtensa/core/irq_offload.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,7 @@ void arch_irq_offload(irq_offload_routine_t routine, const void *parameter)
3737
:: "r"(intenable), "r"(BIT(ZSR_IRQ_OFFLOAD_INT)));
3838
arch_irq_unlock(key);
3939
}
40+
41+
void arch_irq_offload_init(void)
42+
{
43+
}

include/zephyr/arch/arch_interface.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,13 @@ bool arch_irq_is_used(unsigned int irq);
455455
* @param parameter Value to pass to the function when invoked
456456
*/
457457
void arch_irq_offload(irq_offload_routine_t routine, const void *parameter);
458+
459+
460+
/**
461+
* Initialize the architecture-specific portion of the irq_offload subsystem
462+
*/
463+
void arch_irq_offload_init(void);
464+
458465
#endif /* CONFIG_IRQ_OFFLOAD */
459466

460467
/** @} */

kernel/init.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,9 @@ static void bg_thread_main(void *unused1, void *unused2, void *unused3)
516516
#endif /* CONFIG_MMU */
517517
z_sys_post_kernel = true;
518518

519+
#if CONFIG_IRQ_OFFLOAD
520+
arch_irq_offload_init();
521+
#endif
519522
z_sys_init_run_level(INIT_LEVEL_POST_KERNEL);
520523
#if CONFIG_SOC_LATE_INIT_HOOK
521524
soc_late_init_hook();

0 commit comments

Comments
 (0)