lkml.org 
[lkml]   [2017]   [Apr]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.10 055/110] MIPS: End spinlocks with .insn
    Date
    4.10-stable review patch.  If anyone has any objections, please let me know.

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

    From: Paul Burton <paul.burton@imgtec.com>

    commit 4b5347a24a0f2d3272032c120664b484478455de upstream.

    When building for microMIPS we need to ensure that the assembler always
    knows that there is code at the target of a branch or jump. Recent
    toolchains will fail to link a microMIPS kernel when this isn't the case
    due to what it thinks is a branch to non-microMIPS code.

    mips-mti-linux-gnu-ld kernel/built-in.o: .spinlock.text+0x2fc: Unsupported branch between ISA modes.
    mips-mti-linux-gnu-ld final link failed: Bad value

    This is due to inline assembly labels in spinlock.h not being followed
    by an instruction mnemonic, either due to a .subsection pseudo-op or the
    end of the inline asm block.

    Fix this with a .insn direction after such labels.

    Signed-off-by: Paul Burton <paul.burton@imgtec.com>
    Signed-off-by: James Hogan <james.hogan@imgtec.com>
    Reviewed-by: Maciej W. Rozycki <macro@imgtec.com>
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/15325/
    Signed-off-by: James Hogan <james.hogan@imgtec.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/mips/include/asm/spinlock.h | 8 ++++----
    1 file changed, 4 insertions(+), 4 deletions(-)

    --- a/arch/mips/include/asm/spinlock.h
    +++ b/arch/mips/include/asm/spinlock.h
    @@ -127,7 +127,7 @@ static inline void arch_spin_lock(arch_s
    " andi %[ticket], %[ticket], 0xffff \n"
    " bne %[ticket], %[my_ticket], 4f \n"
    " subu %[ticket], %[my_ticket], %[ticket] \n"
    - "2: \n"
    + "2: .insn \n"
    " .subsection 2 \n"
    "4: andi %[ticket], %[ticket], 0xffff \n"
    " sll %[ticket], 5 \n"
    @@ -202,7 +202,7 @@ static inline unsigned int arch_spin_try
    " sc %[ticket], %[ticket_ptr] \n"
    " beqz %[ticket], 1b \n"
    " li %[ticket], 1 \n"
    - "2: \n"
    + "2: .insn \n"
    " .subsection 2 \n"
    "3: b 2b \n"
    " li %[ticket], 0 \n"
    @@ -382,7 +382,7 @@ static inline int arch_read_trylock(arch
    " .set reorder \n"
    __WEAK_LLSC_MB
    " li %2, 1 \n"
    - "2: \n"
    + "2: .insn \n"
    : "=" GCC_OFF_SMALL_ASM() (rw->lock), "=&r" (tmp), "=&r" (ret)
    : GCC_OFF_SMALL_ASM() (rw->lock)
    : "memory");
    @@ -422,7 +422,7 @@ static inline int arch_write_trylock(arc
    " lui %1, 0x8000 \n"
    " sc %1, %0 \n"
    " li %2, 1 \n"
    - "2: \n"
    + "2: .insn \n"
    : "=" GCC_OFF_SMALL_ASM() (rw->lock), "=&r" (tmp),
    "=&r" (ret)
    : GCC_OFF_SMALL_ASM() (rw->lock)

    \
     
     \ /
      Last update: 2017-04-10 18:52    [W:4.167 / U:0.252 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site