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

Commit 6c2ae188 authored by Terry Guan's avatar Terry Guan Committed by Automerger Merge Worker
Browse files

Merge "Add resume from hibernation in first stage init" into main am: adcba868

parents 70f98e40 adcba868
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -39,9 +39,6 @@ std::string GetFstabPath();
void ImportBootconfigFromString(const std::string& bootconfig,
                                const std::function<void(std::string, std::string)>& fn);

bool GetBootconfigFromString(const std::string& bootconfig, const std::string& key,
                             std::string* out);

void ImportKernelCmdlineFromString(const std::string& cmdline,
                                   const std::function<void(std::string, std::string)>& fn);

+3 −0
Original line number Diff line number Diff line
@@ -153,5 +153,8 @@ bool GetKernelCmdline(const std::string& key, std::string* out);
// Return the "other" slot for the given slot suffix.
std::string OtherSlotSuffix(const std::string& suffix);

bool GetBootconfigFromString(const std::string& bootconfig, const std::string& key,
                             std::string* out);

}  // namespace fs_mgr
}  // namespace android
+19 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@
#include <android-base/logging.h>
#include <android-base/stringprintf.h>
#include <android/avf_cc_flags.h>
#include <fs_mgr.h>
#include <modprobe/modprobe.h>
#include <private/android_filesystem_config.h>

@@ -303,6 +304,22 @@ static BootMode GetBootMode(const std::string& cmdline, const std::string& bootc
    return BootMode::NORMAL_MODE;
}

static void MaybeResumeFromHibernation(const std::string& bootconfig) {
    std::string hibernationResumeDevice;
    android::fs_mgr::GetBootconfigFromString(bootconfig, "androidboot.hibernation_resume_device",
                                             &hibernationResumeDevice);
    if (!hibernationResumeDevice.empty()) {
        android::base::unique_fd fd(open("/sys/power/resume", O_RDWR | O_CLOEXEC));
        if (fd >= 0) {
            if (!android::base::WriteStringToFd(hibernationResumeDevice, fd)) {
                PLOG(ERROR) << "Failed to write to /sys/power/resume";
            }
        } else {
            PLOG(ERROR) << "Failed to open /sys/power/resume";
        }
    }
}

static std::unique_ptr<FirstStageMount> CreateFirstStageMount(const std::string& cmdline) {
    auto ret = FirstStageMount::Create(cmdline);
    if (ret.ok()) {
@@ -442,6 +459,8 @@ int FirstStageMain(int argc, char** argv) {
                  << module_elapse_time.count() << " ms";
    }

    MaybeResumeFromHibernation(bootconfig);

    std::unique_ptr<FirstStageMount> fsm;

    bool created_devices = false;