Received: by 2002:a05:6358:51dd:b0:131:369:b2a3 with SMTP id 29csp530475rwl; Wed, 9 Aug 2023 19:37:34 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHVKJ1REVMd0xzWwsyCiNEjgv2xpYroR1Q1LexsRZFpZr9tqL6N4T2FK2+k/3PS90Z6xE8X X-Received: by 2002:a17:906:74c2:b0:98e:933:2909 with SMTP id z2-20020a17090674c200b0098e09332909mr894984ejl.22.1691635054282; Wed, 09 Aug 2023 19:37:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691635054; cv=none; d=google.com; s=arc-20160816; b=oTTyGSEI975Y90ippBOdmW5nRB6Gw484uvfv3Ti/4nscwLz+Memurm4fuCkD0G3goy Ocd2HeMGSeNaddFyezQUIiZpFzqd4UsM3TwhSHd7Jlf9K1uhDL/zGyMS/r8rCSCWFr7v ZA2amELsydkYn4cqvgWJjNbAktAxAD+HkkAcwrD+dJsNY0qDTPTdF5hO/TetdzzBdYkh RNTPV8yJ3oG6fyw8G1ngrsnWYRYrDQRM/EDZliOzLe1s6oI5lpxeVPrMon6+XNIkoVJV KW4/7otbalJi3t9gPG8V5/EHKEEnTxTUZhuVESHOs63nTx4CBB2eaU5+yFe8dSK0yo9k gh2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=LsIocgeDlYA2jrKROB1oyj6aUHUotFPgEbdn/rOBTbY=; fh=pLOcfv8kc8ppFXcSkyxQnoWVLaZdSA3wvZNMTcE1Ru4=; b=IQoqT5gpsetFc0pVanO6QU+xkPN3dxUzlcP/dTo8d1x/ZjsSKEplfxRa90BIL2/SE/ PmTqdgl3xxASTdyTDwtFRafnrLorVi8Jvpv1D/8CY6osGiAfc7xWXIb0CG180jjXOTca avTZJwSsRlQwd8o9ePqsik0sBgxBFgEu4B8JXSoigEAfSY2eRPJIbQl2lA33B9fvRNpn yOyyaWv3oyRn2Jca2EeuSdnN8O5TgGaxQgvuBsbA15uM8gyghhExqZhH9ewEGRXBFfxr /DGaOe+Ct1TuC6/s/sv7YxKIlwqOn85UQVp5nTJWVKAU2ZQSQ+7GWXJmoQ3rhqJ1hH71 KE+g== 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 Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id qt27-20020a170906ecfb00b0099bcadfde72si525622ejb.364.2023.08.09.19.37.10; Wed, 09 Aug 2023 19:37:34 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232088AbjHJBwP (ORCPT + 99 others); Wed, 9 Aug 2023 21:52:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39122 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230320AbjHJBwO (ORCPT ); Wed, 9 Aug 2023 21:52:14 -0400 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EC51210DA; Wed, 9 Aug 2023 18:52:12 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4RLqfw0sCLz4f3lVW; Thu, 10 Aug 2023 09:52:08 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.104.67]) by APP4 (Coremail) with SMTP id gCh0CgBH1qjHQtRk55ljAQ--.40856S4; Thu, 10 Aug 2023 09:52:09 +0800 (CST) From: linan666@huaweicloud.com To: dlemoal@kernel.org Cc: linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, linan122@huawei.com, yukuai3@huawei.com, yi.zhang@huawei.com, houtao1@huawei.com, yangerkun@huawei.com Subject: [PATCH] scsi: ata: Fix a race condition between scsi error handler and ahci interrupt Date: Thu, 10 Aug 2023 09:48:48 +0800 Message-Id: <20230810014848.2148316-1-linan666@huaweicloud.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID: gCh0CgBH1qjHQtRk55ljAQ--.40856S4 X-Coremail-Antispam: 1UD129KBjvJXoW7CF4kJF48uw4ktw43JF4Dtwb_yoW8CryDpF Z8ur9FgryDKFy2vanxZa13Za43GFW8AFyjgFyUJ34SqFZ8tFyrKrZ2y3909FyjkryUGry2 qw4qgr18Cr48J3DanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUkCb4IE77IF4wAFF20E14v26r4j6ryUM7CY07I20VC2zVCF04k2 6cxKx2IYs7xG6rWj6s0DM7CIcVAFz4kK6r1j6r18M28lY4IEw2IIxxk0rwA2F7IY1VAKz4 vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7Cj xVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x 0267AKxVW0oVCq3wAac4AC62xK8xCEY4vEwIxC4wAS0I0E0xvYzxvE52x082IY62kv0487 Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aV AFwI0_Jr0_Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JM4kE6xkIj40E w7xC0wCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14 v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkG c2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI 0_Jr0_Gr1lIxAIcVCF04k26cxKx2IYs7xG6rW3Jr0E3s1lIxAIcVC2z280aVAFwI0_Jr0_ Gr1lIxAIcVC2z280aVCY1x0267AKxVWUJVW8JbIYCTnIWIevJa73UjIFyTuYvjxUwc_TUU UUU X-CM-SenderInfo: polqt0awwwqx5xdzvxpfor3voofrz/ X-CFilter-Loop: Reflected X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE 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 From: Li Nan interrupt scsi_eh ahci_error_intr =>ata_port_freeze =>__ata_port_freeze =>ahci_freeze (turn IRQ off) =>ata_port_abort =>ata_port_schedule_eh =>shost->host_eh_scheduled++; host_eh_scheduled = 1 scsi_error_handler =>ata_scsi_error =>ata_scsi_port_error_handler =>ahci_error_handler . =>sata_pmp_error_handler . =>ata_eh_thaw_port . =>ahci_thaw (turn IRQ on) ahci_error_intr . =>ata_port_freeze . =>__ata_port_freeze . =>ahci_freeze (turn IRQ off) . =>ata_port_abort . =>ata_port_schedule_eh . =>shost->host_eh_scheduled++; . host_eh_scheduled = 2 . =>ata_std_end_eh =>host->host_eh_scheduled = 0; 'host_eh_scheduled' is 0 and scsi eh thread will not be scheduled again, and the ata port remain freeze and will never be enabled. If EH thread is already running, no need to freeze port and schedule EH again. Reported-by: luojian Signed-off-by: Li Nan --- drivers/ata/libahci.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index e2bacedf28ef..0dfb0b807324 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -1840,9 +1840,17 @@ static void ahci_error_intr(struct ata_port *ap, u32 irq_stat) /* okay, let's hand over to EH */ - if (irq_stat & PORT_IRQ_FREEZE) + if (irq_stat & PORT_IRQ_FREEZE) { + /* + * EH already running, this may happen if the port is + * thawed in the EH. But we cannot freeze it again + * otherwise the port will never be thawed. + */ + if (ap->pflags & (ATA_PFLAG_EH_PENDING | + ATA_PFLAG_EH_IN_PROGRESS)) + return; ata_port_freeze(ap); - else if (fbs_need_dec) { + } else if (fbs_need_dec) { ata_link_abort(link); ahci_fbs_dec_intr(ap); } else -- 2.39.2