From patchwork Wed Jul 17 12:41:37 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Barry Song <21cnbao@gmail.com> X-Patchwork-Id: 259692 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from mail-ve0-x240.google.com (mail-ve0-x240.google.com [IPv6:2607:f8b0:400c:c01::240]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority" (not verified)) by ozlabs.org (Postfix) with ESMTPS id 5F3162C009C for ; Wed, 17 Jul 2013 22:42:04 +1000 (EST) Received: by mail-ve0-f192.google.com with SMTP id pb11sf505793veb.29 for ; Wed, 17 Jul 2013 05:42:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20120806; h=mime-version:x-beenthere:from:to:cc:subject:date:message-id :x-mailer:x-original-sender:x-original-authentication-results :reply-to:precedence:mailing-list:list-id:x-google-group-id :list-post:list-help:list-archive:sender:list-subscribe :list-unsubscribe:content-type; bh=MsSZ3XERlCv5/aMPw8IQXX/YXqj8Md/AP0qlJTRMY1Y=; b=qMiIlhN8CmiZON2KJr7vWqootUZqyFmG5qNXH265cGsja7MlmHa+QNP+IeAKYvrQo1 xV5+eo33/cAxEtJBLxymFR6uj8nk9d8O+0g2Qsb481n4r415o8jhjCmonZw+6GcMdpDT umjcuAs/H++/n63h284WBTzFS7o47TFEXI5wIoGtutdngkQpy53uWVlnIEQkdgmqTGTw uTLLWeOXVq+D6lElnUSUjan5X3o3ss9qJLGuXi+oyH9rjiwWHCp/jVPECKuDqLQXuX09 QQ6L7D6NYaQEMdeP3cxlf7sYB7S6oHktH4fIF7nEUDIA/ZsRgmU1/uT29/HWTr0GY3nT 296Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-beenthere:from:to:cc:subject:date:message-id :x-mailer:x-original-sender:x-original-authentication-results :reply-to:precedence:mailing-list:list-id:x-google-group-id :list-post:list-help:list-archive:sender:list-subscribe :list-unsubscribe:content-type; bh=MsSZ3XERlCv5/aMPw8IQXX/YXqj8Md/AP0qlJTRMY1Y=; b=b1e8NZyFJwUYJtHdCyclt6MEUa9D6Vg/fa56z6vSP2yv7jn8+IyWIJJKU9QE21soT7 /BDgHxZYR8bqik7g2qW3nABpRQjzfflRCjOoJ7mHOhGBte1kblnYxIEbxv2vsyLmqBxo 2Z975sPKsGFpJXiBH0kKNyCOSsiaMX8m6y8UF9z3l3/Emn01Z4dCPXoT0hHhMxQFuYU7 AqYF920DFziUqQv6ViMI6e5o2b9VDFB0rHAFd8TltUrHHQQHuYP0TckzPMreKU2P2XrR NhpKVPbTdwiYzgwWRG+DI3ahWE2fldylrrfi61Am6NoSugNWffupL7lDamFtZjKmqr3M bHkQ== X-Received: by 10.50.40.65 with SMTP id v1mr1204828igk.4.1374064921237; Wed, 17 Jul 2013 05:42:01 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: rtc-linux@googlegroups.com Received: by 10.50.97.70 with SMTP id dy6ls2512574igb.3.canary; Wed, 17 Jul 2013 05:42:00 -0700 (PDT) X-Received: by 10.66.235.70 with SMTP id uk6mr1052165pac.39.1374064920736; Wed, 17 Jul 2013 05:42:00 -0700 (PDT) Received: from mail-pd0-x233.google.com (mail-pd0-x233.google.com [2607:f8b0:400e:c02::233]) by gmr-mx.google.com with ESMTPS id px10si834662pbb.2.2013.07.17.05.42.00 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 17 Jul 2013 05:42:00 -0700 (PDT) Received-SPF: pass (google.com: domain of 21cnbao@gmail.com designates 2607:f8b0:400e:c02::233 as permitted sender) client-ip=2607:f8b0:400e:c02::233; Received: by mail-pd0-f179.google.com with SMTP id q10so1800477pdj.24 for ; Wed, 17 Jul 2013 05:42:00 -0700 (PDT) X-Received: by 10.66.235.106 with SMTP id ul10mr7507900pac.174.1374064920616; Wed, 17 Jul 2013 05:42:00 -0700 (PDT) Received: from localhost.localdomain ([58.241.37.59]) by mx.google.com with ESMTPSA id y9sm7618144pbb.46.2013.07.17.05.41.56 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 17 Jul 2013 05:41:59 -0700 (PDT) From: Barry Song <21cnbao@gmail.com> To: a.zummo@towertech.it, rtc-linux@googlegroups.com Cc: linux-arm-kernel@lists.infradead.org, Workgroup.Linux@csr.com, Xianglong Du , Barry Song Subject: [rtc-linux] [PATCH] rtc: SiRF: fix kernel warning during wakeup Date: Wed, 17 Jul 2013 20:41:37 +0800 Message-Id: <1374064897-29134-1-git-send-email-Baohua.Song@csr.com> X-Mailer: git-send-email 1.8.2.3 X-Original-Sender: 21cnbao@gmail.com X-Original-Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of 21cnbao@gmail.com designates 2607:f8b0:400e:c02::233 as permitted sender) smtp.mail=21cnbao@gmail.com; dkim=pass header.i=@gmail.com Reply-To: rtc-linux@googlegroups.com Precedence: list Mailing-list: list rtc-linux@googlegroups.com; contact rtc-linux+owners@googlegroups.com List-ID: X-Google-Group-Id: 712029733259 List-Post: , List-Help: , List-Archive: Sender: rtc-linux@googlegroups.com List-Subscribe: , List-Unsubscribe: , From: Xianglong Du enable_irq_wake() might fail, if so, we will see kernel warning in resume entries due to it always calls disable_irq_wake(). [ 200.659501] ------------[ cut here ]------------ [ 200.661292] WARNING: at /home/ASIA/xd01/temp/atlas6-3.x/kernel/kernel/irq/manage.c:529 irq_set_irq_wake+0xc4/0xf0() [ 200.671686] Unbalanced IRQ 52 wake disable [ 200.675764] Modules linked in: ipv6 libcomposite configfs [ 200.681153] CPU: 0 PID: 1591 Comm: ash Tainted: G W 3.10.0-00854-gdbd86d4-dirty #100 [ 200.689761] [] (unwind_backtrace+0x0/0xf8) from [] (show_stack+0x10/0x14) [ 200.698263] [] (show_stack+0x10/0x14) from [] (warn_slowpath_common+0x54/0x68) [ 200.707198] [] (warn_slowpath_common+0x54/0x68) from [] (warn_slowpath_fmt+0x30/0x40) [ 200.716749] [] (warn_slowpath_fmt+0x30/0x40) from [] (irq_set_irq_wake+0xc4/0xf0) [ 200.725951] [] (irq_set_irq_wake+0xc4/0xf0) from [] (sirfsoc_rtc_restore+0x30/0x38) [ 200.735325] [] (sirfsoc_rtc_restore+0x30/0x38) from [] (platform_pm_restore+0x2c/0x50) [ 200.744959] [] (platform_pm_restore+0x2c/0x50) from [] (dpm_run_callback.clone.6+0x30/0xb0) [ 200.755024] [] (dpm_run_callback.clone.6+0x30/0xb0) from [] (device_resume+0x88/0x134) [ 200.764657] [] (device_resume+0x88/0x134) from [] (dpm_resume+0x114/0x230) [ 200.773253] [] (dpm_resume+0x114/0x230) from [] (hibernation_snapshot+0x178/0x1d0) [ 200.782540] [] (hibernation_snapshot+0x178/0x1d0) from [] (hibernate+0x130/0x1dc) [ 200.791739] [] (hibernate+0x130/0x1dc) from [] (state_store+0xb4/0xc0) [ 200.799990] [] (state_store+0xb4/0xc0) from [] (kobj_attr_store+0x14/0x20) [ 200.808585] [] (kobj_attr_store+0x14/0x20) from [] (sysfs_write_file+0xfc/0x17c) [ 200.817696] [] (sysfs_write_file+0xfc/0x17c) from [] (vfs_write+0xc8/0x194) [ 200.826372] [] (vfs_write+0xc8/0x194) from [] (SyS_write+0x40/0x6c) [ 200.834362] [] (SyS_write+0x40/0x6c) from [] (ret_fast_syscall+0x0/0x30) [ 200.842771] ---[ end trace 10f52d38a3bc59c7 ]--- To avoid unbalanced "IRQ wake disable", ensure that disable_irq_wake() is called only when enable_irq_wake() have been successfully enabled. Signed-off-by: Xianglong Du Signed-off-by: Barry Song --- drivers/rtc/rtc-sirfsoc.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/rtc/rtc-sirfsoc.c b/drivers/rtc/rtc-sirfsoc.c index aa7ed4b..63460cf 100644 --- a/drivers/rtc/rtc-sirfsoc.c +++ b/drivers/rtc/rtc-sirfsoc.c @@ -44,6 +44,7 @@ struct sirfsoc_rtc_drv { struct rtc_device *rtc; u32 rtc_base; u32 irq; + unsigned irq_wake; /* Overflow for every 8 years extra time */ u32 overflow_rtc; #ifdef CONFIG_PM @@ -355,8 +356,8 @@ static int sirfsoc_rtc_suspend(struct device *dev) rtcdrv->saved_counter = sirfsoc_rtc_iobrg_readl(rtcdrv->rtc_base + RTC_CN); rtcdrv->saved_overflow_rtc = rtcdrv->overflow_rtc; - if (device_may_wakeup(&pdev->dev)) - enable_irq_wake(rtcdrv->irq); + if (device_may_wakeup(&pdev->dev) && !enable_irq_wake(rtcdrv->irq)) + rtcdrv->irq_wake = 1; return 0; } @@ -423,8 +424,10 @@ static int sirfsoc_rtc_resume(struct device *dev) struct platform_device *pdev = to_platform_device(dev); struct sirfsoc_rtc_drv *rtcdrv = platform_get_drvdata(pdev); sirfsoc_rtc_thaw(dev); - if (device_may_wakeup(&pdev->dev)) + if (device_may_wakeup(&pdev->dev) && rtcdrv->irq_wake) { disable_irq_wake(rtcdrv->irq); + rtcdrv->irq_wake = 0; + } return 0; } @@ -434,8 +437,10 @@ static int sirfsoc_rtc_restore(struct device *dev) struct platform_device *pdev = to_platform_device(dev); struct sirfsoc_rtc_drv *rtcdrv = platform_get_drvdata(pdev); - if (device_may_wakeup(&pdev->dev)) + if (device_may_wakeup(&pdev->dev) && rtcdrv->irq_wake) { disable_irq_wake(rtcdrv->irq); + rtcdrv->irq_wake = 0; + } return 0; }