mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
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 <katzj@redhat.com>
This commit is contained in:
1 parent
aeedebd423
commit
deb1c115f9
3 files changed
+10
-8
No files matched your search
@@ -1049,9 +1049,6 @@ class XendDomainInfo:
|
||||
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'] * 1024)
|
||||
@@ -1074,6 +1071,9 @@ class XendDomainInfo:
|
||||
|
||||
self.createDevices()
|
||||
|
||||
if self.info['bootloader']:
|
||||
self.image.cleanupBootloading()
|
||||
|
||||
self.info['start_time'] = time.time()
|
||||
|
||||
|
||||
@@ -1238,6 +1238,7 @@ class XendDomainInfo:
|
||||
False if it is to be destroyed.
|
||||
"""
|
||||
|
||||
self.configure_bootloader()
|
||||
config = self.sxpr()
|
||||
|
||||
if self.readVm(RESTART_IN_PROGRESS):
|
||||
@@ -1340,8 +1341,9 @@ class XendDomainInfo:
|
||||
# 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)
|
||||
@@ -1351,7 +1353,7 @@ class XendDomainInfo:
|
||||
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):
|
||||
|
||||
@@ -95,7 +95,7 @@ class ImageHandler:
|
||||
("image/ramdisk", self.ramdisk))
|
||||
|
||||
|
||||
def handleBootloading(self):
|
||||
def cleanupBootloading(self):
|
||||
self.unlink(self.kernel)
|
||||
self.unlink(self.ramdisk)
|
||||
|
||||
|
||||
@@ -565,7 +565,7 @@ def run_bootloader(vals):
|
||||
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.
|
||||
@@ -781,7 +781,7 @@ def preprocess_vnc(vals):
|
||||
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)
|
||||
|
||||