ACK: [PATCH] acpi: madt: only inspect Local APIC/x2APIC/SAPIC tables if enabled
Alex Hung
alex.hung at canonical.com
Wed Nov 29 03:39:03 UTC 2017
On 2017-11-28 08:55 AM, Ricardo Neri wrote:
> The Advanced Configuration and Power Interface (ACPI) specification
> version 6.2 Errata A in sections 5.2.12.2, 5.2.12.10 and 5.2.12.12 states
> that "when a processor is not present, the Processor Local APIC/x2APIC/
> SAPIC information is either not reported or flagged as disabled."
>
> This implies that it is possible for firmware implementations to include
> Local APIC/SAPIC/x2APIC tables for non-existent processors provided that
> they are disabled.
>
> Thus, only test these tables if they have the Enable flag set. Otherwise,
> skip the test. Also, print a message to record the fact that these tables
> exist but are not tested.
>
> Signed-off-by: Ricardo Neri <ricardo.neri-calderon at linux.intel.com>
> Reported-by: Bin Song <binx.song at intel.com>
> ---
> src/acpi/madt/madt.c | 25 +++++++++++++++++++++++++
> 1 file changed, 25 insertions(+)
>
> diff --git a/src/acpi/madt/madt.c b/src/acpi/madt/madt.c
> index 3bbaf2f..f997a5f 100644
> --- a/src/acpi/madt/madt.c
> +++ b/src/acpi/madt/madt.c
> @@ -546,6 +546,13 @@ static int madt_local_apic(fwts_framework *fw,
> fwts_acpi_madt_processor_local_apic *lapic =
> (fwts_acpi_madt_processor_local_apic *)data;
>
> + /* only test table if enabled */
> + if (!(lapic->flags & 0x1)) {
> + fwts_skipped(fw, "MADT %s is disabled. Skipping test.",
> + madt_sub_names[hdr->type]);
> + goto out;
> + }
> +
> madt_find_processor_uid(fw, lapic->acpi_processor_id, "LAPIC");
>
> if (lapic->flags & 0xfffffffe)
> @@ -561,6 +568,7 @@ static int madt_local_apic(fwts_framework *fw,
> "reserved and properly set to zero.",
> madt_sub_names[hdr->type]);
>
> +out:
> return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header));
> }
>
> @@ -780,6 +788,7 @@ static int madt_local_sapic(fwts_framework *fw,
> * initial boot state.
> */
>
> +
> if (hdr->length != (strlen(lsapic->uid_string) + 16))
> fwts_failed(fw, LOG_LEVEL_MEDIUM,
> "MADTLSAPICLength",
> @@ -792,6 +801,13 @@ static int madt_local_sapic(fwts_framework *fw,
> "MADT %s table length (%d) is correct.",
> madt_sub_names[hdr->type], hdr->length);
>
> + /* only continue testing table if enabled */
> + if (!(lsapic->flags & 0x1)) {
> + fwts_skipped(fw, "MADT %s is disabled. Skipping test.",
> + madt_sub_names[hdr->type]);
> + goto out;
> + }
> +
> /*
> * There are three values that need to be checked for a valid
> * processor UID: the ACPI processor ID, the UID value, and the UID
> @@ -878,6 +894,7 @@ static int madt_local_sapic(fwts_framework *fw,
> "MADT %s UID string is an ASCII string.",
> madt_sub_names[hdr->type]);
>
> +out:
> return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header));
> }
>
> @@ -952,6 +969,13 @@ static int madt_local_x2apic(fwts_framework *fw,
> fwts_acpi_madt_local_x2apic *lx2apic =
> (fwts_acpi_madt_local_x2apic *)data;
>
> + /* only test table if enabled */
> + if (!(lx2apic->flags & 0x1)) {
> + fwts_skipped(fw, "MADT %s is disabled. Skipping test.",
> + madt_sub_names[hdr->type]);
> + goto out;
> + }
> +
> if (lx2apic->reserved)
> fwts_failed(fw, LOG_LEVEL_MEDIUM,
> "MADTLX2APICReservedNonZero",
> @@ -980,6 +1004,7 @@ static int madt_local_x2apic(fwts_framework *fw,
>
> madt_find_processor_uid(fw, lx2apic->processor_uid, "X2APIC");
>
> +out:
> return (hdr->length - sizeof(fwts_acpi_madt_sub_table_header));
> }
>
>
Acked-by: Alex Hung <alex.hung at canonical.com>
More information about the fwts-devel
mailing list