The ROme OpTimistic Simulator  2.0.0
A General-Purpose Multithreaded Parallel/Distributed Simulation Platform
cross_state_manager.h
Go to the documentation of this file.
1 
35 #pragma once
36 
37 //#ifdef HAVE_CROSS_STATE
38 
39 #include <linux/ioctl.h>
40 
41 #define CROSS_STATE_IOCTL_MAGIC 'R'
42 
43 /* core user defined parameters */
44 #define SIBLING_PGD 128 // max number of concurrent memory views (concurrent root-sim worker threads on a node)
45 #define MAX_CROSS_STATE_DEPENDENCIES 1024 // max number of cross-state dependencied per LP at each event
46 
47 #ifndef IOCTL_STRUCT
48 #define IOCTL_STRUCT
49 
50 typedef struct _ioctl_info{
51  int ds;
52  void *addr;
53  int id;
54  unsigned int count;
55  unsigned int *objects;
56  unsigned mapped_processes;
57 
58  ulong callback;
59 
60  void *base_address;
61  int page_count;
62  int write_mode;
63 } ioctl_info;
64 
65 #endif
66 
67 
68 #define ECS_MAJOR_FAULT 0
69 #define ECS_MINOR_FAULT 1
70 #define ECS_CHANGE_PAGE_PRIVILEGE 2
71 
72 typedef struct _fault_info_t {
73  long long rcx;
74  long long rip;
75  long long target_address;
76  unsigned long target_gid;
77  unsigned char fault_type;
78 } fault_info_t;
79 
80 // Setup all ioctl commands
81 #define IOCTL_GET_PGD _IOW(CROSS_STATE_IOCTL_MAGIC, 1, void *)
82 #define IOCTL_SET_ANCESTOR_PGD _IO(CROSS_STATE_IOCTL_MAGIC, 2)
83 #define IOCTL_SET_VM_RANGE _IOW(CROSS_STATE_IOCTL_MAGIC, 3, ioctl_info *)
84 #define IOCTL_SCHEDULE_ON_PGD _IOW(CROSS_STATE_IOCTL_MAGIC, 4, ioctl_info *)
85 #define IOCTL_UNSCHEDULE_ON_PGD _IOW(CROSS_STATE_IOCTL_MAGIC, 5, int)
86 #define IOCTL_SET_PAGE_PRIVILEGE _IOW(CROSS_STATE_IOCTL_MAGIC, 6, int)
87 #define IOCTL_PROTECT_REMOTE_LP _IOW(CROSS_STATE_IOCTL_MAGIC, 7, int)
88 
89 // Macros to access subportions of an address
90 #define PML4(addr) (((long long)(addr) >> 39) & 0x1ff)
91 #define PDP(addr) (((long long)(addr) >> 30) & 0x1ff)
92 #define PDE(addr) (((long long)(addr) >> 21) & 0x1ff)
93 #define PTE(addr) (((long long)(addr) >> 12) & 0x1ff)
94 
95 #define OBJECT_TO_PML4(object_id) ((ulong)object_id >> 9 )
96 #define OBJECT_TO_PDP(object_id) ((ulong)object_id & 0x1ff)
97 #define GET_ADDRESS(addr) ( (((long long)(addr)) & ((1LL << 40) - 1)) >> 12)
98 #define PML4_PLUS_ONE(addr) (void *)((long long)(addr) + (1LL << 39))
99 
100 #define MASK_PTADDR 0x07FFFFFFFFFFF000
101 #define MASK_PTCONT 0xF800000000000FFF
102 
103 //#endif /* HAVE_CROSS_STATE */