Linux-ACPI Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH 0/3] PWM framework: add support referencing PWMs from ACPI 
@ 2019-05-29 12:18 Nikolaus Voss
  2019-05-29 12:18 ` [PATCH 1/3] ACPI: Resolve objects on host-directed table loads Nikolaus Voss
                   ` (2 more replies)
  0 siblings, 3 replies; 57+ messages in thread
From: Nikolaus Voss @ 2019-05-29 12:18 UTC (permalink / raw)
  To: Rafael J. Wysocki, Len Brown, Robert Moore, Erik Schmauss,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, Thierry Reding
  Cc: Nikolaus Voss, linux-acpi, devel, linux-leds, linux-pwm

As described in Documentation/firmware-guide/acpi/gpio-properties.rst a
GPIO can be referenced from ACPI ASL _DSD with the "gpios"-property of the
form:

  Package () { "gpios", Package () { ref, index, pin, active_low }}

The second patch of this series adds support for specifing a PWM
reference in ASL of the form

  Package () { "pwms", Package () { ref, index, pwm-period [, pwm flags]}}

The first patch of this series is necessary to resolve the "ref" in ASL
if the table has been loaded by efivar_ssdt_load() or configfs.

The third patch of this series makes leds-pwm use the ACPI-enabled
PWM framework.

Nikolaus Voss (3):
  ACPI: Resolve objects on host-directed table loads
  PWM framework: add support referencing PWMs from ACPI
  leds-pwm.c: support ACPI via firmware-node framework

 drivers/acpi/acpi_configfs.c   |   6 +-
 drivers/acpi/acpica/tbxfload.c |  11 ++++
 drivers/leds/leds-pwm.c        |  44 +++++++------
 drivers/pwm/core.c             | 112 +++++++++++++++++++++++++++++++++
 include/linux/pwm.h            |   9 +++
 5 files changed, 159 insertions(+), 23 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 57+ messages in thread

* [PATCH 1/3] ACPI: Resolve objects on host-directed table loads
  2019-05-29 12:18 [PATCH 0/3] PWM framework: add support referencing PWMs from ACPI Nikolaus Voss
@ 2019-05-29 12:18 ` Nikolaus Voss
  2019-05-30 14:42   ` Dan Murphy
  2019-08-14 18:50   ` Andy Shevchenko
  2019-05-29 12:18 ` [PATCH 2/3] PWM framework: add support referencing PWMs from ACPI Nikolaus Voss
  2019-05-29 12:18 ` [PATCH 3/3] leds-pwm.c: support ACPI via firmware-node framework Nikolaus Voss
  2 siblings, 2 replies; 57+ messages in thread
From: Nikolaus Voss @ 2019-05-29 12:18 UTC (permalink / raw)
  To: Rafael J. Wysocki, Len Brown, Robert Moore, Erik Schmauss,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, Thierry Reding
  Cc: Nikolaus Voss, linux-acpi, devel, linux-leds, linux-pwm

If an ACPI SSDT overlay is loaded after built-in tables
have been loaded e.g. via configfs or efivar_ssdt_load()
it is necessary to rewalk the namespace to resolve
references. Without this, relative and absolute paths
like ^PCI0.SBUS or \_SB.PCI0.SBUS are not resolved
correctly.

Make configfs load use the same method as efivar_ssdt_load().

Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
---
 drivers/acpi/acpi_configfs.c   |  6 +-----
 drivers/acpi/acpica/tbxfload.c | 11 +++++++++++
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/drivers/acpi/acpi_configfs.c b/drivers/acpi/acpi_configfs.c
index f92033661239..663f0d88f912 100644
--- a/drivers/acpi/acpi_configfs.c
+++ b/drivers/acpi/acpi_configfs.c
@@ -56,11 +56,7 @@ static ssize_t acpi_table_aml_write(struct config_item *cfg,
 	if (!table->header)
 		return -ENOMEM;
 
-	ACPI_INFO(("Host-directed Dynamic ACPI Table Load:"));
-	ret = acpi_tb_install_and_load_table(
-			ACPI_PTR_TO_PHYSADDR(table->header),
-			ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, FALSE,
-			&table->index);
+	ret = acpi_load_table(table->header);
 	if (ret) {
 		kfree(table->header);
 		table->header = NULL;
diff --git a/drivers/acpi/acpica/tbxfload.c b/drivers/acpi/acpica/tbxfload.c
index 4f30f06a6f78..61f2d46e52ba 100644
--- a/drivers/acpi/acpica/tbxfload.c
+++ b/drivers/acpi/acpica/tbxfload.c
@@ -297,6 +297,17 @@ 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 (!ACPI_FAILURE(status)) {
+		/* Complete the initialization/resolution of package objects */
+
+		status = acpi_ns_walk_namespace(ACPI_TYPE_PACKAGE,
+						ACPI_ROOT_OBJECT,
+						ACPI_UINT32_MAX, 0,
+						acpi_ns_init_one_package,
+						NULL, NULL, NULL);
+	}
+
 	return_ACPI_STATUS(status);
 }
 
-- 
2.17.1


^ permalink raw reply	[flat|nested] 57+ messages in thread

* [PATCH 2/3] PWM framework: add support referencing PWMs from ACPI
  2019-05-29 12:18 [PATCH 0/3] PWM framework: add support referencing PWMs from ACPI Nikolaus Voss
  2019-05-29 12:18 ` [PATCH 1/3] ACPI: Resolve objects on host-directed table loads Nikolaus Voss
@ 2019-05-29 12:18 ` Nikolaus Voss
  2019-05-30 14:54   ` Dan Murphy
  2019-05-29 12:18 ` [PATCH 3/3] leds-pwm.c: support ACPI via firmware-node framework Nikolaus Voss
  2 siblings, 1 reply; 57+ messages in thread
From: Nikolaus Voss @ 2019-05-29 12:18 UTC (permalink / raw)
  To: Rafael J. Wysocki, Len Brown, Robert Moore, Erik Schmauss,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, Thierry Reding
  Cc: Nikolaus Voss, linux-acpi, devel, linux-leds, linux-pwm

In analogy to referencing a GPIO using the "gpios" property from ACPI,
support referencing a PWM using the "pwms" property.

ACPI entries must look like
 Package () {"pwms", Package ()
     { <PWM device reference>, <PWM index>, <PWM period> [, <PWM flags>]}}

In contrast to the DT implementation, only _one_ PWM entry in the "pwms"
property is supported. As a consequence "pwm-names"-property and
con_id lookup aren't supported.

Support for ACPI is added via the firmware-node framework which is an
abstraction layer on top of ACPI/DT. To keep this patch clean, DT and
ACPI paths are kept separate. The firmware-node framework could be used
to unify both paths in a future patch.

To support leds-pwm driver, an additional method devm_fwnode_pwm_get()
which supports both ACPI and DT configuration is exported.

Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
---
 drivers/pwm/core.c  | 112 ++++++++++++++++++++++++++++++++++++++++++++
 include/linux/pwm.h |   9 ++++
 2 files changed, 121 insertions(+)

diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
index 275b5f399a1a..1d788c05193e 100644
--- a/drivers/pwm/core.c
+++ b/drivers/pwm/core.c
@@ -6,6 +6,7 @@
  * Copyright (C) 2011-2012 Avionic Design GmbH
  */
 
+#include <linux/acpi.h>
 #include <linux/module.h>
 #include <linux/pwm.h>
 #include <linux/radix-tree.h>
@@ -700,6 +701,75 @@ struct pwm_device *of_pwm_get(struct device_node *np, const char *con_id)
 }
 EXPORT_SYMBOL_GPL(of_pwm_get);
 
+static struct pwm_chip *device_to_pwmchip(struct device *dev)
+{
+	struct pwm_chip *chip;
+
+	mutex_lock(&pwm_lock);
+
+	list_for_each_entry(chip, &pwm_chips, list) {
+		struct acpi_device *adev = ACPI_COMPANION(chip->dev);
+
+		if ((chip->dev == dev) || (adev && &adev->dev == dev)) {
+			mutex_unlock(&pwm_lock);
+			return chip;
+		}
+	}
+
+	mutex_unlock(&pwm_lock);
+
+	return ERR_PTR(-EPROBE_DEFER);
+}
+
+/**
+ * acpi_pwm_get() - request a PWM via parsing "pwms" property in ACPI
+ * @fwnode: firmware node to get the "pwm" property from
+ *
+ * Returns the PWM device parsed from the fwnode and index specified in the
+ * "pwms" property or a negative error-code on failure.
+ * Values parsed from the device tree are stored in the returned PWM device
+ * object.
+ *
+ * This is analogous to of_pwm_get() except con_id is not yet supported.
+ * ACPI entries must look like
+ * Package () {"pwms", Package ()
+ *     { <PWM device reference>, <PWM index>, <PWM period> [, <PWM flags>]}}
+ *
+ * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded
+ * error code on failure.
+ */
+struct pwm_device *acpi_pwm_get(struct fwnode_handle *fwnode)
+{
+	struct fwnode_reference_args args;
+	struct pwm_chip *chip;
+	struct pwm_device *pwm = ERR_PTR(-ENODEV);
+	int ret;
+
+	memset(&args, 0, sizeof(args));
+	ret = __acpi_node_get_property_reference(fwnode, "pwms", 0, 3, &args);
+
+	if (!to_acpi_device_node(args.fwnode))
+		return ERR_PTR(-EINVAL);
+	if (args.nargs < 2)
+		return ERR_PTR(-EPROTO);
+
+	chip = device_to_pwmchip(&to_acpi_device_node(args.fwnode)->dev);
+	if (IS_ERR(chip))
+		return ERR_CAST(chip);
+
+	pwm = pwm_request_from_chip(chip, args.args[0], NULL);
+	if (IS_ERR(pwm))
+		return pwm;
+
+	pwm->args.period = args.args[1];
+	pwm->args.polarity = PWM_POLARITY_NORMAL;
+
+	if (args.nargs > 2 && args.args[2] & PWM_POLARITY_INVERTED)
+		pwm->args.polarity = PWM_POLARITY_INVERSED;
+
+	return pwm;
+}
+
 /**
  * pwm_add_table() - register PWM device consumers
  * @table: array of consumers to register
@@ -763,6 +833,10 @@ struct pwm_device *pwm_get(struct device *dev, const char *con_id)
 	if (IS_ENABLED(CONFIG_OF) && dev && dev->of_node)
 		return of_pwm_get(dev->of_node, con_id);
 
+	/* then lookup via ACPI */
+	if (dev && is_acpi_node(dev->fwnode))
+		return acpi_pwm_get(dev->fwnode);
+
 	/*
 	 * We look up the provider in the static table typically provided by
 	 * board setup code. We first try to lookup the consumer device by
@@ -942,6 +1016,44 @@ struct pwm_device *devm_of_pwm_get(struct device *dev, struct device_node *np,
 }
 EXPORT_SYMBOL_GPL(devm_of_pwm_get);
 
+/**
+ * devm_fwnode_pwm_get() - request a resource managed PWM from firmware node
+ * @dev: device for PWM consumer
+ * @fwnode: firmware node to get the PWM from
+ * @con_id: consumer name
+ *
+ * Returns the PWM device parsed from the firmware node. See of_pwm_get() and
+ * acpi_pwm_get() for a detailed description.
+ *
+ * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded
+ * error code on failure.
+ */
+struct pwm_device *devm_fwnode_pwm_get(struct device *dev,
+				       struct fwnode_handle *fwnode,
+				       const char *con_id)
+{
+	struct pwm_device **ptr, *pwm = ERR_PTR(-ENODEV);
+
+	ptr = devres_alloc(devm_pwm_release, sizeof(*ptr), GFP_KERNEL);
+	if (!ptr)
+		return ERR_PTR(-ENOMEM);
+
+	if (is_of_node(fwnode))
+		pwm = of_pwm_get(to_of_node(fwnode), con_id);
+	else if (is_acpi_node(fwnode))
+		pwm = acpi_pwm_get(fwnode);
+
+	if (!IS_ERR(pwm)) {
+		*ptr = pwm;
+		devres_add(dev, ptr);
+	} else {
+		devres_free(ptr);
+	}
+
+	return pwm;
+}
+EXPORT_SYMBOL_GPL(devm_fwnode_pwm_get);
+
 static int devm_pwm_match(struct device *dev, void *res, void *data)
 {
 	struct pwm_device **p = res;
diff --git a/include/linux/pwm.h b/include/linux/pwm.h
index eaa5c6e3fc9f..1a635916cdfb 100644
--- a/include/linux/pwm.h
+++ b/include/linux/pwm.h
@@ -411,6 +411,9 @@ void pwm_put(struct pwm_device *pwm);
 struct pwm_device *devm_pwm_get(struct device *dev, const char *con_id);
 struct pwm_device *devm_of_pwm_get(struct device *dev, struct device_node *np,
 				   const char *con_id);
+struct pwm_device *devm_fwnode_pwm_get(struct device *dev,
+				       struct fwnode_handle *fwnode,
+				       const char *con_id);
 void devm_pwm_put(struct device *dev, struct pwm_device *pwm);
 #else
 static inline struct pwm_device *pwm_request(int pwm_id, const char *label)
@@ -516,6 +519,12 @@ static inline struct pwm_device *devm_of_pwm_get(struct device *dev,
 	return ERR_PTR(-ENODEV);
 }
 
+static inline struct pwm_device *devm_fwnode_pwm_get(
+	struct device *dev, struct fwnode_handle *fwnode, const char *con_id)
+{
+	return ERR_PTR(-ENODEV);
+}
+
 static inline void devm_pwm_put(struct device *dev, struct pwm_device *pwm)
 {
 }
-- 
2.17.1


^ permalink raw reply	[flat|nested] 57+ messages in thread

* [PATCH 3/3] leds-pwm.c: support ACPI via firmware-node framework
  2019-05-29 12:18 [PATCH 0/3] PWM framework: add support referencing PWMs from ACPI Nikolaus Voss
  2019-05-29 12:18 ` [PATCH 1/3] ACPI: Resolve objects on host-directed table loads Nikolaus Voss
  2019-05-29 12:18 ` [PATCH 2/3] PWM framework: add support referencing PWMs from ACPI Nikolaus Voss
@ 2019-05-29 12:18 ` Nikolaus Voss
  2019-05-30 15:14   ` Dan Murphy
  2 siblings, 1 reply; 57+ messages in thread
From: Nikolaus Voss @ 2019-05-29 12:18 UTC (permalink / raw)
  To: Rafael J. Wysocki, Len Brown, Robert Moore, Erik Schmauss,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, Thierry Reding
  Cc: Nikolaus Voss, linux-acpi, devel, linux-leds, linux-pwm

DT specific handling is replaced by firmware-node abstration to support
ACPI specification of PWM LEDS.

Example ASL:
Device (PWML)
{
    Name (_HID, "PRP0001")
    Name (_DSD, Package () {
          ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
          Package () { Package () {"compatible",
                                    Package () {"pwm-leds"}}}})

    Device (PWL0)
    {
        Name (_HID, "PRP0001")
        Name (_DSD, Package () {
              ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
              Package () {
                           Package () {"label", "alarm-led"},
                           Package () {"pwms", Package ()
                                       {\_SB_.PCI0.PWM, 0, 600000, 0}},
                           Package () {"linux,default-state", "off"}}})
    }
}

Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
---
 drivers/leds/leds-pwm.c | 44 ++++++++++++++++++++++++-----------------
 1 file changed, 26 insertions(+), 18 deletions(-)

diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c
index af08bcdc4fd8..cc717dd6a12c 100644
--- a/drivers/leds/leds-pwm.c
+++ b/drivers/leds/leds-pwm.c
@@ -75,7 +75,7 @@ static inline size_t sizeof_pwm_leds_priv(int num_leds)
 }
 
 static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
-		       struct led_pwm *led, struct device_node *child)
+		       struct led_pwm *led, struct fwnode_handle *fwnode)
 {
 	struct led_pwm_data *led_data = &priv->leds[priv->num_leds];
 	struct pwm_args pargs;
@@ -88,8 +88,8 @@ static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
 	led_data->cdev.max_brightness = led->max_brightness;
 	led_data->cdev.flags = LED_CORE_SUSPENDRESUME;
 
-	if (child)
-		led_data->pwm = devm_of_pwm_get(dev, child, NULL);
+	if (fwnode)
+		led_data->pwm = devm_fwnode_pwm_get(dev, fwnode, NULL);
 	else
 		led_data->pwm = devm_pwm_get(dev, led->name);
 	if (IS_ERR(led_data->pwm)) {
@@ -114,7 +114,8 @@ static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
 	if (!led_data->period && (led->pwm_period_ns > 0))
 		led_data->period = led->pwm_period_ns;
 
-	ret = devm_of_led_classdev_register(dev, child, &led_data->cdev);
+	ret = devm_of_led_classdev_register(dev, to_of_node(fwnode),
+					    &led_data->cdev);
 	if (ret == 0) {
 		priv->num_leds++;
 		led_pwm_set(&led_data->cdev, led_data->cdev.brightness);
@@ -126,27 +127,34 @@ static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
 	return ret;
 }
 
-static int led_pwm_create_of(struct device *dev, struct led_pwm_priv *priv)
+static int led_pwm_create_fwnode(struct device *dev, struct led_pwm_priv *priv)
 {
-	struct device_node *child;
+	struct fwnode_handle *fwnode;
 	struct led_pwm led;
 	int ret = 0;
 
 	memset(&led, 0, sizeof(led));
 
-	for_each_child_of_node(dev->of_node, child) {
-		led.name = of_get_property(child, "label", NULL) ? :
-			   child->name;
+	device_for_each_child_node(dev, fwnode) {
+		ret = fwnode_property_read_string(fwnode, "label", &led.name);
+		if (ret && is_of_node(fwnode))
+			led.name = to_of_node(fwnode)->name;
+		if (!led.name) {
+			fwnode_handle_put(fwnode);
+			return -EINVAL;
+		}
 
-		led.default_trigger = of_get_property(child,
-						"linux,default-trigger", NULL);
-		led.active_low = of_property_read_bool(child, "active-low");
-		of_property_read_u32(child, "max-brightness",
-				     &led.max_brightness);
+		fwnode_property_read_string(fwnode, "linux,default-trigger",
+					    &led.default_trigger);
 
-		ret = led_pwm_add(dev, priv, &led, child);
+		led.active_low = fwnode_property_read_bool(fwnode,
+							   "active-low");
+		fwnode_property_read_u32(fwnode, "max-brightness",
+					 &led.max_brightness);
+
+		ret = led_pwm_add(dev, priv, &led, fwnode);
 		if (ret) {
-			of_node_put(child);
+			fwnode_handle_put(fwnode);
 			break;
 		}
 	}
@@ -164,7 +172,7 @@ static int led_pwm_probe(struct platform_device *pdev)
 	if (pdata)
 		count = pdata->num_leds;
 	else
-		count = of_get_child_count(pdev->dev.of_node);
+		count = device_get_child_node_count(&pdev->dev);
 
 	if (!count)
 		return -EINVAL;
@@ -182,7 +190,7 @@ static int led_pwm_probe(struct platform_device *pdev)
 				break;
 		}
 	} else {
-		ret = led_pwm_create_of(&pdev->dev, priv);
+		ret = led_pwm_create_fwnode(&pdev->dev, priv);
 	}
 
 	if (ret)
-- 
2.17.1


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 1/3] ACPI: Resolve objects on host-directed table loads
  2019-05-29 12:18 ` [PATCH 1/3] ACPI: Resolve objects on host-directed table loads Nikolaus Voss
@ 2019-05-30 14:42   ` Dan Murphy
  2019-05-31 12:23     ` Pavel Machek
  2019-05-31 12:46     ` Dan Murphy
  2019-08-14 18:50   ` Andy Shevchenko
  1 sibling, 2 replies; 57+ messages in thread
From: Dan Murphy @ 2019-05-30 14:42 UTC (permalink / raw)
  To: Nikolaus Voss, Rafael J. Wysocki, Len Brown, Robert Moore,
	Erik Schmauss, Jacek Anaszewski, Pavel Machek, Thierry Reding
  Cc: linux-acpi, devel, linux-leds, linux-pwm

Nikolaus

On 5/29/19 7:18 AM, Nikolaus Voss wrote:
> If an ACPI SSDT overlay is loaded after built-in tables
> have been loaded e.g. via configfs or efivar_ssdt_load()
> it is necessary to rewalk the namespace to resolve
> references. Without this, relative and absolute paths
> like ^PCI0.SBUS or \_SB.PCI0.SBUS are not resolved
> correctly.
>
> Make configfs load use the same method as efivar_ssdt_load().
>
> Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> ---
>   drivers/acpi/acpi_configfs.c   |  6 +-----
>   drivers/acpi/acpica/tbxfload.c | 11 +++++++++++
>   2 files changed, 12 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/acpi/acpi_configfs.c b/drivers/acpi/acpi_configfs.c
> index f92033661239..663f0d88f912 100644
> --- a/drivers/acpi/acpi_configfs.c
> +++ b/drivers/acpi/acpi_configfs.c
> @@ -56,11 +56,7 @@ static ssize_t acpi_table_aml_write(struct config_item *cfg,
>   	if (!table->header)
>   		return -ENOMEM;
>   
> -	ACPI_INFO(("Host-directed Dynamic ACPI Table Load:"));
> -	ret = acpi_tb_install_and_load_table(
> -			ACPI_PTR_TO_PHYSADDR(table->header),
> -			ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, FALSE,
> -			&table->index);
> +	ret = acpi_load_table(table->header);
>   	if (ret) {
>   		kfree(table->header);
>   		table->header = NULL;
> diff --git a/drivers/acpi/acpica/tbxfload.c b/drivers/acpi/acpica/tbxfload.c
> index 4f30f06a6f78..61f2d46e52ba 100644
> --- a/drivers/acpi/acpica/tbxfload.c
> +++ b/drivers/acpi/acpica/tbxfload.c
> @@ -297,6 +297,17 @@ 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 (!ACPI_FAILURE(status)) {
Checkpatch should complain about putting brackets around single 
statement if's.
> +		/* Complete the initialization/resolution of package objects */
> +

Extra new lines


Dan

> +		status = acpi_ns_walk_namespace(ACPI_TYPE_PACKAGE,
> +						ACPI_ROOT_OBJECT,
> +						ACPI_UINT32_MAX, 0,
> +						acpi_ns_init_one_package,
> +						NULL, NULL, NULL);
> +	}
> +
>   	return_ACPI_STATUS(status);
>   }
>   

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 2/3] PWM framework: add support referencing PWMs from ACPI
  2019-05-29 12:18 ` [PATCH 2/3] PWM framework: add support referencing PWMs from ACPI Nikolaus Voss
@ 2019-05-30 14:54   ` Dan Murphy
  2019-05-31 12:24     ` Pavel Machek
  2019-06-03  9:27     ` Nikolaus Voss
  0 siblings, 2 replies; 57+ messages in thread
From: Dan Murphy @ 2019-05-30 14:54 UTC (permalink / raw)
  To: Nikolaus Voss, Rafael J. Wysocki, Len Brown, Robert Moore,
	Erik Schmauss, Jacek Anaszewski, Pavel Machek, Thierry Reding
  Cc: linux-acpi, devel, linux-leds, linux-pwm

Nikolaus

On 5/29/19 7:18 AM, Nikolaus Voss wrote:
> In analogy to referencing a GPIO using the "gpios" property from ACPI,
> support referencing a PWM using the "pwms" property.
>
> ACPI entries must look like
>   Package () {"pwms", Package ()
>       { <PWM device reference>, <PWM index>, <PWM period> [, <PWM flags>]}}
>
> In contrast to the DT implementation, only _one_ PWM entry in the "pwms"
> property is supported. As a consequence "pwm-names"-property and
> con_id lookup aren't supported.
>
> Support for ACPI is added via the firmware-node framework which is an
> abstraction layer on top of ACPI/DT. To keep this patch clean, DT and
> ACPI paths are kept separate. The firmware-node framework could be used
> to unify both paths in a future patch.
>
> To support leds-pwm driver, an additional method devm_fwnode_pwm_get()
> which supports both ACPI and DT configuration is exported.
>
> Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> ---
>   drivers/pwm/core.c  | 112 ++++++++++++++++++++++++++++++++++++++++++++
>   include/linux/pwm.h |   9 ++++
>   2 files changed, 121 insertions(+)
>
> diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
> index 275b5f399a1a..1d788c05193e 100644
> --- a/drivers/pwm/core.c
> +++ b/drivers/pwm/core.c
> @@ -6,6 +6,7 @@
>    * Copyright (C) 2011-2012 Avionic Design GmbH
>    */
>   
> +#include <linux/acpi.h>
>   #include <linux/module.h>
>   #include <linux/pwm.h>
>   #include <linux/radix-tree.h>
> @@ -700,6 +701,75 @@ struct pwm_device *of_pwm_get(struct device_node *np, const char *con_id)
>   }
>   EXPORT_SYMBOL_GPL(of_pwm_get);
>   
> +static struct pwm_chip *device_to_pwmchip(struct device *dev)
> +{
> +	struct pwm_chip *chip;
> +
> +	mutex_lock(&pwm_lock);
> +
> +	list_for_each_entry(chip, &pwm_chips, list) {
> +		struct acpi_device *adev = ACPI_COMPANION(chip->dev);
> +
> +		if ((chip->dev == dev) || (adev && &adev->dev == dev)) {
> +			mutex_unlock(&pwm_lock);
> +			return chip;
> +		}
> +	}
> +
> +	mutex_unlock(&pwm_lock);
> +
> +	return ERR_PTR(-EPROBE_DEFER);
> +}
> +
> +/**
> + * acpi_pwm_get() - request a PWM via parsing "pwms" property in ACPI
> + * @fwnode: firmware node to get the "pwm" property from
> + *
> + * Returns the PWM device parsed from the fwnode and index specified in the
> + * "pwms" property or a negative error-code on failure.
> + * Values parsed from the device tree are stored in the returned PWM device
> + * object.
> + *
> + * This is analogous to of_pwm_get() except con_id is not yet supported.
> + * ACPI entries must look like
> + * Package () {"pwms", Package ()
> + *     { <PWM device reference>, <PWM index>, <PWM period> [, <PWM flags>]}}
> + *
> + * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded
> + * error code on failure.
> + */
> +struct pwm_device *acpi_pwm_get(struct fwnode_handle *fwnode)
static?
> +{
> +	struct fwnode_reference_args args;
> +	struct pwm_chip *chip;
> +	struct pwm_device *pwm = ERR_PTR(-ENODEV);
> +	int ret;
> +
> +	memset(&args, 0, sizeof(args));

args should be zero'd out when initialized on the stack so this is 
necessary.

> +	ret = __acpi_node_get_property_reference(fwnode, "pwms", 0, 3, &args);
> +
> +	if (!to_acpi_device_node(args.fwnode))
> +		return ERR_PTR(-EINVAL);
Add new line
> +	if (args.nargs < 2)
> +		return ERR_PTR(-EPROTO);
> +
> +	chip = device_to_pwmchip(&to_acpi_device_node(args.fwnode)->dev);
> +	if (IS_ERR(chip))
> +		return ERR_CAST(chip);
> +
> +	pwm = pwm_request_from_chip(chip, args.args[0], NULL);
> +	if (IS_ERR(pwm))
> +		return pwm;
> +
> +	pwm->args.period = args.args[1];
> +	pwm->args.polarity = PWM_POLARITY_NORMAL;
> +
> +	if (args.nargs > 2 && args.args[2] & PWM_POLARITY_INVERTED)
> +		pwm->args.polarity = PWM_POLARITY_INVERSED;
> +
> +	return pwm;
> +}
> +
>   /**
>    * pwm_add_table() - register PWM device consumers
>    * @table: array of consumers to register
> @@ -763,6 +833,10 @@ struct pwm_device *pwm_get(struct device *dev, const char *con_id)
>   	if (IS_ENABLED(CONFIG_OF) && dev && dev->of_node)
>   		return of_pwm_get(dev->of_node, con_id);
>   
> +	/* then lookup via ACPI */
> +	if (dev && is_acpi_node(dev->fwnode))
> +		return acpi_pwm_get(dev->fwnode);
> +
>   	/*
>   	 * We look up the provider in the static table typically provided by
>   	 * board setup code. We first try to lookup the consumer device by
> @@ -942,6 +1016,44 @@ struct pwm_device *devm_of_pwm_get(struct device *dev, struct device_node *np,
>   }
>   EXPORT_SYMBOL_GPL(devm_of_pwm_get);
>   
> +/**
> + * devm_fwnode_pwm_get() - request a resource managed PWM from firmware node
> + * @dev: device for PWM consumer
> + * @fwnode: firmware node to get the PWM from
> + * @con_id: consumer name
> + *
> + * Returns the PWM device parsed from the firmware node. See of_pwm_get() and
> + * acpi_pwm_get() for a detailed description.
> + *
> + * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded
> + * error code on failure.
> + */
> +struct pwm_device *devm_fwnode_pwm_get(struct device *dev,
> +				       struct fwnode_handle *fwnode,
> +				       const char *con_id)

