From: Jeremy Katz Subject: [PATCH] Fix bootloader run with domaininfo changes Date: Wed, 09 Nov 2005 17:05:36 -0500 Message-ID: <1131573936.3533.73.camel@bree.local.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-H2VzBiTKWxnBo74KXU/k" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org --=-H2VzBiTKWxnBo74KXU/k Content-Type: text/plain Content-Transfer-Encoding: 7bit The various changes to move to using info instead of passing the config sxpr everywhere broke the use of a boot loader for booting with. The attached fixes things up so that a) use of a bootloader ==> kernel not specified in the config file b) don't cleanup bootloader files until after the domain has booted c) rerun bootloader on reboot Signed-off-by: Jeremy Katz Jeremy --=-H2VzBiTKWxnBo74KXU/k Content-Disposition: attachment; filename=xen-bootloader-domaininfo.patch Content-Type: text/x-patch; name=xen-bootloader-domaininfo.patch; charset=UTF-8 Content-Transfer-Encoding: 7bit diff -r abbe3df33774 tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Tue Nov 8 17:39:58 2005 +++ b/tools/python/xen/xend/XendDomainInfo.py Wed Nov 9 17:03:51 2005 @@ -1098,9 +1098,6 @@ self.info['image'], self.info['device']) - if self.info['bootloader']: - self.image.handleBootloading() - xc.domain_setcpuweight(self.domid, self.info['cpu_weight']) m = self.image.getDomainMemory(self.info['memory_KiB']) @@ -1122,6 +1119,9 @@ self.introduceDomain() self.createDevices() + + if self.info['bootloader']: + self.image.cleanupBootloading() self.info['start_time'] = time.time() @@ -1287,6 +1287,7 @@ False if it is to be destroyed. """ + self.configure_bootloader() config = self.sxpr() if self.readVm(RESTART_IN_PROGRESS): @@ -1389,8 +1390,9 @@ # FIXME: this assumes the disk is the first device and # that we're booting from the first disk blcfg = None + config = self.sxpr() # FIXME: this assumes that we want to use the first disk - dev = sxp.child_value(self.config, "device") + dev = sxp.child_value(config, "device") if dev: disk = sxp.child_value(dev, "uname") fn = blkdev_uname_to_file(disk) @@ -1400,7 +1402,7 @@ msg = "Had a bootloader specified, but can't find disk" log.error(msg) raise VmError(msg) - self.config = sxp.merge(['vm', ['image', blcfg]], self.config) + self.info['image'] = sxp.to_string(blcfg) def send_sysrq(self, key): diff -r abbe3df33774 tools/python/xen/xend/image.py --- a/tools/python/xen/xend/image.py Tue Nov 8 17:39:58 2005 +++ b/tools/python/xen/xend/image.py Wed Nov 9 17:03:51 2005 @@ -95,7 +95,7 @@ ("image/ramdisk", self.ramdisk)) - def handleBootloading(self): + def cleanupBootloading(self): self.unlink(self.kernel) self.unlink(self.ramdisk) diff -r abbe3df33774 tools/python/xen/xm/create.py --- a/tools/python/xen/xm/create.py Tue Nov 8 17:39:58 2005 +++ b/tools/python/xen/xm/create.py Wed Nov 9 17:03:51 2005 @@ -564,7 +564,7 @@ file = blkif.blkdev_uname_to_file(uname) return bootloader(vals.bootloader, file, not vals.console_autoconnect, - vals.vcpus, vals.blentry) + vals.vcpus, vals.bootentry) def make_config(vals): """Create the domain configuration. @@ -780,7 +780,7 @@ vals.extra = vnc + ' ' + vals.extra def preprocess(vals): - if not vals.kernel: + if not vals.kernel and not vals.bootloader: err("No kernel specified") preprocess_disk(vals) preprocess_pci(vals) --=-H2VzBiTKWxnBo74KXU/k Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --=-H2VzBiTKWxnBo74KXU/k--