aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeith Busch <keith.busch@intel.com>2018-09-18 19:58:47 -0400
committerBjorn Helgaas <bhelgaas@google.com>2018-10-18 20:41:16 -0400
commit369fd7b00fce169570d6a74cb369e60dbfc95fb4 (patch)
treebdacdc0724f5ec232d8989f68e8bb03dadfd67d9
parent6200cc5ee2baa573e7ac4dbcfca750e0b777c37d (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.c17
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