diff options
-rw-r--r-- | pfinet/linux/sched.h | 6 | ||||
-rw-r--r-- | pfinet/linux/time.h | 4 | ||||
-rw-r--r-- | pfinet/mapped-time.h | 27 | ||||
-rw-r--r-- | pfinet/timer-emul.c | 20 |
4 files changed, 19 insertions, 38 deletions
diff --git a/pfinet/linux/sched.h b/pfinet/linux/sched.h index 08358dd5..acc60944 100644 --- a/pfinet/linux/sched.h +++ b/pfinet/linux/sched.h @@ -53,9 +53,9 @@ void schedule (void); /* This function is used only to send SIGPIPE to the current task. In all such cases, EPIPE is returned anyhow. In the Hurd, servers are not responsible for SIGPIPE; the library - does that itself upon receiving EPIPE. So we can just + does that itself upon receiving EPIPE. So we can just NOP such calls. */ -extern inline int +extern inline int send_sig (u_long signo, struct task_struct *task, int priv) { assert (signo == SIGPIPE); @@ -74,7 +74,7 @@ static struct timeval _xtime_buf; extern inline struct timeval fetch_xtime () { - fill_timeval (&_xtime_buf); + maptime_read (mapped_time, &_xtime_buf); return _xtime_buf; } diff --git a/pfinet/linux/time.h b/pfinet/linux/time.h index 9b6b9904..50e13783 100644 --- a/pfinet/linux/time.h +++ b/pfinet/linux/time.h @@ -4,10 +4,10 @@ #include <sys/time.h> #include "mapped-time.h" -extern inline void +extern inline void do_gettimeofday (struct timeval *tp) { - fill_timeval (tp); + maptime_read (mapped_time, &_xtime_buf); } #endif diff --git a/pfinet/mapped-time.h b/pfinet/mapped-time.h index 2877f386..bcbfc6d4 100644 --- a/pfinet/mapped-time.h +++ b/pfinet/mapped-time.h @@ -1,6 +1,8 @@ #ifndef _MAPPED_TIME_H_ #define _MAPPED_TIME_H_ +#include <maptime.h> + #define HZ 100 extern volatile struct mapped_time_value *mapped_time; @@ -12,30 +14,15 @@ read_mapped_secs () return mapped_time->seconds; } -extern inline void -fill_timeval (struct timeval *tp) -{ - do - { - tp->tv_sec = mapped_time->seconds; - tp->tv_usec = mapped_time->microseconds; - } - while (tp->tv_sec != mapped_time->check_seconds); -} - extern inline int fetch_jiffies () { - int secs, usecs; + struct timeval tv; long long j; - do - { - secs = mapped_time->seconds; - usecs = mapped_time->microseconds; - } - while (secs != mapped_time->check_seconds); - - j = (long long) secs * HZ + ((long long) usecs * HZ) / 1000000; + + maptime_read (mapped_time, &tv); + + j = (long long) tv.tv_sec * HZ + ((long long) tv.tv_usec * HZ) / 1000000; return j - root_jiffies; } diff --git a/pfinet/timer-emul.c b/pfinet/timer-emul.c index 6a7ab537..d0842787 100644 --- a/pfinet/timer-emul.c +++ b/pfinet/timer-emul.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1995, 1996 Free Software Foundation, Inc. + Copyright (C) 1995,96,2000 Free Software Foundation, Inc. Written by Michael I. Bushnell, p/BSG. This file is part of the GNU Hurd. @@ -21,6 +21,7 @@ #include <linux/timer.h> #include <asm/system.h> #include <linux/sched.h> +#include <error.h> #include <string.h> #include "pfinet.h" @@ -144,24 +145,17 @@ init_timer (struct timer_list *timer) void init_time () { - device_t timedev; - memory_object_t timeobj; + error_t err; struct timeval tp; - device_open (master_device, 0, "time", &timedev); - device_map (timedev, VM_PROT_READ, 0, sizeof (mapped_time_value_t), - &timeobj, 0); - vm_map (mach_task_self (), (vm_address_t *)&mapped_time, - sizeof (mapped_time_value_t), 0, 1, timeobj, 0, 0, - VM_PROT_READ, VM_PROT_READ, VM_INHERIT_NONE); - mach_port_deallocate (mach_task_self (), timedev); - mach_port_deallocate (mach_task_self (), timeobj); + err = maptime_map (0, 0, &mapped_time); + if (err) + error (2, err, "cannot map time device"); - fill_timeval (&tp); + maptime_read (mapped_time, &tp); root_jiffies = (long long) tp.tv_sec * HZ + ((long long) tp.tv_usec * HZ) / 1000000; cthread_detach (cthread_fork ((cthread_fn_t) timer_function, 0)); } - |