llkd: default enabled for userdebug

If LLK_ENABLE_DEFAULT is false, then check "ro.llk.enable" for "eng",
also the default value if not set, and then check if userdebug build
to establish a default of true for enable.  Same for
ro.khungtask.enable.

Test: llkd_unit_test report eng status on "userdebug" or "user" builds
Bug: 33808187
Bug: 72838192
Change-Id: I2adb23c7629dccaa2856c50bccbf4e363703c82c
This commit is contained in:
Mark Salyzyn 2018-03-26 08:23:00 -07:00
parent f089e1403b
commit d035dbbecf
5 changed files with 67 additions and 10 deletions

View file

@ -66,9 +66,15 @@ default false, if true do not sysrq t (dump all threads).
#### ro.llk.enable
default false, allow live-lock daemon to be enabled.
#### llk.enable
default ro.llk.enable, and evaluated for eng.
#### ro.khungtask.enable
default false, allow [khungtask] daemon to be enabled.
#### khungtask.enable
default ro.khungtask.enable and evaluated for eng.
#### ro.llk.mlockall
default false, enable call to mlockall().

View file

@ -30,9 +30,11 @@ bool llkInit(const char* threadname); /* threadname NULL, not spawned */
unsigned llkCheckMilliseconds(void);
/* clang-format off */
#define LLK_ENABLE_PROPERTY "ro.llk.enable"
#define LLK_ENABLE_DEFAULT false
#define KHT_ENABLE_PROPERTY "ro.khungtask.enable"
#define LLK_ENABLE_WRITEABLE_PROPERTY "llk.enable"
#define LLK_ENABLE_PROPERTY "ro." LLK_ENABLE_WRITEABLE_PROPERTY
#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_MLOCKALL_PROPERTY "ro.llk.mlockall"
#define LLK_MLOCKALL_DEFAULT true
#define LLK_TIMEOUT_MS_PROPERTY "ro.llk.timeout_ms"

View file

@ -1032,6 +1032,10 @@ unsigned llkCheckMilliseconds() {
bool llkInit(const char* threadname) {
llkLowRam = android::base::GetBoolProperty("ro.config.low_ram", false);
if (!LLK_ENABLE_DEFAULT && android::base::GetBoolProperty("ro.debuggable", false)) {
llkEnable = android::base::GetProperty(LLK_ENABLE_PROPERTY, "eng") == "eng";
khtEnable = android::base::GetProperty(KHT_ENABLE_PROPERTY, "eng") == "eng";
}
llkEnable = android::base::GetBoolProperty(LLK_ENABLE_PROPERTY, llkEnable);
if (llkEnable && !llkTopDirectory.reset(procdir)) {
// Most likely reason we could be here is llkd was started

View file

@ -1,11 +1,41 @@
# eng default for ro.llk.enable and ro.khungtask.enable
on property:ro.debuggable=*
setprop llk.enable ${ro.llk.enable:-0}
setprop khungtask.enable ${ro.khungtask.enable:-0}
on property:ro.debuggable=1
setprop llk.enable ${ro.llk.enable:-1}
setprop khungtask.enable ${ro.khungtask.enable:-1}
on property:ro.llk.enable=eng
setprop llk.enable ${ro.debuggable:-0}
on property:ro.khungtask.enable=eng
setprop khungtask.enable ${ro.debuggable:-0}
on property:llk.enable=1
setprop llk.enable true
on property:llk.enable=0
setprop llk.enable false
on property:khungtask.enable=1
setprop khungtask.enable true
on property:khungtask.enable=0
setprop khungtask.enable false
# Configure [khungtaskd]
on property:ro.khungtask.enable=true
on property:khungtask.enable=true
write /proc/sys/kernel/hung_task_timeout_secs ${ro.khungtask.timeout:-720}
write /proc/sys/kernel/hung_task_warnings 65535
write /proc/sys/kernel/hung_task_check_count 65535
write /proc/sys/kernel/hung_task_panic 1
on property:ro.llk.enable=true
on property:khungtask.enable=false
write /proc/sys/kernel/hung_task_panic 0
on property:llk.enable=true
start llkd
service llkd /system/bin/llkd

View file

@ -64,10 +64,16 @@ void execute(const char* command) {
}
seconds llkdSleepPeriod(char state) {
auto default_enable = android::base::GetBoolProperty(LLK_ENABLE_PROPERTY, LLK_ENABLE_DEFAULT);
if (android::base::GetProperty(LLK_ENABLE_PROPERTY, "nothing") == "nothing") {
GTEST_LOG_INFO << LLK_ENABLE_PROPERTY " defaults to " << (default_enable ? "true" : "false")
<< "\n";
auto default_eng = android::base::GetProperty(LLK_ENABLE_PROPERTY, "eng") == "eng";
auto default_enable = LLK_ENABLE_DEFAULT;
if (!LLK_ENABLE_DEFAULT && default_eng &&
android::base::GetBoolProperty("ro.debuggable", false)) {
default_enable = true;
}
default_enable = android::base::GetBoolProperty(LLK_ENABLE_PROPERTY, default_enable);
if (default_eng) {
GTEST_LOG_INFO << LLK_ENABLE_PROPERTY " defaults to \"eng\" thus "
<< (default_enable ? "true" : "false") << "\n";
}
// Hail Mary hope is unconfigured.
if ((GetUintProperty(LLK_TIMEOUT_MS_PROPERTY, LLK_TIMEOUT_MS_DEFAULT) !=
@ -78,6 +84,8 @@ seconds llkdSleepPeriod(char state) {
execute("stop llkd");
rest();
std::string setprop("setprop ");
execute((setprop + LLK_ENABLE_WRITEABLE_PROPERTY + " false").c_str());
rest();
execute((setprop + LLK_TIMEOUT_MS_PROPERTY + " 120000").c_str());
rest();
execute((setprop + KHT_TIMEOUT_PROPERTY + " 130").c_str());
@ -86,8 +94,15 @@ seconds llkdSleepPeriod(char state) {
rest();
execute((setprop + LLK_ENABLE_PROPERTY + " true").c_str());
rest();
execute((setprop + LLK_ENABLE_WRITEABLE_PROPERTY + " true").c_str());
rest();
}
default_enable = android::base::GetBoolProperty(LLK_ENABLE_PROPERTY, false);
default_enable = LLK_ENABLE_DEFAULT;
if (!LLK_ENABLE_DEFAULT && (android::base::GetProperty(LLK_ENABLE_PROPERTY, "eng") == "eng") &&
android::base::GetBoolProperty("ro.debuggable", false)) {
default_enable = true;
}
default_enable = android::base::GetBoolProperty(LLK_ENABLE_PROPERTY, default_enable);
if (default_enable) {
execute("start llkd");
rest();