Re: New warning: PRMT not present

From: Paul Menzel
Date: Tue Sep 07 2021 - 09:23:40 EST


Dear Aubrey,


Am 07.09.21 um 15:02 schrieb Aubrey Li:
On 9/7/21 3:22 PM, Paul Menzel wrote:

Am 07.09.21 um 05:26 schrieb Aubrey Li:

On 9/6/21 10:15 PM, Paul Menzel wrote:

Am 06.09.21 um 14:02 schrieb Rafael J. Wysocki:

This should be addressed by commit 2bbfa0addd63 "ACPI: PRM: Deal with
table not present or no module found", or yet another fix is needed.

Linux still warns on my systems with Linux 5.14 and Linus’ master in QEMU i440fx and an Asus F2A85-M PRO.

Does the following patch address your problem?

Yes, it does. With this patch cherry-picked to my Linux tree, the warning is gone in QEMU.

    qemu-system-x86_64 -kernel /dev/shm/bzImage -append "earlyprintk=serial,ttyS0,keep console=ttyS0,115200 console=tty0" -display none -serial stdio

(I have to check my configuration, why normal serial console does not work in QEMU.)

----------------------------------------------------------------------
 From 52fda76410fcb7a3661687e960634d34fa44fb5f Mon Sep 17 00:00:00 2001
From: Aubrey Li <aubrey.li@xxxxxxxxx>
Date: Tue, 7 Sep 2021 11:06:59 +0800
Subject: [PATCH] ACPI/RPM: Find PRMT table before parse it

What does RPM mean?

PRM, Platform Runtime Mechanism:
https://uefi.org/sites/default/files/resources/Platform%20Runtime%20Mechanism%20-%20with%20legal%20notice.pdf

Ah, so just a typo in the prefix: RPM → PRM.

Find and verify PRMT table before parse it, this eliminates a
warning on machines without PRMT table.

Please paste the warning for people grepping the commit messages.

    ACPI: PRMT not present

Nice suggestion.


Signed-off-by: Aubrey Li <aubrey.li@xxxxxxxxxxxxxxx>
---
  drivers/acpi/prmt.c | 10 +++++++++-
  1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/acpi/prmt.c b/drivers/acpi/prmt.c
index 1f6007a..89c22bc 100644
--- a/drivers/acpi/prmt.c
+++ b/drivers/acpi/prmt.c
@@ -288,10 +288,18 @@ static acpi_status acpi_platformrt_space_handler(u32 function,
    void __init init_prmt(void)
  {
+    struct acpi_table_header *tbl;
      acpi_status status;
-    int mc = acpi_table_parse_entries(ACPI_SIG_PRMT, sizeof(struct acpi_table_prmt) +
+    int mc;
+
+    status = acpi_get_table(ACPI_SIG_PRMT, 0, &tbl);
+    if (ACPI_FAILURE(status))
+        return;
+
+    mc = acpi_table_parse_entries(ACPI_SIG_PRMT, sizeof(struct acpi_table_prmt) +
                        sizeof (struct acpi_table_prmt_header),
                        0, acpi_parse_prmt, 0);
+    acpi_put_table(tbl);
      /*
       * Return immediately if PRMT table is not present or no PRM module found.
       */


Tested-by: Paul Menzel <pmenzel@xxxxxxxxxxxxx>

Thanks for testing, I'll send a formal patch to Rafael.

Thank you.


Kind regards,

Paul