aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorFlavio Cruz <flaviocruz@gmail.com>2023-01-03 00:41:42 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2023-01-03 00:43:04 +0100
commitd7348c94453d2662affecbb7605047044898ed19 (patch)
treebde2413d0cfb14962f8f543ad96765a445920908 /include
parent276f997fd7a51385829fec6d460d0a588b0bad7c (diff)
downloadgnumach-d7348c94453d2662affecbb7605047044898ed19.tar.gz
gnumach-d7348c94453d2662affecbb7605047044898ed19.tar.bz2
gnumach-d7348c94453d2662affecbb7605047044898ed19.zip
Introduce time_value64_t to keep track of real time in the kernel
time_value64_t uses int64_t to track seconds and nanoseconds and hence is Y2038 proof. It does not have nano second resolution but it could be provided in the future. Removed include/sys/time.h as it remaps time_value_t into timeval which can create confusion. The timestamp from keyboard and mouse events is no longer set and replaced with rpc_time_value for better compatibility.
Diffstat (limited to 'include')
-rw-r--r--include/mach/time_value.h27
-rw-r--r--include/sys/time.h53
2 files changed, 26 insertions, 54 deletions
diff --git a/include/mach/time_value.h b/include/mach/time_value.h
index f9b977c8..9ecdd28e 100644
--- a/include/mach/time_value.h
+++ b/include/mach/time_value.h
@@ -41,7 +41,8 @@ struct rpc_time_value {
typedef struct rpc_time_value rpc_time_value_t;
/*
- * Time value used by kernel.
+ * Time value used by kernel interfaces. Ideally they should be migrated
+ * to use time_value64 below.
*/
struct time_value {
long_integer_t seconds;
@@ -49,6 +50,16 @@ struct time_value {
};
typedef struct time_value time_value_t;
+/*
+ * Time value used internally by the kernel that uses 64 bits to track seconds
+ * and nanoseconds. Note that the current resolution is only microseconds.
+ */
+struct time_value64 {
+ int64_t seconds;
+ int64_t nanoseconds;
+};
+typedef struct time_value64 time_value64_t;
+
/**
* Functions used by Mig to perform user to kernel conversion and vice-versa.
* We only do this because we may run a 64 bit kernel with a 32 bit user space.
@@ -69,10 +80,14 @@ static __inline__ time_value_t convert_time_value_from_user(rpc_time_value_t tv)
* are normalized (microseconds <= 999999).
*/
#define TIME_MICROS_MAX (1000000)
+#define TIME_NANOS_MAX (1000000000)
#define time_value_assert(val) \
assert(0 <= (val)->microseconds && (val)->microseconds < TIME_MICROS_MAX);
+#define time_value64_assert(val) \
+ assert(0 <= (val)->nanoseconds && (val)->nanoseconds < TIME_NANOS_MAX);
+
#define time_value_add_usec(val, micros) { \
time_value_assert(val); \
if (((val)->microseconds += (micros)) \
@@ -83,6 +98,16 @@ static __inline__ time_value_t convert_time_value_from_user(rpc_time_value_t tv)
time_value_assert(val); \
}
+#define time_value64_add_usec(val, micros) { \
+ time_value64_assert(val); \
+ if (((val)->nanoseconds += (micros) * 1000) \
+ >= TIME_NANOS_MAX) { \
+ (val)->nanoseconds -= TIME_NANOS_MAX; \
+ (val)->seconds++; \
+ } \
+ time_value64_assert(val); \
+}
+
#define time_value_sub_usec(val, micros) { \
time_value_assert(val); \
if (((val)->microseconds -= (micros)) < 0) { \
diff --git a/include/sys/time.h b/include/sys/time.h
deleted file mode 100644
index de97d325..00000000
--- a/include/sys/time.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1991 Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon rights
- * to redistribute these changes.
- */
-/*
- * Time-keeper for kernel IO devices.
- *
- * May or may not have any relation to wall-clock time.
- */
-
-#ifndef _MACH_SA_SYS_TIME_H_
-#define _MACH_SA_SYS_TIME_H_
-
-#include <mach/time_value.h>
-
-extern time_value_t time;
-
-/*
- * Definitions to keep old code happy.
- */
-#define timeval_t time_value_t
-#define timeval time_value
-#define tv_sec seconds
-#define tv_usec microseconds
-
-#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
-#define timercmp(tvp, uvp, cmp) \
- ((tvp)->tv_sec cmp (uvp)->tv_sec || \
- (tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec)
-#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0
-
-#endif /* _MACH_SA_SYS_TIME_H_ */