diff options
author | Flavio Cruz <flaviocruz@gmail.com> | 2023-01-03 00:41:42 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2023-01-03 00:43:04 +0100 |
commit | d7348c94453d2662affecbb7605047044898ed19 (patch) | |
tree | bde2413d0cfb14962f8f543ad96765a445920908 /include | |
parent | 276f997fd7a51385829fec6d460d0a588b0bad7c (diff) | |
download | gnumach-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.h | 27 | ||||
-rw-r--r-- | include/sys/time.h | 53 |
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_ */ |