Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755958AbbHZDSd (ORCPT ); Tue, 25 Aug 2015 23:18:33 -0400 Received: from g9t5009.houston.hp.com ([15.240.92.67]:33215 "EHLO g9t5009.houston.hp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755487AbbHZDSc (ORCPT ); Tue, 25 Aug 2015 23:18:32 -0400 From: Jason Low To: Peter Zijlstra , Ingo Molnar , Thomas Gleixner , Oleg Nesterov , "Paul E. McKenney" Cc: linux-kernel@vger.kernel.org, Frederic Weisbecker , Linus Torvalds , Davidlohr Bueso , Steven Rostedt , Andrew Morton , Terry Rudd , Rik van Riel , Scott J Norton , Jason Low Subject: [PATCH 2/3] timer: Check thread timers only when there are active thread timers Date: Tue, 25 Aug 2015 20:17:47 -0700 Message-Id: <1440559068-29680-3-git-send-email-jason.low2@hp.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1440559068-29680-1-git-send-email-jason.low2@hp.com> References: <1440559068-29680-1-git-send-email-jason.low2@hp.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1626 Lines: 41 The fastpath_timer_check() contains logic to check for if any timers are set by checking if !task_cputime_zero(). Similarly, we can do this before calling check_thread_timers(). In the case where there are only process-wide timers, this will skip all the computations for the per-thread timers when there are no per-thread timers. Signed-off-by: Jason Low --- kernel/time/posix-cpu-timers.c | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-) diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c index 02596ff..535bef5 100644 --- a/kernel/time/posix-cpu-timers.c +++ b/kernel/time/posix-cpu-timers.c @@ -1168,11 +1168,13 @@ void run_posix_cpu_timers(struct task_struct *tsk) if (!lock_task_sighand(tsk, &flags)) return; /* - * Here we take off tsk->signal->cpu_timers[N] and - * tsk->cpu_timers[N] all the timers that are firing, and - * put them on the firing list. + * If there are active per-thread timers, take off + * tsk->signal->cpu_timers[N] and tsk->cpu_timers[N] all the + * timers that are firing, and put them on the firing list. */ - check_thread_timers(tsk, &firing); + if (!task_cputime_zero(&tsk->cputime_expires)) + check_thread_timers(tsk, &firing); + /* * If there are any active process wide timers (POSIX 1.b, itimers, * RLIMIT_CPU) cputimer must be running. -- 1.7.2.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/