* [PATCH] ACPI: introduce sysfs I/F for dynamic tables
@ 2009-02-26 3:27 Zhang Rui
2009-02-26 6:09 ` Len Brown
0 siblings, 1 reply; 2+ messages in thread
From: Zhang Rui @ 2009-02-26 3:27 UTC (permalink / raw)
To: Len Brown; +Cc: linux-acpi, Zhang, Rui
SSDT tables may be loaded at runtime.
create sysfs I/F for these dynamic tables in /sys/firmware/acpi/tables/dynamic/.
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
---
drivers/acpi/system.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 47 insertions(+), 2 deletions(-)
Index: linux-2.6/drivers/acpi/system.c
===================================================================
--- linux-2.6.orig/drivers/acpi/system.c
+++ linux-2.6/drivers/acpi/system.c
@@ -62,6 +62,7 @@ module_param_call(acpica_version, NULL,
-------------------------------------------------------------------------- */
static LIST_HEAD(acpi_table_attr_list);
static struct kobject *tables_kobj;
+static struct kobject *dynamic_tables_kobj;
struct acpi_table_attr {
struct bin_attribute attr;
@@ -128,6 +129,40 @@ static void acpi_table_attr_init(struct
return;
}
+static acpi_status
+acpi_sysfs_table_handler(u32 event, void *table, void *context)
+{
+ struct acpi_table_attr *table_attr;
+
+ switch (event) {
+ case ACPI_TABLE_EVENT_LOAD:
+ table_attr =
+ kzalloc(sizeof(struct acpi_table_attr), GFP_KERNEL);
+ if (!table_attr)
+ return AE_NO_MEMORY;
+
+ acpi_table_attr_init(table_attr, table);
+ if (sysfs_create_bin_file(dynamic_tables_kobj,
+ &table_attr->attr)) {
+ kfree(table_attr);
+ return AE_ERROR;
+ } else
+ list_add_tail(&table_attr->node,
+ &acpi_table_attr_list);
+ break;
+ case ACPI_TABLE_EVENT_UNLOAD:
+ /*
+ * we do not need to do anything right now
+ * because the table is not deleted from the
+ * global table list when unloading it.
+ */
+ break;
+ default:
+ return AE_BAD_PARAMETER;
+ }
+ return AE_OK;
+}
+
static int acpi_system_sysfs_init(void)
{
struct acpi_table_attr *table_attr;
@@ -137,7 +172,11 @@ static int acpi_system_sysfs_init(void)
tables_kobj = kobject_create_and_add("tables", acpi_kobj);
if (!tables_kobj)
- return -ENOMEM;
+ goto err;
+
+ dynamic_tables_kobj = kobject_create_and_add("dynamic", tables_kobj);
+ if (!dynamic_tables_kobj)
+ goto err_dynamic_tables;
do {
result = acpi_get_table_by_index(table_index, &table_header);
@@ -162,8 +201,14 @@ static int acpi_system_sysfs_init(void)
}
} while (!result);
kobject_uevent(tables_kobj, KOBJ_ADD);
+ kobject_uevent(dynamic_tables_kobj, KOBJ_ADD);
+ result = acpi_install_table_handler(acpi_sysfs_table_handler, NULL);
- return 0;
+ return result == AE_OK ? 0 : -EINVAL;
+err_dynamic_tables:
+ kobject_put(tables_kobj);
+err:
+ return -ENOMEM;
}
/*
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] ACPI: introduce sysfs I/F for dynamic tables
2009-02-26 3:27 [PATCH] ACPI: introduce sysfs I/F for dynamic tables Zhang Rui
@ 2009-02-26 6:09 ` Len Brown
0 siblings, 0 replies; 2+ messages in thread
From: Len Brown @ 2009-02-26 6:09 UTC (permalink / raw)
To: Zhang Rui; +Cc: linux-acpi
> SSDT tables may be loaded at runtime.
> create sysfs I/F for these dynamic tables in /sys/firmware/acpi/tables/dynamic/.
>
> Signed-off-by: Zhang Rui <rui.zhang@intel.com>
> ---
> drivers/acpi/system.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 47 insertions(+), 2 deletions(-)
>
works for me:-)
applied.
thanks,
Len Brown, Intel Open Source Technology Center
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2009-02-26 6:09 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-02-26 3:27 [PATCH] ACPI: introduce sysfs I/F for dynamic tables Zhang Rui
2009-02-26 6:09 ` Len Brown
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox