Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ecd8ee09 authored by Len Brown's avatar Len Brown
Browse files

Merge branch 'procfs-cleanup' into release

parents feb29c51 c637e486
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ Note: Only ACPI METHOD can be overridden, any other object types like
      "Device", "OperationRegion", are not recognized.
Note: The same ACPI control method can be overridden for many times,
      and it's always the latest one that used by Linux/kernel.
Note: To get the ACPI debug object output (Store (AAAA, Debug)),
      please run "echo 1 > /sys/module/acpi/parameters/aml_debug_output".

1. override an existing method
   a) get the ACPI table via ACPI sysfs I/F. e.g. to get the DSDT,
+1 −0
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ acpi-y += pci_root.o pci_link.o pci_irq.o pci_bind.o
acpi-y				+= power.o
acpi-y				+= system.o event.o
acpi-$(CONFIG_ACPI_DEBUG)	+= debug.o
acpi-$(CONFIG_DEBUG_FS)		+= debugfs.o
acpi-$(CONFIG_ACPI_NUMA)	+= numa.o
acpi-$(CONFIG_ACPI_PROCFS_POWER) += cm_sbs.o
ifdef CONFIG_ACPI_VIDEO
+1 −1
Original line number Diff line number Diff line
@@ -115,7 +115,7 @@ u8 ACPI_INIT_GLOBAL(acpi_gbl_use_default_register_widths, TRUE);
/*
 * Optionally enable output from the AML Debug Object.
 */
u8 ACPI_INIT_GLOBAL(acpi_gbl_enable_aml_debug_object, FALSE);
u32 ACPI_INIT_GLOBAL(acpi_gbl_enable_aml_debug_object, FALSE);

/*
 * Optionally copy the entire DSDT to local memory (instead of simply
+1 −0
Original line number Diff line number Diff line
@@ -1036,6 +1036,7 @@ static int __init acpi_init(void)
	acpi_power_init();
	acpi_system_init();
	acpi_debug_init();
	acpi_debugfs_init();
	acpi_sleep_proc_init();
	acpi_wakeup_device_init();
	return result;
+0 −75
Original line number Diff line number Diff line
@@ -197,80 +197,6 @@ static int param_get_trace_state(char *buffer, struct kernel_param *kp)
module_param_call(trace_state, param_set_trace_state, param_get_trace_state,
		  NULL, 0644);

/* --------------------------------------------------------------------------
				DebugFS Interface
   -------------------------------------------------------------------------- */

static ssize_t cm_write(struct file *file, const char __user *user_buf,
			size_t count, loff_t *ppos)
{
	static char *buf;
	static int uncopied_bytes;
	struct acpi_table_header table;
	acpi_status status;

	if (!(*ppos)) {
		/* parse the table header to get the table length */
		if (count <= sizeof(struct acpi_table_header))
			return -EINVAL;
		if (copy_from_user(&table, user_buf,
			sizeof(struct acpi_table_header)))
			return -EFAULT;
		uncopied_bytes = table.length;
		buf = kzalloc(uncopied_bytes, GFP_KERNEL);
		if (!buf)
			return -ENOMEM;
	}

	if (uncopied_bytes < count) {
		kfree(buf);
		return -EINVAL;
	}

	if (copy_from_user(buf + (*ppos), user_buf, count)) {
		kfree(buf);
		return -EFAULT;
	}

	uncopied_bytes -= count;
	*ppos += count;

	if (!uncopied_bytes) {
		status = acpi_install_method(buf);
		kfree(buf);
		if (ACPI_FAILURE(status))
			return -EINVAL;
		add_taint(TAINT_OVERRIDDEN_ACPI_TABLE);
	}

	return count;
}

static const struct file_operations cm_fops = {
	.write = cm_write,
};

static int acpi_debugfs_init(void)
{
	struct dentry *acpi_dir, *cm_dentry;

	acpi_dir = debugfs_create_dir("acpi", NULL);
	if (!acpi_dir)
		goto err;

	cm_dentry = debugfs_create_file("custom_method", S_IWUGO,
					acpi_dir, NULL, &cm_fops);
	if (!cm_dentry)
		goto err;

	return 0;

err:
	if (acpi_dir)
		debugfs_remove(acpi_dir);
	return -EINVAL;
}

/* --------------------------------------------------------------------------
                              FS Interface (/proc)
   -------------------------------------------------------------------------- */
@@ -400,7 +326,6 @@ int __init acpi_procfs_init(void)

int __init acpi_debug_init(void)
{
	acpi_debugfs_init();
	acpi_procfs_init();
	return 0;
}
Loading