misc: Replace scalar TypedBufferArg with VPtr.
authorGabe Black <gabeblack@google.com>
Tue, 26 May 2020 00:55:59 +0000 (17:55 -0700)
committerGabe Black <gabeblack@google.com>
Wed, 19 Aug 2020 12:04:18 +0000 (12:04 +0000)
Change-Id: Ic8460ad133e3512c103b14820d90ee3df987d78d
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/31755
Maintainer: Gabe Black <gabeblack@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Ciro Santilli <ciro.santilli@arm.com>
src/arch/arm/aapcs32.hh
src/arch/arm/aapcs64.hh
src/dev/hsa/hsa_driver.cc
src/dev/hsa/hsa_packet_processor.cc
src/kern/linux/events.hh
src/sim/syscall_emul.cc
src/sim/syscall_emul.hh

index e2e5d09f5aff9b393db3d43c3e336282c595f1e6..7f40bd39bedcae734b2469fef0bf986dc663c566 100644 (file)
@@ -37,8 +37,9 @@
 #include "arch/arm/utility.hh"
 #include "base/intmath.hh"
 #include "cpu/thread_context.hh"
+#include "mem/port_proxy.hh"
 #include "sim/guest_abi.hh"
-#include "sim/syscall_emul_buf.hh"
+#include "sim/proxy_ptr.hh"
 
 class ThreadContext;
 
@@ -113,8 +114,7 @@ struct Aapcs32ArgumentBase
         state.nsaa = roundUp(state.nsaa, align);
 
         // Extract the value from it.
-        TypedBufferArg<T> val(state.nsaa);
-        val.copyIn(tc->getVirtProxy());
+        ConstVPtr<T> val(state.nsaa, tc);
 
         // Move the nsaa past this argument.
         state.nsaa += size;
@@ -284,9 +284,8 @@ struct Result<Aapcs32, Composite, typename std::enable_if<
             val = gtoh(val, ArmISA::byteOrder(tc));
             tc->setIntReg(ArmISA::INTREG_R0, val);
         } else {
-            TypedBufferArg<Composite> cp(state.retAddr);
-            cp = htog(composite, ArmISA::byteOrder(tc));
-            cp.copyOut(tc->getVirtProxy());
+            VPtr<Composite> cp(state.retAddr, tc);
+            *cp = htog(composite, ArmISA::byteOrder(tc));
         }
     }
 
index 30597f59e3f6d9ddb0b2d7e5eb830e9a40214405..0c11215afe076ef707e6404c9df75fc9ae77c202 100644 (file)
@@ -38,7 +38,7 @@
 #include "base/intmath.hh"
 #include "cpu/thread_context.hh"
 #include "sim/guest_abi.hh"
-#include "sim/syscall_emul_buf.hh"
+#include "sim/proxy_ptr.hh"
 
 class ThreadContext;
 
@@ -158,8 +158,7 @@ struct Aapcs64ArgumentBase
         state.nsaa = roundUp(state.nsaa, align);
 
         // Extract the value from it.
-        TypedBufferArg<T> val(state.nsaa);
-        val.copyIn(tc->getVirtProxy());
+        ConstVPtr<T> val(state.nsaa, tc);
 
         // Move the nsaa past this argument.
         state.nsaa += size;
@@ -350,8 +349,7 @@ struct Argument<Aapcs64, Composite, typename std::enable_if<
             // kept in a buffer, and the argument is actually a pointer to that
             // buffer.
             Addr addr = Argument<Aapcs64, Addr>::get(tc, state);
-            TypedBufferArg<Composite> composite(addr);
-            composite.copyIn(tc->getVirtProxy());
+            ConstVPtr<Composite> composite(addr, tc);
             return gtoh(*composite, ArmISA::byteOrder(tc));
         }
 
