util-linux.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] hwclock: use CMOS clock only if available
@ 2019-07-03 16:31 unixmania
  0 siblings, 0 replies; only message in thread
From: unixmania @ 2019-07-03 16:31 UTC (permalink / raw)
  To: util-linux; +Cc: Carlos Santos

From: Carlos Santos <unixmania@gmail.com>

- Add --disable-hwclock-cmos configuration argument
- Add USE_HWCLOCK_CMOS (enabled by default for i386/x86_64)
- Add define(USE_HWCLOCK_CMOS)
- Compile hwclock-cmos.c only if USE_HWCLOCK_CMOS is true
- Remove all unnecessary #ifdefs from hwclock-cmos.c
- Add #ifdef USE_HWCLOCK_CMOS around the determine_clock_access_method()
  call in hwclock.c

Signed-off-by: Carlos Santos <unixmania@gmail.com>
---
TODO: find a way to check the architecture in configure.ac and set
USE_HWCLOCK_CMOS to true inly if it's i386/x86_64.
---
 configure.ac             | 13 +++++++++++
 sys-utils/Makemodule.am  |  7 ++++--
 sys-utils/hwclock-cmos.c | 47 +++++-----------------------------------
 sys-utils/hwclock.c      |  2 ++
 4 files changed, 26 insertions(+), 43 deletions(-)

diff --git a/configure.ac b/configure.ac
index a840e20ee..f5b9d4a4e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1516,6 +1516,19 @@ UL_REQUIRES_HAVE([hwclock], [io, linuxdummy], [ioperm iopl function or Linux])
 AM_CONDITIONAL([BUILD_HWCLOCK], [test "x$build_hwclock" = xyes])
 
 
+AC_ARG_ENABLE([hwclock-cmos],
+  AS_HELP_STRING([--disable-hwclock-cmos], [do not use CMOS clock]),
+  [], [use_hwclock_cmos="$build_hwclock"]
+)
+
+AS_IF([test "x$use_hwclock_cmos" = xyes], [
+  AM_CONDITIONAL([USE_HWCLOCK_CMOS], [true])
+  AC_DEFINE([USE_HWCLOCK_CMOS], [1], [Define to 1 if want to use CMOS clock.])
+],[
+  AM_CONDITIONAL([USE_HWCLOCK_CMOS], [false])
+])
+
+
 UL_BUILD_INIT([mkfs], [yes])
 AM_CONDITIONAL([BUILD_MKFS], [test "x$build_mkfs" = xyes])
 
diff --git a/sys-utils/Makemodule.am b/sys-utils/Makemodule.am
index 7c118a6de..98e2cc29b 100644
--- a/sys-utils/Makemodule.am
+++ b/sys-utils/Makemodule.am
@@ -451,9 +451,12 @@ dist_man_MANS += \
 PATHFILES += sys-utils/hwclock.8
 hwclock_SOURCES = \
 	sys-utils/hwclock.c \
-	sys-utils/hwclock.h \
-	sys-utils/hwclock-cmos.c
+	sys-utils/hwclock.h
 hwclock_LDADD = $(LDADD) libcommon.la -lm
+if USE_HWCLOCK_CMOS
+hwclock_SOURCES += \
+	sys-utils/hwclock-cmos.c
+endif
 if LINUX
 hwclock_SOURCES += \
 	sys-utils/hwclock-rtc.c \
diff --git a/sys-utils/hwclock-cmos.c b/sys-utils/hwclock-cmos.c
index a11f676b8..4d3e023d9 100644
--- a/sys-utils/hwclock-cmos.c
+++ b/sys-utils/hwclock-cmos.c
@@ -56,37 +56,13 @@
 #include "pathnames.h"
 
 /* for inb, outb */
-#if defined(__i386__) || defined(__x86_64__)
-# ifdef HAVE_SYS_IO_H
-#  include <sys/io.h>
-# elif defined(HAVE_ASM_IO_H)
-#  include <asm/io.h>
-# else
-#  undef __i386__
-#  undef __x86_64__
-#  warning "disable cmos access - no sys/io.h or asm/io.h"
-static void outb(int a __attribute__((__unused__)),
-		 int b __attribute__((__unused__)))
-{
-}
-
-static int inb(int c __attribute__((__unused__)))
-{
-	return 0;
-}
-# endif				/* __i386__ __x86_64__ */
+#ifdef HAVE_SYS_IO_H
+# include <sys/io.h>
+#elif defined(HAVE_ASM_IO_H)
+# include <asm/io.h>
 #else
-# warning "disable cmos access - not i386 or x86_64"
-static void outb(int a __attribute__((__unused__)),
-		 int b __attribute__((__unused__)))
-{
-}
-
-static int inb(int c __attribute__((__unused__)))
-{
-	return 0;
-}
-#endif				/* for inb, outb */
+# error "no sys/io.h or asm/io.h"
+#endif	/* HAVE_SYS_IO_H, HAVE_ASM_IO_H */
 
 #include "hwclock.h"
 
@@ -360,7 +336,6 @@ static int set_hardware_clock_cmos(const struct hwclock_control *ctl
 	return 0;
 }
 
-#if defined(__i386__) || defined(__x86_64__)
 # if defined(HAVE_IOPL)
 static int i386_iopl(const int level)
 {
@@ -373,12 +348,6 @@ static int i386_iopl(const int level __attribute__ ((__unused__)))
 	return ioperm(clock_ctl_addr, 2, 1);
 }
 # endif
-#else
-static int i386_iopl(const int level __attribute__ ((__unused__)))
-{
-	return IOPL_NOT_IMPLEMENTED;
-}
-#endif
 
 static int get_permissions_cmos(void)
 {
@@ -412,9 +381,5 @@ static struct clock_ops cmos_interface = {
  */
 struct clock_ops *probe_for_cmos_clock(void)
 {
-#if defined(__i386__) || defined(__x86_64__)
 	return &cmos_interface;
-#else
-	return NULL;
-#endif
 }
diff --git a/sys-utils/hwclock.c b/sys-utils/hwclock.c
index a2c5cc2a4..c01a86826 100644
--- a/sys-utils/hwclock.c
+++ b/sys-utils/hwclock.c
@@ -925,8 +925,10 @@ static void determine_clock_access_method(const struct hwclock_control *ctl)
 {
 	ur = NULL;
 
+#ifdef USE_HWCLOCK_CMOS
 	if (ctl->directisa)
 		ur = probe_for_cmos_clock();
+#endif
 #ifdef __linux__
 	if (!ur)
 		ur = probe_for_rtc_clock(ctl);
-- 
2.18.1


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2019-07-03 16:31 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-03 16:31 [PATCH v2] hwclock: use CMOS clock only if available unixmania

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).