From patchwork Wed Jul 23 10:53:44 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Lezcano X-Patchwork-Id: 34127 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-vc0-f198.google.com (mail-vc0-f198.google.com [209.85.220.198]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 882A72061E for ; Wed, 23 Jul 2014 10:54:16 +0000 (UTC) Received: by mail-vc0-f198.google.com with SMTP id hu12sf3183248vcb.1 for ; Wed, 23 Jul 2014 03:54:16 -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=Nf2r74xq1zMaUuAQaSiLs35q2F7dj0UBoyf82eiJX2E=; b=e/m24nOS5pP9hJgCzkJu1Fefhwgknf1cgSAfa3n3G14Dra4YDbjmYAHSktXR4eyrIr 9/MMn2BrK+SWv2FGNpDXKWXDJSX0JEXaJBTg4xdIRHFB2PGvtosHnBgz3JmA7LyeL+RX Vo9y2CzNFjQwVY2cPfbBd7UmZaQpc3viCiZHQdmsqK0rI6BfnpV5DIlYW0tHaZElbckb Xwl/5OvEjTtTC6ta2R+HcYB4pzEL4DbSqNFu2zUcaychCn4hZeYcKSkwjbQeRIo++ABQ FeeErY2+63p3BqVOwDJpOUXEHs2n+Xa+VfN7zGcrbXE9WRTsexc8qPAplVFoBpuHDPh2 vXlQ== X-Gm-Message-State: ALoCoQncNeskgfc5YljIVFT9vmmKN0973wDvzJVJkTQykeNYFWdO7KRv0ylsgNW5sOh7DvjOJbbk X-Received: by 10.224.169.20 with SMTP id w20mr213224qay.4.1406112856308; Wed, 23 Jul 2014 03:54:16 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.100.214 with SMTP id s80ls300806qge.99.gmail; Wed, 23 Jul 2014 03:54:16 -0700 (PDT) X-Received: by 10.52.0.209 with SMTP id 17mr641976vdg.60.1406112856055; Wed, 23 Jul 2014 03:54:16 -0700 (PDT) Received: from mail-vc0-f180.google.com (mail-vc0-f180.google.com [209.85.220.180]) by mx.google.com with ESMTPS id si10si1538951vcb.10.2014.07.23.03.54.16 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 23 Jul 2014 03:54:16 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.220.180 as permitted sender) client-ip=209.85.220.180; Received: by mail-vc0-f180.google.com with SMTP id ij19so1727399vcb.25 for ; Wed, 23 Jul 2014 03:54:16 -0700 (PDT) X-Received: by 10.52.248.146 with SMTP id ym18mr759225vdc.8.1406112855975; Wed, 23 Jul 2014 03:54:15 -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 tc5csp268772vcb; Wed, 23 Jul 2014 03:54:15 -0700 (PDT) X-Received: by 10.70.133.33 with SMTP id oz1mr562655pdb.72.1406112855112; Wed, 23 Jul 2014 03:54:15 -0700 (PDT) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id zi2si2117418pbb.138.2014.07.23.03.54.13 for ; Wed, 23 Jul 2014 03:54:15 -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 S1757209AbaGWKyM (ORCPT + 15 others); Wed, 23 Jul 2014 06:54:12 -0400 Received: from mail-wi0-f173.google.com ([209.85.212.173]:39718 "EHLO mail-wi0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751432AbaGWKyL (ORCPT ); Wed, 23 Jul 2014 06:54:11 -0400 Received: by mail-wi0-f173.google.com with SMTP id f8so7596942wiw.6 for ; Wed, 23 Jul 2014 03:54:09 -0700 (PDT) X-Received: by 10.194.91.200 with SMTP id cg8mr775557wjb.50.1406112849555; Wed, 23 Jul 2014 03:54:09 -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.08 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 23 Jul 2014 03:54:08 -0700 (PDT) From: Daniel Lezcano To: linux-kernel@vger.kernel.org Subject: [PATCH 02/25] clocksource: sh_cmt: Replace global spinlock with a per-device spinlock Date: Wed, 23 Jul 2014 12:53:44 +0200 Message-Id: <1406112847-26275-2-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.180 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 CMT 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_cmt.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/clocksource/sh_cmt.c b/drivers/clocksource/sh_cmt.c index fcd38db..190c655 100644 --- a/drivers/clocksource/sh_cmt.c +++ b/drivers/clocksource/sh_cmt.c @@ -118,6 +118,8 @@ struct sh_cmt_device { void __iomem *mapbase; struct clk *clk; + raw_spinlock_t lock; /* Protect the shared start/stop register */ + struct sh_cmt_channel *channels; unsigned int num_channels; @@ -299,14 +301,12 @@ static unsigned long sh_cmt_get_counter(struct sh_cmt_channel *ch, return v2; } -static DEFINE_RAW_SPINLOCK(sh_cmt_lock); - static void sh_cmt_start_stop_ch(struct sh_cmt_channel *ch, int start) { unsigned long flags, value; /* start stop register shared by multiple timer channels */ - raw_spin_lock_irqsave(&sh_cmt_lock, flags); + raw_spin_lock_irqsave(&ch->cmt->lock, flags); value = sh_cmt_read_cmstr(ch); if (start) @@ -315,7 +315,7 @@ static void sh_cmt_start_stop_ch(struct sh_cmt_channel *ch, int start) value &= ~(1 << ch->timer_bit); sh_cmt_write_cmstr(ch, value); - raw_spin_unlock_irqrestore(&sh_cmt_lock, flags); + raw_spin_unlock_irqrestore(&ch->cmt->lock, flags); } static int sh_cmt_enable(struct sh_cmt_channel *ch, unsigned long *rate) @@ -934,6 +934,7 @@ static int sh_cmt_setup(struct sh_cmt_device *cmt, struct platform_device *pdev) memset(cmt, 0, sizeof(*cmt)); cmt->pdev = pdev; + raw_spin_lock_init(&cmt->lock); if (!cfg) { dev_err(&cmt->pdev->dev, "missing platform data\n");