]> xenbits.xensource.com Git - people/aperard/xen-unstable.git/commitdiff
xen/riscv: allow write_atomic() to work with non-scalar types
authorOleksii Kurochko <oleksii.kurochko@gmail.com>
Mon, 30 Sep 2024 08:06:44 +0000 (10:06 +0200)
committerJan Beulich <jbeulich@suse.com>
Mon, 30 Sep 2024 08:06:44 +0000 (10:06 +0200)
Update the defintion of write_atomic() to support non-scalar types,
bringing it closer to the behavior of read_atomic().

Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
xen/arch/riscv/include/asm/atomic.h

index 95910ebfebffc40f5f0357584c8febb6acc7d6a2..9669a3286d5014edd6a737385277324622af0543 100644 (file)
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
+ /* SPDX-License-Identifier: GPL-2.0-only */
 /*
  * Taken and modified from Linux.
  *
@@ -69,10 +69,11 @@ static always_inline void _write_atomic(volatile void *p,
     }
 }
 
-#define write_atomic(p, x)                              \
-({                                                      \
-    typeof(*(p)) x_ = (x);                              \
-    _write_atomic(p, x_, sizeof(*(p)));                 \
+#define write_atomic(p, x)                                          \
+({                                                                  \
+    union { typeof(*(p)) v; unsigned long ul; } x_ = { .ul = 0UL }; \
+    x_.v = (x);                                                     \
+    _write_atomic(p, x_.ul, sizeof(*(p)));                          \
 })
 
 static always_inline void _add_sized(volatile void *p,