Received: by 2002:a25:c593:0:0:0:0:0 with SMTP id v141csp647703ybe; Thu, 19 Sep 2019 01:17:13 -0700 (PDT) X-Google-Smtp-Source: APXvYqygAPb2I0zmgWB84O1mwHRtY9jNy5YcN0s/WuXGjt0wrj6jr4+VQctBds1dOEpca3xHS9dG X-Received: by 2002:a17:906:1998:: with SMTP id g24mr2997363ejd.305.1568881033869; Thu, 19 Sep 2019 01:17:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1568881033; cv=none; d=google.com; s=arc-20160816; b=ZT3t7WNIYCCrqOT3j8ZBoDqDuDjJXc4gdGaA5A+tJ499Yyc4vLKJkmOHK/bngcSKVw 0UZwyargB2NE14nl6FAYXBuXi7CJkR2DeYRoiCwR4+fAzEKB0MENS0RMfzhYlRR5Y5A6 Dd3+GUkrbX30A6UPgk+kRv7L8zwm2KkQ7XBZ24eyVbmKMFNH7rHeH5ji+rJXIO/2nmqP qFoC5azRamRKNwBxNQJyZDsKQElKSPkR9GTZFO59A5nuzGXpQNHhDoO63aAmOPOG/KmS 9NG6w9i2w+w/T7AWI/Z+mhYujKB4NflvijnyLOPeq6CNwvAfgwEihsVczSTDT6O7r1IE wtyA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=a5LG9hIYtbIOZEyAIOPe93/7vpVk9N2eQifAKYw5y8A=; b=vbVvr6uUsEfyYblZ9sZg5JvOy9+yQarMZfabL+FAF8ixws3E3/lRD5NA2gV5bSroBf i2eOxp0xdgn9sDN413kzLeZaP/iGBhFppV5rbr1Oo4936sUfrt3PC7P6YKgsv2fj2j2d lIsn8fMTQdcZHESGH/XJwe5ajkjQ8F/AK92fSjwdax98GEe2X0d984Tdd1w4zKcwnhtR T+Y1UzIujYZdTRjsXCk8/lhYc8sdVhABUSgBkn180HjVpKBEqkjRJXqSKN4AbDIWQ0M0 Czt7G1oMqDKhKiAQHeicXkzKRhMXoOPWQWgwpHI5mXYLSyupKkZHfx72E7Rz/WSIIXIQ IGxQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p2si1923448edx.106.2019.09.19.01.16.50; Thu, 19 Sep 2019 01:17:13 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731373AbfISINz (ORCPT + 99 others); Thu, 19 Sep 2019 04:13:55 -0400 Received: from cloudserver094114.home.pl ([79.96.170.134]:62598 "EHLO cloudserver094114.home.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725887AbfISINz (ORCPT ); Thu, 19 Sep 2019 04:13:55 -0400 Received: from 79.184.255.25.ipv4.supernova.orange.pl (79.184.255.25) (HELO kreacher.localnet) by serwer1319399.home.pl (79.96.170.134) with SMTP (IdeaSmtpServer 0.83.292) id 0ed5324655183c06; Thu, 19 Sep 2019 10:13:52 +0200 From: "Rafael J. Wysocki" To: Nikolaus Voss Cc: "Shevchenko, Andriy" , "Schmauss, Erik" , "Moore, Robert" , Len Brown , Jacek Anaszewski , Pavel Machek , Dan Murphy , linux-acpi@vger.kernel.org, devel@acpica.org, linux-kernel@vger.kernel.org, nv@vosn.de Subject: Re: [PATCH] ACPICA: make acpi_load_table() return table index Date: Thu, 19 Sep 2019 10:13:52 +0200 Message-ID: <6851700.HULMXZj6Ep@kreacher> In-Reply-To: <20190912080742.24642-1-nikolaus.voss@loewensteinmedical.de> References: <20190906174605.GY2680@smile.fi.intel.com> <20190912080742.24642-1-nikolaus.voss@loewensteinmedical.de> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thursday, September 12, 2019 10:07:42 AM CEST Nikolaus Voss wrote: > 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 > Fixes: d06c47e3dd07f ("ACPI: configfs: Resolve objects on host-directed table loads") > Signed-off-by: Nikolaus Voss Overall, I think that something similar to this patch will be needed, but please don't change the acpi_load_table() signature. Instead, define it as a wrapper around a new function called, say, acpi_load_table_with_index() that will take two arguments, like acpi_load_table() in your patch. Then, you'd only need to call acpi_load_table_with_index() directly from acpi_table_aml_write(). In that case, IMO, it will be easier to handle the divergence between the upstream ACPICA and the kernel in the future in case the upstream doesn't decide to incorporate your change. > --- > drivers/acpi/acpi_configfs.c | 2 +- > drivers/acpi/acpica/dbfileio.c | 2 +- > drivers/acpi/acpica/tbxfload.c | 8 ++++++-- > drivers/firmware/efi/efi.c | 2 +- > include/acpi/acpixf.h | 3 ++- > 5 files changed, 11 insertions(+), 6 deletions(-) > > diff --git a/drivers/acpi/acpi_configfs.c b/drivers/acpi/acpi_configfs.c > index 57d9d574d4dde..77f81242a28e6 100644 > --- a/drivers/acpi/acpi_configfs.c > +++ b/drivers/acpi/acpi_configfs.c > @@ -53,7 +53,7 @@ static ssize_t acpi_table_aml_write(struct config_item *cfg, > if (!table->header) > return -ENOMEM; > > - ret = acpi_load_table(table->header); > + ret = acpi_load_table(table->header, &table->index); > if (ret) { > kfree(table->header); > table->header = NULL; > diff --git a/drivers/acpi/acpica/dbfileio.c b/drivers/acpi/acpica/dbfileio.c > index c6e25734dc5cd..e1b6e54a96ac1 100644 > --- a/drivers/acpi/acpica/dbfileio.c > +++ b/drivers/acpi/acpica/dbfileio.c > @@ -93,7 +93,7 @@ acpi_status acpi_db_load_tables(struct acpi_new_table_desc *list_head) > while (table_list_head) { > table = table_list_head->table; > > - status = acpi_load_table(table); > + status = acpi_load_table(table, NULL); > if (ACPI_FAILURE(status)) { > if (status == AE_ALREADY_EXISTS) { > acpi_os_printf > diff --git a/drivers/acpi/acpica/tbxfload.c b/drivers/acpi/acpica/tbxfload.c > index 86f1693f6d29a..d08cd8ffcbdb6 100644 > --- a/drivers/acpi/acpica/tbxfload.c > +++ b/drivers/acpi/acpica/tbxfload.c > @@ -268,7 +268,8 @@ ACPI_EXPORT_SYMBOL_INIT(acpi_install_table) > * > * PARAMETERS: table - Pointer to a buffer containing the ACPI > * table to be loaded. > - * > + * table_idx - Pointer to a u32 for storing the table > + * index, might be NULL > * RETURN: Status > * > * DESCRIPTION: Dynamically load an ACPI table from the caller's buffer. Must > @@ -278,7 +279,7 @@ ACPI_EXPORT_SYMBOL_INIT(acpi_install_table) > * 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; > u32 table_index; > @@ -297,6 +298,9 @@ acpi_status acpi_load_table(struct acpi_table_header *table) > status = acpi_tb_install_and_load_table(ACPI_PTR_TO_PHYSADDR(table), > ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, > FALSE, &table_index); > + if (table_idx) > + *table_idx = table_index; > + > if (ACPI_SUCCESS(status)) { > > /* Complete the initialization/resolution of new objects */ > diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c > index ad3b1f4866b35..9773e4212baef 100644 > --- a/drivers/firmware/efi/efi.c > +++ b/drivers/firmware/efi/efi.c > @@ -308,7 +308,7 @@ static __init int efivar_ssdt_load(void) > goto free_data; > } > > - ret = acpi_load_table(data); > + ret = acpi_load_table(data, NULL); > if (ret) { > pr_err("failed to load table: %d\n", ret); > goto free_data; > diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h > index 3845c8fcc94e5..c90bbdc4146a6 100644 > --- a/include/acpi/acpixf.h > +++ b/include/acpi/acpixf.h > @@ -452,7 +452,8 @@ ACPI_EXTERNAL_RETURN_STATUS(acpi_status ACPI_INIT_FUNCTION > u8 physical)) > > 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_unload_parent_table(acpi_handle object)) >