diff --git a/src/tools/kata-ctl/src/arch/s390x/mod.rs b/src/tools/kata-ctl/src/arch/s390x/mod.rs index 991d676d1..ddeb2a522 100644 --- a/src/tools/kata-ctl/src/arch/s390x/mod.rs +++ b/src/tools/kata-ctl/src/arch/s390x/mod.rs @@ -37,15 +37,17 @@ mod arch_specific { fn check_cpu() -> Result<()> { info!(sl!(), "check CPU: s390x"); - let cpu_info = check::get_single_cpu_info(check::PROC_CPUINFO, CPUINFO_DELIMITER)?; + let cpu_info = + kata_sys_util::cpu::get_single_cpu_info(check::PROC_CPUINFO, CPUINFO_DELIMITER)?; - let cpu_features = check::get_cpu_flags(&cpu_info, CPUINFO_FEATURES_TAG).map_err(|e| { - anyhow!( - "Error parsing CPU features, file {:?}, {:?}", - check::PROC_CPUINFO, - e - ) - })?; + let cpu_features = kata_sys_util::cpu::get_cpu_flags(&cpu_info, CPUINFO_FEATURES_TAG) + .map_err(|e| { + anyhow!( + "Error parsing CPU features, file {:?}, {:?}", + check::PROC_CPUINFO, + e + ) + })?; let missing_cpu_features = check::check_cpu_flags(&cpu_features, CPU_FEATURES_REQ)?; if !missing_cpu_features.is_empty() { diff --git a/src/tools/kata-ctl/src/arch/x86_64/mod.rs b/src/tools/kata-ctl/src/arch/x86_64/mod.rs index 67fd4ddc8..261baf645 100644 --- a/src/tools/kata-ctl/src/arch/x86_64/mod.rs +++ b/src/tools/kata-ctl/src/arch/x86_64/mod.rs @@ -93,15 +93,17 @@ mod arch_specific { fn check_cpu(_args: &str) -> Result<()> { info!(sl!(), "check CPU: x86_64"); - let cpu_info = check::get_single_cpu_info(check::PROC_CPUINFO, CPUINFO_DELIMITER)?; + let cpu_info = + kata_sys_util::cpu::get_single_cpu_info(check::PROC_CPUINFO, CPUINFO_DELIMITER)?; - let cpu_flags = check::get_cpu_flags(&cpu_info, CPUINFO_FLAGS_TAG).map_err(|e| { - anyhow!( - "Error parsing CPU flags, file {:?}, {:?}", - check::PROC_CPUINFO, - e - ) - })?; + let cpu_flags = + kata_sys_util::cpu::get_cpu_flags(&cpu_info, CPUINFO_FLAGS_TAG).map_err(|e| { + anyhow!( + "Error parsing CPU flags, file {:?}, {:?}", + check::PROC_CPUINFO, + e + ) + })?; // perform checks // TODO: Perform checks based on hypervisor type @@ -118,20 +120,6 @@ mod arch_specific { Ok(()) } - fn retrieve_cpu_flags() -> Result { - let cpu_info = check::get_single_cpu_info(check::PROC_CPUINFO, CPUINFO_DELIMITER)?; - - let cpu_flags = check::get_cpu_flags(&cpu_info, CPUINFO_FLAGS_TAG).map_err(|e| { - anyhow!( - "Error parsing CPU flags, file {:?}, {:?}", - check::PROC_CPUINFO, - e - ) - })?; - - Ok(cpu_flags) - } - pub fn get_cpu_details() -> Result<(String, String)> { utils::get_generic_cpu_details(check::PROC_CPUINFO) } @@ -206,7 +194,7 @@ mod arch_specific { } fn running_on_vmm() -> Result { - match check::get_single_cpu_info(check::PROC_CPUINFO, CPUINFO_DELIMITER) { + match kata_sys_util::cpu::get_single_cpu_info(check::PROC_CPUINFO, CPUINFO_DELIMITER) { Ok(cpu_info) => { // check if the 'hypervisor' flag exist in the cpu features let missing_hypervisor_flag = check::check_cpu_attribs(&cpu_info, VMM_FLAGS)?; diff --git a/src/tools/kata-ctl/src/check.rs b/src/tools/kata-ctl/src/check.rs index 78e30a93a..e410a18ba 100644 --- a/src/tools/kata-ctl/src/check.rs +++ b/src/tools/kata-ctl/src/check.rs @@ -61,57 +61,6 @@ macro_rules! sl { }; } -fn read_file_contents(file_path: &str) -> Result { - let contents = std::fs::read_to_string(file_path)?; - Ok(contents) -} - -// get_single_cpu_info returns the contents of the first cpu from -// the specified cpuinfo file by parsing based on a specified delimiter -pub fn get_single_cpu_info(cpu_info_file: &str, substring: &str) -> Result { - let contents = read_file_contents(cpu_info_file)?; - - if contents.is_empty() { - return Err(anyhow!(ERR_NO_CPUINFO)); - } - - let subcontents: Vec<&str> = contents.split(substring).collect(); - let result = subcontents - .first() - .ok_or("error splitting contents of cpuinfo") - .map_err(|e| anyhow!(e))? - .to_string(); - Ok(result) -} - -// get_cpu_flags returns a string of cpu flags from cpuinfo, passed in -// as a string -#[cfg(any(target_arch = "s390x", target_arch = "x86_64"))] -pub fn get_cpu_flags(cpu_info: &str, cpu_flags_tag: &str) -> Result { - if cpu_info.is_empty() { - return Err(anyhow!(ERR_NO_CPUINFO)); - } - - if cpu_flags_tag.is_empty() { - return Err(anyhow!("cpu flags delimiter string is empty"))?; - } - - let subcontents: Vec<&str> = cpu_info.split('\n').collect(); - for line in subcontents { - if line.starts_with(cpu_flags_tag) { - let line_data: Vec<&str> = line.split(':').collect(); - let flags = line_data - .last() - .ok_or("error splitting flags in cpuinfo") - .map_err(|e| anyhow!(e))? - .to_string(); - return Ok(flags); - } - } - - Ok("".to_string()) -} - // get_missing_strings searches for required (strings) in data and returns // a vector containing the missing strings #[cfg(any(target_arch = "s390x", target_arch = "x86_64"))] @@ -397,6 +346,7 @@ mod tests { use super::*; #[cfg(any(target_arch = "x86_64"))] use crate::types::{KernelModule, KernelParam, KernelParamType}; + use kata_sys_util::cpu::{get_cpu_flags, get_single_cpu_info}; use semver::Version; use slog::warn; use std::fs; diff --git a/src/tools/kata-ctl/src/utils.rs b/src/tools/kata-ctl/src/utils.rs index a292d3b78..3b6e4daee 100644 --- a/src/tools/kata-ctl/src/utils.rs +++ b/src/tools/kata-ctl/src/utils.rs @@ -6,7 +6,6 @@ #![allow(dead_code)] use crate::arch::arch_specific; -use crate::check::get_single_cpu_info; use anyhow::{anyhow, Context, Result}; use std::fs; @@ -106,7 +105,7 @@ pub fn get_distro_details(os_release: &str, os_release_clr: &str) -> Result<(Str #[cfg(any(target_arch = "s390x", target_arch = "x86_64", target_arch = "aarch64"))] pub fn get_generic_cpu_details(cpu_info_file: &str) -> Result<(String, String)> { - let cpu_info = get_single_cpu_info(cpu_info_file, "\n\n")?; + let cpu_info = kata_sys_util::cpu::get_single_cpu_info(cpu_info_file, "\n\n")?; let lines = cpu_info.lines(); let mut vendor = String::new(); let mut model = String::new();