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

Commit adcba868 authored by Terry Guan's avatar Terry Guan Committed by Gerrit Code Review
Browse files

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

parents e0ec54b4 d96c6b8e
Loading
Loading
Loading
Loading
+0 −3
Original line number Original line Diff line number Diff line
@@ -39,9 +39,6 @@ std::string GetFstabPath();
void ImportBootconfigFromString(const std::string& bootconfig,
void ImportBootconfigFromString(const std::string& bootconfig,
                                const std::function<void(std::string, std::string)>& fn);
                                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,
void ImportKernelCmdlineFromString(const std::string& cmdline,
                                   const std::function<void(std::string, std::string)>& fn);
                                   const std::function<void(std::string, std::string)>& fn);


+3 −0
Original line number Original line 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.
// Return the "other" slot for the given slot suffix.
std::string OtherSlotSuffix(const std::string& 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 fs_mgr
}  // namespace android
}  // namespace android
+19 −0
Original line number Original line Diff line number Diff line
@@ -38,6 +38,7 @@
#include <android-base/logging.h>
#include <android-base/logging.h>
#include <android-base/stringprintf.h>
#include <android-base/stringprintf.h>
#include <android/avf_cc_flags.h>
#include <android/avf_cc_flags.h>
#include <fs_mgr.h>
#include <modprobe/modprobe.h>
#include <modprobe/modprobe.h>
#include <private/android_filesystem_config.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;
    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) {
static std::unique_ptr<FirstStageMount> CreateFirstStageMount(const std::string& cmdline) {
    auto ret = FirstStageMount::Create(cmdline);
    auto ret = FirstStageMount::Create(cmdline);
    if (ret.ok()) {
    if (ret.ok()) {
@@ -442,6 +459,8 @@ int FirstStageMain(int argc, char** argv) {
                  << module_elapse_time.count() << " ms";
                  << module_elapse_time.count() << " ms";
    }
    }


    MaybeResumeFromHibernation(bootconfig);

    std::unique_ptr<FirstStageMount> fsm;
    std::unique_ptr<FirstStageMount> fsm;


    bool created_devices = false;
    bool created_devices = false;