From 87f0aa4896ac4dfacc9d20bc55b0855282b4d1d4 Mon Sep 17 00:00:00 2001 From: Jack <sitnikove@gmail.com> Date: Thu, 28 Jun 2012 20:39:17 +0400 Subject: [PATCH] Add PCI passthrough for hvm xen This hv parameter allows passing PCI devices to virtual machines. Signed-off-by: Guido Trotter <ultrotter@google.com> Reviewed-by: Guido Trotter <ultrotter@google.com> --- lib/constants.py | 3 +++ lib/hypervisor/hv_xen.py | 9 ++++++++- lib/query.py | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/constants.py b/lib/constants.py index b76863e9b..d3d3e7ba3 100644 --- a/lib/constants.py +++ b/lib/constants.py @@ -769,6 +769,7 @@ HV_VHOST_NET = "vhost_net" HV_KVM_USE_CHROOT = "use_chroot" HV_CPU_MASK = "cpu_mask" HV_MEM_PATH = "mem_path" +HV_PASSTHROUGH = "pci_pass" HV_BLOCKDEV_PREFIX = "blockdev_prefix" HV_REBOOT_BEHAVIOR = "reboot_behavior" @@ -823,6 +824,7 @@ HVS_PARAMETER_TYPES = { HV_KVM_USE_CHROOT: VTYPE_BOOL, HV_CPU_MASK: VTYPE_STRING, HV_MEM_PATH: VTYPE_STRING, + HV_PASSTHROUGH: VTYPE_STRING, HV_BLOCKDEV_PREFIX: VTYPE_STRING, HV_REBOOT_BEHAVIOR: VTYPE_STRING, } @@ -1759,6 +1761,7 @@ HVC_DEFAULTS = { HV_MIGRATION_MODE: HT_MIGRATION_NONLIVE, HV_USE_LOCALTIME: False, HV_BLOCKDEV_PREFIX: "hd", + HV_PASSTHROUGH: "", HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED, HV_CPU_MASK: CPU_PINNING_ALL, }, diff --git a/lib/hypervisor/hv_xen.py b/lib/hypervisor/hv_xen.py index a757617e1..521c18c69 100644 --- a/lib/hypervisor/hv_xen.py +++ b/lib/hypervisor/hv_xen.py @@ -736,6 +736,8 @@ class XenHvmHypervisor(XenHypervisor): constants.HV_USE_LOCALTIME: hv_base.NO_CHECK, # TODO: Add a check for the blockdev prefix (matching [a-z:] or similar). constants.HV_BLOCKDEV_PREFIX: hv_base.NO_CHECK, + # Add PCI passthrough + constants.HV_PASSTHROUGH: hv_base.NO_CHECK, constants.HV_REBOOT_BEHAVIOR: hv_base.ParamInSet(True, constants.REBOOT_BEHAVIORS), constants.HV_CPU_MASK: hv_base.OPT_MULTI_CPU_MASK_CHECK, @@ -834,7 +836,12 @@ class XenHvmHypervisor(XenHypervisor): disk_data.append(iso) config.write("disk = [%s]\n" % (",".join(disk_data))) - + # Add PCI passthrough + pci_pass_arr = [] + pci_pass = hvp[constants.HV_PASSTHROUGH] + if pci_pass: + pci_pass_arr = pci_pass.split(";") + config.write("pci = %s \n" % pci_pass_arr) config.write("on_poweroff = 'destroy'\n") if hvp[constants.HV_REBOOT_BEHAVIOR] == constants.INSTANCE_REBOOT_ALLOWED: config.write("on_reboot = 'restart'\n") diff --git a/lib/query.py b/lib/query.py index cd8fdbe4b..190b1542c 100644 --- a/lib/query.py +++ b/lib/query.py @@ -1772,6 +1772,7 @@ def _GetInstanceParameterFields(): constants.HV_NIC_TYPE: "NIC_type", constants.HV_PAE: "PAE", constants.HV_VNC_BIND_ADDRESS: "VNC_bind_address", + constants.HV_PASSTHROUGH: "pci_pass", } fields = [ -- GitLab