From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750722AbWD2N4S (ORCPT ); Sat, 29 Apr 2006 09:56:18 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1750726AbWD2N4R (ORCPT ); Sat, 29 Apr 2006 09:56:17 -0400 Received: from mba.ocn.ne.jp ([210.190.142.172]:31452 "EHLO smtp.mba.ocn.ne.jp") by vger.kernel.org with ESMTP id S1750722AbWD2N4R (ORCPT ); Sat, 29 Apr 2006 09:56:17 -0400 Date: Sat, 29 Apr 2006 22:56:50 +0900 (JST) Message-Id: <20060429.225650.108120558.anemo@mba.ocn.ne.jp> To: akpm@osdl.org Cc: a.zummo@towertech.it, linux-kernel@vger.kernel.org Subject: Re: [PATCH] RTC: rtc-dev tweak for 64-bit kernel From: Atsushi Nemoto In-Reply-To: <20060428233152.4da54d33.akpm@osdl.org> References: <20060429.012519.126141613.anemo@mba.ocn.ne.jp> <20060428233152.4da54d33.akpm@osdl.org> X-Fingerprint: 6ACA 1623 39BD 9A94 9B1A B746 CA77 FE94 2874 D52F X-Pgp-Public-Key: http://wwwkeys.pgp.net/pks/lookup?op=get&search=0x2874D52F X-Mailer: Mew version 3.3 on Emacs 21.4 / Mule 5.0 (SAKAKI) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 28 Apr 2006 23:31:52 -0700, Andrew Morton wrote: > > Make rtc-dev more friendly to 64-bit platforms with 32-bit userland. > > This tweak is came from genrtc driver. > > Please define "friendly". It's not clear what this patch does... ... > > We normally omit the space between "sizeof" and "(". Thanks for your comments. Here is an updated patch. Make rtc-dev work well on 64-bit platforms with 32-bit userland. On those platforms, users might try to read 32-bit integer value. This patch make rtc-dev's read() work well for both "int" and "long" size. This tweak is came from genrtc driver. Signed-off-by: Atsushi Nemoto diff --git a/drivers/rtc/rtc-dev.c b/drivers/rtc/rtc-dev.c index b1e3e61..6c9ad92 100644 --- a/drivers/rtc/rtc-dev.c +++ b/drivers/rtc/rtc-dev.c @@ -58,7 +58,7 @@ rtc_dev_read(struct file *file, char __u unsigned long data; ssize_t ret; - if (count < sizeof(unsigned long)) + if (count != sizeof(unsigned int) && count < sizeof(unsigned long)) return -EINVAL; add_wait_queue(&rtc->irq_queue, &wait); @@ -90,11 +90,16 @@ rtc_dev_read(struct file *file, char __u if (ret == 0) { /* Check for any data updates */ if (rtc->ops->read_callback) - data = rtc->ops->read_callback(rtc->class_dev.dev, data); + data = rtc->ops->read_callback(rtc->class_dev.dev, + data); - ret = put_user(data, (unsigned long __user *)buf); - if (ret == 0) - ret = sizeof(unsigned long); + if (sizeof(int) != sizeof(long) && + count == sizeof(unsigned int)) + ret = put_user(data, (unsigned int __user *)buf) ?: + sizeof(unsigned int); + else + ret = put_user(data, (unsigned long __user *)buf) ?: + sizeof(unsigned long); } return ret; }