Re: [PATCH 01/11] pci: add pci_bridge_release_unused_res andpci_bus_release_unused_bridge_res

From: Alex Chiang
Date: Tue Jan 19 2010 - 16:26:16 EST


> +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.

/ac
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/