I am wondering if it would be better just to convert the existing of_ 
calls to device_property calls and make it more generic.

Dan

> +{
> +	struct pwm_device **ptr, *pwm = ERR_PTR(-ENODEV);
> +
> +	ptr = devres_alloc(devm_pwm_release, sizeof(*ptr), GFP_KERNEL);
> +	if (!ptr)
> +		return ERR_PTR(-ENOMEM);
> +
> +	if (is_of_node(fwnode))
> +		pwm = of_pwm_get(to_of_node(fwnode), con_id);
> +	else if (is_acpi_node(fwnode))
> +		pwm = acpi_pwm_get(fwnode);
> +
> +	if (!IS_ERR(pwm)) {
> +		*ptr = pwm;
> +		devres_add(dev, ptr);
> +	} else {
> +		devres_free(ptr);
> +	}
> +
> +	return pwm;
> +}
> +EXPORT_SYMBOL_GPL(devm_fwnode_pwm_get);
> +
>   static int devm_pwm_match(struct device *dev, void *res, void *data)
>   {
>   	struct pwm_device **p = res;
> diff --git a/include/linux/pwm.h b/include/linux/pwm.h
> index eaa5c6e3fc9f..1a635916cdfb 100644
> --- a/include/linux/pwm.h
> +++ b/include/linux/pwm.h
> @@ -411,6 +411,9 @@ void pwm_put(struct pwm_device *pwm);
>   struct pwm_device *devm_pwm_get(struct device *dev, const char *con_id);
>   struct pwm_device *devm_of_pwm_get(struct device *dev, struct device_node *np,
>   				   const char *con_id);
> +struct pwm_device *devm_fwnode_pwm_get(struct device *dev,
> +				       struct fwnode_handle *fwnode,
> +				       const char *con_id);
>   void devm_pwm_put(struct device *dev, struct pwm_device *pwm);
>   #else
>   static inline struct pwm_device *pwm_request(int pwm_id, const char *label)
> @@ -516,6 +519,12 @@ static inline struct pwm_device *devm_of_pwm_get(struct device *dev,
>   	return ERR_PTR(-ENODEV);
>   }
>   
> +static inline struct pwm_device *devm_fwnode_pwm_get(
> +	struct device *dev, struct fwnode_handle *fwnode, const char *con_id)
> +{
> +	return ERR_PTR(-ENODEV);
> +}
> +
>   static inline void devm_pwm_put(struct device *dev, struct pwm_device *pwm)
>   {
>   }

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 3/3] leds-pwm.c: support ACPI via firmware-node framework
  2019-05-29 12:18 ` [PATCH 3/3] leds-pwm.c: support ACPI via firmware-node framework Nikolaus Voss
@ 2019-05-30 15:14   ` Dan Murphy
  2019-06-03  9:44     ` Nikolaus Voss
  0 siblings, 1 reply; 57+ messages in thread
From: Dan Murphy @ 2019-05-30 15:14 UTC (permalink / raw)
  To: Nikolaus Voss, Rafael J. Wysocki, Len Brown, Robert Moore,
	Erik Schmauss, Jacek Anaszewski, Pavel Machek, Thierry Reding
  Cc: linux-acpi, devel, linux-leds, linux-pwm


On 5/29/19 7:18 AM, Nikolaus Voss wrote:
> DT specific handling is replaced by firmware-node abstration to support
> ACPI specification of PWM LEDS.
>
> Example ASL:
> Device (PWML)
> {
>      Name (_HID, "PRP0001")
>      Name (_DSD, Package () {
>            ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
>            Package () { Package () {"compatible",
>                                      Package () {"pwm-leds"}}}})
>
>      Device (PWL0)
>      {
>          Name (_HID, "PRP0001")
>          Name (_DSD, Package () {
>                ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
>                Package () {
>                             Package () {"label", "alarm-led"},
>                             Package () {"pwms", Package ()
>                                         {\_SB_.PCI0.PWM, 0, 600000, 0}},
>                             Package () {"linux,default-state", "off"}}})
>      }
> }
>
> Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> ---
>   drivers/leds/leds-pwm.c | 44 ++++++++++++++++++++++++-----------------
>   1 file changed, 26 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c
> index af08bcdc4fd8..cc717dd6a12c 100644
> --- a/drivers/leds/leds-pwm.c
> +++ b/drivers/leds/leds-pwm.c
> @@ -75,7 +75,7 @@ static inline size_t sizeof_pwm_leds_priv(int num_leds)
>   }
>   
>   static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
> -		       struct led_pwm *led, struct device_node *child)
> +		       struct led_pwm *led, struct fwnode_handle *fwnode)
>   {
>   	struct led_pwm_data *led_data = &priv->leds[priv->num_leds];
>   	struct pwm_args pargs;
> @@ -88,8 +88,8 @@ static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
>   	led_data->cdev.max_brightness = led->max_brightness;
>   	led_data->cdev.flags = LED_CORE_SUSPENDRESUME;
>   
> -	if (child)
> -		led_data->pwm = devm_of_pwm_get(dev, child, NULL);
> +	if (fwnode)
> +		led_data->pwm = devm_fwnode_pwm_get(dev, fwnode, NULL);
>   	else
>   		led_data->pwm = devm_pwm_get(dev, led->name);
>   	if (IS_ERR(led_data->pwm)) {
> @@ -114,7 +114,8 @@ static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
>   	if (!led_data->period && (led->pwm_period_ns > 0))
>   		led_data->period = led->pwm_period_ns;
>   
> -	ret = devm_of_led_classdev_register(dev, child, &led_data->cdev);
> +	ret = devm_of_led_classdev_register(dev, to_of_node(fwnode),
> +					    &led_data->cdev);
>   	if (ret == 0) {
>   		priv->num_leds++;
>   		led_pwm_set(&led_data->cdev, led_data->cdev.brightness);
> @@ -126,27 +127,34 @@ static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
>   	return ret;
>   }
>   
> -static int led_pwm_create_of(struct device *dev, struct led_pwm_priv *priv)
> +static int led_pwm_create_fwnode(struct device *dev, struct led_pwm_priv *priv)
>   {
> -	struct device_node *child;
> +	struct fwnode_handle *fwnode;
>   	struct led_pwm led;
>   	int ret = 0;
>   
>   	memset(&led, 0, sizeof(led));
>   
> -	for_each_child_of_node(dev->of_node, child) {
> -		led.name = of_get_property(child, "label", NULL) ? :
> -			   child->name;
> +	device_for_each_child_node(dev, fwnode) {
> +		ret = fwnode_property_read_string(fwnode, "label", &led.name);
> +		if (ret && is_of_node(fwnode))
> +			led.name = to_of_node(fwnode)->name;

new line


> +		if (!led.name) {
> +			fwnode_handle_put(fwnode);
> +			return -EINVAL;
> +		}

'label' is an optional parameter for device tree returning here makes it 
required.

Maybe derive a default name.  There is a patch series which is going to 
modify how labels are created for LED class devices.

https://lore.kernel.org/patchwork/project/lkml/list/?series=391005

>   
> -		led.default_trigger = of_get_property(child,
> -						"linux,default-trigger", NULL);
> -		led.active_low = of_property_read_bool(child, "active-low");
> -		of_property_read_u32(child, "max-brightness",
> -				     &led.max_brightness);
> +		fwnode_property_read_string(fwnode, "linux,default-trigger",
> +					    &led.default_trigger);
>   
> -		ret = led_pwm_add(dev, priv, &led, child);
> +		led.active_low = fwnode_property_read_bool(fwnode,
> +							   "active-low");
> +		fwnode_property_read_u32(fwnode, "max-brightness",
> +					 &led.max_brightness);
> +
> +		ret = led_pwm_add(dev, priv, &led, fwnode);
>   		if (ret) {
> -			of_node_put(child);
> +			fwnode_handle_put(fwnode);
>   			break;
>   		}
>   	}
> @@ -164,7 +172,7 @@ static int led_pwm_probe(struct platform_device *pdev)
>   	if (pdata)
>   		count = pdata->num_leds;
>   	else
> -		count = of_get_child_count(pdev->dev.of_node);
> +		count = device_get_child_node_count(&pdev->dev);
>   
>   	if (!count)
>   		return -EINVAL;
> @@ -182,7 +190,7 @@ static int led_pwm_probe(struct platform_device *pdev)
>   				break;
>   		}
>   	} else {
> -		ret = led_pwm_create_of(&pdev->dev, priv);
> +		ret = led_pwm_create_fwnode(&pdev->dev, priv);
>   	}
>   
>   	if (ret)

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 1/3] ACPI: Resolve objects on host-directed table loads
  2019-05-30 14:42   ` Dan Murphy
@ 2019-05-31 12:23     ` Pavel Machek
  2019-05-31 12:45       ` Dan Murphy
  2019-05-31 12:46     ` Dan Murphy
  1 sibling, 1 reply; 57+ messages in thread
From: Pavel Machek @ 2019-05-31 12:23 UTC (permalink / raw)
  To: Dan Murphy
  Cc: Nikolaus Voss, Rafael J. Wysocki, Len Brown, Robert Moore,
	Erik Schmauss, Jacek Anaszewski, Thierry Reding, linux-acpi,
	devel, linux-leds, linux-pwm

[-- Attachment #1: Type: text/plain, Size: 850 bytes --]

Hi!

> >diff --git a/drivers/acpi/acpica/tbxfload.c b/drivers/acpi/acpica/tbxfload.c
> >index 4f30f06a6f78..61f2d46e52ba 100644
> >--- a/drivers/acpi/acpica/tbxfload.c
> >+++ b/drivers/acpi/acpica/tbxfload.c
> >@@ -297,6 +297,17 @@ 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 (!ACPI_FAILURE(status)) {
> Checkpatch should complain about putting brackets around single statement
> if's.

With multiline statement like that and including comment -- I'd say
keep {'s. It is cleaner this way.
									Pavel


-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 2/3] PWM framework: add support referencing PWMs from ACPI
  2019-05-30 14:54   ` Dan Murphy
@ 2019-05-31 12:24     ` Pavel Machek
  2019-06-03  9:27     ` Nikolaus Voss
  1 sibling, 0 replies; 57+ messages in thread
From: Pavel Machek @ 2019-05-31 12:24 UTC (permalink / raw)
  To: Dan Murphy
  Cc: Nikolaus Voss, Rafael J. Wysocki, Len Brown, Robert Moore,
	Erik Schmauss, Jacek Anaszewski, Thierry Reding, linux-acpi,
	devel, linux-leds, linux-pwm

