On Tue, Sep 16, 2014 at 3:27 PM, Yinghai Lu <yinghai@xxxxxxxxxx> wrote: > On Tue, Sep 16, 2014 at 1:21 PM, Joseph Salisbury > <joseph.salisbury@xxxxxxxxxxxxx> wrote: >> >> A new bug[0] was opened due to enabling PCI_REALLOC_ENABLE_AUTO, which >> is similar to the original bug[1] we discussed. >> >> Just wondering if there have been any additional ideas on realloc since >> this was last discussed? >> >> [0] http://pad.lv/1363313 > > So the resource realloc do work as expected. but LSI firmware has some > problem again? > > We may need to add command after the reset the bridge resource. Can you try attached patch? Thanks Yinghai
--- drivers/pci/setup-bus.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) Index: linux-2.6/drivers/pci/setup-bus.c =================================================================== --- linux-2.6.orig/drivers/pci/setup-bus.c +++ linux-2.6/drivers/pci/setup-bus.c @@ -1615,6 +1615,22 @@ again: fail_res->flags & type_mask, rel_type); + /* reset LSI device */ + list_for_each_entry(fail_res, &fail_head, list) { + struct pci_dev *pdev; + struct pci_bus *pbus = fail_res->dev->bus; + + if (pci_is_root_bus(pbus) || !pbus->self) + continue; + + /* LSI device firmware is not happy with changing BAR value */ + list_for_each_entry(pdev, &pbus->devices, bus_list) + if (pdev->vendor == PCI_VENDOR_ID_LSI_LOGIC) { + pci_reset_secondary_bus(pbus->self); + break; + } + } + /* restore size and flags */ list_for_each_entry(fail_res, &fail_head, list) { struct resource *res = fail_res->res;