be2net: handle signal reception while waiting for POST
authorSathya Perla <sathya.perla@emulex.com>
Thu, 12 May 2011 19:32:15 +0000 (19:32 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 13 May 2011 18:41:34 +0000 (14:41 -0400)
If waiting on POST returns prematurely (due to a signal), abort polling and return an error.

Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/benet/be_cmds.c

index 0dbb4cbc07b6aa8497ee1ebec48cb45e22b871c5..d558b9088d7e9f664c41ffc519deb6a69db01c89 100644 (file)
@@ -376,23 +376,25 @@ int be_cmd_POST(struct be_adapter *adapter)
 {
        u16 stage;
        int status, timeout = 0;
+       struct device *dev = &adapter->pdev->dev;
 
        do {
                status = be_POST_stage_get(adapter, &stage);
                if (status) {
-                       dev_err(&adapter->pdev->dev, "POST error; stage=0x%x\n",
-                               stage);
+                       dev_err(dev, "POST error; stage=0x%x\n", stage);
                        return -1;
                } else if (stage != POST_STAGE_ARMFW_RDY) {
-                       set_current_state(TASK_INTERRUPTIBLE);
-                       schedule_timeout(2 * HZ);
+                       if (msleep_interruptible(2000)) {
+                               dev_err(dev, "Waiting for POST aborted\n");
+                               return -EINTR;
+                       }
                        timeout += 2;
                } else {
                        return 0;
                }
        } while (timeout < 40);
 
-       dev_err(&adapter->pdev->dev, "POST timeout; stage=0x%x\n", stage);
+       dev_err(dev, "POST timeout; stage=0x%x\n", stage);
        return -1;
 }