* [PATCH v3 1/3] kernel: pid: Update documentation.
[not found] <cover.1490676249.git.rvarsha016@gmail.com>
@ 2017-03-28 4:54 ` Varsha Rao
2017-03-28 4:58 ` [PATCH v3 2/3] kernel: pid: Change function return value to bool Varsha Rao
2017-03-28 4:59 ` [PATCH v3 3/3] kernel: pid: Add blank line after declarations Varsha Rao
2 siblings, 0 replies; 3+ messages in thread
From: Varsha Rao @ 2017-03-28 4:54 UTC (permalink / raw)
To: mawilcox; +Cc: outreachy-kernel
This patch adds comments to update documentation.
Signed-off-by: Varsha Rao <rvarsha016@gmail.com>
---
Changes in v3:
- Changed the comment style.
Changes in v2:
- No change.
kernel/pid.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/kernel/pid.c b/kernel/pid.c
index 0143ac0..01fb660 100644
--- a/kernel/pid.c
+++ b/kernel/pid.c
@@ -42,6 +42,8 @@
#define pid_hashfn(nr, ns) \
hash_long((unsigned long)nr + (unsigned long)ns, pidhash_shift)
+
+/* Doubly linked hash lists to find PID in given namespace. */
static struct hlist_head *pid_hash;
static unsigned int pidhash_shift = 4;
struct pid init_struct_pid = INIT_STRUCT_PID;
@@ -53,6 +55,7 @@ int pid_max = PID_MAX_DEFAULT;
int pid_max_min = RESERVED_PIDS + 1;
int pid_max_max = PID_MAX_LIMIT;
+/* mk_pid() - Return distance between map and offset pidmap. */
static inline int mk_pid(struct pid_namespace *pid_ns,
struct pidmap *map, int off)
{
@@ -101,6 +104,7 @@ EXPORT_SYMBOL_GPL(init_pid_ns);
static __cacheline_aligned_in_smp DEFINE_SPINLOCK(pidmap_lock);
+/* free_pidmap() - Free process id. */
static void free_pidmap(struct upid *upid)
{
int nr = upid->nr;
@@ -150,6 +154,10 @@ static void set_last_pid(struct pid_namespace *pid_ns, int base, int pid)
} while ((prev != last_write) && (pid_before(base, last_write, pid)));
}
+/*
+ * alloc_pidmap() - Increment last pid by one and return it if new pid
+ * is valid.
+ */
static int alloc_pidmap(struct pid_namespace *pid_ns)
{
int i, offset, max_scan, pid, last = pid_ns->last_pid;
@@ -212,6 +220,10 @@ static int alloc_pidmap(struct pid_namespace *pid_ns)
return -EAGAIN;
}
+/*
+ * next_pidmap() - Find the first pid which is greater than previous
+ * last allocated pid.
+ */
int next_pidmap(struct pid_namespace *pid_ns, unsigned int last)
{
int offset;
@@ -233,6 +245,7 @@ int next_pidmap(struct pid_namespace *pid_ns, unsigned int last)
return -1;
}
+/* put_pid() - Check whether pid can be reallocated. */
void put_pid(struct pid *pid)
{
struct pid_namespace *ns;
@@ -249,6 +262,10 @@ void put_pid(struct pid *pid)
}
EXPORT_SYMBOL_GPL(put_pid);
+/*
+ * delayed_put_pid() - Find the real location of struct pid in the
+ * memory and check whether it can be reallocated with put_pid().
+ */
static void delayed_put_pid(struct rcu_head *rhp)
{
struct pid *pid = container_of(rhp, struct pid, rcu);
@@ -293,6 +310,10 @@ void free_pid(struct pid *pid)
call_rcu(&pid->rcu, delayed_put_pid);
}
+/*
+ * alloc_pid() - Allocate local pid for each multiple namespaces
+ * in which new process created is visible.
+ */
struct pid *alloc_pid(struct pid_namespace *ns)
{
struct pid *pid;
--
2.9.3
^ permalink raw reply related [flat|nested] 3+ messages in thread* [PATCH v3 2/3] kernel: pid: Change function return value to bool.
[not found] <cover.1490676249.git.rvarsha016@gmail.com>
2017-03-28 4:54 ` [PATCH v3 1/3] kernel: pid: Update documentation Varsha Rao
@ 2017-03-28 4:58 ` Varsha Rao
2017-03-28 4:59 ` [PATCH v3 3/3] kernel: pid: Add blank line after declarations Varsha Rao
2 siblings, 0 replies; 3+ messages in thread
From: Varsha Rao @ 2017-03-28 4:58 UTC (permalink / raw)
To: mawilcox; +Cc: outreachy-kernel
Replace unsigned with unsigned int and add bool as return type for
pid_before() function. As the function is called only once in condition
for do while loop. This patch fixes the checkpatch issue.
Signed-off-by: Varsha Rao <rvarsha016@gmail.com>
---
Changes in v3:
- Modified commit message.
- Replaced unsigned with unsigned int.
Changes in v2:
- Modified commit message.
- Changed return type of pid_before() function.
kernel/pid.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/pid.c b/kernel/pid.c
index 01fb660..bb0a1c0 100644
--- a/kernel/pid.c
+++ b/kernel/pid.c
@@ -118,7 +118,7 @@ static void free_pidmap(struct upid *upid)
/*
* If we started walking pids at 'base', is 'a' seen before 'b'?
*/
-static int pid_before(int base, int a, int b)
+static bool pid_before(int base, int a, int b)
{
/*
* This is the same as saying
@@ -126,7 +126,7 @@ static int pid_before(int base, int a, int b)
* (a - base + MAXUINT) % MAXUINT < (b - base + MAXUINT) % MAXUINT
* and that mapping orders 'a' and 'b' with respect to 'base'.
*/
- return (unsigned)(a - base) < (unsigned)(b - base);
+ return (unsigned int)(a - base) < (unsigned int)(b - base);
}
/*
--
2.9.3
^ permalink raw reply related [flat|nested] 3+ messages in thread* [PATCH v3 3/3] kernel: pid: Add blank line after declarations.
[not found] <cover.1490676249.git.rvarsha016@gmail.com>
2017-03-28 4:54 ` [PATCH v3 1/3] kernel: pid: Update documentation Varsha Rao
2017-03-28 4:58 ` [PATCH v3 2/3] kernel: pid: Change function return value to bool Varsha Rao
@ 2017-03-28 4:59 ` Varsha Rao
2 siblings, 0 replies; 3+ messages in thread
From: Varsha Rao @ 2017-03-28 4:59 UTC (permalink / raw)
To: mawilcox; +Cc: outreachy-kernel
Add a blank line after declarations, to fix the checkpatch issue.
Signed-off-by: Varsha Rao <rvarsha016@gmail.com>
---
Changes in v3:
- No changes.
Changes in v2:
- No changes.
kernel/pid.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/kernel/pid.c b/kernel/pid.c
index bb0a1c0..fe16058 100644
--- a/kernel/pid.c
+++ b/kernel/pid.c
@@ -148,6 +148,7 @@ static void set_last_pid(struct pid_namespace *pid_ns, int base, int pid)
{
int prev;
int last_write = base;
+
do {
prev = last_write;
last_write = cmpxchg(&pid_ns->last_pid, prev, pid);
@@ -269,6 +270,7 @@ EXPORT_SYMBOL_GPL(put_pid);
static void delayed_put_pid(struct rcu_head *rhp)
{
struct pid *pid = container_of(rhp, struct pid, rcu);
+
put_pid(pid);
}
@@ -409,6 +411,7 @@ EXPORT_SYMBOL_GPL(find_vpid);
void attach_pid(struct task_struct *task, enum pid_type type)
{
struct pid_link *link = &task->pids[type];
+
hlist_add_head_rcu(&link->node, &link->pid->tasks[type]);
}
@@ -455,8 +458,10 @@ void transfer_pid(struct task_struct *old, struct task_struct *new,
struct task_struct *pid_task(struct pid *pid, enum pid_type type)
{
struct task_struct *result = NULL;
+
if (pid) {
struct hlist_node *first;
+
first = rcu_dereference_check(hlist_first_rcu(&pid->tasks[type]),
lockdep_tasklist_lock_is_held());
if (first)
@@ -484,6 +489,7 @@ struct task_struct *find_task_by_vpid(pid_t vnr)
struct pid *get_task_pid(struct task_struct *task, enum pid_type type)
{
struct pid *pid;
+
rcu_read_lock();
if (type != PIDTYPE_PID)
task = task->group_leader;
@@ -496,6 +502,7 @@ EXPORT_SYMBOL_GPL(get_task_pid);
struct task_struct *get_pid_task(struct pid *pid, enum pid_type type)
{
struct task_struct *result;
+
rcu_read_lock();
result = pid_task(pid, type);
if (result)
--
2.9.3
^ permalink raw reply related [flat|nested] 3+ messages in thread