From patchwork Mon Apr 6 16:50:32 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atsushi Nemoto X-Patchwork-Id: 25645 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from wa-out-1516.google.com (wa-out-1516.google.com [209.85.146.167]) by ozlabs.org (Postfix) with ESMTP id 303DFDDEEA for ; Tue, 7 Apr 2009 02:50:34 +1000 (EST) Received: by wa-out-1516.google.com with SMTP id c2so1812701waa.1 for ; Mon, 06 Apr 2009 09:50:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=beta; h=domainkey-signature:received:received:x-sender:x-apparently-to :received:received:received-spf:authentication-results:received:from :to:cc:subject:date:message-id:x-mailer:reply-to:sender:precedence :x-google-loop:mailing-list:list-id:list-post:list-help :list-unsubscribe:x-beenthere-env:x-beenthere; bh=ILqfhvjJqrzYTWFB+nGyFtezKqTR+/4ANNG5ZRbpXKo=; b=6nAXgGMRxZWjkca8cua0f7wAtzleScMwecH/8+y0zBdP2kIjzhzjo+g74nK/v5fSkN 67FQ2+/qfvKKFYmljNujtkadHp/dIeHwAACL8mHl7Swvph+7pihUy04BBdDMXnJ4A2+/ QcuTQosn3mq7CvgZhwc2AJBzCUd+ynMMCUy2s= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlegroups.com; s=beta; h=x-sender:x-apparently-to:received-spf:authentication-results:from :to:cc:subject:date:message-id:x-mailer:reply-to:sender:precedence :x-google-loop:mailing-list:list-id:list-post:list-help :list-unsubscribe:x-beenthere-env:x-beenthere; b=wC4JUPBwRStuXWNvQL65a2SlehcFFLqPUzo0vK/56R1ftpqfTT59dy1GAZamBoimlg DwDHisvhC1N9SMPJn72CNuw+A+usEhDP3SjzyKjC2nhKlfZ66We1KFTz0IHIfF2PsjYk sabPAi2nGnHviwfNtAWhhivXjeUVlfbEOkr5c= Received: by 10.141.162.5 with SMTP id p5mr462923rvo.2.1239036629592; Mon, 06 Apr 2009 09:50:29 -0700 (PDT) Received: by 10.106.129.7 with SMTP id b7gr2089prd.0; Mon, 06 Apr 2009 09:50:29 -0700 (PDT) X-Sender: anemo@mba.ocn.ne.jp X-Apparently-To: rtc-linux@googlegroups.com Received: by 10.115.110.15 with SMTP id n15mr842064wam.11.1239036629162; Mon, 06 Apr 2009 09:50:29 -0700 (PDT) Received: from smtp.mba.ocn.ne.jp (mba.ocn.ne.jp [122.1.235.107]) by gmr-mx.google.com with ESMTP id m37si2491474waf.0.2009.04.06.09.50.28; Mon, 06 Apr 2009 09:50:29 -0700 (PDT) Received-SPF: pass (google.com: domain of anemo@mba.ocn.ne.jp designates 122.1.235.107 as permitted sender) client-ip=122.1.235.107; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of anemo@mba.ocn.ne.jp designates 122.1.235.107 as permitted sender) smtp.mail=anemo@mba.ocn.ne.jp Received: from localhost.localdomain (p7250-ipad207funabasi.chiba.ocn.ne.jp [222.145.89.250]) by smtp.mba.ocn.ne.jp (Postfix) with ESMTP id 8FC7B9BF4; Tue, 7 Apr 2009 01:50:27 +0900 (JST) From: Atsushi Nemoto To: Alessandro Zummo Cc: rtc-linux@googlegroups.com, linux-kernel@vger.kernel.org Subject: [rtc-linux] [PATCH] rtc-ds1553: Drop IRQF_DISABLED Date: Tue, 7 Apr 2009 01:50:32 +0900 Message-Id: <1239036633-10032-2-git-send-email-anemo@mba.ocn.ne.jp> X-Mailer: git-send-email 1.5.6.3 Reply-To: rtc-linux@googlegroups.com Sender: rtc-linux@googlegroups.com Precedence: bulk X-Google-Loop: groups Mailing-List: list rtc-linux@googlegroups.com; contact rtc-linux+owner@googlegroups.com List-Id: List-Post: List-Help: List-Unsubscribe: , X-BeenThere-Env: rtc-linux@googlegroups.com X-BeenThere: rtc-linux@googlegroups.com IRQF_DISABLED should be be used with IRQF_SHARED. Drop IRQF_DISABLED and add spin_lock_irqsave/spin_unlock_irqrestore to the interrupt handler. Signed-off-by: Atsushi Nemoto --- drivers/rtc/rtc-ds1553.c | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/rtc/rtc-ds1553.c b/drivers/rtc/rtc-ds1553.c index 38d472b..395f01b 100644 --- a/drivers/rtc/rtc-ds1553.c +++ b/drivers/rtc/rtc-ds1553.c @@ -195,14 +195,19 @@ static irqreturn_t ds1553_rtc_interrupt(int irq, void *dev_id) struct rtc_plat_data *pdata = platform_get_drvdata(pdev); void __iomem *ioaddr = pdata->ioaddr; unsigned long events = RTC_IRQF; + unsigned long flags; + spin_lock_irqsave(&pdata->rtc->irq_lock, flags); /* read and clear interrupt */ - if (!(readb(ioaddr + RTC_FLAGS) & RTC_FLAGS_AF)) + if (!(readb(ioaddr + RTC_FLAGS) & RTC_FLAGS_AF)) { + spin_unlock_irqrestore(&pdata->rtc->irq_lock, flags); return IRQ_NONE; + } if (readb(ioaddr + RTC_SECONDS_ALARM) & 0x80) events |= RTC_UF; else events |= RTC_AF; + spin_unlock_irqrestore(&pdata->rtc->irq_lock, flags); rtc_update_irq(pdata->rtc, 1, events); return IRQ_HANDLED; } @@ -329,7 +334,7 @@ static int __devinit ds1553_rtc_probe(struct platform_device *pdev) if (pdata->irq > 0) { writeb(0, ioaddr + RTC_INTERRUPTS); if (request_irq(pdata->irq, ds1553_rtc_interrupt, - IRQF_DISABLED | IRQF_SHARED, + IRQF_SHARED, pdev->name, pdev) < 0) { dev_warn(&pdev->dev, "interrupt not available.\n"); pdata->irq = 0;