From patchwork Wed Jul 23 10:53:46 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Lezcano X-Patchwork-Id: 34143 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-pd0-f198.google.com (mail-pd0-f198.google.com [209.85.192.198]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 24E922061E for ; Wed, 23 Jul 2014 10:58:34 +0000 (UTC) Received: by mail-pd0-f198.google.com with SMTP id fp1sf6637683pdb.9 for ; Wed, 23 Jul 2014 03:58:33 -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:subject:date :message-id: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=zQeP37bACpr/amgFx+zU7WWa8CSH/zO0xQJ530lNj3M=; b=kusg+KwcpbkVV1HVWyLHGo/AigcYR0SGsD7eAJAfhvdMPe/ihBI2vOt8xJ7sSMOsjW dDRtPV6dgxHgayrGllP9pwljSYOck//ICWf543JJOP3jl7dmvuqdAjLo6Lup8IlPYqa5 dkP+IXXaZ2SHhXxx8SWlIpi8sqrD9aNzW9nuh9p2nqHlWkXvE4WEklzTJJfBJ2efI8TG X+wMTj05e0rZPN2ZFmiUgKbRGV9wu3014zYbVU2lEh/mHt3iR5wUFczwGjPhjoBUKmen Mjs6+T4q/SgxnfUyxwU2bxkpqIpn0/NyjewGREVnQWUMMXm09mYgIWpjhJ2w3/89gk4H tYWA== X-Gm-Message-State: ALoCoQlSNBo2U79lwjezGmnI5rDEFE2wfmBnYYBBzI77kOfI8nR7sBE3vS6+8ztBNSfEEFYjF9KS X-Received: by 10.66.65.109 with SMTP id w13mr182651pas.21.1406113113368; Wed, 23 Jul 2014 03:58:33 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.19.16 with SMTP id 16ls276782qgg.57.gmail; Wed, 23 Jul 2014 03:58:33 -0700 (PDT) X-Received: by 10.221.24.7 with SMTP id rc7mr763715vcb.54.1406113113173; Wed, 23 Jul 2014 03:58:33 -0700 (PDT) Received: from mail-vc0-f178.google.com (mail-vc0-f178.google.com [209.85.220.178]) by mx.google.com with ESMTPS id dx8si1534946vdb.24.2014.07.23.03.58.33 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 23 Jul 2014 03:58:33 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.220.178 as permitted sender) client-ip=209.85.220.178; Received: by mail-vc0-f178.google.com with SMTP id la4so1779942vcb.37 for ; Wed, 23 Jul 2014 03:58:33 -0700 (PDT) X-Received: by 10.52.248.146 with SMTP id ym18mr791495vdc.8.1406113113071; Wed, 23 Jul 2014 03:58:33 -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.221.37.5 with SMTP id tc5csp269010vcb; Wed, 23 Jul 2014 03:58:32 -0700 (PDT) X-Received: by 10.70.129.39 with SMTP id nt7mr302662pdb.159.1406113112244; Wed, 23 Jul 2014 03:58:32 -0700 (PDT) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id pq10si2103525pbb.233.2014.07.23.03.58.31 for ; Wed, 23 Jul 2014 03:58:32 -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 S932311AbaGWKyU (ORCPT + 15 others); Wed, 23 Jul 2014 06:54:20 -0400 Received: from mail-wi0-f180.google.com ([209.85.212.180]:52950 "EHLO mail-wi0-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751432AbaGWKyN (ORCPT ); Wed, 23 Jul 2014 06:54:13 -0400 Received: by mail-wi0-f180.google.com with SMTP id n3so1974395wiv.13 for ; Wed, 23 Jul 2014 03:54:12 -0700 (PDT) X-Received: by 10.194.71.132 with SMTP id v4mr683436wju.102.1406112851825; Wed, 23 Jul 2014 03:54:11 -0700 (PDT) Received: from localhost.localdomain (AToulouse-654-1-406-71.w82-125.abo.wanadoo.fr. [82.125.33.71]) by mx.google.com with ESMTPSA id es9sm1112100wjd.1.2014.07.23.03.54.10 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 23 Jul 2014 03:54:11 -0700 (PDT) From: Daniel Lezcano To: linux-kernel@vger.kernel.org Subject: [PATCH 04/25] clocksource: sh_tmu: Replace global spinlock with a per-device spinlock Date: Wed, 23 Jul 2014 12:53:46 +0200 Message-Id: <1406112847-26275-4-git-send-email-daniel.lezcano@linaro.org> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1406112847-26275-1-git-send-email-daniel.lezcano@linaro.org> References: <53CF93B2.6040903@linaro.org> <1406112847-26275-1-git-send-email-daniel.lezcano@linaro.org> 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: daniel.lezcano@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.178 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: , From: Laurent Pinchart The global spinlock is used to protect the shared start/stop register. Now that all TMU channels are handled by a single device instance, use a per-device spinlock. Signed-off-by: Laurent Pinchart Tested-by: Simon Horman --- drivers/clocksource/sh_tmu.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/clocksource/sh_tmu.c b/drivers/clocksource/sh_tmu.c index 3eee5c8..560a31a 100644 --- a/drivers/clocksource/sh_tmu.c +++ b/drivers/clocksource/sh_tmu.c @@ -61,6 +61,8 @@ struct sh_tmu_device { enum sh_tmu_model model; + raw_spinlock_t lock; /* Protect the shared start/stop register */ + struct sh_tmu_channel *channels; unsigned int num_channels; @@ -68,8 +70,6 @@ struct sh_tmu_device { bool has_clocksource; }; -static DEFINE_RAW_SPINLOCK(sh_tmu_lock); - #define TSTR -1 /* shared register */ #define TCOR 0 /* channel register */ #define TCNT 1 /* channel register */ @@ -132,7 +132,7 @@ static void sh_tmu_start_stop_ch(struct sh_tmu_channel *ch, int start) unsigned long flags, value; /* start stop register shared by multiple timer channels */ - raw_spin_lock_irqsave(&sh_tmu_lock, flags); + raw_spin_lock_irqsave(&ch->tmu->lock, flags); value = sh_tmu_read(ch, TSTR); if (start) @@ -141,7 +141,7 @@ static void sh_tmu_start_stop_ch(struct sh_tmu_channel *ch, int start) value &= ~(1 << ch->index); sh_tmu_write(ch, TSTR, value); - raw_spin_unlock_irqrestore(&sh_tmu_lock, flags); + raw_spin_unlock_irqrestore(&ch->tmu->lock, flags); } static int __sh_tmu_enable(struct sh_tmu_channel *ch) @@ -524,6 +524,8 @@ static int sh_tmu_setup(struct sh_tmu_device *tmu, struct platform_device *pdev) tmu->pdev = pdev; tmu->model = id->driver_data; + raw_spin_lock_init(&tmu->lock); + /* Get hold of clock. */ tmu->clk = clk_get(&tmu->pdev->dev, "fck"); if (IS_ERR(tmu->clk)) {