All of lore.kernel.org
 help / color / mirror / Atom feed
From: will.deacon@arm.com (Will Deacon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] arm64: cmpxchg_dbl: fix return value type
Date: Thu, 5 Nov 2015 14:37:23 +0000	[thread overview]
Message-ID: <20151105143722.GD26684@arm.com> (raw)
In-Reply-To: <1446732056-31294-1-git-send-email-lorenzo.pieralisi@arm.com>

On Thu, Nov 05, 2015 at 02:00:56PM +0000, Lorenzo Pieralisi wrote:
> The current arm64 __cmpxchg_double{_mb} implementations carry out the
> compare exchange by first comparing the old values passed in to the
> values read from the pointer provided and by stashing the cumulative
> bitwise difference in a 64-bit register.
> 
> By comparing the register content against 0, it is possible to detect if
> the values read differ from the old values passed in, so that the compare
> exchange detects whether it has to bail out or carry on completing the
> operation with the exchange.
> 
> Given the current implementation, to detect the cmpxchg operation
> status, the __cmpxchg_double{_mb} functions should return the 64-bit
> stashed bitwise difference so that the caller can detect cmpxchg failure
> by comparing the return value content against 0. The current implementation
> declares the return value as an int, which means that the 64-bit
> value stashing the bitwise difference is truncated before being
> returned to the __cmpxchg_double{_mb} callers, which means that
> any bitwise difference present in the top 32 bits goes undetected,
> triggering false positives and subsequent kernel failures.
> 
> This patch fixes the issue by declaring the arm64 __cmpxchg_double{_mb}
> return values as a long, so that the bitwise difference is
> properly propagated on failure, restoring the expected behaviour.
> 
> Fixes: e9a4b795652f ("arm64: cmpxchg_dbl: patch in lse instructions when
> supported by the CPU")
> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Cc: <stable@vger.kernel.org>
> Cc: Will Deacon <will.deacon@arm.com>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Marc Zyngier <marc.zyngier@arm.com>
> ---
>  arch/arm64/include/asm/atomic_ll_sc.h | 2 +-
>  arch/arm64/include/asm/atomic_lse.h   | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)

Acked-by: Will Deacon <will.deacon@arm.com>

Thanks for debugging this :)

Will

  reply	other threads:[~2015-11-05 14:37 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-05 14:00 [PATCH] arm64: cmpxchg_dbl: fix return value type Lorenzo Pieralisi
2015-11-05 14:37 ` Will Deacon [this message]
2015-11-05 17:31 ` Catalin Marinas
2015-11-06  9:44   ` Lorenzo Pieralisi
2015-11-06 10:01     ` Catalin Marinas
2015-11-06 10:42       ` Lorenzo Pieralisi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20151105143722.GD26684@arm.com \
    --to=will.deacon@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.