aboutsummaryrefslogtreecommitdiffstats
path: root/extras/mini-os/kernel.c
diff options
context:
space:
mode:
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2003-10-30 17:33:14 +0000
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2003-10-30 17:33:14 +0000
commit5cf5933f37cfba4c99aea8d70cca2d89da0344bb (patch)
tree2ca0c4f737197ee1f9b61534c660c69d6c9a5e27 /extras/mini-os/kernel.c
parent2eef9a8f5271d12c3a484fc49a573e206369bacd (diff)
downloadxen-5cf5933f37cfba4c99aea8d70cca2d89da0344bb.tar.gz
xen-5cf5933f37cfba4c99aea8d70cca2d89da0344bb.tar.bz2
xen-5cf5933f37cfba4c99aea8d70cca2d89da0344bb.zip
bitkeeper revision 1.541.1.1 (3fa14b5aVZfwzFArgab1vhsTUV0TOA)
time.c, hypervisor.h, kernel.c, head.S: Fix minios to work with revised Xen 1.2 interface.
Diffstat (limited to 'extras/mini-os/kernel.c')
-rw-r--r--extras/mini-os/kernel.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/extras/mini-os/kernel.c b/extras/mini-os/kernel.c
index 12d36f1347..0ead3f18d3 100644
--- a/extras/mini-os/kernel.c
+++ b/extras/mini-os/kernel.c
@@ -61,6 +61,19 @@ static void exit_handler(int ev, struct pt_regs *regs);
static void debug_handler(int ev, struct pt_regs *regs);
+static shared_info_t *map_shared_info(unsigned long pa)
+{
+ extern char shared_info[PAGE_SIZE];
+ if ( HYPERVISOR_update_va_mapping((unsigned long)shared_info >> PAGE_SHIFT,
+ pa | 3, UVMF_INVLPG) )
+ {
+ printk("Failed to map shared_info!!\n");
+ *(int*)0=0;
+ }
+ return (shared_info_t *)shared_info;
+}
+
+
/*
* INITIAL C ENTRY POINT.
*/
@@ -72,25 +85,23 @@ void start_kernel(start_info_t *si)
memcpy(&start_info, si, sizeof(*si));
/* Grab the shared_info pointer and put it in a safe place. */
- HYPERVISOR_shared_info = start_info.shared_info;
+ HYPERVISOR_shared_info = map_shared_info(start_info.shared_info);
/* Set up event and failsafe callback addresses. */
HYPERVISOR_set_callbacks(
__KERNEL_CS, (unsigned long)hypervisor_callback,
__KERNEL_CS, (unsigned long)failsafe_callback);
-
trap_init();
-
/* ENABLE EVENT DELIVERY. This is disabled at start of day. */
__sti();
/* print out some useful information */
printk("Xeno Minimal OS!\n");
printk("start_info: %p\n", si);
- printk(" nr_pages: %lu", si->nr_pages);
- printk(" shared_inf: %p\n", si->shared_info);
+ printk(" nr_pages: %lu", si->nr_pages);
+ printk(" shared_inf: %08lx\n", si->shared_info);
printk(" pt_base: %p", (void *)si->pt_base);
printk(" mod_start: 0x%lx\n", si->mod_start);
printk(" mod_len: %lu\n", si->mod_len);
@@ -142,7 +153,7 @@ void start_kernel(start_info_t *si)
void do_exit(void)
{
printk("do_exit called!\n");
- for ( ;; ) ;
+ for ( ;; ) HYPERVISOR_exit();
}
static void exit_handler(int ev, struct pt_regs *regs) {
do_exit();