WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] make xm reboot work for vmx domain

To: <Xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH] make xm reboot work for vmx domain
From: "Yu, Ke" <ke.yu@xxxxxxxxx>
Date: Wed, 18 Jan 2006 16:43:26 +0800
Delivery-date: Wed, 18 Jan 2006 08:51:03 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Thread-index: AcYcCz+YExcwbwdsRZOkzFcQ3t7dGw==
Thread-topic: [PATCH] make xm reboot work for vmx domain
Hi Ewan, 

Would you please have a look on this patch? All the change is only
related to vmx domain. I have tested DomU and vmx domain reboot, both
work.

- Ke

# HG changeset patch
# User Yu Ke <ke.yu@xxxxxxxxx>
# Node ID 21bcf6e59fafb61e32521f54ff3890367cfc7e4d
# Parent  8d6edcf06f9b21cd7db68bdeb40c13ac3de60c12

This patch makes xm reboot/shutdown work for vmx doamin.

xm reboot failed due to two issues:
1. no mechanism to change XendDomainInfo.info to trigger domain reboot
2. ioemu blkif parameter is missing during reboot, thus device model
recreation will fail.

This patch fixes these issues by
1. introducing a xswatch to monitor the control/shutdown node. once
fired, it will change the XendDomainInfo.info to trigger domain reboot
2. saving the ioemu blkif parameter in xen store just like DomU does.

Signed-off-by: Yu Ke <ke.yu@xxxxxxxxx>

diff -r 8d6edcf06f9b -r 21bcf6e59faf tools/python/xen/xend/image.py
--- a/tools/python/xen/xend/image.py    Tue Jan 17 16:09:03 2006 +0100
+++ b/tools/python/xen/xend/image.py    Wed Jan 18 15:52:12 2006 +0800
@@ -25,6 +25,7 @@
 from xen.xend.XendError import VmError
 from xen.xend.XendLogging import log
 from xen.xend.server.netif import randomMAC
+from xen.xend.xenstore.xswatch import xswatch
 
 
 xc = xen.lowlevel.xc.xc()
@@ -228,6 +229,8 @@
         log.debug("vcpus          = %d", self.vm.getVCpuCount())
         log.debug("acpi           = %d", self.acpi)
         log.debug("apic           = %d", self.apic)
+
+        self.register_shutdown_watch()
 
         return xc.vmx_build(dom            = self.vm.getDomid(),
                             image          = self.kernel,
@@ -365,6 +368,7 @@
         return vncconnect
 
     def destroy(self):
+        self.unregister_shutdown_watch();
         import signal
         if not self.pid:
             return
@@ -398,6 +402,41 @@
         else:
             return 1 + ((mem_mb + 3) >> 2)
 
+    def register_shutdown_watch(self):
+        """ add xen store watch on control/shutdown """
+        self.shutdownWatch = xswatch(self.vm.dompath +
"/control/shutdown", \
+                                    self.vmx_shutdown)
+        log.debug("vmx shutdown watch registered")
+
+    def unregister_shutdown_watch(self):
+        """Remove the watch on the control/shutdown, if any. Nothrow
+        guarantee."""
+
+        try:
+            if self.shutdownWatch:
+                self.shutdownWatch.unwatch()
+        except:
+            log.exception("Unwatching vmx shutdown watch failed.")
+        self.shutdownWatch = None
+        log.debug("vmx shutdown watch unregistered")
+
+    def vmx_shutdown(self, _):
+        """ watch call back on node control/shutdown,
+            if node changed, this function will be called
+        """
+        from xen.xend.XendDomainInfo import shutdown_reasons
+        xd = xen.xend.XendDomain.instance()
+        vm = xd.domain_lookup( self.vm.getDomid() )
+
+        reason = vm.readDom('control/shutdown')
+        log.debug("vmx_shutdown fired, shutdown reason=%s", reason)
+        for x in shutdown_reasons.keys():
+            if shutdown_reasons[x] == reason:
+                vm.info['shutdown'] = 1
+                vm.info['shutdown_reason'] = x
+                vm.refreshShutdown(vm.info)
+
+        return 1 # Keep watching
 
 """Table of image handler classes for virtual machine images.  Indexed
by
 image type.
diff -r 8d6edcf06f9b -r 21bcf6e59faf
tools/python/xen/xend/server/blkif.py
--- a/tools/python/xen/xend/server/blkif.py     Tue Jan 17 16:09:03 2006
+0100
+++ b/tools/python/xen/xend/server/blkif.py     Wed Jan 18 15:52:12 2006
+0800
@@ -42,10 +42,6 @@
         """@see DevController.getDeviceDetails"""
 
         dev = sxp.child_value(config, 'dev')
-        if 'ioemu:' in dev:
-            return (None,{},{})
-
-        devid = blkif.blkdev_name_to_number(dev)
 
         (typ, params) = string.split(sxp.child_value(config, 'uname'),
':', 1)
         back = { 'dev'    : dev,
@@ -54,7 +50,13 @@
                  'mode'   : sxp.child_value(config, 'mode', 'r')
                  }
 
-        front = { 'virtual-device' : "%i" % devid }
+        if 'ioemu:' in dev:
+            (dummy, dev1) = string.split(dev, ':', 1)
+            devid = blkif.blkdev_name_to_number(dev1)
+            front = {}
+        else:
+            devid = blkif.blkdev_name_to_number(dev)
+            front = { 'virtual-device' : "%i" % devid }
 
         return (devid, back, front)

Attachment: reboot4.patch
Description: reboot4.patch

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH] make xm reboot work for vmx domain, Yu, Ke <=