From nobody Fri Jul 24 22:17:37 2026 Received: from mail-pf1-f181.google.com (mail-pf1-f181.google.com [209.85.210.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 439BB286A7 for ; Thu, 23 Jul 2026 00:12:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784765533; cv=none; b=Gkjeb0UGLD1cg9NWRM4w6COIBHAvEni00pbN+lew/2ymMS+6uBodK0ebgvvlWPtuHCe53fIQw+d0TId5O6s39bqlTHRUqL/NiGAHJLvxoGDC6hoDWttVWxMtB19qFNBKdVwcQk7bdyYsYBI3BBxTHA4owzvFID2FeSG3P0acasc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784765533; c=relaxed/simple; bh=6gQ8RELPs7kXsn5PgGweUn+iDbo9LuwS+5snvrITUDM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cC/3VFMMnQ1r+swmyDbaoallMCTvj8SBChmHc+xInwZ6HO3TCfqMSpk1Csix7Yumjm1cWhkUWJEWy/svOVly4dZS95FgVylMW1LV+HY04GFD6PADUFEOIc2Pbcbcq/1ubxv+2OMYu9ejMlGsf9lszMN6yJhDIdg7neg02uDD59U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=SDEoySSv; arc=none smtp.client-ip=209.85.210.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="SDEoySSv" Received: by mail-pf1-f181.google.com with SMTP id d2e1a72fcca58-8453427d3f4so44428b3a.3 for ; Wed, 22 Jul 2026 17:12:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784765531; x=1785370331; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=G2Juw97uYRh2DZVmJAt88/3mh1lYhmOIkr6Mu093zTI=; b=SDEoySSvU5BBdMM4vOSviMrAauT/C1RL3o5TIKbNf/bOFaSlHSXMncdrr33+Qjxoti My45POJioo3PFCdBp0KAf2HGai1JXgStwK8xx7QwKlupZUjXGtEyTqYfLdNnm+A5oMcy 3km+nUgtDFoc5vVzeyEX26Nr3J1JwGKdUHCOgjIZjyDe42zHZN/owGeT7rbqcROAI/Oq b8qY0wpu7QjcuXYQhAgrWxw+boSstcft3l0jEhkS+dDyh3P3L2zn4SOSGMaPr3wi5xjR jDgBg/UZXb8Qsp3ekqXFfA3YaIf1ZBNeRbvLYRxymGFWGGy3Mc7KkwPBFZg6tE33/R7U t95Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784765531; x=1785370331; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=G2Juw97uYRh2DZVmJAt88/3mh1lYhmOIkr6Mu093zTI=; b=ZLd+cMPiOPDkvmW+hdyxL4ZyBczcWVHKwsX+FXDjHi6cS1p746Jrb+Gavf6gwDw+8d wOlhC/fniAfi4BxnahebzAZ6p4lLaxNOT2HZzHP7aHGIyXbZA8jqEJJfX9Q9+Ur4RM6B aGwJxXGSe/huenPh85/5r0OwpMr4HodWOOwNnYejc1uD/5MmUdJm7cCxY9UGgj3tyPeE oTdpLSA3ayxG3r9dAFdcby2X6bw9u+B/oEBIjTgoT6gvs3UI2syyaQ9bKkrIahnSVGuD PQER5QpS9Whf4S2xJOJJMvcWS8KLCPrluEYgut9LhW2SAbD0O/F492zcRWw2F34hxgzx +DzA== X-Forwarded-Encrypted: i=1; AHgh+RoTx9pn2qI2eIM9Y1qYDxGj9ECqBc4kVP56PYbdqHq+MA/r9erE5bXQADu/77l4ZtDLnw+Y0rJaVfkJUHc=@vger.kernel.org X-Gm-Message-State: AOJu0Yy2Lkn+rf9v+UIn/LTA/zYvB9ztsgwvtJCBN6hiGEdO+AYdnwZM X/13DSgj+jAWhODZ817H5SadWhZgUHYuYtxTAUY1y5KiZsORdve07pGd X-Gm-Gg: AR+sD10Wlhql7c1rsWs0+AFpCRbxUyHlfImwk3xxBMj/uvD7t3r/3SkIXoPKJc9/izU QkVuGbE/xJmqI82AM91qnULpcazgprSvb9k9Okq/HmvWOy7bnLRcuQjc6+ZfDGqAnCJbFiIO+4E 4lYmYyYxMDl3TH0tqTHPmv+AWMsKW2CyCZIWBwSiM6aDoS0XusibXIPF0JhJqmPI+Z0Vyayc+ET fZ7+p/VvTDM302gD4SggXEmPxvMmIpx1lQcehgk7qxNJ+nmmxqxtUKEepnbvX6owheGNzEqLZzC elywiP1t/s9jv6e/NXfU72RrcCdDVItfqYr5E882GgJ0uDtN9NFFGMGSUMxWhDefXoxDl975JNC Ht6993SQOrz3uNRKm79A4ylbWg0yliEAS07xFIRbAlpAmJ9mp8R+BRzMNB3iPKy0p8hre97mTba tyr75lG2mtAwB4w5uvGwDWPanlAEU9wHuB2UVJ4BpRxkQelgDYeigIe7Np2s2y7LHpgiUCUcOjD 7ClniHBOfHGFROJ0BplI/tRcxARniOGef7B4WS9963Jtn+Cu8eDkww= X-Received: by 2002:a05:6a00:e88:b0:847:b16b:46d9 with SMTP id d2e1a72fcca58-84e2b8aa77bmr1119696b3a.34.1784765531462; Wed, 22 Jul 2026 17:12:11 -0700 (PDT) Received: from ryzen.lan ([2601:644:8000:7a86::e35]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84e1760025esm2037253b3a.57.2026.07.22.17.12.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jul 2026 17:12:10 -0700 (PDT) From: Rosen Penev To: linux-ide@vger.kernel.org Cc: Damien Le Moal , Niklas Cassel , Tejun Heo , Mans Rullgard , linux-kernel@vger.kernel.org (open list) Subject: [PATCH 1/3] ata: sata_dwc_460ex: fix PHY lifecycle ordering on device removal Date: Wed, 22 Jul 2026 17:12:06 -0700 Message-ID: <20260723001208.1469323-2-rosenp@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260723001208.1469323-1-rosenp@gmail.com> References: <20260723001208.1469323-1-rosenp@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" sata_dwc_remove() calls phy_exit() while phy_power_off() is still pending in sata_dwc_port_stop(), which runs later during device teardown. This violates the expected PHY sequencing of power_off before exit. Fixes: 0f48debdb906 ("ata: sata_dwc_460ex: add phy support") Assisted-by: opencode:big-pickle Signed-off-by: Rosen Penev --- drivers/ata/sata_dwc_460ex.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/drivers/ata/sata_dwc_460ex.c b/drivers/ata/sata_dwc_460ex.c index 8e3fc713891a..8a1d80ac906a 100644 --- a/drivers/ata/sata_dwc_460ex.c +++ b/drivers/ata/sata_dwc_460ex.c @@ -851,10 +851,14 @@ static int sata_dwc_port_start(struct ata_port *ap) if (err) goto CLEANUP_ALLOC; =20 - err =3D phy_power_on(hsdev->phy); + err =3D phy_init(hsdev->phy); if (err) goto CLEANUP_ALLOC; =20 + err =3D phy_power_on(hsdev->phy); + if (err) + goto CLEANUP_PHY; + for (i =3D 0; i < SATA_DWC_QCMD_MAX; i++) hsdevp->cmd_issued[i] =3D SATA_DWC_CMD_ISSUED_NOT; =20 @@ -880,6 +884,8 @@ static int sata_dwc_port_start(struct ata_port *ap) dev_dbg(ap->dev, "%s: done\n", __func__); return 0; =20 +CLEANUP_PHY: + phy_exit(hsdev->phy); CLEANUP_ALLOC: kfree(hsdevp); CLEANUP: @@ -897,6 +903,7 @@ static void sata_dwc_port_stop(struct ata_port *ap) dmaengine_terminate_sync(hsdevp->chan); dma_release_channel(hsdevp->chan); phy_power_off(hsdev->phy); + phy_exit(hsdev->phy); =20 kfree(hsdevp); ap->private_data =3D NULL; @@ -1163,6 +1170,10 @@ static int sata_dwc_probe(struct platform_device *of= dev) if (irq < 0) return irq; =20 + hsdev->phy =3D devm_phy_optional_get(dev, "sata-phy"); + if (IS_ERR(hsdev->phy)) + return PTR_ERR(hsdev->phy); + #ifdef CONFIG_SATA_DWC_OLD_DMA if (!of_property_present(dev->of_node, "dmas")) { err =3D sata_dwc_dma_init_old(ofdev, hsdev); @@ -1171,29 +1182,26 @@ static int sata_dwc_probe(struct platform_device *o= fdev) } #endif =20 - hsdev->phy =3D devm_phy_optional_get(dev, "sata-phy"); - if (IS_ERR(hsdev->phy)) - return PTR_ERR(hsdev->phy); - - err =3D phy_init(hsdev->phy); - if (err) - goto error_out; - /* * Now, register with libATA core, this will also initiate the * device discovery process, invoking our port_start() handler & * error_handler() to execute a dummy Softreset EH session */ err =3D ata_host_activate(host, irq, sata_dwc_isr, 0, &sata_dwc_sht); - if (err) + if (err) { dev_err(dev, "failed to activate host"); + goto error_out; + } =20 /* Enable SATA Interrupts */ sata_dwc_enable_interrupts(hsdev); return 0; =20 error_out: - phy_exit(hsdev->phy); +#ifdef CONFIG_SATA_DWC_OLD_DMA + if (!device_property_present(dev, "dmas")) + sata_dwc_dma_exit_old(hsdev); +#endif return err; } =20 @@ -1205,8 +1213,6 @@ static void sata_dwc_remove(struct platform_device *o= fdev) =20 ata_host_detach(host); =20 - phy_exit(hsdev->phy); - #ifdef CONFIG_SATA_DWC_OLD_DMA /* Free SATA DMA resources */ sata_dwc_dma_exit_old(hsdev); --=20 2.55.0 From nobody Fri Jul 24 22:17:37 2026 Received: from mail-pf1-f171.google.com (mail-pf1-f171.google.com [209.85.210.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 666607080D for ; Thu, 23 Jul 2026 00:12:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784765534; cv=none; b=vBC112Bk7pSsOF+QaCys+WfWAyA7KL5DDNWz68a7bpaOJDQ35KgWcpzUSOrHACqsjCTW+MREW5W8LS/3InDClJL8zi4qEWxHJx8DdJMSvJ6tExANSYp+kfN5L+i823mTIi4DoasRfRrKaDAL1AzykoHxyHbAReOaHPxO8/1lQ6Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784765534; c=relaxed/simple; bh=R6VFjLoew43DjorRPLUqnwrrULmQKOSLr1IATedYfOw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JqbvT2Jbr19NA/iqGYdUe5uQlSA29eEBtW/FN2l85zdjqWoz0uMiQ+zjnicC8uZtoqva1DZiwkh9dFTFScmtlfY5k8y5VhLNCa0cWSiD8UYDoBCEqh54Ga1HdhDR+j5Mgut9d2Q9KzMFr6io8K7jls7Aru60RHgKdAtQEnwmb20= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=TKrw9zN7; arc=none smtp.client-ip=209.85.210.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TKrw9zN7" Received: by mail-pf1-f171.google.com with SMTP id d2e1a72fcca58-84830c774a0so38600b3a.1 for ; Wed, 22 Jul 2026 17:12:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784765533; x=1785370333; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=UtrGfCC98mn5vA02LN8CzZjl6C4GThAo3sAWaEwlL/c=; b=TKrw9zN7BAD5MBRy76xG42MgtE6/wv0jrA2jDJxTmv9g1ejQsPAFHzoI9QAkivpufH lbNxp8NkibG5KmHCPdChNdz/eUoXWC8J951YEuZIo+ZdnBuZkfu9yT91/+xYAFmVK1BS y942HtFIqlVORWwFaFfy0/8DPsNxcGXbXj8FX4eBrkFPsgP77WpKpnTWQrAjtATY6zY9 0oOxfhxS0/tt6mdLjUHvckiEO0a1I/VWsWzwR1fCYCpSDtHMueePOYwOBLlsLBAUXm4I O0KJ6mKrCE9+UJUR602Eye3CTJj2mWzUIGaK4GPWwuFMp+Gp67inXhx4WkyHhlxbF2Kc KYRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784765533; x=1785370333; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=UtrGfCC98mn5vA02LN8CzZjl6C4GThAo3sAWaEwlL/c=; b=P6TceCRjKiM9q0uN+NHq6SDoHrPVAz9e3F4oN/ZAKvxa1qdMH/WPs/kYxa59jMpDLd P3T4r1sfUf+UuaJ9icmMjkmVsPL16pnx1Cj5CVFMQFzCQrTfQc8tVsyiI90G4WPjDv1l vKD6luUBPw4WezHXsVEn9jur5+hIeS8EKMV1XW2UrHg2E7MWlAPquyylgnuRccqji9OW QA8D/o2JZp/OOgNvXYsmAK65Iz5fZC1KGoZK2orX7ILY5MNIIvVTtXyv6uGTF9rUFXe0 ZSQ3xLYPY4yIVQxqJ/novnv2WiCHtCB8ZHdsAZVkd+Gb6mBNIPzB/eBQu3AZy/6/Rf2o 8jJQ== X-Forwarded-Encrypted: i=1; AHgh+RpV8Lip2uk7NDaLUdS6FrLYjQnlsTa+Og4Xn752wtPPEqX9L62bPjru4AGW1eIu3XF392Gqww9R39Pf/R8=@vger.kernel.org X-Gm-Message-State: AOJu0Ywk0nE57CEKyvB5mCKQRVaTVMdKJWc5Cld2mtHaB8qCKcEuym8y bhJeNopMDEa9+vY0Qn/cKmb8DDf6GfItrnZLK910RY2JeCtytnr9oK5o X-Gm-Gg: AR+sD131avsN6QtBzZH9/cwwMmD3GB241p2Cp4GNX3/CM9oLCklkMiICn60zxen2c1O J9CrPqwP4+1vdHkqOjLJEX+ls820rVWMW7G7tpZ5CLv1Eb5fagAFYbOtHaOnjddLairWZrIzAF/ dUkpMysrIIg9vdJw109Lw7NmQUcVm6YFGkYCQs6RRQ0C1U3nRiGp80IM9uXymzkhPGUq/ASFQd2 wBJ2e1C0S43Y3ewGzW/Id0SOEnTRlLylJxT75UHM1pUdkIA0i4yAK/ds9hHKcLuVTNw3VaNGsqN OYpRUoVhr5CdH35TQqazbntjHzdgqTaM3vwYbV8n6MXsDRyMQyIthKWivGYN2wMKAzVzdgbGXsG Ye+0Az0lgsfIYBCJQruH/BHMFWAxMlmnRePu6YrGChZRkGCxFvyRqSfHAuUAzEP2QpmToZ7aAtE 8e/7Nr4ST4BuCPS3ojq62aUgIM42cI6WmsDfqk/xYBM202s+vF2JzkZZpNs3X29TccYgoaYa0aE G+ROCJQFXv1XRYOA4gynY9sf9lY85ERHTkXvLMj3jApqwVSavxbkWOak8MssxkP0Q== X-Received: by 2002:a05:6a00:ba02:b0:84a:2dcb:5ace with SMTP id d2e1a72fcca58-84e2bbe9067mr1043464b3a.62.1784765532727; Wed, 22 Jul 2026 17:12:12 -0700 (PDT) Received: from ryzen.lan ([2601:644:8000:7a86::e35]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84e1760025esm2037253b3a.57.2026.07.22.17.12.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jul 2026 17:12:12 -0700 (PDT) From: Rosen Penev To: linux-ide@vger.kernel.org Cc: Damien Le Moal , Niklas Cassel , Tejun Heo , Mans Rullgard , linux-kernel@vger.kernel.org (open list) Subject: [PATCH 2/3] ata: sata_dwc_460ex: fix data race on hsdev->sactive_issued in interrupt handler Date: Wed, 22 Jul 2026 17:12:07 -0700 Message-ID: <20260723001208.1469323-3-rosenp@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260723001208.1469323-1-rosenp@gmail.com> References: <20260723001208.1469323-1-rosenp@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" hsdev->sactive_issued is written locklessly in sata_dwc_isr() before acquiring host->lock, while sata_dwc_qc_complete() performs a read-modify-write on the same field under the lock. This creates a data race that can corrupt NCQ tag tracking state. Move the zero assignment inside the critical section so all accesses to sactive_issued are serialized by host->lock. Fixes: 2d20da00c324b ("ata: sata_dwc_460ex: get rid of global data") Assisted-by: opencode:big-pickle Signed-off-by: Rosen Penev --- drivers/ata/sata_dwc_460ex.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/ata/sata_dwc_460ex.c b/drivers/ata/sata_dwc_460ex.c index 8a1d80ac906a..73bacdfd0bd3 100644 --- a/drivers/ata/sata_dwc_460ex.c +++ b/drivers/ata/sata_dwc_460ex.c @@ -465,9 +465,9 @@ static irqreturn_t sata_dwc_isr(int irq, void *dev_inst= ance) int handled, port =3D 0; uint intpr, sactive, sactive2, tag_mask; struct sata_dwc_device_port *hsdevp; - hsdev->sactive_issued =3D 0; =20 spin_lock_irqsave(&host->lock, flags); + hsdev->sactive_issued =3D 0; =20 /* Read the interrupt register */ intpr =3D sata_dwc_readl(&hsdev->sata_dwc_regs->intpr); --=20 2.55.0 From nobody Fri Jul 24 22:17:37 2026 Received: from mail-pf1-f176.google.com (mail-pf1-f176.google.com [209.85.210.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A8BC217A31E for ; Thu, 23 Jul 2026 00:12:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784765535; cv=none; b=b+wKtMtrNp55NWpnMrGvg7pQZ8zNsNsg4ntEmkpmwnCT4EuT0XQJOiqxx2zDQQFr+LXQIBEX5foC5ldvgFltnyCnxBwuOXk/PvIhUzpKBLuXJZhY93zHf9QUlkEgqmetdFB+hU6FrRF+WDrM8YdPPhiUZ4bKPFN6mTPS77qUd8w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784765535; c=relaxed/simple; bh=zxRUk15QyHPFIW7BYoJeqVqYzLOlUGbNStHDtvvRUCY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SZ62FOJ/JMNG8Q1zCxu0hnXOSwGrSt0VpSlQnwff9qf5Qs7eEEEedOXHdirjEfSP7aUFopjuvCHMDJECzrxDQnY67syuFHdO5d7sxZO0xmSXW0vHNbqTOnbA3FtzKQBrQKvgZZmRunlHjmDHs1gZ8f1PsgSi7YarmjGd0yW0/ts= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=YzsRurnk; arc=none smtp.client-ip=209.85.210.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="YzsRurnk" Received: by mail-pf1-f176.google.com with SMTP id d2e1a72fcca58-8423f236418so31526b3a.1 for ; Wed, 22 Jul 2026 17:12:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784765534; x=1785370334; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=oAzbfKn4mKCc6pS6016P2/PNkoC0SU+3zIwIGVc8iJo=; b=YzsRurnkln2k3NoKl7Ct7kpqM6+bdz/bwyfvgy5yu3U35CBmpVW6L8MIc/ByK0UN9x RNpj6INYRUtZ6vh2rFCR9BFbbCwkXxKNq4ktQzQlE3arp6k6SW9y/afNAiI9txhNw9oV bLidmaNkItyxuZzh5ezMDKH8LqCqanSLF9b2lLhsUrv+Pri9WjdcPC0EXTi5Xjajx4GC nDi5/cHrYXt87vTKTfBpdjcTBNmU7cuYfwJGAptw200eSwwf8KqObrYJVyXeFgBvR3b9 2EEQh6E/aCdob1++R2Tddc4+BDwAN2OUXtjFA1Z7EX2PXVgNQGciTRYIMT9a0F5SFrVQ lYrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784765534; x=1785370334; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=oAzbfKn4mKCc6pS6016P2/PNkoC0SU+3zIwIGVc8iJo=; b=DF2dmT5JJ8K0FMvVwXWS8YSXV9RG6WQUwIDmEMICo7tqpH1eiJUmSnHNT+1+zxl10e HPqxjquvF/0bi4+H9OXDS4HvQ8ca+63IPCcdqU4jLr4IPYOp+C6/Rdjb5hxSV2VK9Ppn AdS6oTFoJHQal9+XVAqFiJREYX3HYsVkZSK86dgFn45sqgWJRFu768df1tSw2VBzvGOh YLjXv2YqgDllTJ/Q2KHbFvAEy+NjVag4Gu0PNWzOc4xoAKv7z1hqB9p3lC+usWs1e70p cCH7Xlm2mCgsLlP6eV3LAQjKfRnZ74pl9N3DDFb4RKZfKPuG5+WbZKeQ4RGwSytKAi9D Dpiw== X-Forwarded-Encrypted: i=1; AHgh+Rq5ZsvBJeyVX4AmP66L1D/WJNeTq0kGG1NavKkcjRjGMbTdtij/tulmsHmjLVCWuOJNv88xaMYUJZTut8o=@vger.kernel.org X-Gm-Message-State: AOJu0YwOamiGiOV2t0hbv6TBl9Iw0LR6AIRL9UWyYl5MUhmi9M4LkplL 7XR2uj7fGpUcRjzb3a9hLVK2dK1iogT0GEMELh1VUHqlMR8I4tRKYhdwwGiaTQ== X-Gm-Gg: AR+sD13JgT0YL7rZNViPMJGOvjMDJrzTqFtFUtESQHnS031ErvVWoLyuIcyPKE+2553 admesc3eLoG0pdlu0qEp2f4uwozpmj7T2h6dCy5gBjGv8GTMCT5BrnTleS/VgBQOeymzuphrPIj 6MMagwfMzEZGmAR4O63AT6pyPEJ7Bk7t+dJbCpneNeK9bsJnmHe1eNMMA7B//bP2dyCFQPDuW5l Cvy07nvuSlvxq0ibSG+mANWKKGkHlInO08Qaz7mwWoKaASPFqdvxogWtDkcL+wCeUVwvIsG9dze fZfIrnbQQ2qMVdhx4P2Fvb4IuvfEc+YgpYO9+0NRjpNH5sKLQzLO3za3RuOERT95Kl3xsfwwR6v HuJEFMMXk5BG12+y71TM4ISd0uBBDRraUs6G1fEAHDVGZdbjnVIojj5Qv+Fy7B63QSuoLff/ARq Lc4yXHTW8YphPrimATmJsVyKW6tcZoBPTza3oByBS2PMqsHrtb3cBThoCDOQ0XhdE3uJiSacnZx g3diOB0U6ERWDJNPH31yWt+9/DPPskyX14VasQMAz4Sy/bjG2jVSQH+8JwGRc2XuQ== X-Received: by 2002:a05:6a00:1884:b0:845:c694:5c3d with SMTP id d2e1a72fcca58-84e2b82f716mr1169441b3a.1.1784765534135; Wed, 22 Jul 2026 17:12:14 -0700 (PDT) Received: from ryzen.lan ([2601:644:8000:7a86::e35]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84e1760025esm2037253b3a.57.2026.07.22.17.12.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jul 2026 17:12:13 -0700 (PDT) From: Rosen Penev To: linux-ide@vger.kernel.org Cc: Damien Le Moal , Niklas Cassel , Tejun Heo , Mans Rullgard , linux-kernel@vger.kernel.org (open list) Subject: [PATCH 3/3] ata: sata_dwc_460ex: preserve sactive_issued state across ISR invocations Date: Wed, 22 Jul 2026 17:12:08 -0700 Message-ID: <20260723001208.1469323-4-rosenp@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260723001208.1469323-1-rosenp@gmail.com> References: <20260723001208.1469323-1-rosenp@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Zeroing hsdev->sactive_issued on every ISR entry destroys the NCQ tag tracking that must persist across interrupts. This field is populated in the NEWFP (DMA Setup FIS) handler and used in subsequent DMAT (DMA Transfer Complete) interrupts to determine which tags have completed via the formula tag_mask =3D (sactive_issued | sactive) ^ sactive. With the zeroing in place, sactive_issued is always cleared before a DMAT interrupt can read it, so the NCQ completion path never identifies completed tags correctly. The command completion then falls back to the non-NCQ path using ap->link.active_tag, which works for a single outstanding command but produces wrong results when multiple NCQ tags are in flight. Remove the spurious zeroing and fix the NCQ/non-NCQ discrimination: when tag_mask is zero but the active command is NCQ, all tracked tags are still in SCR_ACTIVE and no completion processing is needed. Fixes: 2d20da00c324b ("ata: sata_dwc_460ex: get rid of global data") Assisted-by: opencode:big-pickle Signed-off-by: Rosen Penev --- drivers/ata/sata_dwc_460ex.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/ata/sata_dwc_460ex.c b/drivers/ata/sata_dwc_460ex.c index 73bacdfd0bd3..025b5d968c78 100644 --- a/drivers/ata/sata_dwc_460ex.c +++ b/drivers/ata/sata_dwc_460ex.c @@ -467,7 +467,6 @@ static irqreturn_t sata_dwc_isr(int irq, void *dev_inst= ance) struct sata_dwc_device_port *hsdevp; =20 spin_lock_irqsave(&host->lock, flags); - hsdev->sactive_issued =3D 0; =20 /* Read the interrupt register */ intpr =3D sata_dwc_readl(&hsdev->sata_dwc_regs->intpr); @@ -517,8 +516,11 @@ static irqreturn_t sata_dwc_isr(int irq, void *dev_ins= tance) sata_dwc_scr_read(&ap->link, SCR_ACTIVE, &sactive); tag_mask =3D (hsdev->sactive_issued | sactive) ^ sactive; =20 - /* If no sactive issued and tag_mask is zero then this is not NCQ */ - if (hsdev->sactive_issued =3D=3D 0 && tag_mask =3D=3D 0) { + /* + * If tag_mask is zero and the active command is not NCQ this is a + * non-NCQ completion. + */ + if (tag_mask =3D=3D 0) { if (ap->link.active_tag =3D=3D ATA_TAG_POISON) tag =3D 0; else @@ -534,6 +536,12 @@ static irqreturn_t sata_dwc_isr(int irq, void *dev_ins= tance) handled =3D 1; goto DONE; } + if (ata_is_ncq(qc->tf.protocol)) { + /* NCQ commands still in flight; no tag completed. */ + ap->ops->sff_check_status(ap); + handled =3D 1; + goto DONE; + } status =3D ap->ops->sff_check_status(ap); =20 qc->ap->link.active_tag =3D tag; --=20 2.55.0