RE: [PATCH v2 1/3] ACPI: Resolve objects on host-directed table loads

From: Nikolaus Voss
Date: Thu Jun 20 2019 - 02:54:45 EST


On Wed, 19 Jun 2019, Moore, Robert wrote:


-----Original Message-----
From: Nikolaus Voss [mailto:nv@xxxxxxx]
Sent: Wednesday, June 19, 2019 2:31 AM
To: Moore, Robert <robert.moore@xxxxxxxxx>
Cc: Rafael J. Wysocki <rafael@xxxxxxxxxx>; Rafael J. Wysocki
<rjw@xxxxxxxxxxxxx>; Len Brown <lenb@xxxxxxxxxx>; Schmauss, Erik
<erik.schmauss@xxxxxxxxx>; Jacek Anaszewski
<jacek.anaszewski@xxxxxxxxx>; Pavel Machek <pavel@xxxxxx>; Dan Murphy
<dmurphy@xxxxxx>; Thierry Reding <thierry.reding@xxxxxxxxx>; ACPI Devel
Maling List <linux-acpi@xxxxxxxxxxxxxxx>; open list:ACPI COMPONENT
ARCHITECTURE (ACPICA) <devel@xxxxxxxxxx>; linux-leds@xxxxxxxxxxxxxxx;
Linux PWM List <linux-pwm@xxxxxxxxxxxxxxx>; Linux Kernel Mailing List
<linux-kernel@xxxxxxxxxxxxxxx>; nikolaus.voss@xxxxxxxxxxxxxxxxxxxxx
Subject: RE: [PATCH v2 1/3] ACPI: Resolve objects on host-directed table
loads

Hi Bob,

On Tue, 18 Jun 2019, Moore, Robert wrote:


-----Original Message-----
From: Moore, Robert
Sent: Tuesday, June 18, 2019 1:25 PM
To: 'Nikolaus Voss' <nv@xxxxxxx>
Cc: 'Rafael J. Wysocki' <rafael@xxxxxxxxxx>; 'Rafael J. Wysocki'
<rjw@xxxxxxxxxxxxx>; 'Len Brown' <lenb@xxxxxxxxxx>; Schmauss, Erik
<erik.schmauss@xxxxxxxxx>; 'Jacek Anaszewski'
<jacek.anaszewski@xxxxxxxxx>; 'Pavel Machek' <pavel@xxxxxx>; 'Dan
Murphy' <dmurphy@xxxxxx>; 'Thierry Reding'
<thierry.reding@xxxxxxxxx>; 'ACPI Devel Maling List'
<linux-acpi@xxxxxxxxxxxxxxx>; 'open list:ACPI COMPONENT ARCHITECTURE
(ACPICA)' <devel@xxxxxxxxxx>; 'linux- leds@xxxxxxxxxxxxxxx' <linux-
leds@xxxxxxxxxxxxxxx>; 'Linux PWM List'
<linux-pwm@xxxxxxxxxxxxxxx>; 'Linux Kernel Mailing List' <linux-
kernel@xxxxxxxxxxxxxxx>
Subject: RE: [PATCH v2 1/3] ACPI: Resolve objects on host-directed
table loads

If it is in fact the AcpiLoadTable interface that is incorrect, that
of course is different. I'll check that out next.

[Moore, Robert]

Yes, this is the issue, not specifically the Load() operator, but the
AcpiLoadTable interface only.

thanks for checking this out. So what is the conclusion? Is my fix of
AcpiLoadTable() sufficient or do we need a different solution?

Niko



Your change is in the correct area. We want to do something like this, however:

diff --git a/source/components/executer/exconfig.c b/source/components/executer/exconfig.c
index 84a058ada..eba1a6d28 100644
--- a/source/components/executer/exconfig.c
+++ b/source/components/executer/exconfig.c
@@ -342,10 +342,9 @@ AcpiExLoadTableOp (
return_ACPI_STATUS (Status);
}

- /* Complete the initialization/resolution of package objects */
+ /* Complete the initialization/resolution of new objects */

- Status = AcpiNsWalkNamespace (ACPI_TYPE_PACKAGE, ACPI_ROOT_OBJECT,
- ACPI_UINT32_MAX, 0, AcpiNsInitOnePackage, NULL, NULL, NULL);
+ AcpiNsInitializeObjects ();

/* Parameter Data (optional) */

@@ -620,10 +619,11 @@ AcpiExLoadOp (
return_ACPI_STATUS (Status);
}

- /* Complete the initialization/resolution of package objects */
+ /* Complete the initialization/resolution of new objects */

- Status = AcpiNsWalkNamespace (ACPI_TYPE_PACKAGE, ACPI_ROOT_OBJECT,
- ACPI_UINT32_MAX, 0, AcpiNsInitOnePackage, NULL, NULL, NULL);
+ AcpiExExitInterpreter ();
+ AcpiNsInitializeObjects ();
+ AcpiExEnterInterpreter ();

/* Store the DdbHandle into the Target operand */

diff --git a/source/components/tables/tbxfload.c b/source/components/tables/tbxfload.c
index 217d54bf0..1e17db6c8 100644
--- a/source/components/tables/tbxfload.c
+++ b/source/components/tables/tbxfload.c
@@ -479,6 +479,13 @@ AcpiLoadTable (
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 ();
+ }
+
return_ACPI_STATUS (Status);
}

Ok, I see your are taking this up (I was a bit unsure after your previous post). Thanks,
Niko