diff options
author | Mark Salyzyn <salyzyn@google.com> | 2018-10-31 10:02:08 -0700 |
---|---|---|
committer | Mark Salyzyn <salyzyn@google.com> | 2018-11-01 08:13:44 -0700 |
commit | bd7c856507cd10221cadb8757b865cf8ec974a23 (patch) | |
tree | 7a5f62b9d15acf1156332f80d7161ce00544ba88 /llkd | |
parent | bb1256a728bf0c4febd7ab87c71e19c2056cef5a (diff) | |
download | system_core-bd7c856507cd10221cadb8757b865cf8ec974a23.tar.gz system_core-bd7c856507cd10221cadb8757b865cf8ec974a23.tar.bz2 system_core-bd7c856507cd10221cadb8757b865cf8ec974a23.zip |
llkd: add ro.llk.sysrq_t
Allow sysrq stack trace dump to be disabled by ro.llk.sysrq_t.
Default is true if not on a limited memory device ro.config.low_ram.
Value is true if the property value is "eng" and on a userdebug or
eng device, signaled by the ro.debuggable set to 1.
Test: compile
Bug: 118712403
Change-Id: I02e999dc640125b6a08dca10077716e5d006da49
Diffstat (limited to 'llkd')
-rw-r--r-- | llkd/README.md | 9 | ||||
-rw-r--r-- | llkd/include/llkd.h | 2 | ||||
-rw-r--r-- | llkd/libllkd.cpp | 19 |
3 files changed, 25 insertions, 5 deletions
diff --git a/llkd/README.md b/llkd/README.md index b2c5f1bb3..3da7a2f36 100644 --- a/llkd/README.md +++ b/llkd/README.md @@ -89,7 +89,14 @@ Android Properties Android Properties llkd respond to (*prop*_ms parms are in milliseconds): #### ro.config.low_ram -default false, if true do not sysrq t (dump all threads). +device is configured with limited memory. + +#### ro.debuggable +device is configured for userdebug or eng build. + +#### ro.llk.sysrq_t +default not ro.config.low_ram, or ro.debuggable if property is "eng". +if true do sysrq t (dump all threads). #### ro.llk.enable default false, allow live-lock daemon to be enabled. diff --git a/llkd/include/llkd.h b/llkd/include/llkd.h index cb56f340d..b16b1d8e3 100644 --- a/llkd/include/llkd.h +++ b/llkd/include/llkd.h @@ -35,6 +35,8 @@ unsigned llkCheckMilliseconds(void); #define LLK_ENABLE_DEFAULT false /* "eng" and userdebug true */ #define KHT_ENABLE_WRITEABLE_PROPERTY "khungtask.enable" #define KHT_ENABLE_PROPERTY "ro." KHT_ENABLE_WRITEABLE_PROPERTY +#define LLK_ENABLE_SYSRQ_T_PROPERTY "ro.llk.sysrq_t" +#define LLK_ENABLE_SYSRQ_T_DEFAULT true #define LLK_MLOCKALL_PROPERTY "ro.llk.mlockall" #define LLK_MLOCKALL_DEFAULT true #define LLK_KILLTEST_PROPERTY "ro.llk.killtest" diff --git a/llkd/libllkd.cpp b/llkd/libllkd.cpp index d92c0cd57..eec3f90a9 100644 --- a/llkd/libllkd.cpp +++ b/llkd/libllkd.cpp @@ -85,6 +85,7 @@ milliseconds llkStateTimeoutMs[llkNumStates]; // timeout override for eac milliseconds llkCheckMs; // checking interval to inspect any // persistent live-locked states bool llkLowRam; // ro.config.low_ram +bool llkEnableSysrqT = LLK_ENABLE_SYSRQ_T_DEFAULT; // sysrq stack trace dump bool khtEnable = LLK_ENABLE_DEFAULT; // [khungtaskd] panic // [khungtaskd] should have a timeout beyond the granularity of llkTimeoutMs. // Provides a wide angle of margin b/c khtTimeout is also its granularity. @@ -525,7 +526,7 @@ void llkPanicKernel(bool dump, pid_t tid, const char* state) { android::base::WriteStringToFd("d", sysrqTriggerFd); // This can trigger hardware watchdog, that is somewhat _ok_. // But useless if pstore configured for <256KB, low ram devices ... - if (!llkLowRam) { + if (llkEnableSysrqT) { android::base::WriteStringToFd("t", sysrqTriggerFd); } ::usleep(200000); // let everything settle @@ -799,6 +800,7 @@ void llkCheckSchedUpdate(proc* procp, const std::string& piddir) { void llkLogConfig(void) { LOG(INFO) << "ro.config.low_ram=" << llkFormat(llkLowRam) << "\n" + << LLK_ENABLE_SYSRQ_T_PROPERTY "=" << llkFormat(llkEnableSysrqT) << "\n" << LLK_ENABLE_PROPERTY "=" << llkFormat(llkEnable) << "\n" << KHT_ENABLE_PROPERTY "=" << llkFormat(khtEnable) << "\n" << LLK_MLOCKALL_PROPERTY "=" << llkFormat(llkMlockall) << "\n" @@ -1150,13 +1152,22 @@ unsigned llkCheckMilliseconds() { return duration_cast<milliseconds>(llkCheck()).count(); } +bool llkCheckEng(const std::string& property) { + return android::base::GetProperty(property, "eng") == "eng"; +} + bool llkInit(const char* threadname) { auto debuggable = android::base::GetBoolProperty("ro.debuggable", false); llkLowRam = android::base::GetBoolProperty("ro.config.low_ram", false); - if (!LLK_ENABLE_DEFAULT && debuggable) { - llkEnable = android::base::GetProperty(LLK_ENABLE_PROPERTY, "eng") == "eng"; - khtEnable = android::base::GetProperty(KHT_ENABLE_PROPERTY, "eng") == "eng"; + llkEnableSysrqT &= !llkLowRam; + if (debuggable) { + llkEnableSysrqT |= llkCheckEng(LLK_ENABLE_SYSRQ_T_PROPERTY); + if (!LLK_ENABLE_DEFAULT) { // NB: default is currently true ... + llkEnable |= llkCheckEng(LLK_ENABLE_PROPERTY); + khtEnable |= llkCheckEng(KHT_ENABLE_PROPERTY); + } } + llkEnableSysrqT = android::base::GetBoolProperty(LLK_ENABLE_SYSRQ_T_PROPERTY, llkEnableSysrqT); llkEnable = android::base::GetBoolProperty(LLK_ENABLE_PROPERTY, llkEnable); if (llkEnable && !llkTopDirectory.reset(procdir)) { // Most likely reason we could be here is llkd was started |