From f3688c7e458c0b149dee9b3e08de167f533122ff Mon Sep 17 00:00:00 2001 From: Vijay Dhanraj Date: Thu, 5 Dec 2019 17:34:15 -0800 Subject: [PATCH] acrn-config: Fix target xml generation issue when no P-state scaling driver is present There seems to be a corner case where target xml file fails to get generated if there was no P-state scaling driver or C-state idle driver present. This patch addresses it by handling the file not present exception and setting a warning as well a "not available" string to successfully generate target xml file. Signed-off-by: Vijay Dhanraj Tracked-On: #4199 Acked-by: Victor Sun --- misc/acrn-config/target/acpi.py | 59 +++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/misc/acrn-config/target/acpi.py b/misc/acrn-config/target/acpi.py index 53e3e9e0c..979200682 100644 --- a/misc/acrn-config/target/acpi.py +++ b/misc/acrn-config/target/acpi.py @@ -417,19 +417,24 @@ def store_cx_data(sysnode1, sysnode2, config): """ i = 0 state_cpus = {} - with open(sysnode1, 'r') as acpi_idle: - idle_driver = acpi_idle.read(32) + try: + with open(sysnode1, 'r') as acpi_idle: + idle_driver = acpi_idle.read(32) - if idle_driver.find("acpi_idle") == -1: - parser_lib.print_yel("The Cx data for ACRN relies on " +\ - "acpi_idle driver but it is not found, ", warn=True, end=False) - if idle_driver.find("intel_idle") == 0: - print("please add idle=nomwait in kernel " +\ - "cmdline to fall back to acpi_idle driver") - else: - parser_lib.print_yel("please make sure ACPI Cstate is enabled in BIOS.", warn=True) - print("\t/* Cx data is not available */", file=config) - return + if idle_driver.find("acpi_idle") == -1: + parser_lib.print_yel("The Cx data for ACRN relies on " +\ + "acpi_idle driver but it is not found, ", warn=True, end=False) + if idle_driver.find("intel_idle") == 0: + print("please add idle=nomwait in kernel " +\ + "cmdline to fall back to acpi_idle driver") + else: + parser_lib.print_yel("please make sure ACPI Cstate is enabled in BIOS.", warn=True) + print("\t/* Cx data is not available */", file=config) + return + except IOError: + parser_lib.print_yel("No idle driver found.", warn=True) + print("\t/* Cx data is not available */", file=config) + return files = os.listdir(sysnode2) for d_path in files: @@ -486,18 +491,24 @@ def store_px_data(sysnode, config): """ px_tmp = PxPkg() px_data = {} - with open(sysnode+'cpu0/cpufreq/scaling_driver', 'r') as f_node: - freq_driver = f_node.read() - if freq_driver.find("acpi-cpufreq") == -1: - parser_lib.print_yel("The Px data for ACRN relies on " +\ - "acpi-cpufreq driver but it is not found, ", warn=True, end=False) - if freq_driver.find("intel_pstate") == 0: - print("please add intel_pstate=disable in kernel " +\ - "cmdline to fall back to acpi-cpufreq driver") - else: - parser_lib.print_yel("please make sure ACPI Pstate is enabled in BIOS.", warn=True) - print("\t/* Px data is not available */", file=config) - return + + try: + with open(sysnode+'cpu0/cpufreq/scaling_driver', 'r') as f_node: + freq_driver = f_node.read() + if freq_driver.find("acpi-cpufreq") == -1: + parser_lib.print_yel("The Px data for ACRN relies on " +\ + "acpi-cpufreq driver but it is not found, ", warn=True, end=False) + if freq_driver.find("intel_pstate") == 0: + print("please add intel_pstate=disable in kernel " +\ + "cmdline to fall back to acpi-cpufreq driver") + else: + parser_lib.print_yel("please make sure ACPI Pstate is enabled in BIOS.", warn=True) + print("\t/* Px data is not available */", file=config) + return + except IOError: + parser_lib.print_yel("No scaling_driver found.", warn=True) + print("\t/* Px data is not available */", file=config) + return try: with open(sysnode+'cpufreq/boost', 'r') as f_node: