2007-08-04 22:44:46

by Jan Engelhardt

[permalink] [raw]
Subject: rtc max frequency setting

Hi,


with the old rtc.ko module, there was a /proc/sys/dev/rtc/max-user-freq
that could be set. With rtc_cmos.ko (or the new rtc infrastructure in
general), I am missing this file. Where can I set the max-user-freq now,
or is this obsolete now? (mplayer prefers to have user-freq to be >= 1024.)


thanks,
Jan
--


2007-08-05 00:07:00

by H. Peter Anvin

[permalink] [raw]
Subject: Re: rtc max frequency setting

Jan Engelhardt wrote:
> Hi,
>
> with the old rtc.ko module, there was a /proc/sys/dev/rtc/max-user-freq
> that could be set. With rtc_cmos.ko (or the new rtc infrastructure in
> general), I am missing this file. Where can I set the max-user-freq now,
> or is this obsolete now? (mplayer prefers to have user-freq to be >= 1024.)
>

Qemu wants something like this too. Both of these really want something
else, which is a high-frequency userspace timer.

What is the best way to do that on modern kernels?

-hpa

2007-08-05 00:42:32

by Alessandro Zummo

[permalink] [raw]
Subject: Re: [rtc-linux] Re: rtc max frequency setting

On Sat, 04 Aug 2007 17:06:38 -0700
"H. Peter Anvin" <[email protected]> wrote:

> > with the old rtc.ko module, there was a /proc/sys/dev/rtc/max-user-freq
> > that could be set. With rtc_cmos.ko (or the new rtc infrastructure in
> > general), I am missing this file. Where can I set the max-user-freq now,
> > or is this obsolete now? (mplayer prefers to have user-freq to be >= 1024.)
> >
>
> Qemu wants something like this too. Both of these really want something
> else, which is a high-frequency userspace timer.
>
> What is the best way to do that on modern kernels?

The rtc class is missing sysfs interface to the maximum settable
value. I guess I'll have to add it. I should be able to find the time
in the next few days.

However, I agree that they both shold be using an userspace
high freq timer :)

--

Best regards,

Alessandro Zummo,
Tower Technologies - Torino, Italy

http://www.towertech.it

2007-08-05 08:06:10

by Jan Engelhardt

[permalink] [raw]
Subject: Re: rtc max frequency setting


On Aug 4 2007 17:06, H. Peter Anvin wrote:
>Jan Engelhardt wrote:
>> Hi,
>>
>> with the old rtc.ko module, there was a /proc/sys/dev/rtc/max-user-freq
>> that could be set. With rtc_cmos.ko (or the new rtc infrastructure in
>> general), I am missing this file. Where can I set the max-user-freq now,
>> or is this obsolete now? (mplayer prefers to have user-freq to be >= 1024.)
>
>Qemu wants something like this too. Both of these really want something
>else, which is a high-frequency userspace timer.

Something like that. They use it to fire the virtual timer (RTC in
the guest), otherwise there is no way to simulate a HZ=1000 guest
(esp. Freebsd 6.0) in a HZ=100 host without busy-waiting.

For mplayer it is not that important (I'd even ask "what for?" since
other players do not need it either by default).

>What is the best way to do that on modern kernels?
>
> -hpa
>

Jan
--

2007-08-05 23:40:26

by Michael Chang

[permalink] [raw]
Subject: Re: rtc max frequency setting

On 8/4/07, H. Peter Anvin <[email protected]> wrote:
> Jan Engelhardt wrote:
> > Hi,
> >
> > with the old rtc.ko module, there was a /proc/sys/dev/rtc/max-user-freq
> > that could be set. With rtc_cmos.ko (or the new rtc infrastructure in
> > general), I am missing this file. Where can I set the max-user-freq now,
> > or is this obsolete now? (mplayer prefers to have user-freq to be >= 1024.)
> >
>
> Qemu wants something like this too. Both of these really want something
> else, which is a high-frequency userspace timer.

For mplayer, you can use -softsleep, but that uses a lot of CPU, and
you're probably already using a great deal of CPU for video decoding,
so it might be less than optimal.

-softsleep
Time frames by repeatedly checking the current time instead of
asking the kernel to wake up MPlayer at the correct time. Useful if
your kernel timing is imprecise and you cannot use the RTC either.
Comes at the price of higher CPU consumption.

And apparently, the build of MPlayer[1] that I have doesn't need rtc,
except on slower machines, according to the man page:

