diff options
Diffstat (limited to 'arch/powerpc/kernel/eeh_cache.c')
-rw-r--r-- | arch/powerpc/kernel/eeh_cache.c | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/arch/powerpc/kernel/eeh_cache.c b/arch/powerpc/kernel/eeh_cache.c index f9ac1232a746..e8c9fd546a5c 100644 --- a/arch/powerpc/kernel/eeh_cache.c +++ b/arch/powerpc/kernel/eeh_cache.c | |||
@@ -68,16 +68,12 @@ static inline struct eeh_dev *__eeh_addr_cache_get_device(unsigned long addr) | |||
68 | struct pci_io_addr_range *piar; | 68 | struct pci_io_addr_range *piar; |
69 | piar = rb_entry(n, struct pci_io_addr_range, rb_node); | 69 | piar = rb_entry(n, struct pci_io_addr_range, rb_node); |
70 | 70 | ||
71 | if (addr < piar->addr_lo) { | 71 | if (addr < piar->addr_lo) |
72 | n = n->rb_left; | 72 | n = n->rb_left; |
73 | } else { | 73 | else if (addr > piar->addr_hi) |
74 | if (addr > piar->addr_hi) { | 74 | n = n->rb_right; |
75 | n = n->rb_right; | 75 | else |
76 | } else { | 76 | return piar->edev; |
77 | pci_dev_get(piar->pcidev); | ||
78 | return piar->edev; | ||
79 | } | ||
80 | } | ||
81 | } | 77 | } |
82 | 78 | ||
83 | return NULL; | 79 | return NULL; |
@@ -156,7 +152,6 @@ eeh_addr_cache_insert(struct pci_dev *dev, unsigned long alo, | |||
156 | if (!piar) | 152 | if (!piar) |
157 | return NULL; | 153 | return NULL; |
158 | 154 | ||
159 | pci_dev_get(dev); | ||
160 | piar->addr_lo = alo; | 155 | piar->addr_lo = alo; |
161 | piar->addr_hi = ahi; | 156 | piar->addr_hi = ahi; |
162 | piar->edev = pci_dev_to_eeh_dev(dev); | 157 | piar->edev = pci_dev_to_eeh_dev(dev); |
@@ -250,7 +245,6 @@ restart: | |||
250 | 245 | ||
251 | if (piar->pcidev == dev) { | 246 | if (piar->pcidev == dev) { |
252 | rb_erase(n, &pci_io_addr_cache_root.rb_root); | 247 | rb_erase(n, &pci_io_addr_cache_root.rb_root); |
253 | pci_dev_put(piar->pcidev); | ||
254 | kfree(piar); | 248 | kfree(piar); |
255 | goto restart; | 249 | goto restart; |
256 | } | 250 | } |
@@ -302,12 +296,10 @@ void eeh_addr_cache_build(void) | |||
302 | if (!edev) | 296 | if (!edev) |
303 | continue; | 297 | continue; |
304 | 298 | ||
305 | pci_dev_get(dev); /* matching put is in eeh_remove_device() */ | ||
306 | dev->dev.archdata.edev = edev; | 299 | dev->dev.archdata.edev = edev; |
307 | edev->pdev = dev; | 300 | edev->pdev = dev; |
308 | 301 | ||
309 | eeh_addr_cache_insert_dev(dev); | 302 | eeh_addr_cache_insert_dev(dev); |
310 | |||
311 | eeh_sysfs_add_device(dev); | 303 | eeh_sysfs_add_device(dev); |
312 | } | 304 | } |
313 | 305 | ||