These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / pcmcia / yenta_socket.c
index 965bd84..5d6d9b1 100644 (file)
@@ -712,10 +712,9 @@ static int yenta_allocate_res(struct yenta_socket *socket, int nr, unsigned type
                pcibios_bus_to_resource(dev->bus, res, &region);
                if (pci_claim_resource(dev, PCI_BRIDGE_RESOURCES + nr) == 0)
                        return 0;
-               dev_printk(KERN_INFO, &dev->dev,
-                          "Preassigned resource %d busy or not available, "
-                          "reconfiguring...\n",
-                          nr);
+               dev_info(&dev->dev,
+                        "Preassigned resource %d busy or not available, reconfiguring...\n",
+                        nr);
        }
 
        if (type & IORESOURCE_IO) {
@@ -738,9 +737,9 @@ static int yenta_allocate_res(struct yenta_socket *socket, int nr, unsigned type
                        return 1;
        }
 
-       dev_printk(KERN_INFO, &dev->dev,
-                  "no resource of type %x available, trying to continue...\n",
-                  type);
+       dev_info(&dev->dev,
+                "no resource of type %x available, trying to continue...\n",
+                type);
        res->start = res->end = res->flags = 0;
        return 0;
 }
@@ -802,13 +801,13 @@ static void yenta_close(struct pci_dev *dev)
        else
                del_timer_sync(&sock->poll_timer);
 
-       if (sock->base)
-               iounmap(sock->base);
+       iounmap(sock->base);
        yenta_free_resources(sock);
 
        pci_release_regions(dev);
        pci_disable_device(dev);
        pci_set_drvdata(dev, NULL);
+       kfree(sock);
 }
 
 
@@ -979,8 +978,8 @@ static int yenta_probe_cb_irq(struct yenta_socket *socket)
        socket->probe_status = 0;
 
        if (request_irq(socket->cb_irq, yenta_probe_handler, IRQF_SHARED, "yenta", socket)) {
-               dev_printk(KERN_WARNING, &socket->dev->dev,
-                          "request_irq() in yenta_probe_cb_irq() failed!\n");
+               dev_warn(&socket->dev->dev,
+                        "request_irq() in yenta_probe_cb_irq() failed!\n");
                return -1;
        }
 
@@ -1019,9 +1018,8 @@ static void yenta_get_socket_capabilities(struct yenta_socket *socket, u32 isa_i
        else
                socket->socket.irq_mask = 0;
 
-       dev_printk(KERN_INFO, &socket->dev->dev,
-                  "ISA IRQ mask 0x%04x, PCI irq %d\n",
-                  socket->socket.irq_mask, socket->cb_irq);
+       dev_info(&socket->dev->dev, "ISA IRQ mask 0x%04x, PCI irq %d\n",
+                socket->socket.irq_mask, socket->cb_irq);
 }
 
 /*
@@ -1111,9 +1109,9 @@ static void yenta_fixup_parent_bridge(struct pci_bus *cardbus_bridge)
 
        /* Show that the wanted subordinate number is not possible: */
        if (cardbus_bridge->busn_res.end > upper_limit)
-               dev_printk(KERN_WARNING, &cardbus_bridge->dev,
-                          "Upper limit for fixing this "
-                          "bridge's parent bridge: #%02x\n", upper_limit);
+               dev_warn(&cardbus_bridge->dev,
+                        "Upper limit for fixing this bridge's parent bridge: #%02x\n",
+                        upper_limit);
 
        /* If we have room to increase the bridge's subordinate number, */
        if (bridge_to_fix->busn_res.end < upper_limit) {
@@ -1122,11 +1120,11 @@ static void yenta_fixup_parent_bridge(struct pci_bus *cardbus_bridge)
                unsigned char subordinate_to_assign =
                        min_t(int, cardbus_bridge->busn_res.end, upper_limit);
 
-               dev_printk(KERN_INFO, &bridge_to_fix->dev,
-                          "Raising subordinate bus# of parent "
-                          "bus (#%02x) from #%02x to #%02x\n",
-                          bridge_to_fix->number,
-                          (int)bridge_to_fix->busn_res.end, subordinate_to_assign);
+               dev_info(&bridge_to_fix->dev,
+                        "Raising subordinate bus# of parent bus (#%02x) from #%02x to #%02x\n",
+                        bridge_to_fix->number,
+                        (int)bridge_to_fix->busn_res.end,
+                        subordinate_to_assign);
 
                /* Save the new subordinate in the bus struct of the bridge */
                bridge_to_fix->busn_res.end = subordinate_to_assign;
@@ -1153,8 +1151,7 @@ static int yenta_probe(struct pci_dev *dev, const struct pci_device_id *id)
         * Bail out if so.
         */
        if (!dev->subordinate) {
-               dev_printk(KERN_ERR, &dev->dev, "no bus associated! "
-                          "(try 'pci=assign-busses')\n");
+               dev_err(&dev->dev, "no bus associated! (try 'pci=assign-busses')\n");
                return -ENODEV;
        }
 
@@ -1189,7 +1186,7 @@ static int yenta_probe(struct pci_dev *dev, const struct pci_device_id *id)
                goto disable;
 
        if (!pci_resource_start(dev, 0)) {
-               dev_printk(KERN_ERR, &dev->dev, "No cardbus resource!\n");
+               dev_err(&dev->dev, "No cardbus resource!\n");
                ret = -ENODEV;
                goto release;
        }
@@ -1208,8 +1205,8 @@ static int yenta_probe(struct pci_dev *dev, const struct pci_device_id *id)
         * report the subsystem vendor and device for help debugging
         * the irq stuff...
         */
-       dev_printk(KERN_INFO, &dev->dev, "CardBus bridge found [%04x:%04x]\n",
-                  dev->subsystem_vendor, dev->subsystem_device);
+       dev_info(&dev->dev, "CardBus bridge found [%04x:%04x]\n",
+                dev->subsystem_vendor, dev->subsystem_device);
 
        yenta_config_init(socket);
 
@@ -1239,12 +1236,10 @@ static int yenta_probe(struct pci_dev *dev, const struct pci_device_id *id)
                setup_timer(&socket->poll_timer, yenta_interrupt_wrapper,
                            (unsigned long)socket);
                mod_timer(&socket->poll_timer, jiffies + HZ);
-               dev_printk(KERN_INFO, &dev->dev,
-                          "no PCI IRQ, CardBus support disabled for this "
-                          "socket.\n");
-               dev_printk(KERN_INFO, &dev->dev,
-                          "check your BIOS CardBus, BIOS IRQ or ACPI "
-                          "settings.\n");
+               dev_info(&dev->dev,
+                        "no PCI IRQ, CardBus support disabled for this socket.\n");
+               dev_info(&dev->dev,
+                        "check your BIOS CardBus, BIOS IRQ or ACPI settings.\n");
        } else {
                socket->socket.features |= SS_CAP_CARDBUS;
        }
@@ -1252,32 +1247,41 @@ static int yenta_probe(struct pci_dev *dev, const struct pci_device_id *id)
        /* Figure out what the dang thing can do for the PCMCIA layer... */
        yenta_interrogate(socket);
        yenta_get_socket_capabilities(socket, isa_interrupts);
-       dev_printk(KERN_INFO, &dev->dev,
-                  "Socket status: %08x\n", cb_readl(socket, CB_SOCKET_STATE));
+       dev_info(&dev->dev, "Socket status: %08x\n",
+                cb_readl(socket, CB_SOCKET_STATE));
 
        yenta_fixup_parent_bridge(dev->subordinate);
 
        /* Register it with the pcmcia layer.. */
        ret = pcmcia_register_socket(&socket->socket);
-       if (ret == 0) {
-               /* Add the yenta register attributes */
-               ret = device_create_file(&dev->dev, &dev_attr_yenta_registers);
-               if (ret == 0)
-                       goto out;
-
-               /* error path... */
-               pcmcia_unregister_socket(&socket->socket);
-       }
+       if (ret)
+               goto free_irq;
+
+       /* Add the yenta register attributes */
+       ret = device_create_file(&dev->dev, &dev_attr_yenta_registers);
+       if (ret)
+               goto unregister_socket;
 
+       return ret;
+
+       /* error path... */
+ unregister_socket:
+       pcmcia_unregister_socket(&socket->socket);
+ free_irq:
+       if (socket->cb_irq)
+               free_irq(socket->cb_irq, socket);
+       else
+               del_timer_sync(&socket->poll_timer);
  unmap:
        iounmap(socket->base);
+       yenta_free_resources(socket);
  release:
        pci_release_regions(dev);
  disable:
        pci_disable_device(dev);
  free:
+       pci_set_drvdata(dev, NULL);
        kfree(socket);
- out:
        return ret;
 }