Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 29 May 2009 13:36:06 +0000 (UTC)
From:      Adrian Chadd <adrian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r193032 - in head/sys: conf i386/include/xen i386/xen
Message-ID:  <200905291336.n4TDa66k076084@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Fri May 29 13:36:06 2009
New Revision: 193032
URL: http://svn.freebsd.org/changeset/base/193032

Log:
  Migrate the Xen hypervisor clock reading routines into something
  sharable.

Added:
  head/sys/i386/include/xen/xen_clock_util.h   (contents, props changed)
  head/sys/i386/xen/xen_clock_util.c   (contents, props changed)
Modified:
  head/sys/conf/files.i386
  head/sys/i386/xen/xen_rtc.c

Modified: head/sys/conf/files.i386
==============================================================================
--- head/sys/conf/files.i386	Fri May 29 12:50:35 2009	(r193031)
+++ head/sys/conf/files.i386	Fri May 29 13:36:06 2009	(r193032)
@@ -327,6 +327,7 @@ i386/isa/atpic.c		optional atpic	
 #i386/isa/atpic_vector.s		standard
 i386/isa/clock.c		optional native
 i386/xen/clock.c		optional xen
+i386/xen/xen_clock_util.c	optional xen
 i386/xen/xen_rtc.c		optional xen
 i386/isa/dpms.c			optional dpms
 i386/isa/elcr.c			standard

Added: head/sys/i386/include/xen/xen_clock_util.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sys/i386/include/xen/xen_clock_util.h	Fri May 29 13:36:06 2009	(r193032)
@@ -0,0 +1,38 @@
+/*
+ *
+ * Copyright (c) 2009 Adrian Chadd
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *
+ * $FreeBSD$
+ */
+
+#ifndef	__XEN_CLOCK_UTIL_H__
+#define	__XEN_CLOCK_UTIL_H__
+
+extern void xen_fetch_wallclock(struct timespec *ts);
+extern void xen_fetch_uptime(struct timespec *ts);
+
+#endif	/* __XEN_CLOCK_UTIL_H__ */

Added: head/sys/i386/xen/xen_clock_util.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sys/i386/xen/xen_clock_util.c	Fri May 29 13:36:06 2009	(r193032)
@@ -0,0 +1,101 @@
+/*-
+ * Copyright (c) 2009 Adrian Chadd
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/clock.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
+#include <sys/time.h>
+
+#include <xen/xen_intr.h>
+#include <vm/vm.h>
+#include <vm/pmap.h>
+#include <machine/pmap.h>
+#include <xen/hypervisor.h>
+#include <machine/xen/xen-os.h>
+#include <machine/xen/xenfunc.h>
+#include <xen/interface/io/xenbus.h>
+#include <xen/interface/vcpu.h>
+#include <machine/cpu.h>
+
+#include <machine/xen/xen_clock_util.h>
+
+/*
+ * Read the current hypervisor start time (wall clock) from Xen.
+ */
+void
+xen_fetch_wallclock(struct timespec *ts)
+{ 
+        shared_info_t *s = HYPERVISOR_shared_info;
+        uint32_t ts_version;
+   
+        do {
+                ts_version = s->wc_version;
+                rmb();
+                ts->tv_sec  = s->wc_sec;
+                ts->tv_nsec = s->wc_nsec;
+                rmb();
+        }
+        while ((s->wc_version & 1) | (ts_version ^ s->wc_version));
+}
+
+/*
+ * Read the current hypervisor system uptime value from Xen.
+ */
+void
+xen_fetch_uptime(struct timespec *ts)
+{
+        shared_info_t           *s = HYPERVISOR_shared_info;
+        struct vcpu_time_info   *src;
+	struct shadow_time_info	dst;
+        uint32_t pre_version, post_version;
+        
+        src = &s->vcpu_info[smp_processor_id()].time;
+
+        spinlock_enter();
+        do {
+                pre_version = dst.version = src->version;
+                rmb();
+                dst.system_timestamp  = src->system_time;
+                rmb();
+                post_version = src->version;
+        }
+        while ((pre_version & 1) | (pre_version ^ post_version));
+
+        spinlock_exit();
+
+	ts->tv_sec = dst.system_timestamp / 1000000000;
+	ts->tv_nsec = dst.system_timestamp % 1000000000;
+}

Modified: head/sys/i386/xen/xen_rtc.c
==============================================================================
--- head/sys/i386/xen/xen_rtc.c	Fri May 29 12:50:35 2009	(r193031)
+++ head/sys/i386/xen/xen_rtc.c	Fri May 29 13:36:06 2009	(r193032)
@@ -50,56 +50,9 @@ __FBSDID("$FreeBSD$");
 #include <xen/interface/vcpu.h>
 #include <machine/cpu.h>
 
-#include "clock_if.h"
-
-/*
- * Read the current hypervisor start time (wall clock) from Xen.
- */
-static void
-xen_fetch_wallclock(struct timespec *ts)
-{ 
-        shared_info_t *s = HYPERVISOR_shared_info;
-        uint32_t ts_version;
-   
-        do {
-                ts_version = s->wc_version;
-                rmb();
-                ts->tv_sec  = s->wc_sec;
-                ts->tv_nsec = s->wc_nsec;
-                rmb();
-        }
-        while ((s->wc_version & 1) | (ts_version ^ s->wc_version));
-}
-
-/*
- * Read the current hypervisor system uptime value from Xen.
- */
-static void
-xen_fetch_uptime(struct timespec *ts)
-{
-        shared_info_t           *s = HYPERVISOR_shared_info;
-        struct vcpu_time_info   *src;
-	struct shadow_time_info	dst;
-        uint32_t pre_version, post_version;
-        
-        src = &s->vcpu_info[smp_processor_id()].time;
-
-        spinlock_enter();
-        do {
-                pre_version = dst.version = src->version;
-                rmb();
-                dst.system_timestamp  = src->system_time;
-                rmb();
-                post_version = src->version;
-        }
-        while ((pre_version & 1) | (pre_version ^ post_version));
-
-        spinlock_exit();
-
-	ts->tv_sec = dst.system_timestamp / 1000000000;
-	ts->tv_nsec = dst.system_timestamp % 1000000000;
-}
+#include <machine/xen/xen_clock_util.h>
 
+#include "clock_if.h"
 
 static int
 xen_rtc_probe(device_t dev)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200905291336.n4TDa66k076084>