diff options
author | Keith Busch <keith.busch@intel.com> | 2018-09-18 19:58:47 -0400 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2018-10-18 20:41:16 -0400 |
commit | 369fd7b00fce169570d6a74cb369e60dbfc95fb4 (patch) | |
tree | bdacdc0724f5ec232d8989f68e8bb03dadfd67d9 | |
parent | 6200cc5ee2baa573e7ac4dbcfca750e0b777c37d (diff) |
PCI/AER: Use managed resource allocations
Use the managed device resource allocations for the service data so the AER
driver doesn't need to manage it, further simplifying this driver.
Link: https://lore.kernel.org/linux-pci/20180918235848.26694-12-keith.busch@intel.com
Signed-off-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
-rw-r--r-- | drivers/pci/pcie/aer.c | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c index 638d0cbc704e..90b53abf621d 100644 --- a/drivers/pci/pcie/aer.c +++ b/drivers/pci/pcie/aer.c | |||
@@ -1367,11 +1367,7 @@ static void aer_remove(struct pcie_device *dev) | |||
1367 | { | 1367 | { |
1368 | struct aer_rpc *rpc = get_service_data(dev); | 1368 | struct aer_rpc *rpc = get_service_data(dev); |
1369 | 1369 | ||
1370 | if (rpc) { | 1370 | aer_disable_rootport(rpc); |
1371 | aer_disable_rootport(rpc); | ||
1372 | kfree(rpc); | ||
1373 | set_service_data(dev, NULL); | ||
1374 | } | ||
1375 | } | 1371 | } |
1376 | 1372 | ||
1377 | /** | 1373 | /** |
@@ -1384,10 +1380,9 @@ static int aer_probe(struct pcie_device *dev) | |||
1384 | { | 1380 | { |
1385 | int status; | 1381 | int status; |
1386 | struct aer_rpc *rpc; | 1382 | struct aer_rpc *rpc; |
1387 | struct device *device = &dev->port->dev; | 1383 | struct device *device = &dev->device; |
1388 | 1384 | ||
1389 | /* Alloc rpc data structure */ | 1385 | rpc = devm_kzalloc(device, sizeof(struct aer_rpc), GFP_KERNEL); |
1390 | rpc = kzalloc(sizeof(struct aer_rpc), GFP_KERNEL); | ||
1391 | if (!rpc) { | 1386 | if (!rpc) { |
1392 | dev_printk(KERN_DEBUG, device, "alloc AER rpc failed\n"); | 1387 | dev_printk(KERN_DEBUG, device, "alloc AER rpc failed\n"); |
1393 | return -ENOMEM; | 1388 | return -ENOMEM; |
@@ -1395,13 +1390,11 @@ static int aer_probe(struct pcie_device *dev) | |||
1395 | rpc->rpd = dev->port; | 1390 | rpc->rpd = dev->port; |
1396 | set_service_data(dev, rpc); | 1391 | set_service_data(dev, rpc); |
1397 | 1392 | ||
1398 | /* Request IRQ ISR */ | 1393 | status = devm_request_threaded_irq(device, dev->irq, aer_irq, aer_isr, |
1399 | status = request_threaded_irq(dev->irq, aer_irq, aer_isr, | 1394 | IRQF_SHARED, "aerdrv", dev); |
1400 | IRQF_SHARED, "aerdrv", dev); | ||
1401 | if (status) { | 1395 | if (status) { |
1402 | dev_printk(KERN_DEBUG, device, "request AER IRQ %d failed\n", | 1396 | dev_printk(KERN_DEBUG, device, "request AER IRQ %d failed\n", |
1403 | dev->irq); | 1397 | dev->irq); |
1404 | aer_remove(dev); | ||
1405 | return status; | 1398 | return status; |
1406 | } | 1399 | } |
1407 | 1400 | ||