[-- Attachment #1: Type: text/plain, Size: 521 bytes --]

Hi!

> >+struct pwm_device *acpi_pwm_get(struct fwnode_handle *fwnode)
> static?
> >+{
> >+	struct fwnode_reference_args args;
> >+	struct pwm_chip *chip;
> >+	struct pwm_device *pwm = ERR_PTR(-ENODEV);
> >+	int ret;
> >+
> >+	memset(&args, 0, sizeof(args));
> 
> args should be zero'd out when initialized on the stack so this is
> necessary.

What?
								Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 1/3] ACPI: Resolve objects on host-directed table loads
  2019-05-31 12:23     ` Pavel Machek
@ 2019-05-31 12:45       ` Dan Murphy
  0 siblings, 0 replies; 57+ messages in thread
From: Dan Murphy @ 2019-05-31 12:45 UTC (permalink / raw)
  To: Pavel Machek
  Cc: Nikolaus Voss, Rafael J. Wysocki, Len Brown, Robert Moore,
	Erik Schmauss, Jacek Anaszewski, Thierry Reding, linux-acpi,
	devel, linux-leds, linux-pwm

Pavel

On 5/31/19 7:23 AM, Pavel Machek wrote:
> Hi!
>
>>> diff --git a/drivers/acpi/acpica/tbxfload.c b/drivers/acpi/acpica/tbxfload.c
>>> index 4f30f06a6f78..61f2d46e52ba 100644
>>> --- a/drivers/acpi/acpica/tbxfload.c
>>> +++ b/drivers/acpi/acpica/tbxfload.c
>>> @@ -297,6 +297,17 @@ 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 (!ACPI_FAILURE(status)) {
>> Checkpatch should complain about putting brackets around single statement
>> if's.
> With multiline statement like that and including comment -- I'd say
> keep {'s. It is cleaner this way.

Maintainers preference.  I won't nack the patch for it.

Not sure their preference as I don't usually submit to acpi.

Dan


> 									Pavel
>
>

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 1/3] ACPI: Resolve objects on host-directed table loads
  2019-05-30 14:42   ` Dan Murphy
  2019-05-31 12:23     ` Pavel Machek
@ 2019-05-31 12:46     ` Dan Murphy
  2019-06-03  9:12       ` Nikolaus Voss
  1 sibling, 1 reply; 57+ messages in thread
From: Dan Murphy @ 2019-05-31 12:46 UTC (permalink / raw)
  To: Nikolaus Voss, Rafael J. Wysocki, Len Brown, Robert Moore,
	Erik Schmauss, Jacek Anaszewski, Pavel Machek, Thierry Reding
  Cc: linux-acpi, devel, linux-leds, linux-pwm

Nikolaus

On 5/30/19 9:42 AM, Dan Murphy wrote:
> Nikolaus
>
> On 5/29/19 7:18 AM, Nikolaus Voss wrote:
>> If an ACPI SSDT overlay is loaded after built-in tables
>> have been loaded e.g. via configfs or efivar_ssdt_load()
>> it is necessary to rewalk the namespace to resolve
>> references. Without this, relative and absolute paths
>> like ^PCI0.SBUS or \_SB.PCI0.SBUS are not resolved
>> correctly.
>>
>> Make configfs load use the same method as efivar_ssdt_load().
>>
>> Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
>> ---
>>   drivers/acpi/acpi_configfs.c   |  6 +-----
>>   drivers/acpi/acpica/tbxfload.c | 11 +++++++++++
>>   2 files changed, 12 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/acpi/acpi_configfs.c b/drivers/acpi/acpi_configfs.c
>> index f92033661239..663f0d88f912 100644
>> --- a/drivers/acpi/acpi_configfs.c
>> +++ b/drivers/acpi/acpi_configfs.c
>> @@ -56,11 +56,7 @@ static ssize_t acpi_table_aml_write(struct 
>> config_item *cfg,
>>       if (!table->header)
>>           return -ENOMEM;
>>   -    ACPI_INFO(("Host-directed Dynamic ACPI Table Load:"));
>> -    ret = acpi_tb_install_and_load_table(
>> -            ACPI_PTR_TO_PHYSADDR(table->header),
>> -            ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, FALSE,
>> -            &table->index);
>> +    ret = acpi_load_table(table->header);
>>       if (ret) {
>>           kfree(table->header);
>>           table->header = NULL;
>> diff --git a/drivers/acpi/acpica/tbxfload.c 
>> b/drivers/acpi/acpica/tbxfload.c
>> index 4f30f06a6f78..61f2d46e52ba 100644
>> --- a/drivers/acpi/acpica/tbxfload.c
>> +++ b/drivers/acpi/acpica/tbxfload.c
>> @@ -297,6 +297,17 @@ 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 (!ACPI_FAILURE(status)) {
> Checkpatch should complain about putting brackets around single 
> statement if's.

Would ACPI_SUCCESS make more sense here?

Dan

<snip>

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 1/3] ACPI: Resolve objects on host-directed table loads
  2019-05-31 12:46     ` Dan Murphy
@ 2019-06-03  9:12       ` Nikolaus Voss
  0 siblings, 0 replies; 57+ messages in thread
From: Nikolaus Voss @ 2019-06-03  9:12 UTC (permalink / raw)
  To: Dan Murphy
  Cc: Rafael J. Wysocki, Len Brown, Robert Moore, Erik Schmauss,
	Jacek Anaszewski, Pavel Machek, Thierry Reding, linux-acpi,
	devel, linux-leds, linux-pwm

[-- Attachment #1: Type: text/plain, Size: 2359 bytes --]

Dan,

On Fri, 31 May 2019, Dan Murphy wrote:
> Nikolaus
>
> On 5/30/19 9:42 AM, Dan Murphy wrote:
>> Nikolaus
>>
>> On 5/29/19 7:18 AM, Nikolaus Voss wrote:
>>> If an ACPI SSDT overlay is loaded after built-in tables
>>> have been loaded e.g. via configfs or efivar_ssdt_load()
>>> it is necessary to rewalk the namespace to resolve
>>> references. Without this, relative and absolute paths
>>> like ^PCI0.SBUS or \_SB.PCI0.SBUS are not resolved
>>> correctly.
>>>
>>> Make configfs load use the same method as efivar_ssdt_load().
>>>
>>> Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
>>> ---
>>>   drivers/acpi/acpi_configfs.c   |  6 +-----
>>>   drivers/acpi/acpica/tbxfload.c | 11 +++++++++++
>>>   2 files changed, 12 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/drivers/acpi/acpi_configfs.c b/drivers/acpi/acpi_configfs.c
>>> index f92033661239..663f0d88f912 100644
>>> --- a/drivers/acpi/acpi_configfs.c
>>> +++ b/drivers/acpi/acpi_configfs.c
>>> @@ -56,11 +56,7 @@ static ssize_t acpi_table_aml_write(struct
>>> config_item *cfg,
>>>       if (!table->header)
>>>           return -ENOMEM;
>>>   -    ACPI_INFO(("Host-directed Dynamic ACPI Table Load:"));
>>> -    ret = acpi_tb_install_and_load_table(
>>> -            ACPI_PTR_TO_PHYSADDR(table->header),
>>> -            ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, FALSE,
>>> -            &table->index);
>>> +    ret = acpi_load_table(table->header);
>>>       if (ret) {
>>>           kfree(table->header);
>>>           table->header = NULL;
>>> diff --git a/drivers/acpi/acpica/tbxfload.c
>>> b/drivers/acpi/acpica/tbxfload.c
>>> index 4f30f06a6f78..61f2d46e52ba 100644
>>> --- a/drivers/acpi/acpica/tbxfload.c
>>> +++ b/drivers/acpi/acpica/tbxfload.c
>>> @@ -297,6 +297,17 @@ 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 (!ACPI_FAILURE(status)) {
>> Checkpatch should complain about putting brackets around single
>> statement if's.
>
> Would ACPI_SUCCESS make more sense here?

yes, changed.

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 2/3] PWM framework: add support referencing PWMs from ACPI
  2019-05-30 14:54   ` Dan Murphy
  2019-05-31 12:24     ` Pavel Machek
@ 2019-06-03  9:27     ` Nikolaus Voss
  1 sibling, 0 replies; 57+ messages in thread
From: Nikolaus Voss @ 2019-06-03  9:27 UTC (permalink / raw)
  To: Dan Murphy
  Cc: Rafael J. Wysocki, Len Brown, Robert Moore, Erik Schmauss,
	Jacek Anaszewski, Pavel Machek, Thierry Reding, linux-acpi,
	devel, linux-leds, linux-pwm

Dan,

On Thu, 30 May 2019, Dan Murphy wrote:
> Nikolaus
>
> On 5/29/19 7:18 AM, Nikolaus Voss wrote:
>> In analogy to referencing a GPIO using the "gpios" property from ACPI,
>> support referencing a PWM using the "pwms" property.
>>
>> ACPI entries must look like
>>   Package () {"pwms", Package ()
>>       { <PWM device reference>, <PWM index>, <PWM period> [, <PWM flags>]}}
>>
>> In contrast to the DT implementation, only _one_ PWM entry in the "pwms"
>> property is supported. As a consequence "pwm-names"-property and
>> con_id lookup aren't supported.
>>
>> Support for ACPI is added via the firmware-node framework which is an
>> abstraction layer on top of ACPI/DT. To keep this patch clean, DT and
>> ACPI paths are kept separate. The firmware-node framework could be used
>> to unify both paths in a future patch.
>>
>> To support leds-pwm driver, an additional method devm_fwnode_pwm_get()
>> which supports both ACPI and DT configuration is exported.
>>
>> Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
>> ---
>>   drivers/pwm/core.c  | 112 ++++++++++++++++++++++++++++++++++++++++++++
>>   include/linux/pwm.h |   9 ++++
>>   2 files changed, 121 insertions(+)
>>
>> diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
>> index 275b5f399a1a..1d788c05193e 100644
>> --- a/drivers/pwm/core.c
>> +++ b/drivers/pwm/core.c
>> @@ -6,6 +6,7 @@
>>    * Copyright (C) 2011-2012 Avionic Design GmbH
>>    */
>>
>> +#include <linux/acpi.h>
>>   #include <linux/module.h>
>>   #include <linux/pwm.h>
>>   #include <linux/radix-tree.h>
>> @@ -700,6 +701,75 @@ struct pwm_device *of_pwm_get(struct device_node *np, const char *con_id)
>>   }
>>   EXPORT_SYMBOL_GPL(of_pwm_get);
>>
>> +static struct pwm_chip *device_to_pwmchip(struct device *dev)
>> +{
>> +     struct pwm_chip *chip;
>> +
>> +     mutex_lock(&pwm_lock);
>> +
>> +     list_for_each_entry(chip, &pwm_chips, list) {
>> +             struct acpi_device *adev = ACPI_COMPANION(chip->dev);
>> +
>> +             if ((chip->dev == dev) || (adev && &adev->dev == dev)) {
>> +                     mutex_unlock(&pwm_lock);
>> +                     return chip;
>> +             }
>> +     }
>> +
>> +     mutex_unlock(&pwm_lock);
>> +
>> +     return ERR_PTR(-EPROBE_DEFER);
>> +}
>> +
>> +/**
>> + * acpi_pwm_get() - request a PWM via parsing "pwms" property in ACPI
>> + * @fwnode: firmware node to get the "pwm" property from
>> + *
>> + * Returns the PWM device parsed from the fwnode and index specified in the
>> + * "pwms" property or a negative error-code on failure.
>> + * Values parsed from the device tree are stored in the returned PWM device
>> + * object.
>> + *
>> + * This is analogous to of_pwm_get() except con_id is not yet supported.
>> + * ACPI entries must look like
>> + * Package () {"pwms", Package ()
>> + *     { <PWM device reference>, <PWM index>, <PWM period> [, <PWM flags>]}}
>> + *
>> + * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded
>> + * error code on failure.
>> + */
>> +struct pwm_device *acpi_pwm_get(struct fwnode_handle *fwnode)
> static?
yes, changed.

>> +{
>> +     struct fwnode_reference_args args;
>> +     struct pwm_chip *chip;
>> +     struct pwm_device *pwm = ERR_PTR(-ENODEV);
>> +     int ret;
>> +
>> +     memset(&args, 0, sizeof(args));
>
> args should be zero'd out when initialized on the stack so this is
> necessary.
>
>> +     ret = __acpi_node_get_property_reference(fwnode, "pwms", 0, 3, &args);
>> +
>> +     if (!to_acpi_device_node(args.fwnode))
>> +             return ERR_PTR(-EINVAL);
> Add new line
ok

>> +     if (args.nargs < 2)
>> +             return ERR_PTR(-EPROTO);
>> +
>> +     chip = device_to_pwmchip(&to_acpi_device_node(args.fwnode)->dev);
>> +     if (IS_ERR(chip))
>> +             return ERR_CAST(chip);
>> +
>> +     pwm = pwm_request_from_chip(chip, args.args[0], NULL);
>> +     if (IS_ERR(pwm))
>> +             return pwm;
>> +
>> +     pwm->args.period = args.args[1];
>> +     pwm->args.polarity = PWM_POLARITY_NORMAL;
>> +
>> +     if (args.nargs > 2 && args.args[2] & PWM_POLARITY_INVERTED)
>> +             pwm->args.polarity = PWM_POLARITY_INVERSED;
>> +
>> +     return pwm;
>> +}
>> +
>>   /**
>>    * pwm_add_table() - register PWM device consumers
>>    * @table: array of consumers to register
>> @@ -763,6 +833,10 @@ struct pwm_device *pwm_get(struct device *dev, const char *con_id)
>>       if (IS_ENABLED(CONFIG_OF) && dev && dev->of_node)
>>               return of_pwm_get(dev->of_node, con_id);
>>
>> +     /* then lookup via ACPI */
>> +     if (dev && is_acpi_node(dev->fwnode))
>> +             return acpi_pwm_get(dev->fwnode);
>> +
>>       /*
>>        * We look up the provider in the static table typically provided by
>>        * board setup code. We first try to lookup the consumer device by
>> @@ -942,6 +1016,44 @@ struct pwm_device *devm_of_pwm_get(struct device *dev, struct device_node *np,
>>   }
>>   EXPORT_SYMBOL_GPL(devm_of_pwm_get);
>>
>> +/**
>> + * devm_fwnode_pwm_get() - request a resource managed PWM from firmware node
>> + * @dev: device for PWM consumer
>> + * @fwnode: firmware node to get the PWM from
>> + * @con_id: consumer name
>> + *
>> + * Returns the PWM device parsed from the firmware node. See of_pwm_get() and
>> + * acpi_pwm_get() for a detailed description.
>> + *
>> + * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded
>> + * error code on failure.
>> + */
>> +struct pwm_device *devm_fwnode_pwm_get(struct device *dev,
>> +                                    struct fwnode_handle *fwnode,
>> +                                    const char *con_id)
>
> I am wondering if it would be better just to convert the existing of_
> calls to device_property calls and make it more generic.

With this first patch I wanted to keep DT and ACPI paths separate. Merging 
the two paths as far as possible is reasonable but should be done in a 
second step.

Nikolaus

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 3/3] leds-pwm.c: support ACPI via firmware-node framework
  2019-05-30 15:14   ` Dan Murphy
@ 2019-06-03  9:44     ` Nikolaus Voss
  0 siblings, 0 replies; 57+ messages in thread
From: Nikolaus Voss @ 2019-06-03  9:44 UTC (permalink / raw)
  To: Dan Murphy
  Cc: Rafael J. Wysocki, Len Brown, Robert Moore, Erik Schmauss,
	Jacek Anaszewski, Pavel Machek, Thierry Reding, linux-acpi,
	devel, linux-leds, linux-pwm

[-- Attachment #1: Type: text/plain, Size: 4134 bytes --]

Dan,

On Thu, 30 May 2019, Dan Murphy wrote:
>
> On 5/29/19 7:18 AM, Nikolaus Voss wrote:
>> DT specific handling is replaced by firmware-node abstration to support
>> ACPI specification of PWM LEDS.
>>
>> Example ASL:
>> Device (PWML)
>> {
>>      Name (_HID, "PRP0001")
>>      Name (_DSD, Package () {
>>            ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
>>            Package () { Package () {"compatible",
>>                                      Package () {"pwm-leds"}}}})
>>
>>      Device (PWL0)
>>      {
>>          Name (_HID, "PRP0001")
>>          Name (_DSD, Package () {
>>                ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
>>                Package () {
>>                             Package () {"label", "alarm-led"},
>>                             Package () {"pwms", Package ()
>>                                         {\_SB_.PCI0.PWM, 0, 600000, 0}},
>>                             Package () {"linux,default-state", "off"}}})
>>      }
>> }
>>
>> Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
>> ---
>>   drivers/leds/leds-pwm.c | 44 ++++++++++++++++++++++++-----------------
>>   1 file changed, 26 insertions(+), 18 deletions(-)
>>
>> diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c
>> index af08bcdc4fd8..cc717dd6a12c 100644
>> --- a/drivers/leds/leds-pwm.c
>> +++ b/drivers/leds/leds-pwm.c
>> @@ -75,7 +75,7 @@ static inline size_t sizeof_pwm_leds_priv(int num_leds)
>>   }
>>
>>   static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
>> -		       struct led_pwm *led, struct device_node *child)
>> +		       struct led_pwm *led, struct fwnode_handle *fwnode)
>>   {
>>   	struct led_pwm_data *led_data = &priv->leds[priv->num_leds];
>>   	struct pwm_args pargs;
>> @@ -88,8 +88,8 @@ static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
>>   	led_data->cdev.max_brightness = led->max_brightness;
>>   	led_data->cdev.flags = LED_CORE_SUSPENDRESUME;
>>
>> -	if (child)
>> -		led_data->pwm = devm_of_pwm_get(dev, child, NULL);
>> +	if (fwnode)
>> +		led_data->pwm = devm_fwnode_pwm_get(dev, fwnode, NULL);
>>   	else
>>   		led_data->pwm = devm_pwm_get(dev, led->name);
>>   	if (IS_ERR(led_data->pwm)) {
>> @@ -114,7 +114,8 @@ static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
>>   	if (!led_data->period && (led->pwm_period_ns > 0))
>>   		led_data->period = led->pwm_period_ns;
>>
>> -	ret = devm_of_led_classdev_register(dev, child, &led_data->cdev);
>> +	ret = devm_of_led_classdev_register(dev, to_of_node(fwnode),
>> +					    &led_data->cdev);
>>   	if (ret == 0) {
>>   		priv->num_leds++;
>>   		led_pwm_set(&led_data->cdev, led_data->cdev.brightness);
>> @@ -126,27 +127,34 @@ static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
>>   	return ret;
>>   }
>>
>> -static int led_pwm_create_of(struct device *dev, struct led_pwm_priv *priv)
>> +static int led_pwm_create_fwnode(struct device *dev, struct led_pwm_priv *priv)
>>   {
>> -	struct device_node *child;
>> +	struct fwnode_handle *fwnode;
>>   	struct led_pwm led;
>>   	int ret = 0;
>>
>>   	memset(&led, 0, sizeof(led));
>>
>> -	for_each_child_of_node(dev->of_node, child) {
>> -		led.name = of_get_property(child, "label", NULL) ? :
>> -			   child->name;
>> +	device_for_each_child_node(dev, fwnode) {
>> +		ret = fwnode_property_read_string(fwnode, "label", &led.name);
>> +		if (ret && is_of_node(fwnode))
>> +			led.name = to_of_node(fwnode)->name;
>
> new line
ok

>
>
>> +		if (!led.name) {
>> +			fwnode_handle_put(fwnode);
>> +			return -EINVAL;
>> +		}
>
> 'label' is an optional parameter for device tree returning here makes it
> required.
>
> Maybe derive a default name.  There is a patch series which is going to
> modify how labels are created for LED class devices.
>
> https://lore.kernel.org/patchwork/project/lkml/list/?series=391005

Looks interesting, thanks for the pointer. But that would be a second 
step.

My patch handles name derivation the same way as the leds-gpio driver 
already does. I think it should be handled consistently among drivers of 
the same sub-system.

Nikolaus

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 1/3] ACPI: Resolve objects on host-directed table loads
  2019-05-29 12:18 ` [PATCH 1/3] ACPI: Resolve objects on host-directed table loads Nikolaus Voss
  2019-05-30 14:42   ` Dan Murphy
@ 2019-08-14 18:50   ` Andy Shevchenko
  2019-08-14 20:27     ` Schmauss, Erik
  1 sibling, 1 reply; 57+ messages in thread
From: Andy Shevchenko @ 2019-08-14 18:50 UTC (permalink / raw)
  To: Nikolaus Voss
  Cc: Rafael J. Wysocki, Len Brown, Robert Moore, Erik Schmauss,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, Thierry Reding,
	linux-acpi, devel, linux-leds, linux-pwm

On Wed, May 29, 2019 at 02:18:20PM +0200, Nikolaus Voss wrote:
> If an ACPI SSDT overlay is loaded after built-in tables
> have been loaded e.g. via configfs or efivar_ssdt_load()
> it is necessary to rewalk the namespace to resolve
> references. Without this, relative and absolute paths
> like ^PCI0.SBUS or \_SB.PCI0.SBUS are not resolved
> correctly.
> 
> Make configfs load use the same method as efivar_ssdt_load().

This patch brought a regression (bisect log below).
Now I'm unable to unload the table which was working before.

Reverting (manual, due to ACPICA changes) helps.

Please, consider to revert for this cycle, or fix. I will be glad to test any
proposed fix.


git bisect start
# good: [0ecfebd2b52404ae0c54a878c872bb93363ada36] Linux 5.2
git bisect good 0ecfebd2b52404ae0c54a878c872bb93363ada36
# bad: [5f9e832c137075045d15cd6899ab0505cfb2ca4b] Linus 5.3-rc1
git bisect bad 5f9e832c137075045d15cd6899ab0505cfb2ca4b
# bad: [e786741ff1b52769b044b7f4407f39cd13ee5d2d] Merge tag 'staging-5.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging
git bisect bad e786741ff1b52769b044b7f4407f39cd13ee5d2d
# bad: [8f6ccf6159aed1f04c6d179f61f6fb2691261e84] Merge tag 'clone3-v5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/brauner/linux
git bisect bad 8f6ccf6159aed1f04c6d179f61f6fb2691261e84
# good: [ed63b9c873601ca113da5c7b1745e3946493e9f3] Merge tag 'media/v5.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
git bisect good ed63b9c873601ca113da5c7b1745e3946493e9f3
# bad: [4b4704520d97b74e045154fc3b844b73ae4e7ebd] Merge tag 'acpi-5.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
git bisect bad 4b4704520d97b74e045154fc3b844b73ae4e7ebd
# good: [e3303268f9cfa4eb7c2217df471417d4327109fd] ASoC: soc-core: don't use soc_find_component() at snd_soc_find_dai()
git bisect good e3303268f9cfa4eb7c2217df471417d4327109fd
# good: [3c53c6255d598db7084c5c3d7553d7200e857818] Merge tag 'asoc-v5.3' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
git bisect good 3c53c6255d598db7084c5c3d7553d7200e857818
# good: [4cdd5f9186bbe80306e76f11da7ecb0b9720433c] Merge tag 'sound-5.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
git bisect good 4cdd5f9186bbe80306e76f11da7ecb0b9720433c
# good: [13b06b78c772d64e2207e4a5a5329856fe2bf241] Merge branches 'pm-opp', 'pm-misc', 'pm-avs' and 'pm-tools'
git bisect good 13b06b78c772d64e2207e4a5a5329856fe2bf241
# good: [cf2d213e49fdf47e4c10dc629a3659e0026a54b8] Merge tag 'pm-5.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
git bisect good cf2d213e49fdf47e4c10dc629a3659e0026a54b8
# bad: [02a93f35f57fe5d4d1bac0ac8496884235e2fd2e] ACPICA: Update version to 20190703
git bisect bad 02a93f35f57fe5d4d1bac0ac8496884235e2fd2e
# bad: [d4ca763eed3bcc227f220beb11ff4eb2fa548755] Merge ACPI tables handling changes for v5.3.
git bisect bad d4ca763eed3bcc227f220beb11ff4eb2fa548755
# bad: [d06c47e3dd07fdf3f07e8fc45f2ce655e9b295c5] ACPI: configfs: Resolve objects on host-directed table loads
git bisect bad d06c47e3dd07fdf3f07e8fc45f2ce655e9b295c5
# good: [c78fea61f0c1f8568fbbb36ac3d1e1c85a903ae4] ACPI: tables: Allow BGRT to be overridden
git bisect good c78fea61f0c1f8568fbbb36ac3d1e1c85a903ae4
# first bad commit: [d06c47e3dd07fdf3f07e8fc45f2ce655e9b295c5] ACPI: configfs: Resolve objects on host-directed table loads

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 57+ messages in thread

* RE: [PATCH 1/3] ACPI: Resolve objects on host-directed table loads
  2019-08-14 18:50   ` Andy Shevchenko
@ 2019-08-14 20:27     ` Schmauss, Erik
  2019-08-16 11:57       ` Nikolaus Voss
  0 siblings, 1 reply; 57+ messages in thread
From: Schmauss, Erik @ 2019-08-14 20:27 UTC (permalink / raw)
  To: Shevchenko, Andriy, Nikolaus Voss, Rafael J. Wysocki
  Cc: Len Brown, Moore, Robert, Jacek Anaszewski, Pavel Machek,
	Dan Murphy, Thierry Reding, linux-acpi, devel, linux-leds,
	linux-pwm



> -----Original Message-----
> From: Shevchenko, Andriy
> Sent: Wednesday, August 14, 2019 11:51 AM
> To: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> Cc: Rafael J. Wysocki <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>;
> Moore, Robert <robert.moore@intel.com>; Schmauss, Erik
> <erik.schmauss@intel.com>; Jacek Anaszewski <jacek.anaszewski@gmail.com>;
> Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; Thierry
> Reding <thierry.reding@gmail.com>; linux-acpi@vger.kernel.org;
> devel@acpica.org; linux-leds@vger.kernel.org; linux-pwm@vger.kernel.org
> Subject: Re: [PATCH 1/3] ACPI: Resolve objects on host-directed table loads
> 
> On Wed, May 29, 2019 at 02:18:20PM +0200, Nikolaus Voss wrote:
> > If an ACPI SSDT overlay is loaded after built-in tables have been
> > loaded e.g. via configfs or efivar_ssdt_load() it is necessary to
> > rewalk the namespace to resolve references. Without this, relative and
> > absolute paths like ^PCI0.SBUS or \_SB.PCI0.SBUS are not resolved
> > correctly.
> >
> > Make configfs load use the same method as efivar_ssdt_load().
> 
> This patch brought a regression (bisect log below).
> Now I'm unable to unload the table which was working before.
> 
> Reverting (manual, due to ACPICA changes) helps.
> 
> Please, consider to revert for this cycle, or fix. I will be glad to test any
> proposed fix.

We submitted a patch (d1fb5b2f623b1af5a0d2a83d205df1b61f430dc6)
in response to this suggestion and I was not aware that this had been applied.

Rafael, please revert at least the ACPICA portion of this patch.

Thanks,
Erik
> 
> 
> git bisect start
> # good: [0ecfebd2b52404ae0c54a878c872bb93363ada36] Linux 5.2 git bisect
> good 0ecfebd2b52404ae0c54a878c872bb93363ada36
> # bad: [5f9e832c137075045d15cd6899ab0505cfb2ca4b] Linus 5.3-rc1 git
> bisect bad 5f9e832c137075045d15cd6899ab0505cfb2ca4b
> # bad: [e786741ff1b52769b044b7f4407f39cd13ee5d2d] Merge tag 'staging-
> 5.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging
> git bisect bad e786741ff1b52769b044b7f4407f39cd13ee5d2d
> # bad: [8f6ccf6159aed1f04c6d179f61f6fb2691261e84] Merge tag 'clone3-v5.3'
> of git://git.kernel.org/pub/scm/linux/kernel/git/brauner/linux
> git bisect bad 8f6ccf6159aed1f04c6d179f61f6fb2691261e84
> # good: [ed63b9c873601ca113da5c7b1745e3946493e9f3] Merge tag
> 'media/v5.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-
> media
> git bisect good ed63b9c873601ca113da5c7b1745e3946493e9f3
> # bad: [4b4704520d97b74e045154fc3b844b73ae4e7ebd] Merge tag 'acpi-5.3-
> rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
> git bisect bad 4b4704520d97b74e045154fc3b844b73ae4e7ebd
> # good: [e3303268f9cfa4eb7c2217df471417d4327109fd] ASoC: soc-core: don't
> use soc_find_component() at snd_soc_find_dai() git bisect good
> e3303268f9cfa4eb7c2217df471417d4327109fd
> # good: [3c53c6255d598db7084c5c3d7553d7200e857818] Merge tag 'asoc-
> v5.3' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-
> linus git bisect good 3c53c6255d598db7084c5c3d7553d7200e857818
> # good: [4cdd5f9186bbe80306e76f11da7ecb0b9720433c] Merge tag 'sound-
> 5.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
> git bisect good 4cdd5f9186bbe80306e76f11da7ecb0b9720433c
> # good: [13b06b78c772d64e2207e4a5a5329856fe2bf241] Merge branches
> 'pm-opp', 'pm-misc', 'pm-avs' and 'pm-tools'
> git bisect good 13b06b78c772d64e2207e4a5a5329856fe2bf241
> # good: [cf2d213e49fdf47e4c10dc629a3659e0026a54b8] Merge tag 'pm-5.3-
> rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
> git bisect good cf2d213e49fdf47e4c10dc629a3659e0026a54b8
> # bad: [02a93f35f57fe5d4d1bac0ac8496884235e2fd2e] ACPICA: Update
> version to 20190703 git bisect bad
> 02a93f35f57fe5d4d1bac0ac8496884235e2fd2e
> # bad: [d4ca763eed3bcc227f220beb11ff4eb2fa548755] Merge ACPI tables
> handling changes for v5.3.
> git bisect bad d4ca763eed3bcc227f220beb11ff4eb2fa548755
> # bad: [d06c47e3dd07fdf3f07e8fc45f2ce655e9b295c5] ACPI: configfs: Resolve
> objects on host-directed table loads git bisect bad
> d06c47e3dd07fdf3f07e8fc45f2ce655e9b295c5
> # good: [c78fea61f0c1f8568fbbb36ac3d1e1c85a903ae4] ACPI: tables: Allow
> BGRT to be overridden git bisect good
> c78fea61f0c1f8568fbbb36ac3d1e1c85a903ae4
> # first bad commit: [d06c47e3dd07fdf3f07e8fc45f2ce655e9b295c5] ACPI:
> configfs: Resolve objects on host-directed table loads
> 
> --
> With Best Regards,
> Andy Shevchenko
> 


^ permalink raw reply	[flat|nested] 57+ messages in thread

* RE: [PATCH 1/3] ACPI: Resolve objects on host-directed table loads
  2019-08-14 20:27     ` Schmauss, Erik
@ 2019-08-16 11:57       ` Nikolaus Voss
  2019-08-30 14:53         ` Shevchenko, Andriy
  0 siblings, 1 reply; 57+ messages in thread
From: Nikolaus Voss @ 2019-08-16 11:57 UTC (permalink / raw)
  To: Schmauss, Erik
  Cc: Shevchenko, Andriy, Rafael J. Wysocki, Len Brown, Moore, Robert,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, Thierry Reding,
	linux-acpi, devel, linux-leds, linux-pwm, nikolaus.voss

On Wed, 14 Aug 2019, Schmauss, Erik wrote:
>
>
>> -----Original Message-----
>> From: Shevchenko, Andriy
>> Sent: Wednesday, August 14, 2019 11:51 AM
>> To: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
>> Cc: Rafael J. Wysocki <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>;
>> Moore, Robert <robert.moore@intel.com>; Schmauss, Erik
>> <erik.schmauss@intel.com>; Jacek Anaszewski <jacek.anaszewski@gmail.com>;
>> Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; Thierry
>> Reding <thierry.reding@gmail.com>; linux-acpi@vger.kernel.org;
>> devel@acpica.org; linux-leds@vger.kernel.org; linux-pwm@vger.kernel.org
>> Subject: Re: [PATCH 1/3] ACPI: Resolve objects on host-directed table loads
>>
>> On Wed, May 29, 2019 at 02:18:20PM +0200, Nikolaus Voss wrote:
>>> If an ACPI SSDT overlay is loaded after built-in tables have been
>>> loaded e.g. via configfs or efivar_ssdt_load() it is necessary to
>>> rewalk the namespace to resolve references. Without this, relative and
>>> absolute paths like ^PCI0.SBUS or \_SB.PCI0.SBUS are not resolved
>>> correctly.
>>>
>>> Make configfs load use the same method as efivar_ssdt_load().
>>
>> This patch brought a regression (bisect log below).
>> Now I'm unable to unload the table which was working before.
>>
>> Reverting (manual, due to ACPICA changes) helps.
>>
>> Please, consider to revert for this cycle, or fix. I will be glad to test any
>> proposed fix.
>
> We submitted a patch (d1fb5b2f623b1af5a0d2a83d205df1b61f430dc6)
> in response to this suggestion and I was not aware that this had been applied.
>
> Rafael, please revert at least the ACPICA portion of this patch.

As I see it, my ACPICA change is not part of 5.3-rc1 any more. Reverting 
my fix is part of the patch above 
(d1fb5b2f623b1af5a0d2a83d205df1b61f430dc6) which is already applied.

Nevertheless, what is new, is that acpi_ns_initialize_objects() is called 
in acpi_load_table(). This is necessary to resolve the references in the 
newly loaded table. Maybe this prevents the table from being unloaded?

Niko

>
> Thanks,
> Erik
>>
>>
>> git bisect start
>> # good: [0ecfebd2b52404ae0c54a878c872bb93363ada36] Linux 5.2 git bisect
>> good 0ecfebd2b52404ae0c54a878c872bb93363ada36
>> # bad: [5f9e832c137075045d15cd6899ab0505cfb2ca4b] Linus 5.3-rc1 git
>> bisect bad 5f9e832c137075045d15cd6899ab0505cfb2ca4b
>> # bad: [e786741ff1b52769b044b7f4407f39cd13ee5d2d] Merge tag 'staging-
>> 5.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging
>> git bisect bad e786741ff1b52769b044b7f4407f39cd13ee5d2d
>> # bad: [8f6ccf6159aed1f04c6d179f61f6fb2691261e84] Merge tag 'clone3-v5.3'
>> of git://git.kernel.org/pub/scm/linux/kernel/git/brauner/linux
>> git bisect bad 8f6ccf6159aed1f04c6d179f61f6fb2691261e84
>> # good: [ed63b9c873601ca113da5c7b1745e3946493e9f3] Merge tag
>> 'media/v5.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-
>> media
>> git bisect good ed63b9c873601ca113da5c7b1745e3946493e9f3
>> # bad: [4b4704520d97b74e045154fc3b844b73ae4e7ebd] Merge tag 'acpi-5.3-
>> rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
>> git bisect bad 4b4704520d97b74e045154fc3b844b73ae4e7ebd
>> # good: [e3303268f9cfa4eb7c2217df471417d4327109fd] ASoC: soc-core: don't
>> use soc_find_component() at snd_soc_find_dai() git bisect good
>> e3303268f9cfa4eb7c2217df471417d4327109fd
>> # good: [3c53c6255d598db7084c5c3d7553d7200e857818] Merge tag 'asoc-
>> v5.3' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-
>> linus git bisect good 3c53c6255d598db7084c5c3d7553d7200e857818
>> # good: [4cdd5f9186bbe80306e76f11da7ecb0b9720433c] Merge tag 'sound-
>> 5.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
>> git bisect good 4cdd5f9186bbe80306e76f11da7ecb0b9720433c
>> # good: [13b06b78c772d64e2207e4a5a5329856fe2bf241] Merge branches
>> 'pm-opp', 'pm-misc', 'pm-avs' and 'pm-tools'
>> git bisect good 13b06b78c772d64e2207e4a5a5329856fe2bf241
>> # good: [cf2d213e49fdf47e4c10dc629a3659e0026a54b8] Merge tag 'pm-5.3-
>> rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
>> git bisect good cf2d213e49fdf47e4c10dc629a3659e0026a54b8
>> # bad: [02a93f35f57fe5d4d1bac0ac8496884235e2fd2e] ACPICA: Update
>> version to 20190703 git bisect bad
>> 02a93f35f57fe5d4d1bac0ac8496884235e2fd2e
>> # bad: [d4ca763eed3bcc227f220beb11ff4eb2fa548755] Merge ACPI tables
>> handling changes for v5.3.
>> git bisect bad d4ca763eed3bcc227f220beb11ff4eb2fa548755
>> # bad: [d06c47e3dd07fdf3f07e8fc45f2ce655e9b295c5] ACPI: configfs: Resolve
>> objects on host-directed table loads git bisect bad
>> d06c47e3dd07fdf3f07e8fc45f2ce655e9b295c5
>> # good: [c78fea61f0c1f8568fbbb36ac3d1e1c85a903ae4] ACPI: tables: Allow
>> BGRT to be overridden git bisect good
>> c78fea61f0c1f8568fbbb36ac3d1e1c85a903ae4
>> # first bad commit: [d06c47e3dd07fdf3f07e8fc45f2ce655e9b295c5] ACPI:
>> configfs: Resolve objects on host-directed table loads
>>
>> --
>> With Best Regards,
>> Andy Shevchenko
>>
>
>

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 1/3] ACPI: Resolve objects on host-directed table loads
  2019-08-16 11:57       ` Nikolaus Voss
@ 2019-08-30 14:53         ` Shevchenko, Andriy
  2019-09-04  7:20           ` Nikolaus Voss
  0 siblings, 1 reply; 57+ messages in thread
From: Shevchenko, Andriy @ 2019-08-30 14:53 UTC (permalink / raw)
  To: Nikolaus Voss
  Cc: Schmauss, Erik, Rafael J. Wysocki, Len Brown, Moore, Robert,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, Thierry Reding,
	linux-acpi, devel, linux-leds, linux-pwm, nikolaus.voss

On Fri, Aug 16, 2019 at 01:57:26PM +0200, Nikolaus Voss wrote:
> On Wed, 14 Aug 2019, Schmauss, Erik wrote:
> > > -----Original Message-----
> > > From: Shevchenko, Andriy
> > > Sent: Wednesday, August 14, 2019 11:51 AM
> > > To: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> > > Cc: Rafael J. Wysocki <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>;
> > > Moore, Robert <robert.moore@intel.com>; Schmauss, Erik
> > > <erik.schmauss@intel.com>; Jacek Anaszewski <jacek.anaszewski@gmail.com>;
> > > Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; Thierry
> > > Reding <thierry.reding@gmail.com>; linux-acpi@vger.kernel.org;
> > > devel@acpica.org; linux-leds@vger.kernel.org; linux-pwm@vger.kernel.org
> > > Subject: Re: [PATCH 1/3] ACPI: Resolve objects on host-directed table loads
> > > 
> > > On Wed, May 29, 2019 at 02:18:20PM +0200, Nikolaus Voss wrote:
> > > > If an ACPI SSDT overlay is loaded after built-in tables have been
> > > > loaded e.g. via configfs or efivar_ssdt_load() it is necessary to
> > > > rewalk the namespace to resolve references. Without this, relative and
> > > > absolute paths like ^PCI0.SBUS or \_SB.PCI0.SBUS are not resolved
> > > > correctly.
> > > > 
> > > > Make configfs load use the same method as efivar_ssdt_load().
> > > 
> > > This patch brought a regression (bisect log below).
> > > Now I'm unable to unload the table which was working before.
> > > 
> > > Reverting (manual, due to ACPICA changes) helps.
> > > 
> > > Please, consider to revert for this cycle, or fix. I will be glad to test any
> > > proposed fix.
> > 
> > We submitted a patch (d1fb5b2f623b1af5a0d2a83d205df1b61f430dc6)
> > in response to this suggestion and I was not aware that this had been applied.
> > 
> > Rafael, please revert at least the ACPICA portion of this patch.
> 
> As I see it, my ACPICA change is not part of 5.3-rc1 any more. Reverting my
> fix is part of the patch above (d1fb5b2f623b1af5a0d2a83d205df1b61f430dc6)
> which is already applied.
> 
> Nevertheless, what is new, is that acpi_ns_initialize_objects() is called in
> acpi_load_table(). This is necessary to resolve the references in the newly
> loaded table. Maybe this prevents the table from being unloaded?

So, can we do something about it? It's a regression.

Rafael, Nikolaus?

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 1/3] ACPI: Resolve objects on host-directed table loads
  2019-08-30 14:53         ` Shevchenko, Andriy
@ 2019-09-04  7:20           ` Nikolaus Voss
  2019-09-06 17:46             ` Shevchenko, Andriy
  0 siblings, 1 reply; 57+ messages in thread
From: Nikolaus Voss @ 2019-09-04  7:20 UTC (permalink / raw)
  To: Shevchenko, Andriy
  Cc: Schmauss, Erik, Rafael J. Wysocki, Len Brown, Moore, Robert,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, Thierry Reding,
	linux-acpi, devel, linux-leds, linux-pwm

Andy,

On Fri, 30 Aug 2019, Shevchenko, Andriy wrote:
> On Fri, Aug 16, 2019 at 01:57:26PM +0200, Nikolaus Voss wrote:
>> On Wed, 14 Aug 2019, Schmauss, Erik wrote:
>>>> -----Original Message-----
>>>> From: Shevchenko, Andriy
>>>> Sent: Wednesday, August 14, 2019 11:51 AM
>>>> To: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
>>>> Cc: Rafael J. Wysocki <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>;
>>>> Moore, Robert <robert.moore@intel.com>; Schmauss, Erik
>>>> <erik.schmauss@intel.com>; Jacek Anaszewski <jacek.anaszewski@gmail.com>;
>>>> Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; Thierry
>>>> Reding <thierry.reding@gmail.com>; linux-acpi@vger.kernel.org;
>>>> devel@acpica.org; linux-leds@vger.kernel.org; linux-pwm@vger.kernel.org
>>>> Subject: Re: [PATCH 1/3] ACPI: Resolve objects on host-directed table loads
>>>>
>>>> On Wed, May 29, 2019 at 02:18:20PM +0200, Nikolaus Voss wrote:
>>>>> If an ACPI SSDT overlay is loaded after built-in tables have been
>>>>> loaded e.g. via configfs or efivar_ssdt_load() it is necessary to
>>>>> rewalk the namespace to resolve references. Without this, relative and
>>>>> absolute paths like ^PCI0.SBUS or \_SB.PCI0.SBUS are not resolved
>>>>> correctly.
>>>>>
>>>>> Make configfs load use the same method as efivar_ssdt_load().
>>>>
>>>> This patch brought a regression (bisect log below).
>>>> Now I'm unable to unload the table which was working before.
>>>>
>>>> Reverting (manual, due to ACPICA changes) helps.
>>>>
>>>> Please, consider to revert for this cycle, or fix. I will be glad to test any
>>>> proposed fix.
>>>
>>> We submitted a patch (d1fb5b2f623b1af5a0d2a83d205df1b61f430dc6)
>>> in response to this suggestion and I was not aware that this had been applied.
>>>
>>> Rafael, please revert at least the ACPICA portion of this patch.
>>
>> As I see it, my ACPICA change is not part of 5.3-rc1 any more. Reverting my
>> fix is part of the patch above (d1fb5b2f623b1af5a0d2a83d205df1b61f430dc6)
>> which is already applied.
>>
>> Nevertheless, what is new, is that acpi_ns_initialize_objects() is called in
>> acpi_load_table(). This is necessary to resolve the references in the newly
>> loaded table. Maybe this prevents the table from being unloaded?
>
> So, can we do something about it? It's a regression.
>
> Rafael, Nikolaus?

can you describe how you unload the table (from userspace?). I cannot 
reproduce this regression. I was not aware of any working interface for 
unloading ACPI tables, I ended up in kexec'ing the kernel for my tests 
each time I had to unload a table.

Niko

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 1/3] ACPI: Resolve objects on host-directed table loads
  2019-09-04  7:20           ` Nikolaus Voss
@ 2019-09-06 17:46             ` Shevchenko, Andriy
  2019-09-12  8:05               ` Nikolaus Voss
  2019-09-12  8:07               ` [PATCH] ACPICA: make acpi_load_table() return table index Nikolaus Voss
  0 siblings, 2 replies; 57+ messages in thread
From: Shevchenko, Andriy @ 2019-09-06 17:46 UTC (permalink / raw)
  To: Nikolaus Voss
  Cc: Schmauss, Erik, Rafael J. Wysocki, Len Brown, Moore, Robert,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, Thierry Reding,
	linux-acpi, devel, linux-leds, linux-pwm

On Wed, Sep 04, 2019 at 09:20:03AM +0200, Nikolaus Voss wrote:
> On Fri, 30 Aug 2019, Shevchenko, Andriy wrote:
> > On Fri, Aug 16, 2019 at 01:57:26PM +0200, Nikolaus Voss wrote:
> > > On Wed, 14 Aug 2019, Schmauss, Erik wrote:
> > > > > -----Original Message-----
> > > > > From: Shevchenko, Andriy
> > > > > Sent: Wednesday, August 14, 2019 11:51 AM
> > > > > To: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> > > > > Cc: Rafael J. Wysocki <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>;
> > > > > Moore, Robert <robert.moore@intel.com>; Schmauss, Erik
> > > > > <erik.schmauss@intel.com>; Jacek Anaszewski <jacek.anaszewski@gmail.com>;
> > > > > Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; Thierry
> > > > > Reding <thierry.reding@gmail.com>; linux-acpi@vger.kernel.org;
> > > > > devel@acpica.org; linux-leds@vger.kernel.org; linux-pwm@vger.kernel.org
> > > > > Subject: Re: [PATCH 1/3] ACPI: Resolve objects on host-directed table loads
> > > > > 
> > > > > On Wed, May 29, 2019 at 02:18:20PM +0200, Nikolaus Voss wrote:
> > > > > > If an ACPI SSDT overlay is loaded after built-in tables have been
> > > > > > loaded e.g. via configfs or efivar_ssdt_load() it is necessary to
> > > > > > rewalk the namespace to resolve references. Without this, relative and
> > > > > > absolute paths like ^PCI0.SBUS or \_SB.PCI0.SBUS are not resolved
> > > > > > correctly.
> > > > > > 
> > > > > > Make configfs load use the same method as efivar_ssdt_load().
> > > > > 
> > > > > This patch brought a regression (bisect log below).
> > > > > Now I'm unable to unload the table which was working before.
> > > > > 
> > > > > Reverting (manual, due to ACPICA changes) helps.
> > > > > 
> > > > > Please, consider to revert for this cycle, or fix. I will be glad to test any
> > > > > proposed fix.
> > > > 
> > > > We submitted a patch (d1fb5b2f623b1af5a0d2a83d205df1b61f430dc6)
> > > > in response to this suggestion and I was not aware that this had been applied.
> > > > 
> > > > Rafael, please revert at least the ACPICA portion of this patch.
> > > 
> > > As I see it, my ACPICA change is not part of 5.3-rc1 any more. Reverting my
> > > fix is part of the patch above (d1fb5b2f623b1af5a0d2a83d205df1b61f430dc6)
> > > which is already applied.
> > > 
> > > Nevertheless, what is new, is that acpi_ns_initialize_objects() is called in
> > > acpi_load_table(). This is necessary to resolve the references in the newly
> > > loaded table. Maybe this prevents the table from being unloaded?
> > 
> > So, can we do something about it? It's a regression.
> > 
> > Rafael, Nikolaus?
> 
> can you describe how you unload the table (from userspace?). I cannot
> reproduce this regression. I was not aware of any working interface for
> unloading ACPI tables, I ended up in kexec'ing the kernel for my tests each
> time I had to unload a table.

Sure.

I have connected an I²C device(s) to my board where I have compiled ACPI tables
which describes them (more details if you want to know is on [1]).

So, I create a folder in ConfigFS [1,2] and fill it up with SSDT (an *.aml file).
After this, if I try to remove the folder in ConfigFS followed by table removal
event, the actual nodes won't be removed, and this messes up with the internal
representation of the ACPI device tree.

[1]: https://www.kernel.org/doc/html/latest/admin-guide/acpi/ssdt-overlays.html
[2]: https://htot.github.io/meta-intel-edison/1.3-ACPI-or-not.html#run-time-loading-through-configfs

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH 1/3] ACPI: Resolve objects on host-directed table loads
  2019-09-06 17:46             ` Shevchenko, Andriy
@ 2019-09-12  8:05               ` Nikolaus Voss
  2019-09-12  8:07               ` [PATCH] ACPICA: make acpi_load_table() return table index Nikolaus Voss
  1 sibling, 0 replies; 57+ messages in thread
From: Nikolaus Voss @ 2019-09-12  8:05 UTC (permalink / raw)
  To: Shevchenko, Andriy
  Cc: Schmauss, Erik, Rafael J. Wysocki, Len Brown, Moore, Robert,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, linux-acpi, devel,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 3840 bytes --]

On Fri, 6 Sep 2019, Shevchenko, Andriy wrote:
> On Wed, Sep 04, 2019 at 09:20:03AM +0200, Nikolaus Voss wrote:
>> On Fri, 30 Aug 2019, Shevchenko, Andriy wrote:
>>> On Fri, Aug 16, 2019 at 01:57:26PM +0200, Nikolaus Voss wrote:
>>>> On Wed, 14 Aug 2019, Schmauss, Erik wrote:
>>>>>> -----Original Message-----
>>>>>> From: Shevchenko, Andriy
>>>>>> Sent: Wednesday, August 14, 2019 11:51 AM
>>>>>> To: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
>>>>>> Cc: Rafael J. Wysocki <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>;
>>>>>> Moore, Robert <robert.moore@intel.com>; Schmauss, Erik
>>>>>> <erik.schmauss@intel.com>; Jacek Anaszewski <jacek.anaszewski@gmail.com>;
>>>>>> Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; Thierry
>>>>>> Reding <thierry.reding@gmail.com>; linux-acpi@vger.kernel.org;
>>>>>> devel@acpica.org; linux-leds@vger.kernel.org; linux-pwm@vger.kernel.org
>>>>>> Subject: Re: [PATCH 1/3] ACPI: Resolve objects on host-directed table loads
>>>>>>
>>>>>> On Wed, May 29, 2019 at 02:18:20PM +0200, Nikolaus Voss wrote:
>>>>>>> If an ACPI SSDT overlay is loaded after built-in tables have been
>>>>>>> loaded e.g. via configfs or efivar_ssdt_load() it is necessary to
>>>>>>> rewalk the namespace to resolve references. Without this, relative and
>>>>>>> absolute paths like ^PCI0.SBUS or \_SB.PCI0.SBUS are not resolved
>>>>>>> correctly.
>>>>>>>
>>>>>>> Make configfs load use the same method as efivar_ssdt_load().
>>>>>>
>>>>>> This patch brought a regression (bisect log below).
>>>>>> Now I'm unable to unload the table which was working before.
>>>>>>
>>>>>> Reverting (manual, due to ACPICA changes) helps.
>>>>>>
>>>>>> Please, consider to revert for this cycle, or fix. I will be glad to test any
>>>>>> proposed fix.
>>>>>
>>>>> We submitted a patch (d1fb5b2f623b1af5a0d2a83d205df1b61f430dc6)
>>>>> in response to this suggestion and I was not aware that this had been applied.
>>>>>
>>>>> Rafael, please revert at least the ACPICA portion of this patch.
>>>>
>>>> As I see it, my ACPICA change is not part of 5.3-rc1 any more. Reverting my
>>>> fix is part of the patch above (d1fb5b2f623b1af5a0d2a83d205df1b61f430dc6)
>>>> which is already applied.
>>>>
>>>> Nevertheless, what is new, is that acpi_ns_initialize_objects() is called in
>>>> acpi_load_table(). This is necessary to resolve the references in the newly
>>>> loaded table. Maybe this prevents the table from being unloaded?
>>>
>>> So, can we do something about it? It's a regression.
>>>
>>> Rafael, Nikolaus?
>>
>> can you describe how you unload the table (from userspace?). I cannot
>> reproduce this regression. I was not aware of any working interface for
>> unloading ACPI tables, I ended up in kexec'ing the kernel for my tests each
>> time I had to unload a table.
>
> Sure.
>
> I have connected an I²C device(s) to my board where I have compiled ACPI tables
> which describes them (more details if you want to know is on [1]).
>
> So, I create a folder in ConfigFS [1,2] and fill it up with SSDT (an *.aml file).
> After this, if I try to remove the folder in ConfigFS followed by table removal
> event, the actual nodes won't be removed, and this messes up with the internal
> representation of the ACPI device tree.
>
> [1]: https://www.kernel.org/doc/html/latest/admin-guide/acpi/ssdt-overlays.html
> [2]: https://htot.github.io/meta-intel-edison/1.3-ACPI-or-not.html#run-time-loading-through-configfs

Thanks, I have reproduced it and the culprit is my acpi_configfs patch 
that now uses acpi_load_table() to have the references resolved.

My proposal would be to have that function return the table index, which 
is needed to unload the table. I'll submit a patch, Andy, could you test 
it in your setup?

Erik/Robert, is it ok to change the acpi_load_table() ACPICA API 
function? It has only a few uses.

Niko

^ permalink raw reply	[flat|nested] 57+ messages in thread

* [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-06 17:46             ` Shevchenko, Andriy
  2019-09-12  8:05               ` Nikolaus Voss
@ 2019-09-12  8:07               ` Nikolaus Voss
  2019-09-12 14:19                 ` Moore, Robert
                                   ` (2 more replies)
  1 sibling, 3 replies; 57+ messages in thread
From: Nikolaus Voss @ 2019-09-12  8:07 UTC (permalink / raw)
  To: Shevchenko, Andriy, Schmauss, Erik, Rafael J. Wysocki, Moore, Robert
  Cc: Len Brown, Jacek Anaszewski, Pavel Machek, Dan Murphy,
	linux-acpi, devel, linux-kernel, nv, Nikolaus Voss

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: d06c47e3dd07f ("ACPI: configfs: Resolve objects on host-directed table loads")
Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
---
 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))
-- 
2.17.1


^ permalink raw reply	[flat|nested] 57+ messages in thread

* RE: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-12  8:07               ` [PATCH] ACPICA: make acpi_load_table() return table index Nikolaus Voss
@ 2019-09-12 14:19                 ` Moore, Robert
  2019-09-12 19:36                   ` Ferry Toth
  2019-09-13  7:44                   ` Nikolaus Voss
  2019-09-19  8:13                 ` Rafael J. Wysocki
  2019-09-26 16:09                 ` [PATCH] ACPICA: make acpi_load_table() return table index Schmauss, Erik
  2 siblings, 2 replies; 57+ messages in thread
From: Moore, Robert @ 2019-09-12 14:19 UTC (permalink / raw)
  To: Nikolaus Voss, Shevchenko, Andriy, Schmauss, Erik, Rafael J. Wysocki
  Cc: Len Brown, Jacek Anaszewski, Pavel Machek, Dan Murphy,
	linux-acpi, devel, linux-kernel, nv

Nikolaus,
The ability to unload an ACPI table (especially AML tables such as SSDTs) is in the process of being deprecated in ACPICA -- since it is also deprecated in the current ACPI specification. This is being done because of the difficulty of deleting the namespace entries for the table.  FYI, Windows does not properly support this function either.

Bob


-----Original Message-----
From: Nikolaus Voss [mailto:nikolaus.voss@loewensteinmedical.de] 
Sent: Thursday, September 12, 2019 1:08 AM
To: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Moore, Robert <robert.moore@intel.com>
Cc: Len Brown <lenb@kernel.org>; Jacek Anaszewski <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; linux-kernel@vger.kernel.org; nv@vosn.de; Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
Subject: [PATCH] ACPICA: make acpi_load_table() return table index

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: d06c47e3dd07f ("ACPI: configfs: Resolve objects on host-directed table loads")
Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
---
 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))
--
2.17.1


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-12 14:19                 ` Moore, Robert
@ 2019-09-12 19:36                   ` Ferry Toth
  2019-09-25 18:13                     ` Schmauss, Erik
  2019-09-13  7:44                   ` Nikolaus Voss
  1 sibling, 1 reply; 57+ messages in thread
From: Ferry Toth @ 2019-09-12 19:36 UTC (permalink / raw)
  To: Moore, Robert, Nikolaus Voss, Shevchenko, Andriy, Schmauss, Erik,
	Rafael J. Wysocki
  Cc: Len Brown, Jacek Anaszewski, Pavel Machek, Dan Murphy,
	linux-acpi, devel, linux-kernel, nv

Op 12-09-19 om 16:19 schreef Moore, Robert:
> Nikolaus,
> The ability to unload an ACPI table (especially AML tables such as SSDTs) is in the process of being deprecated in ACPICA -- since it is also deprecated in the current ACPI specification. This is being done because of the difficulty of deleting the namespace entries for the table.  FYI, Windows does not properly support this function either.

I really hope this is not the case. On x86 loading/unloading SSDTs has 
proven to be a powerful way to handle reconfigurable hardware without 
rebooting and without requiring dedicated platform drivers. Same for 
user plugable hardware on i2c/spi busses.

This has worked before and will violate the "don't break user space" rule.

I don't see why Windows is an example to follow. On Windows platform 
drivers don't get compiled into the kernel and don't need to be upstreamed.

> Bob
> 
> 
> -----Original Message-----
> From: Nikolaus Voss [mailto:nikolaus.voss@loewensteinmedical.de]
> Sent: Thursday, September 12, 2019 1:08 AM
> To: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Moore, Robert <robert.moore@intel.com>
> Cc: Len Brown <lenb@kernel.org>; Jacek Anaszewski <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; linux-kernel@vger.kernel.org; nv@vosn.de; Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> Subject: [PATCH] ACPICA: make acpi_load_table() return table index
> 
> 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: d06c47e3dd07f ("ACPI: configfs: Resolve objects on host-directed table loads")
> Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> ---
>   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))
> --
> 2.17.1
> 
> 


^ permalink raw reply	[flat|nested] 57+ messages in thread

* RE: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-12 14:19                 ` Moore, Robert
  2019-09-12 19:36                   ` Ferry Toth
@ 2019-09-13  7:44                   ` Nikolaus Voss
  2019-09-13 14:20                     ` Moore, Robert
  1 sibling, 1 reply; 57+ messages in thread
From: Nikolaus Voss @ 2019-09-13  7:44 UTC (permalink / raw)
  To: Moore, Robert
  Cc: Shevchenko, Andriy, Schmauss, Erik, Rafael J. Wysocki, Len Brown,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, linux-acpi, devel,
	linux-kernel, Ferry Toth, nikolaus.voss

Bob,

On Thu, 12 Sep 2019, Moore, Robert wrote:
> The ability to unload an ACPI table (especially AML tables such as 
> SSDTs) is in the process of being deprecated in ACPICA -- since it is 
> also deprecated in the current ACPI specification. This is being done 
> because of the difficulty of deleting the namespace entries for the 
> table.  FYI, Windows does not properly support this function either.

ok, I see it can be a problem to unload an AML table with all it's 
consequences e.g. with respect to driver unregistering in setups with 
complex dependencies. It will only work properly under certain conditions 
- nevertheless acpi_tb_unload_table() is still exported in ACPICA and we 
should get this working as it worked before.

The API change I request is not directly related to table unloading, it's 
just that the index of the loaded table is returned for future reference:

[...]

>> 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))
>> --
>> 2.17.1
>>

This allows for a simple fix of the regression and doesn't imply future 
support for table unloading. Would this be acceptable?

Niko

^ permalink raw reply	[flat|nested] 57+ messages in thread

* RE: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-13  7:44                   ` Nikolaus Voss
@ 2019-09-13 14:20                     ` Moore, Robert
  2019-09-13 15:12                       ` Shevchenko, Andriy
  0 siblings, 1 reply; 57+ messages in thread
From: Moore, Robert @ 2019-09-13 14:20 UTC (permalink / raw)
  To: Nikolaus Voss
  Cc: Shevchenko, Andriy, Schmauss, Erik, Rafael J. Wysocki, Len Brown,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, linux-acpi, devel,
	linux-kernel, Ferry Toth, nikolaus.voss



-----Original Message-----
From: Nikolaus Voss [mailto:nv@vosn.de] 
Sent: Friday, September 13, 2019 12:44 AM
To: Moore, Robert <robert.moore@intel.com>
Cc: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>; Jacek Anaszewski <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; linux-kernel@vger.kernel.org; Ferry Toth <ftoth@telfort.nl>; nikolaus.voss@loewensteinmedical.de
Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table index

Bob,

On Thu, 12 Sep 2019, Moore, Robert wrote:
> The ability to unload an ACPI table (especially AML tables such as
> SSDTs) is in the process of being deprecated in ACPICA -- since it is 
> also deprecated in the current ACPI specification. This is being done 
> because of the difficulty of deleting the namespace entries for the 
> table.  FYI, Windows does not properly support this function either.

ok, I see it can be a problem to unload an AML table with all it's consequences e.g. with respect to driver unregistering in setups with complex dependencies. It will only work properly under certain conditions
- nevertheless acpi_tb_unload_table() is still exported in ACPICA and we should get this working as it worked before.

AcpiTbUnloadTable is not exported, it is an internal interface only -- as recognized by the "AcpiTb". I'm not sure that I want to change the interface to AcpiLoadTable just for something that is being deprecated. Already, we throw an ACPI_EXCEPTION if the Unload operator is encountered in the AML byte stream. The same thing with AcpiUnloadParentTable - it is being deprecated.


    ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED,
        "AML Unload operator is not supported"));


The API change I request is not directly related to table unloading, it's just that the index of the loaded table is returned for future reference:

[...]

>> 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))
>> --
>> 2.17.1
>>

This allows for a simple fix of the regression and doesn't imply future support for table unloading. Would this be acceptable?

Niko

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-13 14:20                     ` Moore, Robert
@ 2019-09-13 15:12                       ` Shevchenko, Andriy
  2019-09-13 16:48                         ` Ferry Toth
  0 siblings, 1 reply; 57+ messages in thread
From: Shevchenko, Andriy @ 2019-09-13 15:12 UTC (permalink / raw)
  To: Moore, Robert
  Cc: Nikolaus Voss, Schmauss, Erik, Rafael J. Wysocki, Len Brown,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, linux-acpi, devel,
	linux-kernel, Ferry Toth, nikolaus.voss, Jan Kiszka

On Fri, Sep 13, 2019 at 05:20:21PM +0300, Moore, Robert wrote:
> -----Original Message-----
> From: Nikolaus Voss [mailto:nv@vosn.de] 
> Sent: Friday, September 13, 2019 12:44 AM
> To: Moore, Robert <robert.moore@intel.com>
> Cc: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>; Jacek Anaszewski <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; linux-kernel@vger.kernel.org; Ferry Toth <ftoth@telfort.nl>; nikolaus.voss@loewensteinmedical.de
> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table index
> 
> Bob,
> 
> On Thu, 12 Sep 2019, Moore, Robert wrote:
> > The ability to unload an ACPI table (especially AML tables such as
> > SSDTs) is in the process of being deprecated in ACPICA -- since it is 
> > also deprecated in the current ACPI specification. This is being done 
> > because of the difficulty of deleting the namespace entries for the 
> > table.  FYI, Windows does not properly support this function either.
> 
> ok, I see it can be a problem to unload an AML table with all it's consequences e.g. with respect to driver unregistering in setups with complex dependencies. It will only work properly under certain conditions
> - nevertheless acpi_tb_unload_table() is still exported in ACPICA and we should get this working as it worked before.
> 
> AcpiTbUnloadTable is not exported, it is an internal interface only -- as
> recognized by the "AcpiTb".

In Linux it became a part of ABI when the

commit 772bf1e2878ecfca0d1f332071c83e021dd9cf01
Author: Jan Kiszka <jan.kiszka@siemens.com>
Date:   Fri Jun 9 20:36:31 2017 +0200

    ACPI: configfs: Unload SSDT on configfs entry removal

appeared in the kernel.

> I'm not sure that I want to change the interface
> to AcpiLoadTable just for something that is being deprecated. Already, we
> throw an ACPI_EXCEPTION if the Unload operator is encountered in the AML byte
> stream. The same thing with AcpiUnloadParentTable - it is being deprecated.
> 
>     ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED,
>         "AML Unload operator is not supported"));

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-13 15:12                       ` Shevchenko, Andriy
@ 2019-09-13 16:48                         ` Ferry Toth
  2019-09-13 16:48                           ` Ferry Toth
  2019-09-13 17:40                           ` Moore, Robert
  0 siblings, 2 replies; 57+ messages in thread
From: Ferry Toth @ 2019-09-13 16:48 UTC (permalink / raw)
  To: linux-acpi; +Cc: linux-kernel

Hello all,

Sorry to have sent our message with cancelled e-mail address. I have 
correct this now.

Op 13-09-19 om 17:12 schreef Shevchenko, Andriy:
> On Fri, Sep 13, 2019 at 05:20:21PM +0300, Moore, Robert wrote:
>> -----Original Message-----
>> From: Nikolaus Voss [mailto:nv@vosn.de]
>> Sent: Friday, September 13, 2019 12:44 AM
>> To: Moore, Robert <robert.moore@intel.com>
>> Cc: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>; Jacek Anaszewski <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; linux-kernel@vger.kernel.org; Ferry Toth <ftoth@telfort.nl>; nikolaus.voss@loewensteinmedical.de
>> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table index
>>
>> Bob,
>>
>> On Thu, 12 Sep 2019, Moore, Robert wrote:
>>> The ability to unload an ACPI table (especially AML tables such as
>>> SSDTs) is in the process of being deprecated in ACPICA -- since it is
>>> also deprecated in the current ACPI specification. This is being done
>>> because of the difficulty of deleting the namespace entries for the
>>> table.  FYI, Windows does not properly support this function either.
>>
>> ok, I see it can be a problem to unload an AML table with all it's consequences e.g. with respect to driver unregistering in setups with complex dependencies. It will only work properly under certain conditions
>> - nevertheless acpi_tb_unload_table() is still exported in ACPICA and we should get this working as it worked before.
>>
>> AcpiTbUnloadTable is not exported, it is an internal interface only -- as
>> recognized by the "AcpiTb".
> 
> In Linux it became a part of ABI when the
> 
> commit 772bf1e2878ecfca0d1f332071c83e021dd9cf01
> Author: Jan Kiszka <jan.kiszka@siemens.com>
> Date:   Fri Jun 9 20:36:31 2017 +0200
> 
>      ACPI: configfs: Unload SSDT on configfs entry removal
> 
> appeared in the kernel.

And the commit message explains quite well why it is an important feature:

"This allows to change SSDTs without rebooting the system.
It also allows to destroy devices again that a dynamically loaded SSDT
created.

This is widely similar to the DT overlay behavior."

>> I'm not sure that I want to change the interface
>> to AcpiLoadTable just for something that is being deprecated. Already, we
>> throw an ACPI_EXCEPTION if the Unload operator is encountered in the AML byte
>> stream. The same thing with AcpiUnloadParentTable - it is being deprecated.
>>
>>      ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED,
>>          "AML Unload operator is not supported"));
> 



^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-13 16:48                         ` Ferry Toth
@ 2019-09-13 16:48                           ` Ferry Toth
  2019-09-13 17:40                           ` Moore, Robert
  1 sibling, 0 replies; 57+ messages in thread
From: Ferry Toth @ 2019-09-13 16:48 UTC (permalink / raw)
  To: Shevchenko, Andriy, Moore, Robert
  Cc: Nikolaus Voss, Schmauss, Erik, Rafael J. Wysocki, Len Brown,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, linux-acpi, devel,
	linux-kernel, nikolaus.voss, Jan Kiszka

Hello all,

Sorry to have sent our message with cancelled e-mail address. I have 
correct this now.

Op 13-09-19 om 17:12 schreef Shevchenko, Andriy:
> On Fri, Sep 13, 2019 at 05:20:21PM +0300, Moore, Robert wrote:
>> -----Original Message-----
>> From: Nikolaus Voss [mailto:nv@vosn.de]
>> Sent: Friday, September 13, 2019 12:44 AM
>> To: Moore, Robert <robert.moore@intel.com>
>> Cc: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>; Jacek Anaszewski <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; linux-kernel@vger.kernel.org; Ferry Toth <ftoth@telfort.nl>; nikolaus.voss@loewensteinmedical.de
>> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table index
>>
>> Bob,
>>
>> On Thu, 12 Sep 2019, Moore, Robert wrote:
>>> The ability to unload an ACPI table (especially AML tables such as
>>> SSDTs) is in the process of being deprecated in ACPICA -- since it is
>>> also deprecated in the current ACPI specification. This is being done
>>> because of the difficulty of deleting the namespace entries for the
>>> table.  FYI, Windows does not properly support this function either.
>>
>> ok, I see it can be a problem to unload an AML table with all it's consequences e.g. with respect to driver unregistering in setups with complex dependencies. It will only work properly under certain conditions
>> - nevertheless acpi_tb_unload_table() is still exported in ACPICA and we should get this working as it worked before.
>>
>> AcpiTbUnloadTable is not exported, it is an internal interface only -- as
>> recognized by the "AcpiTb".
> 
> In Linux it became a part of ABI when the
> 
> commit 772bf1e2878ecfca0d1f332071c83e021dd9cf01
> Author: Jan Kiszka <jan.kiszka@siemens.com>
> Date:   Fri Jun 9 20:36:31 2017 +0200
> 
>      ACPI: configfs: Unload SSDT on configfs entry removal
> 
> appeared in the kernel.

And the commit message explains quite well why it is an important feature:

"This allows to change SSDTs without rebooting the system.
It also allows to destroy devices again that a dynamically loaded SSDT
created.

This is widely similar to the DT overlay behavior."

>> I'm not sure that I want to change the interface
>> to AcpiLoadTable just for something that is being deprecated. Already, we
>> throw an ACPI_EXCEPTION if the Unload operator is encountered in the AML byte
>> stream. The same thing with AcpiUnloadParentTable - it is being deprecated.
>>
>>      ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED,
>>          "AML Unload operator is not supported"));
> 


