summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJens Axboe <axboe@fb.com>2017-05-02 09:53:04 -0600
committerJens Axboe <axboe@fb.com>2017-05-03 08:09:19 -0600
commit994ff079e8f6399e1f8cd43141da0f79ce7a179a (patch)
tree8162633011689567dc864f511326d042e92a7cd1
parent7a148c2fcff83309748bfaafe121aa85b724624f (diff)
downloadlinux-0-day-994ff079e8f6399e1f8cd43141da0f79ce7a179a.tar.gz
linux-0-day-994ff079e8f6399e1f8cd43141da0f79ce7a179a.tar.xz
mtip32xx: cleanup internal tag assumptions
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>
-rw-r--r--drivers/block/mtip32xx/mtip32xx.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/drivers/block/mtip32xx/mtip32xx.c b/drivers/block/mtip32xx/mtip32xx.c
index 96fe6500e941f..3204623f746ac 100644
--- a/drivers/block/mtip32xx/mtip32xx.c
+++ b/drivers/block/mtip32xx/mtip32xx.c
@@ -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);