]> git.proxmox.com Git - mirror_ubuntu-disco-kernel.git/commit
scsi: hisi_sas: Issue internal abort on all relevant queues
authorJohn Garry <john.garry@huawei.com>
Wed, 6 Feb 2019 10:52:54 +0000 (18:52 +0800)
committerSeth Forshee <seth.forshee@canonical.com>
Mon, 1 Apr 2019 19:08:06 +0000 (14:08 -0500)
commit4ef6d04bc56d109dc9276fa84fae6621ed1af0c8
tree1187d9afba666f89da51cbf1ae889fd0f0dfe071
parent285b4fa945fb380d0afe51b29385b0aaa74b5f50
scsi: hisi_sas: Issue internal abort on all relevant queues

BugLink: https://bugs.launchpad.net/bugs/1822385
To support queue mapped to a CPU, it needs to be ensured that issuing an
internal abort is safe, in that it is guaranteed that an internal abort is
processed for a single IO or a device after all the relevant command(s)
which it is attempting to abort have been processed by the controller.

Currently we only deliver commands for any device on a single queue to
solve this problem, as we know that commands issued on the same queue will
be processed in order, and we will not have a scenario where the internal
abort is racing against a command(s) which it is trying to abort.

To enqueue commands on queue mapped to a CPU, choosing a queue for an
command is based on the associated queue for the current CPU, so this is
not safe for internal abort since it would definitely not be guaranteed
that commands for the command devices are issued on the same queue.

To solve this issue, we take a bludgeoning approach, and issue a separate
internal abort on any queue(s) relevant to the command or device, in that
we will be guaranteed that at least one of these internal aborts will be
received last in the controller.

So, for aborting a single command, we can just force the internal abort to
be issued on the same queue as the command which we are trying to abort.

For aborting all commands associated with a device, we issue a separate
internal abort on all relevant queues. Issuing multiple internal aborts in
this fashion would have not side affect.

Signed-off-by: John Garry <john.garry@huawei.com>
Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
(cherry picked from commit 795f25a31b542df93bff892ce46390f9befa2135)
Signed-off-by: dann frazier <dann.frazier@canonical.com>
Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
drivers/scsi/hisi_sas/hisi_sas.h
drivers/scsi/hisi_sas/hisi_sas_main.c
drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
drivers/scsi/hisi_sas/hisi_sas_v2_hw.c
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c