^ permalink raw reply	[flat|nested] 57+ messages in thread

* RE: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-13 16:48                         ` Ferry Toth
  2019-09-13 16:48                           ` Ferry Toth
@ 2019-09-13 17:40                           ` Moore, Robert
  2019-09-13 19:56                             ` Rafael J. Wysocki
  2019-09-16  9:46                             ` Nikolaus Voss
  1 sibling, 2 replies; 57+ messages in thread
From: Moore, Robert @ 2019-09-13 17:40 UTC (permalink / raw)
  To: Ferry Toth, Shevchenko, Andriy
  Cc: Nikolaus Voss, Schmauss, Erik, Rafael J. Wysocki, Len Brown,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, linux-acpi, devel,
	linux-kernel, nikolaus.voss, Jan Kiszka



-----Original Message-----
From: Ferry Toth [mailto:fntoth@gmail.com] 
Sent: Friday, September 13, 2019 9:48 AM
To: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Moore, Robert <robert.moore@intel.com>
Cc: Nikolaus Voss <nv@vosn.de>; Schmauss, Erik <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>; Jacek Anaszewski <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; linux-kernel@vger.kernel.org; nikolaus.voss@loewensteinmedical.de; Jan Kiszka <jan.kiszka@siemens.com>
Subject: Re: [PATCH] ACPICA: make acpi_load_table() return table index

Hello all,

Sorry to have sent our message with cancelled e-mail address. I have correct this now.

Op 13-09-19 om 17:12 schreef Shevchenko, Andriy:
> On Fri, Sep 13, 2019 at 05:20:21PM +0300, Moore, Robert wrote:
>> -----Original Message-----
>> From: Nikolaus Voss [mailto:nv@vosn.de]
>> Sent: Friday, September 13, 2019 12:44 AM
>> To: Moore, Robert <robert.moore@intel.com>
>> Cc: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik 
>> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len 
>> Brown <lenb@kernel.org>; Jacek Anaszewski 
>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy 
>> <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; 
>> linux-kernel@vger.kernel.org; Ferry Toth <ftoth@telfort.nl>; 
>> nikolaus.voss@loewensteinmedical.de
>> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table 
>> index
>>
>> Bob,
>>
>> On Thu, 12 Sep 2019, Moore, Robert wrote:
>>> The ability to unload an ACPI table (especially AML tables such as
>>> SSDTs) is in the process of being deprecated in ACPICA -- since it 
>>> is also deprecated in the current ACPI specification. This is being 
>>> done because of the difficulty of deleting the namespace entries for 
>>> the table.  FYI, Windows does not properly support this function either.
>>
>> ok, I see it can be a problem to unload an AML table with all it's 
>> consequences e.g. with respect to driver unregistering in setups with 
>> complex dependencies. It will only work properly under certain 
>> conditions
>> - nevertheless acpi_tb_unload_table() is still exported in ACPICA and we should get this working as it worked before.
>>
>> AcpiTbUnloadTable is not exported, it is an internal interface only 
>> -- as recognized by the "AcpiTb".
> 
> In Linux it became a part of ABI when the
> 
> commit 772bf1e2878ecfca0d1f332071c83e021dd9cf01
> Author: Jan Kiszka <jan.kiszka@siemens.com>
> Date:   Fri Jun 9 20:36:31 2017 +0200
> 
>      ACPI: configfs: Unload SSDT on configfs entry removal
> 
> appeared in the kernel.

And the commit message explains quite well why it is an important feature:

"This allows to change SSDTs without rebooting the system.
It also allows to destroy devices again that a dynamically loaded SSDT created.

The biggest problem AFAIK is that under linux, many drivers cannot be unloaded. Also, there are many race conditions as the namespace entries "owned" by an SSDT being unloaded are deleted (out from underneath a driver).

This is widely similar to the DT overlay behavior."

>> I'm not sure that I want to change the interface to AcpiLoadTable 
>> just for something that is being deprecated. Already, we throw an 
>> ACPI_EXCEPTION if the Unload operator is encountered in the AML byte 
>> stream. The same thing with AcpiUnloadParentTable - it is being deprecated.
>>
>>      ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED,
>>          "AML Unload operator is not supported"));
> 


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-13 17:40                           ` Moore, Robert
@ 2019-09-13 19:56                             ` Rafael J. Wysocki
  2019-09-16  9:46                             ` Nikolaus Voss
  1 sibling, 0 replies; 57+ messages in thread
