Kernel Bug Tracker – Bug 16422
the pci device is incorrectly bound with ACPI device
Last modified: 2010-09-29 03:14:21 UTC
On one machine there is no ACPI device for the 0000:00:00.0 pci device. But in course of adding 0000:00:00.0 pci device, it is incorrectly bound with the ACPI device.
ls -l /sys/devices/pci0000:00/0000:00:00.0/firmware_node
And we will get
/sys/devices/pci0000:00/0000:00:00.0/firmware_node -> ../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/PNP0C02:02
In fact the PNP0C02:02 is not one PCI device.
Created attachment 27165 [details]
Created attachment 27166 [details]
After some debugging and test, it seems that it is related with the incorrect conditional judgement when finding the ACPI device for the PCI device.
In course of finding ACPI handle for the corresponding PCI device, we will firstly try to evaluate the _ADR object and then compare the two addresses to
see whether it is the target ACPI device. If there is no _ADR object for ACPI device, it is assumed that the address is zero. But for one PCI device(0000:00:00.0) under the PCI root bridge, the corresponding address will be constructed as zero.In such case maybe the ACPI device without _ADR object will be misdetected and then be used to create the relationship between PCI device and ACPI device.
If we add the check of _ADR flag, we can avoid the incorrect binding about PCI device and ACPI device.
please attach the patch or the url of the patch and close this bug.
applied to acpi-test
Author: Zhao Yakui <firstname.lastname@example.org>
Date: Tue Jul 13 03:36:08 2010 +0000
ACPI: Add the check of ADR flag in course of finding ACPI handle for PCI dev
shipped in v2.6.36-rc1