| Mark Salyzyn | f089e14 | 2018-02-20 10:47:40 -0800 | [diff] [blame] | 1 | /* | 
|  | 2 | * Copyright (C) 2018 The Android Open Source Project | 
|  | 3 | * | 
|  | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | 5 | * you may not use this file except in compliance with the License. | 
|  | 6 | * You may obtain a copy of the License at | 
|  | 7 | * | 
|  | 8 | *      http://www.apache.org/licenses/LICENSE-2.0 | 
|  | 9 | * | 
|  | 10 | * Unless required by applicable law or agreed to in writing, software | 
|  | 11 | * distributed under the License is distributed on an "AS IS" BASIS, | 
|  | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | 13 | * See the License for the specific language governing permissions and | 
|  | 14 | * limitations under the License. | 
|  | 15 | */ | 
|  | 16 |  | 
|  | 17 | #ifndef _LLKD_H_ | 
|  | 18 | #define _LLKD_H_ | 
|  | 19 |  | 
|  | 20 | #ifndef LOG_TAG | 
|  | 21 | #define LOG_TAG "livelock" | 
|  | 22 | #endif | 
|  | 23 |  | 
|  | 24 | #include <stdbool.h> | 
|  | 25 | #include <sys/cdefs.h> | 
|  | 26 |  | 
|  | 27 | __BEGIN_DECLS | 
|  | 28 |  | 
|  | 29 | bool llkInit(const char* threadname); /* threadname NULL, not spawned */ | 
|  | 30 | unsigned llkCheckMilliseconds(void); | 
|  | 31 |  | 
|  | 32 | /* clang-format off */ | 
| Mark Salyzyn | d035dbb | 2018-03-26 08:23:00 -0700 | [diff] [blame] | 33 | #define LLK_ENABLE_WRITEABLE_PROPERTY  "llk.enable" | 
|  | 34 | #define LLK_ENABLE_PROPERTY            "ro." LLK_ENABLE_WRITEABLE_PROPERTY | 
|  | 35 | #define LLK_ENABLE_DEFAULT             false /* "eng" and userdebug true */ | 
|  | 36 | #define KHT_ENABLE_WRITEABLE_PROPERTY  "khungtask.enable" | 
|  | 37 | #define KHT_ENABLE_PROPERTY            "ro." KHT_ENABLE_WRITEABLE_PROPERTY | 
| Mark Salyzyn | bd7c856 | 2018-10-31 10:02:08 -0700 | [diff] [blame] | 38 | #define LLK_ENABLE_SYSRQ_T_PROPERTY    "ro.llk.sysrq_t" | 
|  | 39 | #define LLK_ENABLE_SYSRQ_T_DEFAULT     true | 
| Mark Salyzyn | f089e14 | 2018-02-20 10:47:40 -0800 | [diff] [blame] | 40 | #define LLK_MLOCKALL_PROPERTY          "ro.llk.mlockall" | 
|  | 41 | #define LLK_MLOCKALL_DEFAULT           true | 
| Mark Salyzyn | afd66f2 | 2018-03-19 15:16:29 -0700 | [diff] [blame] | 42 | #define LLK_KILLTEST_PROPERTY          "ro.llk.killtest" | 
|  | 43 | #define LLK_KILLTEST_DEFAULT           true | 
| Mark Salyzyn | f089e14 | 2018-02-20 10:47:40 -0800 | [diff] [blame] | 44 | #define LLK_TIMEOUT_MS_PROPERTY        "ro.llk.timeout_ms" | 
|  | 45 | #define KHT_TIMEOUT_PROPERTY           "ro.khungtask.timeout" | 
|  | 46 | #define LLK_D_TIMEOUT_MS_PROPERTY      "ro.llk.D.timeout_ms" | 
|  | 47 | #define LLK_Z_TIMEOUT_MS_PROPERTY      "ro.llk.Z.timeout_ms" | 
| Mark Salyzyn | 96505fa | 2018-08-07 08:13:13 -0700 | [diff] [blame] | 48 | #define LLK_STACK_TIMEOUT_MS_PROPERTY  "ro.llk.stack.timeout_ms" | 
| Mark Salyzyn | f089e14 | 2018-02-20 10:47:40 -0800 | [diff] [blame] | 49 | #define LLK_CHECK_MS_PROPERTY          "ro.llk.check_ms" | 
|  | 50 | /* LLK_CHECK_MS_DEFAULT = actual timeout_ms / LLK_CHECKS_PER_TIMEOUT_DEFAULT */ | 
|  | 51 | #define LLK_CHECKS_PER_TIMEOUT_DEFAULT 5 | 
| Mark Salyzyn | 96505fa | 2018-08-07 08:13:13 -0700 | [diff] [blame] | 52 | #define LLK_CHECK_STACK_PROPERTY       "ro.llk.stack" | 
| Mark Salyzyn | b658ffa | 2018-12-12 09:19:49 -0800 | [diff] [blame] | 53 | #define LLK_CHECK_STACK_DEFAULT        \ | 
|  | 54 | "cma_alloc,__get_user_pages,bit_wait_io,wait_on_page_bit_killable" | 
| Mark Salyzyn | f089e14 | 2018-02-20 10:47:40 -0800 | [diff] [blame] | 55 | #define LLK_BLACKLIST_PROCESS_PROPERTY "ro.llk.blacklist.process" | 
|  | 56 | #define LLK_BLACKLIST_PROCESS_DEFAULT  \ | 
| Mark Salyzyn | e81ede8 | 2018-10-22 15:52:32 -0700 | [diff] [blame] | 57 | "0,1,2,init,[kthreadd],[khungtaskd],lmkd,llkd,watchdogd,[watchdogd],[watchdogd/0]" | 
| Mark Salyzyn | f089e14 | 2018-02-20 10:47:40 -0800 | [diff] [blame] | 58 | #define LLK_BLACKLIST_PARENT_PROPERTY  "ro.llk.blacklist.parent" | 
| Mark Salyzyn | da2aeb0 | 2019-01-02 08:27:22 -0800 | [diff] [blame] | 59 | #define LLK_BLACKLIST_PARENT_DEFAULT   "0,2,[kthreadd],adbd&[setsid]" | 
| Mark Salyzyn | f089e14 | 2018-02-20 10:47:40 -0800 | [diff] [blame] | 60 | #define LLK_BLACKLIST_UID_PROPERTY     "ro.llk.blacklist.uid" | 
|  | 61 | #define LLK_BLACKLIST_UID_DEFAULT      "" | 
| Mark Salyzyn | 96505fa | 2018-08-07 08:13:13 -0700 | [diff] [blame] | 62 | #define LLK_BLACKLIST_STACK_PROPERTY   "ro.llk.blacklist.process.stack" | 
| Mark Salyzyn | e81ede8 | 2018-10-22 15:52:32 -0700 | [diff] [blame] | 63 | #define LLK_BLACKLIST_STACK_DEFAULT    "init,lmkd.llkd,llkd,keystore,ueventd,apexd" | 
| Mark Salyzyn | f089e14 | 2018-02-20 10:47:40 -0800 | [diff] [blame] | 64 | /* clang-format on */ | 
|  | 65 |  | 
|  | 66 | __END_DECLS | 
|  | 67 |  | 
|  | 68 | #ifdef __cplusplus | 
|  | 69 | extern "C++" { /* In case this included wrapped with __BEGIN_DECLS */ | 
|  | 70 |  | 
|  | 71 | #include <chrono> | 
|  | 72 |  | 
|  | 73 | __BEGIN_DECLS | 
|  | 74 | /* C++ code allowed to not specify threadname argument for this C linkage */ | 
|  | 75 | bool llkInit(const char* threadname = nullptr); | 
|  | 76 | __END_DECLS | 
|  | 77 | std::chrono::milliseconds llkCheck(bool checkRunning = false); | 
|  | 78 |  | 
|  | 79 | /* clang-format off */ | 
|  | 80 | #define LLK_TIMEOUT_MS_DEFAULT  std::chrono::duration_cast<milliseconds>(std::chrono::minutes(10)) | 
|  | 81 | #define LLK_TIMEOUT_MS_MINIMUM  std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::seconds(10)) | 
|  | 82 | #define LLK_CHECK_MS_MINIMUM    std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::seconds(1)) | 
|  | 83 | /* clang-format on */ | 
|  | 84 |  | 
|  | 85 | } /* extern "C++" */ | 
|  | 86 | #endif /* __cplusplus */ | 
|  | 87 |  | 
|  | 88 | #endif /* _LLKD_H_ */ |