]> git.baikalelectronics.ru Git - kernel.git/commitdiff
PCI/AER: Use managed resource allocations
authorKeith Busch <keith.busch@intel.com>
Tue, 18 Sep 2018 23:58:47 +0000 (17:58 -0600)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 19 Oct 2018 00:41:16 +0000 (19:41 -0500)
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>
drivers/pci/pcie/aer.c

index 638d0cbc704eca04f125b145dfee46de248fbf4b..90b53abf621d682e281f5c808fed8b80eef85f91 100644 (file)
@@ -1367,11 +1367,7 @@ static void aer_remove(struct pcie_device *dev)
 {
        struct aer_rpc *rpc = get_service_data(dev);
 
-       if (rpc) {
-               aer_disable_rootport(rpc);
-               kfree(rpc);
-               set_service_data(dev, NULL);
-       }
+       aer_disable_rootport(rpc);
 }
 
 /**
@@ -1384,10 +1380,9 @@ static int aer_probe(struct pcie_device *dev)
 {
        int status;
        struct aer_rpc *rpc;
-       struct device *device = &dev->port->dev;
+       struct device *device = &dev->device;
 
-       /* Alloc rpc data structure */
-       rpc = kzalloc(sizeof(struct aer_rpc), GFP_KERNEL);
+       rpc = devm_kzalloc(device, sizeof(struct aer_rpc), GFP_KERNEL);
        if (!rpc) {
                dev_printk(KERN_DEBUG, device, "alloc AER rpc failed\n");
                return -ENOMEM;
@@ -1395,13 +1390,11 @@ static int aer_probe(struct pcie_device *dev)
        rpc->rpd = dev->port;
        set_service_data(dev, rpc);
 
-       /* Request IRQ ISR */
-       status = request_threaded_irq(dev->irq, aer_irq, aer_isr,
-                                     IRQF_SHARED, "aerdrv", dev);
+       status = devm_request_threaded_irq(device, dev->irq, aer_irq, aer_isr,
+                                          IRQF_SHARED, "aerdrv", dev);
        if (status) {
                dev_printk(KERN_DEBUG, device, "request AER IRQ %d failed\n",
                           dev->irq);
-               aer_remove(dev);
                return status;
        }