[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-ia64-devel] Re: PATCH: fix transparent virtualization issue (Re)


Le Jeudi 18 Mai 2006 14:32, Keir Fraser a écrit :
> On 18 May 2006, at 13:10, Tristan Gingold wrote:
> > here are two patches for transparent virtualization.
> > xen-transvirt4.diffs replaces uses of xen_init() by running_on_xen on
> > common
> > and x86 code.
> >
> > xen-transvirt3.diffs is for xen/ia64: it add a call to xen_init() very
> > early.
> >
> > I think this is cleaner than previous way.
>
> Please make running_on_xen a function rather than a variable. I see you
> end up turning it into a function for modules anyway, and I'd rather
> have a function wrapper around a variable than a variable wrapper
> around a function. :-) It'll give us a bit more flexibility in future
> too.
Hi,

here is the updated patch.
The function is now: is_running_on_xen().

Tested on ia64 bare box and on xen/ia64.

Tristan.
# HG changeset patch
# User gingold@virtu10
# Node ID c317d53af7a217096ffffb7abfa1c2870e2475ca
# Parent  2fa8573b248f78f716a8926b29e294f97e99e631
Check wether Xen is running before setting up a Xen driver.

Replace calls to xen_init() by is_running_on_xen().

Signed-off-by: Tristan Gingold <tristan.gingold@xxxxxxxx>

