open(): record private_data

Conflicts:
	kernel/syscall.c
This commit is contained in:
Balazs Gerofi
2017-07-25 11:58:22 +09:00
parent b9b4a4fe36
commit b2c8cc50dc
4 changed files with 21 additions and 0 deletions

View File

@ -191,6 +191,7 @@ struct syscall_response {
long ret;
unsigned long fault_address;
unsigned long fault_reason;
void *private_data;
};
struct syscall_ret_desc {

View File

@ -2065,6 +2065,17 @@ void __return_syscall(ihk_os_t os, struct ikc_scd_packet *packet,
/* Map response structure and notify offloading thread */
res->ret = ret;
res->stid = stid;
res->private_data = 0;
/* Special case for open() to return private_data */
if (packet->req.number == __NR_open && ret > 0) {
struct fd f;
f = fdget(ret);
if (f.file) {
res->private_data = f.file->private_data;
fdput(f);
}
}
if (__notify_syscall_requester(os, packet, res) < 0) {
printk("%s: WARNING: failed to notify PID %d\n",

View File

@ -294,6 +294,7 @@ struct syscall_response {
long ret;
unsigned long fault_address;
unsigned long fault_reason;
void *private_data;
};
struct syscall_post {

View File

@ -268,6 +268,7 @@ long do_syscall(struct syscall_request *req, int cpu, int pid)
req->rtid = cpu_local_var(current)->tid;
req->ttid = 0;
res.req_thread_status = IHK_SCD_REQ_THREAD_SPINNING;
res.private_data = NULL;
#ifdef POSTK_DEBUG_TEMP_FIX_26 /* do_syscall arg pid is not targetpid */
send_syscall(req, cpu, target_pid, &res);
#else /* POSTK_DEBUG_TEMP_FIX_26 */
@ -477,6 +478,13 @@ long do_syscall(struct syscall_request *req, int cpu, int pid)
}
#endif // PROFILE_ENABLE
if (req->number == __NR_open && rc > 0) {
if (res.private_data) {
kprintf("%s: open fd: %d, private_data: 0x%lx\n",
__FUNCTION__, rc, res.private_data);
}
}
monitor->status = mstatus;
monitor->counter++;
return rc;