From patchwork Mon Feb 8 21:21:01 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= X-Patchwork-Id: 44860 Return-Path: <3SIBwSwAACYQz1k-tqv25owwotmozw2x0.kwu@groups.bounces.google.com> X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from mail-yx0-f142.google.com (mail-yx0-f142.google.com [209.85.210.142]) by ozlabs.org (Postfix) with ESMTP id 062EBB7C06 for ; Tue, 9 Feb 2010 08:21:13 +1100 (EST) Received: by yxe6 with SMTP id 6sf7156879yxe.1 for ; Mon, 08 Feb 2010 13:21:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=beta; h=domainkey-signature:received:x-beenthere:received:received:received :received:received-spf:received:received:date:from:to:cc:subject :message-id:references:mime-version:in-reply-to:user-agent :x-sa-exim-connect-ip:x-sa-exim-mail-from:x-sa-exim-scanned :x-ptx-original-recipient:x-original-authentication-results :x-original-sender:reply-to:precedence:mailing-list:list-id :list-post:list-help:list-archive:x-thread-url:x-message-url:sender :list-subscribe:list-unsubscribe:content-type:content-disposition :content-transfer-encoding; bh=9ivizHgxhbnMIMofNT1TlTGltYyl/DOPbwQD897wurc=; b=mRYilCJGK/O4qVTdQXGQKjyTrDS1v8toXNesgEDnHTMcIgLChxo9XftKX5bFWWFi2p OHujNZ9wvQQgv7ZcroR+yO6QhEh980xehVlsi3wvy2HIqG9LCnbCKA7aP8Kq+J/9Qvj5 4f6w4uTTCtTvSASvfRJ/j1QHHd20HPiJjHlLM= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlegroups.com; s=beta; h=x-beenthere:received-spf:date:from:to:cc:subject:message-id :references:mime-version:in-reply-to:user-agent:x-sa-exim-connect-ip :x-sa-exim-mail-from:x-sa-exim-scanned:x-ptx-original-recipient :x-original-authentication-results:x-original-sender:reply-to :precedence:mailing-list:list-id:list-post:list-help:list-archive :x-thread-url:x-message-url:sender:list-subscribe:list-unsubscribe :content-type:content-disposition:content-transfer-encoding; b=TDoJDH2cucsvtqPsZifwvamMXepAJbI76iY5fahu2g8KuNbKfIvEZf3OaP52mbs/KD eDwr+JHL/788A1oz4/aU41xoAbKIg5l8e1IbPcUV8vwvrnAjazpa9bkOrev0o9D/msqf s2Zyrqo7VBGcMFuP3op9f0cw6dzXe7f2q1AF4= Received: by 10.101.139.31 with SMTP id r31mr623121ann.24.1265664072116; Mon, 08 Feb 2010 13:21:12 -0800 (PST) X-BeenThere: rtc-linux@googlegroups.com Received: by 10.223.58.206 with SMTP id i14ls610176fah.1.p; Mon, 08 Feb 2010 13:21:11 -0800 (PST) Received: by 10.223.161.210 with SMTP id s18mr349851fax.23.1265664062694; Mon, 08 Feb 2010 13:21:02 -0800 (PST) Received: by 10.223.161.210 with SMTP id s18mr349850fax.23.1265664062673; Mon, 08 Feb 2010 13:21:02 -0800 (PST) Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [92.198.50.35]) by gmr-mx.google.com with ESMTP id 12si672487fxm.5.2010.02.08.13.21.02; Mon, 08 Feb 2010 13:21:02 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of ukl@pengutronix.de designates 92.198.50.35 as permitted sender) client-ip=92.198.50.35; Received: from octopus.hi.pengutronix.de ([2001:6f8:1178:2:215:17ff:fe12:23b0]) by metis.ext.pengutronix.de with esmtp (Exim 4.69) (envelope-from ) id 1Neb2U-0002BV-Cr; Mon, 08 Feb 2010 22:21:02 +0100 Received: from ukl by octopus.hi.pengutronix.de with local (Exim 4.69) (envelope-from ) id 1Neb2T-0002qw-MZ; Mon, 08 Feb 2010 22:21:01 +0100 Date: Mon, 8 Feb 2010 22:21:01 +0100 From: Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= To: rtc-linux@googlegroups.com Cc: Paul Gortmaker , Alessandro Zummo , Andrew Morton , linux-kernel@vger.kernel.org Subject: [rtc-linux] Re: [PATCH] rtc/hctosys: only claim the RTC provided the system time if it did Message-ID: <20100208212101.GA10953@pengutronix.de> References: <1265663419-10165-1-git-send-email-u.kleine-koenig@pengutronix.de> MIME-Version: 1.0 In-Reply-To: <1265663419-10165-1-git-send-email-u.kleine-koenig@pengutronix.de> User-Agent: Mutt/1.5.18 (2008-05-17) X-SA-Exim-Connect-IP: 2001:6f8:1178:2:215:17ff:fe12:23b0 X-SA-Exim-Mail-From: ukl@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: rtc-linux@googlegroups.com X-Original-Authentication-Results: gmr-mx.google.com; spf=pass (google.com: best guess record for domain of ukl@pengutronix.de designates 92.198.50.35 as permitted sender) smtp.mail=ukl@pengutronix.de X-Original-Sender: u.kleine-koenig@pengutronix.de Reply-To: rtc-linux@googlegroups.com Precedence: list Mailing-list: list rtc-linux@googlegroups.com; contact rtc-linux+owners@googlegroups.com List-ID: List-Post: , List-Help: , List-Archive: X-Thread-Url: http://groups.google.com/group/rtc-linux/t/c7fb28a151baff82 X-Message-Url: http://groups.google.com/group/rtc-linux/msg/ad5ff4b60c06f45c Sender: rtc-linux@googlegroups.com List-Subscribe: , List-Unsubscribe: , Content-Disposition: inline Hello, On Mon, Feb 08, 2010 at 10:10:18PM +0100, Uwe Kleine-König wrote: > Moreover change error handling in rtc_hctosys() to use goto and so > reduce the indention level. > > Signed-off-by: Uwe Kleine-König > --- > drivers/rtc/hctosys.c | 59 ++++++++++++++++++++++++++++-------------------- > include/linux/rtc.h | 6 +++++ > 2 files changed, 40 insertions(+), 25 deletions(-) > > diff --git a/drivers/rtc/hctosys.c b/drivers/rtc/hctosys.c > index 33c0e98..bc90b09 100644 > --- a/drivers/rtc/hctosys.c > +++ b/drivers/rtc/hctosys.c > @@ -22,48 +22,57 @@ > * the best guess is to add 0.5s. > */ > > +int rtc_hctosys_ret = -ENODEV; > + > static int __init rtc_hctosys(void) > { > - int err; > + int err = -ENODEV; > struct rtc_time tm; > + struct timespec tv = { > + .tv_nsec = NSEC_PER_SEC >> 1, > + }; > struct rtc_device *rtc = rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE); > > if (rtc == NULL) { > - printk("%s: unable to open rtc device (%s)\n", > + pr_err("%s: unable to open rtc device (%s)\n", > __FILE__, CONFIG_RTC_HCTOSYS_DEVICE); > - return -ENODEV; > + goto err_open; > } > > err = rtc_read_time(rtc, &tm); > - if (err == 0) { > - err = rtc_valid_tm(&tm); > - if (err == 0) { > - struct timespec tv; > + if (err) { > + dev_err(rtc->dev.parent, > + "hctosys: unable to read the hardware clock\n"); > + goto err_read; > > - tv.tv_nsec = NSEC_PER_SEC >> 1; > + } > > - rtc_tm_to_time(&tm, &tv.tv_sec); > + err = rtc_valid_tm(&tm); > + if (err) { > + dev_err(rtc->dev.parent, > + "hctosys: invalid date/time\n"); > + goto err_invalid; > + } > > - do_settimeofday(&tv); > + rtc_tm_to_time(&tm, &tv.tv_sec); > > - dev_info(rtc->dev.parent, > - "setting system clock to " > - "%d-%02d-%02d %02d:%02d:%02d UTC (%u)\n", > - tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, > - tm.tm_hour, tm.tm_min, tm.tm_sec, > - (unsigned int) tv.tv_sec); > - } > - else > - dev_err(rtc->dev.parent, > - "hctosys: invalid date/time\n"); > - } > - else > - dev_err(rtc->dev.parent, > - "hctosys: unable to read the hardware clock\n"); > + do_settimeofday(&tv); > > + dev_info(rtc->dev.parent, > + "setting system clock to " > + "%d-%02d-%02d %02d:%02d:%02d UTC (%u)\n", > + tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, > + tm.tm_hour, tm.tm_min, tm.tm_sec, > + (unsigned int) tv.tv_sec); > + > +err_invalid: > +err_read: > rtc_class_close(rtc); > > - return 0; > +err_open: > + rtc_hctosys_ret = err; > + > + return err; > } > > late_initcall(rtc_hctosys); > diff --git a/include/linux/rtc.h b/include/linux/rtc.h > index 60f88a7..14dbc83 100644 > --- a/include/linux/rtc.h > +++ b/include/linux/rtc.h > @@ -238,6 +238,12 @@ static inline bool is_leap_year(unsigned int year) > return (!(year % 4) && (year % 100)) || !(year % 400); > } > > +#ifdef CONFIG_RTC_HCTOSYS > +extern int rtc_hctosys_ret; > +#else > +#define rtc_hctosys_ret -ENODEV > +#endif > + > #endif /* __KERNEL__ */ > > #endif /* _LINUX_RTC_H_ */ oops, I missed a hunk here, namely: diff --git a/drivers/rtc/rtc-sysfs.c b/drivers/rtc/rtc-sysfs.c index 7dd23a6..380083c 100644 --- a/drivers/rtc/rtc-sysfs.c +++ b/drivers/rtc/rtc-sysfs.c @@ -107,8 +107,9 @@ rtc_sysfs_show_hctosys(struct device *dev, struct device_attribute *attr, char *buf) { #ifdef CONFIG_RTC_HCTOSYS_DEVICE - if (strcmp(dev_name(&to_rtc_device(dev)->dev), - CONFIG_RTC_HCTOSYS_DEVICE) == 0) + if (rtc_hctosys_ret == 0 && + strcmp(dev_name(&to_rtc_device(dev)->dev), + CONFIG_RTC_HCTOSYS_DEVICE) == 0) return sprintf(buf, "1\n"); else #endif