|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [BUG] PVH ACPI XSDT table construction
On Tue, May 26, 2020 at 01:13:19PM -0400, Daniel Smith wrote:
> Greetings,
>
>
>
> I was reviewing the ACPI construction for PVH and discovered what I believe
> is a flaw in the logic for selecting the XSDT tables. The current logic is,
>
>
>
> static bool __init pvh_acpi_xsdt_table_allowed(const char *sig,
>
> unsigned long address,
>
> unsigned long size)
>
> {
>
> /*
>
> * DSDT and FACS are pointed to from FADT and thus don't belong
>
> * in XSDT.
>
> */
>
> return (pvh_acpi_table_allowed(sig, address, size) &&
>
> strncmp(sig, ACPI_SIG_DSDT, ACPI_NAME_SIZE) &&
>
> strncmp(sig, ACPI_SIG_FACS, ACPI_NAME_SIZE));
>
> }
>
>
>
> Unless I am mistaken, the boolean logic in the return statement will always
> return false resulting in an empty XSDT table. I believe based on the comment
> what was intended here was,
>
>
>
> return (pvh_acpi_table_allowed(sig, address, size) &&
>
> !(strncmp(sig, ACPI_SIG_DSDT, ACPI_NAME_SIZE) ||
>
> strncmp(sig, ACPI_SIG_FACS, ACPI_NAME_SIZE)));
Keep in mind that strncmp will return 0 if the signature matches, and
hence doing this won't allow any table, as it would require a
signature to match both the DSDT and the FACS one (you would require
strncmp to return 0 in both cases).
The code is correct AFAICT, as it won't add DSDT or FACS to the XSDT
(because strncmp will return 0 in that case).
Roger.
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |