summaryrefslogtreecommitdiff
path: root/xen
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2011-02-07 03:18:50 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2011-02-07 03:18:50 +0100
commitaaf803372bd4b30b97a2039e4b1b36b07c0a7250 (patch)
tree55e7c21adb37f514c2d888f5d3141659eea67ced /xen
parentd683da41fcfefcc8ba63b1fa1ab8af5b3078183f (diff)
Defer Xen device initialization to device_service_create
* device/device_init.c (device_service_create) [MACH_HYP]: Call hyp_dev_init. * xen/xen.c (hyp_init): Do not call hyp_block_init and hyp_net_init, now called in ... (hyp_dev_init): New function. * xen/xen.h (hyp_dev_init): New declaration.
Diffstat (limited to 'xen')
-rw-r--r--xen/block.c1
-rw-r--r--xen/xen.c12
-rw-r--r--xen/xen.h3
3 files changed, 11 insertions, 5 deletions
diff --git a/xen/block.c b/xen/block.c
index 3c188bff..76119e8f 100644
--- a/xen/block.c
+++ b/xen/block.c
@@ -213,6 +213,7 @@ void hyp_block_init(void) {
panic("%s: couldn't store state (%s)", device_name, hyp_store_error);
kfree((vm_offset_t) c, strlen(c)+1);
} while (!hyp_store_transaction_stop(t));
+ /* TODO randomly wait? */
c = hyp_store_read(0, 5, VBD_PATH, "/", vbds[n], "/", "backend");
if (!c)
diff --git a/xen/xen.c b/xen/xen.c
index 062ee4d5..f8f964eb 100644
--- a/xen/xen.c
+++ b/xen/xen.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2007 Samuel Thibault <samuel.thibault@ens-lyon.org>
+ * Copyright (C) 2007-2011 Samuel Thibault <samuel.thibault@ens-lyon.org>
*
* This program is free software ; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -46,13 +46,17 @@ void hyp_init(void)
{
hyp_grant_init();
hyp_store_init();
- /* these depend on the above */
- hyp_block_init();
- hyp_net_init();
evtchn_port_t port = hyp_event_channel_bind_virq(VIRQ_DEBUG, 0);
hyp_evt_handler(port, hyp_debug, 0, SPL7);
}
+void hyp_dev_init(void)
+{
+ /* these depend on hyp_init() and working threads */
+ hyp_block_init();
+ hyp_net_init();
+}
+
void _hyp_halt(void)
{
hyp_halt();
diff --git a/xen/xen.h b/xen/xen.h
index 87e1256c..6eeb350e 100644
--- a/xen/xen.h
+++ b/xen/xen.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006 Samuel Thibault <samuel.thibault@ens-lyon.org>
+ * Copyright (C) 2006-2010, 2011 Samuel Thibault <samuel.thibault@ens-lyon.org>
*
* This program is free software ; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -20,6 +20,7 @@
#define XEN_XEN_H
void hyp_init(void);
+void hyp_dev_init(void);
void hyp_invalidate_pte(pt_entry_t *pte);
void hyp_idle(void);
void hyp_p2m_init(void);