Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a4211aeb authored by Chungkai Mei's avatar Chungkai Mei
Browse files

Parallel Module Loading: Add conservative mode



it help us to debug or load modules more conservatively.

Bug: 385049709
Change-Id: I41ebaf7298398652475918c2c3a3127c4bf6ac3f
Signed-off-by: default avatarChungkai Mei <chungkai@google.com>
parent 6f3c362b
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -445,6 +445,9 @@ int FirstStageMain(int argc, char** argv) {
    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;
+1 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ class Modprobe {
      NONE = 0,
      NORMAL,
      PERFORMANCE,
      CONSERVATIVE,
    };

    Modprobe(const std::vector<std::string>&, const std::string load_file = "modules.load",
+5 −1
Original line number Diff line number Diff line
@@ -548,7 +548,7 @@ bool Modprobe::LoadModulesParallel(int num_threads, int mode) {

                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 @@ bool Modprobe::LoadModulesParallel(int num_threads, int mode) {
                else
                    parallel_modules.emplace_back(cnd_last);
            }

            if (mode == LoadParallelMode::CONSERVATIVE &&
                parallel_modules.size() >= num_threads)
                break;
        }

        cv_load_module.notify_all();