struct kstat stat;
char *ramfs_dsdt_name = "/DSDT.aml";
- printk(KERN_INFO PREFIX "Looking for DSDT in initramfs... ");
+ printk(KERN_INFO PREFIX "Checking initramfs for custom DSDT");
/*
* 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. So we need a static/init firmware
- * infrastructure, which doesn't exist yet...
+ * 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) {
- printk("not found.\n");
+ if (vfs_stat(ramfs_dsdt_name, &stat) < 0)
return ret;
- }
len = stat.size;
/* check especially against empty files */
if (len <= 4) {
- printk("error, file is too small: only %lu bytes.\n", len);
+ 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("error, could not open file %s.\n", ramfs_dsdt_name);
+ printk(KERN_ERR PREFIX "Failed to open %s.\n", ramfs_dsdt_name);
return ret;
}
- dsdt_buffer = ACPI_ALLOCATE(len);
+ dsdt_buffer = kmalloc(len, GFP_ATOMIC);
if (!dsdt_buffer) {
- printk("error when allocating %lu bytes of memory.\n", len);
+ 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);
+ len2 = vfs_read(firmware_file, (char __user *)dsdt_buffer, len,
+ &firmware_file->f_pos);
set_fs(oldfs);
if (len2 < len) {
- printk("error trying to read %lu bytes from %s.\n", len, ramfs_dsdt_name);
+ printk(KERN_ERR PREFIX "Failed to read %lu bytes from %s.\n",
+ len, ramfs_dsdt_name);
ACPI_FREE(dsdt_buffer);
goto err;
}
- printk("successfully read %lu bytes from %s.\n", len, ramfs_dsdt_name);
+ printk(KERN_INFO PREFIX "Found %lu byte DSDT in %s.\n",
+ len, ramfs_dsdt_name);
ret = dsdt_buffer;
err:
filp_close(firmware_file, NULL);
#ifdef CONFIG_ACPI_CUSTOM_DSDT_INITRD
if ((strncmp(existing_table->signature, "DSDT", 4) == 0) &&
!acpi_no_initrd_override) {
- struct acpi_table_header *initrd_table = acpi_find_dsdt_initrd();
+ struct acpi_table_header *initrd_table;
+
+ initrd_table = acpi_find_dsdt_initrd();
if (initrd_table)
*new_table = initrd_table;
}