diff mbox series

[RFC,v2,3/4] linux-user/prctl: Add dynamic memory consistency model prctl API

Message ID 20240209064117.2746701-4-christoph.muellner@vrull.eu (mailing list archive)
State New, archived
Headers show
Series RISC-V: Add dynamic TSO support | expand

Commit Message

Christoph Müllner Feb. 9, 2024, 6:41 a.m. UTC
This patch implements the prctl calls to set and get the current memory
consistency model. This patch does not implement any real functionality
but just defines the relevant hooks, where target code take over.

Signed-off-by: Christoph Müllner <christoph.muellner@vrull.eu>
---
 linux-user/syscall.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
diff mbox series

Patch

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index bf0d66b8a8..cf0845a074 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -6309,6 +6309,12 @@  abi_long do_arch_prctl(CPUX86State *env, int code, abi_ulong addr)
 # define PR_SME_VL_LEN_MASK  0xffff
 # define PR_SME_VL_INHERIT   (1 << 17)
 #endif
+#ifndef PR_SET_MEMORY_CONSISTENCY_MODEL
+# define PR_SET_MEMORY_CONSISTENCY_MODEL        71
+# define PR_GET_MEMORY_CONSISTENCY_MODEL        72
+# define PR_MEMORY_CONSISTENCY_MODEL_RISCV_WMO  1
+# define PR_MEMORY_CONSISTENCY_MODEL_RISCV_TSO  2
+#endif
 
 #include "target_prctl.h"
 
@@ -6355,6 +6361,12 @@  static abi_long do_prctl_inval1(CPUArchState *env, abi_long arg2)
 #ifndef do_prctl_sme_set_vl
 #define do_prctl_sme_set_vl do_prctl_inval1
 #endif
+#ifndef do_prctl_set_memory_consistency_model
+#define do_prctl_set_memory_consistency_model do_prctl_inval1
+#endif
+#ifndef do_prctl_get_memory_consistency_model
+#define do_prctl_get_memory_consistency_model do_prctl_inval0
+#endif
 
 static abi_long do_prctl(CPUArchState *env, abi_long option, abi_long arg2,
                          abi_long arg3, abi_long arg4, abi_long arg5)
@@ -6481,6 +6493,11 @@  static abi_long do_prctl(CPUArchState *env, abi_long option, abi_long arg2,
         /* Disable to prevent the target disabling stuff we need. */
         return -TARGET_EINVAL;
 
+    case PR_SET_MEMORY_CONSISTENCY_MODEL:
+        return do_prctl_set_memory_consistency_model(env, arg2);
+    case PR_GET_MEMORY_CONSISTENCY_MODEL:
+	return do_prctl_get_memory_consistency_model(env);
+
     default:
         qemu_log_mask(LOG_UNIMP, "Unsupported prctl: " TARGET_ABI_FMT_ld "\n",
                       option);