| From 93cfb4dcfa2c09e7d85cc1a115cc70b174d610e4 Mon Sep 17 00:00:00 2001 |
| From: Jonas Gorski <jonas.gorski@gmail.com> |
| Date: Tue, 22 Oct 2019 21:11:00 +0200 |
| Subject: [PATCH] MIPS: bmips: mark exception vectors as char arrays |
| |
| commit e4f5cb1a9b27c0f94ef4f5a0178a3fde2d3d0e9e upstream. |
| |
| The vectors span more than one byte, so mark them as arrays. |
| |
| Fixes the following build error when building when using GCC 8.3: |
| |
| In file included from ./include/linux/string.h:19, |
| from ./include/linux/bitmap.h:9, |
| from ./include/linux/cpumask.h:12, |
| from ./arch/mips/include/asm/processor.h:15, |
| from ./arch/mips/include/asm/thread_info.h:16, |
| from ./include/linux/thread_info.h:38, |
| from ./include/asm-generic/preempt.h:5, |
| from ./arch/mips/include/generated/asm/preempt.h:1, |
| from ./include/linux/preempt.h:81, |
| from ./include/linux/spinlock.h:51, |
| from ./include/linux/mmzone.h:8, |
| from ./include/linux/bootmem.h:8, |
| from arch/mips/bcm63xx/prom.c:10: |
| arch/mips/bcm63xx/prom.c: In function 'prom_init': |
| ./arch/mips/include/asm/string.h:162:11: error: '__builtin_memcpy' forming offset [2, 32] is out of the bounds [0, 1] of object 'bmips_smp_movevec' with type 'char' [-Werror=array-bounds] |
| __ret = __builtin_memcpy((dst), (src), __len); \ |
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| arch/mips/bcm63xx/prom.c:97:3: note: in expansion of macro 'memcpy' |
| memcpy((void *)0xa0000200, &bmips_smp_movevec, 0x20); |
| ^~~~~~ |
| In file included from arch/mips/bcm63xx/prom.c:14: |
| ./arch/mips/include/asm/bmips.h:80:13: note: 'bmips_smp_movevec' declared here |
| extern char bmips_smp_movevec; |
| |
| Fixes: 18a1eef92dcd ("MIPS: BMIPS: Introduce bmips.h") |
| Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com> |
| Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> |
| Signed-off-by: Paul Burton <paulburton@kernel.org> |
| Cc: linux-mips@vger.kernel.org |
| Cc: Ralf Baechle <ralf@linux-mips.org> |
| Cc: James Hogan <jhogan@kernel.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/arch/mips/bcm63xx/prom.c b/arch/mips/bcm63xx/prom.c |
| index 77a836e661c9..df69eaa453a1 100644 |
| --- a/arch/mips/bcm63xx/prom.c |
| +++ b/arch/mips/bcm63xx/prom.c |
| @@ -84,7 +84,7 @@ void __init prom_init(void) |
| * Here we will start up CPU1 in the background and ask it to |
| * reconfigure itself then go back to sleep. |
| */ |
| - memcpy((void *)0xa0000200, &bmips_smp_movevec, 0x20); |
| + memcpy((void *)0xa0000200, bmips_smp_movevec, 0x20); |
| __sync(); |
| set_c0_cause(C_SW0); |
| cpumask_set_cpu(1, &bmips_booted_mask); |
| diff --git a/arch/mips/include/asm/bmips.h b/arch/mips/include/asm/bmips.h |
| index bf6a8afd7ad2..581a6a3c66e4 100644 |
| --- a/arch/mips/include/asm/bmips.h |
| +++ b/arch/mips/include/asm/bmips.h |
| @@ -75,11 +75,11 @@ static inline int register_bmips_smp_ops(void) |
| #endif |
| } |
| |
| -extern char bmips_reset_nmi_vec; |
| -extern char bmips_reset_nmi_vec_end; |
| -extern char bmips_smp_movevec; |
| -extern char bmips_smp_int_vec; |
| -extern char bmips_smp_int_vec_end; |
| +extern char bmips_reset_nmi_vec[]; |
| +extern char bmips_reset_nmi_vec_end[]; |
| +extern char bmips_smp_movevec[]; |
| +extern char bmips_smp_int_vec[]; |
| +extern char bmips_smp_int_vec_end[]; |
| |
| extern int bmips_smp_enabled; |
| extern int bmips_cpu_offset; |
| diff --git a/arch/mips/kernel/smp-bmips.c b/arch/mips/kernel/smp-bmips.c |
| index 76fae9b79f13..712c15de6ab9 100644 |
| --- a/arch/mips/kernel/smp-bmips.c |
| +++ b/arch/mips/kernel/smp-bmips.c |
| @@ -464,10 +464,10 @@ static void bmips_wr_vec(unsigned long dst, char *start, char *end) |
| |
| static inline void bmips_nmi_handler_setup(void) |
| { |
| - bmips_wr_vec(BMIPS_NMI_RESET_VEC, &bmips_reset_nmi_vec, |
| - &bmips_reset_nmi_vec_end); |
| - bmips_wr_vec(BMIPS_WARM_RESTART_VEC, &bmips_smp_int_vec, |
| - &bmips_smp_int_vec_end); |
| + bmips_wr_vec(BMIPS_NMI_RESET_VEC, bmips_reset_nmi_vec, |
| + bmips_reset_nmi_vec_end); |
| + bmips_wr_vec(BMIPS_WARM_RESTART_VEC, bmips_smp_int_vec, |
| + bmips_smp_int_vec_end); |
| } |
| |
| struct reset_vec_info { |
| -- |
| 2.7.4 |
| |