bootstat: shutdown reports reboot
Some devices report the following canonical boot reason for all shutdown operations: reboot,kernel_power_off_charging__reboot_system because shutdown switches to a charging kernel, and reboots into the system when the user presses the power button. Thus last kernel messages arrives as: <0>.(0)[53:pmic_thread]reboot: Restarting system with command \ 'kernel power off charging reboot system' -> "shutdown" (w/o last boot reason) -> "shutdown,<subreason>" (w/last boot reason) The reboot reason from that charging instance propagates as a fortified boot reason blocking interpretation of the last boot reason that manages shutdown canonical boot reason determination. The fix is to change reboot,kernel_power_off_charging__reboot_system to shutdown, so that it is viewed as a blunt reason that can be overridden by last boot reason. We added the above boot reason to kBootReasonMap because the Bit Error Handler can use it to reconstruct if there is any damage to the last kernel messages content. The sad thing is that the enum will never propagate as we are filtering it out and reporting "shutdown" instead. Of course, we are now covered for a can not happen. Test: boot_reason_test.sh Bug: 74595769 Bug: 63736262 Change-Id: I28987f0871af7d967cc4bbbffed43bd42349acdd
This commit is contained in:
parent
7c4d393c24
commit
1519925149
|
@ -201,7 +201,7 @@ const std::map<std::string, int32_t> kBootReasonMap = {
|
|||
{"cold", 56},
|
||||
{"hard", 57},
|
||||
{"warm", 58},
|
||||
// {"recovery", 59}, // Duplicate of enum 3 above. Immediate reuse possible.
|
||||
{"reboot,kernel_power_off_charging__reboot_system", 59}, // Can not happen
|
||||
{"thermal-shutdown", 60},
|
||||
{"shutdown,thermal", 61},
|
||||
{"shutdown,battery", 62},
|
||||
|
@ -850,6 +850,10 @@ std::string BootReasonStrToReason(const std::string& boot_reason) {
|
|||
ret = "reboot," + subReason; // legitimize unknown reasons
|
||||
}
|
||||
}
|
||||
// Some bootloaders shutdown results record in last kernel message.
|
||||
if (!strcmp(ret.c_str(), "reboot,kernel_power_off_charging__reboot_system")) {
|
||||
ret = "shutdown";
|
||||
}
|
||||
}
|
||||
|
||||
// Check for kernel panics, allowed to override reboot command.
|
||||
|
|
Loading…
Reference in New Issue