From patchwork Fri Apr 28 13:21:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Niklas Cassel X-Patchwork-Id: 13226465 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 691F6C77B61 for ; Fri, 28 Apr 2023 13:30:11 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1psOAU-0007ep-RR; Fri, 28 Apr 2023 09:29:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1psO3B-0005jh-D9; Fri, 28 Apr 2023 09:22:13 -0400 Received: from mail-lj1-x22c.google.com ([2a00:1450:4864:20::22c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1psO39-0001Na-Rf; Fri, 28 Apr 2023 09:22:13 -0400 Received: by mail-lj1-x22c.google.com with SMTP id 38308e7fff4ca-2a8ba5f1d6bso96553601fa.2; Fri, 28 Apr 2023 06:22:10 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682688129; x=1685280129; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=0LMSALsuI5bpfnW+C12t8ZnQABPa8cDalQLfhJ2Oa3w=; b=DfLQaM6e2wQgIEtfLG73ZVKEx+ONU1lex9LfBJKttx2KE4Ap6W7nw2D7hcr0VSdf7B VtqLxUzr/EXAjWrgCtL0nuoSHqX5igX5GfMpjrBP/Pjf9FpGuZG/m7NbBgOrdbkybTJs JzweSzu2J3Pbwog1QpaN/V1SgGKXc5SQ5uwXt2W9RKTzwM45YKHK0kpbwErNs1USitMG 2s4nlmz8vLZ2QcaTxnLF0Os1gz09arIOqvVhhibC4K7l36Z1Whika5v7Y2XgKfaXGK93 SB7jnkceFzHfdiVwN0o6aST+HxsOOHWxDNmGJBM/yaGDSXVr9GQgon7pfjs7+8Cun38D D0LQ== X-Gm-Message-State: AC+VfDwaJ42B2sMY6Lg7oJBZKVYLwlIKD6eZdZ+jusxQNB/mRCZcxzGq ghT19cUipFp+UCbBzWVTTGPwr1E154iDxirf X-Google-Smtp-Source: ACHHUZ4io+UPwW/mmnKq+A4fzA6ePjt8OMev9ZGjQyCGcxL6DodPNta76hvbJAiuYoUELbaMpRtSmA== X-Received: by 2002:a2e:6e11:0:b0:2ab:42c7:cf25 with SMTP id j17-20020a2e6e11000000b002ab42c7cf25mr1250576ljc.13.1682688129474; Fri, 28 Apr 2023 06:22:09 -0700 (PDT) Received: from flawful.org (c-fcf6e255.011-101-6d6c6d3.bbcust.telenor.se. [85.226.246.252]) by smtp.gmail.com with ESMTPSA id y19-20020a2e9793000000b002a7774d124dsm3360770lji.14.2023.04.28.06.22.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 06:22:09 -0700 (PDT) Received: by flawful.org (Postfix, from userid 112) id E5C34D18; Fri, 28 Apr 2023 15:22:06 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=flawful.org; s=mail; t=1682688127; bh=fq5iRvvH0/BVYfWhjkzjKQ5RAk9CZObd1FKucUM3yTA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=T56zdMOJymZBdEhK4nh/pScoKxaIGInDKLUnvsYCFBUTdDeuMQGR9oYJD1vpc31ks Y12sgNeMeQzlkcFNqYdOVcccXPuK5TQUAJ5F26eZXeSBDD19d1sjn9kXONaEHYyGea rKBh0+pG3ttEsBdGM7QOh9PxkCEa4hOFI8tTuz7A= Received: from x1-carbon.lan (OpenWrt.lan [192.168.1.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by flawful.org (Postfix) with ESMTPSA id EC6063C7; Fri, 28 Apr 2023 15:21:39 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=flawful.org; s=mail; t=1682688100; bh=fq5iRvvH0/BVYfWhjkzjKQ5RAk9CZObd1FKucUM3yTA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qF3t+YpeGdVcA0akiSnd4XBPH1KC/LXpL8dKZLQjpEr7SvobO47cs1zwTZk527/kb Yrr5xae8kbmVpy4Mj2l3LzrUfhiE5JqKLXLHLW9xymEQf3O7ucpY+iSn4+5LioGfSF B48g2gvJbZK9snNz9b30GqVYDfgP+4496Lm4AnS4= From: Niklas Cassel To: John Snow Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org, Damien Le Moal , Niklas Cassel Subject: [PATCH 1/9] hw/ide/ahci: remove stray backslash Date: Fri, 28 Apr 2023 15:21:16 +0200 Message-Id: <20230428132124.670840-2-nks@flawful.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230428132124.670840-1-nks@flawful.org> References: <20230428132124.670840-1-nks@flawful.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::22c; envelope-from=nks.gnu@gmail.com; helo=mail-lj1-x22c.google.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.249, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.25, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 28 Apr 2023 09:29:45 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Niklas Cassel This backslash obviously does not belong here, so remove it. Signed-off-by: Niklas Cassel Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: John Snow --- hw/ide/ahci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index 55902e1df7..a36e3fb77c 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -690,7 +690,7 @@ static void ahci_reset_port(AHCIState *s, int port) s->dev[port].port_state = STATE_RUN; if (ide_state->drive_kind == IDE_CD) { - ahci_set_signature(d, SATA_SIGNATURE_CDROM);\ + ahci_set_signature(d, SATA_SIGNATURE_CDROM); ide_state->status = SEEK_STAT | WRERR_STAT | READY_STAT; } else { ahci_set_signature(d, SATA_SIGNATURE_DISK); From patchwork Fri Apr 28 13:21:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Cassel X-Patchwork-Id: 13226466 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B956BC77B60 for ; Fri, 28 Apr 2023 13:31:00 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1psOAU-0007eq-Rq; Fri, 28 Apr 2023 09:29:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1psO3V-0005lT-0U; Fri, 28 Apr 2023 09:22:33 -0400 Received: from mail-lf1-x12f.google.com ([2a00:1450:4864:20::12f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1psO3O-0001PI-Vc; Fri, 28 Apr 2023 09:22:32 -0400 Received: by mail-lf1-x12f.google.com with SMTP id 2adb3069b0e04-4efeea05936so7428750e87.2; Fri, 28 Apr 2023 06:22:25 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682688145; x=1685280145; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=F4EY0O0oa8k88AuVKaWqWwsIqUJLbqGm0itSJu7tu5Q=; b=MyXCqxlfrJxE4eb0PlSgdyN7P0L5K/reca3chv+bZM9mP0jJbmnYzzcf+cQH114KVJ IM6uAmgSM2lmttAnv4J0rvtPqK/iUvy3P7b2M3rd9Mo39EI9rfw/XcFLDakd9wNCSqlo 0bic6tYyckBOC1qYBQjz1CwLJt4iISgZIQjEMO4HRXCA+ZTIaw2tlGS+XYQBI7ZL7XHf 1OPTkbS3xtMzqp/SsSq2aySUqGk7jRK0/PJKeoAv/qc7OVDztsvuAsqjsBAIlPsQodcw 6OMY6uJssT2EaRCbDaLtAeAFjGrA9i6nlh4zMI/cfmelaMiACbYAzW/a2k18n+ecyi7X 78pQ== X-Gm-Message-State: AC+VfDze+fLTPKfMkOnMAbgXa1bjRwVI5PIj1Uwr+QKrNX8OHAQM/1Xb UOU3MfR9ORmsHwFfO738atObux2zsEm3mf35 X-Google-Smtp-Source: ACHHUZ5NY180f0Oz2ocp1WHcQdShGzBom21abVQJ/RGp3kTuFZQe2aVemLj0ES9DYZ5L4woAdy8seQ== X-Received: by 2002:a19:ae0b:0:b0:4e9:5f90:748 with SMTP id f11-20020a19ae0b000000b004e95f900748mr1426131lfc.9.1682688144794; Fri, 28 Apr 2023 06:22:24 -0700 (PDT) Received: from flawful.org (c-fcf6e255.011-101-6d6c6d3.bbcust.telenor.se. [85.226.246.252]) by smtp.gmail.com with ESMTPSA id q17-20020ac25111000000b004eee27b293bsm3098977lfb.298.2023.04.28.06.22.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 06:22:24 -0700 (PDT) Received: by flawful.org (Postfix, from userid 112) id 11DD7294; Fri, 28 Apr 2023 15:22:22 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=flawful.org; s=mail; t=1682688143; bh=WQPlhahImxeAS0sOG+vVOx/lailpX79NBIEsbjNCgyk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VDaLXULEJjMO5RvtkZLDylNTer3PYFwyb9q1FsLfNRm4kJQRIz7m0Pwwu+sf8QAUb QDLs95le3G/fH/P29BKUNPI/6MCgjzXMJ4hz0SBRIAkTe8ftxbAbhJ1s0JKfL0J9eJ OD4yqD5V0yPJOEIYu+6ddukTAiKoC7ghdxEiRbOY= Received: from x1-carbon.lan (OpenWrt.lan [192.168.1.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by flawful.org (Postfix) with ESMTPSA id 3E268406; Fri, 28 Apr 2023 15:21:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=flawful.org; s=mail; t=1682688100; bh=WQPlhahImxeAS0sOG+vVOx/lailpX79NBIEsbjNCgyk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ACT49JV47+zq3zkYaLERrMpTvZjLS9HwdVqq0nAHWuAseBp5Ldw56cNNfvBY3Ck5h YpcpZyiexk/AXDy524vuykV7EobITGrldS6upI0obiwiS9azLT0xYkihAtX/P7FMBg QjZCWmJe6Z8AYoCZwV4kWHZuMyAyJPzF+GQw/iNs= From: Niklas Cassel To: John Snow Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org, Damien Le Moal , Niklas Cassel Subject: [PATCH 2/9] hw/ide/core: set ERR_STAT in unsupported command completion Date: Fri, 28 Apr 2023 15:21:17 +0200 Message-Id: <20230428132124.670840-3-nks@flawful.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230428132124.670840-1-nks@flawful.org> References: <20230428132124.670840-1-nks@flawful.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::12f; envelope-from=nks.gnu@gmail.com; helo=mail-lf1-x12f.google.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.249, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.25, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 28 Apr 2023 09:29:45 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Niklas Cassel Currently, the first time sending an unsupported command (e.g. READ LOG DMA EXT) will not have ERR_STAT set in the completion. Sending the unsupported command again, will correctly have ERR_STAT set. When ide_cmd_permitted() returns false, it calls ide_abort_command(). ide_abort_command() first calls ide_transfer_stop(), which will call ide_transfer_halt() and ide_cmd_done(), after that ide_abort_command() sets ERR_STAT in status. ide_cmd_done() for AHCI will call ahci_write_fis_d2h() which writes the current status in the FIS, and raises an IRQ. (The status here will not have ERR_STAT set!). Thus, we cannot call ide_transfer_stop() before setting ERR_STAT, as ide_transfer_stop() will result in the FIS being written and an IRQ being raised. The reason why it works the second time, is that ERR_STAT will still be set from the previous command, so when writing the FIS, the completion will correctly have ERR_STAT set. Set ERR_STAT before writing the FIS (calling cmd_done), so that we will raise an error IRQ correctly when receiving an unsupported command. Signed-off-by: Niklas Cassel --- hw/ide/core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/ide/core.c b/hw/ide/core.c index 45d14a25e9..c144d1155d 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -531,9 +531,9 @@ BlockAIOCB *ide_issue_trim( void ide_abort_command(IDEState *s) { - ide_transfer_stop(s); s->status = READY_STAT | ERR_STAT; s->error = ABRT_ERR; + ide_transfer_stop(s); } static void ide_set_retry(IDEState *s) From patchwork Fri Apr 28 13:21:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Cassel X-Patchwork-Id: 13226469 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9993FC77B60 for ; Fri, 28 Apr 2023 13:31:52 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1psOAX-0007ie-QI; Fri, 28 Apr 2023 09:29:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1psO3W-0005lw-M6; Fri, 28 Apr 2023 09:22:34 -0400 Received: from mail-lf1-x132.google.com ([2a00:1450:4864:20::132]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1psO3S-0001PZ-AW; Fri, 28 Apr 2023 09:22:34 -0400 Received: by mail-lf1-x132.google.com with SMTP id 2adb3069b0e04-4f00c33c3d6so2860044e87.2; Fri, 28 Apr 2023 06:22:29 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682688148; x=1685280148; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=l05U5W9Tm+jHrL6XZgkveA7W49bnEgJk8Kw8YLegKL8=; b=Kll4YSdr4BbuRSMe1TXc9Zz+Fh/jEHCbcOIBg43aBrAF1E0MZlG5zHPccm63O/hrz6 879JlGPvDzhCmIQQjk5sdmRlEf2YuRdEwH2KyVB90UVBgSv9s+zVLpyotDrM3v8Eca2x KY5Ev3gpWNPC3hHM4tpPS5urmRrFuAiKYxTGOLNSALKNUJmzQ0L6fZqeB5cmzR6TAfSe RRevtSfsMiAiYS6t2VhAKzYQbNVrrllis3vUyVrh1lGP/yq5zrXhaAJq1W3u2+TvrYa7 E6/2bsO1si5r4VmjKrYtEXkODAaQDkekkSA3ymoeB8yerJbE8+CU1od72YC7AZ88xwxC iiWA== X-Gm-Message-State: AC+VfDzmIU/IbQsefE3MdhcbK27+7DYzcgGrevllZrx5pfpgpc5pIlQm 1Mam+vSwPfY8RinIkxAIrlI2DlIzzqqzaY0b X-Google-Smtp-Source: ACHHUZ6Vdp1OzOLAtj3kafwiKuSrJlK3nxsAkz5786+lr4h8O5Ol4Ea+EnOTFBnOMWzHnJnL2Zelvw== X-Received: by 2002:ac2:4949:0:b0:4e8:3ea0:cf37 with SMTP id o9-20020ac24949000000b004e83ea0cf37mr1495102lfi.34.1682688148142; Fri, 28 Apr 2023 06:22:28 -0700 (PDT) Received: from flawful.org (c-fcf6e255.011-101-6d6c6d3.bbcust.telenor.se. [85.226.246.252]) by smtp.gmail.com with ESMTPSA id d14-20020ac2544e000000b004eb3b6da6f5sm3311569lfn.228.2023.04.28.06.22.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 06:22:27 -0700 (PDT) Received: by flawful.org (Postfix, from userid 112) id 038E13C7; Fri, 28 Apr 2023 15:22:26 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=flawful.org; s=mail; t=1682688147; bh=ibmXy2CRcdpLeifq7jq45M/Hnw3e1B/SSAwPsJ6Nnzs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aBFlC4gcnD64zKdZAKCjkDqyOf1CTU5qz/D2XhY/d2KcF/Na90eteAgwORYJlVc5D 1Sfl6PBUZx6E5inKVuJWEzpcvI47IDFANbyfRcP368EdzxyVDTb7ha+yQ2Mursp/OL 00TJ6CXjnrtIunlKqpZjJmc9gvr8RlfSBkkxasj4= Received: from x1-carbon.lan (OpenWrt.lan [192.168.1.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by flawful.org (Postfix) with ESMTPSA id 890164EB; Fri, 28 Apr 2023 15:21:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=flawful.org; s=mail; t=1682688100; bh=ibmXy2CRcdpLeifq7jq45M/Hnw3e1B/SSAwPsJ6Nnzs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pjU3a4yFYTLpyLE46XaRN2H1isrYosnQWAkTKvoUmX1Mz8KmIIfzoiDgbOQnv4Lo3 iqcyFMF6Ek/TFanJwQ9nMHRGPPAEIM0DFxyadysPR2/a4UTR1lB0vZ7HjOeRAyVMnL kZ8KtR2jCdWg8n0zgMksoKM+3sabrEEoQHsfyWQ8= From: Niklas Cassel To: John Snow Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org, Damien Le Moal , Niklas Cassel Subject: [PATCH 3/9] hw/ide/ahci: write D2H FIS on when processing NCQ command Date: Fri, 28 Apr 2023 15:21:18 +0200 Message-Id: <20230428132124.670840-4-nks@flawful.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230428132124.670840-1-nks@flawful.org> References: <20230428132124.670840-1-nks@flawful.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::132; envelope-from=nks.gnu@gmail.com; helo=mail-lf1-x132.google.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.249, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.25, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 28 Apr 2023 09:29:45 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Niklas Cassel The way that BUSY + PxCI is cleared for NCQ (FPDMA QUEUED) commands is described in SATA 3.5a Gold: 11.15 FPDMA QUEUED command protocol DFPDMAQ2: ClearInterfaceBsy "Transmit Register Device to Host FIS with the BSY bit cleared to zero and the DRQ bit cleared to zero and Interrupt bit cleared to zero to mark interface ready for the next command." PxCI is currently cleared by handle_cmd(), but we don't write the D2H FIS to the FIS Receive Area that actually caused PxCI to be cleared. Similar to how ahci_pio_transfer() calls ahci_write_fis_pio() with an additional parameter to write a PIO Setup FIS without raising an IRQ, add a parameter to ahci_write_fis_d2h() so that ahci_write_fis_d2h() also can write the FIS to the FIS Receive Area without raising an IRQ. Change process_ncq_command() to call ahci_write_fis_d2h() without raising an IRQ (similar to ahci_pio_transfer()), such that the FIS Receive Area is in sync with the PxTFD shadow register. E.g. Linux reads status and error fields from the FIS Receive Area directly, so it is wise to keep the FIS Receive Area and the PxTFD shadow register in sync. Signed-off-by: Niklas Cassel --- hw/ide/ahci.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index a36e3fb77c..62aebc8de7 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -43,7 +43,7 @@ static void check_cmd(AHCIState *s, int port); static int handle_cmd(AHCIState *s, int port, uint8_t slot); static void ahci_reset_port(AHCIState *s, int port); -static bool ahci_write_fis_d2h(AHCIDevice *ad); +static bool ahci_write_fis_d2h(AHCIDevice *ad, bool d2h_fis_i); static void ahci_init_d2h(AHCIDevice *ad); static int ahci_dma_prepare_buf(const IDEDMA *dma, int32_t limit); static bool ahci_map_clb_address(AHCIDevice *ad); @@ -618,7 +618,7 @@ static void ahci_init_d2h(AHCIDevice *ad) return; } - if (ahci_write_fis_d2h(ad)) { + if (ahci_write_fis_d2h(ad, true)) { ad->init_d2h_sent = true; /* We're emulating receiving the first Reg H2D Fis from the device; * Update the SIG register, but otherwise proceed as normal. */ @@ -850,7 +850,7 @@ static void ahci_write_fis_pio(AHCIDevice *ad, uint16_t len, bool pio_fis_i) } } -static bool ahci_write_fis_d2h(AHCIDevice *ad) +static bool ahci_write_fis_d2h(AHCIDevice *ad, bool d2h_fis_i) { AHCIPortRegs *pr = &ad->port_regs; uint8_t *d2h_fis; @@ -864,7 +864,7 @@ static bool ahci_write_fis_d2h(AHCIDevice *ad) d2h_fis = &ad->res_fis[RES_FIS_RFIS]; d2h_fis[0] = SATA_FIS_TYPE_REGISTER_D2H; - d2h_fis[1] = (1 << 6); /* interrupt bit */ + d2h_fis[1] = d2h_fis_i ? (1 << 6) : 0; /* interrupt bit */ d2h_fis[2] = s->status; d2h_fis[3] = s->error; @@ -890,7 +890,10 @@ static bool ahci_write_fis_d2h(AHCIDevice *ad) ahci_trigger_irq(ad->hba, ad, AHCI_PORT_IRQ_BIT_TFES); } - ahci_trigger_irq(ad->hba, ad, AHCI_PORT_IRQ_BIT_DHRS); + if (d2h_fis_i) { + ahci_trigger_irq(ad->hba, ad, AHCI_PORT_IRQ_BIT_DHRS); + } + return true; } @@ -1120,6 +1123,8 @@ static void process_ncq_command(AHCIState *s, int port, const uint8_t *cmd_fis, return; } + ahci_write_fis_d2h(ad, false); + ncq_tfs->used = 1; ncq_tfs->drive = ad; ncq_tfs->slot = slot; @@ -1506,7 +1511,7 @@ static void ahci_cmd_done(const IDEDMA *dma) } /* update d2h status */ - ahci_write_fis_d2h(ad); + ahci_write_fis_d2h(ad, true); if (ad->port_regs.cmd_issue && !ad->check_bh) { ad->check_bh = qemu_bh_new(ahci_check_cmd_bh, ad); From patchwork Fri Apr 28 13:21:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Cassel X-Patchwork-Id: 13226472 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9056CC77B7C for ; Fri, 28 Apr 2023 13:32:58 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1psOAV-0007fn-S7; Fri, 28 Apr 2023 09:29:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1psO48-0005qq-OU; Fri, 28 Apr 2023 09:23:12 -0400 Received: from mail-lj1-x22f.google.com ([2a00:1450:4864:20::22f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1psO3u-0001TX-Ul; Fri, 28 Apr 2023 09:23:11 -0400 Received: by mail-lj1-x22f.google.com with SMTP id 38308e7fff4ca-2a7b02615f1so98893361fa.0; Fri, 28 Apr 2023 06:22:57 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682688176; x=1685280176; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=KJD1V7i436h9yGLmIWbVzpqCrGh7Zxck5YSMRn4W/qE=; b=ZZTETI50kcLI9ZO72Mpni4uv6+TQbG7wnFtzy4z1RwC86NwR1OqPncXFLWuXCXUZAy tCsM8dZfxu10sdro6kT2vDHJm6CuseI/WXukDyyqDbDavFSltG2jFJo6P1R4bo4kT0GQ 8JkXXuZjGz6ZvC5n3Tebb4FPwsjnvIQEj8+0vOiZBnjPDw9wiyDElt03xPYyNKmJZkKY KeS/TwwB//UUKyU3p7Q2uWnnrnB4dDn4BQBlzkNwdgwY0TtSr8NJlpI6uXmCzEU2C18d pWEcSDTVu3Cen1RvFTY0iW24hrwcYYInhaj5xhk75oxQGFwVqMtiqrDBv5PQNsgaNWUa owDQ== X-Gm-Message-State: AC+VfDx9rsBd4QddWfTCxDybqIEW38jqZcWLsG9MWd39Apfl5cEfNxV4 Pmh5785Df6Oa2GZ2eIkD/jcSn8JAJpZLfF41 X-Google-Smtp-Source: ACHHUZ577s3afHX5CsDJ5G0PClVYnc6dOgo2OHw6svAwV/hc7n9zrKcgS+loC0fFULUZXYMKiilSzg== X-Received: by 2002:a2e:7012:0:b0:2a7:8582:f4f2 with SMTP id l18-20020a2e7012000000b002a78582f4f2mr1515486ljc.32.1682688176434; Fri, 28 Apr 2023 06:22:56 -0700 (PDT) Received: from flawful.org (c-fcf6e255.011-101-6d6c6d3.bbcust.telenor.se. [85.226.246.252]) by smtp.gmail.com with ESMTPSA id t9-20020a2e9d09000000b002ab47797b0dsm314825lji.24.2023.04.28.06.22.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 06:22:56 -0700 (PDT) Received: by flawful.org (Postfix, from userid 112) id 27B71D0E; Fri, 28 Apr 2023 15:22:54 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=flawful.org; s=mail; t=1682688175; bh=MV1kmNa1P8TzGRcCsM7A6Dc4nvolupC33RySukJZcOE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SU8LcMQTusqI/gNaWA+SLjy+lR63aGLYo/fKFJj/Igzju+C2Iupdf3RFMkwrRVe2R HNHUBijrep6D2Wr+C+7f2v65OhPnuUV+w5oL1YYHY7U2yv4tW57BbRZx23JkELTdd8 rZnn4wBLtsmvXYjXNjRYpnvPPBiWOVE8N/jOJT0I= Received: from x1-carbon.lan (OpenWrt.lan [192.168.1.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by flawful.org (Postfix) with ESMTPSA id C69AE50A; Fri, 28 Apr 2023 15:21:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=flawful.org; s=mail; t=1682688100; bh=MV1kmNa1P8TzGRcCsM7A6Dc4nvolupC33RySukJZcOE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=u16tQSvLyPSEmfEsezpQYszpipLHcVE+wOBmBJssh9+7S4OUjjxmMYd1yMY3okJiU 6e3+UWy+MwnD+1P7NWIdqLHrirns7cImi1jN9kSr7vYOcu0nFqDB1fHbx4kjdzo5Ot e2CNqEoKGA2Kba/6qolHwhdUPl3yKOa789nuT91s= From: Niklas Cassel To: John Snow Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org, Damien Le Moal , Niklas Cassel Subject: [PATCH 4/9] hw/ide/ahci: simplify and document PxCI handling Date: Fri, 28 Apr 2023 15:21:19 +0200 Message-Id: <20230428132124.670840-5-nks@flawful.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230428132124.670840-1-nks@flawful.org> References: <20230428132124.670840-1-nks@flawful.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::22f; envelope-from=nks.gnu@gmail.com; helo=mail-lj1-x22f.google.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.249, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.25, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 28 Apr 2023 09:29:45 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Niklas Cassel The AHCI spec states that: For NCQ, PxCI is cleared on command queued successfully. For non-NCQ, PxCI is cleared on command completed successfully. (A non-NCQ command that completes with error does not clear PxCI.) The current QEMU implementation either clears PxCI in check_cmd(), or in ahci_cmd_done(). check_cmd() will clear PxCI for a command if handle_cmd() returns 0. handle_cmd() will return -1 if BUSY or DRQ is set. The QEMU implementation for NCQ commands will currently not set BUSY or DRQ, so they will always have PxCI cleared by handle_cmd(). ahci_cmd_done() will never even get called for NCQ commands. Non-NCQ commands are executed by ide_bus_exec_cmd(). Non-NCQ commands in QEMU are implemented either in a sync or in an async way. For non-NCQ commands implemented in a sync way, the command handler will return true, and when ide_bus_exec_cmd() sees that a command handler returns true, it will call ide_cmd_done() (which will call ahci_cmd_done()). For a command implemented in a sync way, ahci_cmd_done() will do nothing (since busy_slot is not set). Instead, after ide_bus_exec_cmd() has finished, check_cmd() will clear PxCI for these commands. For non-NCQ commands implemented in an async way (using either aiocb or pio_aiocb), the command handler will return false, ide_bus_exec_cmd() will not call ide_cmd_done(), instead it is expected that the async callback function will call ide_cmd_done() once the async command is done. handle_cmd() will set busy_slot, if and only if BUSY or DRQ is set, and this is checked _after_ ide_bus_exec_cmd() has returned. handle_cmd() will return -1, so check_cmd() will not clear PxCI. When the async callback calls ide_cmd_done() (which will call ahci_cmd_done()), it will see that busy_slot is set, and ahci_cmd_done() will clear PxCI. This seems racy, since busy_slot is set _after_ ide_bus_exec_cmd() has returned. The callback might come before busy_slot gets set. And it is quite confusing that ahci_cmd_done() will be called for all non-NCQ commands when the command is done, but will only clear PxCI in certain cases, even though it will always write a D2H FIS and raise an IRQ. Even worse, in the case where ahci_cmd_done() does not clear PxCI, it still raises an IRQ. Host software might thus read an old PxCI value, since PxCI is cleared (by check_cmd()) after the IRQ has been raised. Try to simplify this by always setting busy_slot for non-NCQ commands, such that ahci_cmd_done() will always be responsible for clearing PxCI for non-NCQ commands. For NCQ commands, clear PxCI when we receive the D2H FIS, but before raising the IRQ, see AHCI 1.3.1, section 5.3.8, states RegFIS:Entry and RegFIS:ClearCI. Signed-off-by: Niklas Cassel --- hw/ide/ahci.c | 70 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 50 insertions(+), 20 deletions(-) diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index 62aebc8de7..9d79b071b8 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -41,9 +41,10 @@ #include "trace.h" static void check_cmd(AHCIState *s, int port); -static int handle_cmd(AHCIState *s, int port, uint8_t slot); +static void handle_cmd(AHCIState *s, int port, uint8_t slot); static void ahci_reset_port(AHCIState *s, int port); static bool ahci_write_fis_d2h(AHCIDevice *ad, bool d2h_fis_i); +static void ahci_clear_cmd_issue(AHCIDevice *ad, uint8_t slot); static void ahci_init_d2h(AHCIDevice *ad); static int ahci_dma_prepare_buf(const IDEDMA *dma, int32_t limit); static bool ahci_map_clb_address(AHCIDevice *ad); @@ -591,9 +592,8 @@ static void check_cmd(AHCIState *s, int port) if ((pr->cmd & PORT_CMD_START) && pr->cmd_issue) { for (slot = 0; (slot < 32) && pr->cmd_issue; slot++) { - if ((pr->cmd_issue & (1U << slot)) && - !handle_cmd(s, port, slot)) { - pr->cmd_issue &= ~(1U << slot); + if (pr->cmd_issue & (1U << slot)) { + handle_cmd(s, port, slot); } } } @@ -1123,6 +1123,22 @@ static void process_ncq_command(AHCIState *s, int port, const uint8_t *cmd_fis, return; } + /* + * A NCQ command clears the bit in PxCI after the command has been QUEUED + * successfully (ERROR not set, BUSY and DRQ cleared). + * + * For NCQ commands, PxCI will always be cleared here. + * + * (Once the NCQ command is COMPLETED, the device will send a SDB FIS with + * the interrupt bit set, which will clear PxSACT and raise an interrupt.) + */ + ahci_clear_cmd_issue(ad, slot); + + /* + * In reality, for NCQ commands, PxCI is cleared after receiving a D2H FIS + * without the interrupt bit set, but since ahci_write_fis_d2h() can raise + * an IRQ on error, we need to call them in reverse order. + */ ahci_write_fis_d2h(ad, false); ncq_tfs->used = 1; @@ -1197,6 +1213,7 @@ static void handle_reg_h2d_fis(AHCIState *s, int port, { IDEState *ide_state = &s->dev[port].port.ifs[0]; AHCICmdHdr *cmd = get_cmd_header(s, port, slot); + AHCIDevice *ad = &s->dev[port]; uint16_t opts = le16_to_cpu(cmd->opts); if (cmd_fis[1] & 0x0F) { @@ -1273,11 +1290,19 @@ static void handle_reg_h2d_fis(AHCIState *s, int port, /* Reset transferred byte counter */ cmd->status = 0; + /* + * A non-NCQ command clears the bit in PxCI after the command has COMPLETED + * successfully (ERROR not set, BUSY and DRQ cleared). + * + * For non-NCQ commands, PxCI will always be cleared by ahci_cmd_done(). + */ + ad->busy_slot = slot; + /* We're ready to process the command in FIS byte 2. */ ide_bus_exec_cmd(&s->dev[port].port, cmd_fis[2]); } -static int handle_cmd(AHCIState *s, int port, uint8_t slot) +static void handle_cmd(AHCIState *s, int port, uint8_t slot) { IDEState *ide_state; uint64_t tbl_addr; @@ -1288,12 +1313,12 @@ static int handle_cmd(AHCIState *s, int port, uint8_t slot) if (s->dev[port].port.ifs[0].status & (BUSY_STAT|DRQ_STAT)) { /* Engine currently busy, try again later */ trace_handle_cmd_busy(s, port); - return -1; + return; } if (!s->dev[port].lst) { trace_handle_cmd_nolist(s, port); - return -1; + return; } cmd = get_cmd_header(s, port, slot); /* remember current slot handle for later */ @@ -1303,7 +1328,7 @@ static int handle_cmd(AHCIState *s, int port, uint8_t slot) ide_state = &s->dev[port].port.ifs[0]; if (!ide_state->blk) { trace_handle_cmd_badport(s, port); - return -1; + return; } tbl_addr = le64_to_cpu(cmd->tbl_addr); @@ -1312,7 +1337,7 @@ static int handle_cmd(AHCIState *s, int port, uint8_t slot) DMA_DIRECTION_TO_DEVICE, MEMTXATTRS_UNSPECIFIED); if (!cmd_fis) { trace_handle_cmd_badfis(s, port); - return -1; + return; } else if (cmd_len != 0x80) { ahci_trigger_irq(s, &s->dev[port], AHCI_PORT_IRQ_BIT_HBFS); trace_handle_cmd_badmap(s, port, cmd_len); @@ -1336,15 +1361,6 @@ static int handle_cmd(AHCIState *s, int port, uint8_t slot) out: dma_memory_unmap(s->as, cmd_fis, cmd_len, DMA_DIRECTION_TO_DEVICE, cmd_len); - - if (s->dev[port].port.ifs[0].status & (BUSY_STAT|DRQ_STAT)) { - /* async command, complete later */ - s->dev[port].busy_slot = slot; - return -1; - } - - /* done handling the command */ - return 0; } /* Transfer PIO data between RAM and device */ @@ -1498,6 +1514,16 @@ static int ahci_dma_rw_buf(const IDEDMA *dma, bool is_write) return 1; } +static void ahci_clear_cmd_issue(AHCIDevice *ad, uint8_t slot) +{ + IDEState *ide_state = &ad->port.ifs[0]; + + if (!(ide_state->status & (BUSY_STAT | DRQ_STAT))) { + ad->port_regs.cmd_issue &= ~(1 << slot); + } +} + +/* Non-NCQ command is done - This function is never called for NCQ commands. */ static void ahci_cmd_done(const IDEDMA *dma) { AHCIDevice *ad = DO_UPCAST(AHCIDevice, dma, dma); @@ -1506,11 +1532,15 @@ static void ahci_cmd_done(const IDEDMA *dma) /* no longer busy */ if (ad->busy_slot != -1) { - ad->port_regs.cmd_issue &= ~(1 << ad->busy_slot); + ahci_clear_cmd_issue(ad, ad->busy_slot); ad->busy_slot = -1; } - /* update d2h status */ + /* + * In reality, for non-NCQ commands, PxCI is cleared after receiving a D2H + * FIS with the interrupt bit set, but since ahci_write_fis_d2h() will raise + * an IRQ, we need to call them in reverse order. + */ ahci_write_fis_d2h(ad, true); if (ad->port_regs.cmd_issue && !ad->check_bh) { From patchwork Fri Apr 28 13:21:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Cassel X-Patchwork-Id: 13226470 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CF1E8C77B7C for ; Fri, 28 Apr 2023 13:32:51 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1psOAV-0007f1-6O; Fri, 28 Apr 2023 09:29:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1psO4C-0005rK-3w; Fri, 28 Apr 2023 09:23:16 -0400 Received: from mail-lf1-x12b.google.com ([2a00:1450:4864:20::12b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1psO4A-0001aJ-HU; Fri, 28 Apr 2023 09:23:15 -0400 Received: by mail-lf1-x12b.google.com with SMTP id 2adb3069b0e04-4ecb137af7eso10419617e87.2; Fri, 28 Apr 2023 06:23:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682688192; x=1685280192; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=IfopbcdCm3JqnUyb69N+rZYN1ysla98dVjEHPkEgZhM=; b=fK0lQCJmpeUUmA/lDm/urwpJgq0HeeyFpGB2+Qdsm7Lc7qOosJTxFFh81G1uChkmu6 6y3h+NzKyqrbriWz4+Qs4V+oX2RXqsag+7D4pSWic8Jgw+0JhHMs9LvuHFTLutZJLl0a 3zKcSqBJn8nMpq2TUttPRts3APcsJW4bfsRBrJRbZiv0Ls98sc9D0TNVOin6NDXNMaiP +T+9E7y2yQ8dncJc2iyYe4hIfS5SCEK+wt54VOCVfdiIHH+gD0XgEkiWD1+hk9ow2kk3 bDtwKXSLuikn6tPbYTpHdRmXq3JOUbj3dx6N9ilouP7Zi2JlUlCE6iC8XNWNXmr6/XQx 2r9w== X-Gm-Message-State: AC+VfDxAqwiLUD/q9dy1knQ1BMfKkUMFJO2bglU2+J9Q+IaAuxCEEgC8 dsrmJrYFEwTDElOWoPTzXWSJEoL9nDZkmuCn X-Google-Smtp-Source: ACHHUZ749YekqxOKwjJ8Yd4GZIzP6O7iT1DpEgEDUikG52IwiUocuw/wMhbyZIPV9qeRJmJHUoffcQ== X-Received: by 2002:ac2:42d4:0:b0:4db:2ab7:43e6 with SMTP id n20-20020ac242d4000000b004db2ab743e6mr1539584lfl.44.1682688192519; Fri, 28 Apr 2023 06:23:12 -0700 (PDT) Received: from flawful.org (c-fcf6e255.011-101-6d6c6d3.bbcust.telenor.se. [85.226.246.252]) by smtp.gmail.com with ESMTPSA id e5-20020ac25465000000b004f00f29abe0sm628875lfn.151.2023.04.28.06.23.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 06:23:12 -0700 (PDT) Received: by flawful.org (Postfix, from userid 112) id 689BB406; Fri, 28 Apr 2023 15:23:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=flawful.org; s=mail; t=1682688191; bh=L9DJxjfWRGH20opVfUzaIU7S3SfYFoTyL12Xkr35s5o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=F49fBn1KEZC2PETXaHeG+Th0DFCFDbMaaFFnZ/pF5o6QEavb3v6cLuVYhTziX+HLX HLeMTp4T4M91Ih3glyVt5wpf5z9oXlzpximE7TTwHbvWDDflMRZfkXcCnMWP4V6Xtv JZi/WF+1AyBITOHuxK3oAoyC7HxQAJfNiGTR4oXI= Received: from x1-carbon.lan (OpenWrt.lan [192.168.1.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by flawful.org (Postfix) with ESMTPSA id 83763689; Fri, 28 Apr 2023 15:21:41 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=flawful.org; s=mail; t=1682688101; bh=L9DJxjfWRGH20opVfUzaIU7S3SfYFoTyL12Xkr35s5o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XgNkgS1/BSEfw49cLtxV4LbhfdwpOd2qk/xQv/M+1F+EBi8g3vWSGKqDN9v3m2WTp cVjaKjomPsMtdzLx8SSX+tZvCa6B7xhTW1GzDJmR8y2nh8yHdRqXKIUH8uTjuTIYd9 w1Gf8Qw0dN3MyoJua5fQOVw6OkVMSq/jCZojSsDE= From: Niklas Cassel To: John Snow Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org, Damien Le Moal , Niklas Cassel Subject: [PATCH 5/9] hw/ide/ahci: PxCI should not get cleared when ERR_STAT is set Date: Fri, 28 Apr 2023 15:21:20 +0200 Message-Id: <20230428132124.670840-6-nks@flawful.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230428132124.670840-1-nks@flawful.org> References: <20230428132124.670840-1-nks@flawful.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::12b; envelope-from=nks.gnu@gmail.com; helo=mail-lf1-x12b.google.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.249, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.25, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 28 Apr 2023 09:29:45 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Niklas Cassel For NCQ, PxCI is cleared on command queued successfully. For non-NCQ, PxCI is cleared on command completed successfully. Successfully means ERR_STAT, BUSY and DRQ are all cleared. A command that has ERR_STAT set, does not get to clear PxCI. See AHCI 1.3.1, section 5.3.8, states RegFIS:Entry and RegFIS:ClearCI, and 5.3.16.5 ERR:FatalTaskfile. In the case of non-NCQ commands, not clearing PxCI is needed in order for host software to be able to see which command slot that failed. Signed-off-by: Niklas Cassel --- hw/ide/ahci.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index 9d79b071b8..366929132b 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -1518,7 +1518,8 @@ static void ahci_clear_cmd_issue(AHCIDevice *ad, uint8_t slot) { IDEState *ide_state = &ad->port.ifs[0]; - if (!(ide_state->status & (BUSY_STAT | DRQ_STAT))) { + if (!(ide_state->status & ERR_STAT) && + !(ide_state->status & (BUSY_STAT | DRQ_STAT))) { ad->port_regs.cmd_issue &= ~(1 << slot); } } @@ -1527,6 +1528,7 @@ static void ahci_clear_cmd_issue(AHCIDevice *ad, uint8_t slot) static void ahci_cmd_done(const IDEDMA *dma) { AHCIDevice *ad = DO_UPCAST(AHCIDevice, dma, dma); + IDEState *ide_state = &ad->port.ifs[0]; trace_ahci_cmd_done(ad->hba, ad->port_no); @@ -1543,7 +1545,8 @@ static void ahci_cmd_done(const IDEDMA *dma) */ ahci_write_fis_d2h(ad, true); - if (ad->port_regs.cmd_issue && !ad->check_bh) { + if (!(ide_state->status & ERR_STAT) && + ad->port_regs.cmd_issue && !ad->check_bh) { ad->check_bh = qemu_bh_new(ahci_check_cmd_bh, ad); qemu_bh_schedule(ad->check_bh); } From patchwork Fri Apr 28 13:21:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Cassel X-Patchwork-Id: 13226473 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D8826C77B61 for ; Fri, 28 Apr 2023 13:32:58 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1psOAV-0007fm-Rf; Fri, 28 Apr 2023 09:29:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1psO4B-0005r9-MG; Fri, 28 Apr 2023 09:23:15 -0400 Received: from mail-lj1-x22c.google.com ([2a00:1450:4864:20::22c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1psO4A-0001a6-6I; Fri, 28 Apr 2023 09:23:15 -0400 Received: by mail-lj1-x22c.google.com with SMTP id 38308e7fff4ca-2a8eb8db083so99772731fa.3; Fri, 28 Apr 2023 06:23:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682688192; x=1685280192; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=IVHF7HaE/FJpqfMAG4WIgl0t+tG7pgV6IiTH6DFVl30=; b=ByUCd3QfiKTAaCDGjenEZTPz9gb+f7d1oPJQkt4rj9PYSLMKGN31oFV5sftOzdkCM/ VpgM7oJ332nmokOijq1mIJ+jYKYEkx+ce23bbu0tX9sx8INpJ5DA5cDecf/HBa550pMm Afqvo56qYzw+qTk51lqPr0mKR+bNSd1QeXLPajPOIN41UMu0P+5eD097oQMOPui2acuP /vSl5vvflJVKkwjqtbsXzfbBAJrXEYSgKy9xurpNMFG6URLT1362WCVU7UNi6HwhfrvH i7/vf/0fLa68uQZAcPU2INF6365CNCp/FG8iW6uJZPTRiyBJqjDLA/SYlhaJfJuXCH3C EKMg== X-Gm-Message-State: AC+VfDxj84bWOLsg8s/N7+px5qNwh31fJEwt0pin0teB9wVHbMYhPkCq W6xiqOWJ0raQ2vtM9E0DLuewAZ80G0eETPxK X-Google-Smtp-Source: ACHHUZ5xmX3rSDZfQmsnsuT0yOebpV50aVew/x4mbxXSVYwjqg3woGRR4P/gXwYwFvWphhxIzeboWw== X-Received: by 2002:a2e:9783:0:b0:2ab:1247:9b53 with SMTP id y3-20020a2e9783000000b002ab12479b53mr1731000lji.43.1682688191788; Fri, 28 Apr 2023 06:23:11 -0700 (PDT) Received: from flawful.org (c-fcf6e255.011-101-6d6c6d3.bbcust.telenor.se. [85.226.246.252]) by smtp.gmail.com with ESMTPSA id n17-20020a2e7211000000b002a8e758f669sm3337392ljc.27.2023.04.28.06.23.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 06:23:11 -0700 (PDT) Received: by flawful.org (Postfix, from userid 112) id 2F3114EB; Fri, 28 Apr 2023 15:23:09 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=flawful.org; s=mail; t=1682688190; bh=4nIZf6ERltl1pb2E5WggKtCiqfw9QyHbGlE8VwOevqM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=d8rqt5jxS3pjfmgRzZtOVnxsYt4M1AmI6AhzDB62AADandfENvC4GfbOzjBfAgy1h rQcc0+pdiVKsu+bT+JLq3bwH8fsSQir6vlsSaVMp05O81AoDaVKaj9XP3y4bFLLcl8 r6mQZmtiCtR8Sh2f+JD701+P1C2VTOOm9AIsaNkU= Received: from x1-carbon.lan (OpenWrt.lan [192.168.1.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by flawful.org (Postfix) with ESMTPSA id C5EED6EC; Fri, 28 Apr 2023 15:21:41 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=flawful.org; s=mail; t=1682688101; bh=4nIZf6ERltl1pb2E5WggKtCiqfw9QyHbGlE8VwOevqM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mTgAHO36Hyg5dIHGPB75X4l9sYy/SKOzCZVmaX6M19f4b0zur+yIDt3gbE11KltOR nr1vcqjC0hdk4CYUChjo49H7ZCVQe6fB5s1/gkJUzxKGB57IxO7izoSCn+3NOx/qXg cGKMntRVvQqjDBTxt+wd+l3a8LdLU1CDNXNaOTyM= From: Niklas Cassel To: John Snow Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org, Damien Le Moal , Niklas Cassel Subject: [PATCH 6/9] hw/ide/ahci: PxSACT and PxCI is cleared when PxCMD.ST is cleared Date: Fri, 28 Apr 2023 15:21:21 +0200 Message-Id: <20230428132124.670840-7-nks@flawful.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230428132124.670840-1-nks@flawful.org> References: <20230428132124.670840-1-nks@flawful.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::22c; envelope-from=nks.gnu@gmail.com; helo=mail-lj1-x22c.google.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.249, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.25, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 28 Apr 2023 09:29:45 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Niklas Cassel According to AHCI 1.3.1 definition of PxSACT: This field is cleared when PxCMD.ST is written from a '1' to a '0' by software. This field is not cleared by a COMRESET or a software reset. According to AHCI 1.3.1 definition of PxCI: This field is also cleared when PxCMD.ST is written from a '1' to a '0' by software. Clearing PxCMD.ST is part of the error recovery procedure, see AHCI 1.3.1, section "6.2 Error Recovery". If we don't clear PxCI on error recovery, the previous command will incorrectly still be marked as pending after error recovery. Signed-off-by: Niklas Cassel --- hw/ide/ahci.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index 366929132b..2a59d0e0f5 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -329,6 +329,11 @@ static void ahci_port_write(AHCIState *s, int port, int offset, uint32_t val) ahci_check_irq(s); break; case AHCI_PORT_REG_CMD: + if ((pr->cmd & PORT_CMD_START) && !(val & PORT_CMD_START)) { + pr->scr_act = 0; + pr->cmd_issue = 0; + } + /* Block any Read-only fields from being set; * including LIST_ON and FIS_ON. * The spec requires to set ICC bits to zero after the ICC change From patchwork Fri Apr 28 13:21:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Cassel X-Patchwork-Id: 13226471 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C7B08C77B60 for ; Fri, 28 Apr 2023 13:32:55 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1psOAX-0007hr-2p; Fri, 28 Apr 2023 09:29:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1psO4O-0005tQ-Eu; Fri, 28 Apr 2023 09:23:28 -0400 Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1psO4M-0001bW-Nk; Fri, 28 Apr 2023 09:23:28 -0400 Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-4ec8133c59eso10419475e87.0; Fri, 28 Apr 2023 06:23:25 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682688204; x=1685280204; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=PWg7dbBSLXQiktpYCfC7aOZgN6P0Noe5N48ZAxcL6IQ=; b=BgCgqHVOYKVI/4Bpq1KHEp4u3OCTTHmtoULWr5jE12A5+69PLKb3+4RZutkXhC3A1B ctt05T9S2Vc7vBXaNPVbq6jBvZAVxLtRUwJGbn0lzLEvkXf06ZHaWPJ5Huhr5VTQmdhG TI3PiOvN1WNUkfx0KlTFpPoZfuf2y8sHyUl1AYROfuumxnSw9SiX7WU0l3XBPKxTjAfI laG/cPrFkrN1EmbJGxYlaalEW5LPR1MumRJxqboHBvqQ0bMXDA/VUsihwYyWTdXeMB+P VWVKcyXA3G1Z/+Do9gpG9s4gQA/24Zo9uNDysid9JrPNsu3VvvNScvZYayorM3zhNTus 6xuA== X-Gm-Message-State: AC+VfDzM3YTd95F6FMiUdABMSTTPq3nUT8vE7d3PlBTVaXC65/K6e5oQ VH/VCu4VNmkysYTb8BED6tv15S3Ev57UTcrJ X-Google-Smtp-Source: ACHHUZ5a/Yh/9okg5+/5rIfPF8MRV02lgIXLe6HzvyBuJvE1I3+CqZs2KYzFhMBVoRxSvrqRxhypcA== X-Received: by 2002:ac2:48a9:0:b0:4eb:3b4c:50ab with SMTP id u9-20020ac248a9000000b004eb3b4c50abmr1647368lfg.64.1682688204677; Fri, 28 Apr 2023 06:23:24 -0700 (PDT) Received: from flawful.org (c-fcf6e255.011-101-6d6c6d3.bbcust.telenor.se. [85.226.246.252]) by smtp.gmail.com with ESMTPSA id r16-20020ac252b0000000b004edc9e9eec5sm3357882lfm.138.2023.04.28.06.23.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 06:23:24 -0700 (PDT) Received: by flawful.org (Postfix, from userid 112) id 6CD76341; Fri, 28 Apr 2023 15:23:23 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=flawful.org; s=mail; t=1682688203; bh=V2Qa9eatCpj+aaqd6Gy2Q46YiIUq2dXD5ylvC/xVRsM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=f/C1TDKAr8m3hCI4jcugAUMlSFSBsXClmiChlDgeg9vYaIjB3iPaujVHegNQwd/JT 73N/DyM1kBLpuHGQ954gQnQ0n3PfP0ody8XkUgiVoShe2s3NHmzH6vMl6Yh3joVyAF aFa5f20eB3aL1h864vXUlMYTW8V5cq52x2TyQYf8= Received: from x1-carbon.lan (OpenWrt.lan [192.168.1.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by flawful.org (Postfix) with ESMTPSA id 0C2FE739; Fri, 28 Apr 2023 15:21:42 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=flawful.org; s=mail; t=1682688102; bh=V2Qa9eatCpj+aaqd6Gy2Q46YiIUq2dXD5ylvC/xVRsM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KdOr0YtTpSDi7niWgRKm8qjnMczr+csibMyu4Kis8QjMjjDNuZgn6U4dCR3icjg4t wuBVyUlmjGx4RBXW2dCMxcwV+qBX18K74RmNW3bwjl2xc2hRvQ/BB/24MEM0b15ne0 cQQuwFKtRdvT00yV2mo0mvyk3VH3DogwfBWiCuTU= From: Niklas Cassel To: John Snow Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org, Damien Le Moal , Niklas Cassel Subject: [PATCH 7/9] hw/ide/ahci: trigger either error IRQ or regular IRQ, not both Date: Fri, 28 Apr 2023 15:21:22 +0200 Message-Id: <20230428132124.670840-8-nks@flawful.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230428132124.670840-1-nks@flawful.org> References: <20230428132124.670840-1-nks@flawful.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::12e; envelope-from=nks.gnu@gmail.com; helo=mail-lf1-x12e.google.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.249, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.25, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 28 Apr 2023 09:29:45 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Niklas Cassel According to AHCI 1.3.1, 5.3.8.1 RegFIS:Entry, if ERR_STAT is set, we jump to state ERR:FatalTaskfile, which will raise a TFES IRQ unconditionally, regardless if the I bit is set in the FIS or not. Thus, we should never raise a normal IRQ after having sent an error IRQ. Signed-off-by: Niklas Cassel --- hw/ide/ahci.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index 2a59d0e0f5..d88961b4c0 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -891,11 +891,10 @@ static bool ahci_write_fis_d2h(AHCIDevice *ad, bool d2h_fis_i) pr->tfdata = (ad->port.ifs[0].error << 8) | ad->port.ifs[0].status; + /* TFES IRQ is always raised if ERR_STAT is set, regardless of I bit. */ if (d2h_fis[2] & ERR_STAT) { ahci_trigger_irq(ad->hba, ad, AHCI_PORT_IRQ_BIT_TFES); - } - - if (d2h_fis_i) { + } else if (d2h_fis_i) { ahci_trigger_irq(ad->hba, ad, AHCI_PORT_IRQ_BIT_DHRS); } From patchwork Fri Apr 28 13:21:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Cassel X-Patchwork-Id: 13226468 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id ACE9AC77B60 for ; Fri, 28 Apr 2023 13:31:31 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1psOAW-0007gK-LY; Fri, 28 Apr 2023 09:29:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1psO4X-0005ux-FZ; Fri, 28 Apr 2023 09:23:38 -0400 Received: from mail-lf1-x134.google.com ([2a00:1450:4864:20::134]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1psO4V-0001dh-Oz; Fri, 28 Apr 2023 09:23:37 -0400 Received: by mail-lf1-x134.google.com with SMTP id 2adb3069b0e04-4efe8991b8aso8539374e87.0; Fri, 28 Apr 2023 06:23:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682688214; x=1685280214; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=xU/+JTk7oCVqZXWB6aWdEuifmOuFNJGeTyRi3vXSztg=; b=aDTCFQg0713gjeUMFPCTUn550LrhHD6qB7EyBpouJIeRvrFlpFSUlpQr60Qh3bftyC wiyiMeCiH3DCeH7P2k/wu67oGZkD2lrb66XcVAeFp5b+tzaZ6C2Xxj4V5ds3m0CMyCjg etVTFw/GSmKMwpZvnejwpU5/+Ejep3Eag4YCsHOf9x7JctAgKaCyq11qLBsSgEOrOAjk g3T6au+rjdE1iee3LP6+ShDh1J0UIQds+x6ZvV6D9TIn1LYuBMI749i0iVZT0ymD1w7m pgmUHBY04I8yG6jDSXmZGO+OdtiKf0cL2k4OoaqScMAzST4tOBoFuPpuwPcxK4zc1WqD 9+qw== X-Gm-Message-State: AC+VfDyU1eaO3ydII2/sQ6xp/RGiHJboYHhxC3hKF8Hmdley2RTWceVY HV6rWQvDyC4IBu25VrGB+bpwR7qR4AUChBxy X-Google-Smtp-Source: ACHHUZ5XxKPZgv2IES1gtlHYKF+e443w+yFM9Dbq9k84CAi1C5HWs504eK3ULbTJozR79Q3Vi0NFoA== X-Received: by 2002:a19:7016:0:b0:4ee:d752:23c2 with SMTP id h22-20020a197016000000b004eed75223c2mr1559350lfc.15.1682688213765; Fri, 28 Apr 2023 06:23:33 -0700 (PDT) Received: from flawful.org (c-fcf6e255.011-101-6d6c6d3.bbcust.telenor.se. [85.226.246.252]) by smtp.gmail.com with ESMTPSA id p11-20020a2e9a8b000000b002a8c7c5d64dsm3354762lji.1.2023.04.28.06.23.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 06:23:33 -0700 (PDT) Received: by flawful.org (Postfix, from userid 112) id 2E3F23C7; Fri, 28 Apr 2023 15:23:32 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=flawful.org; s=mail; t=1682688212; bh=tbSOs7oKUuhJVh7XJgV1FX58SIGIet6cYZMAoAjteeU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vRrXwnDwOMhDuoRXoG8qY5WppyqMKDG7Zls3B6c57lZO44PJ3VI62J+KqR3II+tBd UkH2IGomC5l3uFT+eXDntEn3nUX4O5cc2DBUVpwvWikeRQUO/DyZ00DyA5YyImH8XK WDa2h/YS/jzvKo0HquVXS3JO14g5OuoHjVMb7gQg= Received: from x1-carbon.lan (OpenWrt.lan [192.168.1.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by flawful.org (Postfix) with ESMTPSA id 3FDF2744; Fri, 28 Apr 2023 15:21:42 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=flawful.org; s=mail; t=1682688102; bh=tbSOs7oKUuhJVh7XJgV1FX58SIGIet6cYZMAoAjteeU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BWTrz6xa1hQK6GJFf3OYImn4rcmuqMxgGHSlo3uk06DVUkPF5x+TewMmY+bXzXQ8m ExpkYjpZQn4oTKhRlaCMwmTp3Dnt6OQY9VQDQ3DQd9kVgiq0GV7IveVMDJV0k27OGu TQiEHQhich5RjkpmOG+b8wU8H3sZ3ndPBeMpMbwY= From: Niklas Cassel To: John Snow Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org, Damien Le Moal , Niklas Cassel Subject: [PATCH 8/9] hw/ide/ahci: fix ahci_write_fis_sdb() Date: Fri, 28 Apr 2023 15:21:23 +0200 Message-Id: <20230428132124.670840-9-nks@flawful.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230428132124.670840-1-nks@flawful.org> References: <20230428132124.670840-1-nks@flawful.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::134; envelope-from=nks.gnu@gmail.com; helo=mail-lf1-x134.google.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.249, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.25, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 28 Apr 2023 09:29:45 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Niklas Cassel When there is an error, we need to raise a TFES error irq, see AHCI 1.3.1, 5.3.13.1 SDB:Entry. If ERR_STAT is set, we jump to state ERR:FatalTaskfile, which will raise a TFES IRQ unconditionally, regardless if the I bit is set in the FIS or not. Thus, we should never raise a normal IRQ after having sent an error IRQ. It is valid to signal successfully completed commands as finished in the same SDB FIS that generates the error IRQ. The important thing is that commands that did not complete successfully (e.g. commands that were aborted, do not get the finished bit set). Before this commit, there was never a TFES IRQ raised on NCQ error. Signed-off-by: Niklas Cassel --- hw/ide/ahci.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index d88961b4c0..4950d3575e 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -806,8 +806,14 @@ static void ahci_write_fis_sdb(AHCIState *s, NCQTransferState *ncq_tfs) pr->scr_act &= ~ad->finished; ad->finished = 0; - /* Trigger IRQ if interrupt bit is set (which currently, it always is) */ - if (sdb_fis->flags & 0x40) { + /* + * TFES IRQ is always raised if ERR_STAT is set, regardless of I bit. + * If ERR_STAT is not set, trigger SDBS IRQ if interrupt bit is set + * (which currently, it always is). + */ + if (sdb_fis->status & ERR_STAT) { + ahci_trigger_irq(s, ad, AHCI_PORT_IRQ_BIT_TFES); + } else if (sdb_fis->flags & 0x40) { ahci_trigger_irq(s, ad, AHCI_PORT_IRQ_BIT_SDBS); } } From patchwork Fri Apr 28 13:21:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Cassel X-Patchwork-Id: 13226474 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 0B6EAC7EE22 for ; Fri, 28 Apr 2023 13:32:58 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1psOAX-0007hv-7x; Fri, 28 Apr 2023 09:29:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1psO4d-0005vV-35; Fri, 28 Apr 2023 09:23:44 -0400 Received: from mail-lf1-x12d.google.com ([2a00:1450:4864:20::12d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1psO4b-0001e6-G7; Fri, 28 Apr 2023 09:23:42 -0400 Received: by mail-lf1-x12d.google.com with SMTP id 2adb3069b0e04-4edcdfa8638so10870596e87.2; Fri, 28 Apr 2023 06:23:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682688219; x=1685280219; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=DRUJPqamteZaBxY2HOvE1kgnvhOgzMYuu3VVcMwkcmk=; b=E3xKSoU87h3wC/r0iN/4FBLh0Ip5EE7aUhoR/i06jkjNjBT/11uo7b4+N0JDxKQAAP 7pN7UQHLaBQ1Nn1fE8AT9aKMkDH7nkC0PKfxjp/lB91CO7i1UizC7Ek4wo9uCHsiul9K Vr2ceCPCwaY7lHke/l/P6viBtULmkbNUT75isg5iAGvaV3rdVs943oewVpFqBA/I4/Nz obmFwBYtJhT1mlk9mFAmkhmnB0Tipu+C/MctHjXle1cU2tBDrYnUaLLaRV+DlSGyWVb1 pNVqSTXUaqX8lZ3hnHdYUKH76DecRTndm6WXVtbqf2327pAR7FrZ24mYkkl2r4WmMLAK kQmQ== X-Gm-Message-State: AC+VfDwKXCSf3onEQreSdYfmb8KPHqD6hJ8k7w6crE7pe7eVMes9h5UW qgYKgotL9s4c8yAY718zHY7FMBn/SbNap8bA X-Google-Smtp-Source: ACHHUZ4N0gjf9rS2w0agdMeI644B0DcYKUO5QF3UMuw08XuwOA1qZP8OHQt4PILF9ZeiXD+mKFzd9Q== X-Received: by 2002:ac2:488e:0:b0:4ed:d542:6f63 with SMTP id x14-20020ac2488e000000b004edd5426f63mr1471998lfc.11.1682688219174; Fri, 28 Apr 2023 06:23:39 -0700 (PDT) Received: from flawful.org (c-fcf6e255.011-101-6d6c6d3.bbcust.telenor.se. [85.226.246.252]) by smtp.gmail.com with ESMTPSA id f20-20020a19ae14000000b004d85316f2d6sm3332691lfc.118.2023.04.28.06.23.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 06:23:38 -0700 (PDT) Received: by flawful.org (Postfix, from userid 112) id 2C7E9294; Fri, 28 Apr 2023 15:23:38 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=flawful.org; s=mail; t=1682688218; bh=r3RO+N2OE0QxKNjQnzee2qyNncPo80LGqpneO602KkA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=d+A9nIjrgSCM23sXoF3BBncbcD65r/wEeVZ1qhcNuu4wS3HzPfxMsWnRDEqlCfJON d3xZIPyviqdBbfseBl036a8sfOsuZwAQbzqPQDwWEgF3RGPOz/zAPrRGrLpoPqg+eq lxU8jo7z6hcVwumDrA+6Yws7wDF5qKlr8KmhyyD8= Received: from x1-carbon.lan (OpenWrt.lan [192.168.1.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by flawful.org (Postfix) with ESMTPSA id 7EF7D75B; Fri, 28 Apr 2023 15:21:42 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=flawful.org; s=mail; t=1682688102; bh=r3RO+N2OE0QxKNjQnzee2qyNncPo80LGqpneO602KkA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=iTbVDWQrG2EpJRbKWKWjfMUf0zI4CuMDi97Yb5BImE3/9pLPj26mLGY/z4yyJyS/I VKrecpOEDfUngasdGiRqhobNCzlOyRBHjFRxbMygEEbVulMFe9bCt7NwPTk29yXH2V lexLVvuxU4eKTzSrRqpuo8oncfgHb1X1JfVdhirY= From: Niklas Cassel To: John Snow Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org, Damien Le Moal , Niklas Cassel Subject: [PATCH 9/9] hw/ide/ahci: fix broken SError handling Date: Fri, 28 Apr 2023 15:21:24 +0200 Message-Id: <20230428132124.670840-10-nks@flawful.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230428132124.670840-1-nks@flawful.org> References: <20230428132124.670840-1-nks@flawful.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::12d; envelope-from=nks.gnu@gmail.com; helo=mail-lf1-x12d.google.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.249, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.25, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 28 Apr 2023 09:29:45 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Niklas Cassel When encountering an NCQ error, you should not write the NCQ tag to the SError register. This is completely wrong. The SError register has a clear definition, where each bit represents a different error, see PxSERR definition in AHCI 1.3.1. If we write a random value (like the NCQ tag) in SError, e.g. Linux will read SError, and will trigger arbitrary error handling depending on the NCQ tag that happened to be executing. In case of success, ncq_cb() will call ncq_finish(). In case of error, ncq_cb() will call ncq_err() (which will clear ncq_tfs->used), and then call ncq_finish(), thus using ncq_tfs->used is sufficient to tell if finished should get set or not. Signed-off-by: Niklas Cassel --- hw/ide/ahci.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index 4950d3575e..09a14408e3 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -1011,7 +1011,6 @@ static void ncq_err(NCQTransferState *ncq_tfs) ide_state->error = ABRT_ERR; ide_state->status = READY_STAT | ERR_STAT; - ncq_tfs->drive->port_regs.scr_err |= (1 << ncq_tfs->tag); qemu_sglist_destroy(&ncq_tfs->sglist); ncq_tfs->used = 0; } @@ -1021,7 +1020,7 @@ static void ncq_finish(NCQTransferState *ncq_tfs) /* If we didn't error out, set our finished bit. Errored commands * do not get a bit set for the SDB FIS ACT register, nor do they * clear the outstanding bit in scr_act (PxSACT). */ - if (!(ncq_tfs->drive->port_regs.scr_err & (1 << ncq_tfs->tag))) { + if (ncq_tfs->used) { ncq_tfs->drive->finished |= (1 << ncq_tfs->tag); }