Check for BIOS bugs - Original Subject: Re: [PATCH 23/70] ACPICA: Workaround for reversed _PRT entries from BIOS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Friday 20 June 2008 09:43:25 Len Brown wrote:
> From: Bob Moore <robert.moore@xxxxxxxxx>
>
> Some BIOSs erroneously reverse the _PRT SourceName and the
> SourceIndex.  Detect and repair this problem. MS ACPI also allows
> and repairs this problem, thus ACPICA must also.

It would be great to have an interface to report this as a BIOS defect.

Something like:

FIRMWARE_BUG_ON(FIRM_WARN, "erroneously reversed the _PRT source_name", ACPI_ 
Bug);

FIRMWARE_BUG_ON(severity, description, component);

If say CONFIG_FIRMWARE_DEBUG is set this could send a netlink event to 
userspace and e.g. linuxfirmwarekit can grab it.
linuxfirmwarekit currently implements it's own scripts and even worse, parses 
dmesg to find BIOS bugs, which is not really maintenable.

IMO the kernel developers themselves need an interface where they can report 
bugs while seeing and fixing them.

Huang Cheng posted a nice patch on the linuxfirmwarekit list a while ago 
(unfortunately the patch was attached not inlined):
http://www.bughost.org/pipermail/firmwarekit-discuss/2008-March/000166.html

I mean it needs some cleanup (e.g. the file name was the bug number, there 
need to be a general interface created, e.g. as  shown above, etc.).
But this is IMO a good idea and might be worth adding to the kernel (when 
written :) ).
Comments?

        Thomas

PS: I added Bjorn as in the PNP parts BIOSes are pretty much messed up.
One reason is that AFAIK ACPI parts are glued together. Having dozens/hundreds 
of device declarations in a BIOS of which huge parts have not been written by 
yourself, it is very hard for vendors to check for correctness.
While Bjorn and others are adding quirks and workarounds for specific devices, 
machines or general BIOS bugs it would be great to be able to point vendors 
to these bugs by a simple tool.

> Signed-off-by: Bob Moore <robert.moore@xxxxxxxxx>
> Signed-off-by: Lin Ming <ming.m.lin@xxxxxxxxx>
> Signed-off-by: Len Brown <len.brown@xxxxxxxxx>
> ---
>  drivers/acpi/resources/rscreate.c |   17 +++++++++++++++++
>  1 files changed, 17 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/acpi/resources/rscreate.c
> b/drivers/acpi/resources/rscreate.c index faddaee..70c84ec 100644
> --- a/drivers/acpi/resources/rscreate.c
> +++ b/drivers/acpi/resources/rscreate.c
> @@ -285,6 +285,23 @@ acpi_rs_create_pci_routing_table(union
> acpi_operand_object *package_object, }
>
>  		/*
> +		 * If the BIOS has erroneously reversed the _PRT source_name (index 2)
> +		 * and the source_index (index 3), fix it. _PRT is important enough to
> +		 * workaround this BIOS error. This also provides compatibility with
> +		 * other ACPI implementations.
> +		 */
> +		obj_desc = sub_object_list[3];
> +		if (!obj_desc
> +		    || (ACPI_GET_OBJECT_TYPE(obj_desc) != ACPI_TYPE_INTEGER)) {
> +			sub_object_list[3] = sub_object_list[2];
> +			sub_object_list[2] = obj_desc;
> +
> +			ACPI_WARNING((AE_INFO,
> +				      "(PRT[%X].Source) SourceName and SourceIndex are reversed,
> fixed", +				      index));
> +		}
> +
> +		/*
>  		 * 3) Third subobject: Dereference the PRT.source_name
>  		 * The name may be unresolved (slack mode), so allow a null object
>  		 */


--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux