diff options
| author | Markus Gaugusch <dsdt@gaugusch.at> | 2008-02-04 18:04:06 -0500 |
|---|---|---|
| committer | Len Brown <len.brown@intel.com> | 2008-02-06 22:07:41 -0500 |
| commit | 71fc47a9adf8ee89e5c96a47222915c5485ac437 (patch) | |
| tree | a2eaefbb703dde933a9726eae7e6399761d40136 /init | |
| parent | 488b5ec871191359b9b79262a3d48456dae7ea5f (diff) | |
ACPI: basic initramfs DSDT override support
The basics of DSDT from initramfs. In case this option is selected,
populate_rootfs() is called a bit earlier to have the initramfs content
available during ACPI initialization.
This is a very similar path to the one available at
http://gaugusch.at/kernel.shtml but with some update in the
documentation, default set to No and the change of populate_rootfs() the
"Jeff Mahony way" (which avoids reading the initramfs twice).
Signed-off-by: Thomas Renninger <trenn@suse.de>
Signed-off-by: Eric Piel <eric.piel@tremplin-utc.net>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'init')
| -rw-r--r-- | init/initramfs.c | 8 | ||||
| -rw-r--r-- | init/main.c | 7 |
2 files changed, 14 insertions, 1 deletions
diff --git a/init/initramfs.c b/init/initramfs.c index d53fee8d8604..c0b1e0533d80 100644 --- a/init/initramfs.c +++ b/init/initramfs.c | |||
| @@ -538,7 +538,7 @@ skip: | |||
| 538 | initrd_end = 0; | 538 | initrd_end = 0; |
| 539 | } | 539 | } |
| 540 | 540 | ||
| 541 | static int __init populate_rootfs(void) | 541 | int __init populate_rootfs(void) |
| 542 | { | 542 | { |
| 543 | char *err = unpack_to_rootfs(__initramfs_start, | 543 | char *err = unpack_to_rootfs(__initramfs_start, |
| 544 | __initramfs_end - __initramfs_start, 0); | 544 | __initramfs_end - __initramfs_start, 0); |
| @@ -577,4 +577,10 @@ static int __init populate_rootfs(void) | |||
| 577 | } | 577 | } |
| 578 | return 0; | 578 | return 0; |
| 579 | } | 579 | } |
| 580 | #ifndef CONFIG_ACPI_CUSTOM_DSDT_INITRD | ||
| 581 | /* | ||
| 582 | * if this option is enabled, populate_rootfs() is called _earlier_ in the | ||
| 583 | * boot sequence. This insures that the ACPI initialisation can find the file. | ||
| 584 | */ | ||
| 580 | rootfs_initcall(populate_rootfs); | 585 | rootfs_initcall(populate_rootfs); |
| 586 | #endif | ||
diff --git a/init/main.c b/init/main.c index c691f5f7fc27..2a78932f6c07 100644 --- a/init/main.c +++ b/init/main.c | |||
| @@ -102,6 +102,12 @@ static inline void mark_rodata_ro(void) { } | |||
| 102 | extern void tc_init(void); | 102 | extern void tc_init(void); |
| 103 | #endif | 103 | #endif |
| 104 | 104 | ||
| 105 | #ifdef CONFIG_ACPI_CUSTOM_DSDT_INITRD | ||
| 106 | extern int populate_rootfs(void); | ||
| 107 | #else | ||
| 108 | static inline void populate_rootfs(void) {} | ||
| 109 | #endif | ||
| 110 | |||
| 105 | enum system_states system_state; | 111 | enum system_states system_state; |
| 106 | EXPORT_SYMBOL(system_state); | 112 | EXPORT_SYMBOL(system_state); |
| 107 | 113 | ||
| @@ -648,6 +654,7 @@ asmlinkage void __init start_kernel(void) | |||
| 648 | 654 | ||
| 649 | check_bugs(); | 655 | check_bugs(); |
| 650 | 656 | ||
| 657 | populate_rootfs(); /* For DSDT override from initramfs */ | ||
| 651 | acpi_early_init(); /* before LAPIC and SMP init */ | 658 | acpi_early_init(); /* before LAPIC and SMP init */ |
| 652 | 659 | ||
| 653 | /* Do the rest non-__init'ed, we're now alive */ | 660 | /* Do the rest non-__init'ed, we're now alive */ |
