@@ -889,20 +889,11 @@ def _get_emulator_xml(self):
889889
890890 return emu_xml
891891
892- def _get_features_xml (self ):
892+ def _get_features_xml (self , features ):
893893 """
894894 Return features (pae, acpi, apic) xml
895895 """
896- defaults = {}
897- if self .is_hvm ():
898- for f in ["acpi" , "apic" ]:
899- defaults [f ] = self ._lookup_osdict_key (f )
900-
901- caps = self ._get_caps ()
902- if caps :
903- defaults ["pae" ] = caps .support_pae ()
904-
905- return self .features .get_xml_config (defaults )
896+ return features .get_xml_config ()
906897
907898 def _get_cpu_xml (self ):
908899 """
@@ -1014,6 +1005,7 @@ def _get_xml_config(self, install=True, disk_boot=False):
10141005 for dev in origdevs :
10151006 newdev = copy .copy (dev )
10161007 devs .append (newdev )
1008+ tmpfeat = copy .copy (self .features )
10171009
10181010 def get_transient_devices (devtype ):
10191011 return self ._dev_build_list (devtype , devs )
@@ -1022,7 +1014,8 @@ def remove_transient_device(device):
10221014
10231015 # Set device defaults so we can validly generate XML
10241016 self ._set_defaults (get_transient_devices ,
1025- remove_transient_device )
1017+ remove_transient_device ,
1018+ tmpfeat )
10261019
10271020 if install :
10281021 action = "destroy"
@@ -1053,7 +1046,7 @@ def remove_transient_device(device):
10531046 xml = add (" <uuid>%s</uuid>" % self .uuid )
10541047 xml = add (desc_xml )
10551048 xml = add (" %s" % osblob )
1056- xml = add (self ._get_features_xml ())
1049+ xml = add (self ._get_features_xml (tmpfeat ))
10571050 xml = add (self ._get_cpu_xml ())
10581051 xml = add (self ._get_clock_xml ())
10591052 xml = add (" <on_poweroff>destroy</on_poweroff>" )
@@ -1364,9 +1357,10 @@ def set_defaults(self):
13641357 The install process will call a non-persistent version, so calling
13651358 this manually isn't required.
13661359 """
1367- self ._set_defaults (self .get_devices , self .remove_device )
1360+ self ._set_defaults (self .get_devices , self .remove_device ,
1361+ self .features )
13681362
1369- def _set_hvm_defaults (self , devlist_func ):
1363+ def _set_hvm_defaults (self , devlist_func , features ):
13701364 disktype = VirtualDevice .VIRTUAL_DEV_DISK
13711365 nettype = VirtualDevice .VIRTUAL_DEV_NET
13721366 disk_bus = self ._lookup_device_param (disktype , "bus" )
@@ -1385,6 +1379,14 @@ def _set_hvm_defaults(self, devlist_func):
13851379 if self .clock .offset == None :
13861380 self .clock .offset = self ._lookup_osdict_key ("clock" )
13871381
1382+ if features ["acpi" ] is None :
1383+ features ["acpi" ] = self ._lookup_osdict_key ("acpi" )
1384+ if features ["apic" ] is None :
1385+ features ["apic" ] = self ._lookup_osdict_key ("apic" )
1386+ if features ["pae" ] is None and self ._get_caps ():
1387+ features ["pae" ] = self ._get_caps ().support_pae ()
1388+
1389+
13881390 def _set_pv_defaults (self , devlist_func , remove_func ):
13891391 # Default file backed PV guests to tap driver
13901392 for d in devlist_func (VirtualDevice .VIRTUAL_DEV_DISK ):
@@ -1403,9 +1405,9 @@ def _set_pv_defaults(self, devlist_func, remove_func):
14031405 if hasattr (d , "virtinst_default" ):
14041406 remove_func (d )
14051407
1406- def _set_defaults (self , devlist_func , remove_func ):
1408+ def _set_defaults (self , devlist_func , remove_func , features ):
14071409 if self .is_hvm ():
1408- self ._set_hvm_defaults (devlist_func )
1410+ self ._set_hvm_defaults (devlist_func , features )
14091411 if self .is_xen ():
14101412 self ._set_pv_defaults (devlist_func , remove_func )
14111413
0 commit comments