Merge changes I41ebaf72,I638bc2d7 into main am: 900221fe33
Original change: https://android-review.googlesource.com/c/platform/system/core/+/3556468
Change-Id: If6beb34d287922c7bc827856356ca6f0e377351f
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/init/first_stage_init.cpp b/init/first_stage_init.cpp
index 68c0f52..1405fff 100644
--- a/init/first_stage_init.cpp
+++ b/init/first_stage_init.cpp
@@ -442,6 +442,12 @@
if (bootconfig.find("androidboot.load_modules_parallel = \"true\"")
!= std::string::npos)
want_parallel_mode = Modprobe::LoadParallelMode::NORMAL;
+ else if (bootconfig.find("androidboot.load_modules_parallel_mode = \"performance\"")
+ != std::string::npos)
+ want_parallel_mode = Modprobe::LoadParallelMode::PERFORMANCE;
+ else if (bootconfig.find("androidboot.load_modules_parallel = \"conservative\"")
+ != std::string::npos)
+ want_parallel_mode = Modprobe::LoadParallelMode::CONSERVATIVE;
boot_clock::time_point module_start_time = boot_clock::now();
int module_count = 0;
diff --git a/libmodprobe/include/modprobe/modprobe.h b/libmodprobe/include/modprobe/modprobe.h
index de9dcd2..55931b7 100644
--- a/libmodprobe/include/modprobe/modprobe.h
+++ b/libmodprobe/include/modprobe/modprobe.h
@@ -31,6 +31,8 @@
enum LoadParallelMode {
NONE = 0,
NORMAL,
+ PERFORMANCE,
+ CONSERVATIVE,
};
Modprobe(const std::vector<std::string>&, const std::string load_file = "modules.load",
diff --git a/libmodprobe/libmodprobe.cpp b/libmodprobe/libmodprobe.cpp
index 1b524e9..c43ad96 100644
--- a/libmodprobe/libmodprobe.cpp
+++ b/libmodprobe/libmodprobe.cpp
@@ -546,7 +546,9 @@
if (sequential_modules.empty() && parallel_modules.empty()) {
sleeping_threads++;
- if (mode == LoadParallelMode::NORMAL && sleeping_threads == num_threads)
+ if (mode == LoadParallelMode::PERFORMANCE)
+ cv_update_module.notify_one();
+ else if (sleeping_threads == num_threads)
cv_update_module.notify_one();
cv_load_module.wait(lock, [&](){
@@ -601,6 +603,10 @@
else
parallel_modules.emplace_back(cnd_last);
}
+
+ if (mode == LoadParallelMode::CONSERVATIVE &&
+ parallel_modules.size() >= num_threads)
+ break;
}
cv_load_module.notify_all();