[PATCH][BZ 18743] PowerPC: Fix a race condition when eliding a lock
Tulio Magno Quites Machado Filho
tuliom@linux.vnet.ibm.com
Fri Jul 31 23:06:00 GMT 2015
Adhemerval Zanella <adhemerval.zanella@linaro.org> writes:
> Mainly because I see this issue is not powerpc specific and I think we should
> also fix for x86 (that currently also uses the same mechanism) and for future
> arches that also might potentially implement lock elision using this.
AFAICS, this is powerpc specific. x86 ensures the memory access happens
inside the transaction.
Here is the x86 implementation:
50 /* is_lock_free must be executed inside the transaction */
51
52 /* Returns true if lock defined by IS_LOCK_FREE was elided.
53 ADAPT_COUNT is a pointer to per-lock state variable. */
54
55 #define ELIDE_LOCK(adapt_count, is_lock_free) \
56 ({ \
57 int ret = 0; \
58 \
59 if ((adapt_count) <= 0) \
60 { \
61 for (int i = __elision_aconf.retry_try_xbegin; i > 0; i--) \
62 { \
63 unsigned int status; \
64 if ((status = _xbegin ()) == _XBEGIN_STARTED) \
65 { \
66 if (is_lock_free) \
67 { \
68 ret = 1; \
69 break; \
70 } \
71 _xabort (_ABORT_LOCK_BUSY); \
72 } \
73 if (!elision_adapt (&(adapt_count), status)) \
74 break; \
75 } \
76 } \
77 else \
78 (adapt_count)--; /* missing updates ok */ \
79 ret; \
80 })
--
Tulio Magno
More information about the Libc-alpha
mailing list