mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
sched.h: move pid helpers to pid.h
This is needed for killing the sched.h dependency on rcupdate.h, and pid.h is a better place for this code anyways. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
6d5e9d6368
commit
f551103cb9
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
#include <linux/pid.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/sched/debug.h>
|
#include <linux/sched/debug.h>
|
||||||
#include <linux/utsname.h>
|
#include <linux/utsname.h>
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0 OR MIT
|
// SPDX-License-Identifier: GPL-2.0 OR MIT
|
||||||
/* Copyright 2018-2019 Qiang Yu <yuq825@gmail.com> */
|
/* Copyright 2018-2019 Qiang Yu <yuq825@gmail.com> */
|
||||||
|
|
||||||
|
#include <linux/pid.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
|
||||||
#include "lima_device.h"
|
#include "lima_device.h"
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/irqdomain.h>
|
#include <linux/irqdomain.h>
|
||||||
#include <linux/msi.h>
|
#include <linux/msi.h>
|
||||||
|
#include <linux/pid.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
|
|
||||||
#include <linux/irqchip/arm-gic-v4.h>
|
#include <linux/irqchip/arm-gic-v4.h>
|
||||||
|
@ -4,7 +4,9 @@
|
|||||||
|
|
||||||
#include <linux/pid_types.h>
|
#include <linux/pid_types.h>
|
||||||
#include <linux/rculist.h>
|
#include <linux/rculist.h>
|
||||||
|
#include <linux/rcupdate.h>
|
||||||
#include <linux/refcount.h>
|
#include <linux/refcount.h>
|
||||||
|
#include <linux/sched.h>
|
||||||
#include <linux/wait.h>
|
#include <linux/wait.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -204,4 +206,127 @@ pid_t pid_vnr(struct pid *pid);
|
|||||||
} \
|
} \
|
||||||
task = tg___; \
|
task = tg___; \
|
||||||
} while_each_pid_task(pid, type, task)
|
} while_each_pid_task(pid, type, task)
|
||||||
|
|
||||||
|
static inline struct pid *task_pid(struct task_struct *task)
|
||||||
|
{
|
||||||
|
return task->thread_pid;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the helpers to get the task's different pids as they are seen
|
||||||
|
* from various namespaces
|
||||||
|
*
|
||||||
|
* task_xid_nr() : global id, i.e. the id seen from the init namespace;
|
||||||
|
* task_xid_vnr() : virtual id, i.e. the id seen from the pid namespace of
|
||||||
|
* current.
|
||||||
|
* task_xid_nr_ns() : id seen from the ns specified;
|
||||||
|
*
|
||||||
|
* see also pid_nr() etc in include/linux/pid.h
|
||||||
|
*/
|
||||||
|
pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type, struct pid_namespace *ns);
|
||||||
|
|
||||||
|
static inline pid_t task_pid_nr(struct task_struct *tsk)
|
||||||
|
{
|
||||||
|
return tsk->pid;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline pid_t task_pid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns)
|
||||||
|
{
|
||||||
|
return __task_pid_nr_ns(tsk, PIDTYPE_PID, ns);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline pid_t task_pid_vnr(struct task_struct *tsk)
|
||||||
|
{
|
||||||
|
return __task_pid_nr_ns(tsk, PIDTYPE_PID, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static inline pid_t task_tgid_nr(struct task_struct *tsk)
|
||||||
|
{
|
||||||
|
return tsk->tgid;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pid_alive - check that a task structure is not stale
|
||||||
|
* @p: Task structure to be checked.
|
||||||
|
*
|
||||||
|
* Test if a process is not yet dead (at most zombie state)
|
||||||
|
* If pid_alive fails, then pointers within the task structure
|
||||||
|
* can be stale and must not be dereferenced.
|
||||||
|
*
|
||||||
|
* Return: 1 if the process is alive. 0 otherwise.
|
||||||
|
*/
|
||||||
|
static inline int pid_alive(const struct task_struct *p)
|
||||||
|
{
|
||||||
|
return p->thread_pid != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline pid_t task_pgrp_nr_ns(struct task_struct *tsk, struct pid_namespace *ns)
|
||||||
|
{
|
||||||
|
return __task_pid_nr_ns(tsk, PIDTYPE_PGID, ns);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline pid_t task_pgrp_vnr(struct task_struct *tsk)
|
||||||
|
{
|
||||||
|
return __task_pid_nr_ns(tsk, PIDTYPE_PGID, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static inline pid_t task_session_nr_ns(struct task_struct *tsk, struct pid_namespace *ns)
|
||||||
|
{
|
||||||
|
return __task_pid_nr_ns(tsk, PIDTYPE_SID, ns);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline pid_t task_session_vnr(struct task_struct *tsk)
|
||||||
|
{
|
||||||
|
return __task_pid_nr_ns(tsk, PIDTYPE_SID, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline pid_t task_tgid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns)
|
||||||
|
{
|
||||||
|
return __task_pid_nr_ns(tsk, PIDTYPE_TGID, ns);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline pid_t task_tgid_vnr(struct task_struct *tsk)
|
||||||
|
{
|
||||||
|
return __task_pid_nr_ns(tsk, PIDTYPE_TGID, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline pid_t task_ppid_nr_ns(const struct task_struct *tsk, struct pid_namespace *ns)
|
||||||
|
{
|
||||||
|
pid_t pid = 0;
|
||||||
|
|
||||||
|
rcu_read_lock();
|
||||||
|
if (pid_alive(tsk))
|
||||||
|
pid = task_tgid_nr_ns(rcu_dereference(tsk->real_parent), ns);
|
||||||
|
rcu_read_unlock();
|
||||||
|
|
||||||
|
return pid;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline pid_t task_ppid_nr(const struct task_struct *tsk)
|
||||||
|
{
|
||||||
|
return task_ppid_nr_ns(tsk, &init_pid_ns);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Obsolete, do not use: */
|
||||||
|
static inline pid_t task_pgrp_nr(struct task_struct *tsk)
|
||||||
|
{
|
||||||
|
return task_pgrp_nr_ns(tsk, &init_pid_ns);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* is_global_init - check if a task structure is init. Since init
|
||||||
|
* is free to have sub-threads we need to check tgid.
|
||||||
|
* @tsk: Task structure to be checked.
|
||||||
|
*
|
||||||
|
* Check if a task structure is the first user space task the kernel created.
|
||||||
|
*
|
||||||
|
* Return: 1 if the task structure is init. 0 otherwise.
|
||||||
|
*/
|
||||||
|
static inline int is_global_init(struct task_struct *tsk)
|
||||||
|
{
|
||||||
|
return task_tgid_nr(tsk) == 1;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _LINUX_PID_H */
|
#endif /* _LINUX_PID_H */
|
||||||
|
@ -1561,114 +1561,6 @@ struct task_struct {
|
|||||||
*/
|
*/
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline struct pid *task_pid(struct task_struct *task)
|
|
||||||
{
|
|
||||||
return task->thread_pid;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* the helpers to get the task's different pids as they are seen
|
|
||||||
* from various namespaces
|
|
||||||
*
|
|
||||||
* task_xid_nr() : global id, i.e. the id seen from the init namespace;
|
|
||||||
* task_xid_vnr() : virtual id, i.e. the id seen from the pid namespace of
|
|
||||||
* current.
|
|
||||||
* task_xid_nr_ns() : id seen from the ns specified;
|
|
||||||
*
|
|
||||||
* see also pid_nr() etc in include/linux/pid.h
|
|
||||||
*/
|
|
||||||
pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type, struct pid_namespace *ns);
|
|
||||||
|
|
||||||
static inline pid_t task_pid_nr(struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
return tsk->pid;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline pid_t task_pid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns)
|
|
||||||
{
|
|
||||||
return __task_pid_nr_ns(tsk, PIDTYPE_PID, ns);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline pid_t task_pid_vnr(struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
return __task_pid_nr_ns(tsk, PIDTYPE_PID, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static inline pid_t task_tgid_nr(struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
return tsk->tgid;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* pid_alive - check that a task structure is not stale
|
|
||||||
* @p: Task structure to be checked.
|
|
||||||
*
|
|
||||||
* Test if a process is not yet dead (at most zombie state)
|
|
||||||
* If pid_alive fails, then pointers within the task structure
|
|
||||||
* can be stale and must not be dereferenced.
|
|
||||||
*
|
|
||||||
* Return: 1 if the process is alive. 0 otherwise.
|
|
||||||
*/
|
|
||||||
static inline int pid_alive(const struct task_struct *p)
|
|
||||||
{
|
|
||||||
return p->thread_pid != NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline pid_t task_pgrp_nr_ns(struct task_struct *tsk, struct pid_namespace *ns)
|
|
||||||
{
|
|
||||||
return __task_pid_nr_ns(tsk, PIDTYPE_PGID, ns);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline pid_t task_pgrp_vnr(struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
return __task_pid_nr_ns(tsk, PIDTYPE_PGID, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static inline pid_t task_session_nr_ns(struct task_struct *tsk, struct pid_namespace *ns)
|
|
||||||
{
|
|
||||||
return __task_pid_nr_ns(tsk, PIDTYPE_SID, ns);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline pid_t task_session_vnr(struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
return __task_pid_nr_ns(tsk, PIDTYPE_SID, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline pid_t task_tgid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns)
|
|
||||||
{
|
|
||||||
return __task_pid_nr_ns(tsk, PIDTYPE_TGID, ns);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline pid_t task_tgid_vnr(struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
return __task_pid_nr_ns(tsk, PIDTYPE_TGID, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline pid_t task_ppid_nr_ns(const struct task_struct *tsk, struct pid_namespace *ns)
|
|
||||||
{
|
|
||||||
pid_t pid = 0;
|
|
||||||
|
|
||||||
rcu_read_lock();
|
|
||||||
if (pid_alive(tsk))
|
|
||||||
pid = task_tgid_nr_ns(rcu_dereference(tsk->real_parent), ns);
|
|
||||||
rcu_read_unlock();
|
|
||||||
|
|
||||||
return pid;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline pid_t task_ppid_nr(const struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
return task_ppid_nr_ns(tsk, &init_pid_ns);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Obsolete, do not use: */
|
|
||||||
static inline pid_t task_pgrp_nr(struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
return task_pgrp_nr_ns(tsk, &init_pid_ns);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define TASK_REPORT_IDLE (TASK_REPORT + 1)
|
#define TASK_REPORT_IDLE (TASK_REPORT + 1)
|
||||||
#define TASK_REPORT_MAX (TASK_REPORT_IDLE << 1)
|
#define TASK_REPORT_MAX (TASK_REPORT_IDLE << 1)
|
||||||
|
|
||||||
@ -1712,20 +1604,6 @@ static inline char task_state_to_char(struct task_struct *tsk)
|
|||||||
return task_index_to_char(task_state_index(tsk));
|
return task_index_to_char(task_state_index(tsk));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* is_global_init - check if a task structure is init. Since init
|
|
||||||
* is free to have sub-threads we need to check tgid.
|
|
||||||
* @tsk: Task structure to be checked.
|
|
||||||
*
|
|
||||||
* Check if a task structure is the first user space task the kernel created.
|
|
||||||
*
|
|
||||||
* Return: 1 if the task structure is init. 0 otherwise.
|
|
||||||
*/
|
|
||||||
static inline int is_global_init(struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
return task_tgid_nr(tsk) == 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern struct pid *cad_pid;
|
extern struct pid *cad_pid;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#include <linux/sched/task.h>
|
#include <linux/sched/task.h>
|
||||||
#include <linux/cred.h>
|
#include <linux/cred.h>
|
||||||
#include <linux/refcount.h>
|
#include <linux/refcount.h>
|
||||||
|
#include <linux/pid.h>
|
||||||
#include <linux/posix-timers.h>
|
#include <linux/posix-timers.h>
|
||||||
#include <linux/mm_types.h>
|
#include <linux/mm_types.h>
|
||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include <linux/unistd.h>
|
#include <linux/unistd.h>
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/ipc_namespace.h>
|
#include <linux/ipc_namespace.h>
|
||||||
|
#include <linux/pid.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The IPC ID contains 2 separate numbers - index and sequence number.
|
* The IPC ID contains 2 separate numbers - index and sequence number.
|
||||||
|
@ -46,11 +46,12 @@ asynchronous and synchronous parts of the kernel.
|
|||||||
|
|
||||||
#include <linux/async.h>
|
#include <linux/async.h>
|
||||||
#include <linux/atomic.h>
|
#include <linux/atomic.h>
|
||||||
#include <linux/ktime.h>
|
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
#include <linux/wait.h>
|
#include <linux/ktime.h>
|
||||||
|
#include <linux/pid.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
#include <linux/wait.h>
|
||||||
#include <linux/workqueue.h>
|
#include <linux/workqueue.h>
|
||||||
|
|
||||||
#include "workqueue_internal.h"
|
#include "workqueue_internal.h"
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include <linux/debug_locks.h>
|
#include <linux/debug_locks.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
|
#include <linux/pid.h>
|
||||||
|
|
||||||
void __raw_spin_lock_init(raw_spinlock_t *lock, const char *name,
|
void __raw_spin_lock_init(raw_spinlock_t *lock, const char *name,
|
||||||
struct lock_class_key *key, short inner)
|
struct lock_class_key *key, short inner)
|
||||||
|
Loading…
Reference in New Issue
Block a user