Re: [PATCH] RTC: rtc-dev tweak for 64-bit kernel

From: Atsushi Nemoto
Date: Sat Apr 29 2006 - 09:56:15 EST


On Fri, 28 Apr 2006 23:31:52 -0700, Andrew Morton <akpm@xxxxxxxx> 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 <anemo@xxxxxxxxxxxxx>

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;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/