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-changelog

[Xen-changelog] This patch make xm reboot/shutdown work for vmx doamin.

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] This patch make xm reboot/shutdown work for vmx doamin.
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 25 Jan 2006 13:58:06 +0000
Delivery-date: Wed, 25 Jan 2006 14:07:22 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Ke Yu <ke.yu@xxxxxxxxx>
# Node ID 018e6dc18f97dc09a31c94e39b28dbb163e40a82
# Parent  a38c292e8390370ec9473a6444bd63be7e437afe
This patch make xm reboot/shutdown work for vmx doamin.

xm reboot fails 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 fix 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 a38c292e8390 -r 018e6dc18f97 tools/python/xen/xend/image.py
--- a/tools/python/xen/xend/image.py    Tue Jan 24 16:54:34 2006
+++ b/tools/python/xen/xend/image.py    Tue Jan 24 16:58:43 2006
@@ -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 a38c292e8390 -r 018e6dc18f97 tools/python/xen/xend/server/blkif.py
--- a/tools/python/xen/xend/server/blkif.py     Tue Jan 24 16:54:34 2006
+++ b/tools/python/xen/xend/server/blkif.py     Tue Jan 24 16:58:43 2006
@@ -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)
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] This patch make xm reboot/shutdown work for vmx doamin., Xen patchbot -unstable <=