-rtc (RTC only)
Turns on usage of the Linux RTC (realtime clock - /dev/rtc) as
timing mechanism. This wakes up the process every 1/1024 seconds to
check the current time. Useless with modern Linux kernels configured
for desktop use as they already wake up the process with similar
accuracy when using normal timed sleep.

[1] MPlayer dev-SVN-r23777-4.1.2 (C) 2000-2007 MPlayer Team

--
Michael Chang

Please avoid sending me Word or PowerPoint attachments. Send me ODT,
RTF, or HTML instead.
See http://www.gnu.org/philosophy/no-word-attachments.html
Thank you.

2007-08-06 19:03:11

by Alessandro Zummo

[permalink] [raw]
Subject: Re: [rtc-linux] Re: rtc max frequency setting

On Sat, 04 Aug 2007 17:06:38 -0700
"H. Peter Anvin" <[email protected]> wrote:

>
> Jan Engelhardt wrote:
> > Hi,
> >
> > with the old rtc.ko module, there was a /proc/sys/dev/rtc/max-user-freq
> > that could be set. With rtc_cmos.ko (or the new rtc infrastructure in
> > general), I am missing this file. Where can I set the max-user-freq now,
> > or is this obsolete now? (mplayer prefers to have user-freq to be >= 1024.)
> >

quick hack to set the maximum freq. I haven't tested t, just compiled.
I'm not sure about simple_strtoul.

please provide feedback ;)

---
drivers/rtc/rtc-sysfs.c | 27 ++++++++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)

--- linux-2.6.orig/drivers/rtc/rtc-sysfs.c 2007-08-06 20:34:12.000000000 +0200
+++ linux-2.6/drivers/rtc/rtc-sysfs.c 2007-08-06 20:50:03.000000000 +0200
@@ -73,11 +73,37 @@ rtc_sysfs_show_since_epoch(struct device
return retval;
}

+static ssize_t
+rtc_sysfs_show_max_user_freq(struct device *dev, struct device_attribute *attr,
+ char *buf)
+{
+ struct rtc_device *rtc = to_rtc_device(dev);
+ return sprintf(buf, "%d\n", rtc->max_user_freq);
+}
+
+static ssize_t
+rtc_sysfs_set_max_user_freq(struct device *dev, struct device_attribute *attr,
+ const char *buf, size_t n)
+{
+ unsigned long w;
+ struct rtc_device *rtc = to_rtc_device(dev);
+
+ w = simple_strtoul(buf, NULL, 0);
+ if (is_power_of_2(w)) {
+ rtc->max_user_freq = w;
+ return n;
+ }
+
+ return -EINVAL;
+}
+
static struct device_attribute rtc_attrs[] = {
__ATTR(name, S_IRUGO, rtc_sysfs_show_name, NULL),
__ATTR(date, S_IRUGO, rtc_sysfs_show_date, NULL),
__ATTR(time, S_IRUGO, rtc_sysfs_show_time, NULL),
__ATTR(since_epoch, S_IRUGO, rtc_sysfs_show_since_epoch, NULL),
+ __ATTR(max_user_freq, S_IRUGO | S_IWUSR, rtc_sysfs_show_max_user_freq,
+ rtc_sysfs_set_max_user_freq),
{ },
};



--

Best regards,

Alessandro Zummo,
Tower Technologies - Torino, Italy

http://www.towertech.it

2007-08-10 04:36:39

by Bill Davidsen

[permalink] [raw]
Subject: Re: rtc max frequency setting

H. Peter Anvin wrote:
> Jan Engelhardt wrote:
>> Hi,
>>
>> with the old rtc.ko module, there was a /proc/sys/dev/rtc/max-user-freq
>> that could be set. With rtc_cmos.ko (or the new rtc infrastructure in
>> general), I am missing this file. Where can I set the max-user-freq now,
>> or is this obsolete now? (mplayer prefers to have user-freq to be >= 1024.)
>>
>
> Qemu wants something like this too. Both of these really want something
> else, which is a high-frequency userspace timer.
>
> What is the best way to do that on modern kernels?
>
/proc/sys/dev/hpet/max-user-freq? But I notice that some kernels provide
both values (my 2.6.15, was where I looked), so maybe the rtc went away.

--
Bill Davidsen <[email protected]>
"We have more to fear from the bungling of the incompetent than from
the machinations of the wicked." - from Slashdot