[PATCH v2 1/2] x86: acpi: Fix calculation of DSDT length

Currently, the calculation for the length of the DSDT table includes any bytes that are added for alignment, but those bytes are not initialized.
This is because the DSDT length is calculated after a call to acpi_inc_align(). Split this up into the following sequence:
* acpi_inc() * Calculate DSDT length * acpi_align()
Signed-off-by: Wolfgang Wallner wolfgang.wallner@br-automation.com Reviewed-by: Andy Shevchenko andriy.shevchenko@linux.intel.com Reviewed-by: Simon Glass sjg@chromium.org
---
Changes in v2: - Added Reviewed-by tags
arch/x86/lib/acpi_table.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c index 3a93fedfc3..6b827bfa3f 100644 --- a/arch/x86/lib/acpi_table.c +++ b/arch/x86/lib/acpi_table.c @@ -427,7 +427,7 @@ ulong write_acpi_tables(ulong start_addr) (char *)&AmlCode + sizeof(struct acpi_table_header), dsdt->length - sizeof(struct acpi_table_header));
- acpi_inc_align(ctx, dsdt->length - sizeof(struct acpi_table_header)); + acpi_inc(ctx, dsdt->length - sizeof(struct acpi_table_header));
/* Pack GNVS into the ACPI table area */ for (i = 0; i < dsdt->length; i++) { @@ -450,6 +450,8 @@ ulong write_acpi_tables(ulong start_addr) dsdt->checksum = 0; dsdt->checksum = table_compute_checksum((void *)dsdt, dsdt->length);
+ acpi_align(ctx); + /* * Fill in platform-specific global NVS variables. If this fails we * cannot return the error but this should only happen while debugging.

Add a missing memset to acpi_create_spcr().
The other acpi_create_xxxx() functions perform a memset on their structures, acpi_create_spcr() does not and as a result the contents of this table are partly uninitialized (and thus random after every reset).
Fixes: commit b288cd960072 ("x86: acpi: Generate SPCR table")
Signed-off-by: Wolfgang Wallner wolfgang.wallner@br-automation.com Reviewed-by: Andy Shevchenko andriy.shevchenko@linux.intel.com Reviewed-by: Simon Glass sjg@chromium.org
---
Changes in v2: - Removed unrelated whitespace change - Added Reviewed-by tags
arch/x86/lib/acpi_table.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c index 6b827bfa3f..c445aa6870 100644 --- a/arch/x86/lib/acpi_table.c +++ b/arch/x86/lib/acpi_table.c @@ -252,6 +252,8 @@ static void acpi_create_spcr(struct acpi_spcr *spcr) int space_id; int ret = -ENODEV;
+ memset((void *)spcr, 0, sizeof(struct acpi_spcr)); + /* Fill out header fields */ acpi_fill_header(header, "SPCR"); header->length = sizeof(struct acpi_spcr);

On Wed, Sep 16, 2020 at 04:57:53PM +0200, Wolfgang Wallner wrote:
Add a missing memset to acpi_create_spcr().
The other acpi_create_xxxx() functions perform a memset on their structures, acpi_create_spcr() does not and as a result the contents of this table are partly uninitialized (and thus random after every reset).
Fixes: commit b288cd960072 ("x86: acpi: Generate SPCR table")
Signed-off-by: Wolfgang Wallner wolfgang.wallner@br-automation.com
In tag block should not be any blank line, but I guess maintainer can fix this when applying (i.o.w. no need to resend).
Reviewed-by: Andy Shevchenko andriy.shevchenko@linux.intel.com Reviewed-by: Simon Glass sjg@chromium.org
Changes in v2:
- Removed unrelated whitespace change
- Added Reviewed-by tags
arch/x86/lib/acpi_table.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c index 6b827bfa3f..c445aa6870 100644 --- a/arch/x86/lib/acpi_table.c +++ b/arch/x86/lib/acpi_table.c @@ -252,6 +252,8 @@ static void acpi_create_spcr(struct acpi_spcr *spcr) int space_id; int ret = -ENODEV;
- memset((void *)spcr, 0, sizeof(struct acpi_spcr));
- /* Fill out header fields */ acpi_fill_header(header, "SPCR"); header->length = sizeof(struct acpi_spcr);
-- 2.28.0

On Wed, Sep 16, 2020 at 11:12 PM Andy Shevchenko andriy.shevchenko@linux.intel.com wrote:
On Wed, Sep 16, 2020 at 04:57:53PM +0200, Wolfgang Wallner wrote:
Add a missing memset to acpi_create_spcr().
The other acpi_create_xxxx() functions perform a memset on their structures, acpi_create_spcr() does not and as a result the contents of this table are partly uninitialized (and thus random after every reset).
Fixes: commit b288cd960072 ("x86: acpi: Generate SPCR table")
Signed-off-by: Wolfgang Wallner wolfgang.wallner@br-automation.com
In tag block should not be any blank line, but I guess maintainer can fix this when applying (i.o.w. no need to resend).
Yep, normally I will fix such kinds of issues when applying. Thanks for pointing it out.
Reviewed-by: Andy Shevchenko andriy.shevchenko@linux.intel.com Reviewed-by: Simon Glass sjg@chromium.org
Changes in v2:
- Removed unrelated whitespace change
- Added Reviewed-by tags
arch/x86/lib/acpi_table.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c index 6b827bfa3f..c445aa6870 100644 --- a/arch/x86/lib/acpi_table.c +++ b/arch/x86/lib/acpi_table.c @@ -252,6 +252,8 @@ static void acpi_create_spcr(struct acpi_spcr *spcr) int space_id; int ret = -ENODEV;
memset((void *)spcr, 0, sizeof(struct acpi_spcr));
/* Fill out header fields */ acpi_fill_header(header, "SPCR"); header->length = sizeof(struct acpi_spcr);
--
Reviewed-by: Bin Meng bmeng.cn@gmail.com

On Mon, Sep 21, 2020 at 9:43 AM Bin Meng bmeng.cn@gmail.com wrote:
On Wed, Sep 16, 2020 at 11:12 PM Andy Shevchenko andriy.shevchenko@linux.intel.com wrote:
On Wed, Sep 16, 2020 at 04:57:53PM +0200, Wolfgang Wallner wrote:
Add a missing memset to acpi_create_spcr().
The other acpi_create_xxxx() functions perform a memset on their structures, acpi_create_spcr() does not and as a result the contents of this table are partly uninitialized (and thus random after every reset).
Fixes: commit b288cd960072 ("x86: acpi: Generate SPCR table")
Signed-off-by: Wolfgang Wallner wolfgang.wallner@br-automation.com
In tag block should not be any blank line, but I guess maintainer can fix this when applying (i.o.w. no need to resend).
Yep, normally I will fix such kinds of issues when applying. Thanks for pointing it out.
Fixed the tags format, and
Reviewed-by: Andy Shevchenko andriy.shevchenko@linux.intel.com Reviewed-by: Simon Glass sjg@chromium.org
Changes in v2:
- Removed unrelated whitespace change
- Added Reviewed-by tags
arch/x86/lib/acpi_table.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c index 6b827bfa3f..c445aa6870 100644 --- a/arch/x86/lib/acpi_table.c +++ b/arch/x86/lib/acpi_table.c @@ -252,6 +252,8 @@ static void acpi_create_spcr(struct acpi_spcr *spcr) int space_id; int ret = -ENODEV;
memset((void *)spcr, 0, sizeof(struct acpi_spcr));
/* Fill out header fields */ acpi_fill_header(header, "SPCR"); header->length = sizeof(struct acpi_spcr);
--
Reviewed-by: Bin Meng bmeng.cn@gmail.com
applied to u-boot-x86, thanks!

On Wed, Sep 16, 2020 at 10:57 PM Wolfgang Wallner wolfgang.wallner@br-automation.com wrote:
Currently, the calculation for the length of the DSDT table includes any bytes that are added for alignment, but those bytes are not initialized.
This is because the DSDT length is calculated after a call to acpi_inc_align(). Split this up into the following sequence:
- acpi_inc()
- Calculate DSDT length
- acpi_align()
Signed-off-by: Wolfgang Wallner wolfgang.wallner@br-automation.com Reviewed-by: Andy Shevchenko andriy.shevchenko@linux.intel.com Reviewed-by: Simon Glass sjg@chromium.org
Changes in v2:
- Added Reviewed-by tags
arch/x86/lib/acpi_table.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
Reviewed-by: Bin Meng bmeng.cn@gmail.com

On Mon, Sep 21, 2020 at 9:42 AM Bin Meng bmeng.cn@gmail.com wrote:
On Wed, Sep 16, 2020 at 10:57 PM Wolfgang Wallner wolfgang.wallner@br-automation.com wrote:
Currently, the calculation for the length of the DSDT table includes any bytes that are added for alignment, but those bytes are not initialized.
This is because the DSDT length is calculated after a call to acpi_inc_align(). Split this up into the following sequence:
- acpi_inc()
- Calculate DSDT length
- acpi_align()
Signed-off-by: Wolfgang Wallner wolfgang.wallner@br-automation.com Reviewed-by: Andy Shevchenko andriy.shevchenko@linux.intel.com Reviewed-by: Simon Glass sjg@chromium.org
Changes in v2:
- Added Reviewed-by tags
arch/x86/lib/acpi_table.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
Reviewed-by: Bin Meng bmeng.cn@gmail.com
applied to u-boot-x86, thanks!
participants (3)
-
Andy Shevchenko
-
Bin Meng
-
Wolfgang Wallner