summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pfinet/linux/sched.h6
-rw-r--r--pfinet/linux/time.h4
-rw-r--r--pfinet/mapped-time.h27
-rw-r--r--pfinet/timer-emul.c20
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));
}
-