acrn-config: configuration source refactor for new layout

Now the hypervisor configuration source code layout is changed, so acrn-config
need to change accordingly to make sure XML based configuration build success;

Tracked-On: #5077
Signed-off-by: Wei Liu <weix.w.liu@intel.com>
Acked-by: Victor Sun <victor.sun@intel.com>
This commit is contained in:
Wei Liu
2020-07-21 16:19:52 +08:00
committed by wenlingz
parent 38caecae56
commit 6cafb9cf01
12 changed files with 347 additions and 237 deletions

View File

@@ -26,11 +26,11 @@ def generate_file(vm_info, config):
:param config: it is pointer for for file write to
:return: None
"""
sub_name_count = board_cfg_lib.parser_pci()
board_cfg_lib.parser_pci()
compared_bdf = []
for cnt_sub_name in sub_name_count.keys():
for cnt_sub_name in board_cfg_lib.SUB_NAME_COUNT.keys():
i_cnt = 0
for bdf, bar_attr in board_cfg_lib.PCI_DEV_BAR_DESC.pci_dev_dic.items():
if cnt_sub_name == bar_attr.name and bdf not in compared_bdf:
@@ -42,34 +42,32 @@ def generate_file(vm_info, config):
i_cnt += 1
idx = 0
print("{}".format(scenario_cfg_lib.HEADER_LICENSE), file=config)
print("", file=config)
print("#include <vm_config.h>", file=config)
print("#include <pci_devices.h>", file=config)
print("#include <vpci.h>", file=config)
print("#include <vbar_base.h>", file=config)
print("#include <mmu.h>", file=config)
print("#include <page.h>", file=config)
print("", file=config)
print("/* The vbar_base info of pt devices is included in device MACROs which defined in",
file=config)
print(" * arch/x86/configs/$(CONFIG_BOARD)/pci_devices.h.", file=config)
print(" * The memory range of vBAR should exactly match with the e820 layout of VM.",
file=config)
print(" */", file=config)
for vm_i, pci_bdf_devs_list in vm_info.cfg_pci.pci_devs.items():
pci_cnt = 1
if not pci_bdf_devs_list:
continue
pci_cnt = 1
if idx == 0:
print("", file=config)
print("#define PTDEV(PCI_DEV)\t\tPCI_DEV, PCI_DEV##_VBAR",file=config)
print("", file=config)
print("struct acrn_vm_pci_dev_config " +
"vm{}_pci_devs[{}] = {{".format(vm_i, vm_info.cfg_pci.pci_dev_num[vm_i]), file=config)
"vm{}_pci_devs[VM{}_CONFIG_PCI_DEV_NUM] = {{".format(vm_i, vm_i), file=config)
print("\t{", file=config)
print("\t\t.emu_type = {},".format(PCI_DEV_TYPE[0]), file=config)
print("\t\t.vbdf.bits = {.b = 0x00U, .d = 0x00U, .f = 0x00U},", file=config)
print("\t\t.vdev_ops = &vhostbridge_ops,", file=config)
print("\t},", file=config)
idx += 1
for pci_bdf_dev in pci_bdf_devs_list:
if not pci_bdf_dev:
continue
@@ -81,7 +79,7 @@ def generate_file(vm_info, config):
print("\t\t.vbdf.bits = {{.b = 0x00U, .d = 0x0{}U, .f = 0x00U}},".format(pci_cnt), file=config)
for bdf, bar_attr in board_cfg_lib.PCI_DEV_BAR_DESC.pci_dev_dic.items():
if bdf == pci_bdf_dev:
print("\t\t{},".format(board_cfg_lib.PCI_DEV_BAR_DESC.pci_dev_dic[bdf].name_w_i_cnt), file=config)
print("\t\tPTDEV({}),".format(board_cfg_lib.PCI_DEV_BAR_DESC.pci_dev_dic[bdf].name_w_i_cnt), file=config)
else:
continue
print("\t},", file=config)

View File

@@ -20,8 +20,7 @@ import board_defconfig
from hv_item import HvInfo
ACRN_PATH = common.SOURCE_ROOT_DIR
ACRN_CONFIG_DEF = ACRN_PATH + 'hypervisor/scenarios/'
ACRN_CONFIGS = ACRN_PATH + "hypervisor/arch/x86/configs/"
ACRN_CONFIG_DEF = ACRN_PATH + 'misc/vm_configs/scenarios/'
GEN_FILE = ["vm_configurations.h", "vm_configurations.c", "pci_dev.c", ".config"]
@@ -148,20 +147,20 @@ def main(args):
if params['--out']:
if os.path.isabs(params['--out']):
scenario_dir = os.path.join(params['--out'], scenario + '/')
config_hv = os.path.join(params['--out'], board_name + GEN_FILE[3])
scen_output = params['--out'] + "/scenarios/" + scenario + "/"
else:
scenario_dir = os.path.join(ACRN_PATH + params['--out'], scenario + '/')
config_hv = os.path.join(ACRN_PATH + params['--out'], board_name + GEN_FILE[3])
scen_output = ACRN_PATH + params['--out'] + "/scenarios/" + scenario + "/"
else:
scenario_dir = os.path.join(ACRN_CONFIG_DEF, scenario + '/')
config_hv = os.path.join(ACRN_CONFIGS, board_name + GEN_FILE[3])
common.print_yel("{}".format("Override board defconfig...", warn=True))
common.mkdir(scenario_dir)
scen_output = ACRN_CONFIG_DEF + "/scenarios/" + scenario + "/"
vm_config_h = scenario_dir + GEN_FILE[0]
vm_config_c = scenario_dir + GEN_FILE[1]
pci_config_c = scenario_dir + GEN_FILE[2]
scen_board = scen_output + board_name + "/"
common.mkdir(scen_board)
common.mkdir(scen_output)
vm_config_h = scen_output + GEN_FILE[0]
vm_config_c = scen_output + GEN_FILE[1]
pci_config_c = scen_board + GEN_FILE[2]
config_hv = scen_board + board_name + GEN_FILE[3]
# parse the scenario.xml
get_scenario_item_values(params['--board'], params['--scenario'])

View File

@@ -341,7 +341,7 @@ def gen_pre_launch_vm(vm_type, vm_i, scenario_items, config):
return err_dic
if vm_info.cfg_pci.pci_devs[vm_i] and vm_info.cfg_pci.pci_devs[vm_i] != None:
print("\t\t.pci_dev_num = {}U,".format(vm_info.cfg_pci.pci_dev_num[vm_i]), file=config)
print("\t\t.pci_dev_num = VM{}_CONFIG_PCI_DEV_NUM,".format(vm_i), file=config)
print("\t\t.pci_devs = vm{}_pci_devs,".format(vm_i), file=config)
print("\t},", file=config)
@@ -370,7 +370,7 @@ def pre_launch_definiation(vm_info, config):
if "PRE_LAUNCHED_VM" != scenario_cfg_lib.VM_DB[vm_type]['load_type']:
continue
print("extern struct acrn_vm_pci_dev_config " +
"vm{}_pci_devs[{}];".format(vm_i, vm_info.cfg_pci.pci_dev_num[vm_i]), file=config)
"vm{}_pci_devs[VM{}_CONFIG_PCI_DEV_NUM];".format(vm_i, vm_i), file=config)
print("", file=config)
def generate_file(scenario_items, config):

View File

@@ -34,7 +34,7 @@ def cpu_affinity_output(vm_info, i, config):
return
cpu_bits = vm_info.get_cpu_bitmap(i)
print("#define VM{0}_CONFIG_CPU_AFFINITY\t\t{1}".format(
print("#define VM{0}_CONFIG_CPU_AFFINITY {1}".format(
i, cpu_bits['cpu_map']), file=config)
def clos_config_output(scenario_items, i, config):
@@ -53,10 +53,16 @@ def clos_config_output(scenario_items, i, config):
def scenario_vm_num(scenario_items, config):
print("", file=config)
print("/* SOS_VM_NUM can only be 0U or 1U;", file=config)
print(" * When SOS_VM_NUM is 0U, MAX_POST_VM_NUM must be 0U too;", file=config)
print(" * MAX_POST_VM_NUM must be bigger than CONFIG_MAX_KATA_VM_NUM;", file=config)
print(" */", file=config)
load_type_cnt = scenario_items['vm'].load_order_cnt
print("#define PRE_VM_NUM\t\t{}U".format(load_type_cnt.pre_vm), file=config)
print("#define SOS_VM_NUM\t\t{}U".format(load_type_cnt.sos_vm), file=config)
print("#define MAX_POST_VM_NUM\t\t{}U".format(load_type_cnt.post_vm), file=config)
print("#define PRE_VM_NUM\t\t\t{}U".format(load_type_cnt.pre_vm), file=config)
print("#define SOS_VM_NUM\t\t\t{}U".format(load_type_cnt.sos_vm), file=config)
print("#define MAX_POST_VM_NUM\t\t\t{}U".format(load_type_cnt.post_vm), file=config)
print("#define CONFIG_MAX_KATA_VM_NUM\t\t{}U".format(scenario_cfg_lib.KATA_VM_COUNT), file=config)
@@ -72,16 +78,17 @@ def gen_pre_launch_vm(scenario_items, config):
cpu_bits = vm_info.get_cpu_bitmap(vm_i)
cpu_affinity_output(vm_info, vm_i, config)
clos_config_output(scenario_items, vm_i, config)
print("#define VM{0}_CONFIG_MEM_START_HPA\t\t{1}UL".format(
print("#define VM{0}_CONFIG_MEM_START_HPA {1}UL".format(
vm_i, vm_info.mem_info.mem_start_hpa[vm_i]), file=config)
print("#define VM{0}_CONFIG_MEM_SIZE\t\t\t{1}UL".format(
print("#define VM{0}_CONFIG_MEM_SIZE {1}UL".format(
vm_i, vm_info.mem_info.mem_size[vm_i]), file=config)
if vm_info.mem_info.mem_start_hpa2[vm_i] not in (None, ''):
print("#define VM{0}_CONFIG_MEM_START_HPA2\t\t{1}UL".format(
print("#define VM{0}_CONFIG_MEM_START_HPA2 {1}UL".format(
vm_i, vm_info.mem_info.mem_start_hpa2[vm_i]), file=config)
print("#define VM{0}_CONFIG_MEM_SIZE_HPA2\t\t{1}UL".format(
print("#define VM{0}_CONFIG_MEM_SIZE_HPA2 {1}UL".format(
vm_i, vm_info.mem_info.mem_size_hpa2[vm_i]), file=config)
print("#define VM{}_CONFIG_PCI_DEV_NUM {}U".format(vm_i, vm_info.cfg_pci.pci_dev_num[vm_i]), file=config)
print("", file=config)
vm_i += 1
@@ -89,26 +96,34 @@ def gen_pre_launch_vm(scenario_items, config):
def gen_post_launch_header(scenario_items, config):
vm_i = 0
vm_info = scenario_items['vm']
is_post_vm_available = False
for vm_type in common.VM_TYPES.values():
if "POST_LAUNCHED_VM" != scenario_cfg_lib.VM_DB[vm_type]['load_type']:
vm_i += 1
continue
is_post_vm_available = True
cpu_affinity_output(vm_info, vm_i, config)
clos_config_output(scenario_items, vm_i, config)
vm_i += 1
if is_post_vm_available:
print("", file=config)
def gen_sos_header(scenario_items, config):
if 'SOS_VM' not in common.VM_TYPES.values():
return
print("", file=config)
print("#define SOS_VM_BOOTARGS\t\t\tSOS_ROOTFS\t\\", file=config)
print("\t\t\t\t\tSOS_CONSOLE\t\\", file=config)
print("\t\t\t\t\tSOS_IDLE\t\\", file=config)
print("\t\t\t\t\tSOS_BOOTARGS_DIFF", file=config)
for vm_i,vm_type in common.VM_TYPES.items():
if vm_type == 'SOS_VM':
clos_config_output(scenario_items, vm_i, config)
print("", file=config)
def gen_header_file(scenario_items, config):
@@ -120,15 +135,15 @@ def gen_header_file(scenario_items, config):
def get_dm_owned_guest_flag_mask(vm_info, config):
print("", file=config)
if "SOS_VM" not in common.VM_TYPES.values():
print("#define DM_OWNED_GUEST_FLAG_MASK\t0UL", file=config)
print("#define DM_OWNED_GUEST_FLAG_MASK 0UL", file=config)
else:
print("/* Bits mask of guest flags that can be programmed by device model." +
" Other bits are set by hypervisor only */", file=config)
print("#define DM_OWNED_GUEST_FLAG_MASK\t" +
print("#define DM_OWNED_GUEST_FLAG_MASK " +
"(GUEST_FLAG_SECURE_WORLD_ENABLED | GUEST_FLAG_LAPIC_PASSTHROUGH | \\\n" +
"\t\t\t\t\t\tGUEST_FLAG_RT | GUEST_FLAG_IO_COMPLETION_POLLING)", file=config)
print("", file=config)
@@ -141,15 +156,10 @@ def generate_file(scenario_items, config):
vm_info = scenario_items['vm']
gen_common_header(config)
print("#include <misc_cfg.h>\n", file=config)
for vm_i,pci_dev_num in vm_info.cfg_pci.pci_dev_num.items():
if pci_dev_num >= 2:
print("#include <pci_devices.h>", file=config)
break
get_dm_owned_guest_flag_mask(vm_info, config)
print("#include <misc_cfg.h>", file=config)
print("#include <pci_devices.h>", file=config)
scenario_vm_num(scenario_items, config)
print("", file=config)
get_dm_owned_guest_flag_mask(vm_info, config)
gen_header_file(scenario_items, config)
print("", file=config)
print("{0}".format(VM_END_DEFINE), file=config)