From patchwork Sun Jun 14 22:50:38 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexey Klimov X-Patchwork-Id: 6605471 Return-Path: X-Original-To: patchwork-linux-samsung-soc@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 3B544C0020 for ; Sun, 14 Jun 2015 22:51:36 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 25FB7205FE for ; Sun, 14 Jun 2015 22:51:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3BEFF20303 for ; Sun, 14 Jun 2015 22:51:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752143AbbFNWvc (ORCPT ); Sun, 14 Jun 2015 18:51:32 -0400 Received: from mail-lb0-f175.google.com ([209.85.217.175]:34165 "EHLO mail-lb0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751748AbbFNWvc (ORCPT ); Sun, 14 Jun 2015 18:51:32 -0400 Received: by lbbti3 with SMTP id ti3so5948167lbb.1 for ; Sun, 14 Jun 2015 15:51:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:subject:from:to:cc:date:content-type:mime-version :content-transfer-encoding; bh=EmRuOXm59sgHMOkA3PrUWdCZ3hH+OcjIOsyCipdZ06Q=; b=j5MmOGsunUS4p34OxIgUxm51nhHLEIxXdSHMWcN5G/2d7TWeqKeYrma0ZkUivIK3pU uLMndHMaRU6BuVJwFg9YXr5HJXmcaBOq1L/IxONwS4/Wq1kwW3X2Uny4+osYUi8EO2ei 3Db/N9YXqnoO+ORXsB4Wo4vo0CHOoHZHasHNWkvZqdITdYHDLWH9iHcZnjHf2O8MfTsj aLcmPj2UBVP0a/Wh3vAswO2AlB1DsaN4qNKZm3xHKEDMjWF1EgBD87IkvYmRKRbR3ESD 9nWxbMYT7RJcVtUqIBwLd5J4OxUWnxKLMVXLEwUZHIbUlBrXjanltvkaE+2GWwqASmrr I0Lw== X-Received: by 10.112.219.70 with SMTP id pm6mr23972782lbc.41.1434322290348; Sun, 14 Jun 2015 15:51:30 -0700 (PDT) Received: from [172.17.241.217] ([194.186.220.170]) by mx.google.com with ESMTPSA id k10sm2294441lbq.9.2015.06.14.15.51.29 (version=TLSv1.2 cipher=AES128-GCM-SHA256 bits=128/128); Sun, 14 Jun 2015 15:51:29 -0700 (PDT) Message-ID: <1434322238.5390.16.camel@mtux> Subject: [question] [PATCH RFC] clocksource: exynos_mct: remove unneeded container_of() From: Alexey Klimov To: linux-samsung-soc@vger.kernel.org, sboyd@codeaurora.org Cc: klimov.linux@gmail.com, t.dakhran@gmail.com, yury.norov@gmail.com, kgene@kernel.org, k.kozlowski@samsung.com, thomas.abraham@linaro.org Date: Mon, 15 Jun 2015 01:50:38 +0300 X-Mailer: Evolution 3.10.4-0ubuntu2 Mime-Version: 1.0 Sender: linux-samsung-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org X-Spam-Status: No, score=-7.2 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Hi Stephen and all, i'm lazy-looking on commit ee98d27df6827b5ba4bd99cb7d5cb1239b6a1a31 "ARM: EXYNOS4: Divorce mct from local timer API". I think i miss some point of local timers APIs and other things but why we are going to get evt pointer from mevt structure in exynos4_mct_cpu_notify(), pass it to setup function and there we calculate mevt pointer again from evt by using container_of() macro? To be simple, does patch below makes any sense or am I wrong somewhere? Just want to optimize setup function a little. Looks like code performs useless work. Tested on odroid-xu3 with PMU spare2 register fix. Best regards, Alexey Klimov. ---------- From: Alexey Klimov Patch removes unneeded container_of() macro in exynos4_local_timer_setup(). Instead let's pass mevt pointer to setup and stop functions from exynos4_mct_cpu_notify() and let them get evt pointer. Signed-off-by: Alexey Klimov Acked-by: Stephen Boyd --- drivers/clocksource/exynos_mct.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c index 83564c9..752a37c 100644 --- a/drivers/clocksource/exynos_mct.c +++ b/drivers/clocksource/exynos_mct.c @@ -446,13 +446,11 @@ static irqreturn_t exynos4_mct_tick_isr(int irq, void *dev_id) return IRQ_HANDLED; } -static int exynos4_local_timer_setup(struct clock_event_device *evt) +static int exynos4_local_timer_setup(struct mct_clock_event_device *mevt) { - struct mct_clock_event_device *mevt; + struct clock_event_device *evt = &mevt->evt; unsigned int cpu = smp_processor_id(); - mevt = container_of(evt, struct mct_clock_event_device, evt); - mevt->base = EXYNOS4_MCT_L_BASE(cpu); snprintf(mevt->name, sizeof(mevt->name), "mct_tick%d", cpu); @@ -484,8 +482,10 @@ static int exynos4_local_timer_setup(struct clock_event_device *evt) return 0; } -static void exynos4_local_timer_stop(struct clock_event_device *evt) +static void exynos4_local_timer_stop(struct mct_clock_event_device *mevt) { + struct clock_event_device *evt = &mevt->evt; + evt->set_mode(CLOCK_EVT_MODE_UNUSED, evt); if (mct_int_type == MCT_INT_SPI) free_irq(evt->irq, this_cpu_ptr(&percpu_mct_tick)); @@ -505,11 +505,11 @@ static int exynos4_mct_cpu_notify(struct notifier_block *self, switch (action & ~CPU_TASKS_FROZEN) { case CPU_STARTING: mevt = this_cpu_ptr(&percpu_mct_tick); - exynos4_local_timer_setup(&mevt->evt); + exynos4_local_timer_setup(mevt); break; case CPU_DYING: mevt = this_cpu_ptr(&percpu_mct_tick); - exynos4_local_timer_stop(&mevt->evt); + exynos4_local_timer_stop(mevt); break; } @@ -557,7 +557,7 @@ static void __init exynos4_timer_resources(struct device_node *np, void __iomem goto out_irq; /* Immediately configure the timer on the boot CPU */ - exynos4_local_timer_setup(&mevt->evt); + exynos4_local_timer_setup(mevt); return; out_irq: