Received: by 2002:a05:6358:bb9e:b0:b9:5105:a5b4 with SMTP id df30csp4598865rwb; Tue, 6 Sep 2022 09:39:32 -0700 (PDT) X-Google-Smtp-Source: AA6agR6NzBJPC/wdTqJaNZe+ZxK6lsFKsin2CeYFQwk8LwJg/ao2Hhr20OlB5aPhOmgARfgE9ArU X-Received: by 2002:a17:902:d355:b0:176:cd80:5b32 with SMTP id l21-20020a170902d35500b00176cd805b32mr4924885plk.68.1662482371745; Tue, 06 Sep 2022 09:39:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662482371; cv=none; d=google.com; s=arc-20160816; b=upHSpbMCJfb8lCueZ56BIl5dBwQJjNnQMyyJr20Q4TtSMK7kO2SLleKUixsp8YMyXl NEukuLVm582Cs67CcuEyDFloqGOfMHvDiqzIKIidVmtW5aRnTCJH17aQ0FihD/4GOziT eQEGDE2EL++pEpPWpCUsyNH/I/QXORPNHUtlIf8TTwI6L8Qqg4pREtM2EEXwiYPcw50k 2qoVTEwNfDsVjWTx/PNQPhVgLXCdrGt80Wwq464GV9qa7AoM9SxTFaOwWcouX+Y9jwtA Zwf1eKFv45S0uRC0LKbQMNzHhUJdEHp8he3y/dZSqOeZ8p8oEsmCy148cdWpBiRD81p2 +qwg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from; bh=PxrDQSzkPMVUsucqTDjqsQswrI9N2u1uVdSzMA1fPwU=; b=ryoAgVi0/k+VGCjMXD1mnbYa+mEgtOMe1XEMkTQ/GKxl81Nfsxqj7+4KWayLBUMFDD PEivf3uh5G8ZLUB279IJiUAtVBUGojmjMp+mWF2zl61dlhP8pdKCr/OHdC7+E+36+K69 v9EV2o0Rxhm79JyYBPvcLx+LpuVo/rpZ2YkmbN6ZxzmJeF8eAGpblfWkxZEBkvrFpqcb 1PFZC/o6RRJemsgUKKAPhmV+X21tirN9AyfuiUA9UBmtL71It8b4nxN5J+wCd5Q0L+zB GNvnwyADFhBonGIkEoIchQIyF0Vd61fbHqCIaXB8lu3aHjbkDgx8dl/kdb3YKNA+MxT5 elwA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d18-20020a056a0010d200b0052daa005a8asi13923137pfu.374.2022.09.06.09.39.19; Tue, 06 Sep 2022 09:39:31 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238336AbiIFP5e (ORCPT + 99 others); Tue, 6 Sep 2022 11:57:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52770 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233924AbiIFPzn (ORCPT ); Tue, 6 Sep 2022 11:55:43 -0400 Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 83A0A248F5; Tue, 6 Sep 2022 08:14:45 -0700 (PDT) Received: from fraeml735-chm.china.huawei.com (unknown [172.18.147.206]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4MMTNK32lmz67tG2; Tue, 6 Sep 2022 23:10:41 +0800 (CST) Received: from lhrpeml500003.china.huawei.com (7.191.162.67) by fraeml735-chm.china.huawei.com (10.206.15.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Tue, 6 Sep 2022 17:14:43 +0200 Received: from localhost.localdomain (10.69.192.58) by lhrpeml500003.china.huawei.com (7.191.162.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Tue, 6 Sep 2022 16:14:40 +0100 From: John Garry To: , , , CC: , , , , , John Garry Subject: [PATCH v3 2/6] scsi: libsas: Add sas_ata_device_link_abort() Date: Tue, 6 Sep 2022 23:08:06 +0800 Message-ID: <1662476890-15467-3-git-send-email-john.garry@huawei.com> X-Mailer: git-send-email 2.8.1 In-Reply-To: <1662476890-15467-1-git-send-email-john.garry@huawei.com> References: <1662476890-15467-1-git-send-email-john.garry@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.69.192.58] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To lhrpeml500003.china.huawei.com (7.191.162.67) X-CFilter-Loop: Reflected X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Similar to how AHCI handles NCQ errors in ahci_error_intr() -> ata_port_abort() -> ata_do_link_abort(), add an NCQ error handler for LLDDs to call to initiate a link abort. This will mark all outstanding QCs as failed and kick-off EH. Note: A "force reset" argument is added for drivers which require the ATA error handling to always reset the device. A driver may require this feature for when SATA device per-SCSI cmnd resources are only released during reset for ATA EH. As such, we need an option to force reset to be done, regardless of what any EH autopsy decides. Suggested-by: Damien Le Moal Signed-off-by: John Garry --- drivers/scsi/libsas/sas_ata.c | 12 ++++++++++++ include/scsi/sas_ata.h | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c index d35c9296f738..bdffb6852dcf 100644 --- a/drivers/scsi/libsas/sas_ata.c +++ b/drivers/scsi/libsas/sas_ata.c @@ -861,6 +861,18 @@ void sas_ata_wait_eh(struct domain_device *dev) ata_port_wait_eh(ap); } +void sas_ata_device_link_abort(struct domain_device *device, bool force_reset) +{ + struct ata_port *ap = device->sata_dev.ap; + struct ata_link *link = &ap->link; + + link->eh_info.err_mask |= AC_ERR_DEV; + if (force_reset) + link->eh_info.action |= ATA_EH_RESET; + ata_link_abort(link); +} +EXPORT_SYMBOL_GPL(sas_ata_device_link_abort); + int sas_execute_ata_cmd(struct domain_device *device, u8 *fis, int force_phy_id) { struct sas_tmf_task tmf_task = {}; diff --git a/include/scsi/sas_ata.h b/include/scsi/sas_ata.h index a1df4f9d57a3..e47f0aec0722 100644 --- a/include/scsi/sas_ata.h +++ b/include/scsi/sas_ata.h @@ -32,6 +32,7 @@ void sas_probe_sata(struct asd_sas_port *port); void sas_suspend_sata(struct asd_sas_port *port); void sas_resume_sata(struct asd_sas_port *port); void sas_ata_end_eh(struct ata_port *ap); +void sas_ata_device_link_abort(struct domain_device *dev, bool force_reset); int sas_execute_ata_cmd(struct domain_device *device, u8 *fis, int force_phy_id); int sas_ata_wait_after_reset(struct domain_device *dev, unsigned long deadline); @@ -87,6 +88,11 @@ static inline void sas_ata_end_eh(struct ata_port *ap) { } +static inline void sas_ata_device_link_abort(struct domain_device *dev, + bool force_reset) +{ +} + static inline int sas_execute_ata_cmd(struct domain_device *device, u8 *fis, int force_phy_id) { -- 2.35.3