| From foo@baz Fri Apr 6 10:27:52 CEST 2018 |
| From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Date: Fri, 6 Apr 2018 09:28:46 +0200 |
| Subject: Revert "mtip32xx: use runtime tag to initialize command header" |
| |
| From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| This reverts commit db54facd56a40e7766bf7f7cda1ae138e72a691c which was |
| commit a4e84aae8139aca9fbfbced1f45c51ca81b57488 upstream. |
| |
| Ben writes: |
| MQ IO schedulers were introduced in 4.11, so this shouldn't be |
| needed in older branches. It also causes a performance |
| regression (fixed upstream). Please revert this for 4.4 and |
| 4.9. |
| |
| So let's revert it! |
| |
| Reported-by: Ben Hutchings <ben.hutchings@codethink.co.uk> |
| Cc: Ming Lei <ming.lei@redhat.com> |
| Cc: Jens Axboe <axboe@fb.com> |
| Cc: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/block/mtip32xx/mtip32xx.c | 36 ++++++++++++------------------------ |
| 1 file changed, 12 insertions(+), 24 deletions(-) |
| |
| --- a/drivers/block/mtip32xx/mtip32xx.c |
| +++ b/drivers/block/mtip32xx/mtip32xx.c |
| @@ -169,25 +169,6 @@ static bool mtip_check_surprise_removal( |
| return false; /* device present */ |
| } |
| |
| -/* we have to use runtime tag to setup command header */ |
| -static void mtip_init_cmd_header(struct request *rq) |
| -{ |
| - struct driver_data *dd = rq->q->queuedata; |
| - struct mtip_cmd *cmd = blk_mq_rq_to_pdu(rq); |
| - u32 host_cap_64 = readl(dd->mmio + HOST_CAP) & HOST_CAP_64; |
| - |
| - /* Point the command headers at the command tables. */ |
| - cmd->command_header = dd->port->command_list + |
| - (sizeof(struct mtip_cmd_hdr) * rq->tag); |
| - cmd->command_header_dma = dd->port->command_list_dma + |
| - (sizeof(struct mtip_cmd_hdr) * rq->tag); |
| - |
| - if (host_cap_64) |
| - cmd->command_header->ctbau = __force_bit2int cpu_to_le32((cmd->command_dma >> 16) >> 16); |
| - |
| - cmd->command_header->ctba = __force_bit2int cpu_to_le32(cmd->command_dma & 0xFFFFFFFF); |
| -} |
| - |
| static struct mtip_cmd *mtip_get_int_command(struct driver_data *dd) |
| { |
| struct request *rq; |
| @@ -199,9 +180,6 @@ static struct mtip_cmd *mtip_get_int_com |
| if (IS_ERR(rq)) |
| return NULL; |
| |
| - /* Internal cmd isn't submitted via .queue_rq */ |
| - mtip_init_cmd_header(rq); |
| - |
| return blk_mq_rq_to_pdu(rq); |
| } |
| |
| @@ -3833,8 +3811,6 @@ static int mtip_queue_rq(struct blk_mq_h |
| struct request *rq = bd->rq; |
| int ret; |
| |
| - mtip_init_cmd_header(rq); |
| - |
| if (unlikely(mtip_check_unal_depth(hctx, rq))) |
| return BLK_MQ_RQ_QUEUE_BUSY; |
| |
| @@ -3866,6 +3842,7 @@ static int mtip_init_cmd(void *data, str |
| { |
| struct driver_data *dd = data; |
| struct mtip_cmd *cmd = blk_mq_rq_to_pdu(rq); |
| + u32 host_cap_64 = readl(dd->mmio + HOST_CAP) & HOST_CAP_64; |
| |
| /* |
| * For flush requests, request_idx starts at the end of the |
| @@ -3882,6 +3859,17 @@ static int mtip_init_cmd(void *data, str |
| |
| memset(cmd->command, 0, CMD_DMA_ALLOC_SZ); |
| |
| + /* Point the command headers at the command tables. */ |
| + cmd->command_header = dd->port->command_list + |
| + (sizeof(struct mtip_cmd_hdr) * request_idx); |
| + cmd->command_header_dma = dd->port->command_list_dma + |
| + (sizeof(struct mtip_cmd_hdr) * request_idx); |
| + |
| + if (host_cap_64) |
| + cmd->command_header->ctbau = __force_bit2int cpu_to_le32((cmd->command_dma >> 16) >> 16); |
| + |
| + cmd->command_header->ctba = __force_bit2int cpu_to_le32(cmd->command_dma & 0xFFFFFFFF); |
| + |
| sg_init_table(cmd->sg, MTIP_MAX_SG); |
| return 0; |
| } |