From patchwork Mon May 12 09:30:05 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Viresh Kumar X-Patchwork-Id: 29958 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-pa0-f72.google.com (mail-pa0-f72.google.com [209.85.220.72]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 7FF102054B for ; Mon, 12 May 2014 09:30:58 +0000 (UTC) Received: by mail-pa0-f72.google.com with SMTP id rd3sf39554543pab.3 for ; Mon, 12 May 2014 02:30:57 -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=r9NbY5ESoSwPpbjN1ZaFdc+nLnxIpcQhCi+GldzrxoU=; b=jpX7EvUN9Wh+Z7iAzlrCwcCJQUiR1KqkIjn1Mcrl8brCb1i58018L0/ZihhV5lxUmh zbYqfmIcsmpVMLpr5wvjiVBFBQXXKba219LWbY30J9nvN80SB+nvz9M2kGLBrKQlcN5i vX5eXxvlGcHhXcS1/3VLdTrpQs4mi2dAAxMUXoScp3w0BrPGETG6V6Q9KZEWWEZTlm+Z BSBfeKDDG2N3mVROKXLhK76Flpfw9jH1se+n5rB49JpVNDwrise73IXo+jz38HhOHrje SLvy6/F+iN82/s4EF5LHY252ayaRp3tfzwBJkj1CWAD0N3k99IJ1khCsvL120BGZMTVv EZeQ== X-Gm-Message-State: ALoCoQnB1JI6ZZKQyqeveeYhZAz83CtgsxsmnFEfdTwblreRqEDxHcJQo/b/609sD2Hq1oRgyxlm X-Received: by 10.66.65.142 with SMTP id x14mr13322259pas.14.1399887057757; Mon, 12 May 2014 02:30:57 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.104.49 with SMTP id z46ls255623qge.50.gmail; Mon, 12 May 2014 02:30:57 -0700 (PDT) X-Received: by 10.58.74.38 with SMTP id q6mr21724809vev.7.1399887057629; Mon, 12 May 2014 02:30:57 -0700 (PDT) Received: from mail-vc0-f176.google.com (mail-vc0-f176.google.com [209.85.220.176]) by mx.google.com with ESMTPS id kr17si1978607vcb.133.2014.05.12.02.30.57 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Mon, 12 May 2014 02:30:57 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.220.176 as permitted sender) client-ip=209.85.220.176; Received: by mail-vc0-f176.google.com with SMTP id lg15so8305486vcb.7 for ; Mon, 12 May 2014 02:30:57 -0700 (PDT) X-Received: by 10.52.89.140 with SMTP id bo12mr1911675vdb.31.1399887057538; Mon, 12 May 2014 02:30:57 -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.220.221.72 with SMTP id ib8csp54201vcb; Mon, 12 May 2014 02:30:56 -0700 (PDT) X-Received: by 10.66.122.1 with SMTP id lo1mr54637549pab.118.1399887056515; Mon, 12 May 2014 02:30:56 -0700 (PDT) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id rm9si6063920pbc.79.2014.05.12.02.30.55; Mon, 12 May 2014 02:30:55 -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 S932325AbaELJai (ORCPT + 27 others); Mon, 12 May 2014 05:30:38 -0400 Received: from mail-wg0-f44.google.com ([74.125.82.44]:62174 "EHLO mail-wg0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754649AbaELJab (ORCPT ); Mon, 12 May 2014 05:30:31 -0400 Received: by mail-wg0-f44.google.com with SMTP id a1so6425709wgh.3 for ; Mon, 12 May 2014 02:30:30 -0700 (PDT) X-Received: by 10.180.78.225 with SMTP id e1mr14669129wix.17.1399887030147; Mon, 12 May 2014 02:30:30 -0700 (PDT) Received: from localhost ([213.122.173.131]) by mx.google.com with ESMTPSA id by1sm17149940wjc.26.2014.05.12.02.30.25 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Mon, 12 May 2014 02:30:29 -0700 (PDT) From: Viresh Kumar To: tglx@linutronix.de Cc: linaro-kernel@lists.linaro.org, linaro-networking@linaro.org, linux-kernel@vger.kernel.org, fweisbec@gmail.com, arvind.chauhan@arm.com, daniel.lezcano@linaro.org, Viresh Kumar , Nicolas Pitre Subject: [RFC 1/2] clockevents: return 'int' from clockevents_set_mode() Date: Mon, 12 May 2014 15:00:05 +0530 Message-Id: X-Mailer: git-send-email 2.0.0.rc2 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.220.176 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: , clockevents_set_mode() calls dev->set_mode() which has return type of 'void' currently. Later patches would add another interface dev->set_dev_mode(), which will return int and clockevents_set_mode() must propagate failures returned from it. This patch changes prototype of clockevents_set_mode() to return 'int' and fix caller sites as well. As most of the call sites maynot work if clockevents_set_mode() fails, do issue a WARN() on failures. All other are updated to return error codes. Cc: Nicolas Pitre Signed-off-by: Viresh Kumar --- arch/arm/common/bL_switcher.c | 5 +++-- include/linux/clockchips.h | 2 +- kernel/time/clockevents.c | 8 +++++--- kernel/time/tick-broadcast.c | 25 ++++++++++++++++--------- kernel/time/tick-common.c | 6 +++--- kernel/time/tick-oneshot.c | 6 +++--- 6 files changed, 31 insertions(+), 21 deletions(-) diff --git a/arch/arm/common/bL_switcher.c b/arch/arm/common/bL_switcher.c index f01c0ee..bf95a6a 100644 --- a/arch/arm/common/bL_switcher.c +++ b/arch/arm/common/bL_switcher.c @@ -234,7 +234,8 @@ static int bL_switch_to(unsigned int new_cluster_id) tdev = NULL; if (tdev) { tdev_mode = tdev->evtdev->mode; - clockevents_set_mode(tdev->evtdev, CLOCK_EVT_MODE_SHUTDOWN); + WARN_ON(clockevents_set_mode(tdev->evtdev, + CLOCK_EVT_MODE_SHUTDOWN)); } ret = cpu_pm_enter(); @@ -262,7 +263,7 @@ static int bL_switch_to(unsigned int new_cluster_id) ret = cpu_pm_exit(); if (tdev) { - clockevents_set_mode(tdev->evtdev, tdev_mode); + WARN_ON(clockevents_set_mode(tdev->evtdev, tdev_mode)); clockevents_program_event(tdev->evtdev, tdev->evtdev->next_event, 1); } diff --git a/include/linux/clockchips.h b/include/linux/clockchips.h index 2e4cb67..4e7a4d3 100644 --- a/include/linux/clockchips.h +++ b/include/linux/clockchips.h @@ -160,7 +160,7 @@ extern int clockevents_update_freq(struct clock_event_device *ce, u32 freq); extern void clockevents_exchange_device(struct clock_event_device *old, struct clock_event_device *new); -extern void clockevents_set_mode(struct clock_event_device *dev, +extern int clockevents_set_mode(struct clock_event_device *dev, enum clock_event_mode mode); extern int clockevents_program_event(struct clock_event_device *dev, ktime_t expires, bool force); diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c index ad362c2..8665660 100644 --- a/kernel/time/clockevents.c +++ b/kernel/time/clockevents.c @@ -101,7 +101,7 @@ EXPORT_SYMBOL_GPL(clockevent_delta2ns); * * Must be called with interrupts disabled ! */ -void clockevents_set_mode(struct clock_event_device *dev, +int clockevents_set_mode(struct clock_event_device *dev, enum clock_event_mode mode) { if (dev->mode != mode) { @@ -119,6 +119,8 @@ void clockevents_set_mode(struct clock_event_device *dev, } } } + + return 0; } /** @@ -127,7 +129,7 @@ void clockevents_set_mode(struct clock_event_device *dev, */ void clockevents_shutdown(struct clock_event_device *dev) { - clockevents_set_mode(dev, CLOCK_EVT_MODE_SHUTDOWN); + WARN_ON(clockevents_set_mode(dev, CLOCK_EVT_MODE_SHUTDOWN)); dev->next_event.tv64 = KTIME_MAX; } @@ -503,7 +505,7 @@ void clockevents_exchange_device(struct clock_event_device *old, */ if (old) { module_put(old->owner); - clockevents_set_mode(old, CLOCK_EVT_MODE_UNUSED); + WARN_ON(clockevents_set_mode(old, CLOCK_EVT_MODE_UNUSED)); list_del(&old->list); list_add(&old->list, &clockevents_released); } diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c index 64c5990..fb83fa1 100644 --- a/kernel/time/tick-broadcast.c +++ b/kernel/time/tick-broadcast.c @@ -464,7 +464,8 @@ int tick_resume_broadcast(void) bc = tick_broadcast_device.evtdev; if (bc) { - clockevents_set_mode(bc, CLOCK_EVT_MODE_RESUME); + if (clockevents_set_mode(bc, CLOCK_EVT_MODE_RESUME)) + goto unlock; switch (tick_broadcast_device.mode) { case TICKDEV_MODE_PERIODIC: @@ -479,6 +480,7 @@ int tick_resume_broadcast(void) break; } } +unlock: raw_spin_unlock_irqrestore(&tick_broadcast_lock, flags); return broadcast; @@ -532,8 +534,11 @@ static int tick_broadcast_set_event(struct clock_event_device *bc, int cpu, { int ret; - if (bc->mode != CLOCK_EVT_MODE_ONESHOT) - clockevents_set_mode(bc, CLOCK_EVT_MODE_ONESHOT); + if (bc->mode != CLOCK_EVT_MODE_ONESHOT) { + ret = clockevents_set_mode(bc, CLOCK_EVT_MODE_ONESHOT); + if (ret) + return ret; + } ret = clockevents_program_event(bc, expires, force); if (!ret) @@ -543,8 +548,7 @@ static int tick_broadcast_set_event(struct clock_event_device *bc, int cpu, int tick_resume_broadcast_oneshot(struct clock_event_device *bc) { - clockevents_set_mode(bc, CLOCK_EVT_MODE_ONESHOT); - return 0; + return clockevents_set_mode(bc, CLOCK_EVT_MODE_ONESHOT); } /* @@ -562,8 +566,8 @@ void tick_check_oneshot_broadcast_this_cpu(void) * switched over, leave the device alone. */ if (td->mode == TICKDEV_MODE_ONESHOT) { - clockevents_set_mode(td->evtdev, - CLOCK_EVT_MODE_ONESHOT); + WARN_ON(clockevents_set_mode(td->evtdev, + CLOCK_EVT_MODE_ONESHOT)); } } } @@ -741,7 +745,9 @@ int tick_broadcast_oneshot_control(unsigned long reason) cpumask_clear_cpu(cpu, tick_broadcast_oneshot_mask); } else { if (cpumask_test_and_clear_cpu(cpu, tick_broadcast_oneshot_mask)) { - clockevents_set_mode(dev, CLOCK_EVT_MODE_ONESHOT); + ret = clockevents_set_mode(dev, CLOCK_EVT_MODE_ONESHOT); + if (ret) + goto out; /* * The cpu which was handling the broadcast * timer marked this cpu in the broadcast @@ -858,7 +864,8 @@ void tick_broadcast_setup_oneshot(struct clock_event_device *bc) tick_broadcast_oneshot_mask, tmpmask); if (was_periodic && !cpumask_empty(tmpmask)) { - clockevents_set_mode(bc, CLOCK_EVT_MODE_ONESHOT); + WARN_ON(clockevents_set_mode(bc, + CLOCK_EVT_MODE_ONESHOT)); tick_broadcast_init_next_event(tmpmask, tick_next_period); tick_broadcast_set_event(bc, cpu, tick_next_period, 1); diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c index 0a0608e..7b2cf15 100644 --- a/kernel/time/tick-common.c +++ b/kernel/time/tick-common.c @@ -140,7 +140,7 @@ void tick_setup_periodic(struct clock_event_device *dev, int broadcast) if ((dev->features & CLOCK_EVT_FEAT_PERIODIC) && !tick_broadcast_oneshot_active()) { - clockevents_set_mode(dev, CLOCK_EVT_MODE_PERIODIC); + WARN_ON(clockevents_set_mode(dev, CLOCK_EVT_MODE_PERIODIC)); } else { unsigned long seq; ktime_t next; @@ -150,7 +150,7 @@ void tick_setup_periodic(struct clock_event_device *dev, int broadcast) next = tick_next_period; } while (read_seqretry(&jiffies_lock, seq)); - clockevents_set_mode(dev, CLOCK_EVT_MODE_ONESHOT); + WARN_ON(clockevents_set_mode(dev, CLOCK_EVT_MODE_ONESHOT)); for (;;) { if (!clockevents_program_event(dev, next, false)) @@ -384,7 +384,7 @@ void tick_resume(void) struct tick_device *td = &__get_cpu_var(tick_cpu_device); int broadcast = tick_resume_broadcast(); - clockevents_set_mode(td->evtdev, CLOCK_EVT_MODE_RESUME); + WARN_ON(clockevents_set_mode(td->evtdev, CLOCK_EVT_MODE_RESUME)); if (!broadcast) { if (td->mode == TICKDEV_MODE_PERIODIC) diff --git a/kernel/time/tick-oneshot.c b/kernel/time/tick-oneshot.c index 8241090..b525f97 100644 --- a/kernel/time/tick-oneshot.c +++ b/kernel/time/tick-oneshot.c @@ -38,7 +38,7 @@ void tick_resume_oneshot(void) { struct clock_event_device *dev = __this_cpu_read(tick_cpu_device.evtdev); - clockevents_set_mode(dev, CLOCK_EVT_MODE_ONESHOT); + WARN_ON(clockevents_set_mode(dev, CLOCK_EVT_MODE_ONESHOT)); clockevents_program_event(dev, ktime_get(), true); } @@ -50,7 +50,7 @@ void tick_setup_oneshot(struct clock_event_device *newdev, ktime_t next_event) { newdev->event_handler = handler; - clockevents_set_mode(newdev, CLOCK_EVT_MODE_ONESHOT); + WARN_ON(clockevents_set_mode(newdev, CLOCK_EVT_MODE_ONESHOT)); clockevents_program_event(newdev, next_event, true); } @@ -81,7 +81,7 @@ int tick_switch_to_oneshot(void (*handler)(struct clock_event_device *)) td->mode = TICKDEV_MODE_ONESHOT; dev->event_handler = handler; - clockevents_set_mode(dev, CLOCK_EVT_MODE_ONESHOT); + WARN_ON(clockevents_set_mode(dev, CLOCK_EVT_MODE_ONESHOT)); tick_broadcast_switch_to_oneshot(); return 0; }