diff options
author | Riley Andrews <riandrews@google.com> | 2014-06-27 03:42:33 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-06-27 03:42:33 +0000 |
commit | fa6f25432b45958af870674529ce79e84986e0fa (patch) | |
tree | 3a696424ac511bc3292bf1da542555a151158e44 | |
parent | 3bf00fd6a6901dfb52b0030581745f52ff98f537 (diff) | |
parent | 23340d8adac7bf68a6e47064ab7b48c1e227a077 (diff) | |
download | system_core-fa6f25432b45958af870674529ce79e84986e0fa.zip system_core-fa6f25432b45958af870674529ce79e84986e0fa.tar.gz system_core-fa6f25432b45958af870674529ce79e84986e0fa.tar.bz2 |
am 23340d8a: am 10f8cd1d: Merge changes Ia15b2110,I5498c725
* commit '23340d8adac7bf68a6e47064ab7b48c1e227a077':
Add ability to adjust init log level at runtime.
Improve init's debug printing.
-rw-r--r-- | init/builtins.c | 21 | ||||
-rw-r--r-- | init/init.c | 15 | ||||
-rw-r--r-- | init/init.h | 8 | ||||
-rw-r--r-- | init/init_parser.c | 3 | ||||
-rw-r--r-- | rootdir/init.rc | 3 |
5 files changed, 42 insertions, 8 deletions
diff --git a/init/builtins.c b/init/builtins.c index 0c32b2a..b32981e 100644 --- a/init/builtins.c +++ b/init/builtins.c @@ -862,11 +862,24 @@ int do_setsebool(int nargs, char **args) { } int do_loglevel(int nargs, char **args) { - if (nargs == 2) { - klog_set_level(atoi(args[1])); - return 0; + int log_level; + char log_level_str[PROP_VALUE_MAX] = ""; + if (nargs != 2) { + ERROR("loglevel: missing argument\n"); + return -EINVAL; } - return -1; + + if (expand_props(log_level_str, args[1], sizeof(log_level_str))) { + ERROR("loglevel: cannot expand '%s'\n", args[1]); + return -EINVAL; + } + log_level = atoi(log_level_str); + if (log_level < KLOG_ERROR_LEVEL || log_level > KLOG_DEBUG_LEVEL) { + ERROR("loglevel: invalid log level'%d'\n", log_level); + return -EINVAL; + } + klog_set_level(log_level); + return 0; } int do_load_persist_props(int nargs, char **args) { diff --git a/init/init.c b/init/init.c index f001071..e4ac1cf 100644 --- a/init/init.c +++ b/init/init.c @@ -528,7 +528,8 @@ static int is_last_command(struct action *act, struct command *cmd) void execute_one_command(void) { - int ret; + int ret, i; + char cmd_str[256] = ""; if (!cur_action || !cur_command || is_last_command(cur_action, cur_command)) { cur_action = action_remove_queue_head(); @@ -545,7 +546,17 @@ void execute_one_command(void) return; ret = cur_command->func(cur_command->nargs, cur_command->args); - INFO("command '%s' r=%d\n", cur_command->args[0], ret); + if (klog_get_level() >= KLOG_INFO_LEVEL) { + for (i = 0; i < cur_command->nargs; i++) { + strlcat(cmd_str, cur_command->args[i], sizeof(cmd_str)); + if (i < cur_command->nargs - 1) { + strlcat(cmd_str, " ", sizeof(cmd_str)); + } + } + INFO("command '%s' action=%s status=%d (%s:%d)\n", + cmd_str, cur_action ? cur_action->name : "", ret, cur_command->filename, + cur_command->line); + } } static int wait_for_coldboot_done_action(int nargs, char **args) diff --git a/init/init.h b/init/init.h index c241912..a7615a3 100644 --- a/init/init.h +++ b/init/init.h @@ -29,10 +29,14 @@ struct command struct listnode clist; int (*func)(int nargs, char **args); + + int line; + const char *filename; + int nargs; char *args[1]; }; - + struct action { /* node in list of all actions */ struct listnode alist; @@ -43,7 +47,7 @@ struct action { unsigned hash; const char *name; - + struct listnode commands; struct command *current; }; diff --git a/init/init_parser.c b/init/init_parser.c index 289e759..f412de7 100644 --- a/init/init_parser.c +++ b/init/init_parser.c @@ -584,6 +584,7 @@ void queue_builtin_action(int (*func)(int nargs, char **args), char *name) cmd = calloc(1, sizeof(*cmd)); cmd->func = func; cmd->args[0] = name; + cmd->nargs = 1; list_add_tail(&act->commands, &cmd->clist); list_add_tail(&action_list, &act->alist); @@ -870,6 +871,8 @@ static void parse_line_action(struct parse_state* state, int nargs, char **args) } cmd = malloc(sizeof(*cmd) + sizeof(char*) * nargs); cmd->func = kw_func(kw); + cmd->line = state->line; + cmd->filename = state->filename; cmd->nargs = nargs; memcpy(cmd->args, args, sizeof(char*) * nargs); list_add_tail(&act->commands, &cmd->clist); diff --git a/rootdir/init.rc b/rootdir/init.rc index eaee442..22790b8 100644 --- a/rootdir/init.rc +++ b/rootdir/init.rc @@ -432,6 +432,9 @@ on boot on nonencrypted class_start late_start +on property:sys.init_log_level=* + loglevel ${sys.init_log_level} + on charger class_start charger |