summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarlos Santos2019-07-03 18:31:34 +0200
committerKarel Zak2019-07-15 13:56:13 +0200
commit88bc304ba815e21b09373cfec4e2f1f087482214 (patch)
tree7a506442d31a050492e040b5e19c40d9568fd36a
parenttests: (libmount) make X-* and x-* more robust (diff)
downloadkernel-qcow2-util-linux-88bc304ba815e21b09373cfec4e2f1f087482214.tar.gz
kernel-qcow2-util-linux-88bc304ba815e21b09373cfec4e2f1f087482214.tar.xz
kernel-qcow2-util-linux-88bc304ba815e21b09373cfec4e2f1f087482214.zip
hwclock: use CMOS clock only if available
- 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>
-rw-r--r--configure.ac13
-rw-r--r--sys-utils/Makemodule.am7
-rw-r--r--sys-utils/hwclock-cmos.c47
-rw-r--r--sys-utils/hwclock.c2
4 files changed, 26 insertions, 43 deletions
diff --git a/configure.ac b/configure.ac
index 997b6388c..8aa2fed38 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1517,6 +1517,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);