pciehp: block signals while waiting for command completion
authorKenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Wed, 28 May 2008 05:59:44 +0000 (14:59 +0900)
committerJesse Barnes <jbarnes@virtuousgeek.org>
Tue, 10 Jun 2008 17:59:53 +0000 (10:59 -0700)
Since we need to wait for command completion for muximum 1sec, waiting
command should not be interrupted by a signal.

Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
drivers/pci/hotplug/pciehp_hpc.c

index 6339c638701efeeb52426ba8643519a156f6dfc9..7e3a3d17c334124a8ed81bf66e11bbffc5bf8450 100644 (file)
@@ -268,9 +268,8 @@ completed:
        return timeout;
 }
 
-static inline int pcie_wait_cmd(struct controller *ctrl, int poll)
+static inline void pcie_wait_cmd(struct controller *ctrl, int poll)
 {
-       int retval = 0;
        unsigned int msecs = pciehp_poll_mode ? 2500 : 1000;
        unsigned long timeout = msecs_to_jiffies(msecs);
        int rc;
@@ -278,16 +277,9 @@ static inline int pcie_wait_cmd(struct controller *ctrl, int poll)
        if (poll)
                rc = pcie_poll_cmd(ctrl);
        else
-               rc = wait_event_interruptible_timeout(ctrl->queue,
-                                             !ctrl->cmd_busy, timeout);
+               rc = wait_event_timeout(ctrl->queue, !ctrl->cmd_busy, timeout);
        if (!rc)
                dbg("Command not completed in 1000 msec\n");
-       else if (rc < 0) {
-               retval = -EINTR;
-               info("Command was interrupted by a signal\n");
-       }
-
-       return retval;
 }
 
 /**
@@ -365,7 +357,7 @@ static int pcie_write_cmd(struct controller *ctrl, u16 cmd, u16 mask)
                if (!(slot_ctrl & HP_INTR_ENABLE) ||
                    !(slot_ctrl & CMD_CMPL_INTR_ENABLE))
                        poll = 1;
-                retval = pcie_wait_cmd(ctrl, poll);
+                pcie_wait_cmd(ctrl, poll);
        }
  out:
        mutex_unlock(&ctrl->ctrl_lock);
@@ -797,7 +789,7 @@ static irqreturn_t pcie_isr(int irq, void *dev_id)
        if (intr_loc & CMD_COMPLETED) {
                ctrl->cmd_busy = 0;
                smp_mb();
-               wake_up_interruptible(&ctrl->queue);
+               wake_up(&ctrl->queue);
        }
 
        if (!(intr_loc & ~CMD_COMPLETED))