svn commit: r362886 - head/sys/compat/linuxkpi/common/src
Konstantin Belousov
kib at FreeBSD.org
Thu Jul 2 10:42:59 UTC 2020
Author: kib
Date: Thu Jul 2 10:42:58 2020
New Revision: 362886
URL: https://svnweb.freebsd.org/changeset/base/362886
Log:
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
Modified:
head/sys/compat/linuxkpi/common/src/linux_current.c
Modified: head/sys/compat/linuxkpi/common/src/linux_current.c
==============================================================================
--- head/sys/compat/linuxkpi/common/src/linux_current.c Thu Jul 2 10:40:47 2020 (r362885)
+++ head/sys/compat/linuxkpi/common/src/linux_current.c Thu Jul 2 10:42:58 2020 (r362886)
@@ -155,65 +155,52 @@ linuxkpi_thread_dtor(void *arg __unused, struct thread
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_get_pid_task(pid_t pid)
+linux_pid_task(pid_t pid)
{
- struct thread *td;
- struct proc *p;
+ return (linux_get_pid_task_int(pid, false));
+}
- /* 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);
+struct task_struct *
+linux_get_pid_task(pid_t pid)
+{
+ return (linux_get_pid_task_int(pid, true));
}
bool
More information about the svn-src-head
mailing list