Received: by 2002:a05:6358:4e97:b0:b3:742d:4702 with SMTP id ce23csp4950272rwb; Wed, 17 Aug 2022 08:32:57 -0700 (PDT) X-Google-Smtp-Source: AA6agR6wxVbjQStChJVS5UvcxYrRMc3X7SAkQu46werfMoZzPkNRTowyxow6LGf1Qtj3iz+8P/L4 X-Received: by 2002:a05:6a00:1c4b:b0:52e:6c05:8f1f with SMTP id s11-20020a056a001c4b00b0052e6c058f1fmr26545402pfw.7.1660750377041; Wed, 17 Aug 2022 08:32:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660750377; cv=none; d=google.com; s=arc-20160816; b=CREuRBEyJVyS51bckYDjH3H637NOIZFfzufRFxnzNN+JDPBftU6wENBKaunILXqY6o VdcWQVTuTdP+XrZKUNgQLDoLI15dAiecOM3K8XSwiofBKt1OHFn/fpNCrkztD1E47XbV /gIh8npHvLLW6DIPPmNsQ+Oa0sJpwsZZVoy9htCqQi5ahfDTgoH9eqJ4U5m0tZ1LQCSa mvtQ6iR9snUFCbqIEgZSn2v82PcE0mGOcKR+b2SmnEWnhApD4JPm8PT5lSznmQQrMI5z UHtv393hVDGPfhYEWtQOmvMAorjFOpqdL4Oga+HTTZrYDcDP5n0gTg+8XyLz25qopXcj aZCw== 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=WOAUNok/SJhm+DELBCqQ3oS5KuNRNoaCtqX3E+WYMQU=; b=Ah126b/oMhwPRT8G12+fLVR5AFtlJjfaPuSlnrPe+ATDyoJSs0ZqxRxbMnIuO3R6UV c0lKfwAxh6Yd7IRCwoR06kntfXp5qidWdgjKVXcqhgOOBMIodesBlWWqH6e4zRXwVPoi xIbV93kevJlzj+1gxDi6wlctFd6L0eSm0FTJsqd7NwXjJBu32N1+NIw9dllUP5uu1Y0C 22vduyoM1Sr43zdfZK88jXztDz3mUkW670dSGuDHzadibVk7VCTZT9P7E7/eN6IDIARC j7CBbnAYFQJe3ZAoI7EV2Np7Adr9XeuLyR6e99PVc9dMGaBprdxs/Bcea7Q/bYD5aAiU 85YA== 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 a1-20020a17090a688100b001f73769ac63si1815375pjd.126.2022.08.17.08.32.45; Wed, 17 Aug 2022 08:32:57 -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 S240405AbiHQO6u (ORCPT + 99 others); Wed, 17 Aug 2022 10:58:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46142 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240057AbiHQO6l (ORCPT ); Wed, 17 Aug 2022 10:58:41 -0400 Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 224D845060; Wed, 17 Aug 2022 07:58:40 -0700 (PDT) Received: from fraeml703-chm.china.huawei.com (unknown [172.18.147.207]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4M79y022B0z67MfB; Wed, 17 Aug 2022 22:53:44 +0800 (CST) Received: from lhrpeml500003.china.huawei.com (7.191.162.67) by fraeml703-chm.china.huawei.com (10.206.15.52) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2375.24; Wed, 17 Aug 2022 16:58:38 +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.24; Wed, 17 Aug 2022 15:58:35 +0100 From: John Garry To: , , , , CC: , , , , John Garry Subject: [PATCH v2 2/6] scsi: libsas: Add sas_ata_device_link_abort() Date: Wed, 17 Aug 2022 22:52:10 +0800 Message-ID: <1660747934-60059-3-git-send-email-john.garry@huawei.com> X-Mailer: git-send-email 2.8.1 In-Reply-To: <1660747934-60059-1-git-send-email-john.garry@huawei.com> References: <1660747934-60059-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: dggems702-chm.china.huawei.com (10.3.19.179) 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: The ATA_EH_RESET flag is set for following reasons: - For hisi_sas, SATA device resources during error handling will only be released during reset for ATA EH. ATA EH could decide during autopsy that EH would not be required, so ensure that it happens (by setting the flag). - Similar to hisi_sas, pm8001 NCQ error handling requires a hardreset to ensure necessary recovery commands are sent (so again we require flag ATA_EH_RESET to be set as an insurance policy). Suggested-by: Damien Le Moal Signed-off-by: John Garry --- drivers/scsi/libsas/sas_ata.c | 11 +++++++++++ include/scsi/sas_ata.h | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c index d35c9296f738..9daae64be37e 100644 --- a/drivers/scsi/libsas/sas_ata.c +++ b/drivers/scsi/libsas/sas_ata.c @@ -861,6 +861,17 @@ void sas_ata_wait_eh(struct domain_device *dev) ata_port_wait_eh(ap); } +void sas_ata_device_link_abort(struct domain_device *device) +{ + struct ata_port *ap = device->sata_dev.ap; + struct ata_link *link = &ap->link; + + link->eh_info.err_mask |= AC_ERR_DEV; + 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..cad0b33064a5 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); 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,10 @@ static inline void sas_ata_end_eh(struct ata_port *ap) { } +static inline void sas_ata_device_link_abort(struct domain_device *dev) +{ +} + static inline int sas_execute_ata_cmd(struct domain_device *device, u8 *fis, int force_phy_id) { -- 2.35.3