aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/platform
diff options
context:
space:
mode:
authorKulikov Vasiliy <segooon@gmail.com>2010-08-03 11:44:16 -0400
committerMatthew Garrett <mjg@redhat.com>2010-08-16 11:53:44 -0400
commit5629236b31239dbaa182cb7eb39aad4d62278f7c (patch)
tree7d89214f205ce5a98bca13a018f42eb308e4e345 /drivers/platform
parentda5cabf80e2433131bf0ed8993abc0f7ea618c73 (diff)
x86: intel_ips: do not use PCI resources before pci_enable_device()
IRQ and resource[] may not have correct values until after PCI hotplug setup occurs at pci_enable_device() time. The semantic match that finds this problem is as follows: // <smpl> @@ identifier x; identifier request ~= "pci_request.*|pci_resource.*"; @@ ( * x->irq | * x->resource | * request(x, ...) ) ... *pci_enable_device(x) // </smpl> Signed-off-by: Kulikov Vasiliy <segooon@gmail.com> Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org> Signed-off-by: Matthew Garrett <mjg@redhat.com>
Diffstat (limited to 'drivers/platform')
-rw-r--r--drivers/platform/x86/intel_ips.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/platform/x86/intel_ips.c b/drivers/platform/x86/intel_ips.c
index afe82e50dfea..fad59b69a69c 100644
--- a/drivers/platform/x86/intel_ips.c
+++ b/drivers/platform/x86/intel_ips.c
@@ -1432,6 +1432,12 @@ static int ips_probe(struct pci_dev *dev, const struct pci_device_id *id)
1432 1432
1433 spin_lock_init(&ips->turbo_status_lock); 1433 spin_lock_init(&ips->turbo_status_lock);
1434 1434
1435 ret = pci_enable_device(dev);
1436 if (ret) {
1437 dev_err(&dev->dev, "can't enable PCI device, aborting\n");
1438 goto error_free;
1439 }
1440
1435 if (!pci_resource_start(dev, 0)) { 1441 if (!pci_resource_start(dev, 0)) {
1436 dev_err(&dev->dev, "TBAR not assigned, aborting\n"); 1442 dev_err(&dev->dev, "TBAR not assigned, aborting\n");
1437 ret = -ENXIO; 1443 ret = -ENXIO;
@@ -1444,11 +1450,6 @@ static int ips_probe(struct pci_dev *dev, const struct pci_device_id *id)
1444 goto error_free; 1450 goto error_free;
1445 } 1451 }
1446 1452
1447 ret = pci_enable_device(dev);
1448 if (ret) {
1449 dev_err(&dev->dev, "can't enable PCI device, aborting\n");
1450 goto error_free;
1451 }
1452 1453
1453 ips->regmap = ioremap(pci_resource_start(dev, 0), 1454 ips->regmap = ioremap(pci_resource_start(dev, 0),
1454 pci_resource_len(dev, 0)); 1455 pci_resource_len(dev, 0));