Messages in this thread | | | Date | Tue, 19 Jan 2010 14:11:10 -0800 | From | Yinghai Lu <> | Subject | Re: [PATCH 01/11] pci: add pci_bridge_release_unused_res and pci_bus_release_unused_bridge_res |
| |
On 01/19/2010 01:26 PM, Alex Chiang wrote: >> +static void __ref pci_bus_release_bridge_resources(struct pci_bus *bus, >> + unsigned long type, >> + enum release_type rel_type) >> +{ >> + struct pci_dev *dev; >> + bool is_leaf_bridge = true; >> + >> + list_for_each_entry(dev, &bus->devices, bus_list) { >> + struct pci_bus *b = dev->subordinate; >> + if (!b) >> + continue; >> + >> + switch (dev->class >> 8) { >> + case PCI_CLASS_BRIDGE_CARDBUS: >> + is_leaf_bridge = false; >> + break; >> + >> + case PCI_CLASS_BRIDGE_PCI: >> + default: >> + is_leaf_bridge = false; >> + if (rel_type == whole_subtree) >> + pci_bus_release_bridge_resources(b, type, >> + whole_subtree); >> + break; >> + } >> + } > > I still don't understand this loop. Can't you write it like this: > > list_for_each_entry(dev, &bus->devices, bus_list) { > struct pci_bus *b = dev->subordinate; > if (!b) > continue; > > is_leaf_bridge = false; > > if ((dev->class >> 8) == PCI_CLASS_BRIDGE_CARDBUS) > continue; > > if (rel_type == whole_subtree) > pci_bus_release_bridge_resources(b, type, > whole_subtree); > } > > I'm looking at that 'default' label in your switch() statement > which causes us to always set is_leaf_bridge = false after 'b' is > valid.
ok
| |