@@ -393,7 +391,7 @@ struct Result<Aapcs64, Composite, typename std::enable_if<
     {
         if (sizeof(Composite) > 16) {
             Addr addr = tc->readIntReg(ArmISA::INTREG_X8);
-            TypedBufferArg<Composite> composite(addr);
+            VPtr<Composite> composite(addr, tc);
             *composite = htog(c, ArmISA::byteOrder(tc));
             return;
         }
index 459043d93e4d4ea4060b46eb8cdb9f59d823f8b4..a1215c4058c13ca81fff575d50b0fbc8f39a2bd4 100644 (file)
@@ -42,7 +42,7 @@
 #include "dev/hsa/kfd_ioctl.h"
 #include "params/HSADriver.hh"
 #include "sim/process.hh"
-#include "sim/syscall_emul_buf.hh"
+#include "sim/proxy_ptr.hh"
 
 HSADriver::HSADriver(HSADriverParams *p)
     : EmulatedDriver(p), device(p->device), queueId(0)
index 68cdcf4386a189277f674b0d991877772c336ee6..c31d9f02f22e187e99e368ab2765f7f23e5ef6d8 100644 (file)
@@ -47,7 +47,7 @@
 #include "mem/packet_access.hh"
 #include "mem/page_table.hh"
 #include "sim/process.hh"
-#include "sim/syscall_emul_buf.hh"
+#include "sim/proxy_ptr.hh"
 #include "sim/system.hh"
 
 #define HSAPP_EVENT_DESCRIPTION_GENERATOR(XEVENT) \
@@ -414,13 +414,10 @@ HSAPacketProcessor::processPkt(void* pkt, uint32_t rl_idx, Addr host_pkt_addr)
                  * The reason for this is that the DMASequencer does
                  * not support atomic operations.
                  */
-                auto tc = sys->threads[0];
-                auto &virt_proxy = tc->getVirtProxy();
-                TypedBufferArg<uint64_t> prev_signal(signal_addr);
-                prev_signal.copyIn(virt_proxy);
+                VPtr<uint64_t> prev_signal(signal_addr, sys->threads[0]);
 
                 hsa_signal_value_t *new_signal = new hsa_signal_value_t;
-                *new_signal = (hsa_signal_value_t) *prev_signal - 1;
+                *new_signal = (hsa_signal_value_t)*prev_signal - 1;
 
                 dmaWriteVirt(signal_addr,
                              sizeof(hsa_signal_value_t), NULL, new_signal, 0);
index c5a297b4eb69a4b7a3242c10375cbc4e476d5508..2ca97a43bb993df47c1cec1fdf298bd493fa51ac 100644 (file)
@@ -48,6 +48,7 @@
 #include "debug/DebugPrintf.hh"
 #include "kern/linux/printk.hh"
 #include "kern/system_events.hh"
+#include "mem/se_translating_port_proxy.hh"
 #include "sim/guest_abi.hh"
 
 class ThreadContext;
index 4a41609638060e41b87ff7a80b5a49f8556dac48..9fd08e893a560e57ba008da0d2effeedfbeffeda 100644 (file)
@@ -47,6 +47,7 @@
 #include "mem/page_table.hh"
 #include "sim/byteswap.hh"
 #include "sim/process.hh"
+#include "sim/proxy_ptr.hh"
 #include "sim/sim_exit.hh"
 #include "sim/syscall_debug_macros.hh"
 #include "sim/syscall_desc.hh"
@@ -1636,24 +1637,15 @@ setsockoptFunc(SyscallDesc *desc, ThreadContext *tc,
 
 SyscallReturn
 getcpuFunc(SyscallDesc *desc, ThreadContext *tc,
-           Addr cpu_ptr, Addr node_ptr, Addr tcache_ptr)
+           VPtr<uint32_t> cpu, VPtr<uint32_t> node, VPtr<uint32_t> tcache)
 {
-    bool error = false;
-
     // unsigned is the same size (4) on all Linux supported ISAs.
-    if (cpu_ptr != 0) {
-        TypedBufferArg<uint32_t> result(cpu_ptr);
-        *result = htog(tc->contextId(),
-            tc->getSystemPtr()->getGuestByteOrder());
-        error |= !result.copyOut(tc->getVirtProxy());
-    }
+    if (cpu)
+        *cpu = htog(tc->contextId(), tc->getSystemPtr()->getGuestByteOrder());
 
     // Set a fixed NUMA node 0.
-    if (node_ptr != 0) {
-        TypedBufferArg<uint32_t> result(node_ptr);
-        *result = 0;
-        error |= !result.copyOut(tc->getVirtProxy());
-    }
+    if (node)
+        *node = 0;
 
-    return error ? -EFAULT : 0;
+    return 0;
 }
index f793dfd5e162f531c18bd9c8fa75282334de6b77..b23e86010c04a5aca0fa76bb4fb916bbb032699f 100644 (file)
@@ -356,7 +356,8 @@ SyscallReturn setsockoptFunc(SyscallDesc *desc, ThreadContext *tc,
                              Addr valPtr, socklen_t len);
 
 SyscallReturn getcpuFunc(SyscallDesc *desc, ThreadContext *tc,
-                         Addr cpu_ptr, Addr node_ptr, Addr tcache_ptr);
+                         VPtr<uint32_t> cpu, VPtr<uint32_t> node,
+                         VPtr<uint32_t> tcache);
 
 // Target getsockname() handler.
 SyscallReturn getsocknameFunc(SyscallDesc *desc, ThreadContext *tc,
@@ -1933,7 +1934,8 @@ gettimeofdayFunc(SyscallDesc *desc, ThreadContext *tc,
 /// Target utimes() handler.
 template <class OS>
 SyscallReturn
-utimesFunc(SyscallDesc *desc, ThreadContext *tc, Addr pathname, Addr times)
+utimesFunc(SyscallDesc *desc, ThreadContext *tc, Addr pathname,
+           VPtr<typename OS::timeval [2]> tp)
 {
     std::string path;
     auto process = tc->getProcessPtr();
@@ -1941,9 +1943,6 @@ utimesFunc(SyscallDesc *desc, ThreadContext *tc, Addr pathname, Addr times)
     if (!tc->getVirtProxy().tryReadString(path, pathname))
         return -EFAULT;
 
-    TypedBufferArg<typename OS::timeval [2]> tp(times);
-    tp.copyIn(tc->getVirtProxy());
-
     struct timeval hostTimeval[2];
     for (int i = 0; i < 2; ++i) {
         hostTimeval[i].tv_sec = gtoh((*tp)[i].tv_sec, OS::byteOrder);