mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-09-10 21:29:20 +00:00
config_tools: Update GPU passthrough support
1. Remove gvt_args field. 2. Add passthrough GPU devices support. 3. Add sriov device support. Tracked-On: #6290 Signed-off-by: Weiyi Feng <weiyix.feng@intel.com>
This commit is contained in:
@@ -221,18 +221,15 @@ def interrupt_storm(pt_sel, config):
|
||||
print("", file=config)
|
||||
|
||||
|
||||
def gvt_arg_set(dm, vmid, user_vm_type, config):
|
||||
def gpu_pt_arg_set(dm, sel, vmid, config):
|
||||
gpu_bdf = sel.bdf["gpu"][vmid]
|
||||
|
||||
gvt_args = dm['gvt_args'][vmid]
|
||||
gpu_bdf = launch_cfg_lib.get_gpu_bdf()
|
||||
|
||||
if gvt_args == "gvtd" and gpu_bdf is not None:
|
||||
if gpu_bdf:
|
||||
bus = int(gpu_bdf[0:2], 16)
|
||||
dev = int(gpu_bdf[3:5], 16)
|
||||
fun = int(gpu_bdf[6:7], 16)
|
||||
print(' -s 2,passthru,{}/{}/{} \\'.format(bus, dev, fun), file=config)
|
||||
elif gvt_args:
|
||||
print(' -s 2,pci-gvt -G "$2" \\', file=config)
|
||||
|
||||
|
||||
def log_level_set(user_vm_type, config):
|
||||
|
||||
@@ -297,7 +294,6 @@ def mem_size_set(args, vmid, config):
|
||||
|
||||
def user_vm_launch(names, args, virt_io, vmid, config):
|
||||
|
||||
gvt_args = args['gvt_args'][vmid]
|
||||
user_vm_type = names['user_vm_types'][vmid]
|
||||
launch_uos = common.undline_name(user_vm_type).lower()
|
||||
board_name = names['board_name']
|
||||
@@ -317,10 +313,7 @@ def user_vm_launch(names, args, virt_io, vmid, config):
|
||||
print("fi", file=config)
|
||||
if is_mount_needed(virt_io, vmid):
|
||||
print("", file=config)
|
||||
if gvt_args == "gvtd" or not gvt_args:
|
||||
print('launch_{} {} "{}" $debug'.format(launch_uos, vmid, vmid), file=config)
|
||||
else:
|
||||
print('launch_{} {} "{}" "{}" $debug'.format(launch_uos, vmid, gvt_args, vmid), file=config)
|
||||
print('launch_{} {} "{}" $debug'.format(launch_uos, vmid, vmid), file=config)
|
||||
print("", file=config)
|
||||
i = 0
|
||||
for mount_flag in launch_cfg_lib.MOUNT_FLAG_DIC[vmid]:
|
||||
@@ -332,23 +325,14 @@ def user_vm_launch(names, args, virt_io, vmid, config):
|
||||
|
||||
else:
|
||||
print("else", file=config)
|
||||
if gvt_args == "gvtd" or not gvt_args:
|
||||
print(' launch_{} {}'.format(launch_uos, vmid), file=config)
|
||||
elif gvt_args:
|
||||
print(' launch_{} {} "{}"'.format(launch_uos, vmid, gvt_args), file=config)
|
||||
print(' launch_{} {}'.format(launch_uos, vmid), file=config)
|
||||
print("fi", file=config)
|
||||
return
|
||||
elif not is_mount_needed(virt_io, vmid):
|
||||
if gvt_args == "gvtd" or not gvt_args:
|
||||
print('launch_{} {}'.format(launch_uos, vmid), file=config)
|
||||
else:
|
||||
print('launch_{} {} "{}"'.format(launch_uos, vmid, gvt_args), file=config)
|
||||
print('launch_{} {}'.format(launch_uos, vmid), file=config)
|
||||
else:
|
||||
print("", file=config)
|
||||
if gvt_args == "gvtd" or not gvt_args:
|
||||
print('launch_{} {} "{}" $debug'.format(launch_uos, vmid, vmid), file=config)
|
||||
else:
|
||||
print('launch_{} {} "{}" "{}" $debug'.format(launch_uos, vmid, gvt_args, vmid), file=config)
|
||||
print('launch_{} {} "{}" $debug'.format(launch_uos, vmid, vmid), file=config)
|
||||
print("", file=config)
|
||||
i = 0
|
||||
for mount_flag in launch_cfg_lib.MOUNT_FLAG_DIC[vmid]:
|
||||
@@ -528,6 +512,28 @@ def virtio_args_set(dm, virt_io, vmid, config):
|
||||
launch_cfg_lib.virtual_dev_slot("virtio-console"),
|
||||
virt_io['console'][vmid]), file=config)
|
||||
|
||||
|
||||
def sriov_args_set(dm, sriov, vmid, config):
|
||||
|
||||
# sriov-gpu
|
||||
gpu_bdf = sriov['gpu'][vmid]
|
||||
if gpu_bdf:
|
||||
bus = int(gpu_bdf[0:2], 16)
|
||||
dev = int(gpu_bdf[3:5], 16)
|
||||
fun = int(gpu_bdf[6:7], 16)
|
||||
print(' -s 2,passthru,{}/{}/{},igd-vf \\'.format(bus, dev, fun), file=config)
|
||||
|
||||
# sriov-net
|
||||
if sriov['network'][vmid]:
|
||||
net_bdf = sriov['network'][vmid]
|
||||
bus = int(net_bdf[0:2], 16)
|
||||
dev = int(net_bdf[3:5], 16)
|
||||
fun = int(net_bdf[6:7], 16)
|
||||
print(" -s {},passthru,{}/{}/{} \\".format(
|
||||
launch_cfg_lib.virtual_dev_slot("sriov-net{}".format(net_bdf)), bus, dev, fun
|
||||
), file=config)
|
||||
|
||||
|
||||
def get_cpu_affinity_list(cpu_affinity, vmid):
|
||||
pcpu_id_list = ''
|
||||
for user_vmid,cpus in cpu_affinity.items():
|
||||
@@ -545,7 +551,7 @@ def pcpu_arg_set(dm, vmid, config):
|
||||
print(" --cpu_affinity {} \\".format(','.join(pcpu_id_list)), file=config)
|
||||
|
||||
|
||||
def dm_arg_set(names, sel, virt_io, dm, vmid, config):
|
||||
def dm_arg_set(names, sel, virt_io, dm, sriov, vmid, config):
|
||||
|
||||
user_vm_type = names['user_vm_types'][vmid]
|
||||
board_name = names['board_name']
|
||||
@@ -604,8 +610,11 @@ def dm_arg_set(names, sel, virt_io, dm, vmid, config):
|
||||
# set logger_setting for all VMs
|
||||
print(" $logger_setting \\", file=config)
|
||||
|
||||
# GVT args set
|
||||
gvt_arg_set(dm, vmid, user_vm_type, config)
|
||||
# GPU PT args set
|
||||
gpu_pt_arg_set(dm, sel, vmid, config)
|
||||
|
||||
# SRIOV args set
|
||||
sriov_args_set(dm, sriov, vmid, config)
|
||||
|
||||
# XHCI args set
|
||||
xhci_args_set(dm, vmid, config)
|
||||
@@ -631,7 +640,9 @@ def dm_arg_set(names, sel, virt_io, dm, vmid, config):
|
||||
if user_vm_type == "PREEMPT-RT LINUX" and ssram_enabled == 'y':
|
||||
print(" --ssram \\", file=config)
|
||||
|
||||
for value in sel.bdf.values():
|
||||
for key, value in sel.bdf.items():
|
||||
if key == 'gpu':
|
||||
continue
|
||||
if value[vmid]:
|
||||
print(" $intr_storm_monitor \\", file=config)
|
||||
break
|
||||
@@ -666,27 +677,27 @@ def dm_arg_set(names, sel, virt_io, dm, vmid, config):
|
||||
print("}", file=config)
|
||||
|
||||
|
||||
def gen(names, pt_sel, virt_io, dm, vmid, config):
|
||||
def gen(names, pt_sel, virt_io, dm, sriov, vmid, config):
|
||||
|
||||
board_name = names['board_name']
|
||||
user_vm_type = names['user_vm_types'][vmid]
|
||||
|
||||
# passthrough bdf/vpid dictionay
|
||||
pt.gen_pt_head(names, dm, pt_sel, vmid, config)
|
||||
pt.gen_pt_head(names, dm, sriov, pt_sel, vmid, config)
|
||||
|
||||
# gen launch header
|
||||
launch_begin(names, virt_io, vmid, config)
|
||||
tap_user_vm_net(names, virt_io, vmid, config)
|
||||
|
||||
# passthrough device
|
||||
pt.gen_pt(names, dm, pt_sel, vmid, config)
|
||||
pt.gen_pt(names, dm, sriov, pt_sel, vmid, config)
|
||||
wa_usage(user_vm_type, config)
|
||||
mem_size_set(dm, vmid, config)
|
||||
interrupt_storm(pt_sel, config)
|
||||
log_level_set(user_vm_type, config)
|
||||
|
||||
# gen acrn-dm args
|
||||
dm_arg_set(names, pt_sel, virt_io, dm, vmid, config)
|
||||
dm_arg_set(names, pt_sel, virt_io, dm, sriov, vmid, config)
|
||||
|
||||
# gen launch end
|
||||
launch_end(names, dm, virt_io, vmid, config)
|
||||
|
@@ -6,7 +6,7 @@
|
||||
import os
|
||||
import sys
|
||||
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'library'))
|
||||
from launch_item import AvailablePthru, PthruSelected, VirtioDeviceSelect, AcrnDmArgs
|
||||
from launch_item import AvailablePthru, PthruSelected, VirtioDeviceSelect, AcrnDmArgs, SriovDeviceInput
|
||||
import board_cfg_lib
|
||||
import launch_cfg_lib
|
||||
import com
|
||||
@@ -32,6 +32,7 @@ def get_launch_item_values(board_info, scenario_info=None):
|
||||
|
||||
# pre passthrough device for ui
|
||||
launch_item_values["user_vm,passthrough_devices,usb_xdci"] = pthru.avl["usb_xdci"]
|
||||
launch_item_values["uos,passthrough_devices,gpu"] = pthru.avl["gpu"]
|
||||
launch_item_values["user_vm,passthrough_devices,ipu"] = pthru.avl["ipu"]
|
||||
launch_item_values["user_vm,passthrough_devices,ipu_i2c"] = pthru.avl["ipu_i2c"]
|
||||
launch_item_values["user_vm,passthrough_devices,cse"] = pthru.avl["cse"]
|
||||
@@ -88,12 +89,16 @@ def validate_launch_setting(board_info, scenario_info, launch_info):
|
||||
virtio.get_virtio()
|
||||
virtio.check_virtio()
|
||||
|
||||
sriov = SriovDeviceInput(launch_info)
|
||||
sriov.get_sriov()
|
||||
sriov.check_sriov(pt_sel)
|
||||
|
||||
# acrn dm arguments
|
||||
dm = AcrnDmArgs(board_info, scenario_info, launch_info)
|
||||
dm.get_args()
|
||||
dm.check_item()
|
||||
|
||||
return (launch_cfg_lib.ERR_LIST, pt_sel, virtio, dm)
|
||||
return (launch_cfg_lib.ERR_LIST, pt_sel, virtio, dm, sriov)
|
||||
|
||||
|
||||
def ui_entry_api(board_info, scenario_info, launch_info, out=''):
|
||||
@@ -132,7 +137,7 @@ def get_names():
|
||||
return (err_dic, names)
|
||||
|
||||
|
||||
def generate_script_file(names, pt_sel, virt_io, dm, vmid, config):
|
||||
def generate_script_file(names, pt_sel, virt_io, dm, sriov, vmid, config):
|
||||
|
||||
user_vm_type = names['user_vm_types'][vmid]
|
||||
board_name = names['board_name']
|
||||
@@ -143,7 +148,7 @@ def generate_script_file(names, pt_sel, virt_io, dm, vmid, config):
|
||||
board_name.upper(), scenario_name.upper(), user_vm_type.upper())
|
||||
|
||||
print("{}".format(header_info), file=config)
|
||||
com.gen(names, pt_sel, virt_io, dm, vmid, config)
|
||||
com.gen(names, pt_sel, virt_io, dm, sriov, vmid, config)
|
||||
if launch_cfg_lib.ERR_LIST:
|
||||
return launch_cfg_lib.ERR_LIST
|
||||
|
||||
@@ -193,7 +198,7 @@ def main(args):
|
||||
return err_dic
|
||||
|
||||
# validate launch config file
|
||||
(err_dic, pt_sel, virt_io, dm) = validate_launch_setting(board_info_file, scenario_info_file, launch_info_file)
|
||||
(err_dic, pt_sel, virt_io, dm, sriov) = validate_launch_setting(board_info_file, scenario_info_file, launch_info_file)
|
||||
if err_dic:
|
||||
return err_dic
|
||||
|
||||
@@ -210,27 +215,28 @@ def main(args):
|
||||
board_name = names['board_name']
|
||||
if output_folder:
|
||||
if os.path.isabs(output_folder):
|
||||
output = os.path.join(output_folder + '/' + board_name, 'output/')
|
||||
output = os.path.join(output_folder, board_name, 'output')
|
||||
else:
|
||||
output = os.path.join(ACRN_PATH + output_folder + '/' + board_name, 'output/')
|
||||
output = os.path.join(ACRN_PATH, output_folder, board_name, 'output')
|
||||
else:
|
||||
output = os.path.join(ACRN_CONFIG_DEF + board_name, 'output/')
|
||||
output = os.path.join(ACRN_CONFIG_DEF, board_name, 'output')
|
||||
output = os.path.abspath(output)
|
||||
common.mkdir(output)
|
||||
|
||||
# generate launch script
|
||||
if vm_th:
|
||||
script_name = "launch_uos_id{}.sh".format(vm_th)
|
||||
launch_script_file = output + script_name
|
||||
launch_script_file = os.path.join(output, script_name)
|
||||
with open(launch_script_file, mode = 'w', newline=None, encoding='utf-8') as config:
|
||||
err_dic = generate_script_file(names, pt_sel, virt_io.dev, dm.args, vm_th, config)
|
||||
err_dic = generate_script_file(names, pt_sel, virt_io.dev, dm.args, sriov.dev, vm_th, config)
|
||||
if err_dic:
|
||||
return err_dic
|
||||
else:
|
||||
for post_vm_i in post_num_list:
|
||||
script_name = "launch_uos_id{}.sh".format(post_vm_i)
|
||||
launch_script_file = output + script_name
|
||||
launch_script_file = os.path.join(output, script_name)
|
||||
with open(launch_script_file, mode = 'w', newline='\n', encoding='utf-8') as config:
|
||||
err_dic = generate_script_file(names, pt_sel, virt_io.dev, dm.args, post_vm_i, config)
|
||||
err_dic = generate_script_file(names, pt_sel, virt_io.dev, dm.args, sriov.dev, post_vm_i, config)
|
||||
if err_dic:
|
||||
return err_dic
|
||||
|
||||
|
@@ -2,6 +2,7 @@
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
import re
|
||||
|
||||
import common
|
||||
import board_cfg_lib
|
||||
@@ -20,7 +21,6 @@ class AcrnDmArgs:
|
||||
self.args["user_vm_type"] = common.get_leaf_tag_map(self.launch_info, "user_vm_type")
|
||||
self.args["rtos_type"] = common.get_leaf_tag_map(self.launch_info, "rtos_type")
|
||||
self.args["mem_size"] = common.get_leaf_tag_map(self.launch_info, "mem_size")
|
||||
self.args["gvt_args"] = common.get_leaf_tag_map(self.launch_info, "gvt_args")
|
||||
self.args["vbootloader"] = common.get_leaf_tag_map(self.launch_info, "vbootloader")
|
||||
self.args["vuart0"] = common.get_leaf_tag_map(self.launch_info, "vuart0")
|
||||
self.args["cpu_sharing"] = common.get_hv_item_tag(self.scenario_info, "FEATURES", "SCHEDULER")
|
||||
@@ -70,6 +70,7 @@ class AvailablePthru():
|
||||
|
||||
def get_pci_dev(self):
|
||||
self.avl["usb_xdci"] = common.get_avl_dev_info(self.bdf_desc_map, launch_cfg_lib.PT_SUB_PCI['usb_xdci'])
|
||||
self.avl["gpu"] = common.get_avl_dev_info(self.bdf_desc_map, launch_cfg_lib.PT_SUB_PCI['gpu'])
|
||||
self.avl["ipu"] = common.get_avl_dev_info(self.bdf_desc_map, launch_cfg_lib.PT_SUB_PCI['ipu'])
|
||||
self.avl["ipu_i2c"] = common.get_avl_dev_info(self.bdf_desc_map, launch_cfg_lib.PT_SUB_PCI['ipu_i2c'])
|
||||
self.avl["cse"] = common.get_avl_dev_info(self.bdf_desc_map, launch_cfg_lib.PT_SUB_PCI['cse'])
|
||||
@@ -84,6 +85,7 @@ class AvailablePthru():
|
||||
|
||||
def insert_nun(self):
|
||||
self.avl["usb_xdci"].insert(0, '')
|
||||
self.avl["gpu"].insert(0, '')
|
||||
self.avl["ipu"].insert(0, '')
|
||||
self.avl["ipu_i2c"].insert(0, '')
|
||||
self.avl["cse"].insert(0, '')
|
||||
@@ -110,6 +112,7 @@ class PthruSelected():
|
||||
|
||||
def get_bdf(self):
|
||||
self.bdf["usb_xdci"] = launch_cfg_lib.get_bdf_from_tag(self.launch_info, "passthrough_devices", "usb_xdci")
|
||||
self.bdf["gpu"] = launch_cfg_lib.get_bdf_from_tag(self.launch_info, "passthrough_devices", "gpu")
|
||||
self.bdf["ipu"] = launch_cfg_lib.get_bdf_from_tag(self.launch_info, "passthrough_devices", "ipu")
|
||||
self.bdf["ipu_i2c"] = launch_cfg_lib.get_bdf_from_tag(self.launch_info, "passthrough_devices", "ipu_i2c")
|
||||
self.bdf["cse"] = launch_cfg_lib.get_bdf_from_tag(self.launch_info, "passthrough_devices", "cse")
|
||||
@@ -124,6 +127,7 @@ class PthruSelected():
|
||||
|
||||
def get_vpid(self):
|
||||
self.vpid["usb_xdci"] = launch_cfg_lib.get_vpid_from_bdf(self.bdf_vpid_map, self.bdf["usb_xdci"])
|
||||
self.vpid["gpu"] = launch_cfg_lib.get_vpid_from_bdf(self.bdf_vpid_map, self.bdf["gpu"])
|
||||
self.vpid["ipu"] = launch_cfg_lib.get_vpid_from_bdf(self.bdf_vpid_map, self.bdf["ipu"])
|
||||
self.vpid["ipu_i2c"] = launch_cfg_lib.get_vpid_from_bdf(self.bdf_vpid_map, self.bdf["ipu_i2c"])
|
||||
self.vpid["cse"] = launch_cfg_lib.get_vpid_from_bdf(self.bdf_vpid_map, self.bdf["cse"])
|
||||
@@ -153,6 +157,7 @@ class PthruSelected():
|
||||
|
||||
def check_item(self):
|
||||
launch_cfg_lib.pt_devs_check(self.bdf["usb_xdci"], self.vpid["usb_xdci"], "usb_xdci")
|
||||
launch_cfg_lib.pt_devs_check(self.bdf["gpu"], self.vpid["gpu"], "gpu")
|
||||
launch_cfg_lib.pt_devs_check(self.bdf["ipu"], self.vpid["ipu"], "ipu")
|
||||
launch_cfg_lib.pt_devs_check(self.bdf["ipu_i2c"], self.vpid["ipu_i2c"], "ipu_i2c")
|
||||
launch_cfg_lib.pt_devs_check(self.bdf["cse"], self.vpid["cse"], "cse")
|
||||
@@ -185,3 +190,19 @@ class VirtioDeviceSelect():
|
||||
|
||||
def check_virtio(self):
|
||||
launch_cfg_lib.check_block_mount(self.dev["block"])
|
||||
|
||||
|
||||
class SriovDeviceInput():
|
||||
|
||||
dev = {}
|
||||
def __init__(self, launch_info):
|
||||
self.launch_info = launch_info
|
||||
|
||||
def get_sriov(self):
|
||||
self.dev["gpu"] = common.get_leaf_tag_map(self.launch_info, "sriov", "gpu")
|
||||
temp = common.get_leaf_tag_map(self.launch_info, "sriov", "network")
|
||||
temp = {k: v[0] if v[0] else '' for k, v in temp.items()}
|
||||
self.dev["network"] = temp
|
||||
|
||||
def check_sriov(self, pt_sel):
|
||||
launch_cfg_lib.check_sriov_param(self.dev, pt_sel)
|
||||
|
@@ -200,18 +200,23 @@ def media_pt(user_vm_type, sel, vmid, config):
|
||||
audio_pt(user_vm_type, sel, vmid, config)
|
||||
|
||||
|
||||
def gen_pt(names, dm, sel, vmid, config):
|
||||
def gen_pt(names, dm, sriov, sel, vmid, config):
|
||||
|
||||
pt_none = True
|
||||
cap_pt = launch_cfg_lib.get_pt_dev()
|
||||
user_vm_type = names['user_vm_types'][vmid]
|
||||
|
||||
print("modprobe pci_stub", file=config)
|
||||
# pass thru GPU
|
||||
if dm['gvt_args'][vmid] == "gvtd":
|
||||
# SRIOV passthru
|
||||
if sriov['gpu'][vmid]:
|
||||
print('echo ${passthru_vpid["gpu"]} > /sys/bus/pci/drivers/pci-stub/new_id', file=config)
|
||||
print('echo ${passthru_bdf["gpu"]} > /sys/bus/pci/devices/${passthru_bdf["gpu"]}/driver/unbind', file=config)
|
||||
print('echo ${passthru_bdf["gpu"]} > /sys/bus/pci/drivers/pci-stub/bind', file=config)
|
||||
if sriov['network'][vmid]:
|
||||
print('echo ${passthru_vpid["network"]} > /sys/bus/pci/drivers/pci-stub/new_id', file=config)
|
||||
print('echo ${passthru_bdf["network"]} > /sys/bus/pci/devices/${passthru_bdf["gpu"]}/driver/unbind',
|
||||
file=config)
|
||||
print('echo ${passthru_bdf["network"]} > /sys/bus/pci/drivers/pci-stub/bind', file=config)
|
||||
|
||||
for pt_dev in cap_pt:
|
||||
if sel.bdf[pt_dev][vmid]:
|
||||
@@ -227,7 +232,7 @@ def gen_pt(names, dm, sel, vmid, config):
|
||||
media_pt(user_vm_type, sel, vmid, config)
|
||||
|
||||
|
||||
def gen_pt_head(names, dm, sel, vmid, config):
|
||||
def gen_pt_head(names, dm, sriov, sel, vmid, config):
|
||||
|
||||
cap_pt = launch_cfg_lib.get_pt_dev()
|
||||
user_vm_type = names['user_vm_types'][vmid]
|
||||
@@ -242,9 +247,13 @@ def gen_pt_head(names, dm, sel, vmid, config):
|
||||
if not sel.vpid[pt_dev] or not sel.vpid[pt_dev][vmid]:
|
||||
continue
|
||||
print('["{}"]="{}"'.format(pt_dev, sel.vpid[pt_dev][vmid]), file=config)
|
||||
if dm['gvt_args'][vmid] == "gvtd":
|
||||
gpu_vpid = launch_cfg_lib.get_gpu_vpid()
|
||||
print('["gpu"]="{}"'.format(gpu_vpid), file=config)
|
||||
|
||||
# SRIOV passthru
|
||||
if sriov['gpu'][vmid]:
|
||||
print('["gpu"]="{}"'.format(launch_cfg_lib.get_gpu_vpid()), file=config)
|
||||
if sriov['network'][vmid]:
|
||||
print('["network"]="{}"'.format(launch_cfg_lib.get_vpid_by_bdf(sriov['network'][vmid])), file=config)
|
||||
|
||||
print(')', file=config)
|
||||
|
||||
print("passthru_bdf=(", file=config)
|
||||
@@ -252,9 +261,10 @@ def gen_pt_head(names, dm, sel, vmid, config):
|
||||
if not sel.bdf[pt_dev] or not sel.bdf[pt_dev][vmid]:
|
||||
continue
|
||||
print('["{}"]="0000:{}"'.format(pt_dev, sel.bdf[pt_dev][vmid]), file=config)
|
||||
if dm['gvt_args'][vmid] == "gvtd":
|
||||
gpu_bdf = launch_cfg_lib.get_gpu_bdf()
|
||||
print('["gpu"]="0000:{}"'.format(gpu_bdf), file=config)
|
||||
if sriov['gpu'][vmid]:
|
||||
print('["gpu"]="0000:{}"'.format(sriov['gpu'][vmid]), file=config)
|
||||
if sriov['network'][vmid]:
|
||||
print('["network"]="0000:{}"'.format(sriov['network'][vmid]), file=config)
|
||||
print(')', file=config)
|
||||
|
||||
print("", file=config)
|
||||
|
Reference in New Issue
Block a user