linuxkpi: improvements for linux_pid_task() and linux_get_pid_task().
Unify functions bodies. Do not call tdfind() if pid is passed, and do not call pfind() if tid is supplied. Reviewed by: hselasky Sponsored by: Mellanox Technologies MFC after: 1 week Differential revision: https://reviews.freebsd.org/D25534
This commit is contained in:
parent
4bc5ce2c74
commit
f334f212d9
@ -155,65 +155,52 @@ linuxkpi_thread_dtor(void *arg __unused, struct thread *td)
|
||||
put_task_struct(ts);
|
||||
}
|
||||
|
||||
struct task_struct *
|
||||
linux_pid_task(pid_t pid)
|
||||
static struct task_struct *
|
||||
linux_get_pid_task_int(pid_t pid, const bool do_get)
|
||||
{
|
||||
struct thread *td;
|
||||
struct proc *p;
|
||||
struct task_struct *ts;
|
||||
|
||||
/* try to find corresponding thread */
|
||||
td = tdfind(pid, -1);
|
||||
if (td != NULL) {
|
||||
struct task_struct *ts = td->td_lkpi_task;
|
||||
PROC_UNLOCK(td->td_proc);
|
||||
return (ts);
|
||||
}
|
||||
|
||||
/* try to find corresponding procedure */
|
||||
p = pfind(pid);
|
||||
if (p != NULL) {
|
||||
FOREACH_THREAD_IN_PROC(p, td) {
|
||||
struct task_struct *ts = td->td_lkpi_task;
|
||||
if (ts != NULL) {
|
||||
PROC_UNLOCK(p);
|
||||
return (ts);
|
||||
}
|
||||
if (pid > PID_MAX) {
|
||||
/* try to find corresponding thread */
|
||||
td = tdfind(pid, -1);
|
||||
if (td != NULL) {
|
||||
ts = td->td_lkpi_task;
|
||||
if (do_get && ts != NULL)
|
||||
get_task_struct(ts);
|
||||
PROC_UNLOCK(td->td_proc);
|
||||
return (ts);
|
||||
}
|
||||
} else {
|
||||
/* try to find corresponding procedure */
|
||||
p = pfind(pid);
|
||||
if (p != NULL) {
|
||||
FOREACH_THREAD_IN_PROC(p, td) {
|
||||
ts = td->td_lkpi_task;
|
||||
if (ts != NULL) {
|
||||
if (do_get)
|
||||
get_task_struct(ts);
|
||||
PROC_UNLOCK(p);
|
||||
return (ts);
|
||||
}
|
||||
}
|
||||
PROC_UNLOCK(p);
|
||||
}
|
||||
PROC_UNLOCK(p);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
struct task_struct *
|
||||
linux_pid_task(pid_t pid)
|
||||
{
|
||||
return (linux_get_pid_task_int(pid, false));
|
||||
}
|
||||
|
||||
struct task_struct *
|
||||
linux_get_pid_task(pid_t pid)
|
||||
{
|
||||
struct thread *td;
|
||||
struct proc *p;
|
||||
|
||||
/* try to find corresponding thread */
|
||||
td = tdfind(pid, -1);
|
||||
if (td != NULL) {
|
||||
struct task_struct *ts = td->td_lkpi_task;
|
||||
if (ts != NULL)
|
||||
get_task_struct(ts);
|
||||
PROC_UNLOCK(td->td_proc);
|
||||
return (ts);
|
||||
}
|
||||
|
||||
/* try to find corresponding procedure */
|
||||
p = pfind(pid);
|
||||
if (p != NULL) {
|
||||
FOREACH_THREAD_IN_PROC(p, td) {
|
||||
struct task_struct *ts = td->td_lkpi_task;
|
||||
if (ts != NULL) {
|
||||
get_task_struct(ts);
|
||||
PROC_UNLOCK(p);
|
||||
return (ts);
|
||||
}
|
||||
}
|
||||
PROC_UNLOCK(p);
|
||||
}
|
||||
return (NULL);
|
||||
return (linux_get_pid_task_int(pid, true));
|
||||
}
|
||||
|
||||
bool
|
||||
|
Loading…
Reference in New Issue
Block a user