mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-05-03 22:17:03 +00:00
The concept of guest_flags is hard to understand for users. So turn guest_flags into several parameters in config tool user interface, list as below: GUEST_FLAG_LAPIC_PASSTHROUGH ---> lapic_passthrough GUEST_FLAG_IO_COMPLETION_POLLING ---> io_completion_polling GUEST_FLAG_VCAT_ENABLED ---> virtual_cat_support GUEST_FLAG_SECURE_WORLD_ENABLED ---> secure_world_support GUEST_FLAG_HIDE_MTRR ---> hide_mtrr_support GUEST_FLAG_NVMX_ENABLED ---> nested_virtualization_support GUEST_FLAG_SECURITY_VM ---> security_vm GUEST_FLAG_RT ---> vm_type(RTVM) GUEST_FLAG_TEE ---> vm_type(TEE_VM) GUEST_FLAG_REE ---> vm_type(REE_VM) In addition, HV global parameter NVMX_ENABLE is removed from user interface, when config tool detects more than one VM with nested_virtualization_support, NVMX_ENABLE is assigned as 'y' automatically. v1->v2: *Rebase on the latest xml schema checking change *Remove "all rights reserved" from the license header in guest_flags.py v2->v3: *Change the name of the new config items to CAPITAL_CASE style *Combine guest flag policy to an XPATH in guest_flags.py *Use count() to directly deduce NVMX_ENABLED in config_common.xsl and update `boolean-by-key-value` to process 'true' v3->v4: *Change the name of the new config items to lower_case style *Change guest_flag_node to allocation_vm_node in guest_flags.py *Separate value case and key case for boolean-by-key-value Tracked-On: #6690 Signed-off-by: hangliu1 <hang1.liu@linux.intel.com> Reviewed-by: Junjie Mao <junjie.mao@intel.com>
39 lines
1.8 KiB
Python
39 lines
1.8 KiB
Python
#!/usr/bin/env python3
|
|
#
|
|
# Copyright (C) 2022 Intel Corporation.
|
|
#
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
#
|
|
|
|
import sys, os, re
|
|
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'library'))
|
|
import common, lib.error, lib.lib
|
|
from collections import namedtuple
|
|
|
|
class GuestFlagPolicy(namedtuple("GuestFlagPolycy", ["condition", "guest_flag"])):
|
|
pass
|
|
|
|
policies = [
|
|
GuestFlagPolicy(".//lapic_passthrough = 'y'", "GUEST_FLAG_LAPIC_PASSTHROUGH"),
|
|
GuestFlagPolicy(".//io_completion_polling = 'y'", "GUEST_FLAG_IO_COMPLETION_POLLING"),
|
|
GuestFlagPolicy(".//virtual_cat_support = 'y'", "GUEST_FLAG_VCAT_ENABLED"),
|
|
GuestFlagPolicy(".//secure_world_support = 'y'", "GUEST_FLAG_SECURE_WORLD_ENABLED"),
|
|
GuestFlagPolicy(".//hide_mtrr_support = 'y'", "GUEST_FLAG_HIDE_MTRR"),
|
|
GuestFlagPolicy(".//nested_virtualization_support = 'y'", "GUEST_FLAG_NVMX_ENABLED"),
|
|
GuestFlagPolicy(".//security_vm = 'y'", "GUEST_FLAG_SECURITY_VM"),
|
|
GuestFlagPolicy(".//vm_type = 'RTVM'", "GUEST_FLAG_RT"),
|
|
GuestFlagPolicy(".//vm_type = 'TEE'", "GUEST_FLAG_TEE"),
|
|
GuestFlagPolicy(".//vm_type = 'REE'", "GUEST_FLAG_REE"),
|
|
]
|
|
|
|
def fn(board_etree, scenario_etree, allocation_etree):
|
|
for vm_node in scenario_etree.xpath("//vm"):
|
|
vm_id = vm_node.get('id')
|
|
allocation_vm_node = common.get_node(f"/acrn-config/vm[@id = '{vm_id}']", allocation_etree)
|
|
if allocation_vm_node is None:
|
|
allocation_vm_node = common.append_node("/acrn-config/vm", None, allocation_etree, id = vm_id)
|
|
for policy in policies:
|
|
if vm_node.xpath(policy.condition):
|
|
common.append_node("./guest_flags/guest_flag", str(policy.guest_flag), allocation_vm_node)
|
|
common.append_node("./guest_flags/guest_flag",'GUEST_FLAG_STATIC_VM', allocation_vm_node)
|