Skip to content

Commit 830df76

Browse files
Wei Liuwenlingz
authored andcommitted
acrn-config: refine VM number macro from scenario config
1. refine vm number macro from scenario config. 2. add sanity check for load order. Tracked-On: #4458 Signed-off-by: Wei Liu <weix.w.liu@intel.com> Acked-by: Victor Sun <victor.sun@intel.com>
1 parent a8c2ba0 commit 830df76

File tree

3 files changed

+67
-52
lines changed

3 files changed

+67
-52
lines changed

misc/acrn-config/library/scenario_cfg_lib.py

Lines changed: 40 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -260,48 +260,6 @@ def get_order_type_by_vmid(idx):
260260
return order_type
261261

262262

263-
def get_vmid_by_order_type(type_str):
264-
"""
265-
This is mapping table for {id:order type}
266-
:param type_str: vm loader type
267-
:return: table of id:order type dictionary
268-
"""
269-
270-
idx_list = []
271-
order_id_dic = common.order_type_map_vmid(SCENARIO_INFO_FILE, VM_COUNT)
272-
273-
for idx, order_type in order_id_dic.items():
274-
if type_str == order_type:
275-
idx_list.append(idx)
276-
277-
return idx_list
278-
279-
280-
def is_pre_launch_vm(idx):
281-
"""
282-
Identification the vm id loader type is pre launched
283-
:param idx: vm id number
284-
:return: True if it is a pre launched vm
285-
"""
286-
order_type = get_order_type_by_vmid(idx)
287-
if order_type == "PRE_LAUNCHED_VM":
288-
status = True
289-
else:
290-
status = False
291-
292-
return status
293-
294-
def pre_launch_vm_ids():
295-
""" Get pre launched vm ids as list """
296-
pre_vm = []
297-
298-
for i in range(VM_COUNT):
299-
if is_pre_launch_vm(i):
300-
pre_vm.append(i)
301-
302-
return pre_vm
303-
304-
305263
def vm_name_check(vm_names, item):
306264
"""
307265
Check vm name
@@ -323,7 +281,18 @@ def load_order_check(load_orders, item):
323281
:param item: vm name item in xml
324282
:return: None
325283
"""
284+
sos_vm_ids = []
285+
pre_vm_ids = []
286+
post_vm_ids = []
326287
for order_i, load_str in load_orders.items():
288+
if load_str == "SOS_VM":
289+
sos_vm_ids.append(order_i)
290+
291+
if load_str == "PRE_LAUNCHED_VM":
292+
pre_vm_ids.append(order_i)
293+
294+
if load_str == "POST_LAUNCHED_VM":
295+
post_vm_ids.append(order_i)
327296

328297
if not load_str:
329298
key = "vm:id={},{}".format(order_i, item)
@@ -334,6 +303,35 @@ def load_order_check(load_orders, item):
334303
key = "vm:id={},{}".format(order_i, item)
335304
ERR_LIST[key] = "VM load order unknown"
336305

306+
if len(sos_vm_ids) >= 2:
307+
key = "vm:id={},{}".format(sos_vm_ids[0], item)
308+
ERR_LIST[key] = "SOS_VM number should not be greater than 1"
309+
310+
if post_vm_ids and sos_vm_ids:
311+
if post_vm_ids[0] < sos_vm_ids[-1]:
312+
key = "vm:id={},{}".format(post_vm_ids[0], item)
313+
ERR_LIST[key] = "POST_LAUNCHED_VM should be configured after SOS_VM"
314+
315+
if pre_vm_ids and sos_vm_ids:
316+
if sos_vm_ids[-1] < pre_vm_ids[-1]:
317+
key = "vm:id={},{}".format(sos_vm_ids[0], item)
318+
ERR_LIST[key] = "PRE_LAUNCHED_VM should be configured before SOS_VM"
319+
320+
321+
def get_load_order_cnt(load_orders, type_name):
322+
"""
323+
Get load order type count
324+
:param load_orders: dictionary of vm load_order
325+
:param type_name: load order type for vm
326+
:return: number for this load order type name
327+
"""
328+
type_cnt = 0
329+
for load_str in load_orders.values():
330+
if type_name == load_str:
331+
type_cnt += 1
332+
333+
return type_cnt
334+
337335

338336
def guest_flag_check(guest_flag_idx, branch_tag, leaf_tag):
339337

misc/acrn-config/scenario_config/scenario_item.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,18 @@ def get_info(self):
261261
self.size = scenario_cfg_lib.get_leaf_tag_map(self.scenario_info, "epc_section", "size")
262262

263263

264+
class LoadOrderNum:
265+
""" This is Abstract of VM number for different load order """
266+
def __init__(self):
267+
self.pre_vm = 0
268+
self.sos_vm = 0
269+
self.post_vm = 0
270+
271+
def get_info(self, load_order):
272+
self.pre_vm = scenario_cfg_lib.get_load_order_cnt(load_order, "PRE_LAUNCHED_VM")
273+
self.sos_vm = scenario_cfg_lib.get_load_order_cnt(load_order, "SOS_VM")
274+
self.post_vm = scenario_cfg_lib.get_load_order_cnt(load_order, "POST_LAUNCHED_VM")
275+
264276
class VmInfo:
265277
""" This is Abstract of class of VM setting """
266278
name = {}
@@ -281,6 +293,7 @@ def __init__(self, board_file, scenario_file):
281293
self.os_cfg = CfgOsKern(self.scenario_info)
282294
self.vuart = VuartInfo(self.scenario_info)
283295
self.cfg_pci = CfgPci(self.scenario_info)
296+
self.load_order_cnt = LoadOrderNum()
284297

