[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v7 2/8] xen/riscv: allow write_atomic() to work with non-scalar types



Update the defintion of write_atomic() to support non-scalar types,
aligning it with the behavior of read_atomic().

Signed-off-by: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
---
Changes in V7:
 - use union in definition of write_atomic() to add support of non-scalar 
types. 
---
Changes in v6:
 - new patch.
---
 xen/arch/riscv/include/asm/atomic.h | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/xen/arch/riscv/include/asm/atomic.h 
b/xen/arch/riscv/include/asm/atomic.h
index 95910ebfeb..e2dbb391f0 100644
--- a/xen/arch/riscv/include/asm/atomic.h
+++ b/xen/arch/riscv/include/asm/atomic.h
@@ -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 v_ul; } x_ = { .v_ul = 0UL }; \
+    x_.v = (x);                                                         \
+    _write_atomic(p, x_.v_ul, sizeof(*(p)));                            \
 })
 
 static always_inline void _add_sized(volatile void *p,
-- 
2.46.0




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.