gem5  v20.1.0.0
gpu_compute_driver.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-2018 Advanced Micro Devices, Inc.
3  * All rights reserved.
4  *
5  * For use for simulation and test purposes only
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright notice,
11  * this list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright notice,
14  * this list of conditions and the following disclaimer in the documentation
15  * and/or other materials provided with the distribution.
16  *
17  * 3. Neither the name of the copyright holder nor the names of its
18  * contributors may be used to endorse or promote products derived from this
19  * software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
25  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31  * POSSIBILITY OF SUCH DAMAGE.
32  *
33  * Authors: Sooraj Puthoor
34  * Anthony Gutierrez
35  */
36 
38 
39 #include "cpu/thread_context.hh"
40 #include "debug/GPUDriver.hh"
41 #include "dev/hsa/hsa_device.hh"
43 #include "dev/hsa/kfd_ioctl.h"
44 #include "params/GPUComputeDriver.hh"
45 #include "sim/syscall_emul_buf.hh"
46 
48  : HSADriver(p)
49 {
50  DPRINTF(GPUDriver, "Constructing KFD: device\n");
51 }
52 
53 int
54 GPUComputeDriver::ioctl(ThreadContext *tc, unsigned req, Addr ioc_buf)
55 {
56  auto &virt_proxy = tc->getVirtProxy();
57 
58  switch (req) {
60  {
61  DPRINTF(GPUDriver, "ioctl: AMDKFD_IOC_GET_VERSION\n");
62 
64  args->major_version = 1;
65  args->minor_version = 0;
66 
67  args.copyOut(virt_proxy);
68  }
69  break;
71  {
72  DPRINTF(GPUDriver, "ioctl: AMDKFD_IOC_CREATE_QUEUE\n");
73 
74  allocateQueue(tc, ioc_buf);
75 
76  DPRINTF(GPUDriver, "Creating queue %d\n", queueId);
77  }
78  break;
80  {
82  args.copyIn(virt_proxy);
83  DPRINTF(GPUDriver, "ioctl: AMDKFD_IOC_DESTROY_QUEUE;" \
84  "queue offset %d\n", args->queue_id);
86  }
87  break;
89  {
90  warn("unimplemented ioctl: AMDKFD_IOC_SET_MEMORY_POLICY\n");
91  }
92  break;
94  {
95  DPRINTF(GPUDriver, "ioctl: AMDKFD_IOC_GET_CLOCK_COUNTERS\n");
96 
98  args.copyIn(virt_proxy);
99 
100  // Set nanosecond resolution
101  args->system_clock_freq = 1000000000;
102 
107  uint64_t elapsed_nsec = curTick() / SimClock::Int::ns;
108  args->gpu_clock_counter = elapsed_nsec;
109  args->cpu_clock_counter = elapsed_nsec;
110  args->system_clock_counter = elapsed_nsec;
111 
112  args.copyOut(virt_proxy);
113  }
114  break;
116  {
117  DPRINTF(GPUDriver, "ioctl: AMDKFD_IOC_GET_PROCESS_APERTURES\n");
118 
120  args->num_of_nodes = 1;
121 
128  for (int i = 0; i < args->num_of_nodes; ++i) {
136  = scratchApeBase(i + 1);
139 
140  args->process_apertures[i].lds_base = ldsApeBase(i + 1);
141  args->process_apertures[i].lds_limit =
143 
147 
148  // NOTE: Must match ID populated by hsaTopology.py
149  args->process_apertures[i].gpu_id = 2765;
150 
151  DPRINTF(GPUDriver, "GPUVM base for node[%i] = %#x\n", i,
153  DPRINTF(GPUDriver, "GPUVM limit for node[%i] = %#x\n", i,
155 
156  DPRINTF(GPUDriver, "LDS base for node[%i] = %#x\n", i,
157  args->process_apertures[i].lds_base);
158  DPRINTF(GPUDriver, "LDS limit for node[%i] = %#x\n", i,
159  args->process_apertures[i].lds_limit);
160 
161  DPRINTF(GPUDriver, "Scratch base for node[%i] = %#x\n", i,
163  DPRINTF(GPUDriver, "Scratch limit for node[%i] = %#x\n", i,
165 
172  assert(bits<Addr>(args->process_apertures[i].scratch_base, 63,
173  47) != 0x1ffff);
174  assert(bits<Addr>(args->process_apertures[i].scratch_base, 63,
175  47) != 0);
176  assert(bits<Addr>(args->process_apertures[i].scratch_limit, 63,
177  47) != 0x1ffff);
178  assert(bits<Addr>(args->process_apertures[i].scratch_limit, 63,
179  47) != 0);
180  assert(bits<Addr>(args->process_apertures[i].lds_base, 63,
181  47) != 0x1ffff);
182  assert(bits<Addr>(args->process_apertures[i].lds_base, 63,
183  47) != 0);
184  assert(bits<Addr>(args->process_apertures[i].lds_limit, 63,
185  47) != 0x1ffff);
186  assert(bits<Addr>(args->process_apertures[i].lds_limit, 63,
187  47) != 0);
188  assert(bits<Addr>(args->process_apertures[i].gpuvm_base, 63,
189  47) != 0x1ffff);
190  assert(bits<Addr>(args->process_apertures[i].gpuvm_base, 63,
191  47) != 0);
192  assert(bits<Addr>(args->process_apertures[i].gpuvm_limit, 63,
193  47) != 0x1ffff);
194  assert(bits<Addr>(args->process_apertures[i].gpuvm_limit, 63,
195  47) != 0);
196  }
197 
198  args.copyOut(virt_proxy);
199  }
200  break;
202  {
203  warn("unimplemented ioctl: AMDKFD_IOC_UPDATE_QUEUE\n");
204  }
205  break;
207  {
208  warn("unimplemented ioctl: AMDKFD_IOC_CREATE_EVENT\n");
209  }
210  break;
212  {
213  warn("unimplemented ioctl: AMDKFD_IOC_DESTROY_EVENT\n");
214  }
215  break;
217  {
218  warn("unimplemented ioctl: AMDKFD_IOC_SET_EVENT\n");
219  }
220  break;
222  {
223  warn("unimplemented ioctl: AMDKFD_IOC_RESET_EVENT\n");
224  }
225  break;
227  {
228  warn("unimplemented ioctl: AMDKFD_IOC_WAIT_EVENTS\n");
229  }
230  break;
232  {
233  warn("unimplemented ioctl: AMDKFD_IOC_DBG_REGISTER\n");
234  }
235  break;
237  {
238  warn("unimplemented ioctl: AMDKFD_IOC_DBG_UNREGISTER\n");
239  }
240  break;
242  {
243  warn("unimplemented ioctl: AMDKFD_IOC_DBG_ADDRESS_WATCH\n");
244  }
245  break;
247  {
248  warn("unimplemented ioctl: AMDKFD_IOC_DBG_WAVE_CONTROL\n");
249  }
250  break;
252  {
253  warn("unimplemented ioctl: AMDKFD_IOC_ALLOC_MEMORY_OF_GPU\n");
254  }
255  break;
257  {
258  warn("unimplemented ioctl: AMDKFD_IOC_FREE_MEMORY_OF_GPU\n");
259  }
260  break;
262  {
263  warn("unimplemented ioctl: AMDKFD_IOC_MAP_MEMORY_TO_GPU\n");
264  }
265  break;
267  {
268  warn("unimplemented ioctl: AMDKFD_IOC_UNMAP_MEMORY_FROM_GPU\n");
269  }
270  break;
272  {
273  warn("unimplemented ioctl: AMDKFD_IOC_ALLOC_MEMORY_OF_SCRATCH\n");
274  }
275  break;
277  {
278  warn("unimplemented ioctl: AMDKFD_IOC_SET_CU_MASK\n");
279  }
280  break;
282  {
283  warn("unimplemented ioctl: AMDKFD_IOC_SET_PROCESS_DGPU_APERTURE"
284  "\n");
285  }
286  break;
288  {
289  warn("unimplemented ioctl: AMDKFD_IOC_SET_TRAP_HANDLER\n");
290  }
291  break;
293  {
294  DPRINTF(GPUDriver,
295  "ioctl: AMDKFD_IOC_GET_PROCESS_APERTURES_NEW\n");
296 
298  ioc_args(ioc_buf);
299 
300  ioc_args.copyIn(virt_proxy);
301  ioc_args->num_of_nodes = 1;
302 
303  for (int i = 0; i < ioc_args->num_of_nodes; ++i) {
306 
307  ape_args->scratch_base = scratchApeBase(i + 1);
308  ape_args->scratch_limit =
309  scratchApeLimit(ape_args->scratch_base);
310  ape_args->lds_base = ldsApeBase(i + 1);
311  ape_args->lds_limit = ldsApeLimit(ape_args->lds_base);
312  ape_args->gpuvm_base = gpuVmApeBase(i + 1);
313  ape_args->gpuvm_limit = gpuVmApeLimit(ape_args->gpuvm_base);
314 
315  ape_args->gpu_id = 2765;
316 
317  assert(bits<Addr>(ape_args->scratch_base, 63, 47) != 0x1ffff);
318  assert(bits<Addr>(ape_args->scratch_base, 63, 47) != 0);
319  assert(bits<Addr>(ape_args->scratch_limit, 63, 47) != 0x1ffff);
320  assert(bits<Addr>(ape_args->scratch_limit, 63, 47) != 0);
321  assert(bits<Addr>(ape_args->lds_base, 63, 47) != 0x1ffff);
322  assert(bits<Addr>(ape_args->lds_base, 63, 47) != 0);
323  assert(bits<Addr>(ape_args->lds_limit, 63, 47) != 0x1ffff);
324  assert(bits<Addr>(ape_args->lds_limit, 63, 47) != 0);
325  assert(bits<Addr>(ape_args->gpuvm_base, 63, 47) != 0x1ffff);
326  assert(bits<Addr>(ape_args->gpuvm_base, 63, 47) != 0);
327  assert(bits<Addr>(ape_args->gpuvm_limit, 63, 47) != 0x1ffff);
328  assert(bits<Addr>(ape_args->gpuvm_limit, 63, 47) != 0);
329 
330  ape_args.copyOut(virt_proxy);
331  }
332 
333  ioc_args.copyOut(virt_proxy);
334  }
335  break;
337  {
338  warn("unimplemented ioctl: AMDKFD_IOC_GET_DMABUF_INFO\n");
339  }
340  break;
342  {
343  warn("unimplemented ioctl: AMDKFD_IOC_IMPORT_DMABUF\n");
344  }
345  break;
347  {
348  warn("unimplemented ioctl: AMDKFD_IOC_GET_TILE_CONFIG\n");
349  }
350  break;
352  {
353  warn("unimplemented ioctl: AMDKFD_IOC_IPC_IMPORT_HANDLE\n");
354  }
355  break;
357  {
358  warn("unimplemented ioctl: AMDKFD_IOC_IPC_EXPORT_HANDLE\n");
359  }
360  break;
362  {
363  warn("unimplemented ioctl: AMDKFD_IOC_CROSS_MEMORY_COPY\n");
364  }
365  break;
367  {
368  warn("unimplemented ioctl: AMDKFD_IOC_OPEN_GRAPHIC_HANDLE\n");
369  }
370  break;
371  default:
372  fatal("%s: bad ioctl %d\n", req);
373  break;
374  }
375  return 0;
376 }
377 
378 Addr
380 {
381  return ((Addr)gpuNum << 61) + 0x1000000000000L;
382 }
383 
384 Addr
386 {
387  return (apeBase & 0xFFFFFF0000000000UL) | 0xFFFFFFFFFFL;
388 }
389 
390 Addr
392 {
393  return ((Addr)gpuNum << 61) + 0x100000000L;
394 }
395 
396 Addr
398 {
399  return (apeBase & 0xFFFFFFFF00000000UL) | 0xFFFFFFFF;
400 }
401 
402 Addr
404 {
405  return ((Addr)gpuNum << 61) + 0x0;
406 }
407 
408 Addr
410 {
411  return (apeBase & 0xFFFFFFFF00000000UL) | 0xFFFFFFFF;
412 }
413 
415 GPUComputeDriverParams::create()
416 {
417  return new GPUComputeDriver(this);
418 }
kfd_ioctl_get_version_args::minor_version
uint32_t minor_version
Definition: kfd_ioctl.h:34
GPUComputeDriver::scratchApeLimit
Addr scratchApeLimit(Addr apeBase) const
Definition: gpu_compute_driver.cc:397
fatal
#define fatal(...)
This implements a cprintf based fatal() function.
Definition: logging.hh:183
AMDKFD_IOC_MAP_MEMORY_TO_GPU
#define AMDKFD_IOC_MAP_MEMORY_TO_GPU
Definition: kfd_ioctl.h:489
X86ISA::L
Bitfield< 7, 0 > L
Definition: int.hh:57
SimClock::Int::ns
Tick ns
nanosecond
Definition: core.cc:65
warn
#define warn(...)
Definition: logging.hh:239
kfd_ioctl_get_process_apertures_new_args::kfd_process_device_apertures_ptr
uint64_t kfd_process_device_apertures_ptr
Definition: kfd_ioctl.h:153
kfd_process_device_apertures::gpuvm_limit
uint64_t gpuvm_limit
Definition: kfd_ioctl.h:131
GPUComputeDriver::ldsApeBase
Addr ldsApeBase(int gpuNum) const
Definition: gpu_compute_driver.cc:403
AMDKFD_IOC_GET_TILE_CONFIG
#define AMDKFD_IOC_GET_TILE_CONFIG
Definition: kfd_ioctl.h:517
kfd_process_device_apertures::lds_base
uint64_t lds_base
Definition: kfd_ioctl.h:126
ArmISA::i
Bitfield< 7 > i
Definition: miscregs_types.hh:63
AMDKFD_IOC_DBG_WAVE_CONTROL
#define AMDKFD_IOC_DBG_WAVE_CONTROL
Definition: kfd_ioctl.h:480
AMDKFD_IOC_FREE_MEMORY_OF_GPU
#define AMDKFD_IOC_FREE_MEMORY_OF_GPU
Definition: kfd_ioctl.h:486
hsa_packet_processor.hh
AMDKFD_IOC_DESTROY_EVENT
#define AMDKFD_IOC_DESTROY_EVENT
Definition: kfd_ioctl.h:459
AMDKFD_IOC_IPC_EXPORT_HANDLE
#define AMDKFD_IOC_IPC_EXPORT_HANDLE
Definition: kfd_ioctl.h:523
kfd_ioctl_get_clock_counters_args::system_clock_counter
uint64_t system_clock_counter
Definition: kfd_ioctl.h:116
kfd_ioctl_get_process_apertures_args::process_apertures
struct kfd_process_device_apertures process_apertures[NUM_OF_SUPPORTED_GPUS]
Definition: kfd_ioctl.h:141
kfd_process_device_apertures::gpu_id
uint32_t gpu_id
Definition: kfd_ioctl.h:132
syscall_emul_buf.hh
AMDKFD_IOC_GET_VERSION
#define AMDKFD_IOC_GET_VERSION
Definition: kfd_ioctl.h:435
AMDKFD_IOC_CROSS_MEMORY_COPY
#define AMDKFD_IOC_CROSS_MEMORY_COPY
Definition: kfd_ioctl.h:526
kfd_ioctl_get_clock_counters_args::system_clock_freq
uint64_t system_clock_freq
Definition: kfd_ioctl.h:117
kfd_ioctl_get_clock_counters_args::gpu_clock_counter
uint64_t gpu_clock_counter
Definition: kfd_ioctl.h:114
AMDKFD_IOC_SET_EVENT
#define AMDKFD_IOC_SET_EVENT
Definition: kfd_ioctl.h:462
kfd_ioctl_get_clock_counters_args::cpu_clock_counter
uint64_t cpu_clock_counter
Definition: kfd_ioctl.h:115
GPUComputeDriver
Definition: gpu_compute_driver.hh:52
AMDKFD_IOC_GET_PROCESS_APERTURES
#define AMDKFD_IOC_GET_PROCESS_APERTURES
Definition: kfd_ioctl.h:450
AMDKFD_IOC_SET_TRAP_HANDLER
#define AMDKFD_IOC_SET_TRAP_HANDLER
Definition: kfd_ioctl.h:505
GPUComputeDriver::Params
GPUComputeDriverParams Params
Definition: gpu_compute_driver.hh:55
AMDKFD_IOC_DBG_REGISTER
#define AMDKFD_IOC_DBG_REGISTER
Definition: kfd_ioctl.h:471
GPUComputeDriver::ldsApeLimit
Addr ldsApeLimit(Addr apeBase) const
Definition: gpu_compute_driver.cc:409
ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU.
Definition: thread_context.hh:88
HSADriver::queueId
uint32_t queueId
Definition: hsa_driver.hh:75
kfd_ioctl_get_process_apertures_args::num_of_nodes
uint32_t num_of_nodes
Definition: kfd_ioctl.h:145
DPRINTF
#define DPRINTF(x,...)
Definition: trace.hh:234
GPUComputeDriver::gpuVmApeLimit
Addr gpuVmApeLimit(Addr apeBase) const
Definition: gpu_compute_driver.cc:385
GPUComputeDriver::scratchApeBase
Addr scratchApeBase(int gpuNum) const
Definition: gpu_compute_driver.cc:391
AMDKFD_IOC_SET_CU_MASK
#define AMDKFD_IOC_SET_CU_MASK
Definition: kfd_ioctl.h:498
AMDKFD_IOC_IPC_IMPORT_HANDLE
#define AMDKFD_IOC_IPC_IMPORT_HANDLE
Definition: kfd_ioctl.h:520
HSAPacketProcessor::unsetDeviceQueueDesc
void unsetDeviceQueueDesc(uint64_t queue_id)
Definition: hsa_packet_processor.cc:93
kfd_process_device_apertures::gpuvm_base
uint64_t gpuvm_base
Definition: kfd_ioctl.h:130
AMDKFD_IOC_RESET_EVENT
#define AMDKFD_IOC_RESET_EVENT
Definition: kfd_ioctl.h:465
GPUComputeDriver::GPUComputeDriver
GPUComputeDriver(Params *p)
Definition: gpu_compute_driver.cc:47
AMDKFD_IOC_DBG_ADDRESS_WATCH
#define AMDKFD_IOC_DBG_ADDRESS_WATCH
Definition: kfd_ioctl.h:477
GPUComputeDriver::ioctl
int ioctl(ThreadContext *tc, unsigned req, Addr ioc_buf) override
Abstract method, invoked when the user program calls ioctl() on the file descriptor returned by a pre...
Definition: gpu_compute_driver.cc:54
kfd_process_device_apertures::scratch_limit
uint64_t scratch_limit
Definition: kfd_ioctl.h:129
Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
kfd_ioctl_get_version_args::major_version
uint32_t major_version
Definition: kfd_ioctl.h:33
GPUComputeDriver::gpuVmApeBase
Addr gpuVmApeBase(int gpuNum) const
The aperture (APE) base/limit pairs are set statically at startup by the real KFD.
Definition: gpu_compute_driver.cc:379
BaseBufferArg::copyIn
bool copyIn(PortProxy &memproxy)
copy data into simulator space (read from target memory)
Definition: syscall_emul_buf.hh:77
AMDKFD_IOC_IMPORT_DMABUF
#define AMDKFD_IOC_IMPORT_DMABUF
Definition: kfd_ioctl.h:514
ThreadContext::getVirtProxy
virtual PortProxy & getVirtProxy()=0
HSADevice::hsaPacketProc
HSAPacketProcessor & hsaPacketProc()
Definition: hsa_device.cc:45
AMDKFD_IOC_CREATE_EVENT
#define AMDKFD_IOC_CREATE_EVENT
Definition: kfd_ioctl.h:456
AMDKFD_IOC_DESTROY_QUEUE
#define AMDKFD_IOC_DESTROY_QUEUE
Definition: kfd_ioctl.h:441
AMDKFD_IOC_UNMAP_MEMORY_FROM_GPU
#define AMDKFD_IOC_UNMAP_MEMORY_FROM_GPU
Definition: kfd_ioctl.h:492
AMDKFD_IOC_ALLOC_MEMORY_OF_SCRATCH
#define AMDKFD_IOC_ALLOC_MEMORY_OF_SCRATCH
Definition: kfd_ioctl.h:495
AMDKFD_IOC_SET_MEMORY_POLICY
#define AMDKFD_IOC_SET_MEMORY_POLICY
Definition: kfd_ioctl.h:444
AMDKFD_IOC_WAIT_EVENTS
#define AMDKFD_IOC_WAIT_EVENTS
Definition: kfd_ioctl.h:468
AMDKFD_IOC_OPEN_GRAPHIC_HANDLE
#define AMDKFD_IOC_OPEN_GRAPHIC_HANDLE
Definition: kfd_ioctl.h:530
AMDKFD_IOC_DBG_UNREGISTER
#define AMDKFD_IOC_DBG_UNREGISTER
Definition: kfd_ioctl.h:474
TypedBufferArg
TypedBufferArg is a class template; instances of this template represent typed buffers in target user...
Definition: syscall_emul_buf.hh:128
HSADriver
Definition: hsa_driver.hh:62
kfd_process_device_apertures::scratch_base
uint64_t scratch_base
Definition: kfd_ioctl.h:128
AMDKFD_IOC_UPDATE_QUEUE
#define AMDKFD_IOC_UPDATE_QUEUE
Definition: kfd_ioctl.h:453
gpu_compute_driver.hh
MipsISA::p
Bitfield< 0 > p
Definition: pra_constants.hh:323
HSADriver::device
HSADevice * device
HSA agent (device) that is controled by this driver.
Definition: hsa_driver.hh:74
AMDKFD_IOC_GET_PROCESS_APERTURES_NEW
#define AMDKFD_IOC_GET_PROCESS_APERTURES_NEW
Definition: kfd_ioctl.h:508
hsa_device.hh
HSADriver::allocateQueue
void allocateQueue(ThreadContext *tc, Addr ioc_buf)
Forward relevant parameters to packet processor; queueID is used to link doorbell.
Definition: hsa_driver.cc:105
AMDKFD_IOC_SET_PROCESS_DGPU_APERTURE
#define AMDKFD_IOC_SET_PROCESS_DGPU_APERTURE
Definition: kfd_ioctl.h:501
kfd_ioctl.h
kfd_process_device_apertures::lds_limit
uint64_t lds_limit
Definition: kfd_ioctl.h:127
kfd_ioctl_destroy_queue_args::queue_id
uint32_t queue_id
Definition: kfd_ioctl.h:66
thread_context.hh
AMDKFD_IOC_ALLOC_MEMORY_OF_GPU
#define AMDKFD_IOC_ALLOC_MEMORY_OF_GPU
Definition: kfd_ioctl.h:483
kfd_ioctl_get_process_apertures_new_args::num_of_nodes
uint32_t num_of_nodes
Definition: kfd_ioctl.h:158
AMDKFD_IOC_CREATE_QUEUE
#define AMDKFD_IOC_CREATE_QUEUE
Definition: kfd_ioctl.h:438
BaseBufferArg::copyOut
bool copyOut(PortProxy &memproxy)
copy data out of simulator space (write to target memory)
Definition: syscall_emul_buf.hh:87
AMDKFD_IOC_GET_CLOCK_COUNTERS
#define AMDKFD_IOC_GET_CLOCK_COUNTERS
Definition: kfd_ioctl.h:447
curTick
Tick curTick()
The current simulated tick.
Definition: core.hh:45
AMDKFD_IOC_GET_DMABUF_INFO
#define AMDKFD_IOC_GET_DMABUF_INFO
Definition: kfd_ioctl.h:511

Generated on Wed Sep 30 2020 14:02:12 for gem5 by doxygen 1.8.17