diff --git a/lisa/target.py b/lisa/target.py index 2bec890511c1ad371e99854b03fc287e77cb8c43..b32c69b4e800096aefa6289b546f331cf2b7e97a 100644 --- a/lisa/target.py +++ b/lisa/target.py @@ -41,6 +41,7 @@ import devlib from devlib.exception import TargetStableError from devlib.utils.misc import which from devlib.platform.gem5 import Gem5SimulationPlatform +from devlib.utils.asyn import asyncf, asynccontextmanager from lisa.utils import Loggable, HideExekallID, resolve_dotted_name, get_subclasses, import_all_submodules, LISA_HOME, RESULT_DIR, LATEST_LINK, setup_logging, ArtifactPath, nullcontext, ExekallTaggable, memoized, destroyablecontextmanager, ContextManagerExit, update_params_from from lisa._assets import ASSETS_PATH @@ -1052,16 +1053,21 @@ class Target(Loggable, HideExekallID, ExekallTaggable, Configurable): logger.warning('Could not disable idle states, cpuidle devlib module is not loaded') cm = nullcontext else: - @destroyablecontextmanager - def cm(): + @asynccontextmanager + async def cm(): + cpus = tuple(range(self.plat_info['cpus-count'])) try: - for cpu in range(self.plat_info['cpus-count']): - cpuidle.disable_all(cpu) + await self.async_manager.map_concurrently( + cpuidle.disable_all.asyn, + cpus, + ) yield except ContextManagerExit: logger.info('Re-enabling idle states for all domains') - for cpu in range(self.plat_info['cpus-count']): - cpuidle.enable_all(cpu) + await self.async_manager.map_concurrently( + cpuidle.enable_all.asyn, + cpus, + ) return cm()