open(): record private_data
Conflicts: kernel/syscall.c
This commit is contained in:
@ -191,6 +191,7 @@ struct syscall_response {
|
|||||||
long ret;
|
long ret;
|
||||||
unsigned long fault_address;
|
unsigned long fault_address;
|
||||||
unsigned long fault_reason;
|
unsigned long fault_reason;
|
||||||
|
void *private_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct syscall_ret_desc {
|
struct syscall_ret_desc {
|
||||||
|
|||||||
@ -2065,6 +2065,17 @@ void __return_syscall(ihk_os_t os, struct ikc_scd_packet *packet,
|
|||||||
/* Map response structure and notify offloading thread */
|
/* Map response structure and notify offloading thread */
|
||||||
res->ret = ret;
|
res->ret = ret;
|
||||||
res->stid = stid;
|
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) {
|
if (__notify_syscall_requester(os, packet, res) < 0) {
|
||||||
printk("%s: WARNING: failed to notify PID %d\n",
|
printk("%s: WARNING: failed to notify PID %d\n",
|
||||||
|
|||||||
@ -294,6 +294,7 @@ struct syscall_response {
|
|||||||
long ret;
|
long ret;
|
||||||
unsigned long fault_address;
|
unsigned long fault_address;
|
||||||
unsigned long fault_reason;
|
unsigned long fault_reason;
|
||||||
|
void *private_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct syscall_post {
|
struct syscall_post {
|
||||||
|
|||||||
@ -268,6 +268,7 @@ long do_syscall(struct syscall_request *req, int cpu, int pid)
|
|||||||
req->rtid = cpu_local_var(current)->tid;
|
req->rtid = cpu_local_var(current)->tid;
|
||||||
req->ttid = 0;
|
req->ttid = 0;
|
||||||
res.req_thread_status = IHK_SCD_REQ_THREAD_SPINNING;
|
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 */
|
#ifdef POSTK_DEBUG_TEMP_FIX_26 /* do_syscall arg pid is not targetpid */
|
||||||
send_syscall(req, cpu, target_pid, &res);
|
send_syscall(req, cpu, target_pid, &res);
|
||||||
#else /* POSTK_DEBUG_TEMP_FIX_26 */
|
#else /* POSTK_DEBUG_TEMP_FIX_26 */
|
||||||
@ -477,6 +478,13 @@ long do_syscall(struct syscall_request *req, int cpu, int pid)
|
|||||||
}
|
}
|
||||||
#endif // PROFILE_ENABLE
|
#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->status = mstatus;
|
||||||
monitor->counter++;
|
monitor->counter++;
|
||||||
return rc;
|
return rc;
|
||||||
|
|||||||
Reference in New Issue
Block a user