summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRiley Andrews <riandrews@google.com>2014-06-27 03:42:33 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-06-27 03:42:33 +0000
commitfa6f25432b45958af870674529ce79e84986e0fa (patch)
tree3a696424ac511bc3292bf1da542555a151158e44
parent3bf00fd6a6901dfb52b0030581745f52ff98f537 (diff)
parent23340d8adac7bf68a6e47064ab7b48c1e227a077 (diff)
downloadsystem_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.c21
-rw-r--r--init/init.c15
-rw-r--r--init/init.h8
-rw-r--r--init/init_parser.c3
-rw-r--r--rootdir/init.rc3
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