Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Jan 2017 09:32:23 -0600
From:      Justin Hibbits <jhibbits@freebsd.org>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        src-committers <src-committers@freebsd.org>,  "svn-src-all@freebsd.org" <svn-src-all@freebsd.org>,  "svn-src-head@freebsd.org" <svn-src-head@freebsd.org>
Subject:   Re: svn commit: r312973 - head/sys/powerpc/include
Message-ID:  <CAHSQbTDdMm7rKXMXZ5hPL1VvxzLpqMTOmbYkM5opaGRua=St2w@mail.gmail.com>
In-Reply-To: <20170130105345.GL3018@kib.kiev.ua>
References:  <201701300215.v0U2Fsl0006455@repo.freebsd.org> <20170130105345.GL3018@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Jan 30, 2017 at 4:53 AM, Konstantin Belousov
<kostikbel@gmail.com> wrote:
>> +#ifdef __GNUCLIKE_ASM
>> +     __asm __volatile (
>> +             "1:\tlwarx %0, 0, %3\n\t"       /* load old value */
>> +             "cmplw %4, %0\n\t"              /* compare */
>> +             "bne 2f\n\t"                    /* exit if not equal */
>> +             "stwcx. %5, 0, %3\n\t"          /* attempt to store */
>> +             "bne- 1b\n\t"                   /* spin if failed */
>> +             "li %0, 1\n\t"                  /* success - retval = 1 */
>> +             "b 3f\n\t"                      /* we've succeeded */
>> +             "2:\n\t"
>> +             "stwcx. %0, 0, %3\n\t"          /* clear reservation (74xx) */
>> +             "stwx %0, 0, %7\n\t"
>> +             "li %0, 0\n\t"                  /* failure - retval = 0 */
>> +             "3:\n\t"
>> +             : "=&r" (ret), "=m" (*p), "=m" (*cmpval)
>> +             : "r" (p), "r" (*cmpval), "r" (newval), "m" (*p), "r"(cmpval)
>> +             : "cr0", "memory");
>> +#endif
>
> It seems that in case of failed conditional store, the code retries.
> Note that this is not incorrect but also not a desirable behaviour
> with fcmpset:  the function should return error and leave the retry
> to the caller.  There is no point in having embedded loop.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAHSQbTDdMm7rKXMXZ5hPL1VvxzLpqMTOmbYkM5opaGRua=St2w>