Thread (54 messages) 54 messages, 6 authors, 2013-01-11

Re: [Alternative][PATCH] ACPI / PCI: Set root bridge ACPI handle in advance

From: Rafael J. Wysocki <hidden>
Date: 2012-12-27 21:20:23
Also in: linux-pci, lkml

On Thursday, December 27, 2012 02:31:09 PM Rafael J. Wysocki wrote:
On Thursday, December 27, 2012 01:47:22 PM Rafael J. Wysocki wrote:
quoted
On Wednesday, December 26, 2012 04:10:32 PM Yinghai Lu wrote:
quoted
On Wed, Dec 26, 2012 at 2:36 PM, Rafael J. Wysocki [off-list ref] wrote:
quoted
On Wednesday, December 26, 2012 12:41:05 PM Yinghai Lu wrote:
quoted
On Wed, Dec 26, 2012 at 12:16 PM, Yinghai Lu [off-list ref] wrote:
quoted
On Wed, Dec 26, 2012 at 12:10 PM, Bjorn Helgaas [off-list ref] wrote:
quoted
Do you have a reference for this?  I think this might have been true
in the past, but I don't think it's true for any version of gcc we
support for building Linux.
http://lkml.indiana.edu/hypermail/linux/kernel/0804.3/3600.html
the problem is already addressed by:

| commit f9d14250071eda9972e4c9cea745a11185952114
| Author: Linus Torvalds [off-list ref]
| Date:   Fri Jan 2 09:29:43 2009 -0800
|
|    Disallow gcc versions 4.1.{0,1}
|
|    These compiler versions are known to miscompile __weak functions and
|    thus generate kernels that don't necessarily work correctly.  If a weak
|    function is int he same compilation unit as a caller, gcc may end up
|    inlining it, and thus binding the weak function too early.
|
|    See
|
|        http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27781
|
|    for details.

so it is ok to put the __weak in the same file now.
Cool, thanks for checking and for the ACK!
wait, we have some problem on systems that root bus is not exported via DSDT ...

one of my nehalem system that have uncore cpu devices are not exported via ACPI.

also there will be problem that system is booting with acpi=off.


+int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)
+{
+       struct pci_sysdata *sd = bridge->bus->sysdata;
+       struct pci_root_info *info = container_of(sd, struct pci_root_info, sd);
+
+       ACPI_HANDLE_SET(&bridge->dev, info->bridge->handle);
+       return 0;
+}

will get wrong info...via sd... as their sd is standalone
Yes, it will be called in all code paths leading to acpi_create_root_bus(),
not only the ones started by pci_acpi_scan_root().  Well, too bad.
s/acpi_create_root_bus/pci_create_root_bus/

Sorry.
quoted
By the way, that illustrates nicely why I generally have concerns about __weak
stuff and similar tricks.

Bjorn, I had tried to use the approach you suggested, but it didn't work.
I thought about fixing that, but everything I could come up with turned out to
be too complicated, so I'm inclined to use the previous version after all:

https://patchwork.kernel.org/patch/1889221/

that has been acked by Yinghai, Greg and Peter already.
I think I know how to avoid the __weak thing without doing what the first
version did.  I'll post a new version of the patch shortly.

Thanks,
Rafael


-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help