summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Konovalov <andrey.konovalov@linaro.org>2012-08-22 19:03:39 +0400
committerAndrey Konovalov <andrey.konovalov@linaro.org>2012-08-22 19:03:39 +0400
commit15049b2078c87edbd8a98b081a4477e360845a53 (patch)
treedf6ab6034f40f599eaf6932c2bcc1a9fd8ed5008
parent9d1389dff3a3d39714a96d3448d709d4cf4f0cbc (diff)
parent03664de47d69b580359d2dac84feb3b9e57f7f7d (diff)
Merge branch 'tracking-workaround-ubuntu-sauce' into merge-linux-linaro-core-trackingllct-20120822.0
-rw-r--r--drivers/acpi/battery.c39
-rw-r--r--include/asm-generic/vmlinux.lds.h1
-rw-r--r--include/linux/init.h1
-rw-r--r--include/linux/kmod.h2
-rw-r--r--init/initramfs.c35
-rw-r--r--init/main.c6
-rw-r--r--kernel/kmod.c2
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 6d265fc4307f..2173f4c9cbbd 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)