diff options
Diffstat (limited to 'init')
-rw-r--r-- | init/Android.mk | 4 | ||||
-rw-r--r-- | init/bootchart.c | 37 | ||||
-rw-r--r-- | init/bootchart.h | 1 | ||||
-rw-r--r-- | init/devices.c | 4 | ||||
-rw-r--r-- | init/init.c | 29 | ||||
-rw-r--r-- | init/readme.txt | 17 | ||||
-rw-r--r-- | init/util.c | 4 |
7 files changed, 56 insertions, 40 deletions
diff --git a/init/Android.mk b/init/Android.mk index 489dc93..72c2272 100644 --- a/init/Android.mk +++ b/init/Android.mk @@ -33,6 +33,10 @@ endif LOCAL_MODULE:= init +# Currently, init doesn't start when built with clang. +# Needs further investigation. +LOCAL_CLANG := false + LOCAL_FORCE_STATIC_EXECUTABLE := true LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT) LOCAL_UNSTRIPPED_PATH := $(TARGET_ROOT_OUT_UNSTRIPPED) diff --git a/init/bootchart.c b/init/bootchart.c index f72fcaa..a514261 100644 --- a/init/bootchart.c +++ b/init/bootchart.c @@ -119,6 +119,18 @@ file_buff_done( FileBuff buff ) } } +static long long +get_uptime_jiffies() +{ + char buff[64]; + long long jiffies = 0; + + if (proc_read("/proc/uptime", buff, sizeof(buff)) > 0) + jiffies = 100LL*strtod(buff,NULL); + + return jiffies; +} + static void log_header(void) { @@ -185,22 +197,11 @@ static void do_log_uptime(FileBuff log) { char buff[65]; - int fd, ret, len; + int len; - fd = open("/proc/uptime",O_RDONLY); - if (fd >= 0) { - int ret; - ret = unix_read(fd, buff, 64); - close(fd); - buff[64] = 0; - if (ret >= 0) { - long long jiffies = 100LL*strtod(buff,NULL); - int len; - snprintf(buff,sizeof(buff),"%lld\n",jiffies); - len = strlen(buff); - file_buff_write(log, buff, len); - } - } + snprintf(buff,sizeof(buff),"%lld\n",get_uptime_jiffies()); + len = strlen(buff); + file_buff_write(log, buff, len); } static void @@ -376,3 +377,9 @@ void bootchart_finish( void ) file_buff_done(log_procs); acct(NULL); } + +/* called to get time (in ms) used by bootchart */ +long long bootchart_gettime( void ) +{ + return 10LL*get_uptime_jiffies(); +} diff --git a/init/bootchart.h b/init/bootchart.h index 39d2d4f..ed65e8a 100644 --- a/init/bootchart.h +++ b/init/bootchart.h @@ -26,6 +26,7 @@ extern int bootchart_init(void); extern int bootchart_step(void); extern void bootchart_finish(void); +extern long long bootchart_gettime(void); # define BOOTCHART_POLLING_MS 200 /* polling period in ms */ # define BOOTCHART_DEFAULT_TIME_SEC (2*60) /* default polling time in seconds */ diff --git a/init/devices.c b/init/devices.c index 1012fee..2fa5c22 100644 --- a/init/devices.c +++ b/init/devices.c @@ -938,7 +938,9 @@ static void handle_firmware_event(struct uevent *uevent) pid = fork(); if (!pid) { process_firmware_event(uevent); - exit(EXIT_SUCCESS); + _exit(EXIT_SUCCESS); + } else if (pid < 0) { + log_event_print("could not fork to process firmware event: %s\n", strerror(errno)); } } diff --git a/init/init.c b/init/init.c index bd1db7a..99474e6 100644 --- a/init/init.c +++ b/init/init.c @@ -65,6 +65,7 @@ static int property_triggers_enabled = 0; #if BOOTCHART static int bootchart_count; +static long long bootchart_time = 0; #endif static char console[32]; @@ -1147,11 +1148,29 @@ int main(int argc, char **argv) #if BOOTCHART if (bootchart_count > 0) { - if (timeout < 0 || timeout > BOOTCHART_POLLING_MS) - timeout = BOOTCHART_POLLING_MS; - if (bootchart_step() < 0 || --bootchart_count == 0) { - bootchart_finish(); - bootchart_count = 0; + long long current_time; + int elapsed_time, remaining_time; + + current_time = bootchart_gettime(); + elapsed_time = current_time - bootchart_time; + + if (elapsed_time >= BOOTCHART_POLLING_MS) { + /* count missed samples */ + while (elapsed_time >= BOOTCHART_POLLING_MS) { + elapsed_time -= BOOTCHART_POLLING_MS; + bootchart_count--; + } + /* count may be negative, take a sample anyway */ + bootchart_time = current_time; + if (bootchart_step() < 0 || bootchart_count <= 0) { + bootchart_finish(); + bootchart_count = 0; + } + } + if (bootchart_count > 0) { + remaining_time = BOOTCHART_POLLING_MS - elapsed_time; + if (timeout < 0 || timeout > remaining_time) + timeout = remaining_time; } } #endif diff --git a/init/readme.txt b/init/readme.txt index 26be536..750d953 100644 --- a/init/readme.txt +++ b/init/readme.txt @@ -123,15 +123,6 @@ boot Triggers of this form occur when the property <name> is set to the specific value <value>. -device-added-<path> -device-removed-<path> - Triggers of these forms occur when a device node is added - or removed. - -service-exited-<name> - Triggers of this form occur when the specified service exits. - - Commands -------- @@ -211,8 +202,6 @@ restorecon <path> [ <path> ]* restorecon_recursive <path> [ <path> ]* Recursively restore the directory tree named by <path> to the security contexts specified in the file_contexts configuration. - Do NOT use this with paths leading to shell-writable or app-writable - directories, e.g. /data/local/tmp, /data/data or any prefix thereof. setcon <securitycontext> Set the current process security context to the specified string. @@ -327,12 +316,6 @@ service runtime /system/bin/runtime user system group system -on device-added-/dev/compass - start akmd - -on device-removed-/dev/compass - stop akmd - service akmd /sbin/akmd disabled user akmd diff --git a/init/util.c b/init/util.c index 0f69e1c..e1a3ee3 100644 --- a/init/util.c +++ b/init/util.c @@ -329,9 +329,9 @@ void sanitize(char *s) if (!s) return; - for (; *s; s++) { + while (*s) { s += strspn(s, accept); - if (*s) *s = '_'; + if (*s) *s++ = '_'; } } |