* [PATCH] hwclock: Support GNU Hurd
@ 2024-12-09 2:58 Zhaoming Luo
2024-12-09 10:32 ` Karel Zak
0 siblings, 1 reply; 4+ messages in thread
From: Zhaoming Luo @ 2024-12-09 2:58 UTC (permalink / raw)
To: util-linux; +Cc: bug-hurd, Zhaoming Luo
* configure.ac: add HURD so it can be used in conditional in am files
* sys-utils/Makemodule.am: compile hwclock for GNU Hurd
* sys-utils/hwclock-rtc.c: compile for GNU Hurd
* sys-utils/hwclock.c: compile for GNU Hurd
* sys-utils/hwclock.h: compile for GNU Hurd
Signed-off-by: Zhaoming Luo <zhmingluo@163.com>
---
configure.ac | 6 +++++-
sys-utils/Makemodule.am | 5 +++++
sys-utils/hwclock-rtc.c | 15 ++++++++++++---
sys-utils/hwclock.c | 2 +-
sys-utils/hwclock.h | 4 +++-
5 files changed, 26 insertions(+), 6 deletions(-)
diff --git a/configure.ac b/configure.ac
index 698da36..8de6af6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -263,16 +263,20 @@ AC_PATH_PROG([XSLTPROC], [xsltproc])
linux_os=no
bsd_os=no
+gnu_os=no
AS_CASE([${host_os}],
[*linux*],
[linux_os=yes],
[*darwin*],
[darwin_os=yes],
[*bsd*],
- [bsd_os=yes])
+ [bsd_os=yes],
+ [gnu*],
+ [gnu_os=yes])
AM_CONDITIONAL([LINUX], [test "x$linux_os" = xyes])
AM_CONDITIONAL([DARWIN], [test "x$darwin_os" = xyes])
AM_CONDITIONAL([BSD], [test "x$bsd_os" = xyes])
+AM_CONDITIONAL([HURD], [test "x$gnu_os" = xyes])
AS_IF([test "x$darwin_os" = xyes], [
AC_DEFINE([_DARWIN_C_SOURCE], [1], [Enable MAP_ANON in sys/mman.h on Mac OS X])
diff --git a/sys-utils/Makemodule.am b/sys-utils/Makemodule.am
index 209b656..8cc69be 100644
--- a/sys-utils/Makemodule.am
+++ b/sys-utils/Makemodule.am
@@ -570,6 +570,11 @@ hwclock_SOURCES += \
lib/monotonic.c
hwclock_LDADD += $(REALTIME_LIBS)
endif
+if HURD
+hwclock_SOURCES += \
+ sys-utils/hwclock-rtc.c \
+ lib/monotonic.c
+endif
if HAVE_AUDIT
hwclock_LDADD += -laudit
endif
diff --git a/sys-utils/hwclock-rtc.c b/sys-utils/hwclock-rtc.c
index 2796f2e..7162ae9 100644
--- a/sys-utils/hwclock-rtc.c
+++ b/sys-utils/hwclock-rtc.c
@@ -8,10 +8,15 @@
*
* rtc.c - Use /dev/rtc for clock access
*/
+#ifdef __GNU__
+#include <sys/ioctl.h>
+#include <hurd/rtc.h>
+#else
#include <asm/ioctl.h>
-#include <errno.h>
#include <linux/rtc.h>
#include <linux/types.h>
+#endif /* __GNU__ */
+#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
@@ -28,6 +33,7 @@
#include "hwclock.h"
+#ifndef __GNU__
#ifndef RTC_PARAM_GET
struct rtc_param {
__u64 param;
@@ -60,6 +66,7 @@ const struct hwclock_param *get_hwclock_params(void)
{
return hwclock_params;
}
+#endif /* __GNU__ */
/*
* /dev/rtc is conventionally chardev 10/135
@@ -99,12 +106,12 @@ static int open_rtc(const struct hwclock_control *ctl)
/* --rtc option has been given */
if (ctl->rtc_dev_name) {
rtc_dev_name = ctl->rtc_dev_name;
- rtc_dev_fd = open(rtc_dev_name, O_RDONLY);
+ rtc_dev_fd = open(rtc_dev_name, O_RDWR);
} else {
for (i = 0; i < ARRAY_SIZE(fls); i++) {
if (ctl->verbose)
printf(_("Trying to open: %s\n"), fls[i]);
- rtc_dev_fd = open(fls[i], O_RDONLY);
+ rtc_dev_fd = open(fls[i], O_RDWR);
if (rtc_dev_fd < 0) {
if (errno == ENOENT || errno == ENODEV)
@@ -411,6 +418,7 @@ int set_epoch_rtc(const struct hwclock_control *ctl)
+#ifndef __GNU__
static int resolve_rtc_param_alias(const char *alias, __u64 *value)
{
const struct hwclock_param *param = &hwclock_params[0];
@@ -609,3 +617,4 @@ int rtc_vl_clear(const struct hwclock_control *ctl)
return 0;
}
+#endif /* __GNU__ */
diff --git a/sys-utils/hwclock.c b/sys-utils/hwclock.c
index 2b33dfb..2714775 100644
--- a/sys-utils/hwclock.c
+++ b/sys-utils/hwclock.c
@@ -989,7 +989,7 @@ static void determine_clock_access_method(const struct hwclock_control *ctl)
if (ctl->directisa)
ur = probe_for_cmos_clock();
#endif
-#ifdef __linux__
+#if defined(__linux__) || defined(__GNU__)
if (!ur)
ur = probe_for_rtc_clock(ctl);
#endif
diff --git a/sys-utils/hwclock.h b/sys-utils/hwclock.h
index 2522d6c..4cbbff9 100644
--- a/sys-utils/hwclock.h
+++ b/sys-utils/hwclock.h
@@ -36,8 +36,10 @@ struct hwclock_control {
#if defined(__linux__) && defined(__alpha__)
char *epoch_option;
#endif
-#ifdef __linux__
+#if defined(__linux__) || defined(__GNU__)
char *rtc_dev_name;
+#endif
+#ifdef __linux__
uint32_t param_idx; /* --param-index <n> */
#endif
char *param_get_option;
--
2.45.2
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH] hwclock: Support GNU Hurd
2024-12-09 2:58 [PATCH] hwclock: Support GNU Hurd Zhaoming Luo
@ 2024-12-09 10:32 ` Karel Zak
2024-12-09 10:36 ` Samuel Thibault
0 siblings, 1 reply; 4+ messages in thread
From: Karel Zak @ 2024-12-09 10:32 UTC (permalink / raw)
To: Zhaoming Luo; +Cc: util-linux, bug-hurd
On Mon, Dec 09, 2024 at 10:58:15AM GMT, Zhaoming Luo wrote:
> if (ctl->rtc_dev_name) {
> rtc_dev_name = ctl->rtc_dev_name;
> - rtc_dev_fd = open(rtc_dev_name, O_RDONLY);
> + rtc_dev_fd = open(rtc_dev_name, O_RDWR);
Why do you need O_RDWR on HURD? Maybe it would be better to add an
#ifdef, as it is unnecessary for Linux.
Karel
--
Karel Zak <kzak@redhat.com>
http://karelzak.blogspot.com
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH] hwclock: Support GNU Hurd
2024-12-09 10:32 ` Karel Zak
@ 2024-12-09 10:36 ` Samuel Thibault
2024-12-09 10:59 ` Karel Zak
0 siblings, 1 reply; 4+ messages in thread
From: Samuel Thibault @ 2024-12-09 10:36 UTC (permalink / raw)
To: Karel Zak; +Cc: Zhaoming Luo, util-linux, bug-hurd
Karel Zak, le lun. 09 déc. 2024 11:32:33 +0100, a ecrit:
> On Mon, Dec 09, 2024 at 10:58:15AM GMT, Zhaoming Luo wrote:
> > if (ctl->rtc_dev_name) {
> > rtc_dev_name = ctl->rtc_dev_name;
> > - rtc_dev_fd = open(rtc_dev_name, O_RDONLY);
> > + rtc_dev_fd = open(rtc_dev_name, O_RDWR);
>
> Why do you need O_RDWR on HURD?
For setting the time, it makes sense to request WR?
> Maybe it would be better to add an
> #ifdef, as it is unnecessary for Linux.
I have to say I'm surprised that Linux doesn't require it for setting
the time.
Samuel
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH] hwclock: Support GNU Hurd
2024-12-09 10:36 ` Samuel Thibault
@ 2024-12-09 10:59 ` Karel Zak
0 siblings, 0 replies; 4+ messages in thread
From: Karel Zak @ 2024-12-09 10:59 UTC (permalink / raw)
To: Zhaoming Luo, util-linux, bug-hurd
On Mon, Dec 09, 2024 at 11:36:22AM GMT, Samuel Thibault wrote:
> Karel Zak, le lun. 09 déc. 2024 11:32:33 +0100, a ecrit:
> > On Mon, Dec 09, 2024 at 10:58:15AM GMT, Zhaoming Luo wrote:
> > > if (ctl->rtc_dev_name) {
> > > rtc_dev_name = ctl->rtc_dev_name;
> > > - rtc_dev_fd = open(rtc_dev_name, O_RDONLY);
> > > + rtc_dev_fd = open(rtc_dev_name, O_RDWR);
> >
> > Why do you need O_RDWR on HURD?
>
> For setting the time, it makes sense to request WR?
>
> > Maybe it would be better to add an
> > #ifdef, as it is unnecessary for Linux.
>
> I have to say I'm surprised that Linux doesn't require it for setting
> the time.
It requires CAP_SYS_TIME. I assume that in this case, the RTC file
descriptor is simply a handler used to communicate with the RTC
driver. There are also more RTC_* set/get ioctls available, such as
alarm and interrupts.
Karel
--
Karel Zak <kzak@redhat.com>
http://karelzak.blogspot.com
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2024-12-09 11:00 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-09 2:58 [PATCH] hwclock: Support GNU Hurd Zhaoming Luo
2024-12-09 10:32 ` Karel Zak
2024-12-09 10:36 ` Samuel Thibault
2024-12-09 10:59 ` Karel Zak
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox