diff --git a/kernel/include/process.h b/kernel/include/process.h index 9d0c743e..b3f5f7a1 100644 --- a/kernel/include/process.h +++ b/kernel/include/process.h @@ -282,7 +282,7 @@ void check_need_resched(void); void cpu_set(int cpu, cpu_set_t *cpu_set, ihk_spinlock_t *lock); void cpu_clear(int cpu, cpu_set_t *cpu_set, ihk_spinlock_t *lock); -struct process *findthread_and_lock(int pid, int tid, void *savelock, unsigned long *irqstate); +struct process *findthread_and_lock(int pid, int tid, ihk_spinlock_t **savelock, unsigned long *irqstate); void process_unlock(void *savelock, unsigned long irqstate); #endif diff --git a/kernel/process.c b/kernel/process.c index c6430c43..012a809e 100644 --- a/kernel/process.c +++ b/kernel/process.c @@ -2066,7 +2066,7 @@ void runq_del_proc(struct process *proc, int cpu_id) } struct process * -findthread_and_lock(int pid, int tid, void *savelock, unsigned long *irqstate) +findthread_and_lock(int pid, int tid, ihk_spinlock_t **savelock, unsigned long *irqstate) { struct cpu_local_var *v; struct process *p; @@ -2075,11 +2075,11 @@ findthread_and_lock(int pid, int tid, void *savelock, unsigned long *irqstate) for(i = 0; i < num_processors; i++){ v = get_cpu_local_var(i); - *(ihk_spinlock_t **)savelock = &(v->runq_lock); + *savelock = &(v->runq_lock); *irqstate = ihk_mc_spinlock_lock(&(v->runq_lock)); list_for_each_entry(p, &(v->runq), sched_list){ if(p->pid == pid && - p->tid == tid){ + (tid == -1 || p->tid == tid)){ return p; } } diff --git a/kernel/procfs.c b/kernel/procfs.c index e7ddb73d..08acf7c0 100644 --- a/kernel/procfs.c +++ b/kernel/procfs.c @@ -200,7 +200,7 @@ void process_procfs_request(unsigned long rarg) int rosnum, ret, pid, tid, ans = -EIO, eof = 0; char *buf, *p; struct ihk_ikc_channel_desc *syscall_channel; - void *savelock; + ihk_spinlock_t *savelock; unsigned long irqstate; dprintf("process_procfs_request: invoked.\n");