ACPICA: make acpi_load_table() return table index
ACPICA commit d1716a829d19be23277d9157c575a03b9abb7457
For unloading an ACPI table, it is necessary to provide the index of
the table. The method intended for dynamically loading or hotplug
addition of tables, acpi_load_table(), should provide this information
via an optional pointer to the loaded table index.
This patch fixes the table unload function of acpi_configfs.
Reported-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Fixes: d06c47e3dd
("ACPI: configfs: Resolve objects on host-directed table loads")
Link: https://github.com/acpica/acpica/commit/d1716a82
Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
Signed-off-by: Erik Schmauss <erik.schmauss@intel.com>
Signed-off-by: Bob Moore <robert.moore@intel.com>
Tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
42d939fadb
commit
1770093c5b
@ -53,7 +53,7 @@ static ssize_t acpi_table_aml_write(struct config_item *cfg,
|
|||||||
if (!table->header)
|
if (!table->header)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
ret = acpi_load_table(table->header);
|
ret = acpi_load_table(table->header, &table->index);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
kfree(table->header);
|
kfree(table->header);
|
||||||
table->header = NULL;
|
table->header = NULL;
|
||||||
@ -223,7 +223,7 @@ static void acpi_table_drop_item(struct config_group *group,
|
|||||||
struct acpi_table *table = container_of(cfg, struct acpi_table, cfg);
|
struct acpi_table *table = container_of(cfg, struct acpi_table, cfg);
|
||||||
|
|
||||||
ACPI_INFO(("Host-directed Dynamic ACPI Table Unload"));
|
ACPI_INFO(("Host-directed Dynamic ACPI Table Unload"));
|
||||||
acpi_tb_unload_table(table->index);
|
acpi_unload_table(table->index);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct configfs_group_operations acpi_table_group_ops = {
|
static struct configfs_group_operations acpi_table_group_ops = {
|
||||||
|
@ -93,7 +93,7 @@ acpi_status acpi_db_load_tables(struct acpi_new_table_desc *list_head)
|
|||||||
while (table_list_head) {
|
while (table_list_head) {
|
||||||
table = table_list_head->table;
|
table = table_list_head->table;
|
||||||
|
|
||||||
status = acpi_load_table(table);
|
status = acpi_load_table(table, NULL);
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
if (status == AE_ALREADY_EXISTS) {
|
if (status == AE_ALREADY_EXISTS) {
|
||||||
acpi_os_printf
|
acpi_os_printf
|
||||||
|
@ -268,6 +268,8 @@ ACPI_EXPORT_SYMBOL_INIT(acpi_install_table)
|
|||||||
*
|
*
|
||||||
* PARAMETERS: table - Pointer to a buffer containing the ACPI
|
* PARAMETERS: table - Pointer to a buffer containing the ACPI
|
||||||
* table to be loaded.
|
* table to be loaded.
|
||||||
|
* table_idx - Pointer to a u32 for storing the table
|
||||||
|
* index, might be NULL
|
||||||
*
|
*
|
||||||
* RETURN: Status
|
* RETURN: Status
|
||||||
*
|
*
|
||||||
@ -278,7 +280,7 @@ ACPI_EXPORT_SYMBOL_INIT(acpi_install_table)
|
|||||||
* to ensure that the table is not deleted or unmapped.
|
* to ensure that the table is not deleted or unmapped.
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
acpi_status acpi_load_table(struct acpi_table_header *table)
|
acpi_status acpi_load_table(struct acpi_table_header *table, u32 *table_idx)
|
||||||
{
|
{
|
||||||
acpi_status status;
|
acpi_status status;
|
||||||
u32 table_index;
|
u32 table_index;
|
||||||
@ -297,6 +299,10 @@ acpi_status acpi_load_table(struct acpi_table_header *table)
|
|||||||
status = acpi_tb_install_and_load_table(ACPI_PTR_TO_PHYSADDR(table),
|
status = acpi_tb_install_and_load_table(ACPI_PTR_TO_PHYSADDR(table),
|
||||||
ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL,
|
ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL,
|
||||||
FALSE, &table_index);
|
FALSE, &table_index);
|
||||||
|
if (table_idx) {
|
||||||
|
*table_idx = table_index;
|
||||||
|
}
|
||||||
|
|
||||||
if (ACPI_SUCCESS(status)) {
|
if (ACPI_SUCCESS(status)) {
|
||||||
|
|
||||||
/* Complete the initialization/resolution of new objects */
|
/* Complete the initialization/resolution of new objects */
|
||||||
|
@ -296,7 +296,7 @@ static __init int efivar_ssdt_load(void)
|
|||||||
goto free_data;
|
goto free_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = acpi_load_table(data);
|
ret = acpi_load_table(data, NULL);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
pr_err("failed to load table: %d\n", ret);
|
pr_err("failed to load table: %d\n", ret);
|
||||||
goto free_data;
|
goto free_data;
|
||||||
|
@ -458,7 +458,8 @@ ACPI_EXTERNAL_RETURN_STATUS(acpi_status ACPI_INIT_FUNCTION
|
|||||||
u8 physical))
|
u8 physical))
|
||||||
|
|
||||||
ACPI_EXTERNAL_RETURN_STATUS(acpi_status
|
ACPI_EXTERNAL_RETURN_STATUS(acpi_status
|
||||||
acpi_load_table(struct acpi_table_header *table))
|
acpi_load_table(struct acpi_table_header *table,
|
||||||
|
u32 *table_idx))
|
||||||
|
|
||||||
ACPI_EXTERNAL_RETURN_STATUS(acpi_status
|
ACPI_EXTERNAL_RETURN_STATUS(acpi_status
|
||||||
acpi_unload_table(u32 table_index))
|
acpi_unload_table(u32 table_index))
|
||||||
|
Loading…
Reference in New Issue
Block a user