lkml.org 
[lkml]   [2019]   [Nov]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 29/79] MIPS: bmips: mark exception vectors as char arrays
    Date
    From: Jonas Gorski <jonas.gorski@gmail.com>

    [ Upstream commit e4f5cb1a9b27c0f94ef4f5a0178a3fde2d3d0e9e ]

    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: Sasha Levin <sashal@kernel.org>
    ---
    arch/mips/bcm63xx/prom.c | 2 +-
    arch/mips/include/asm/bmips.h | 10 +++++-----
    arch/mips/kernel/smp-bmips.c | 8 ++++----
    3 files changed, 10 insertions(+), 10 deletions(-)

    diff --git a/arch/mips/bcm63xx/prom.c b/arch/mips/bcm63xx/prom.c
    index 7019e2967009e..bbbf8057565b2 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 bf6a8afd7ad27..581a6a3c66e40 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 159e83add4bb3..5ec546b5eed1c 100644
    --- a/arch/mips/kernel/smp-bmips.c
    +++ b/arch/mips/kernel/smp-bmips.c
    @@ -457,10 +457,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.20.1


    \
     
     \ /
      Last update: 2019-11-08 20:02    [W:4.440 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site