diff options
author | Andrey Konovalov <andrey.konovalov@linaro.org> | 2012-09-24 23:19:23 +0400 |
---|---|---|
committer | Andrey Konovalov <andrey.konovalov@linaro.org> | 2012-09-24 23:19:23 +0400 |
commit | ecfd3b68e8af7c8dc8256bdd073d88214038f5b3 (patch) | |
tree | 1144e8671db3efe659b9f13f5acc4d8f024b2e12 | |
parent | 48e2a78076d6d8f78d059cfc1394d041184905c5 (diff) | |
parent | 03664de47d69b580359d2dac84feb3b9e57f7f7d (diff) |
Merge branch 'tracking-workaround-ubuntu-sauce' into merge-linux-linaro-core-trackingllct-20120924.0
-rw-r--r-- | drivers/acpi/battery.c | 39 | ||||
-rw-r--r-- | include/asm-generic/vmlinux.lds.h | 1 | ||||
-rw-r--r-- | include/linux/init.h | 1 | ||||
-rw-r--r-- | include/linux/kmod.h | 2 | ||||
-rw-r--r-- | init/initramfs.c | 35 | ||||
-rw-r--r-- | init/main.c | 6 | ||||
-rw-r--r-- | kernel/kmod.c | 2 |
7 files changed, 15 insertions, 71 deletions
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c index 18d6fac185e1..45e3e1759fb8 100644 --- a/drivers/acpi/battery.c +++ b/drivers/acpi/battery.c @@ -985,18 +985,6 @@ static int battery_notify(struct notifier_block *nb, return 0; } -static LIST_HEAD(acpi_battery_domain); - -static void acpi_battery_update_async(struct acpi_device *device, async_cookie_t cookie) -{ - struct acpi_battery *battery = acpi_driver_data(device); - - acpi_battery_update(battery); - printk(KERN_INFO PREFIX "%s Slot [%s] (battery %s)\n", - ACPI_BATTERY_DEVICE_NAME, acpi_device_bid(device), - device->status.battery_present ? "present" : "absent"); -} - static int acpi_battery_add(struct acpi_device *device) { int result = 0; @@ -1016,16 +1004,13 @@ static int acpi_battery_add(struct acpi_device *device) if (ACPI_SUCCESS(acpi_get_handle(battery->device->handle, "_BIX", &handle))) set_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags); - - /* Mark the battery for update at first access. */ - battery->update_time = 0; + result = acpi_battery_update(battery); + if (result) + goto fail; #ifdef CONFIG_ACPI_PROCFS_POWER result = acpi_battery_add_fs(device); #endif - if (!result) { - async_schedule_domain(acpi_battery_update_async, device, &acpi_battery_domain); - - } else { + if (result) { #ifdef CONFIG_ACPI_PROCFS_POWER acpi_battery_remove_fs(device); #endif @@ -1055,10 +1040,6 @@ static int acpi_battery_remove(struct acpi_device *device, int type) if (!device || !acpi_driver_data(device)) return -EINVAL; - - /* Ensure all async updates are complete before freeing the battery. */ - async_synchronize_full_domain(&acpi_battery_domain); - battery = acpi_driver_data(device); unregister_pm_notifier(&battery->pm_nb); #ifdef CONFIG_ACPI_PROCFS_POWER @@ -1105,21 +1086,27 @@ static struct acpi_driver acpi_battery_driver = { .drv.pm = &acpi_battery_pm, }; -static int __init acpi_battery_init(void) +static void __init acpi_battery_init_async(void *unused, async_cookie_t cookie) { if (acpi_disabled) return; #ifdef CONFIG_ACPI_PROCFS_POWER acpi_battery_dir = acpi_lock_battery_dir(); if (!acpi_battery_dir) - return -1; + return; #endif if (acpi_bus_register_driver(&acpi_battery_driver) < 0) { #ifdef CONFIG_ACPI_PROCFS_POWER acpi_unlock_battery_dir(acpi_battery_dir); #endif - return -1; + return; } + return; +} + +static int __init acpi_battery_init(void) +{ + async_schedule(acpi_battery_init_async, NULL); return 0; } diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index b5590e10b3a7..4e2e1cc505ab 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -626,7 +626,6 @@ *(.initcallearly.init) \ INIT_CALLS_LEVEL(0) \ INIT_CALLS_LEVEL(1) \ - INIT_CALLS_LEVEL(earlyrootfs) \ INIT_CALLS_LEVEL(2) \ INIT_CALLS_LEVEL(3) \ INIT_CALLS_LEVEL(4) \ diff --git a/include/linux/init.h b/include/linux/init.h index d8ed250fce30..5e664f671615 100644 --- a/include/linux/init.h +++ b/include/linux/init.h @@ -197,7 +197,6 @@ extern bool initcall_debug; #define core_initcall(fn) __define_initcall("1",fn,1) #define core_initcall_sync(fn) __define_initcall("1s",fn,1s) -#define earlyrootfs_initcall(fn) __define_initcall("earlyrootfs",fn,rootfs) #define postcore_initcall(fn) __define_initcall("2",fn,2) #define postcore_initcall_sync(fn) __define_initcall("2s",fn,2s) #define arch_initcall(fn) __define_initcall("3",fn,3) diff --git a/include/linux/kmod.h b/include/linux/kmod.h index 6f571b1be39e..5398d5807075 100644 --- a/include/linux/kmod.h +++ b/include/linux/kmod.h @@ -71,8 +71,6 @@ call_usermodehelper_fns(char *path, char **argv, char **envp, int wait, int (*init)(struct subprocess_info *info, struct cred *new), void (*cleanup)(struct subprocess_info *), void *data); -void populate_rootfs_wait(void); - static inline int call_usermodehelper(char *path, char **argv, char **envp, int wait) { diff --git a/init/initramfs.c b/init/initramfs.c index a9ea4066e2ef..84c6bf111300 100644 --- a/init/initramfs.c +++ b/init/initramfs.c @@ -18,8 +18,6 @@ #include <linux/dirent.h> #include <linux/syscalls.h> #include <linux/utime.h> -#include <linux/async.h> -#include <linux/export.h> static __initdata char *message; static void __init error(char *x) @@ -581,15 +579,7 @@ static void __init clean_rootfs(void) } #endif -LIST_HEAD(populate_rootfs_domain); - -void populate_rootfs_wait(void) -{ - async_synchronize_full_domain(&populate_rootfs_domain); -} -EXPORT_SYMBOL(populate_rootfs_wait); - -static void __init async_populate_rootfs(void *data, async_cookie_t cookie) +static int __init populate_rootfs(void) { char *err = unpack_to_rootfs(__initramfs_start, __initramfs_size); if (err) @@ -602,7 +592,7 @@ static void __init async_populate_rootfs(void *data, async_cookie_t cookie) initrd_end - initrd_start); if (!err) { free_initrd(); - return; + return 0; } else { clean_rootfs(); unpack_to_rootfs(__initramfs_start, __initramfs_size); @@ -626,27 +616,6 @@ static void __init async_populate_rootfs(void *data, async_cookie_t cookie) free_initrd(); #endif } - return; -} - -static int __initdata rootfs_populated; - -static int __init populate_rootfs_early(void) -{ - if (num_online_cpus() > 1) { - rootfs_populated = 1; - async_schedule_domain(async_populate_rootfs, NULL, - &populate_rootfs_domain); - } - return 0; -} -static int __init populate_rootfs(void) -{ - if (!rootfs_populated) - async_schedule_domain(async_populate_rootfs, NULL, - &populate_rootfs_domain); return 0; } - -earlyrootfs_initcall(populate_rootfs_early); rootfs_initcall(populate_rootfs); diff --git a/init/main.c b/init/main.c index b457caf7c253..d73093354817 100644 --- a/init/main.c +++ b/init/main.c @@ -892,12 +892,6 @@ static int __init kernel_init(void * unused) (void) sys_dup(0); (void) sys_dup(0); /* - * We need to ensure that the filesystem is ready by this point, wait for - * async_populate_rootfs to complete. - */ - populate_rootfs_wait(); - - /* * check if there is an early userspace init. If yes, let it do all * the work */ diff --git a/kernel/kmod.c b/kernel/kmod.c index c5710b59f438..6f99aead66c6 100644 --- a/kernel/kmod.c +++ b/kernel/kmod.c @@ -618,8 +618,6 @@ int call_usermodehelper_fns( struct subprocess_info *info; gfp_t gfp_mask = (wait == UMH_NO_WAIT) ? GFP_ATOMIC : GFP_KERNEL; - populate_rootfs_wait(); - info = call_usermodehelper_setup(path, argv, envp, gfp_mask); if (info == NULL) |