aboutsummaryrefslogtreecommitdiff
path: root/sys/compat
diff options
context:
space:
mode:
authorDmitry Chagin <dchagin@FreeBSD.org>2009-05-10 18:43:43 +0000
committerDmitry Chagin <dchagin@FreeBSD.org>2009-05-10 18:43:43 +0000
commit8d30f381ef4262426fae3baff499218555b512b7 (patch)
tree80f75650b634fefa8d61d026ce4eb87879a7bdf8 /sys/compat
parent580dd797fd39fcd07162a4dd9c53e683bcff96ff (diff)
Notes
Diffstat (limited to 'sys/compat')
-rw-r--r--sys/compat/linux/linux_mib.h1
-rw-r--r--sys/compat/linux/linux_misc.c14
2 files changed, 14 insertions, 1 deletions
diff --git a/sys/compat/linux/linux_mib.h b/sys/compat/linux/linux_mib.h
index 9f0f41c0d84e..f78a5e501402 100644
--- a/sys/compat/linux/linux_mib.h
+++ b/sys/compat/linux/linux_mib.h
@@ -45,6 +45,7 @@ int linux_set_oss_version(struct thread *td, int oss_version);
int linux_kernver(struct thread *td);
+#define LINUX_KERNVER_2004000 2004000
#define LINUX_KERNVER_2006000 2006000
#define linux_use26(t) (linux_kernver(t) >= LINUX_KERNVER_2006000)
diff --git a/sys/compat/linux/linux_misc.c b/sys/compat/linux/linux_misc.c
index c5b1e54569e9..72791971c7be 100644
--- a/sys/compat/linux/linux_misc.c
+++ b/sys/compat/linux/linux_misc.c
@@ -661,7 +661,19 @@ struct l_times_argv {
l_clock_t tms_cstime;
};
-#define CONVTCK(r) (r.tv_sec * stclohz + r.tv_usec / (1000000 / stclohz))
+
+/*
+ * Glibc versions prior to 2.2.1 always use hard-coded CLK_TCK value.
+ * Since 2.2.1 Glibc uses value exported from kernel via AT_CLKTCK
+ * auxiliary vector entry.
+ */
+#define CLK_TCK 100
+
+#define CONVOTCK(r) (r.tv_sec * CLK_TCK + r.tv_usec / (1000000 / CLK_TCK))
+#define CONVNTCK(r) (r.tv_sec * stclohz + r.tv_usec / (1000000 / stclohz))
+
+#define CONVTCK(r) (linux_kernver(td) >= LINUX_KERNVER_2004000 ? \
+ CONVNTCK(r) : CONVOTCK(r))
int
linux_times(struct thread *td, struct linux_times_args *args)