This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Disable all lock elision unless --enable-lock-elision=yes


Carlos O'Donell skrev den 29.9.2014 17:05:
On 09/27/2014 02:10 PM, Andi Kleen wrote:
Hi Carlos,

On Sat, Sep 27, 2014 at 12:40:28AM -0400, Carlos O'Donell wrote:
Andi.

The rwlock elision support you added in 2014-06-13
appears to unconditionally enable elision for rwlock's
if the RTM-bit indicates TSX is present. That isn't what
we do for mutexes, and isn't very conservative in that
case.

Did I read the code right?

You're right. It should have been disabled in this case.

Patch looks good to me.

Andi,

Thanks. I'll get that checked in shortly. I just wanted to make
sure that we weren't doing it for any other reason.

I'll adjust the wording of the configure switch to indicate it
is for all elision usage in the library.



We seem to hit problems with this in Mageia when the installer runs :/

Building glibc with the patch applied:
http://svnweb.mageia.org/packages/cauldron/glibc/current/SOURCES/glibc-2.20-disable-all-lock-elision-unless--enable-lock-elision-is-yes.patch?view=markup&pathrev=731421

and dropping "--enable-lock-elision" from configure we hit SIGILL
on an old Intel E8400 CPU running x86_64 (and this with old 20131009 firmware) and some others:


Program received signal SIGILL, Illegal instruction.
__GI___pthread_rwlock_unlock (rwlock=rwlock@entry=0x7ffff40dcd00 <_globalCtx.5791>) at pthread_rwlock_unlock.c:34
34        if (ELIDE_UNLOCK (rwlock->__data.__writer == 0
(gdb) bt
#0 0x00007ffff6ca0192 in __GI___pthread_rwlock_unlock (rwlock=rwlock@entry=0x7ffff40dcd00 <_globalCtx.5791>) at pthread_rwlock_unlock.c:34 #1 0x00007ffff3ec59a4 in rpmlog (ctx=0x7ffff40dcd00 <_globalCtx.5791>) at rpmlog.c:49 #2 0x00007ffff3ec59a4 in rpmlog (code=code@entry=4, fmt=0x7ffff4131db6 "%s created as %s\n") at rpmlog.c:287 #3 0x00007ffff410cd4a in rpmPackageFilesInstall (suffix=<optimized out>, action=FA_ALTNAME, fi=0x81d9470, path=<synthetic pointer>) at fsm.c:756 #4 0x00007ffff410cd4a in rpmPackageFilesInstall (ts=<optimized out>, te=<optimized out>, files=<optimized out>, psm=psm@entry=0x5a877e0, failedFile=failedFile@entry=0x7fffffffd848) at fsm.c:948 #5 0x00007ffff4110725 in rpmpsmUnpack (psm=psm@entry=0x5a877e0) at psm.c:662 #6 0x00007ffff4110d8c in rpmpsmRun (psm=0x5a877e0, ts=0x910ca60) at psm.c:741 #7 0x00007ffff4110d8c in rpmpsmRun (ts=0x910ca60, te=te@entry=0x9464300, goal=goal@entry=PKG_INSTALL) at psm.c:842 #8 0x00007ffff4122dcc in rpmteProcess (te=0x9464300, goal=PKG_INSTALL) at rpmte.c:757 #9 0x00007ffff4128e7a in rpmtsRun (ts=<optimized out>) at transaction.c:1376 #10 0x00007ffff4128e7a in rpmtsRun (ts=0x0, okProbs=okProbs@entry=0x0, ignoreSet=153090448) at transaction.c:1491 #11 0x00007ffff4355530 in XS_URPM__Transaction_run (my_perl=<optimized out>, cv=<optimized out>) at URPM.xs:2732 #12 0x00007ffff7aee60b in Perl_pp_entersub (my_perl=0x603010) at pp_hot.c:2794 #13 0x00007ffff7ae6fd6 in Perl_runops_standard (my_perl=0x603010) at run.c:42 #14 0x00007ffff7a78ded in perl_run (oldscope=1, my_perl=0x603010) at perl.c:2451
#15 0x00007ffff7a78ded in perl_run (my_perl=0x603010) at perl.c:2372
#16 0x0000000000400ea9 in main (argc=11, argv=0x7fffffffdf38, env=0x7fffffffdf98) at perlmain.c:114


--

Thomas


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]