From 9797ba242b63e6da85022e8b72ea7d475c2c5fcd Mon Sep 17 00:00:00 2001 From: ed Date: Thu, 15 Oct 2015 17:50:28 +0000 Subject: [PATCH] Properly set the return value for casueword to 0 upon success. While trying to get multithreading working for CloudABI on aarch64, I noticed that compare-and-exchange operations in kernelspace would always fail. It turns out that we don't properly set the return value to 0 when the compare and exchange succeeds. Approved by: andrew Differential Revision: https://reviews.freebsd.org/D3899 --- sys/arm64/arm64/support.S | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sys/arm64/arm64/support.S b/sys/arm64/arm64/support.S index 73ef6a4ac581..914a6e3145e9 100644 --- a/sys/arm64/arm64/support.S +++ b/sys/arm64/arm64/support.S @@ -59,6 +59,7 @@ ENTRY(casueword32) ldrb w0, [x0] /* Try loading the data */ 2: SET_FAULT_HANDLER(xzr, x5) /* Reset the fault handler */ str w4, [x2] /* Store the read data */ + mov x0, #0 /* Success */ ret /* Return */ END(casueword32) @@ -76,6 +77,7 @@ ENTRY(casueword) ldrb w0, [x0] /* Try loading the data */ 2: SET_FAULT_HANDLER(xzr, x5) /* Reset the fault handler */ str x4, [x2] /* Store the read data */ + mov x0, #0 /* Success */ ret /* Return */ END(casueword) -- 2.39.5