Commit 7bfba2ca authored by Sam Ravnborg's avatar Sam Ravnborg Committed by Andreas Larsson

sparc32: Fix build with trapbase

Fix the following build errors:
irq_32.c:258:7: error: array subscript [16, 79] is outside array bounds of 'struct tt_entry[1]
irq_32.c:271:14: error: assignment to 'struct tt_entry *' from incompatible pointer type 'struct tt_entry (*)[]

trapbase is a pointer to an array of tt_entry, but the code declared it
as a pointer so the compiler see a single entry and not an array.
Fix this by modifyinf the declaration to be an array, and modify all
users to take the address of the first member.
Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
Acked-by: default avatarRandy Dunlap <rdunlap@infradead.org>
Tested-by: Randy Dunlap <rdunlap@infradead.org> # build-tested
Cc: Andreas Larsson <andreas@gaisler.com>
Cc: "David S. Miller" <davem@davemloft.net>
Reviewed-by: default avatarAndreas Larsson <andreas@gaisler.com>
Tested-by: default avatarAndreas Larsson <andreas@gaisler.com>
Signed-off-by: default avatarAndreas Larsson <andreas@gaisler.com>
Link: https://lore.kernel.org/r/20240224-sam-fix-sparc32-all-builds-v2-2-1f186603c5c4@ravnborg.org
parent 802a8874
...@@ -268,11 +268,11 @@ int sparc_floppy_request_irq(unsigned int irq, irq_handler_t irq_handler) ...@@ -268,11 +268,11 @@ int sparc_floppy_request_irq(unsigned int irq, irq_handler_t irq_handler)
if (sparc_cpu_model != sparc_leon) { if (sparc_cpu_model != sparc_leon) {
struct tt_entry *trap_table; struct tt_entry *trap_table;
trap_table = &trapbase_cpu1; trap_table = &trapbase_cpu1[0];
INSTANTIATE(trap_table) INSTANTIATE(trap_table)
trap_table = &trapbase_cpu2; trap_table = &trapbase_cpu2[0];
INSTANTIATE(trap_table) INSTANTIATE(trap_table)
trap_table = &trapbase_cpu3; trap_table = &trapbase_cpu3[0];
INSTANTIATE(trap_table) INSTANTIATE(trap_table)
} }
#endif #endif
......
...@@ -138,10 +138,10 @@ extern unsigned int t_nmi[]; ...@@ -138,10 +138,10 @@ extern unsigned int t_nmi[];
extern unsigned int linux_trap_ipi15_sun4d[]; extern unsigned int linux_trap_ipi15_sun4d[];
extern unsigned int linux_trap_ipi15_sun4m[]; extern unsigned int linux_trap_ipi15_sun4m[];
extern struct tt_entry trapbase; extern struct tt_entry trapbase[];
extern struct tt_entry trapbase_cpu1; extern struct tt_entry trapbase_cpu1[];
extern struct tt_entry trapbase_cpu2; extern struct tt_entry trapbase_cpu2[];
extern struct tt_entry trapbase_cpu3; extern struct tt_entry trapbase_cpu3[];
extern char cputypval[]; extern char cputypval[];
......
...@@ -37,7 +37,7 @@ void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) ...@@ -37,7 +37,7 @@ void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs)
gdb_regs[GDB_Y] = regs->y; gdb_regs[GDB_Y] = regs->y;
gdb_regs[GDB_PSR] = regs->psr; gdb_regs[GDB_PSR] = regs->psr;
gdb_regs[GDB_WIM] = 0; gdb_regs[GDB_WIM] = 0;
gdb_regs[GDB_TBR] = (unsigned long) &trapbase; gdb_regs[GDB_TBR] = (unsigned long) &trapbase[0];
gdb_regs[GDB_PC] = regs->pc; gdb_regs[GDB_PC] = regs->pc;
gdb_regs[GDB_NPC] = regs->npc; gdb_regs[GDB_NPC] = regs->npc;
gdb_regs[GDB_FSR] = 0; gdb_regs[GDB_FSR] = 0;
...@@ -72,7 +72,7 @@ void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p) ...@@ -72,7 +72,7 @@ void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p)
gdb_regs[GDB_PSR] = t->kpsr; gdb_regs[GDB_PSR] = t->kpsr;
gdb_regs[GDB_WIM] = t->kwim; gdb_regs[GDB_WIM] = t->kwim;
gdb_regs[GDB_TBR] = (unsigned long) &trapbase; gdb_regs[GDB_TBR] = (unsigned long) &trapbase[0];
gdb_regs[GDB_PC] = t->kpc; gdb_regs[GDB_PC] = t->kpc;
gdb_regs[GDB_NPC] = t->kpc + 4; gdb_regs[GDB_NPC] = t->kpc + 4;
gdb_regs[GDB_FSR] = 0; gdb_regs[GDB_FSR] = 0;
......
...@@ -245,13 +245,13 @@ void __init leon_smp_done(void) ...@@ -245,13 +245,13 @@ void __init leon_smp_done(void)
/* Free unneeded trap tables */ /* Free unneeded trap tables */
if (!cpu_present(1)) { if (!cpu_present(1)) {
free_reserved_page(virt_to_page(&trapbase_cpu1)); free_reserved_page(virt_to_page(&trapbase_cpu1[0]));
} }
if (!cpu_present(2)) { if (!cpu_present(2)) {
free_reserved_page(virt_to_page(&trapbase_cpu2)); free_reserved_page(virt_to_page(&trapbase_cpu2[0]));
} }
if (!cpu_present(3)) { if (!cpu_present(3)) {
free_reserved_page(virt_to_page(&trapbase_cpu3)); free_reserved_page(virt_to_page(&trapbase_cpu3[0]));
} }
/* Ok, they are spinning and ready to go. */ /* Ok, they are spinning and ready to go. */
smp_processors_ready = 1; smp_processors_ready = 1;
......
...@@ -67,7 +67,7 @@ static void prom_sync_me(void) ...@@ -67,7 +67,7 @@ static void prom_sync_me(void)
__asm__ __volatile__("wr %0, 0x0, %%tbr\n\t" __asm__ __volatile__("wr %0, 0x0, %%tbr\n\t"
"nop\n\t" "nop\n\t"
"nop\n\t" "nop\n\t"
"nop\n\t" : : "r" (&trapbase)); "nop\n\t" : : "r" (&trapbase[0]));
prom_printf("PROM SYNC COMMAND...\n"); prom_printf("PROM SYNC COMMAND...\n");
show_mem(); show_mem();
...@@ -285,7 +285,7 @@ void __init setup_arch(char **cmdline_p) ...@@ -285,7 +285,7 @@ void __init setup_arch(char **cmdline_p)
int i; int i;
unsigned long highest_paddr; unsigned long highest_paddr;
sparc_ttable = &trapbase; sparc_ttable = &trapbase[0];
/* Initialize PROM console and command line. */ /* Initialize PROM console and command line. */
*cmdline_p = prom_getbootargs(); *cmdline_p = prom_getbootargs();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment