From 1ceac074f6faee121bdb7cfd96839b1762937983 Mon Sep 17 00:00:00 2001 From: Matthew Wilcox Date: Sun, 17 Jan 2010 14:01:41 -0700 Subject: [PATCH] --- yaml --- r: 180971 b: refs/heads/master c: 4fb88c1a28a8dc302bdc09858e7cdafc97bef794 h: refs/heads/master i: 180969: d4f49c4687a7a3eda61b911ad4d953fff9e619d3 180967: 87b0b99b4170d574299d6955d301a31e48a80ba0 v: v3 --- [refs] | 2 +- trunk/drivers/pci/probe.c | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 88d5a5cf7ce6..c5438982135f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0bf01c3c86d4b9ea279d6215420484db887f5db5 +refs/heads/master: 4fb88c1a28a8dc302bdc09858e7cdafc97bef794 diff --git a/trunk/drivers/pci/probe.c b/trunk/drivers/pci/probe.c index 9672760c7ade..233d1c275d96 100644 --- a/trunk/drivers/pci/probe.c +++ b/trunk/drivers/pci/probe.c @@ -1222,11 +1222,19 @@ EXPORT_SYMBOL(pci_scan_single_device); static unsigned next_ari_fn(struct pci_dev *dev, unsigned fn) { u16 cap; - unsigned pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI); + unsigned pos, next_fn; + + if (!dev) + return 0; + + pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI); if (!pos) return 0; pci_read_config_word(dev, pos + 4, &cap); - return cap >> 8; + next_fn = cap >> 8; + if (next_fn <= fn) + return 0; + return next_fn; } static unsigned next_trad_fn(struct pci_dev *dev, unsigned fn) @@ -1271,12 +1279,14 @@ int pci_scan_slot(struct pci_bus *bus, int devfn) return 0; /* Already scanned the entire slot */ dev = pci_scan_single_device(bus, devfn); - if (dev && !dev->is_added) /* new device? */ + if (!dev) + return 0; + if (!dev->is_added) nr++; if (pci_ari_enabled(bus)) next_fn = next_ari_fn; - else if (dev && dev->multifunction) + else if (dev->multifunction) next_fn = next_trad_fn; for (fn = next_fn(dev, 0); fn > 0; fn = next_fn(dev, fn)) {