lkml.org 
[lkml]   [2001]   [Oct]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectQuestion and patch about spinlocks (x86)
    Just looking through at the spinlock assembly I noticed a few things which I
    think are bugs:

    "js 2f\n" \
    ".section .text.lock,\"ax\"\n" \
    "2:\t" \
    "cmpb $0,%0\n\t" \
    "rep;nop\n\t" \
    "jle 2b\n\t" \
    "jmp 1b\n" \
    ".previous"

    We do the cmp loop as a 'soft' check, as the lock operand locks the whole system
    bus, stopping the system for a while (as much as 70 cycles, I believe). However,
    I don't understand why it was put before the 'rep; nop' which just sets the
    processor to wait for a bit. Surely it would be better to test *after* we have
    waited, as then we have a better chance of it being correct.

    Any comments? Attached is a patch to fix it.

    --

    Mark Zealey (aka JALH on irc.openprojects.net: #zealos and many more)
    mark@zealos.org
    mark@itsolve.co.uk

    UL++++>$ G!>(GCM/GCS/GS/GM) dpu? s:-@ a16! C++++>$ P++++>+++++$ L+++>+++++$
    !E---? W+++>$ N- !o? !w--- O? !M? !V? !PS !PE--@ PGP+? r++ !t---?@ !X---?
    !R- b+ !tv b+ DI+ D+? G+++ e>+++++ !h++* r!-- y--

    (www.geekcode.com)
    --- include/asm-i386/spinlock.h.old Thu Oct 11 21:28:37 2001
    +++ include/asm-i386/spinlock.h Thu Oct 11 21:35:14 2001
    @@ -58,8 +58,8 @@
    "js 2f\n" \
    ".section .text.lock,\"ax\"\n" \
    "2:\t" \
    - "cmpb $0,%0\n\t" \
    "rep;nop\n\t" \
    + "cmpb $0,%0\n\t" \
    "jle 2b\n\t" \
    "jmp 1b\n" \
    ".previous"
    \
     
     \ /
      Last update: 2005-03-22 13:08    [W:0.025 / U:29.392 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site