From 65c71c2e5ba045ab07e9aa1fc4bf4064a75c8990 Mon Sep 17 00:00:00 2001 From: Ziheng Li Date: Tue, 7 Jun 2022 10:29:09 +0800 Subject: [PATCH] config_tools: refine issues in the upgrader Now in scenario XML file: 1.The vm memory node info has been transformed into a new form( e.g. hpa_region, start_hpa, size_hpa, and size). 2.The clos node info will be dropped during the upgrade process, and users can see the discard waring info. 3.During the upgrade process, the node "RELOC" will be renamed to "RELOC_ENABLED", the node "MULTIBOOT2" will be renamed to "MULTIBOOT2_ENABLED". Tracked-On: #7660 Signed-off-by: Ziheng Li --- misc/config_tools/scenario_config/upgrader.py | 57 ++++++++++++++++++- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/misc/config_tools/scenario_config/upgrader.py b/misc/config_tools/scenario_config/upgrader.py index 50a4422f5..71701d35a 100755 --- a/misc/config_tools/scenario_config/upgrader.py +++ b/misc/config_tools/scenario_config/upgrader.py @@ -409,6 +409,57 @@ class ScenarioUpgrader(ScenarioTransformer): new_nodes.append(virtio.format_xml_element()) return False + def move_memory(self, xsd_element_node, xml_parent_node, new_nodes): + new_node = etree.Element(xsd_element_node.get("name")) + memory_node = self.hv_vm_node_map[xml_parent_node].xpath("./memory") + old_data_start_hpa = [] + old_data_size_hpa = [] + old_data_whole = [] + if len(memory_node) != 0: + for element in memory_node[0]: + if "start_hpa" in element.tag: + old_data_start_hpa.append(element) + elif "size" in element.tag: + old_data_size_hpa.append(element) + elif "whole" in element.tag: + old_data_whole.append(element) + elif "hpa_region" in element.tag: + for subelement in element: + if "start_hpa" in subelement.tag: + old_data_start_hpa.append(subelement) + elif "size" in subelement.tag: + old_data_size_hpa.append(subelement) + elif "whole" in subelement.tag: + old_data_whole.append(subelement) + + if len(old_data_start_hpa) != 0 and len(old_data_size_hpa) != 0: + for i in range(len(old_data_start_hpa)): + if int(old_data_start_hpa[i].text, 16) != 0 and int(old_data_size_hpa[i].text, 16) != 0: + hpa_region_node = etree.SubElement(new_node, 'hpa_region') + old_data_size_hpa[i].tag = "size_hpa" + hpa_region_node.append(old_data_start_hpa[i]) + hpa_region_node.append(old_data_size_hpa[i]) + elif len(old_data_whole) != 0 or (len(old_data_start_hpa) == 0 and len(old_data_size_hpa) != 0): + if len(old_data_whole) != 0: + for i in range(len(old_data_whole)): + old_data_whole[i].tag = "size" + new_node.append(old_data_whole[i]) + else: + for i in range(len(old_data_size_hpa)): + old_data_size_hpa[i].tag = "size" + new_node.append(old_data_size_hpa[i]) + + new_nodes.append(new_node) + + for n in old_data_start_hpa: + self.old_data_nodes.discard(n) + for n in old_data_size_hpa: + self.old_data_nodes.discard(n) + for n in old_data_whole: + self.old_data_nodes.discard(n) + + return False + def move_console_vuart(self, xsd_element_node, xml_parent_node, new_nodes): new_node = etree.Element(xsd_element_node.get("name")) new_node.text = "None" @@ -707,17 +758,18 @@ class ScenarioUpgrader(ScenarioTransformer): "vbootloader": partialmethod(move_enablement, ".//vbootloader", values_as_enabled = ["ovmf"], values_as_disabled = ["no"]), # Intermediate nodes - "memory": partialmethod(create_node_if, ".//memory", ".//mem_size"), "pci_devs": partialmethod(create_node_if, ".//pci_devs", ".//passthrough_devices/*[text() != ''] | .//sriov/*[text() != '']"), "BUILD_TYPE": move_build_type, + "RELOC_ENABLED": partialmethod(rename_data, "FEATURES/RELOC", "FEATURES/RELOC_ENABLED"), + "MULTIBOOT2_ENABLED": partialmethod(rename_data, "FEATURES/MULTIBOOT2", "FEATURES/MULTIBOOT2_ENABLED"), "console_vuart": move_console_vuart, "vuart_connections": move_vuart_connections, "IVSHMEM": move_ivshmem, "vm_type": move_vm_type, "os_type": move_os_type, "virtio_devices": move_virtio_devices, - "memory/whole": partialmethod(rename_data, "memory/whole", ".//mem_size"), + "memory": move_memory, "default": move_data_by_same_tag, } @@ -828,6 +880,7 @@ class UpgradingScenarioStage(PipelineStage): DiscardedDataFilter("hv/CAPACITIES/IOMMU_BUS_NUM", None, "The maximum bus number to be supported by ACRN IOMMU configuration is now inferred from board data."), DiscardedDataFilter("hv/MISC_CFG/UEFI_OS_LOADER_NAME", None, None), DiscardedDataFilter("vm/guest_flags/guest_flag", "0", None), + DiscardedDataFilter("vm/clos/vcpu_clos", None, "clos nodes are no longer needed in scenario definitions."), DiscardedDataFilter("vm/epc_section/base", "0", "Post-launched VMs cannot have EPC sections."), DiscardedDataFilter("vm/epc_section/size", "0", "Post-launched VMs cannot have EPC sections."), DiscardedDataFilter("vm/os_config/name", None, "Guest OS names are no longer needed in scenario definitions."),