Re: [libc-alpha] Re: PATCH: Fix ll/sc for mips
From: H . J . Lu <hidden>
Date: 2002-02-01 08:00:56
On Fri, Feb 01, 2002 at 01:59:03PM +0900, Hiroyuki Machida wrote:
From: Kaz Kylheku <redacted> Subject: Re: [libc-alpha] Re: PATCH: Fix ll/sc for mips Date: Thu, 31 Jan 2002 20:02:25 -0800 (PST)quoted
On Fri, 1 Feb 2002, Hiroyuki Machida wrote:quoted
Please note that "sc" may fail even if nobody write the variable. (See P.211 "8.4.2 Load-Linked/Sotre-Conditional" of "See MIPS RUN" for more detail.) So, after your patch applied, compare_and_swap() may fail, even if *p is equal to oldval.I can't think of anything that will break because of this, as long as the compare_and_swap eventually succeeds on some subsequent trial. If the atomic operation has to abort for some reason other than *p being unequal to oldval, that should be cool.I mean that this patch breaks the spec of compare_and_swap(). In most case, this patch may works as Kaz said. If this patch have no side-effect to any application, it's ok to apply the patch. But we can't know how to use compare_and_swap() in all aplications in a whole world. So we have to follow the spec.
Please note that the old compare_and_swap is broken. If you use compare_and_swap to check if *p == oldval, my patch doesn't help you. But if you use it to swap old/new, my patch works fine. But I don't think you can use it check if *p == oldval since *p can change at any time. It is the same as simply using "*p == oldval". I don't see my patch should break any sane applications. H.J.