uti: futex call function in mcctrl

Previously, futex code of McKerenl was called by mccontrol,
but there ware some problems with this method.
(Mainly, location of McKernel image on memory)

Call futex code in mcctrl instead of the one in McKernel image,
giving the following benefits:
1. Not relying on shared kernel virtual address space with Linux any more
2. The cpu id store / retrieve is not needed and resulting in the code

Change-Id: Ic40929b64a655b270c435859fa287fedb713ee5c
refe: #1428
This commit is contained in:
Ken Sato
2020-09-18 14:42:26 +09:00
committed by Masamichi Takagi
parent 35296c8210
commit a9973e913d
62 changed files with 4320 additions and 1116 deletions

View File

@ -5,7 +5,7 @@ struct syscall_struct {
int number;
unsigned long args[6];
unsigned long ret;
unsigned long uti_clv; /* copy of a clv in McKernel */
unsigned long uti_info; /* reference to data in McKernel */
};
#define UTI_SZ_SYSCALL_STACK 16
@ -17,7 +17,7 @@ struct uti_desc {
int mck_tid; /* TODO: Move this out for multiple migrated-to-Linux threads */
unsigned long key; /* struct task_struct* of mcexec thread, used to search struct host_thread */
int pid, tid; /* Used as the id of tracee when issuing MCEXEC_UP_TERMINATE_THREAD */
unsigned long uti_clv; /* copy of McKernel clv */
unsigned long uti_info; /* reference to data in McKernel */
int fd; /* /dev/mcosX */
struct syscall_struct syscall_stack[UTI_SZ_SYSCALL_STACK]; /* stack of system call arguments and return values */
@ -26,6 +26,36 @@ struct uti_desc {
int start_syscall_intercept; /* Used to sync between mcexec.c and syscall_intercept.c */
};
/* Reference to McKernel variables accessed by mcctrl */
struct uti_info {
/* clv info */
unsigned long thread_va;
void *uti_futex_resp;
void *ikc2linux;
unsigned long uti_futex_resp_pa;
unsigned long ikc2linux_pa;
/* thread info */
int tid;
int cpu;
void *status;
void *spin_sleep_lock;
void *spin_sleep;
void *vm;
void *futex_q;
unsigned long status_pa;
unsigned long spin_sleep_lock_pa;
unsigned long spin_sleep_pa;
unsigned long vm_pa;
unsigned long futex_q_pa;
/* global info */
int mc_idle_halt;
void *futex_queue;
void *os; // set by mcctrl
unsigned long futex_queue_pa;
};
#endif