From: Thomas Gleixner <t...@linutronix.de>

If the PID encoded into the clock id is 0 then the target is either the
calling thread itself or the process to which it belongs.

If the current thread encodes its own PID on a process wide clock then
there is no reason not to treat it in the same way as the PID=0 case.

Signed-off-by: Thomas Gleixner <t...@linutronix.de>
Reviewed-by: Frederic Weisbecker <frede...@kernel.org>
---
V2: Remove the extra same_thread_group() check which is pointless.
---
 kernel/time/posix-cpu-timers.c |   14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

--- a/kernel/time/posix-cpu-timers.c
+++ b/kernel/time/posix-cpu-timers.c
@@ -90,18 +90,20 @@ static struct task_struct *lookup_task(c
 
        } else {
                /*
+                * Timer is going to be attached to a process. If p is
+                * current then treat it like the PID=0 case above.
+                * This also avoids the ptrace overhead.
+                */
+               if (p == current)
+                       return current->group_leader;
+
+               /*
                 * Process wide timers need the group leader because they
                 * take a reference on it and store the task pointer until
                 * the timer is destroyed.
                 */
                if (!has_group_leader_pid(p))
                        return NULL;
-
-               /*
-                * Avoid the ptrace overhead when this is current's process
-                */
-               if (same_thread_group(p, current))
-                       return p;
        }
 
        /* Decide based on the ptrace permissions. */


Reply via email to