mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 02:30:03 +01:00
Save elfnotes in VM sxpr under image/notes, and load them on restore.
Signed-off-by: Brendan Cully <brendan@cs.ubc.ca>
This commit is contained in:
1 parent
41881805d1
commit
4a2a7137e6
2 files changed
+34
-3
No files matched your search
@@ -729,6 +729,10 @@ class XendConfig(dict):
|
||||
image['hvm'] = image_hvm
|
||||
image['hvm']['devices'] = image_hvm_devices
|
||||
|
||||
notes = sxp.children(image_sxp, 'notes')
|
||||
if notes:
|
||||
image['notes'] = self.notes_from_sxp(notes[0])
|
||||
|
||||
self['image'] = image
|
||||
|
||||
for apikey, imgkey in XENAPI_HVM_CFG.items():
|
||||
@@ -1363,6 +1367,9 @@ class XendConfig(dict):
|
||||
|
||||
image.append([arg, val])
|
||||
|
||||
if 'notes' in self['image']:
|
||||
image.append(self.notes_sxp(self['image']['notes']))
|
||||
|
||||
return image
|
||||
|
||||
def update_with_image_sxp(self, image_sxp, bootloader = False):
|
||||
@@ -1420,6 +1427,10 @@ class XendConfig(dict):
|
||||
image['hvm'] = image_hvm
|
||||
image['hvm']['devices'] = image_hvm_devices
|
||||
|
||||
notes = sxp.children(image_sxp, 'notes')
|
||||
if notes:
|
||||
image['notes'] = self.notes_from_sxp(notes[0])
|
||||
|
||||
self['image'] = image
|
||||
|
||||
for apikey, imgkey in XENAPI_HVM_CFG.items():
|
||||
@@ -1432,7 +1443,28 @@ class XendConfig(dict):
|
||||
self[apikey] = val
|
||||
self._hvm_boot_params_from_sxp(image_sxp)
|
||||
|
||||
def set_notes(self, notes):
|
||||
'Add parsed elfnotes to image'
|
||||
self['image']['notes'] = notes
|
||||
|
||||
def get_notes(self):
|
||||
try:
|
||||
return self['image']['notes'] or {}
|
||||
except KeyError:
|
||||
return {}
|
||||
|
||||
def notes_from_sxp(self, nsxp):
|
||||
notes = {}
|
||||
for note in sxp.children(nsxp):
|
||||
notes[note[0]] = note[1]
|
||||
return notes
|
||||
|
||||
def notes_sxp(self, notes):
|
||||
nsxp = ['notes']
|
||||
for k, v in notes.iteritems():
|
||||
nsxp.append([k, str(v)])
|
||||
return nsxp
|
||||
|
||||
def _hvm_boot_params_from_sxp(self, image_sxp):
|
||||
boot = sxp.child_value(image_sxp, 'boot', None)
|
||||
if boot is not None:
|
||||
|
||||
@@ -356,7 +356,6 @@ class XendDomainInfo:
|
||||
self.store_mfn = None
|
||||
self.console_port = None
|
||||
self.console_mfn = None
|
||||
self.notes = {}
|
||||
|
||||
self.vmWatch = None
|
||||
self.shutdownWatch = None
|
||||
@@ -790,7 +789,7 @@ class XendDomainInfo:
|
||||
f('store/ring-ref', self.store_mfn)
|
||||
|
||||
# elfnotes
|
||||
for n, v in self.notes.iteritems():
|
||||
for n, v in self.info.get_notes().iteritems():
|
||||
n = n.lower().replace('_', '-')
|
||||
if n == 'features':
|
||||
for v in v.split('|'):
|
||||
@@ -1482,7 +1481,7 @@ class XendDomainInfo:
|
||||
if 'console_mfn' in channel_details:
|
||||
self.console_mfn = channel_details['console_mfn']
|
||||
if 'notes' in channel_details:
|
||||
self.notes = channel_details['notes']
|
||||
self.info.set_notes(channel_details['notes'])
|
||||
|
||||
self._introduceDomain()
|
||||
|
||||
|
||||