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