From: Rafael J. Wysocki @ 2019-09-13 19:56 UTC (permalink / raw)
  To: Moore, Robert
  Cc: Ferry Toth, Shevchenko, Andriy, Nikolaus Voss, Schmauss, Erik,
	Rafael J. Wysocki, Len Brown, Jacek Anaszewski, Pavel Machek,
	Dan Murphy, linux-acpi, devel, linux-kernel, nikolaus.voss,
	Jan Kiszka

On Fri, Sep 13, 2019 at 7:41 PM Moore, Robert <robert.moore@intel.com> wrote:
>
>
>
> -----Original Message-----
> From: Ferry Toth [mailto:fntoth@gmail.com]
> Sent: Friday, September 13, 2019 9:48 AM
> To: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Moore, Robert <robert.moore@intel.com>
> Cc: Nikolaus Voss <nv@vosn.de>; Schmauss, Erik <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>; Jacek Anaszewski <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; linux-kernel@vger.kernel.org; nikolaus.voss@loewensteinmedical.de; Jan Kiszka <jan.kiszka@siemens.com>
> Subject: Re: [PATCH] ACPICA: make acpi_load_table() return table index
>
> Hello all,
>
> Sorry to have sent our message with cancelled e-mail address. I have correct this now.
>
> Op 13-09-19 om 17:12 schreef Shevchenko, Andriy:
> > On Fri, Sep 13, 2019 at 05:20:21PM +0300, Moore, Robert wrote:
> >> -----Original Message-----
> >> From: Nikolaus Voss [mailto:nv@vosn.de]
> >> Sent: Friday, September 13, 2019 12:44 AM
> >> To: Moore, Robert <robert.moore@intel.com>
> >> Cc: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik
> >> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len
> >> Brown <lenb@kernel.org>; Jacek Anaszewski
> >> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy
> >> <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org;
> >> linux-kernel@vger.kernel.org; Ferry Toth <ftoth@telfort.nl>;
> >> nikolaus.voss@loewensteinmedical.de
> >> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table
> >> index
> >>
> >> Bob,
> >>
> >> On Thu, 12 Sep 2019, Moore, Robert wrote:
> >>> The ability to unload an ACPI table (especially AML tables such as
> >>> SSDTs) is in the process of being deprecated in ACPICA -- since it
> >>> is also deprecated in the current ACPI specification. This is being
> >>> done because of the difficulty of deleting the namespace entries for
> >>> the table.  FYI, Windows does not properly support this function either.
> >>
> >> ok, I see it can be a problem to unload an AML table with all it's
> >> consequences e.g. with respect to driver unregistering in setups with
> >> complex dependencies. It will only work properly under certain
> >> conditions
> >> - nevertheless acpi_tb_unload_table() is still exported in ACPICA and we should get this working as it worked before.
> >>
> >> AcpiTbUnloadTable is not exported, it is an internal interface only
> >> -- as recognized by the "AcpiTb".
> >
> > In Linux it became a part of ABI when the
> >
> > commit 772bf1e2878ecfca0d1f332071c83e021dd9cf01
> > Author: Jan Kiszka <jan.kiszka@siemens.com>
> > Date:   Fri Jun 9 20:36:31 2017 +0200
> >
> >      ACPI: configfs: Unload SSDT on configfs entry removal
> >
> > appeared in the kernel.
>
> And the commit message explains quite well why it is an important feature:
>
> "This allows to change SSDTs without rebooting the system.
> It also allows to destroy devices again that a dynamically loaded SSDT created.
>
> The biggest problem AFAIK is that under linux, many drivers cannot be unloaded.
> Also, there are many race conditions as the namespace entries "owned" by an SSDT
> being unloaded are deleted (out from underneath a driver).

While that is true in general, there are cases in which unloading does
work and they
still need to be supported.

You may argue that adding support for unloading SSDTs loaded via
configfs was a mistake,
but that was done and it cannot be undone.

We cannot break existing setups in which it is in use and works.

> This is widely similar to the DT overlay behavior."
>
> >> I'm not sure that I want to change the interface to AcpiLoadTable
> >> just for something that is being deprecated. Already, we throw an
> >> ACPI_EXCEPTION if the Unload operator is encountered in the AML byte
> >> stream. The same thing with AcpiUnloadParentTable - it is being deprecated.
> >>
> >>      ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED,
> >>          "AML Unload operator is not supported"));
> >
>

^ permalink raw reply	[flat|nested] 57+ messages in thread

* RE: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-13 17:40                           ` Moore, Robert
  2019-09-13 19:56                             ` Rafael J. Wysocki
@ 2019-09-16  9:46                             ` Nikolaus Voss
  2019-09-18 14:13                               ` Moore, Robert
  1 sibling, 1 reply; 57+ messages in thread
From: Nikolaus Voss @ 2019-09-16  9:46 UTC (permalink / raw)
  To: Moore, Robert
  Cc: Ferry Toth, Shevchenko, Andriy, Schmauss, Erik,
	Rafael J. Wysocki, Len Brown, Jacek Anaszewski, Pavel Machek,
	Dan Murphy, linux-acpi, devel, linux-kernel, Jan Kiszka

On Fri, 13 Sep 2019, Moore, Robert wrote:
>
>
> -----Original Message-----
> From: Ferry Toth [mailto:fntoth@gmail.com]
> Sent: Friday, September 13, 2019 9:48 AM
> To: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Moore, Robert <robert.moore@intel.com>
> Cc: Nikolaus Voss <nv@vosn.de>; Schmauss, Erik <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>; Jacek Anaszewski <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; linux-kernel@vger.kernel.org; nikolaus.voss@loewensteinmedical.de; Jan Kiszka <jan.kiszka@siemens.com>
> Subject: Re: [PATCH] ACPICA: make acpi_load_table() return table index
>
> Hello all,
>
> Sorry to have sent our message with cancelled e-mail address. I have correct this now.
>
> Op 13-09-19 om 17:12 schreef Shevchenko, Andriy:
>> On Fri, Sep 13, 2019 at 05:20:21PM +0300, Moore, Robert wrote:
>>> -----Original Message-----
>>> From: Nikolaus Voss [mailto:nv@vosn.de]
>>> Sent: Friday, September 13, 2019 12:44 AM
>>> To: Moore, Robert <robert.moore@intel.com>
>>> Cc: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik
>>> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len
>>> Brown <lenb@kernel.org>; Jacek Anaszewski
>>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy
>>> <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org;
>>> linux-kernel@vger.kernel.org; Ferry Toth <ftoth@telfort.nl>;
>>> nikolaus.voss@loewensteinmedical.de
>>> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table
>>> index
>>>
>>> Bob,
>>>
>>> On Thu, 12 Sep 2019, Moore, Robert wrote:
>>>> The ability to unload an ACPI table (especially AML tables such as
>>>> SSDTs) is in the process of being deprecated in ACPICA -- since it
>>>> is also deprecated in the current ACPI specification. This is being
>>>> done because of the difficulty of deleting the namespace entries for
>>>> the table.  FYI, Windows does not properly support this function either.
>>>
>>> ok, I see it can be a problem to unload an AML table with all it's
>>> consequences e.g. with respect to driver unregistering in setups with
>>> complex dependencies. It will only work properly under certain
>>> conditions
>>> - nevertheless acpi_tb_unload_table() is still exported in ACPICA and we should get this working as it worked before.
>>>
>>> AcpiTbUnloadTable is not exported, it is an internal interface only
>>> -- as recognized by the "AcpiTb".
>>
>> In Linux it became a part of ABI when the
>>
>> commit 772bf1e2878ecfca0d1f332071c83e021dd9cf01
>> Author: Jan Kiszka <jan.kiszka@siemens.com>
>> Date:   Fri Jun 9 20:36:31 2017 +0200
>>
>>      ACPI: configfs: Unload SSDT on configfs entry removal
>>
>> appeared in the kernel.
>
> And the commit message explains quite well why it is an important feature:
>
> "This allows to change SSDTs without rebooting the system.
> It also allows to destroy devices again that a dynamically loaded SSDT created.
>
> The biggest problem AFAIK is that under linux, many drivers cannot be unloaded. Also, there are many race conditions as the namespace entries "owned" by an SSDT being unloaded are deleted (out from underneath a driver).
>
> This is widely similar to the DT overlay behavior."
>
>>> I'm not sure that I want to change the interface to AcpiLoadTable
>>> just for something that is being deprecated. Already, we throw an
>>> ACPI_EXCEPTION if the Unload operator is encountered in the AML byte
>>> stream. The same thing with AcpiUnloadParentTable - it is being deprecated.
>>>
>>>      ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED,
>>>          "AML Unload operator is not supported"));

Bob, what is your suggestion to fix the regression then?

We could revert acpi_configfs.c to use acpi_tb_install_and_load_table() 
instead of acpi_load_table(), leaving loaded APCI objects uninitalized, 
but at least, unloading will work again.

Do we have any other options?

Niko

^ permalink raw reply	[flat|nested] 57+ messages in thread

* RE: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-16  9:46                             ` Nikolaus Voss
@ 2019-09-18 14:13                               ` Moore, Robert
  2019-09-18 14:31                                 ` Nikolaus Voss
  0 siblings, 1 reply; 57+ messages in thread
From: Moore, Robert @ 2019-09-18 14:13 UTC (permalink / raw)
  To: Nikolaus Voss
  Cc: Ferry Toth, Shevchenko, Andriy, Schmauss, Erik,
	Rafael J. Wysocki, Len Brown, Jacek Anaszewski, Pavel Machek,
	Dan Murphy, linux-acpi, devel, linux-kernel, Jan Kiszka



-----Original Message-----
From: Nikolaus Voss [mailto:nv@vosn.de] 
Sent: Monday, September 16, 2019 2:47 AM
To: Moore, Robert <robert.moore@intel.com>
Cc: Ferry Toth <fntoth@gmail.com>; Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>; Jacek Anaszewski <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; linux-kernel@vger.kernel.org; Jan Kiszka <jan.kiszka@siemens.com>
Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table index

On Fri, 13 Sep 2019, Moore, Robert wrote:
>
>
> -----Original Message-----
> From: Ferry Toth [mailto:fntoth@gmail.com]
> Sent: Friday, September 13, 2019 9:48 AM
> To: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Moore, Robert 
> <robert.moore@intel.com>
> Cc: Nikolaus Voss <nv@vosn.de>; Schmauss, Erik 
> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len 
> Brown <lenb@kernel.org>; Jacek Anaszewski 
> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy 
> <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; 
> linux-kernel@vger.kernel.org; nikolaus.voss@loewensteinmedical.de; Jan 
> Kiszka <jan.kiszka@siemens.com>
> Subject: Re: [PATCH] ACPICA: make acpi_load_table() return table index
>
> Hello all,
>
> Sorry to have sent our message with cancelled e-mail address. I have correct this now.
>
> Op 13-09-19 om 17:12 schreef Shevchenko, Andriy:
>> On Fri, Sep 13, 2019 at 05:20:21PM +0300, Moore, Robert wrote:
>>> -----Original Message-----
>>> From: Nikolaus Voss [mailto:nv@vosn.de]
>>> Sent: Friday, September 13, 2019 12:44 AM
>>> To: Moore, Robert <robert.moore@intel.com>
>>> Cc: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik 
>>> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; 
>>> Len Brown <lenb@kernel.org>; Jacek Anaszewski 
>>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan 
>>> Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org; 
>>> devel@acpica.org; linux-kernel@vger.kernel.org; Ferry Toth 
>>> <ftoth@telfort.nl>; nikolaus.voss@loewensteinmedical.de
>>> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table 
>>> index
>>>
>>> Bob,
>>>
>>> On Thu, 12 Sep 2019, Moore, Robert wrote:
>>>> The ability to unload an ACPI table (especially AML tables such as
>>>> SSDTs) is in the process of being deprecated in ACPICA -- since it 
>>>> is also deprecated in the current ACPI specification. This is being 
>>>> done because of the difficulty of deleting the namespace entries 
>>>> for the table.  FYI, Windows does not properly support this function either.
>>>
>>> ok, I see it can be a problem to unload an AML table with all it's 
>>> consequences e.g. with respect to driver unregistering in setups 
>>> with complex dependencies. It will only work properly under certain 
>>> conditions
>>> - nevertheless acpi_tb_unload_table() is still exported in ACPICA and we should get this working as it worked before.
>>>
>>> AcpiTbUnloadTable is not exported, it is an internal interface only
>>> -- as recognized by the "AcpiTb".
>>
>> In Linux it became a part of ABI when the
>>
>> commit 772bf1e2878ecfca0d1f332071c83e021dd9cf01
>> Author: Jan Kiszka <jan.kiszka@siemens.com>
>> Date:   Fri Jun 9 20:36:31 2017 +0200
>>
>>      ACPI: configfs: Unload SSDT on configfs entry removal
>>
>> appeared in the kernel.
>
> And the commit message explains quite well why it is an important feature:
>
> "This allows to change SSDTs without rebooting the system.
> It also allows to destroy devices again that a dynamically loaded SSDT created.
>
> The biggest problem AFAIK is that under linux, many drivers cannot be unloaded. Also, there are many race conditions as the namespace entries "owned" by an SSDT being unloaded are deleted (out from underneath a driver).
>
> This is widely similar to the DT overlay behavior."
>
>>> I'm not sure that I want to change the interface to AcpiLoadTable 
>>> just for something that is being deprecated. Already, we throw an 
>>> ACPI_EXCEPTION if the Unload operator is encountered in the AML byte 
>>> stream. The same thing with AcpiUnloadParentTable - it is being deprecated.
>>>
>>>      ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED,
>>>          "AML Unload operator is not supported"));

Bob, what is your suggestion to fix the regression then?

We could revert acpi_configfs.c to use acpi_tb_install_and_load_table() instead of acpi_load_table(), leaving loaded APCI objects uninitalized, but at least, unloading will work again.

I guess my next question is: why do you want to unload a table in the first place?


Do we have any other options?

Niko

^ permalink raw reply	[flat|nested] 57+ messages in thread

* RE: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-18 14:13                               ` Moore, Robert
@ 2019-09-18 14:31                                 ` Nikolaus Voss
  2019-09-19 17:05                                   ` Moore, Robert
  0 siblings, 1 reply; 57+ messages in thread
From: Nikolaus Voss @ 2019-09-18 14:31 UTC (permalink / raw)
  To: Moore, Robert
  Cc: Ferry Toth, Shevchenko, Andriy, Schmauss, Erik,
	Rafael J. Wysocki, Len Brown, Jacek Anaszewski, Pavel Machek,
	Dan Murphy, linux-acpi, devel, linux-kernel, Jan Kiszka

On Wed, 18 Sep 2019, Moore, Robert wrote:
>
>
> -----Original Message-----
> From: Nikolaus Voss [mailto:nv@vosn.de]
> Sent: Monday, September 16, 2019 2:47 AM
> To: Moore, Robert <robert.moore@intel.com>
> Cc: Ferry Toth <fntoth@gmail.com>; Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>; Jacek Anaszewski <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; linux-kernel@vger.kernel.org; Jan Kiszka <jan.kiszka@siemens.com>
> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table index
>
> On Fri, 13 Sep 2019, Moore, Robert wrote:
>>
>>
>> -----Original Message-----
>> From: Ferry Toth [mailto:fntoth@gmail.com]
>> Sent: Friday, September 13, 2019 9:48 AM
>> To: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Moore, Robert
>> <robert.moore@intel.com>
>> Cc: Nikolaus Voss <nv@vosn.de>; Schmauss, Erik
>> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len
>> Brown <lenb@kernel.org>; Jacek Anaszewski
>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy
>> <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org;
>> linux-kernel@vger.kernel.org; nikolaus.voss@loewensteinmedical.de; Jan
>> Kiszka <jan.kiszka@siemens.com>
>> Subject: Re: [PATCH] ACPICA: make acpi_load_table() return table index
>>
>> Hello all,
>>
>> Sorry to have sent our message with cancelled e-mail address. I have correct this now.
>>
>> Op 13-09-19 om 17:12 schreef Shevchenko, Andriy:
>>> On Fri, Sep 13, 2019 at 05:20:21PM +0300, Moore, Robert wrote:
>>>> -----Original Message-----
>>>> From: Nikolaus Voss [mailto:nv@vosn.de]
>>>> Sent: Friday, September 13, 2019 12:44 AM
>>>> To: Moore, Robert <robert.moore@intel.com>
>>>> Cc: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik
>>>> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>;
>>>> Len Brown <lenb@kernel.org>; Jacek Anaszewski
>>>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan
>>>> Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org;
>>>> devel@acpica.org; linux-kernel@vger.kernel.org; Ferry Toth
>>>> <ftoth@telfort.nl>; nikolaus.voss@loewensteinmedical.de
>>>> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table
>>>> index
>>>>
>>>> Bob,
>>>>
>>>> On Thu, 12 Sep 2019, Moore, Robert wrote:
>>>>> The ability to unload an ACPI table (especially AML tables such as
>>>>> SSDTs) is in the process of being deprecated in ACPICA -- since it
>>>>> is also deprecated in the current ACPI specification. This is being
>>>>> done because of the difficulty of deleting the namespace entries
>>>>> for the table.  FYI, Windows does not properly support this function either.
>>>>
>>>> ok, I see it can be a problem to unload an AML table with all it's
>>>> consequences e.g. with respect to driver unregistering in setups
>>>> with complex dependencies. It will only work properly under certain
>>>> conditions
>>>> - nevertheless acpi_tb_unload_table() is still exported in ACPICA and we should get this working as it worked before.
>>>>
>>>> AcpiTbUnloadTable is not exported, it is an internal interface only
>>>> -- as recognized by the "AcpiTb".
>>>
>>> In Linux it became a part of ABI when the
>>>
>>> commit 772bf1e2878ecfca0d1f332071c83e021dd9cf01
>>> Author: Jan Kiszka <jan.kiszka@siemens.com>
>>> Date:   Fri Jun 9 20:36:31 2017 +0200
>>>
>>>      ACPI: configfs: Unload SSDT on configfs entry removal
>>>
>>> appeared in the kernel.
>>
>> And the commit message explains quite well why it is an important feature:
>>
>> "This allows to change SSDTs without rebooting the system.
>> It also allows to destroy devices again that a dynamically loaded SSDT created.
>>
>> The biggest problem AFAIK is that under linux, many drivers cannot be unloaded. Also, there are many race conditions as the namespace entries "owned" by an SSDT being unloaded are deleted (out from underneath a driver).
>>
>> This is widely similar to the DT overlay behavior."
>>
>>>> I'm not sure that I want to change the interface to AcpiLoadTable
>>>> just for something that is being deprecated. Already, we throw an
>>>> ACPI_EXCEPTION if the Unload operator is encountered in the AML byte
>>>> stream. The same thing with AcpiUnloadParentTable - it is being deprecated.
>>>>
>>>>      ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED,
>>>>          "AML Unload operator is not supported"));
>
> Bob, what is your suggestion to fix the regression then?
>
> We could revert acpi_configfs.c to use acpi_tb_install_and_load_table() 
> instead of acpi_load_table(), leaving loaded APCI objects uninitalized, 
> but at least, unloading will work again.
>
> I guess my next question is: why do you want to unload a table in the 
> first place?

Because it worked before and there are people who rely on it. If it's 
deprecated there should be a user notification and a reasonable 
end-of-life timeline to give these users a chance to develop an 
alternative solution.

Niko

>
>
> Do we have any other options?
>
> Niko
>

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-12  8:07               ` [PATCH] ACPICA: make acpi_load_table() return table index Nikolaus Voss
  2019-09-12 14:19                 ` Moore, Robert
@ 2019-09-19  8:13                 ` Rafael J. Wysocki
  2019-09-23  9:08                   ` Nikolaus Voss
  2019-09-23  9:47                   ` [PATCH] ACPICA: Introduce acpi_load_table_with_index() Nikolaus Voss
  2019-09-26 16:09                 ` [PATCH] ACPICA: make acpi_load_table() return table index Schmauss, Erik
  2 siblings, 2 replies; 57+ messages in thread
From: Rafael J. Wysocki @ 2019-09-19  8:13 UTC (permalink / raw)
  To: Nikolaus Voss
  Cc: Shevchenko, Andriy, Schmauss, Erik, Moore, Robert, Len Brown,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, linux-acpi, devel,
	linux-kernel, nv

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 <andriy.shevchenko@linux.intel.com>
> Fixes: d06c47e3dd07f ("ACPI: configfs: Resolve objects on host-directed table loads")
> Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>

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))
> 





^ permalink raw reply	[flat|nested] 57+ messages in thread