diff -r 2fa8573b248f -r c317d53af7a2 linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c	Thu May 18 14:05:30 2006 -0600
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c	Fri May 19 12:45:58 2006 +0200
@@ -191,6 +191,7 @@ swiotlb_init(void)
 	if (swiotlb_force == 1) {
 		swiotlb = 1;
 	} else if ((swiotlb_force != -1) &&
+		   is_running_on_xen() &&
 		   (xen_start_info->flags & SIF_INITDOMAIN)) {
 		/* Domain 0 always has a swiotlb. */
 		ram_end = HYPERVISOR_memory_op(XENMEM_maximum_ram_page, NULL);
diff -r 2fa8573b248f -r c317d53af7a2 linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c
--- a/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c	Thu May 18 14:05:30 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c	Fri May 19 12:45:58 2006 +0200
@@ -468,8 +468,8 @@ static int __init balloon_init(void)
 
 	IPRINTK("Initialising balloon driver.\n");
 
-	if (xen_init() < 0)
-		return -1;
+	if (!is_running_on_xen())
+		return -ENODEV;
 
 	current_pages = min(xen_start_info->nr_pages, max_pfn);
 	totalram_pages = current_pages;
diff -r 2fa8573b248f -r c317d53af7a2 linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c
--- a/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c	Thu May 18 14:05:30 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c	Fri May 19 12:45:58 2006 +0200
@@ -526,7 +526,7 @@ static int __init blkif_init(void)
 	struct page *page;
 	int i;
 
-	if (xen_init() < 0)
+	if (!is_running_on_xen())
 		return -ENODEV;
 
 	mmap_pages            = blkif_reqs * BLKIF_MAX_SEGMENTS_PER_REQUEST;
diff -r 2fa8573b248f -r c317d53af7a2 linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c
--- a/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c	Thu May 18 14:05:30 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c	Fri May 19 12:45:58 2006 +0200
@@ -792,7 +792,7 @@ static struct xenbus_driver blkfront = {
 
 static int __init xlblk_init(void)
 {
-	if (xen_init() < 0)
+	if (!is_running_on_xen())
 		return -ENODEV;
 
 	return xenbus_register_frontend(&blkfront);
diff -r 2fa8573b248f -r c317d53af7a2 linux-2.6-xen-sparse/drivers/xen/console/console.c
--- a/linux-2.6-xen-sparse/drivers/xen/console/console.c	Thu May 18 14:05:30 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/console/console.c	Fri May 19 12:45:58 2006 +0200
@@ -183,7 +183,7 @@ static struct console kcons_info = {
 #define __RETCODE 0
 static int __init xen_console_init(void)
 {
-	if (xen_init() < 0)
+	if (!is_running_on_xen())
 		return __RETCODE;
 
 	if (xen_start_info->flags & SIF_INITDOMAIN) {
@@ -566,7 +566,7 @@ static int __init xencons_init(void)
 {
 	int rc;
 
-	if (xen_init() < 0)
+	if (!is_running_on_xen())
 		return -ENODEV;
 
 	if (xc_mode == XC_OFF)
diff -r 2fa8573b248f -r c317d53af7a2 linux-2.6-xen-sparse/drivers/xen/core/gnttab.c
--- a/linux-2.6-xen-sparse/drivers/xen/core/gnttab.c	Thu May 18 14:05:30 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/core/gnttab.c	Fri May 19 12:45:58 2006 +0200
@@ -443,7 +443,7 @@ gnttab_init(void)
 {
 	int i;
 
-	if (xen_init() < 0)
+	if (!is_running_on_xen())
 		return -ENODEV;
 
 	if (gnttab_resume() < 0)
diff -r 2fa8573b248f -r c317d53af7a2 linux-2.6-xen-sparse/drivers/xen/core/hypervisor_sysfs.c
--- a/linux-2.6-xen-sparse/drivers/xen/core/hypervisor_sysfs.c	Thu May 18 14:05:30 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/core/hypervisor_sysfs.c	Fri May 19 12:45:58 2006 +0200
@@ -49,6 +49,9 @@ static struct kobj_type hyp_sysfs_kobj_t
 
 static int __init hypervisor_subsys_init(void)
 {
+	if (!is_running_on_xen())
+		return -ENODEV;
+
 	hypervisor_subsys.kset.kobj.ktype = &hyp_sysfs_kobj_type;
 	return subsystem_register(&hypervisor_subsys);
 }
diff -r 2fa8573b248f -r c317d53af7a2 linux-2.6-xen-sparse/drivers/xen/core/xen_sysfs.c
--- a/linux-2.6-xen-sparse/drivers/xen/core/xen_sysfs.c	Thu May 18 14:05:30 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/core/xen_sysfs.c	Fri May 19 12:45:58 2006 +0200
@@ -276,7 +276,12 @@ static void xen_properties_destroy(void)
 
 static int __init hyper_sysfs_init(void)
 {
-	int ret = xen_sysfs_type_init();
+	int ret;
+
+	if (!is_running_on_xen())
+		return -ENODEV;
+
+	ret = xen_sysfs_type_init();
 	if (ret)
 		goto out;
 	ret = xen_sysfs_version_init();
diff -r 2fa8573b248f -r c317d53af7a2 linux-2.6-xen-sparse/drivers/xen/evtchn/evtchn.c
--- a/linux-2.6-xen-sparse/drivers/xen/evtchn/evtchn.c	Thu May 18 14:05:30 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/evtchn/evtchn.c	Fri May 19 12:45:58 2006 +0200
@@ -429,6 +429,9 @@ static int __init evtchn_init(void)
 {
 	int err;
 
+	if (!is_running_on_xen())
+		return -ENODEV;
+
 	spin_lock_init(&port_user_lock);
 	memset(port_user, 0, sizeof(port_user));
 
diff -r 2fa8573b248f -r c317d53af7a2 linux-2.6-xen-sparse/drivers/xen/netback/netback.c
--- a/linux-2.6-xen-sparse/drivers/xen/netback/netback.c	Thu May 18 14:05:30 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/netback/netback.c	Fri May 19 12:45:58 2006 +0200
@@ -808,6 +808,9 @@ static int __init netback_init(void)
 	int i;
 	struct page *page;
 
+	if (!is_running_on_xen())
+		return -ENODEV;
+
 	/* We can increase reservation by this much in net_rx_action(). */
 	balloon_update_driver_allowance(NET_RX_RING_SIZE);
 
diff -r 2fa8573b248f -r c317d53af7a2 linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c
--- a/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c	Thu May 18 14:05:30 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c	Fri May 19 12:45:58 2006 +0200
@@ -1341,6 +1341,9 @@ static int __init netif_init(void)
 {
 	int err = 0;
 
+	if (!is_running_on_xen())
+		return -ENODEV;
+
 	if (xen_start_info->flags & SIF_INITDOMAIN)
 		return 0;
 
diff -r 2fa8573b248f -r c317d53af7a2 linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c
--- a/linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c	Thu May 18 14:05:30 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c	Fri May 19 12:45:58 2006 +0200
@@ -271,6 +271,9 @@ static int capabilities_read(char *page,
 
 static int __init privcmd_init(void)
 {
+	if (!is_running_on_xen())
+		return -ENODEV;
+
 	/* Set of hypercalls that privileged applications may execute. */
 	set_bit(__HYPERVISOR_acm_op,           hypercall_permission_map);
 	set_bit(__HYPERVISOR_dom0_op,          hypercall_permission_map);
diff -r 2fa8573b248f -r c317d53af7a2 linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c
--- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c	Thu May 18 14:05:30 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c	Fri May 19 12:45:58 2006 +0200
@@ -966,10 +966,8 @@ static int __init xenbus_probe_init(void
 
 	DPRINTK("");
 
-	if (xen_init() < 0) {
-		DPRINTK("failed");
+	if (!is_running_on_xen())
 		return -ENODEV;
-	}
 
 	/* Register ourselves with the kernel bus subsystem */
 	bus_register(&xenbus_frontend.bus);
@@ -1069,10 +1067,8 @@ static int __init wait_for_devices(void)
 {
 	unsigned long timeout = jiffies + 10*HZ;
 
-	if (xen_init() < 0) {
-		DPRINTK("failed");
+	if (!is_running_on_xen())
 		return -ENODEV;
-	}
 
 	while (time_before(jiffies, timeout)) {
 		if (all_devices_ready())
diff -r 2fa8573b248f -r c317d53af7a2 linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/hypervisor.h
--- a/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/hypervisor.h	Thu May 18 14:05:30 2006 -0600
+++ b/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/hypervisor.h	Fri May 19 12:45:58 2006 +0200
@@ -118,7 +118,7 @@ u64 jiffies_to_st(unsigned long jiffies)
 #define MULTI_UVMDOMID_INDEX 4
 #endif
 
-#define xen_init()	(0)
+#define is_running_on_xen() 1
 
 static inline int
 HYPERVISOR_yield(
# HG changeset patch
# User gingold@virtu10
# Node ID 115ca492cdbb1b5313aa6b69e1f2ff7aad75a62a
# Parent  c317d53af7a217096ffffb7abfa1c2870e2475ca
Sync with transparent virtualization: call is_running_on_xen() to check wether
Xen is running.

Call xen_init in setup_arch.
Declare running_on_xen in xenia64_init.c, remove running_on_xen
and is_running_on_xen from xensetup.S
Remove xen_ksyms.c

Signed-off-by: Tristan Gingold <tristan.gingold@xxxxxxxx>

diff -r c317d53af7a2 -r 115ca492cdbb linux-2.6-xen-sparse/arch/ia64/kernel/setup.c
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c	Fri May 19 12:45:58 2006 +0200
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c	Fri May 19 12:47:36 2006 +0200
@@ -514,6 +514,9 @@ setup_arch (char **cmdline_p)
 #ifdef CONFIG_XEN
 	if (running_on_xen) {
 		extern shared_info_t *HYPERVISOR_shared_info;
+		extern int xen_init (void);
+
+		xen_init ();
 
 		/* xen_start_info isn't setup yet, get the flags manually */
 		if (HYPERVISOR_shared_info->arch.flags & SIF_INITDOMAIN) {
diff -r c317d53af7a2 -r 115ca492cdbb linux-2.6-xen-sparse/arch/ia64/xen/Makefile
--- a/linux-2.6-xen-sparse/arch/ia64/xen/Makefile	Fri May 19 12:45:58 2006 +0200
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/Makefile	Fri May 19 12:47:36 2006 +0200
@@ -2,7 +2,7 @@
 # Makefile for Xen components
 #
 
-obj-y := hypercall.o xenivt.o xenentry.o xensetup.o xenpal.o xenhpski.o xenconsole.o xen_ksyms.o
+obj-y := hypercall.o xenivt.o xenentry.o xensetup.o xenpal.o xenhpski.o xenconsole.o
 
 obj-$(CONFIG_XEN_IA64_DOM0_VP) += hypervisor.o pci-dma-xen.o util.o
-pci-dma-xen-$(CONFIG_XEN_IA64_DOM0_VP) := ../../i386/kernel/pci-dma-xen.o
\ No newline at end of file
+pci-dma-xen-$(CONFIG_XEN_IA64_DOM0_VP) := ../../i386/kernel/pci-dma-xen.o
diff -r c317d53af7a2 -r 115ca492cdbb linux-2.6-xen-sparse/arch/ia64/xen/drivers/xenia64_init.c
--- a/linux-2.6-xen-sparse/arch/ia64/xen/drivers/xenia64_init.c	Fri May 19 12:45:58 2006 +0200
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/drivers/xenia64_init.c	Fri May 19 12:47:36 2006 +0200
@@ -11,17 +11,20 @@ shared_info_t *HYPERVISOR_shared_info = 
 shared_info_t *HYPERVISOR_shared_info = (shared_info_t *)XSI_BASE;
 EXPORT_SYMBOL(HYPERVISOR_shared_info);
 
-static int initialized;
 start_info_t *xen_start_info;
+
+int running_on_xen;
+EXPORT_SYMBOL(running_on_xen);
 
 int xen_init(void)
 {
+	static int initialized;
 	shared_info_t *s = HYPERVISOR_shared_info;
 
 	if (initialized)
 		return running_on_xen ? 0 : -1;
 
-	if (!running_on_xen)
+	if (!is_running_on_xen())
 		return -1;
 
 	xen_start_info = __va(s->arch.start_info_pfn << PAGE_SHIFT);
diff -r c317d53af7a2 -r 115ca492cdbb linux-2.6-xen-sparse/arch/ia64/xen/xensetup.S
--- a/linux-2.6-xen-sparse/arch/ia64/xen/xensetup.S	Fri May 19 12:45:58 2006 +0200
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/xensetup.S	Fri May 19 12:47:36 2006 +0200
@@ -7,12 +7,6 @@
 #include <linux/config.h>
 #include <asm/processor.h>
 #include <asm/asmmacro.h>
-
-	.data
-	.align 8
-	.globl running_on_xen
-running_on_xen:
-	data4 0
 
 #define isBP	p3	// are we the Bootstrap Processor?
 
@@ -28,9 +22,3 @@ GLOBAL_ENTRY(early_xen_setup)
 (p7)	mov cr.iva=r10
 	br.ret.sptk.many rp;;
 END(early_xen_setup)
-
-GLOBAL_ENTRY(is_running_on_xen)
-	movl r9=running_on_xen;;
-	ld4 r8=[r9]
-	br.ret.sptk.many rp;;
-END(is_running_on_xen)
diff -r c317d53af7a2 -r 115ca492cdbb linux-2.6-xen-sparse/include/asm-ia64/hypervisor.h
--- a/linux-2.6-xen-sparse/include/asm-ia64/hypervisor.h	Fri May 19 12:45:58 2006 +0200
+++ b/linux-2.6-xen-sparse/include/asm-ia64/hypervisor.h	Fri May 19 12:47:36 2006 +0200
@@ -53,7 +53,7 @@ extern start_info_t *xen_start_info;
 
 void force_evtchn_callback(void);
 
-int xen_init(void);
+#define is_running_on_xen() running_on_xen
 
 /* Turn jiffies into Xen system time. XXX Implement me. */
 #define jiffies_to_st(j)	0
@@ -158,7 +158,7 @@ xen_create_contiguous_region(unsigned lo
                              unsigned int order, unsigned int address_bits)
 {
 	int ret = 0;
-	if (running_on_xen) {
+	if (is_running_on_xen()) {
 		ret = __xen_create_contiguous_region(vstart, order,
 		                                     address_bits);
 	}
@@ -169,7 +169,7 @@ static inline void
 static inline void
 xen_destroy_contiguous_region(unsigned long vstart, unsigned int order)
 {
-	if (running_on_xen)
+	if (is_running_on_xen())
 		__xen_destroy_contiguous_region(vstart, order);
 }
 
diff -r c317d53af7a2 -r 115ca492cdbb linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h
--- a/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h	Fri May 19 12:45:58 2006 +0200
+++ b/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h	Fri May 19 12:47:36 2006 +0200
@@ -42,12 +42,7 @@
 #endif
 
 #ifndef __ASSEMBLY__
-#ifdef MODULE
-extern int is_running_on_xen(void);
-#define running_on_xen (is_running_on_xen())
-#else
 extern int running_on_xen;
-#endif
 
 #define	XEN_HYPER_SSM_I		asm("break %0" : : "i" (HYPERPRIVOP_SSM_I))
 #define	XEN_HYPER_GET_IVR	asm("break %0" : : "i" (HYPERPRIVOP_GET_IVR))
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel


This mailing list archive is a service of Copilotco.