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

Commit 372dd0d4 authored by Sayanna Chandula's avatar Sayanna Chandula Committed by Automerger Merge Worker
Browse files

Merge "init: Support reboot reason with thermal warmreset" am: 1d0fec78 am: fdd60d65

parents ce0e22f0 fdd60d65
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -608,7 +608,7 @@ static void DoReboot(unsigned int cmd, const std::string& reason, const std::str
    if (sem_init(&reboot_semaphore, false, 0) == -1) {
        // These should never fail, but if they do, skip the graceful reboot and reboot immediately.
        LOG(ERROR) << "sem_init() fail and RebootSystem() return!";
        RebootSystem(cmd, reboot_target);
        RebootSystem(cmd, reboot_target, reason);
    }

    // Start a thread to monitor init shutdown process
@@ -636,7 +636,7 @@ static void DoReboot(unsigned int cmd, const std::string& reason, const std::str
    // worry about unmounting it.
    if (!IsDataMounted("*")) {
        sync();
        RebootSystem(cmd, reboot_target);
        RebootSystem(cmd, reboot_target, reason);
        abort();
    }

@@ -769,7 +769,7 @@ static void DoReboot(unsigned int cmd, const std::string& reason, const std::str
            LOG(INFO) << "Shutdown /data";
        }
    }
    RebootSystem(cmd, reboot_target);
    RebootSystem(cmd, reboot_target, reason);
    abort();
}

+6 −3
Original line number Diff line number Diff line
@@ -106,7 +106,8 @@ bool IsRebootCapable() {
    return value == CAP_SET;
}

void __attribute__((noreturn)) RebootSystem(unsigned int cmd, const std::string& rebootTarget) {
void __attribute__((noreturn))
RebootSystem(unsigned int cmd, const std::string& rebootTarget, const std::string& reboot_reason) {
    LOG(INFO) << "Reboot ending, jumping to kernel";

    if (!IsRebootCapable()) {
@@ -127,10 +128,12 @@ void __attribute__((noreturn)) RebootSystem(unsigned int cmd, const std::string&

        case ANDROID_RB_THERMOFF:
            if (android::base::GetBoolProperty("ro.thermal_warmreset", false)) {
                std::string reason = "shutdown,thermal";
                if (!reboot_reason.empty()) reason = reboot_reason;

                LOG(INFO) << "Try to trigger a warm reset for thermal shutdown";
                static constexpr const char kThermalShutdownTarget[] = "shutdown,thermal";
                syscall(__NR_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,
                        LINUX_REBOOT_CMD_RESTART2, kThermalShutdownTarget);
                        LINUX_REBOOT_CMD_RESTART2, reason.c_str());
            } else {
                reboot(RB_POWER_OFF);
            }
+2 −1
Original line number Diff line number Diff line
@@ -29,7 +29,8 @@ void SetFatalRebootTarget(const std::optional<std::string>& reboot_target = std:
// so if any of the attempts to determine this fail, it will still return true.
bool IsRebootCapable();
// This is a wrapper around the actual reboot calls.
void __attribute__((noreturn)) RebootSystem(unsigned int cmd, const std::string& reboot_target);
void __attribute__((noreturn)) RebootSystem(unsigned int cmd, const std::string& reboot_target,
                                            const std::string& reboot_reason = "");
void __attribute__((noreturn)) InitFatalReboot(int signal_number);
void InstallRebootSignalHandlers();