* RE: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-18 14:31                                 ` Nikolaus Voss
@ 2019-09-19 17:05                                   ` Moore, Robert
  2019-09-23  9:05                                     ` Nikolaus Voss
  0 siblings, 1 reply; 57+ messages in thread
From: Moore, Robert @ 2019-09-19 17:05 UTC (permalink / raw)
  To: Nikolaus Voss
  Cc: Ferry Toth, Shevchenko, Andriy, Schmauss, Erik,
	Rafael J. Wysocki, Len Brown, Jacek Anaszewski, Pavel Machek,
	Dan Murphy, linux-acpi, devel, linux-kernel, Jan Kiszka



-----Original Message-----
From: Nikolaus Voss [mailto:nv@vosn.de] 
Sent: Wednesday, September 18, 2019 7:32 AM
To: Moore, Robert <robert.moore@intel.com>
Cc: Ferry Toth <fntoth@gmail.com>; Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>; Jacek Anaszewski <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; linux-kernel@vger.kernel.org; Jan Kiszka <jan.kiszka@siemens.com>
Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table index

On Wed, 18 Sep 2019, Moore, Robert wrote:
>
>
> -----Original Message-----
> From: Nikolaus Voss [mailto:nv@vosn.de]
> Sent: Monday, September 16, 2019 2:47 AM
> To: Moore, Robert <robert.moore@intel.com>
> Cc: Ferry Toth <fntoth@gmail.com>; Shevchenko, Andriy 
> <andriy.shevchenko@intel.com>; Schmauss, Erik 
> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len 
> Brown <lenb@kernel.org>; Jacek Anaszewski 
> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy 
> <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; 
> linux-kernel@vger.kernel.org; Jan Kiszka <jan.kiszka@siemens.com>
> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table index
>
> On Fri, 13 Sep 2019, Moore, Robert wrote:
>>
>>
>> -----Original Message-----
>> From: Ferry Toth [mailto:fntoth@gmail.com]
>> Sent: Friday, September 13, 2019 9:48 AM
>> To: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Moore, Robert 
>> <robert.moore@intel.com>
>> Cc: Nikolaus Voss <nv@vosn.de>; Schmauss, Erik 
>> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len 
>> Brown <lenb@kernel.org>; Jacek Anaszewski 
>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy 
>> <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; 
>> linux-kernel@vger.kernel.org; nikolaus.voss@loewensteinmedical.de; 
>> Jan Kiszka <jan.kiszka@siemens.com>
>> Subject: Re: [PATCH] ACPICA: make acpi_load_table() return table 
>> index
>>
>> Hello all,
>>
>> Sorry to have sent our message with cancelled e-mail address. I have correct this now.
>>
>> Op 13-09-19 om 17:12 schreef Shevchenko, Andriy:
>>> On Fri, Sep 13, 2019 at 05:20:21PM +0300, Moore, Robert wrote:
>>>> -----Original Message-----
>>>> From: Nikolaus Voss [mailto:nv@vosn.de]
>>>> Sent: Friday, September 13, 2019 12:44 AM
>>>> To: Moore, Robert <robert.moore@intel.com>
>>>> Cc: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, 
>>>> Erik <erik.schmauss@intel.com>; Rafael J. Wysocki 
>>>> <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>; Jacek Anaszewski 
>>>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan 
>>>> Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org; 
>>>> devel@acpica.org; linux-kernel@vger.kernel.org; Ferry Toth 
>>>> <ftoth@telfort.nl>; nikolaus.voss@loewensteinmedical.de
>>>> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table 
>>>> index
>>>>
>>>> Bob,
>>>>
>>>> On Thu, 12 Sep 2019, Moore, Robert wrote:
>>>>> The ability to unload an ACPI table (especially AML tables such as
>>>>> SSDTs) is in the process of being deprecated in ACPICA -- since it 
>>>>> is also deprecated in the current ACPI specification. This is 
>>>>> being done because of the difficulty of deleting the namespace 
>>>>> entries for the table.  FYI, Windows does not properly support this function either.
>>>>
>>>> ok, I see it can be a problem to unload an AML table with all it's 
>>>> consequences e.g. with respect to driver unregistering in setups 
>>>> with complex dependencies. It will only work properly under certain 
>>>> conditions
>>>> - nevertheless acpi_tb_unload_table() is still exported in ACPICA and we should get this working as it worked before.
>>>>
>>>> AcpiTbUnloadTable is not exported, it is an internal interface only
>>>> -- as recognized by the "AcpiTb".
>>>
>>> In Linux it became a part of ABI when the
>>>
>>> commit 772bf1e2878ecfca0d1f332071c83e021dd9cf01
>>> Author: Jan Kiszka <jan.kiszka@siemens.com>
>>> Date:   Fri Jun 9 20:36:31 2017 +0200
>>>
>>>      ACPI: configfs: Unload SSDT on configfs entry removal
>>>
>>> appeared in the kernel.
>>
>> And the commit message explains quite well why it is an important feature:
>>
>> "This allows to change SSDTs without rebooting the system.
>> It also allows to destroy devices again that a dynamically loaded SSDT created.
>>
>> The biggest problem AFAIK is that under linux, many drivers cannot be unloaded. Also, there are many race conditions as the namespace entries "owned" by an SSDT being unloaded are deleted (out from underneath a driver).
>>
>> This is widely similar to the DT overlay behavior."
>>
>>>> I'm not sure that I want to change the interface to AcpiLoadTable 
>>>> just for something that is being deprecated. Already, we throw an 
>>>> ACPI_EXCEPTION if the Unload operator is encountered in the AML 
>>>> byte stream. The same thing with AcpiUnloadParentTable - it is being deprecated.
>>>>
>>>>      ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED,
>>>>          "AML Unload operator is not supported"));
>
> Bob, what is your suggestion to fix the regression then?
>
> We could revert acpi_configfs.c to use 
> acpi_tb_install_and_load_table() instead of acpi_load_table(), leaving 
> loaded APCI objects uninitalized, but at least, unloading will work again.
>
> I guess my next question is: why do you want to unload a table in the 
> first place?

Because it worked before and there are people who rely on it. If it's deprecated there should be a user notification and a reasonable end-of-life timeline to give these users a chance to develop an alternative solution.

So, I still don't understand why this no longer works. We did not make any purposeful changes in this area - AFAIK.
Bob

Niko

>
>
> Do we have any other options?
>
> Niko
>

^ permalink raw reply	[flat|nested] 57+ messages in thread

* RE: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-19 17:05                                   ` Moore, Robert
@ 2019-09-23  9:05                                     ` Nikolaus Voss
  2019-09-24 19:41                                       ` Moore, Robert
  0 siblings, 1 reply; 57+ messages in thread
From: Nikolaus Voss @ 2019-09-23  9:05 UTC (permalink / raw)
  To: Moore, Robert
  Cc: Ferry Toth, Shevchenko, Andriy, Schmauss, Erik,
	Rafael J. Wysocki, Len Brown, Jacek Anaszewski, Pavel Machek,
	Dan Murphy, linux-acpi, devel, linux-kernel, Jan Kiszka

On Thu, 19 Sep 2019, Moore, Robert wrote:
>
>
> -----Original Message-----
> From: Nikolaus Voss [mailto:nv@vosn.de]
> Sent: Wednesday, September 18, 2019 7:32 AM
> To: Moore, Robert <robert.moore@intel.com>
> Cc: Ferry Toth <fntoth@gmail.com>; Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>; Jacek Anaszewski <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; linux-kernel@vger.kernel.org; Jan Kiszka <jan.kiszka@siemens.com>
> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table index
>
> On Wed, 18 Sep 2019, Moore, Robert wrote:
>>
>>
>> -----Original Message-----
>> From: Nikolaus Voss [mailto:nv@vosn.de]
>> Sent: Monday, September 16, 2019 2:47 AM
>> To: Moore, Robert <robert.moore@intel.com>
>> Cc: Ferry Toth <fntoth@gmail.com>; Shevchenko, Andriy
>> <andriy.shevchenko@intel.com>; Schmauss, Erik
>> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len
>> Brown <lenb@kernel.org>; Jacek Anaszewski
>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy
>> <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org;
>> linux-kernel@vger.kernel.org; Jan Kiszka <jan.kiszka@siemens.com>
>> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table index
>>
>> On Fri, 13 Sep 2019, Moore, Robert wrote:
>>>
>>>
>>> -----Original Message-----
>>> From: Ferry Toth [mailto:fntoth@gmail.com]
>>> Sent: Friday, September 13, 2019 9:48 AM
>>> To: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Moore, Robert
>>> <robert.moore@intel.com>
>>> Cc: Nikolaus Voss <nv@vosn.de>; Schmauss, Erik
>>> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len
>>> Brown <lenb@kernel.org>; Jacek Anaszewski
>>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy
>>> <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org;
>>> linux-kernel@vger.kernel.org; nikolaus.voss@loewensteinmedical.de;
>>> Jan Kiszka <jan.kiszka@siemens.com>
>>> Subject: Re: [PATCH] ACPICA: make acpi_load_table() return table
>>> index
>>>
>>> Hello all,
>>>
>>> Sorry to have sent our message with cancelled e-mail address. I have correct this now.
>>>
>>> Op 13-09-19 om 17:12 schreef Shevchenko, Andriy:
>>>> On Fri, Sep 13, 2019 at 05:20:21PM +0300, Moore, Robert wrote:
>>>>> -----Original Message-----
>>>>> From: Nikolaus Voss [mailto:nv@vosn.de]
>>>>> Sent: Friday, September 13, 2019 12:44 AM
>>>>> To: Moore, Robert <robert.moore@intel.com>
>>>>> Cc: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss,
>>>>> Erik <erik.schmauss@intel.com>; Rafael J. Wysocki
>>>>> <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>; Jacek Anaszewski
>>>>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan
>>>>> Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org;
>>>>> devel@acpica.org; linux-kernel@vger.kernel.org; Ferry Toth
>>>>> <ftoth@telfort.nl>; nikolaus.voss@loewensteinmedical.de
>>>>> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table
>>>>> index
>>>>>
>>>>> Bob,
>>>>>
>>>>> On Thu, 12 Sep 2019, Moore, Robert wrote:
>>>>>> The ability to unload an ACPI table (especially AML tables such as
>>>>>> SSDTs) is in the process of being deprecated in ACPICA -- since it
>>>>>> is also deprecated in the current ACPI specification. This is
>>>>>> being done because of the difficulty of deleting the namespace
>>>>>> entries for the table.  FYI, Windows does not properly support this function either.
>>>>>
>>>>> ok, I see it can be a problem to unload an AML table with all it's
>>>>> consequences e.g. with respect to driver unregistering in setups
>>>>> with complex dependencies. It will only work properly under certain
>>>>> conditions
>>>>> - nevertheless acpi_tb_unload_table() is still exported in ACPICA and we should get this working as it worked before.
>>>>>
>>>>> AcpiTbUnloadTable is not exported, it is an internal interface only
>>>>> -- as recognized by the "AcpiTb".
>>>>
>>>> In Linux it became a part of ABI when the
>>>>
>>>> commit 772bf1e2878ecfca0d1f332071c83e021dd9cf01
>>>> Author: Jan Kiszka <jan.kiszka@siemens.com>
>>>> Date:   Fri Jun 9 20:36:31 2017 +0200
>>>>
>>>>      ACPI: configfs: Unload SSDT on configfs entry removal
>>>>
>>>> appeared in the kernel.
>>>
>>> And the commit message explains quite well why it is an important feature:
>>>
>>> "This allows to change SSDTs without rebooting the system.
>>> It also allows to destroy devices again that a dynamically loaded SSDT created.
>>>
>>> The biggest problem AFAIK is that under linux, many drivers cannot be unloaded. Also, there are many race conditions as the namespace entries "owned" by an SSDT being unloaded are deleted (out from underneath a driver).
>>>
>>> This is widely similar to the DT overlay behavior."
>>>
>>>>> I'm not sure that I want to change the interface to AcpiLoadTable
>>>>> just for something that is being deprecated. Already, we throw an
>>>>> ACPI_EXCEPTION if the Unload operator is encountered in the AML
>>>>> byte stream. The same thing with AcpiUnloadParentTable - it is being deprecated.
>>>>>
>>>>>      ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED,
>>>>>          "AML Unload operator is not supported"));
>>
>> Bob, what is your suggestion to fix the regression then?
>>
>> We could revert acpi_configfs.c to use
>> acpi_tb_install_and_load_table() instead of acpi_load_table(), leaving
>> loaded APCI objects uninitalized, but at least, unloading will work again.
>>
>> I guess my next question is: why do you want to unload a table in the
>> first place?
>
> Because it worked before and there are people who rely on it. If it's 
> deprecated there should be a user notification and a reasonable 
> end-of-life timeline to give these users a chance to develop an 
> alternative solution.
>
> So, I still don't understand why this no longer works. We did not make 
> any purposeful changes in this area - AFAIK. Bob

It's because the acpi_configfs driver formerly used 
acpi_tb_install_and_load_table() which returns the table index, but 
doesn't resolve the references. It now uses acpi_load_table() which 
resolves the references, but doesn't return the table index, so unloading 
doesn't work any more.

>
> Niko
>
>>
>>
>> Do we have any other options?
>>
>> Niko
>>
>

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-19  8:13                 ` Rafael J. Wysocki
@ 2019-09-23  9:08                   ` Nikolaus Voss
  2019-09-23  9:47                   ` [PATCH] ACPICA: Introduce acpi_load_table_with_index() Nikolaus Voss
  1 sibling, 0 replies; 57+ messages in thread
From: Nikolaus Voss @ 2019-09-23  9:08 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Shevchenko, Andriy, Schmauss, Erik, Moore, Robert, Len Brown,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, linux-acpi, devel,
	linux-kernel

On Thu, 19 Sep 2019, Rafael J. Wysocki wrote:
> 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 <andriy.shevchenko@linux.intel.com>
>> Fixes: d06c47e3dd07f ("ACPI: configfs: Resolve objects on host-directed table loads")
>> Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
>
> 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.

Ok, I'll prepare a patch.

>
>> ---
>>  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))
>>
>
>
>
>

^ permalink raw reply	[flat|nested] 57+ messages in thread

* [PATCH] ACPICA: Introduce acpi_load_table_with_index()
  2019-09-19  8:13                 ` Rafael J. Wysocki
  2019-09-23  9:08                   ` Nikolaus Voss
@ 2019-09-23  9:47                   ` Nikolaus Voss
  2019-09-24 12:07                     ` Shevchenko, Andriy
  2019-09-24 15:11                     ` Andy Shevchenko
  1 sibling, 2 replies; 57+ messages in thread
From: Nikolaus Voss @ 2019-09-23  9:47 UTC (permalink / raw)
  To: Shevchenko, Andriy, Schmauss, Erik, Rafael J. Wysocki, Moore, Robert
  Cc: Len Brown, Jacek Anaszewski, Pavel Machek, Dan Murphy,
	linux-acpi, devel, linux-kernel, nv, Nikolaus Voss

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(),
does not provide this information, so a new function
acpi_load_table_with_index() with the same functionality,
but an optional pointer to the loaded table index is introduced.

The new function is used in the acpi_configfs driver to save the
index of the newly loaded table in order to unload it later.

Reported-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Fixes: d06c47e3dd07f ("ACPI: configfs: Resolve objects on host-directed table loads")
Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
---
 drivers/acpi/acpi_configfs.c   |  2 +-
 drivers/acpi/acpica/tbxfload.c | 43 ++++++++++++++++++++++++++++++++++
 include/acpi/acpixf.h          |  6 +++++
 3 files changed, 50 insertions(+), 1 deletion(-)

diff --git a/drivers/acpi/acpi_configfs.c b/drivers/acpi/acpi_configfs.c
index 57d9d574d4dd..9e77d5a266c0 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_with_index(table->header, &table->index);
 	if (ret) {
 		kfree(table->header);
 		table->header = NULL;
diff --git a/drivers/acpi/acpica/tbxfload.c b/drivers/acpi/acpica/tbxfload.c
index 86f1693f6d29..7ea4fc879cb6 100644
--- a/drivers/acpi/acpica/tbxfload.c
+++ b/drivers/acpi/acpica/tbxfload.c
@@ -309,6 +309,49 @@ acpi_status acpi_load_table(struct acpi_table_header *table)
 
 ACPI_EXPORT_SYMBOL(acpi_load_table)
 
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_load_table_with_index
+ *
+ * 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: see acpi_load_table() above. Additionally returns the index
+ *              of the newly created table in table_idx.
+ *
+ ******************************************************************************/
+acpi_status acpi_load_table_with_index(struct acpi_table_header *table,
+				       u32 *table_idx)
+{
+	acpi_status status;
+	u32 table_index;
+
+	ACPI_FUNCTION_TRACE(acpi_load_table_with_index);
+
+	/* Parameter validation */
+	if (!table)
+		return_ACPI_STATUS(AE_BAD_PARAMETER);
+
+	/* Install the table and load it into the namespace */
+	ACPI_INFO(("Host-directed Dynamic ACPI Table Load:"));
+	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 */
+		acpi_ns_initialize_objects();
+	}
+
+	return_ACPI_STATUS(status);
+}
+ACPI_EXPORT_SYMBOL(acpi_load_table_with_index)
+
 /*******************************************************************************
  *
  * FUNCTION:    acpi_unload_parent_table
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h
index e5e041413581..af375ab318de 100644
--- a/include/acpi/acpixf.h
+++ b/include/acpi/acpixf.h
@@ -460,6 +460,12 @@ ACPI_EXTERNAL_RETURN_STATUS(acpi_status ACPI_INIT_FUNCTION
 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
 			    acpi_load_table(struct acpi_table_header *table))
 
+
+ACPI_EXTERNAL_RETURN_STATUS(acpi_status
+			    acpi_load_table_with_index(
+				    struct acpi_table_header *table,
+				    u32 *table_idx))
+
 ACPI_EXTERNAL_RETURN_STATUS(acpi_status
 			    acpi_unload_parent_table(acpi_handle object))
 
-- 
2.17.1


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH] ACPICA: Introduce acpi_load_table_with_index()
  2019-09-23  9:47                   ` [PATCH] ACPICA: Introduce acpi_load_table_with_index() Nikolaus Voss
@ 2019-09-24 12:07                     ` Shevchenko, Andriy
  2019-09-24 12:08                       ` Shevchenko, Andriy
  2019-09-24 15:11                     ` Andy Shevchenko
  1 sibling, 1 reply; 57+ messages in thread
From: Shevchenko, Andriy @ 2019-09-24 12:07 UTC (permalink / raw)
  To: Nikolaus Voss
  Cc: Schmauss, Erik, Rafael J. Wysocki, Moore, Robert, Len Brown,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, linux-acpi, devel,
	linux-kernel, nv, Ferry Toth

On Mon, Sep 23, 2019 at 11:47:01AM +0200, 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(),
> does not provide this information, so a new function
> acpi_load_table_with_index() with the same functionality,
> but an optional pointer to the loaded table index is introduced.
> 
> The new function is used in the acpi_configfs driver to save the
> index of the newly loaded table in order to unload it later.

I'll test it later, though couple of remarks:
- would it make sense to provide a counter part helper for unloading? Now it
  looks a bit inconsistent in configfs when we use acpi_load_*() vs.
  acpi_tb_*() in remove.
- please, include Ferry into Cc (as done in this mail)

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH] ACPICA: Introduce acpi_load_table_with_index()
  2019-09-24 12:07                     ` Shevchenko, Andriy
@ 2019-09-24 12:08                       ` Shevchenko, Andriy
  2019-09-25 10:20                         ` Nikolaus Voss
  0 siblings, 1 reply; 57+ messages in thread
From: Shevchenko, Andriy @ 2019-09-24 12:08 UTC (permalink / raw)
  To: Nikolaus Voss
  Cc: Schmauss, Erik, Rafael J. Wysocki, Moore, Robert, Len Brown,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, linux-acpi, devel,
	linux-kernel, nv, Ferry Toth

On Tue, Sep 24, 2019 at 03:07:34PM +0300, Shevchenko, Andriy wrote:
> On Mon, Sep 23, 2019 at 11:47:01AM +0200, 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(),
> > does not provide this information, so a new function
> > acpi_load_table_with_index() with the same functionality,
> > but an optional pointer to the loaded table index is introduced.
> > 
> > The new function is used in the acpi_configfs driver to save the
> > index of the newly loaded table in order to unload it later.
> 
> I'll test it later, though couple of remarks:
> - would it make sense to provide a counter part helper for unloading? Now it
>   looks a bit inconsistent in configfs when we use acpi_load_*() vs.
>   acpi_tb_*() in remove.

...and I think we may unexport acpi_tb_* in this case as Bob suggested for it
to be internal API.

> - please, include Ferry into Cc (as done in this mail)


-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH] ACPICA: Introduce acpi_load_table_with_index()
  2019-09-23  9:47                   ` [PATCH] ACPICA: Introduce acpi_load_table_with_index() Nikolaus Voss
  2019-09-24 12:07                     ` Shevchenko, Andriy
@ 2019-09-24 15:11                     ` Andy Shevchenko
  2019-09-25 10:22                       ` Nikolaus Voss
  1 sibling, 1 reply; 57+ messages in thread
From: Andy Shevchenko @ 2019-09-24 15:11 UTC (permalink / raw)
  To: Nikolaus Voss
  Cc: Schmauss, Erik, Rafael J. Wysocki, Moore, Robert, Len Brown,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, linux-acpi, devel,
	linux-kernel, nv

On Mon, Sep 23, 2019 at 11:47:01AM +0200, 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(),
> does not provide this information, so a new function
> acpi_load_table_with_index() with the same functionality,
> but an optional pointer to the loaded table index is introduced.
> 
> The new function is used in the acpi_configfs driver to save the
> index of the newly loaded table in order to unload it later.
> 

Tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

But consider addressing my comments in one of previous mails.

> Reported-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Fixes: d06c47e3dd07f ("ACPI: configfs: Resolve objects on host-directed table loads")
> Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> ---
>  drivers/acpi/acpi_configfs.c   |  2 +-
>  drivers/acpi/acpica/tbxfload.c | 43 ++++++++++++++++++++++++++++++++++
>  include/acpi/acpixf.h          |  6 +++++
>  3 files changed, 50 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/acpi/acpi_configfs.c b/drivers/acpi/acpi_configfs.c
> index 57d9d574d4dd..9e77d5a266c0 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_with_index(table->header, &table->index);
>  	if (ret) {
>  		kfree(table->header);
>  		table->header = NULL;
> diff --git a/drivers/acpi/acpica/tbxfload.c b/drivers/acpi/acpica/tbxfload.c
> index 86f1693f6d29..7ea4fc879cb6 100644
> --- a/drivers/acpi/acpica/tbxfload.c
> +++ b/drivers/acpi/acpica/tbxfload.c
> @@ -309,6 +309,49 @@ acpi_status acpi_load_table(struct acpi_table_header *table)
>  
>  ACPI_EXPORT_SYMBOL(acpi_load_table)
>  
> +/*******************************************************************************
> + *
> + * FUNCTION:    acpi_load_table_with_index
> + *
> + * 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: see acpi_load_table() above. Additionally returns the index
> + *              of the newly created table in table_idx.
> + *
> + ******************************************************************************/
> +acpi_status acpi_load_table_with_index(struct acpi_table_header *table,
> +				       u32 *table_idx)
> +{
> +	acpi_status status;
> +	u32 table_index;
> +
> +	ACPI_FUNCTION_TRACE(acpi_load_table_with_index);
> +
> +	/* Parameter validation */
> +	if (!table)
> +		return_ACPI_STATUS(AE_BAD_PARAMETER);
> +
> +	/* Install the table and load it into the namespace */
> +	ACPI_INFO(("Host-directed Dynamic ACPI Table Load:"));
> +	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 */
> +		acpi_ns_initialize_objects();
> +	}
> +
> +	return_ACPI_STATUS(status);
> +}
> +ACPI_EXPORT_SYMBOL(acpi_load_table_with_index)
> +
>  /*******************************************************************************
>   *
>   * FUNCTION:    acpi_unload_parent_table
> diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h
> index e5e041413581..af375ab318de 100644
> --- a/include/acpi/acpixf.h
> +++ b/include/acpi/acpixf.h
> @@ -460,6 +460,12 @@ ACPI_EXTERNAL_RETURN_STATUS(acpi_status ACPI_INIT_FUNCTION
>  ACPI_EXTERNAL_RETURN_STATUS(acpi_status
>  			    acpi_load_table(struct acpi_table_header *table))
>  
> +
> +ACPI_EXTERNAL_RETURN_STATUS(acpi_status
> +			    acpi_load_table_with_index(
> +				    struct acpi_table_header *table,
> +				    u32 *table_idx))
> +
>  ACPI_EXTERNAL_RETURN_STATUS(acpi_status
>  			    acpi_unload_parent_table(acpi_handle object))
>  
> -- 
> 2.17.1
> 

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 57+ messages in thread

* RE: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-23  9:05                                     ` Nikolaus Voss
@ 2019-09-24 19:41                                       ` Moore, Robert
  2019-09-25 10:18                                         ` Nikolaus Voss
  0 siblings, 1 reply; 57+ messages in thread
From: Moore, Robert @ 2019-09-24 19:41 UTC (permalink / raw)
  To: Nikolaus Voss
  Cc: Ferry Toth, Shevchenko, Andriy, Schmauss, Erik,
	Rafael J. Wysocki, Len Brown, Jacek Anaszewski, Pavel Machek,
	Dan Murphy, linux-acpi, devel, linux-kernel, Jan Kiszka

How about this:
Go back to using acpi_tb_install_and_load_table(), but then call acpi_ns_initialize_objects afterwards This is what acpi_load_table does.


    ACPI_INFO (("Host-directed Dynamic ACPI Table Load:"));
    Status = AcpiTbInstallAndLoadTable (ACPI_PTR_TO_PHYSADDR (Table),
        ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, FALSE, &TableIndex);
    if (ACPI_SUCCESS (Status))
    {
        /* Complete the initialization/resolution of new objects */

        AcpiNsInitializeObjects ();
    }


-----Original Message-----
From: Nikolaus Voss <nv@vosn.de> 
Sent: Monday, September 23, 2019 2:05 AM
To: Moore, Robert <robert.moore@intel.com>
Cc: Ferry Toth <fntoth@gmail.com>; Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>; Jacek Anaszewski <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; linux-kernel@vger.kernel.org; Jan Kiszka <jan.kiszka@siemens.com>
Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table index

On Thu, 19 Sep 2019, Moore, Robert wrote:
>
>
> -----Original Message-----
> From: Nikolaus Voss [mailto:nv@vosn.de]
> Sent: Wednesday, September 18, 2019 7:32 AM
> To: Moore, Robert <robert.moore@intel.com>
> Cc: Ferry Toth <fntoth@gmail.com>; Shevchenko, Andriy 
> <andriy.shevchenko@intel.com>; Schmauss, Erik 
> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len 
> Brown <lenb@kernel.org>; Jacek Anaszewski 
> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy 
> <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; 
> linux-kernel@vger.kernel.org; Jan Kiszka <jan.kiszka@siemens.com>
> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table index
>
> On Wed, 18 Sep 2019, Moore, Robert wrote:
>>
>>
>> -----Original Message-----
>> From: Nikolaus Voss [mailto:nv@vosn.de]
>> Sent: Monday, September 16, 2019 2:47 AM
>> To: Moore, Robert <robert.moore@intel.com>
>> Cc: Ferry Toth <fntoth@gmail.com>; Shevchenko, Andriy 
>> <andriy.shevchenko@intel.com>; Schmauss, Erik 
>> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len 
>> Brown <lenb@kernel.org>; Jacek Anaszewski 
>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy 
>> <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; 
>> linux-kernel@vger.kernel.org; Jan Kiszka <jan.kiszka@siemens.com>
>> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table 
>> index
>>
>> On Fri, 13 Sep 2019, Moore, Robert wrote:
>>>
>>>
>>> -----Original Message-----
>>> From: Ferry Toth [mailto:fntoth@gmail.com]
>>> Sent: Friday, September 13, 2019 9:48 AM
>>> To: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Moore, Robert 
>>> <robert.moore@intel.com>
>>> Cc: Nikolaus Voss <nv@vosn.de>; Schmauss, Erik 
>>> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; 
>>> Len Brown <lenb@kernel.org>; Jacek Anaszewski 
>>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan 
>>> Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org; 
>>> devel@acpica.org; linux-kernel@vger.kernel.org; 
>>> nikolaus.voss@loewensteinmedical.de;
>>> Jan Kiszka <jan.kiszka@siemens.com>
>>> Subject: Re: [PATCH] ACPICA: make acpi_load_table() return table 
>>> index
>>>
>>> Hello all,
>>>
>>> Sorry to have sent our message with cancelled e-mail address. I have correct this now.
>>>
>>> Op 13-09-19 om 17:12 schreef Shevchenko, Andriy:
>>>> On Fri, Sep 13, 2019 at 05:20:21PM +0300, Moore, Robert wrote:
>>>>> -----Original Message-----
>>>>> From: Nikolaus Voss [mailto:nv@vosn.de]
>>>>> Sent: Friday, September 13, 2019 12:44 AM
>>>>> To: Moore, Robert <robert.moore@intel.com>
>>>>> Cc: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, 
>>>>> Erik <erik.schmauss@intel.com>; Rafael J. Wysocki 
>>>>> <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>; Jacek Anaszewski 
>>>>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan 
>>>>> Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org; 
>>>>> devel@acpica.org; linux-kernel@vger.kernel.org; Ferry Toth 
>>>>> <ftoth@telfort.nl>; nikolaus.voss@loewensteinmedical.de
>>>>> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table 
>>>>> index
>>>>>
>>>>> Bob,
>>>>>
>>>>> On Thu, 12 Sep 2019, Moore, Robert wrote:
>>>>>> The ability to unload an ACPI table (especially AML tables such 
>>>>>> as
>>>>>> SSDTs) is in the process of being deprecated in ACPICA -- since 
>>>>>> it is also deprecated in the current ACPI specification. This is 
>>>>>> being done because of the difficulty of deleting the namespace 
>>>>>> entries for the table.  FYI, Windows does not properly support this function either.
>>>>>
>>>>> ok, I see it can be a problem to unload an AML table with all it's 
>>>>> consequences e.g. with respect to driver unregistering in setups 
>>>>> with complex dependencies. It will only work properly under 
>>>>> certain conditions
>>>>> - nevertheless acpi_tb_unload_table() is still exported in ACPICA and we should get this working as it worked before.
>>>>>
>>>>> AcpiTbUnloadTable is not exported, it is an internal interface 
>>>>> only
>>>>> -- as recognized by the "AcpiTb".
>>>>
>>>> In Linux it became a part of ABI when the
>>>>
>>>> commit 772bf1e2878ecfca0d1f332071c83e021dd9cf01
>>>> Author: Jan Kiszka <jan.kiszka@siemens.com>
>>>> Date:   Fri Jun 9 20:36:31 2017 +0200
>>>>
>>>>      ACPI: configfs: Unload SSDT on configfs entry removal
>>>>
>>>> appeared in the kernel.
>>>
>>> And the commit message explains quite well why it is an important feature:
>>>
>>> "This allows to change SSDTs without rebooting the system.
>>> It also allows to destroy devices again that a dynamically loaded SSDT created.
>>>
>>> The biggest problem AFAIK is that under linux, many drivers cannot be unloaded. Also, there are many race conditions as the namespace entries "owned" by an SSDT being unloaded are deleted (out from underneath a driver).
>>>
>>> This is widely similar to the DT overlay behavior."
>>>
>>>>> I'm not sure that I want to change the interface to AcpiLoadTable 
>>>>> just for something that is being deprecated. Already, we throw an 
>>>>> ACPI_EXCEPTION if the Unload operator is encountered in the AML 
>>>>> byte stream. The same thing with AcpiUnloadParentTable - it is being deprecated.
>>>>>
>>>>>      ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED,
>>>>>          "AML Unload operator is not supported"));
>>
>> Bob, what is your suggestion to fix the regression then?
>>
>> We could revert acpi_configfs.c to use
>> acpi_tb_install_and_load_table() instead of acpi_load_table(), 
>> leaving loaded APCI objects uninitalized, but at least, unloading will work again.
>>
>> I guess my next question is: why do you want to unload a table in the 
>> first place?
>
> Because it worked before and there are people who rely on it. If it's 
> deprecated there should be a user notification and a reasonable 
> end-of-life timeline to give these users a chance to develop an 
> alternative solution.
>
> So, I still don't understand why this no longer works. We did not make 
> any purposeful changes in this area - AFAIK. Bob

It's because the acpi_configfs driver formerly used
acpi_tb_install_and_load_table() which returns the table index, but doesn't resolve the references. It now uses acpi_load_table() which resolves the references, but doesn't return the table index, so unloading doesn't work any more.

>
> Niko
>
>>
>>
>> Do we have any other options?
>>
>> Niko
>>
>

^ permalink raw reply	[flat|nested] 57+ messages in thread

* RE: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-24 19:41                                       ` Moore, Robert
@ 2019-09-25 10:18                                         ` Nikolaus Voss
  2019-09-25 10:53                                           ` Shevchenko, Andriy
  0 siblings, 1 reply; 57+ messages in thread
From: Nikolaus Voss @ 2019-09-25 10:18 UTC (permalink / raw)
  To: Moore, Robert
  Cc: Ferry Toth, Shevchenko, Andriy, Schmauss, Erik,
	Rafael J. Wysocki, Len Brown, Jacek Anaszewski, Pavel Machek,
	Dan Murphy, linux-acpi, devel, linux-kernel, Jan Kiszka

On Tue, 24 Sep 2019, Moore, Robert wrote:
> How about this:
> Go back to using acpi_tb_install_and_load_table(), but then call acpi_ns_initialize_objects afterwards This is what acpi_load_table does.
>
>
>    ACPI_INFO (("Host-directed Dynamic ACPI Table Load:"));
>    Status = AcpiTbInstallAndLoadTable (ACPI_PTR_TO_PHYSADDR (Table),
>        ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, FALSE, &TableIndex);
>    if (ACPI_SUCCESS (Status))
>    {
>        /* Complete the initialization/resolution of new objects */
>
>        AcpiNsInitializeObjects ();
>    }

The idea was to have all drivers use the same interface for dynamically 
loading ACPI tables, i.e. efivar_ssdt_load() (which already used 
acpi_load_table()) and the acpi_configfs driver. The efivar driver doesn't 
provide a possibility to unload the table, so acpi_load_table() is okay 
for this purpose. According to Bob, acpi_tb_install_and_load_table() is 
not part of the external ACPICA API declared under include/acpi (though it 
is exported).

The counterpart of acpi_load_table() - inline comment "Note1: Mainly 
intended to support hotplug addition of SSDTs" - seems to be 
acpi_unload_parent_table() - inline comment "Note: Mainly intended to 
support hotplug removal of SSDTs" - but it doesn't expect a table index 
but an acpi_handle as argument, and it is only used within ACPICA, so IMO 
the API can't be properly used in our case and should be improved even 
though unloading tables is deprecated.

If changing the API is not an option, we can choose between Rafael's way 
(extending the API instead of changing it) or Bob's proposal (doing the 
same thing - hotplug-loading a SSDT - in different ways, in case of 
acpi_configfs using ACPICA internal API). I don't have a clear favorite, 
but I'm tending to Rafael's solution my favorite being the API change.

Niko

>
>
> -----Original Message-----
> From: Nikolaus Voss <nv@vosn.de>
> Sent: Monday, September 23, 2019 2:05 AM
> To: Moore, Robert <robert.moore@intel.com>
> Cc: Ferry Toth <fntoth@gmail.com>; Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>; Jacek Anaszewski <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; linux-kernel@vger.kernel.org; Jan Kiszka <jan.kiszka@siemens.com>
> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table index
>
> On Thu, 19 Sep 2019, Moore, Robert wrote:
>>
>>
>> -----Original Message-----
>> From: Nikolaus Voss [mailto:nv@vosn.de]
>> Sent: Wednesday, September 18, 2019 7:32 AM
>> To: Moore, Robert <robert.moore@intel.com>
>> Cc: Ferry Toth <fntoth@gmail.com>; Shevchenko, Andriy
>> <andriy.shevchenko@intel.com>; Schmauss, Erik
>> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len
>> Brown <lenb@kernel.org>; Jacek Anaszewski
>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy
>> <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org;
>> linux-kernel@vger.kernel.org; Jan Kiszka <jan.kiszka@siemens.com>
>> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table index
>>
>> On Wed, 18 Sep 2019, Moore, Robert wrote:
>>>
>>>
>>> -----Original Message-----
>>> From: Nikolaus Voss [mailto:nv@vosn.de]
>>> Sent: Monday, September 16, 2019 2:47 AM
>>> To: Moore, Robert <robert.moore@intel.com>
>>> Cc: Ferry Toth <fntoth@gmail.com>; Shevchenko, Andriy
>>> <andriy.shevchenko@intel.com>; Schmauss, Erik
>>> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Len
>>> Brown <lenb@kernel.org>; Jacek Anaszewski
>>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy
>>> <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org;
>>> linux-kernel@vger.kernel.org; Jan Kiszka <jan.kiszka@siemens.com>
>>> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table
>>> index
>>>
>>> On Fri, 13 Sep 2019, Moore, Robert wrote:
>>>>
>>>>
>>>> -----Original Message-----
>>>> From: Ferry Toth [mailto:fntoth@gmail.com]
>>>> Sent: Friday, September 13, 2019 9:48 AM
>>>> To: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Moore, Robert
>>>> <robert.moore@intel.com>
>>>> Cc: Nikolaus Voss <nv@vosn.de>; Schmauss, Erik
>>>> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>;
>>>> Len Brown <lenb@kernel.org>; Jacek Anaszewski
>>>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan
>>>> Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org;
>>>> devel@acpica.org; linux-kernel@vger.kernel.org;
>>>> nikolaus.voss@loewensteinmedical.de;
>>>> Jan Kiszka <jan.kiszka@siemens.com>
>>>> Subject: Re: [PATCH] ACPICA: make acpi_load_table() return table
>>>> index
>>>>
>>>> Hello all,
>>>>
>>>> Sorry to have sent our message with cancelled e-mail address. I have correct this now.
>>>>
>>>> Op 13-09-19 om 17:12 schreef Shevchenko, Andriy:
>>>>> On Fri, Sep 13, 2019 at 05:20:21PM +0300, Moore, Robert wrote:
>>>>>> -----Original Message-----
>>>>>> From: Nikolaus Voss [mailto:nv@vosn.de]
>>>>>> Sent: Friday, September 13, 2019 12:44 AM
>>>>>> To: Moore, Robert <robert.moore@intel.com>
>>>>>> Cc: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss,
>>>>>> Erik <erik.schmauss@intel.com>; Rafael J. Wysocki
>>>>>> <rjw@rjwysocki.net>; Len Brown <lenb@kernel.org>; Jacek Anaszewski
>>>>>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan
>>>>>> Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org;
>>>>>> devel@acpica.org; linux-kernel@vger.kernel.org; Ferry Toth
>>>>>> <ftoth@telfort.nl>; nikolaus.voss@loewensteinmedical.de
>>>>>> Subject: RE: [PATCH] ACPICA: make acpi_load_table() return table
>>>>>> index
>>>>>>
>>>>>> Bob,
>>>>>>
>>>>>> On Thu, 12 Sep 2019, Moore, Robert wrote:
>>>>>>> The ability to unload an ACPI table (especially AML tables such
>>>>>>> as
>>>>>>> SSDTs) is in the process of being deprecated in ACPICA -- since
>>>>>>> it is also deprecated in the current ACPI specification. This is
>>>>>>> being done because of the difficulty of deleting the namespace
>>>>>>> entries for the table.  FYI, Windows does not properly support this function either.
>>>>>>
>>>>>> ok, I see it can be a problem to unload an AML table with all it's
>>>>>> consequences e.g. with respect to driver unregistering in setups
>>>>>> with complex dependencies. It will only work properly under
>>>>>> certain conditions
>>>>>> - nevertheless acpi_tb_unload_table() is still exported in ACPICA and we should get this working as it worked before.
>>>>>>
>>>>>> AcpiTbUnloadTable is not exported, it is an internal interface
>>>>>> only
>>>>>> -- as recognized by the "AcpiTb".
>>>>>
>>>>> In Linux it became a part of ABI when the
>>>>>
>>>>> commit 772bf1e2878ecfca0d1f332071c83e021dd9cf01
>>>>> Author: Jan Kiszka <jan.kiszka@siemens.com>
>>>>> Date:   Fri Jun 9 20:36:31 2017 +0200
>>>>>
>>>>>      ACPI: configfs: Unload SSDT on configfs entry removal
>>>>>
>>>>> appeared in the kernel.
>>>>
>>>> And the commit message explains quite well why it is an important feature:
>>>>
>>>> "This allows to change SSDTs without rebooting the system.
>>>> It also allows to destroy devices again that a dynamically loaded SSDT created.
>>>>
>>>> The biggest problem AFAIK is that under linux, many drivers cannot be unloaded. Also, there are many race conditions as the namespace entries "owned" by an SSDT being unloaded are deleted (out from underneath a driver).
>>>>
>>>> This is widely similar to the DT overlay behavior."
>>>>
>>>>>> I'm not sure that I want to change the interface to AcpiLoadTable
>>>>>> just for something that is being deprecated. Already, we throw an
>>>>>> ACPI_EXCEPTION if the Unload operator is encountered in the AML
>>>>>> byte stream. The same thing with AcpiUnloadParentTable - it is being deprecated.
>>>>>>
>>>>>>      ACPI_EXCEPTION ((AE_INFO, AE_NOT_IMPLEMENTED,
>>>>>>          "AML Unload operator is not supported"));
>>>
>>> Bob, what is your suggestion to fix the regression then?
>>>
>>> We could revert acpi_configfs.c to use
>>> acpi_tb_install_and_load_table() instead of acpi_load_table(),
>>> leaving loaded APCI objects uninitalized, but at least, unloading will work again.
>>>
>>> I guess my next question is: why do you want to unload a table in the
>>> first place?
>>
>> Because it worked before and there are people who rely on it. If it's
>> deprecated there should be a user notification and a reasonable
>> end-of-life timeline to give these users a chance to develop an
>> alternative solution.
>>
>> So, I still don't understand why this no longer works. We did not make
>> any purposeful changes in this area - AFAIK. Bob
>
> It's because the acpi_configfs driver formerly used
> acpi_tb_install_and_load_table() which returns the table index, but doesn't resolve the references. It now uses acpi_load_table() which resolves the references, but doesn't return the table index, so unloading doesn't work any more.
>
>>
>> Niko
>>
>>>
>>>
>>> Do we have any other options?
>>>
>>> Niko
>>>
>>


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH] ACPICA: Introduce acpi_load_table_with_index()
  2019-09-24 12:08                       ` Shevchenko, Andriy
@ 2019-09-25 10:20                         ` Nikolaus Voss
  0 siblings, 0 replies; 57+ messages in thread
From: Nikolaus Voss @ 2019-09-25 10:20 UTC (permalink / raw)
  To: Shevchenko, Andriy
  Cc: Schmauss, Erik, Rafael J. Wysocki, Moore, Robert, Len Brown,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, linux-acpi, devel,
	linux-kernel, Ferry Toth

On Tue, 24 Sep 2019, Shevchenko, Andriy wrote:
> On Tue, Sep 24, 2019 at 03:07:34PM +0300, Shevchenko, Andriy wrote:
>> On Mon, Sep 23, 2019 at 11:47:01AM +0200, 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(),
>>> does not provide this information, so a new function
>>> acpi_load_table_with_index() with the same functionality,
>>> but an optional pointer to the loaded table index is introduced.
>>>
>>> The new function is used in the acpi_configfs driver to save the
>>> index of the newly loaded table in order to unload it later.
>>
>> I'll test it later, though couple of remarks:
>> - would it make sense to provide a counter part helper for unloading? Now it
>>   looks a bit inconsistent in configfs when we use acpi_load_*() vs.
>>   acpi_tb_*() in remove.

Yes, IMO it would make sense, but it is an ACPICA API change. Bob, what's 
your opinion?

>
> ...and I think we may unexport acpi_tb_* in this case as Bob suggested for it
> to be internal API.

see above.

>
>> - please, include Ferry into Cc (as done in this mail)
>

^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH] ACPICA: Introduce acpi_load_table_with_index()
  2019-09-24 15:11                     ` Andy Shevchenko
@ 2019-09-25 10:22                       ` Nikolaus Voss
  0 siblings, 0 replies; 57+ messages in thread
From: Nikolaus Voss @ 2019-09-25 10:22 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Schmauss, Erik, Rafael J. Wysocki, Moore, Robert, Len Brown,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, linux-acpi, devel,
	linux-kernel

On Tue, 24 Sep 2019, Andy Shevchenko wrote:
> On Mon, Sep 23, 2019 at 11:47:01AM +0200, 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(),
>> does not provide this information, so a new function
>> acpi_load_table_with_index() with the same functionality,
>> but an optional pointer to the loaded table index is introduced.
>>
>> The new function is used in the acpi_configfs driver to save the
>> index of the newly loaded table in order to unload it later.
>>
>
> Tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Thanks!

>
> But consider addressing my comments in one of previous mails.
>
>> Reported-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
>> Fixes: d06c47e3dd07f ("ACPI: configfs: Resolve objects on host-directed table loads")
>> Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
>> ---
>>  drivers/acpi/acpi_configfs.c   |  2 +-
>>  drivers/acpi/acpica/tbxfload.c | 43 ++++++++++++++++++++++++++++++++++
>>  include/acpi/acpixf.h          |  6 +++++
>>  3 files changed, 50 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/acpi/acpi_configfs.c b/drivers/acpi/acpi_configfs.c
>> index 57d9d574d4dd..9e77d5a266c0 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_with_index(table->header, &table->index);
>>  	if (ret) {
>>  		kfree(table->header);
>>  		table->header = NULL;
>> diff --git a/drivers/acpi/acpica/tbxfload.c b/drivers/acpi/acpica/tbxfload.c
>> index 86f1693f6d29..7ea4fc879cb6 100644
>> --- a/drivers/acpi/acpica/tbxfload.c
>> +++ b/drivers/acpi/acpica/tbxfload.c
>> @@ -309,6 +309,49 @@ acpi_status acpi_load_table(struct acpi_table_header *table)
>>
>>  ACPI_EXPORT_SYMBOL(acpi_load_table)
>>
>> +/*******************************************************************************
>> + *
>> + * FUNCTION:    acpi_load_table_with_index
>> + *
>> + * 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: see acpi_load_table() above. Additionally returns the index
>> + *              of the newly created table in table_idx.
>> + *
>> + ******************************************************************************/
>> +acpi_status acpi_load_table_with_index(struct acpi_table_header *table,
>> +				       u32 *table_idx)
>> +{
>> +	acpi_status status;
>> +	u32 table_index;
>> +
>> +	ACPI_FUNCTION_TRACE(acpi_load_table_with_index);
>> +
>> +	/* Parameter validation */
>> +	if (!table)
>> +		return_ACPI_STATUS(AE_BAD_PARAMETER);
>> +
>> +	/* Install the table and load it into the namespace */
>> +	ACPI_INFO(("Host-directed Dynamic ACPI Table Load:"));
>> +	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 */
>> +		acpi_ns_initialize_objects();
>> +	}
>> +
>> +	return_ACPI_STATUS(status);
>> +}
>> +ACPI_EXPORT_SYMBOL(acpi_load_table_with_index)
>> +
>>  /*******************************************************************************
>>   *
>>   * FUNCTION:    acpi_unload_parent_table
>> diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h
>> index e5e041413581..af375ab318de 100644
>> --- a/include/acpi/acpixf.h
>> +++ b/include/acpi/acpixf.h
>> @@ -460,6 +460,12 @@ ACPI_EXTERNAL_RETURN_STATUS(acpi_status ACPI_INIT_FUNCTION
>>  ACPI_EXTERNAL_RETURN_STATUS(acpi_status
>>  			    acpi_load_table(struct acpi_table_header *table))
>>
>> +
>> +ACPI_EXTERNAL_RETURN_STATUS(acpi_status
>> +			    acpi_load_table_with_index(
>> +				    struct acpi_table_header *table,
>> +				    u32 *table_idx))
>> +
>>  ACPI_EXTERNAL_RETURN_STATUS(acpi_status
>>  			    acpi_unload_parent_table(acpi_handle object))
>>
>> --
>> 2.17.1
>>
>


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-25 10:18                                         ` Nikolaus Voss
@ 2019-09-25 10:53                                           ` Shevchenko, Andriy
  0 siblings, 0 replies; 57+ messages in thread
From: Shevchenko, Andriy @ 2019-09-25 10:53 UTC (permalink / raw)
  To: Nikolaus Voss
  Cc: Moore, Robert, Ferry Toth, Schmauss, Erik, Rafael J. Wysocki,
	Len Brown, Jacek Anaszewski, Pavel Machek, Dan Murphy,
	linux-acpi, devel, linux-kernel, Jan Kiszka

On Wed, Sep 25, 2019 at 12:18:11PM +0200, Nikolaus Voss wrote:
> On Tue, 24 Sep 2019, Moore, Robert wrote:
> > How about this:
> > Go back to using acpi_tb_install_and_load_table(), but then call acpi_ns_initialize_objects afterwards This is what acpi_load_table does.
> > 
> > 
> >    ACPI_INFO (("Host-directed Dynamic ACPI Table Load:"));
> >    Status = AcpiTbInstallAndLoadTable (ACPI_PTR_TO_PHYSADDR (Table),
> >        ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, FALSE, &TableIndex);
> >    if (ACPI_SUCCESS (Status))
> >    {
> >        /* Complete the initialization/resolution of new objects */
> > 
> >        AcpiNsInitializeObjects ();
> >    }
> 
> The idea was to have all drivers use the same interface for dynamically
> loading ACPI tables, i.e. efivar_ssdt_load() (which already used
> acpi_load_table()) and the acpi_configfs driver. The efivar driver doesn't
> provide a possibility to unload the table, so acpi_load_table() is okay for
> this purpose. 

> According to Bob, acpi_tb_install_and_load_table() is not part
> of the external ACPICA API declared under include/acpi (though it is
> exported).

You are answering to Bob himself :-)

So, above is another proposal and we can create a common symmetric APIs in ACPI
glue layer for all users even if some of them don't care about unloading.

> The counterpart of acpi_load_table() - inline comment "Note1: Mainly
> intended to support hotplug addition of SSDTs" - seems to be
> acpi_unload_parent_table() - inline comment "Note: Mainly intended to
> support hotplug removal of SSDTs" - but it doesn't expect a table index but
> an acpi_handle as argument, and it is only used within ACPICA, so IMO the
> API can't be properly used in our case and should be improved even though
> unloading tables is deprecated.
> 
> If changing the API is not an option, we can choose between Rafael's way
> (extending the API instead of changing it) or Bob's proposal (doing the same
> thing - hotplug-loading a SSDT - in different ways, in case of acpi_configfs
> using ACPICA internal API). I don't have a clear favorite, but I'm tending
> to Rafael's solution my favorite being the API change.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 57+ messages in thread

* RE: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-12 19:36                   ` Ferry Toth
@ 2019-09-25 18:13                     ` Schmauss, Erik
  2019-09-26  8:09                       ` Shevchenko, Andriy
  0 siblings, 1 reply; 57+ messages in thread
From: Schmauss, Erik @ 2019-09-25 18:13 UTC (permalink / raw)
  To: Moore, Robert, Nikolaus Voss, Shevchenko, Andriy,
	Rafael J. Wysocki, Ferry Toth
  Cc: Len Brown, Jacek Anaszewski, Pavel Machek, Dan Murphy,
	linux-acpi, devel, linux-kernel, nv



> -----Original Message-----
> From: Ferry Toth <ftoth@telfort.nl>
> Sent: Thursday, September 12, 2019 12:37 PM
> To: Moore, Robert <robert.moore@intel.com>; Nikolaus Voss
> <nikolaus.voss@loewensteinmedical.de>; Shevchenko, Andriy
> <andriy.shevchenko@intel.com>; Schmauss, Erik <erik.schmauss@intel.com>;
> Rafael J. Wysocki <rjw@rjwysocki.net>
> Cc: Len Brown <lenb@kernel.org>; Jacek Anaszewski
> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy
> <dmurphy@ti.com>; 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
> 
> Op 12-09-19 om 16:19 schreef Moore, Robert:
> > Nikolaus,
> > The ability to unload an ACPI table (especially AML tables such as SSDTs) is in
> the process of being deprecated in ACPICA -- since it is also deprecated in the
> current ACPI specification. This is being done because of the difficulty of
> deleting the namespace entries for the table.  FYI, Windows does not properly
> support this function either.
> 
> I really hope this is not the case. On x86 loading/unloading SSDTs has proven to
> be a powerful way to handle reconfigurable hardware without rebooting and
> without requiring dedicated platform drivers. Same for user plugable hardware
> on i2c/spi busses.
> 
> This has worked before and will violate the "don't break user space" rule.

If the table index wasn't being used, how did this work before?
Which commit broke this?

Bob and I are trying to understand if this is a regression or a new feature request...

Thanks,
Erik
> 
> I don't see why Windows is an example to follow. On Windows platform drivers
> don't get compiled into the kernel and don't need to be upstreamed.
> 
> > Bob
> >
> >
> > -----Original Message-----
> > From: Nikolaus Voss [mailto:nikolaus.voss@loewensteinmedical.de]
> > Sent: Thursday, September 12, 2019 1:08 AM
> > To: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik
> > <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>;
> > Moore, Robert <robert.moore@intel.com>
> > Cc: Len Brown <lenb@kernel.org>; Jacek Anaszewski
> > <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy
> > <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org;
> > linux-kernel@vger.kernel.org; nv@vosn.de; Nikolaus Voss
> > <nikolaus.voss@loewensteinmedical.de>
> > Subject: [PATCH] ACPICA: make acpi_load_table() return table index
> >
> > 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: d06c47e3dd07f ("ACPI: configfs: Resolve objects on
> > host-directed table loads")
> > Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> > ---
> >   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))
> > --
> > 2.17.1
> >
> >


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-25 18:13                     ` Schmauss, Erik
@ 2019-09-26  8:09                       ` Shevchenko, Andriy
  0 siblings, 0 replies; 57+ messages in thread
From: Shevchenko, Andriy @ 2019-09-26  8:09 UTC (permalink / raw)
  To: Schmauss, Erik
  Cc: Moore, Robert, Nikolaus Voss, Rafael J. Wysocki, Ferry Toth,
	Len Brown, Jacek Anaszewski, Pavel Machek, Dan Murphy,
	linux-acpi, devel, linux-kernel, nv

