mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
tool: make management of PCI D-states by guest optional
D3hot state in some PCI devices causes the failure of domain creation/destruction. The default is "pci_power_mgmt=3D0" which disables the guest OS from managing D-states because it would be better to avoid the trouble than advantage of low power consumption. Signed-off-by: Kouya Shimura <kouya@jp.fujitsu.com>
This commit is contained in:
1 parent
7468faf8d3
commit
f3cc74d2f1
5 files changed
+23
-4
No files matched your search
@@ -169,6 +169,7 @@ XENAPI_PLATFORM_CFG_TYPES = {
|
||||
'hap': int,
|
||||
'xen_extended_power_mgmt': int,
|
||||
'pci_msitranslate': int,
|
||||
'pci_power_mgmt': int,
|
||||
}
|
||||
|
||||
# Xen API console 'other_config' keys.
|
||||
|
||||
@@ -97,6 +97,8 @@ class PciController(DevController):
|
||||
back['uuid'] = config.get('uuid','')
|
||||
if 'pci_msitranslate' in self.vm.info['platform']:
|
||||
back['msitranslate']=str(self.vm.info['platform']['pci_msitranslate'])
|
||||
if 'pci_power_mgmt' in self.vm.info['platform']:
|
||||
back['power_mgmt']=str(self.vm.info['platform']['pci_power_mgmt'])
|
||||
|
||||
return (0, back, {})
|
||||
|
||||
|
||||
@@ -322,14 +322,16 @@ gopts.var('disk', val='phy:DEV,VDEV,MODE[,DOM]',
|
||||
backend driver domain to use for the disk.
|
||||
The option may be repeated to add more than one disk.""")
|
||||
|
||||
gopts.var('pci', val='BUS:DEV.FUNC[,msitranslate=0|1]',
|
||||
gopts.var('pci', val='BUS:DEV.FUNC[,msitranslate=0|1][,power_mgmt=0|1]',
|
||||
fn=append_value, default=[],
|
||||
use="""Add a PCI device to a domain, using given params (in hex).
|
||||
For example 'pci=c0:02.1'.
|
||||
If msitranslate is set, MSI-INTx translation is enabled if possible.
|
||||
Guest that doesn't support MSI will get IO-APIC type IRQs
|
||||
translated from physical MSI, HVM only. Default is 1.
|
||||
The option may be repeated to add more than one pci device.""")
|
||||
The option may be repeated to add more than one pci device.
|
||||
If power_mgmt is set, the guest OS will be able to program the power
|
||||
states D0-D3hot of the device, HVM only. Default=0.""")
|
||||
|
||||
gopts.var('vscsi', val='PDEV,VDEV[,DOM]',
|
||||
fn=append_value, default=[],
|
||||
@@ -605,6 +607,10 @@ gopts.var('pci_msitranslate', val='TRANSLATE',
|
||||
use="""Global PCI MSI-INTx translation flag (0=disable;
|
||||
1=enable.""")
|
||||
|
||||
gopts.var('pci_power_mgmt', val='POWERMGMT',
|
||||
fn=set_int, default=0,
|
||||
use="""Global PCI Power Management flag (0=disable;1=enable).""")
|
||||
|
||||
def err(msg):
|
||||
"""Print an error to stderr and exit.
|
||||
"""
|
||||
@@ -691,7 +697,7 @@ def configure_pci(config_devs, vals):
|
||||
d = comma_sep_kv_to_dict(opts)
|
||||
|
||||
def f(k):
|
||||
if k not in ['msitranslate']:
|
||||
if k not in ['msitranslate', 'power_mgmt']:
|
||||
err('Invalid pci option: ' + k)
|
||||
|
||||
config_pci_opts.append([k, d[k]])
|
||||
@@ -913,7 +919,7 @@ def configure_hvm(config_image, vals):
|
||||
'acpi', 'apic', 'usb', 'usbdevice', 'keymap', 'pci', 'hpet',
|
||||
'guest_os_type', 'hap', 'opengl', 'cpuid', 'cpuid_check',
|
||||
'viridian', 'xen_extended_power_mgmt', 'pci_msitranslate',
|
||||
'vpt_align' ]
|
||||
'vpt_align', 'pci_power_mgmt' ]
|
||||
|
||||
for a in args:
|
||||
if a in vals.__dict__ and vals.__dict__[a] is not None:
|
||||
|
||||
@@ -1047,6 +1047,7 @@ class sxp2xml:
|
||||
'guest_os_type',
|
||||
'hap',
|
||||
'pci_msitranslate',
|
||||
'pci_power_mgmt',
|
||||
]
|
||||
|
||||
platform_configs = []
|
||||
|
||||