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 -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html