]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
Staging: ipack/bridges/tpci200: move tpci200_free_irq() and tpci200_request_irq()
authorJens Taprogge <jens.taprogge@taprogge.org>
Wed, 12 Sep 2012 12:55:37 +0000 (14:55 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 12 Sep 2012 16:56:01 +0000 (09:56 -0700)
Now, all the interrupt related functions are next to each other.

Signed-off-by: Jens Taprogge <jens.taprogge@taprogge.org>
Signed-off-by: Samuel Iglesias Gonsalvez <siglesias@igalia.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/ipack/bridges/tpci200.c

index c7ec342d8efa415a4a6bf8f9305628ccd91fe443..b0d220521ccfbaf24dba50491451bd76754d77a1 100644 (file)
@@ -165,6 +165,83 @@ static irqreturn_t tpci200_interrupt(int irq, void *dev_id)
        return IRQ_HANDLED;
 }
 
+static int tpci200_free_irq(struct ipack_device *dev)
+{
+       struct slot_irq *slot_irq;
+       struct tpci200_board *tpci200;
+
+       tpci200 = check_slot(dev);
+       if (tpci200 == NULL)
+               return -EINVAL;
+
+       if (mutex_lock_interruptible(&tpci200->mutex))
+               return -ERESTARTSYS;
+
+       if (tpci200->slots[dev->slot].irq == NULL) {
+               mutex_unlock(&tpci200->mutex);
+               return -EINVAL;
+       }
+
+       tpci200_disable_irq(tpci200, dev->slot);
+       slot_irq = tpci200->slots[dev->slot].irq;
+       /* uninstall handler */
+       RCU_INIT_POINTER(tpci200->slots[dev->slot].irq, NULL);
+       synchronize_rcu();
+       kfree(slot_irq);
+       mutex_unlock(&tpci200->mutex);
+       return 0;
+}
+
+static int tpci200_request_irq(struct ipack_device *dev, int vector,
+                              int (*handler)(void *), void *arg)
+{
+       int res = 0;
+       struct slot_irq *slot_irq;
+       struct tpci200_board *tpci200;
+
+       tpci200 = check_slot(dev);
+       if (tpci200 == NULL)
+               return -EINVAL;
+
+       if (mutex_lock_interruptible(&tpci200->mutex))
+               return -ERESTARTSYS;
+
+       if (tpci200->slots[dev->slot].irq != NULL) {
+               dev_err(&dev->dev,
+                       "Slot [%d:%d] IRQ already registered !\n", dev->bus_nr,
+                       dev->slot);
+               res = -EINVAL;
+               goto out_unlock;
+       }
+
+       slot_irq = kzalloc(sizeof(struct slot_irq), GFP_KERNEL);
+       if (slot_irq == NULL) {
+               dev_err(&dev->dev,
+                       "Slot [%d:%d] unable to allocate memory for IRQ !\n",
+                       dev->bus_nr, dev->slot);
+               res = -ENOMEM;
+               goto out_unlock;
+       }
+
+       /*
+        * WARNING: Setup Interrupt Vector in the IndustryPack device
+        * before an IRQ request.
+        * Read the User Manual of your IndustryPack device to know
+        * where to write the vector in memory.
+        */
+       slot_irq->vector = vector;
+       slot_irq->handler = handler;
+       slot_irq->arg = arg;
+       slot_irq->holder = dev;
+
+       rcu_assign_pointer(tpci200->slots[dev->slot].irq, slot_irq);
+       tpci200_enable_irq(tpci200, dev->slot);
+
+out_unlock:
+       mutex_unlock(&tpci200->mutex);
+       return res;
+}
+
 static int tpci200_register(struct tpci200_board *tpci200)
 {
        int i;
@@ -283,33 +360,6 @@ out_disable_pci:
        return res;
 }
 
-static int tpci200_free_irq(struct ipack_device *dev)
-{
-       struct slot_irq *slot_irq;
-       struct tpci200_board *tpci200;
-
-       tpci200 = check_slot(dev);
-       if (tpci200 == NULL)
-               return -EINVAL;
-
-       if (mutex_lock_interruptible(&tpci200->mutex))
-               return -ERESTARTSYS;
-
-       if (tpci200->slots[dev->slot].irq == NULL) {
-               mutex_unlock(&tpci200->mutex);
-               return -EINVAL;
-       }
-
-       tpci200_disable_irq(tpci200, dev->slot);
-       slot_irq = tpci200->slots[dev->slot].irq;
-       /* uninstall handler */
-       RCU_INIT_POINTER(tpci200->slots[dev->slot].irq, NULL);
-       synchronize_rcu();
-       kfree(slot_irq);
-       mutex_unlock(&tpci200->mutex);
-       return 0;
-}
-
 static int tpci200_slot_unmap_space(struct ipack_device *dev, int space)
 {
        struct ipack_addr_space *virt_addr_space;
@@ -448,56 +498,6 @@ out_unlock:
        return res;
 }
 
-static int tpci200_request_irq(struct ipack_device *dev, int vector,
-                              int (*handler)(void *), void *arg)
-{
-       int res = 0;
-       struct slot_irq *slot_irq;
-       struct tpci200_board *tpci200;
-
-       tpci200 = check_slot(dev);
-       if (tpci200 == NULL)
-               return -EINVAL;
-
-       if (mutex_lock_interruptible(&tpci200->mutex))
-               return -ERESTARTSYS;
-
-       if (tpci200->slots[dev->slot].irq != NULL) {
-               dev_err(&dev->dev,
-                       "Slot [%d:%d] IRQ already registered !\n", dev->bus_nr,
-                       dev->slot);
-               res = -EINVAL;
-               goto out_unlock;
-       }
-
-       slot_irq = kzalloc(sizeof(struct slot_irq), GFP_KERNEL);
-       if (slot_irq == NULL) {
-               dev_err(&dev->dev,
-                       "Slot [%d:%d] unable to allocate memory for IRQ !\n",
-                       dev->bus_nr, dev->slot);
-               res = -ENOMEM;
-               goto out_unlock;
-       }
-
-       /*
-        * WARNING: Setup Interrupt Vector in the IndustryPack device
-        * before an IRQ request.
-        * Read the User Manual of your IndustryPack device to know
-        * where to write the vector in memory.
-        */
-       slot_irq->vector = vector;
-       slot_irq->handler = handler;
-       slot_irq->arg = arg;
-       slot_irq->holder = dev;
-
-       rcu_assign_pointer(tpci200->slots[dev->slot].irq, slot_irq);
-       tpci200_enable_irq(tpci200, dev->slot);
-
-out_unlock:
-       mutex_unlock(&tpci200->mutex);
-       return res;
-}
-
 static int tpci200_get_clockrate(struct ipack_device *dev)
 {
        struct tpci200_board *tpci200 = check_slot(dev);