Parallel Module Loading: Add conservative mode
it help us to debug or load modules more conservatively.
Bug: 385049709
Change-Id: I41ebaf7298398652475918c2c3a3127c4bf6ac3f
Signed-off-by: Chungkai Mei <chungkai@google.com>
diff --git a/init/first_stage_init.cpp b/init/first_stage_init.cpp
index 749266e..cc5f658 100644
--- a/init/first_stage_init.cpp
+++ b/init/first_stage_init.cpp
@@ -445,6 +445,9 @@
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 2d5145c..55931b7 100644
--- a/libmodprobe/include/modprobe/modprobe.h
+++ b/libmodprobe/include/modprobe/modprobe.h
@@ -32,6 +32,7 @@
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 5f3419d..c43ad96 100644
--- a/libmodprobe/libmodprobe.cpp
+++ b/libmodprobe/libmodprobe.cpp
@@ -548,7 +548,7 @@
if (mode == LoadParallelMode::PERFORMANCE)
cv_update_module.notify_one();
- else if (mode == LoadParallelMode::NORMAL && sleeping_threads == num_threads)
+ else if (sleeping_threads == num_threads)
cv_update_module.notify_one();
cv_load_module.wait(lock, [&](){
@@ -603,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();