mtip32xx: abstract out "are any commands active" helper
authorJens Axboe <axboe@fb.com>
Fri, 28 Apr 2017 13:54:06 +0000 (07:54 -0600)
committerJens Axboe <axboe@fb.com>
Tue, 2 May 2017 13:52:08 +0000 (07:52 -0600)
This is a prep patch for backoff in ->queue_rq() for non-ncq commands.

Reviewed-by: Bart Van Assche <Bart.VanAssche@sandisk.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Tested-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
drivers/block/mtip32xx/mtip32xx.c

index 36f3d34f215667187c9908c8affae257959c7b22..aee94f26072558d5de28669b9baf2af16772f89c 100644 (file)
@@ -1030,6 +1030,22 @@ static bool mtip_pause_ncq(struct mtip_port *port,
        return false;
 }
 
+static bool mtip_commands_active(struct mtip_port *port)
+{
+       unsigned int active;
+       unsigned int n;
+
+       /*
+        * Ignore s_active bit 0 of array element 0.
+        * This bit will always be set
+        */
+       active = readl(port->s_active[0]) & 0xFFFFFFFE;
+       for (n = 1; n < port->dd->slot_groups; n++)
+               active |= readl(port->s_active[n]);
+
+       return active != 0;
+}
+
 /*
  * Wait for port to quiesce
  *
@@ -1043,8 +1059,7 @@ static bool mtip_pause_ncq(struct mtip_port *port,
 static int mtip_quiesce_io(struct mtip_port *port, unsigned long timeout)
 {
        unsigned long to;
-       unsigned int n;
-       unsigned int active = 1;
+       bool active = true;
 
        blk_mq_stop_hw_queues(port->dd->queue);
 
@@ -1061,14 +1076,7 @@ static int mtip_quiesce_io(struct mtip_port *port, unsigned long timeout)
                if (mtip_check_surprise_removal(port->dd->pdev))
                        goto err_fault;
 
-               /*
-                * Ignore s_active bit 0 of array element 0.
-                * This bit will always be set
-                */
-               active = readl(port->s_active[0]) & 0xFFFFFFFE;
-               for (n = 1; n < port->dd->slot_groups; n++)
-                       active |= readl(port->s_active[n]);
-
+               active = mtip_commands_active(port);
                if (!active)
                        break;
        } while (time_before(jiffies, to));