core: add pci_e820_host property
Enable e820_host option for VMs with PCI devices (to allow VM kernel to deal with address space conflicts). But add a property to allow disabling it. Fixes QubesOS/qubes-issues#2019
This commit is contained in:
parent
daf55710b8
commit
88cb62fcf6
@ -136,6 +136,7 @@ class QubesVm(object):
|
|||||||
eval(value) if value.find("[") >= 0 else
|
eval(value) if value.find("[") >= 0 else
|
||||||
eval("[" + value + "]") },
|
eval("[" + value + "]") },
|
||||||
"pci_strictreset": {"default": True},
|
"pci_strictreset": {"default": True},
|
||||||
|
"pci_e820_host": {"default": True},
|
||||||
# Internal VM (not shown in qubes-manager, doesn't create appmenus entries
|
# Internal VM (not shown in qubes-manager, doesn't create appmenus entries
|
||||||
"internal": { "default": False, 'attr': '_internal' },
|
"internal": { "default": False, 'attr': '_internal' },
|
||||||
"vcpus": { "default": 2 },
|
"vcpus": { "default": 2 },
|
||||||
@ -1191,6 +1192,7 @@ class QubesVm(object):
|
|||||||
# If dynamic memory management disabled, set maxmem=mem
|
# If dynamic memory management disabled, set maxmem=mem
|
||||||
args['maxmem'] = args['mem']
|
args['maxmem'] = args['mem']
|
||||||
args['vcpus'] = str(self.vcpus)
|
args['vcpus'] = str(self.vcpus)
|
||||||
|
args['features'] = ''
|
||||||
if self.netvm is not None:
|
if self.netvm is not None:
|
||||||
args['ip'] = self.ip
|
args['ip'] = self.ip
|
||||||
args['mac'] = self.mac
|
args['mac'] = self.mac
|
||||||
@ -1215,6 +1217,8 @@ class QubesVm(object):
|
|||||||
args['network_end'] = '-->'
|
args['network_end'] = '-->'
|
||||||
args['no_network_begin'] = ''
|
args['no_network_begin'] = ''
|
||||||
args['no_network_end'] = ''
|
args['no_network_end'] = ''
|
||||||
|
if len(self.pcidevs) and self.pci_e820_host:
|
||||||
|
args['features'] = '<xen><e820_host state=\'on\'/></xen>'
|
||||||
args.update(self.storage.get_config_params())
|
args.update(self.storage.get_config_params())
|
||||||
if hasattr(self, 'kernelopts'):
|
if hasattr(self, 'kernelopts'):
|
||||||
args['kernelopts'] = self.kernelopts
|
args['kernelopts'] = self.kernelopts
|
||||||
|
@ -49,6 +49,14 @@ pci_strictreset
|
|||||||
cases it could make sense - for example when the VM to which it is assigned
|
cases it could make sense - for example when the VM to which it is assigned
|
||||||
is trusted one, or is running all the time.
|
is trusted one, or is running all the time.
|
||||||
|
|
||||||
|
pci_e820_host
|
||||||
|
Accepted values: ``True``, ``False``
|
||||||
|
|
||||||
|
Give VM with PCI devices a memory map (e820) of the host. This is
|
||||||
|
required for some devices to properly resolve conflicts in address space.
|
||||||
|
This option is enabled by default for VMs with PCI devices and have no
|
||||||
|
effect for VMs without devices.
|
||||||
|
|
||||||
label
|
label
|
||||||
Accepted values: ``red``, ``orange``, ``yellow``, ``green``, ``gray``,
|
Accepted values: ``red``, ``orange``, ``yellow``, ``green``, ``gray``,
|
||||||
``blue``, ``purple``, ``black``
|
``blue``, ``purple``, ``black``
|
||||||
|
@ -58,6 +58,7 @@ def do_list(vm):
|
|||||||
print fmt.format ("config", vm.conf_file)
|
print fmt.format ("config", vm.conf_file)
|
||||||
print fmt.format ("pcidevs", vm.pcidevs)
|
print fmt.format ("pcidevs", vm.pcidevs)
|
||||||
print fmt.format ("pci_strictreset", vm.pci_strictreset)
|
print fmt.format ("pci_strictreset", vm.pci_strictreset)
|
||||||
|
print fmt.format ("pci_e820_host", vm.pci_e820_host)
|
||||||
if vm.template is None:
|
if vm.template is None:
|
||||||
print fmt.format ("root_img", vm.root_img)
|
print fmt.format ("root_img", vm.root_img)
|
||||||
if hasattr(vm, "rootcow_img") and vm.rootcow_img is not None:
|
if hasattr(vm, "rootcow_img") and vm.rootcow_img is not None:
|
||||||
@ -228,6 +229,14 @@ def set_pci_strictreset(vms, vm, args):
|
|||||||
vm.pci_strictreset = bool(eval(args[0].capitalize()))
|
vm.pci_strictreset = bool(eval(args[0].capitalize()))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def set_pci_e820_host(vms, vm, args):
|
||||||
|
if len (args) != 1:
|
||||||
|
print >> sys.stderr, "Missing value (True/False)!"
|
||||||
|
return False
|
||||||
|
|
||||||
|
vm.pci_e820_host = bool(eval(args[0].capitalize()))
|
||||||
|
return True
|
||||||
|
|
||||||
def set_netvm(vms, vm, args):
|
def set_netvm(vms, vm, args):
|
||||||
if len (args) != 1:
|
if len (args) != 1:
|
||||||
print >> sys.stderr, "Missing netvm name argument!"
|
print >> sys.stderr, "Missing netvm name argument!"
|
||||||
@ -485,6 +494,7 @@ properties = {
|
|||||||
"include_in_backups": set_include_in_backups,
|
"include_in_backups": set_include_in_backups,
|
||||||
"pcidevs": set_pcidevs,
|
"pcidevs": set_pcidevs,
|
||||||
"pci_strictreset": set_pci_strictreset,
|
"pci_strictreset": set_pci_strictreset,
|
||||||
|
"pci_e820_host": set_pci_e820_host,
|
||||||
"label" : set_label,
|
"label" : set_label,
|
||||||
"netvm" : set_netvm,
|
"netvm" : set_netvm,
|
||||||
"dispvm_netvm" : set_dispvm_netvm,
|
"dispvm_netvm" : set_dispvm_netvm,
|
||||||
|
@ -62,7 +62,7 @@ Requires: libvirt-python
|
|||||||
%if x%{?backend_vmm} == xxen
|
%if x%{?backend_vmm} == xxen
|
||||||
Requires: xen-runtime
|
Requires: xen-runtime
|
||||||
Requires: xen-hvm
|
Requires: xen-hvm
|
||||||
Requires: libvirt-daemon-xen >= 1.2.20-4
|
Requires: libvirt-daemon-xen >= 1.2.20-6
|
||||||
%endif
|
%endif
|
||||||
Requires: createrepo
|
Requires: createrepo
|
||||||
Requires: gnome-packagekit
|
Requires: gnome-packagekit
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
<acpi/>
|
<acpi/>
|
||||||
<apic/>
|
<apic/>
|
||||||
<viridian/>
|
<viridian/>
|
||||||
|
{features}
|
||||||
</features>
|
</features>
|
||||||
<clock offset='variable' adjustment='{timeoffset}' basis='{time_basis}'/>
|
<clock offset='variable' adjustment='{timeoffset}' basis='{time_basis}'/>
|
||||||
<on_poweroff>destroy</on_poweroff>
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
<initrd>{kerneldir}/initramfs</initrd>
|
<initrd>{kerneldir}/initramfs</initrd>
|
||||||
<cmdline>root=/dev/mapper/dmroot ro nomodeset console=hvc0 rd_NO_PLYMOUTH 3 {kernelopts}</cmdline>
|
<cmdline>root=/dev/mapper/dmroot ro nomodeset console=hvc0 rd_NO_PLYMOUTH 3 {kernelopts}</cmdline>
|
||||||
</os>
|
</os>
|
||||||
|
<features>{features}</features>
|
||||||
<clock offset='utc' adjustment='reset'>
|
<clock offset='utc' adjustment='reset'>
|
||||||
<timer name="tsc" mode="native"/>
|
<timer name="tsc" mode="native"/>
|
||||||
</clock>
|
</clock>
|
||||||
|
Loading…
Reference in New Issue
Block a user