285298
def get_info(self):
286299
"""
@@ -301,6 +314,7 @@ def get_info(self):
301314
self.os_cfg.get_info()
302315
self.vuart.get_info()
303316
self.cfg_pci.get_info()
317+
self.load_order_cnt.get_info(self.load_order)
304318

305319
def get_cpu_bitmap(self, index):
306320
"""

misc/acrn-config/scenario_config/vm_configurations_h.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ def cpu_affinity_output(vm_info, i, config):
3636
i, cpu_bits['cpu_map']), file=config)
3737

3838

39+
def scenario_vm_num(load_type_cnt, config):
40+
41+
print("#define PRE_VM_NUM\t\t{}U".format(load_type_cnt.pre_vm), file=config)
42+
print("#define SOS_VM_NUM\t\t{}U".format(load_type_cnt.sos_vm), file=config)
43+
print("#define MAX_POST_VM_NUM\t\t{}U".format(load_type_cnt.post_vm), file=config)
44+
3945
def gen_sdc_header(vm_info, config):
4046
"""
4147
Generate vm_configuration.h of sdc scenario
@@ -45,7 +51,7 @@ def gen_sdc_header(vm_info, config):
4551
gen_common_header(config)
4652
print("#include <misc_cfg.h>\n", file=config)
4753

48-
print("#define CONFIG_MAX_VM_NUM\t\t(2U + CONFIG_MAX_KATA_VM_NUM)", file=config)
54+
scenario_vm_num(vm_info.load_order_cnt, config)
4955
print("", file=config)
5056
print("/* Bits mask of guest flags that can be programmed by device model." +
5157
" Other bits are set by hypervisor only */", file=config)
@@ -86,8 +92,7 @@ def gen_sdc2_header(vm_info, config):
8692
"""
8793
gen_common_header(config)
8894
print("#include <misc_cfg.h>\n", file=config)
89-
print("#define CONFIG_MAX_VM_NUM\t\t({0}U + CONFIG_MAX_KATA_VM_NUM)".format(
90-
scenario_cfg_lib.VM_COUNT), file=config)
95+
scenario_vm_num(vm_info.load_order_cnt, config)
9196
print("", file=config)
9297
print("/* Bits mask of guest flags that can be programmed by device model." +
9398
" Other bits are set by hypervisor only */", file=config)
@@ -107,14 +112,14 @@ def gen_sdc2_header(vm_info, config):
107112
print("{0}".format(VM_END_DEFINE), file=config)
108113

109114

110-
def logic_max_vm_num(config):
115+
def logic_max_vm_num(vm_info, config):
111116
"""
112117
This is logical max vm number comment
113118
:param config: it is the pointer which file write to
114119
:return: None
115120
"""
116121
print("", file=config)
117-
print("#define CONFIG_MAX_VM_NUM\t\t{0}U".format(scenario_cfg_lib.VM_COUNT), file=config)
122+
scenario_vm_num(vm_info.load_order_cnt, config)
118123
print("", file=config)
119124
print("/* The VM CONFIGs like:", file=config)
120125
print(" *\tVMX_CONFIG_VCPU_AFFINITY", file=config)
@@ -146,7 +151,7 @@ def gen_logical_partition_header(vm_info, config):
146151
" Other bits are set by hypervisor only */", file=config)
147152
print("#define DM_OWNED_GUEST_FLAG_MASK\t0UL", file=config)
148153

149-
logic_max_vm_num(config)
154+
logic_max_vm_num(vm_info, config)
150155

151156
for i in range(scenario_cfg_lib.VM_COUNT):
152157

@@ -206,8 +211,7 @@ def gen_industry_header(vm_info, config):
206211
gen_common_header(config)
207212
print("#include <misc_cfg.h>", file=config)
208213
print("", file=config)
209-
print("#define CONFIG_MAX_VM_NUM\t\t({0}U + CONFIG_MAX_KATA_VM_NUM)".format(
210-
scenario_cfg_lib.VM_COUNT), file=config)
214+
scenario_vm_num(vm_info.load_order_cnt, config)
211215
print("", file=config)
212216
print("/* Bits mask of guest flags that can be programmed by device model." +
213217
" Other bits are set by hypervisor only */", file=config)
@@ -241,8 +245,7 @@ def gen_hybrid_header(vm_info, config):
241245
"\t\t\t\t\t\tGUEST_FLAG_RT | GUEST_FLAG_IO_COMPLETION_POLLING)", file=config)
242246

243247
print("", file=config)
244-
print("#define CONFIG_MAX_VM_NUM\t\t({0}U + CONFIG_MAX_KATA_VM_NUM)".format(
245-
scenario_cfg_lib.VM_COUNT), file=config)
248+
scenario_vm_num(vm_info.load_order_cnt, config)
246249
print("", file=config)
247250
for i in range(scenario_cfg_lib.VM_COUNT):
248251
cpu_affinity_output(vm_info, i, config)

0 commit comments

Comments
 (0)