• Trent Piepho's avatar
    PCI Hotplug: restore fakephp interface with complete reimplementation · 83dbf66f
    Trent Piepho authored
    A complete re-implementation of fakephp is necessary if it is to
    present its former interface (pre-2.6.27, when it broke). The
    reason is that PCI hotplug drivers call pci_hp_register(), which
    enforces the rule that only one /sys/bus/pci/slots/ file may be
    created per physical slot.
    
    The change breaks the old fakephp's assumption that it could
    create a file per function. So we re-implement fakephp to avoid
    using the standard PCI hotplug API so that we can restore the old
    fakephp user interface.
    
    It puts entries in /sys/bus/pci/slots with the names of all PCI
    devices/functions, exactly symmetrical to what is shown in
    /sys/bus/pci/devices. Each slots/ entry has a "power" attribute,
    which works the same way as the fakephp driver's power attribute
    has worked.
    
    There are a few improvements over old fakephp, which couldn't handle
    PCI devices being added or removed via a means outside of
    fakephp's knowledge.  If a device was added another way, old fakephp
    didn't notice and didn't create the fake slot for it.  If a
    device was removed another way, old fakephp didn't delete the fake
    slot for it (and accessing the stale slot caused an oops).
    
    The new implementation overcomes these limitations. As a
    consequence, removing a bridge with other devices behind it now
    works as well, which is something else old fakephp couldn't do
    previously.
    
    This duplicates a tiny bit of the code in the PCI core that does
    this same function.  Re-using that code ends up being more
    complex than duplicating it, and it makes code in the PCI core
    more ugly just to support this legacy fakephp interface
    compatibility layer.
    Reviewed-by: default avatarJames Cameron <qz@hp.com>
    Signed-off-by: default avatarTrent Piepho <xyzzy@speakeasy.org>
    Signed-off-by: default avatarAlex Chiang <achiang@hp.com>
    Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
    83dbf66f
legacy_fakephp.c 3.67 KB