lkml.org 
[lkml]   [2017]   [Nov]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.16 279/294] MIPS: DEC: Fix an int-handler.S CPU_DADDI_WORKAROUNDS regression
    3.16.50-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: "Maciej W. Rozycki" <macro@linux-mips.org>

    commit 68fe55680d0f3342969f49412fceabb90bdfadba upstream.

    Fix a commit 3021773c7c3e ("MIPS: DEC: Avoid la pseudo-instruction in
    delay slots") regression and remove assembly errors:

    arch/mips/dec/int-handler.S: Assembler messages:
    arch/mips/dec/int-handler.S:162: Error: Macro used $at after ".set noat"
    arch/mips/dec/int-handler.S:163: Error: Macro used $at after ".set noat"
    arch/mips/dec/int-handler.S:229: Error: Macro used $at after ".set noat"
    arch/mips/dec/int-handler.S:230: Error: Macro used $at after ".set noat"

    triggering with with the CPU_DADDI_WORKAROUNDS option set and the DADDIU
    instruction. This is because with that option in place the instruction
    becomes a macro, which expands to an LI/DADDU (or actually ADDIU/DADDU)
    sequence that uses $at as a temporary register.

    With CPU_DADDI_WORKAROUNDS we only support `-msym32' compilation though,
    and this is already enforced in arch/mips/Makefile, so choose the 32-bit
    expansion variant for the supported configurations and then replace the
    64-bit variant with #error just in case.

    Fixes: 3021773c7c3e ("MIPS: DEC: Avoid la pseudo-instruction in delay slots")
    Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org>
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/16893/
    Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    arch/mips/dec/int-handler.S | 34 ++++++----------------------------
    1 file changed, 6 insertions(+), 28 deletions(-)

    --- a/arch/mips/dec/int-handler.S
    +++ b/arch/mips/dec/int-handler.S
    @@ -147,23 +147,12 @@
    * Find irq with highest priority
    */
    # open coded PTR_LA t1, cpu_mask_nr_tbl
    -#if (_MIPS_SZPTR == 32)
    +#if defined(CONFIG_32BIT) || defined(KBUILD_64BIT_SYM32)
    # open coded la t1, cpu_mask_nr_tbl
    lui t1, %hi(cpu_mask_nr_tbl)
    addiu t1, %lo(cpu_mask_nr_tbl)
    -
    -#endif
    -#if (_MIPS_SZPTR == 64)
    - # open coded dla t1, cpu_mask_nr_tbl
    - .set push
    - .set noat
    - lui t1, %highest(cpu_mask_nr_tbl)
    - lui AT, %hi(cpu_mask_nr_tbl)
    - daddiu t1, t1, %higher(cpu_mask_nr_tbl)
    - daddiu AT, AT, %lo(cpu_mask_nr_tbl)
    - dsll t1, 32
    - daddu t1, t1, AT
    - .set pop
    +#else
    +#error GCC `-msym32' option required for 64-bit DECstation builds
    #endif
    1: lw t2,(t1)
    nop
    @@ -214,23 +203,12 @@
    * Find irq with highest priority
    */
    # open coded PTR_LA t1,asic_mask_nr_tbl
    -#if (_MIPS_SZPTR == 32)
    +#if defined(CONFIG_32BIT) || defined(KBUILD_64BIT_SYM32)
    # open coded la t1, asic_mask_nr_tbl
    lui t1, %hi(asic_mask_nr_tbl)
    addiu t1, %lo(asic_mask_nr_tbl)
    -
    -#endif
    -#if (_MIPS_SZPTR == 64)
    - # open coded dla t1, asic_mask_nr_tbl
    - .set push
    - .set noat
    - lui t1, %highest(asic_mask_nr_tbl)
    - lui AT, %hi(asic_mask_nr_tbl)
    - daddiu t1, t1, %higher(asic_mask_nr_tbl)
    - daddiu AT, AT, %lo(asic_mask_nr_tbl)
    - dsll t1, 32
    - daddu t1, t1, AT
    - .set pop
    +#else
    +#error GCC `-msym32' option required for 64-bit DECstation builds
    #endif
    2: lw t2,(t1)
    nop
    \
     
     \ /
      Last update: 2017-11-08 20:59    [W:2.161 / U:0.424 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site