On Wed, Sep 25, 2019 at 09:13:34PM +0300, Schmauss, Erik wrote:
> > -----Original Message-----
> > From: Ferry Toth <ftoth@telfort.nl>
> > Sent: Thursday, September 12, 2019 12:37 PM
> > To: Moore, Robert <robert.moore@intel.com>; Nikolaus Voss
> > <nikolaus.voss@loewensteinmedical.de>; Shevchenko, Andriy
> > <andriy.shevchenko@intel.com>; Schmauss, Erik <erik.schmauss@intel.com>;
> > Rafael J. Wysocki <rjw@rjwysocki.net>
> > Cc: Len Brown <lenb@kernel.org>; Jacek Anaszewski
> > <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy
> > <dmurphy@ti.com>; 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
> > 
> > Op 12-09-19 om 16:19 schreef Moore, Robert:
> > > Nikolaus,
> > > The ability to unload an ACPI table (especially AML tables such as SSDTs) is in
> > the process of being deprecated in ACPICA -- since it is also deprecated in the
> > current ACPI specification. This is being done because of the difficulty of
> > deleting the namespace entries for the table.  FYI, Windows does not properly
> > support this function either.
> > 
> > I really hope this is not the case. On x86 loading/unloading SSDTs has proven to
> > be a powerful way to handle reconfigurable hardware without rebooting and
> > without requiring dedicated platform drivers. Same for user plugable hardware
> > on i2c/spi busses.
> > 
> > This has worked before and will violate the "don't break user space" rule.
> 
> If the table index wasn't being used, how did this work before?
> Which commit broke this?
> 
> Bob and I are trying to understand if this is a regression or a new feature request...

It is a regression as I explained in my bisecting message.

Before it uses acpi_tb_* API directly.
I thought Bob already got the idea.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 57+ messages in thread

* RE: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-12  8:07               ` [PATCH] ACPICA: make acpi_load_table() return table index Nikolaus Voss
  2019-09-12 14:19                 ` Moore, Robert
  2019-09-19  8:13                 ` Rafael J. Wysocki
@ 2019-09-26 16:09                 ` Schmauss, Erik
  2019-09-26 16:35                   ` Shevchenko, Andriy
  2019-09-26 18:43                   ` Nikolaus Voss
  2 siblings, 2 replies; 57+ messages in thread
From: Schmauss, Erik @ 2019-09-26 16:09 UTC (permalink / raw)
  To: Nikolaus Voss, Shevchenko, Andriy, Rafael J. Wysocki, Moore, Robert
  Cc: Len Brown, Jacek Anaszewski, Pavel Machek, Dan Murphy,
	linux-acpi, devel, linux-kernel, nv



> -----Original Message-----
> From: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> Sent: Thursday, September 12, 2019 1:08 AM
> To: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik
> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Moore,
> Robert <robert.moore@intel.com>
> Cc: Len Brown <lenb@kernel.org>; Jacek Anaszewski
> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy
> <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; linux-
> kernel@vger.kernel.org; nv@vosn.de; Nikolaus Voss
> <nikolaus.voss@loewensteinmedical.de>
> Subject: [PATCH] ACPICA: make acpi_load_table() return table index
> 
Hi Nikolaus,

> 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.

We'll take this patch for ACPICA upstream

Thanks,
Erik
> 
> This patch fixes the table unload function of acpi_configfs.
> 
> Reported-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Fixes: d06c47e3dd07f ("ACPI: configfs: Resolve objects on host-directed table
> loads")
> Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> ---
>  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))
> --
> 2.17.1


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-26 16:09                 ` [PATCH] ACPICA: make acpi_load_table() return table index Schmauss, Erik
@ 2019-09-26 16:35                   ` Shevchenko, Andriy
  2019-09-26 16:51                     ` Schmauss, Erik
  2019-09-26 18:43                   ` Nikolaus Voss
  1 sibling, 1 reply; 57+ messages in thread
From: Shevchenko, Andriy @ 2019-09-26 16:35 UTC (permalink / raw)
  To: Schmauss, Erik
  Cc: Nikolaus Voss, Rafael J. Wysocki, Moore, Robert, Len Brown,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, linux-acpi, devel,
	linux-kernel, nv

On Thu, Sep 26, 2019 at 07:09:05PM +0300, Schmauss, Erik wrote:
> > -----Original Message-----
> > From: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> > Sent: Thursday, September 12, 2019 1:08 AM
> > To: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik
> > <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Moore,
> > Robert <robert.moore@intel.com>
> > Cc: Len Brown <lenb@kernel.org>; Jacek Anaszewski
> > <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy
> > <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; linux-
> > kernel@vger.kernel.org; nv@vosn.de; Nikolaus Voss
> > <nikolaus.voss@loewensteinmedical.de>
> > Subject: [PATCH] ACPICA: make acpi_load_table() return table index
> > 
> Hi Nikolaus,
> 
> > 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.
> 
> We'll take this patch for ACPICA upstream

Erik,

how about to have also counterpart to acpi_load_table() which will do
what it's done now in acpi_configfs.c via acpi_tb_*() API?

Because it's kinda strange to call acpi_load_table*() and acpi_tb_*()
in the same module.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 57+ messages in thread

* RE: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-26 16:35                   ` Shevchenko, Andriy
@ 2019-09-26 16:51                     ` Schmauss, Erik
  2019-09-26 17:47                       ` Shevchenko, Andriy
  2019-09-26 18:44                       ` Nikolaus Voss
  0 siblings, 2 replies; 57+ messages in thread
From: Schmauss, Erik @ 2019-09-26 16:51 UTC (permalink / raw)
  To: Shevchenko, Andriy
  Cc: Nikolaus Voss, Rafael J. Wysocki, Moore, Robert, Len Brown,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, linux-acpi, devel,
	linux-kernel, nv



> -----Original Message-----
> From: linux-acpi-owner@vger.kernel.org <linux-acpi-owner@vger.kernel.org>
> On Behalf Of Shevchenko, Andriy
> Sent: Thursday, September 26, 2019 9:35 AM
> To: Schmauss, Erik <erik.schmauss@intel.com>
> Cc: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>; Rafael J. Wysocki
> <rjw@rjwysocki.net>; Moore, Robert <robert.moore@intel.com>; Len Brown
> <lenb@kernel.org>; Jacek Anaszewski <jacek.anaszewski@gmail.com>; Pavel
> Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; 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
> 
> On Thu, Sep 26, 2019 at 07:09:05PM +0300, Schmauss, Erik wrote:
> > > -----Original Message-----
> > > From: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> > > Sent: Thursday, September 12, 2019 1:08 AM
> > > To: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik
> > > <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>;
> > > Moore, Robert <robert.moore@intel.com>
> > > Cc: Len Brown <lenb@kernel.org>; Jacek Anaszewski
> > > <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan
> > > Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org;
> > > devel@acpica.org; linux- kernel@vger.kernel.org; nv@vosn.de;
> > > Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> > > Subject: [PATCH] ACPICA: make acpi_load_table() return table index
> > >
> > Hi Nikolaus,
> >
> > > 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.
> >
> > We'll take this patch for ACPICA upstream
> 
> Erik,
> 
Hi Andy,

> how about to have also counterpart to acpi_load_table() which will do what it's
> done now in acpi_configfs.c via acpi_tb_*() API?

I should have given more details. We decided to add this extra parameter in AcpiLoadTable and
we're going to create an AcpiUnloadTable function that will take table index to unload the table (basically the acpi_tb_unload..).
Once we do this, you can use table indices with AcpiUnloadTable and AcpiLoadTable.

Erik
> 
> Because it's kinda strange to call acpi_load_table*() and acpi_tb_*() in the
> same module.
> 
> --
> With Best Regards,
> Andy Shevchenko
> 


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-26 16:51                     ` Schmauss, Erik
@ 2019-09-26 17:47                       ` Shevchenko, Andriy
  2019-09-26 18:44                       ` Nikolaus Voss
  1 sibling, 0 replies; 57+ messages in thread
From: Shevchenko, Andriy @ 2019-09-26 17:47 UTC (permalink / raw)
  To: Schmauss, Erik
  Cc: Nikolaus Voss, Rafael J. Wysocki, Moore, Robert, Len Brown,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, linux-acpi, devel,
	linux-kernel, nv

On Thu, Sep 26, 2019 at 07:51:00PM +0300, Schmauss, Erik wrote:
> > -----Original Message-----
> > From: linux-acpi-owner@vger.kernel.org <linux-acpi-owner@vger.kernel.org>
> > On Behalf Of Shevchenko, Andriy
> > Sent: Thursday, September 26, 2019 9:35 AM
> > To: Schmauss, Erik <erik.schmauss@intel.com>
> > Cc: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>; Rafael J. Wysocki
> > <rjw@rjwysocki.net>; Moore, Robert <robert.moore@intel.com>; Len Brown
> > <lenb@kernel.org>; Jacek Anaszewski <jacek.anaszewski@gmail.com>; Pavel
> > Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; 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
> > 
> > On Thu, Sep 26, 2019 at 07:09:05PM +0300, Schmauss, Erik wrote:
> > > > -----Original Message-----
> > > > From: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> > > > Sent: Thursday, September 12, 2019 1:08 AM
> > > > To: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik
> > > > <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>;
> > > > Moore, Robert <robert.moore@intel.com>
> > > > Cc: Len Brown <lenb@kernel.org>; Jacek Anaszewski
> > > > <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan
> > > > Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org;
> > > > devel@acpica.org; linux- kernel@vger.kernel.org; nv@vosn.de;
> > > > Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> > > > Subject: [PATCH] ACPICA: make acpi_load_table() return table index
> > > >
> > > Hi Nikolaus,
> > >
> > > > 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.
> > >
> > > We'll take this patch for ACPICA upstream
> > 
> > Erik,
> > 
> Hi Andy,
> 
> > how about to have also counterpart to acpi_load_table() which will do what it's
> > done now in acpi_configfs.c via acpi_tb_*() API?
> 
> I should have given more details. We decided to add this extra parameter in AcpiLoadTable and
> we're going to create an AcpiUnloadTable function that will take table index to unload the table (basically the acpi_tb_unload..).
> Once we do this, you can use table indices with AcpiUnloadTable and AcpiLoadTable.

Sounds like what we discussed with Nikolaus earlier [1].
Thanks!

[1]: https://lore.kernel.org/linux-acpi/20190924120734.GT2680@smile.fi.intel.com/

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 57+ messages in thread

* RE: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-26 16:09                 ` [PATCH] ACPICA: make acpi_load_table() return table index Schmauss, Erik
  2019-09-26 16:35                   ` Shevchenko, Andriy
@ 2019-09-26 18:43                   ` Nikolaus Voss
  1 sibling, 0 replies; 57+ messages in thread
From: Nikolaus Voss @ 2019-09-26 18:43 UTC (permalink / raw)
  To: Schmauss, Erik
  Cc: Shevchenko, Andriy, Rafael J. Wysocki, Moore, Robert, Len Brown,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, linux-acpi, devel,
	linux-kernel

Hi Erik,

On Thu, 26 Sep 2019, Schmauss, Erik wrote:
>> -----Original Message-----
>> From: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
>> Sent: Thursday, September 12, 2019 1:08 AM
>> To: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik
>> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>; Moore,
>> Robert <robert.moore@intel.com>
>> Cc: Len Brown <lenb@kernel.org>; Jacek Anaszewski
>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan Murphy
>> <dmurphy@ti.com>; linux-acpi@vger.kernel.org; devel@acpica.org; linux-
>> kernel@vger.kernel.org; nv@vosn.de; Nikolaus Voss
>> <nikolaus.voss@loewensteinmedical.de>
>> Subject: [PATCH] ACPICA: make acpi_load_table() return table index
>>
> Hi Nikolaus,
>
>> 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.
>
> We'll take this patch for ACPICA upstream

that's good news, thanks!
Niko

>
> Thanks,
> Erik
>>
>> This patch fixes the table unload function of acpi_configfs.
>>
>> Reported-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
>> Fixes: d06c47e3dd07f ("ACPI: configfs: Resolve objects on host-directed table
>> loads")
>> Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
>> ---
>>  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))
>> --
>> 2.17.1
>


^ permalink raw reply	[flat|nested] 57+ messages in thread

* RE: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-26 16:51                     ` Schmauss, Erik
  2019-09-26 17:47                       ` Shevchenko, Andriy
@ 2019-09-26 18:44                       ` Nikolaus Voss
  2019-09-26 19:26                         ` Rafael J. Wysocki
  1 sibling, 1 reply; 57+ messages in thread
From: Nikolaus Voss @ 2019-09-26 18:44 UTC (permalink / raw)
  To: Schmauss, Erik
  Cc: Shevchenko, Andriy, Rafael J. Wysocki, Moore, Robert, Len Brown,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, linux-acpi, devel,
	linux-kernel

On Thu, 26 Sep 2019, Schmauss, Erik wrote:
>> -----Original Message-----
>> From: linux-acpi-owner@vger.kernel.org <linux-acpi-owner@vger.kernel.org>
>> On Behalf Of Shevchenko, Andriy
>> Sent: Thursday, September 26, 2019 9:35 AM
>> To: Schmauss, Erik <erik.schmauss@intel.com>
>> Cc: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>; Rafael J. Wysocki
>> <rjw@rjwysocki.net>; Moore, Robert <robert.moore@intel.com>; Len Brown
>> <lenb@kernel.org>; Jacek Anaszewski <jacek.anaszewski@gmail.com>; Pavel
>> Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; 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
>>
>> On Thu, Sep 26, 2019 at 07:09:05PM +0300, Schmauss, Erik wrote:
>>>> -----Original Message-----
>>>> From: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
>>>> Sent: Thursday, September 12, 2019 1:08 AM
>>>> To: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik
>>>> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>;
>>>> Moore, Robert <robert.moore@intel.com>
>>>> Cc: Len Brown <lenb@kernel.org>; Jacek Anaszewski
>>>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan
>>>> Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org;
>>>> devel@acpica.org; linux- kernel@vger.kernel.org; nv@vosn.de;
>>>> Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
>>>> Subject: [PATCH] ACPICA: make acpi_load_table() return table index
>>>>
>>> Hi Nikolaus,
>>>
>>>> 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.
>>>
>>> We'll take this patch for ACPICA upstream
>>
>> Erik,
>>
> Hi Andy,
>
>> how about to have also counterpart to acpi_load_table() which will do what it's
>> done now in acpi_configfs.c via acpi_tb_*() API?
>
> I should have given more details. We decided to add this extra parameter 
> in AcpiLoadTable and we're going to create an AcpiUnloadTable function 
> that will take table index to unload the table (basically the 
> acpi_tb_unload..). Once we do this, you can use table indices with 
> AcpiUnloadTable and AcpiLoadTable.

that's even better news.

Rafael, shall I prepare anything?

Niko

>
> Erik
>>
>> Because it's kinda strange to call acpi_load_table*() and acpi_tb_*() in the
>> same module.
>>
>> --
>> With Best Regards,
>> Andy Shevchenko
>>
>

-- 
Nikolaus Voss - Aastwiete 4 - 22880 Wedel


^ permalink raw reply	[flat|nested] 57+ messages in thread

* Re: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-26 18:44                       ` Nikolaus Voss
@ 2019-09-26 19:26                         ` Rafael J. Wysocki
  2019-09-26 19:41                           ` Schmauss, Erik
  0 siblings, 1 reply; 57+ messages in thread
From: Rafael J. Wysocki @ 2019-09-26 19:26 UTC (permalink / raw)
  To: Nikolaus Voss
  Cc: Schmauss, Erik, Shevchenko, Andriy, Rafael J. Wysocki, Moore,
	Robert, Len Brown, Jacek Anaszewski, Pavel Machek, Dan Murphy,
	linux-acpi, devel, linux-kernel

On Thu, Sep 26, 2019 at 8:44 PM Nikolaus Voss <nv@vosn.de> wrote:
>
> On Thu, 26 Sep 2019, Schmauss, Erik wrote:
> >> -----Original Message-----
> >> From: linux-acpi-owner@vger.kernel.org <linux-acpi-owner@vger.kernel.org>
> >> On Behalf Of Shevchenko, Andriy
> >> Sent: Thursday, September 26, 2019 9:35 AM
> >> To: Schmauss, Erik <erik.schmauss@intel.com>
> >> Cc: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>; Rafael J. Wysocki
> >> <rjw@rjwysocki.net>; Moore, Robert <robert.moore@intel.com>; Len Brown
> >> <lenb@kernel.org>; Jacek Anaszewski <jacek.anaszewski@gmail.com>; Pavel
> >> Machek <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; 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
> >>
> >> On Thu, Sep 26, 2019 at 07:09:05PM +0300, Schmauss, Erik wrote:
> >>>> -----Original Message-----
> >>>> From: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> >>>> Sent: Thursday, September 12, 2019 1:08 AM
> >>>> To: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss, Erik
> >>>> <erik.schmauss@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>;
> >>>> Moore, Robert <robert.moore@intel.com>
> >>>> Cc: Len Brown <lenb@kernel.org>; Jacek Anaszewski
> >>>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan
> >>>> Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org;
> >>>> devel@acpica.org; linux- kernel@vger.kernel.org; nv@vosn.de;
> >>>> Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> >>>> Subject: [PATCH] ACPICA: make acpi_load_table() return table index
> >>>>
> >>> Hi Nikolaus,
> >>>
> >>>> 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.
> >>>
> >>> We'll take this patch for ACPICA upstream
> >>
> >> Erik,
> >>
> > Hi Andy,
> >
> >> how about to have also counterpart to acpi_load_table() which will do what it's
> >> done now in acpi_configfs.c via acpi_tb_*() API?
> >
> > I should have given more details. We decided to add this extra parameter
> > in AcpiLoadTable and we're going to create an AcpiUnloadTable function
> > that will take table index to unload the table (basically the
> > acpi_tb_unload..). Once we do this, you can use table indices with
> > AcpiUnloadTable and AcpiLoadTable.
>
> that's even better news.
>
> Rafael, shall I prepare anything?

I don't think so.  I'm expecting to get a proper fix from the upstream
through the normal process.

Thanks,
Rafael

^ permalink raw reply	[flat|nested] 57+ messages in thread

* RE: [PATCH] ACPICA: make acpi_load_table() return table index
  2019-09-26 19:26                         ` Rafael J. Wysocki
@ 2019-09-26 19:41                           ` Schmauss, Erik
  0 siblings, 0 replies; 57+ messages in thread
From: Schmauss, Erik @ 2019-09-26 19:41 UTC (permalink / raw)
  To: Rafael J. Wysocki, Nikolaus Voss
  Cc: Shevchenko, Andriy, Rafael J. Wysocki, Moore, Robert, Len Brown,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, linux-acpi, devel,
	linux-kernel



> -----Original Message-----
> From: Rafael J. Wysocki <rafael@kernel.org>
> Sent: Thursday, September 26, 2019 12:26 PM
> To: Nikolaus Voss <nv@vosn.de>
> Cc: Schmauss, Erik <erik.schmauss@intel.com>; Shevchenko, Andriy
> <andriy.shevchenko@intel.com>; Rafael J. Wysocki <rjw@rjwysocki.net>;
> Moore, Robert <robert.moore@intel.com>; Len Brown <lenb@kernel.org>;
> Jacek Anaszewski <jacek.anaszewski@gmail.com>; Pavel Machek
> <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org;
> devel@acpica.org; linux-kernel@vger.kernel.org
> Subject: Re: [PATCH] ACPICA: make acpi_load_table() return table index
> 
> On Thu, Sep 26, 2019 at 8:44 PM Nikolaus Voss <nv@vosn.de> wrote:
> >
> > On Thu, 26 Sep 2019, Schmauss, Erik wrote:
> > >> -----Original Message-----
> > >> From: linux-acpi-owner@vger.kernel.org
> > >> <linux-acpi-owner@vger.kernel.org>
> > >> On Behalf Of Shevchenko, Andriy
> > >> Sent: Thursday, September 26, 2019 9:35 AM
> > >> To: Schmauss, Erik <erik.schmauss@intel.com>
> > >> Cc: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>; Rafael J.
> > >> Wysocki <rjw@rjwysocki.net>; Moore, Robert
> > >> <robert.moore@intel.com>; Len Brown <lenb@kernel.org>; Jacek
> > >> Anaszewski <jacek.anaszewski@gmail.com>; Pavel Machek
> > >> <pavel@ucw.cz>; Dan Murphy <dmurphy@ti.com>; 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
> > >>
> > >> On Thu, Sep 26, 2019 at 07:09:05PM +0300, Schmauss, Erik wrote:
> > >>>> -----Original Message-----
> > >>>> From: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> > >>>> Sent: Thursday, September 12, 2019 1:08 AM
> > >>>> To: Shevchenko, Andriy <andriy.shevchenko@intel.com>; Schmauss,
> > >>>> Erik <erik.schmauss@intel.com>; Rafael J. Wysocki
> > >>>> <rjw@rjwysocki.net>; Moore, Robert <robert.moore@intel.com>
> > >>>> Cc: Len Brown <lenb@kernel.org>; Jacek Anaszewski
> > >>>> <jacek.anaszewski@gmail.com>; Pavel Machek <pavel@ucw.cz>; Dan
> > >>>> Murphy <dmurphy@ti.com>; linux-acpi@vger.kernel.org;
> > >>>> devel@acpica.org; linux- kernel@vger.kernel.org; nv@vosn.de;
> > >>>> Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
> > >>>> Subject: [PATCH] ACPICA: make acpi_load_table() return table
> > >>>> index
> > >>>>
> > >>> Hi Nikolaus,
> > >>>
> > >>>> 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.
> > >>>
> > >>> We'll take this patch for ACPICA upstream
> > >>
> > >> Erik,
> > >>
> > > Hi Andy,
> > >
> > >> how about to have also counterpart to acpi_load_table() which will
> > >> do what it's done now in acpi_configfs.c via acpi_tb_*() API?
> > >
> > > I should have given more details. We decided to add this extra
> > > parameter in AcpiLoadTable and we're going to create an
> > > AcpiUnloadTable function that will take table index to unload the
> > > table (basically the acpi_tb_unload..). Once we do this, you can use
> > > table indices with AcpiUnloadTable and AcpiLoadTable.
> >
> > that's even better news.
> >
> > Rafael, shall I prepare anything?
Hi everyone,

> I don't think so.  I'm expecting to get a proper fix from the upstream through
> the normal process.
Just so that we are on the same page:

I've backported Nikolaus's patch for upstream here https://github.com/acpica/acpica/pull/506
and Bob has implemented the new API here: https://github.com/acpica/acpica/commit/c69369cd9cf0134e1aac516e97d612947daa8dc2

Once we do a release, I will send Bob's change to the linux ACPI mailing list.
Feel free to use this new API where you see fit.

Thanks,
Erik

> 
> Thanks,
> Rafael

^ permalink raw reply	[flat|nested] 57+ messages in thread

end of thread, back to index

Thread overview: 57+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-29 12:18 [PATCH 0/3] PWM framework: add support referencing PWMs from ACPI Nikolaus Voss
2019-05-29 12:18 ` [PATCH 1/3] ACPI: Resolve objects on host-directed table loads Nikolaus Voss
2019-05-30 14:42   ` Dan Murphy
2019-05-31 12:23     ` Pavel Machek
2019-05-31 12:45       ` Dan Murphy
2019-05-31 12:46     ` Dan Murphy
2019-06-03  9:12       ` Nikolaus Voss
2019-08-14 18:50   ` Andy Shevchenko
2019-08-14 20:27     ` Schmauss, Erik
2019-08-16 11:57       ` Nikolaus Voss
2019-08-30 14:53         ` Shevchenko, Andriy
2019-09-04  7:20           ` Nikolaus Voss
2019-09-06 17:46             ` Shevchenko, Andriy
2019-09-12  8:05               ` Nikolaus Voss
2019-09-12  8:07               ` [PATCH] ACPICA: make acpi_load_table() return table index Nikolaus Voss
2019-09-12 14:19                 ` Moore, Robert
2019-09-12 19:36                   ` Ferry Toth
2019-09-25 18:13                     ` Schmauss, Erik
2019-09-26  8:09                       ` Shevchenko, Andriy
2019-09-13  7:44                   ` Nikolaus Voss
2019-09-13 14:20                     ` Moore, Robert
2019-09-13 15:12                       ` Shevchenko, Andriy
2019-09-13 16:48                         ` Ferry Toth
2019-09-13 16:48                           ` Ferry Toth
2019-09-13 17:40                           ` Moore, Robert
2019-09-13 19:56                             ` Rafael J. Wysocki
2019-09-16  9:46                             ` Nikolaus Voss
2019-09-18 14:13                               ` Moore, Robert
2019-09-18 14:31                                 ` Nikolaus Voss
2019-09-19 17:05                                   ` Moore, Robert
2019-09-23  9:05                                     ` Nikolaus Voss
2019-09-24 19:41                                       ` Moore, Robert
2019-09-25 10:18                                         ` Nikolaus Voss
2019-09-25 10:53                                           ` Shevchenko, Andriy
2019-09-19  8:13                 ` Rafael J. Wysocki
2019-09-23  9:08                   ` Nikolaus Voss
2019-09-23  9:47                   ` [PATCH] ACPICA: Introduce acpi_load_table_with_index() Nikolaus Voss
2019-09-24 12:07                     ` Shevchenko, Andriy
2019-09-24 12:08                       ` Shevchenko, Andriy
2019-09-25 10:20                         ` Nikolaus Voss
2019-09-24 15:11                     ` Andy Shevchenko
2019-09-25 10:22                       ` Nikolaus Voss
2019-09-26 16:09                 ` [PATCH] ACPICA: make acpi_load_table() return table index Schmauss, Erik
2019-09-26 16:35                   ` Shevchenko, Andriy
2019-09-26 16:51                     ` Schmauss, Erik
2019-09-26 17:47                       ` Shevchenko, Andriy
2019-09-26 18:44                       ` Nikolaus Voss
2019-09-26 19:26                         ` Rafael J. Wysocki
2019-09-26 19:41                           ` Schmauss, Erik
2019-09-26 18:43                   ` Nikolaus Voss
2019-05-29 12:18 ` [PATCH 2/3] PWM framework: add support referencing PWMs from ACPI Nikolaus Voss
2019-05-30 14:54   ` Dan Murphy
2019-05-31 12:24     ` Pavel Machek
2019-06-03  9:27     ` Nikolaus Voss
2019-05-29 12:18 ` [PATCH 3/3] leds-pwm.c: support ACPI via firmware-node framework Nikolaus Voss
2019-05-30 15:14   ` Dan Murphy
2019-06-03  9:44     ` Nikolaus Voss

Linux-ACPI Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-acpi/0 linux-acpi/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-acpi linux-acpi/ https://lore.kernel.org/linux-acpi \
		linux-acpi@vger.kernel.org linux-acpi@archiver.kernel.org
	public-inbox-index linux-acpi

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-acpi


AGPL code for this site: git clone https://public-inbox.org/ public-inbox