From patchwork Tue Apr 7 02:10:52 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Viresh Kumar X-Patchwork-Id: 46805 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-wg0-f72.google.com (mail-wg0-f72.google.com [74.125.82.72]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 6F27E214BA for ; Tue, 7 Apr 2015 02:11:41 +0000 (UTC) Received: by wgiv13 with SMTP id v13sf9546965wgi.3 for ; Mon, 06 Apr 2015 19:11:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:delivered-to:from:to:cc:subject :date:message-id:in-reply-to:references:in-reply-to:references :sender:precedence:list-id:x-original-sender :x-original-authentication-results:mailing-list:list-post:list-help :list-archive:list-unsubscribe; bh=2E7q+66+dw5kdLslMOHBUHuHGMBJjiVDN/6LSqlQ6Xw=; b=bkntexxDEMieOZrD4/eiZEzaP3z12zKQn1/vOFGVCfw5KfsxPFuCCLin01xh4f4UdQ Es/J053OzKSkJECCsu7KnSZ3caS3/2qplOZzerobCKdkbhpBREmNcgz8/S5aY6/YA15G 9qai2n+XseNjgVwUQAMKVE5owJbUtzSMcxB37WJY52enMSRCCbZyXjY7p7MOgrN+All9 P4Fi6Jj4prgnT+9yz3pNffjgbqxrME4ux38Y/BgvXJm4O97CnZRLa26/JCTUXHFAhXmd rAijk+YgYljXXkHhJ8nJdvgZ9T5qkH16jb2Uhua5UMwj7c2XI0CviAQ0McDjqxafAh4S UzFg== X-Gm-Message-State: ALoCoQn8++eJUQp/B89tlGyD34Zxt+4p8hN+Lav0rz8Ypj5OVbMdYRT4Aail3oi9IAAn8a3xZ+85 X-Received: by 10.180.74.197 with SMTP id w5mr20889wiv.5.1428372700700; Mon, 06 Apr 2015 19:11:40 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.7.226 with SMTP id m2ls633585laa.71.gmail; Mon, 06 Apr 2015 19:11:40 -0700 (PDT) X-Received: by 10.152.5.7 with SMTP id o7mr14191465lao.51.1428372700345; Mon, 06 Apr 2015 19:11:40 -0700 (PDT) Received: from mail-la0-f49.google.com (mail-la0-f49.google.com. [209.85.215.49]) by mx.google.com with ESMTPS id wv10si4236253lac.79.2015.04.06.19.11.40 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 06 Apr 2015 19:11:40 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.49 as permitted sender) client-ip=209.85.215.49; Received: by laat2 with SMTP id t2so24799634laa.1 for ; Mon, 06 Apr 2015 19:11:40 -0700 (PDT) X-Received: by 10.152.178.197 with SMTP id da5mr16371308lac.56.1428372700216; Mon, 06 Apr 2015 19:11:40 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.112.67.65 with SMTP id l1csp149004lbt; Mon, 6 Apr 2015 19:11:39 -0700 (PDT) X-Received: by 10.70.34.129 with SMTP id z1mr31676256pdi.113.1428372698068; Mon, 06 Apr 2015 19:11:38 -0700 (PDT) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id ko11si9005519pbd.90.2015.04.06.19.11.36; Mon, 06 Apr 2015 19:11:38 -0700 (PDT) Received-SPF: none (google.com: linux-kernel-owner@vger.kernel.org does not designate permitted sender hosts) client-ip=209.132.180.67; Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753248AbbDGCLX (ORCPT + 27 others); Mon, 6 Apr 2015 22:11:23 -0400 Received: from mail-pd0-f181.google.com ([209.85.192.181]:36478 "EHLO mail-pd0-f181.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753129AbbDGCLN (ORCPT ); Mon, 6 Apr 2015 22:11:13 -0400 Received: by pdea3 with SMTP id a3so62759070pde.3 for ; Mon, 06 Apr 2015 19:11:12 -0700 (PDT) X-Received: by 10.68.88.196 with SMTP id bi4mr32423916pbb.130.1428372672553; Mon, 06 Apr 2015 19:11:12 -0700 (PDT) Received: from localhost ([122.167.118.120]) by mx.google.com with ESMTPSA id q3sm6085516pds.49.2015.04.06.19.11.10 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Mon, 06 Apr 2015 19:11:11 -0700 (PDT) From: Viresh Kumar To: Thomas Gleixner , Ingo Molnar , Peter Zijlstra Cc: linaro-kernel@lists.linaro.org, linux-kernel@vger.kernel.org, Preeti U Murthy , Viresh Kumar Subject: [PATCH V2 1/2] hrtimer: update '->active_bases' before calling hrtimer_force_reprogram() Date: Tue, 7 Apr 2015 07:40:52 +0530 Message-Id: X-Mailer: git-send-email 2.3.0.rc0.44.ga94655d In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: list List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: viresh.kumar@linaro.org X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.49 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , 'active_bases' indicates which clock-base have active timers. While it is updated correctly, it is hardly used. Next commit will start using it to make code more efficient, but before that we need to fix a problem. While removing hrtimers, in __remove_hrtimer(): - We first remove the hrtimer from the queue. - Then reprogram clockevent device if required (hrtimer_force_reprogram()). - And then finally clear 'active_bases', if no more timers are pending on the current clock base (from which we are removing the hrtimer). hrtimer_force_reprogram() needs to loop over all active clock bases to find the next expiry event, and while doing so it will use 'active_bases' (after next commit). And it will find the current base active, as we haven't cleared it until now, even if current clock base has no more hrtimers queued. The next commit will skip validating what timerqueue_getnext() returns, as that is guaranteed to be valid for an active base, and the above stated problem will result in a crash then (Because timerqueue_getnext() will return NULL for the current clock base). So, fix this issue by clearing active_bases before calling hrtimer_force_reprogram(). Reviewed-by: Preeti U Murthy Signed-off-by: Viresh Kumar --- kernel/time/hrtimer.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c index bee0c1f78091..3152f327c988 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c @@ -879,6 +879,9 @@ static void __remove_hrtimer(struct hrtimer *timer, next_timer = timerqueue_getnext(&base->active); timerqueue_del(&base->active, &timer->node); + if (!timerqueue_getnext(&base->active)) + base->cpu_base->active_bases &= ~(1 << base->index); + if (&timer->node == next_timer) { #ifdef CONFIG_HIGH_RES_TIMERS /* Reprogram the clock event device. if enabled */ @@ -892,8 +895,6 @@ static void __remove_hrtimer(struct hrtimer *timer, } #endif } - if (!timerqueue_getnext(&base->active)) - base->cpu_base->active_bases &= ~(1 << base->index); out: timer->state = newstate; }