mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
ACPI: Remove ACPI_CUSTOM_DSDT_INITRD option
This essentially reverts commit 71fc47a9ad
("ACPI: basic initramfs DSDT override support"), because the code simply
isn't ready.
It did ugly things to the init sequence to populate the rootfs image
early, but that just ended up showing other problems with the whole
approach. The fact is, the VFS layer simply isn't initialized this
early, and the relevant ACPI code should either run much later, or this
shouldn't be done at all.
For 2.6.25, we'll just pick the latter option. We can revisit this
concept later if necessary.
Cc: Dave Hansen <[email protected]>
Cc: Tilman Schmidt <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Thomas Renninger <[email protected]>
Cc: Eric Piel <[email protected]>
Cc: Len Brown <[email protected]>
Cc: Christoph Hellwig <[email protected]>
Cc: Markus Gaugusch <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
ce63645234
commit
9a9e0d6855
7 changed files with 3 additions and 165 deletions
|
|
@ -300,17 +300,6 @@ config ACPI_CUSTOM_DSDT
|
|||
bool
|
||||
default ACPI_CUSTOM_DSDT_FILE != ""
|
||||
|
||||
config ACPI_CUSTOM_DSDT_INITRD
|
||||
bool "Read Custom DSDT from initramfs"
|
||||
depends on BLK_DEV_INITRD
|
||||
default n
|
||||
help
|
||||
This option supports a custom DSDT by optionally loading it from initrd.
|
||||
See Documentation/acpi/dsdt-override.txt
|
||||
|
||||
If you are not using this feature now, but may use it later,
|
||||
it is safe to say Y here.
|
||||
|
||||
config ACPI_BLACKLIST_YEAR
|
||||
int "Disable ACPI for systems before Jan 1st this year" if X86_32
|
||||
default 0
|
||||
|
|
|
|||
|
|
@ -91,10 +91,6 @@ static DEFINE_SPINLOCK(acpi_res_lock);
|
|||
#define OSI_STRING_LENGTH_MAX 64 /* arbitrary */
|
||||
static char osi_additional_string[OSI_STRING_LENGTH_MAX];
|
||||
|
||||
#ifdef CONFIG_ACPI_CUSTOM_DSDT_INITRD
|
||||
static int acpi_no_initrd_override;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* "Ode to _OSI(Linux)"
|
||||
*
|
||||
|
|
@ -324,67 +320,6 @@ acpi_os_predefined_override(const struct acpi_predefined_names *init_val,
|
|||
return AE_OK;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ACPI_CUSTOM_DSDT_INITRD
|
||||
static struct acpi_table_header *acpi_find_dsdt_initrd(void)
|
||||
{
|
||||
struct file *firmware_file;
|
||||
mm_segment_t oldfs;
|
||||
unsigned long len, len2;
|
||||
struct acpi_table_header *dsdt_buffer, *ret = NULL;
|
||||
struct kstat stat;
|
||||
char *ramfs_dsdt_name = "/DSDT.aml";
|
||||
|
||||
printk(KERN_INFO PREFIX "Checking initramfs for custom DSDT\n");
|
||||
|
||||
/*
|
||||
* Never do this at home, only the user-space is allowed to open a file.
|
||||
* The clean way would be to use the firmware loader.
|
||||
* But this code must be run before there is any userspace available.
|
||||
* A static/init firmware infrastructure doesn't exist yet...
|
||||
*/
|
||||
if (vfs_stat(ramfs_dsdt_name, &stat) < 0)
|
||||
return ret;
|
||||
|
||||
len = stat.size;
|
||||
/* check especially against empty files */
|
||||
if (len <= 4) {
|
||||
printk(KERN_ERR PREFIX "Failed: DSDT only %lu bytes.\n", len);
|
||||
return ret;
|
||||
}
|
||||
|
||||
firmware_file = filp_open(ramfs_dsdt_name, O_RDONLY, 0);
|
||||
if (IS_ERR(firmware_file)) {
|
||||
printk(KERN_ERR PREFIX "Failed to open %s.\n", ramfs_dsdt_name);
|
||||
return ret;
|
||||
}
|
||||
|
||||
dsdt_buffer = kmalloc(len, GFP_ATOMIC);
|
||||
if (!dsdt_buffer) {
|
||||
printk(KERN_ERR PREFIX "Failed to allocate %lu bytes.\n", len);
|
||||
goto err;
|
||||
}
|
||||
|
||||
oldfs = get_fs();
|
||||
set_fs(KERNEL_DS);
|
||||
len2 = vfs_read(firmware_file, (char __user *)dsdt_buffer, len,
|
||||
&firmware_file->f_pos);
|
||||
set_fs(oldfs);
|
||||
if (len2 < len) {
|
||||
printk(KERN_ERR PREFIX "Failed to read %lu bytes from %s.\n",
|
||||
len, ramfs_dsdt_name);
|
||||
ACPI_FREE(dsdt_buffer);
|
||||
goto err;
|
||||
}
|
||||
|
||||
printk(KERN_INFO PREFIX "Found %lu byte DSDT in %s.\n",
|
||||
len, ramfs_dsdt_name);
|
||||
ret = dsdt_buffer;
|
||||
err:
|
||||
filp_close(firmware_file, NULL);
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
acpi_status
|
||||
acpi_os_table_override(struct acpi_table_header * existing_table,
|
||||
struct acpi_table_header ** new_table)
|
||||
|
|
@ -397,16 +332,6 @@ acpi_os_table_override(struct acpi_table_header * existing_table,
|
|||
#ifdef CONFIG_ACPI_CUSTOM_DSDT
|
||||
if (strncmp(existing_table->signature, "DSDT", 4) == 0)
|
||||
*new_table = (struct acpi_table_header *)AmlCode;
|
||||
#endif
|
||||
#ifdef CONFIG_ACPI_CUSTOM_DSDT_INITRD
|
||||
if ((strncmp(existing_table->signature, "DSDT", 4) == 0) &&
|
||||
!acpi_no_initrd_override) {
|
||||
struct acpi_table_header *initrd_table;
|
||||
|
||||
initrd_table = acpi_find_dsdt_initrd();
|
||||
if (initrd_table)
|
||||
*new_table = initrd_table;
|
||||
}
|
||||
#endif
|
||||
if (*new_table != NULL) {
|
||||
printk(KERN_WARNING PREFIX "Override [%4.4s-%8.8s], "
|
||||
|
|
@ -418,15 +343,6 @@ acpi_os_table_override(struct acpi_table_header * existing_table,
|
|||
return AE_OK;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ACPI_CUSTOM_DSDT_INITRD
|
||||
static int __init acpi_no_initrd_override_setup(char *s)
|
||||
{
|
||||
acpi_no_initrd_override = 1;
|
||||
return 1;
|
||||
}
|
||||
__setup("acpi_no_initrd_override", acpi_no_initrd_override_setup);
|
||||
#endif
|
||||
|
||||
static irqreturn_t acpi_irq(int irq, void *dev_id)
|
||||
{
|
||||
u32 handled;
|
||||
|
|
|
|||
Loading…
Reference in a new issue