mtip32xx: cleanup internal tag assumptions
authorJens Axboe <axboe@fb.com>
Tue, 2 May 2017 15:53:04 +0000 (09:53 -0600)
committerJens Axboe <axboe@fb.com>
Wed, 3 May 2017 14:09:19 +0000 (08:09 -0600)
We don't decode the internal tag to the proper group or tag
indx. This works fine because we have hard wired it as 0 for now,
but could break if we get rid of that.

Signed-off-by: Jens Axboe <axboe@fb.com>
drivers/block/mtip32xx/mtip32xx.c

index 96fe6500e941fd5a9ecff1c6eec6160c60f85895..3204623f746ac61f8deb8d6ebca21b3b59116680 100644 (file)
@@ -847,16 +847,15 @@ static inline void mtip_process_legacy(struct driver_data *dd, u32 port_stat)
        struct mtip_port *port = dd->port;
        struct mtip_cmd *cmd = mtip_cmd_from_tag(dd, MTIP_TAG_INTERNAL);
 
-       if (test_bit(MTIP_PF_IC_ACTIVE_BIT, &port->flags) &&
-           (cmd != NULL) && !(readl(port->cmd_issue[MTIP_TAG_INTERNAL])
-               & (1 << MTIP_TAG_INTERNAL))) {
-               if (cmd->comp_func) {
-                       cmd->comp_func(port, MTIP_TAG_INTERNAL, cmd, 0);
-                       return;
+       if (test_bit(MTIP_PF_IC_ACTIVE_BIT, &port->flags) && cmd) {
+               int group = MTIP_TAG_INDEX(MTIP_TAG_INTERNAL);
+               int status = readl(port->cmd_issue[group]);
+
+               if (!(status & (1 << MTIP_TAG_BIT(MTIP_TAG_INTERNAL)))) {
+                       if (cmd->comp_func)
+                               cmd->comp_func(port, MTIP_TAG_INTERNAL, cmd, 0);
                }
        }
-
-       return;
 }
 
 /*
@@ -1213,8 +1212,8 @@ static int mtip_exec_internal_command(struct mtip_port *port,
                goto exec_ic_exit;
        }
 
-       if (readl(port->cmd_issue[MTIP_TAG_INTERNAL])
-                       & (1 << MTIP_TAG_INTERNAL)) {
+       if (readl(port->cmd_issue[MTIP_TAG_INDEX(MTIP_TAG_INTERNAL)])
+                       & (1 << MTIP_TAG_BIT(MTIP_TAG_INTERNAL))) {
                rv = -ENXIO;
                if (!test_bit(MTIP_DDF_REMOVE_PENDING_BIT, &dd->dd_flag)) {
                        mtip_device_reset(dd);