From nobody Tue Sep 29 05:34:06 2026 Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) (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 DC8243BB11A for ; Tue, 11 Aug 2026 21:20:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786483235; cv=none; b=HD9A7bUZRY5Zi8Dk9rYJxhpWlWYp5wPRpkQ/oucp/3wk/8ABky58GjbVjsIRslzQkVW2GITAm8t7+xO7D3aJdS3hRfkRfbLW3iM5g3TJeemTfK0Xha8MsxP25CeD2zuNZ6A1RWXbevNY7GPcp8V4XsLHKK3LsciscorLX7afIVM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786483235; c=relaxed/simple; bh=59HySrGh0wkTlRznQMiEAoSLvYm4uJIFTa9mxas83m8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IoGnWPwUxVt0PHjL/p/McYEYl6ylbawJ7QodrmsbqgNwDkTS2d56CD3ZJJUDQAnRPdS96YLTuH5Rl5ZJzvMpyraLDMuK+WdQuzCK4vAMlK2mY6ifB28NRfa0CKN7AiZH2kACQHvlhhdj+53M76gey2soqdThgF6RTkDcBktLgxo= 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=qPbQYEYt; arc=none smtp.client-ip=209.85.214.175 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="qPbQYEYt" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-2cee9b74ee1so3360025ad.3 for ; Tue, 11 Aug 2026 14:20:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786483233; x=1787088033; 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=VMlE7iyQxKkbltuLSXml3jBS6nzbSIIQJp7mD4q4ahg=; b=qPbQYEYttaGBX4WFopHwTTC4No21K5/vbATtakJhPm1cxh04AJTbkf/KkLl59N3pgi pBCEJgwjl3WO0g/4vWNQOVGtW5Cudcjhunm8+Ud/tPUNM5gw9sCaJ9JJ5uMX8ba5VTLQ O7i/7c3l7810GoCcFiAxuPKE33bJtWbOcRYhtwROvNKAVOPV4VrNy73tSuQQj7iQCe0F Tyzhp0DPtd3fLugJ0h1Lx4RcZnYE3hj46+POgq90hti64sN2DWWyoGciKVWLaan8XN14 ji03z0dDidiZg9gfaF7RLyedWEVOTfHOtXejA0epIbaN74sO6WR2QeJI72DeuFQsfRRC aNMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786483233; x=1787088033; 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=VMlE7iyQxKkbltuLSXml3jBS6nzbSIIQJp7mD4q4ahg=; b=R9q1dYsYGAareGEqpsMaZWaI8bkCcnlnVXFwy1ZyZtYgkH5YBjlkpyKHW07VvReUQQ UlmcUOJXTGoc4Cqg7kkWGQwjBYP5iqV+7evN7qhjLQXs0JdjBrZF5SJqsJWAvCRedz2T gi8uCw84iR1FCq56PtXDTLjWsu+QcWvcsPPmgGLW7F3qGRa+1ItW4NuBFQ4UhUedL4pV H4FG/cny6deVX6E3oRCOULcm3t+PmrZi15eSj30+jkwZsjidHFfPD7tOPo+WTze7h7br cPbUvt/Hw+4uqP36OVmcCcvrcWKBtWU9+XNL3NrYkGVTe4Mt2GemMh3wmdr4Nk7OzF18 UjYQ== X-Forwarded-Encrypted: i=1; AHgh+RpdLhs19f7IekEzQjdzb237XjIXQ/It46DoKDv/GCgJo9ZR3aeFH+K6nfGYgxbIxd9BZFutgw0lCm/ZDhg=@vger.kernel.org X-Gm-Message-State: AOJu0YykvqHa7JJHtMHCE0UJblcKQ4geATWkr5JriCeBvkeg2ZRBNZWw /C4p2NmttGVRgv5ZqhBCqQ/UFPwk0IdC4PVviowNflPgXv8KvHwdUdub X-Gm-Gg: AR+sD12W/qwHdyHmNAJl0gPzbxqX/xoiuJ67aYNcdCuX3ngrFf8gADEaTGI2SvQo/8G RmFvmF9CCKWE/GDkJSpB4VtPJecur3P9FverN+38mC9P7nfKL33+QFFp+JskNCQwdmQLWNqZ65X mzASX5pKx8McIz4rvCInNIc+zI5S1ZlBQVbosEVRaIO+EqJI/1sB/xaOUUPDOWo6nSVgMohMYzP fSn2quU61ox5d69UtVXzoFQAWLehkQUExNEuC9VCGzB2n9H4d8okANPEpr02fDR47GFouv6tcVD RLjdfU6wAxbJPXhTww5KzTbvmo6qHLRmo8T2fWagIoag6By+gBFWmHhX2KJ25SaV/wfz0CxtFfG TfIh1b+HbKWa/OgsTyEdC/urRi5hU8Vne8oiUo67pOz01ijC4Zl8t6rN9pVRtUJEKAut9x8yBgS fGEnhuoeo390AjgJ0VKUGLZpbp1J7kgnHcFtHp/MmTuWHUIbSL44lYFS9FqMLiqOMW+uvSzibCM IeVmzCGJLvQGR7WHFIqqXT8EEXVY4SWkUhkOz8luDqY2Q6kskKRwGLeqDmHNEDB6iQF6Xwv0a+7 2LS34NXPx6SuXuh/2EuILByXGGs0cT1um2Airw== X-Received: by 2002:a17:902:d48f:b0:2ca:6c8:abd8 with SMTP id d9443c01a7336-2d34569b410mr3686125ad.12.1786483233132; Tue, 11 Aug 2026 14:20:33 -0700 (PDT) Received: from ryzen.lan ([2601:644:8000:7a86::e35]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2d315f2e10dsm12605465ad.23.2026.08.11.14.20.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Aug 2026 14:20:32 -0700 (PDT) From: Rosen Penev To: linux-crypto@vger.kernel.org Cc: Herbert Xu , "David S. Miller" , linux-kernel@vger.kernel.org (open list) Subject: [PATCH 1/2] crypto: img-hash: fetch resources into locals before probe body Date: Tue, 11 Aug 2026 14:20:29 -0700 Message-ID: <20260811212030.20057-2-rosenp@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260811212030.20057-1-rosenp@gmail.com> References: <20260811212030.20057-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" Fetch the IRQ, iomem resources, and clocks at the start of img_hash_probe and assign them to locals, then copy into hdev after it is allocated. This keeps resource acquisition together at the top of probe and allows direct return instead of having to use goto. These can also return -EPROBE_DEFER so that helps to avoid pointless work. Assisted-by: opencode:deepseek-v4-flash-free Signed-off-by: Rosen Penev --- drivers/crypto/img-hash.c | 65 ++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/drivers/crypto/img-hash.c b/drivers/crypto/img-hash.c index 1ccfc0eccc73..f7265347901c 100644 --- a/drivers/crypto/img-hash.c +++ b/drivers/crypto/img-hash.c @@ -923,9 +923,37 @@ static int img_hash_probe(struct platform_device *pdev) struct img_hash_dev *hdev; struct device *dev =3D &pdev->dev; struct resource *hash_res; - int irq; + void __iomem *cpu_addr; + void __iomem *io_base; + struct clk *hash_clk; + struct clk *sys_clk; + int irq; int err; =20 + irq =3D platform_get_irq(pdev, 0); + if (irq < 0) + return irq; + + io_base =3D devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(io_base)) + return PTR_ERR(io_base); + + cpu_addr =3D devm_platform_get_and_ioremap_resource(pdev, 1, &hash_res); + if (IS_ERR(cpu_addr)) + return PTR_ERR(cpu_addr); + + hash_clk =3D devm_clk_get_enabled(&pdev->dev, "hash"); + if (IS_ERR(hash_clk)) { + dev_err(dev, "clock initialization failed.\n"); + return PTR_ERR(hash_clk); + } + + sys_clk =3D devm_clk_get_enabled(&pdev->dev, "sys"); + if (IS_ERR(sys_clk)) { + dev_err(dev, "clock initialization failed.\n"); + return PTR_ERR(sys_clk); + } + hdev =3D devm_kzalloc(dev, sizeof(*hdev), GFP_KERNEL); if (hdev =3D=3D NULL) return -ENOMEM; @@ -944,25 +972,12 @@ static int img_hash_probe(struct platform_device *pde= v) crypto_init_queue(&hdev->queue, IMG_HASH_QUEUE_LENGTH); =20 /* Register bank */ - hdev->io_base =3D devm_platform_ioremap_resource(pdev, 0); - if (IS_ERR(hdev->io_base)) { - err =3D PTR_ERR(hdev->io_base); - goto res_err; - } - + hdev->io_base =3D io_base; /* Write port (DMA or CPU) */ - hdev->cpu_addr =3D devm_platform_get_and_ioremap_resource(pdev, 1, &hash_= res); - if (IS_ERR(hdev->cpu_addr)) { - err =3D PTR_ERR(hdev->cpu_addr); - goto res_err; - } + hdev->cpu_addr =3D cpu_addr; hdev->bus_addr =3D hash_res->start; - - irq =3D platform_get_irq(pdev, 0); - if (irq < 0) { - err =3D irq; - goto res_err; - } + hdev->hash_clk =3D hash_clk; + hdev->sys_clk =3D sys_clk; =20 err =3D devm_request_irq(dev, irq, img_irq_handler, 0, dev_name(dev), hdev); @@ -970,20 +985,6 @@ static int img_hash_probe(struct platform_device *pdev) goto res_err; dev_dbg(dev, "using IRQ channel %d\n", irq); =20 - hdev->hash_clk =3D devm_clk_get_enabled(&pdev->dev, "hash"); - if (IS_ERR(hdev->hash_clk)) { - dev_err(dev, "clock initialization failed.\n"); - err =3D PTR_ERR(hdev->hash_clk); - goto res_err; - } - - hdev->sys_clk =3D devm_clk_get_enabled(&pdev->dev, "sys"); - if (IS_ERR(hdev->sys_clk)) { - dev_err(dev, "clock initialization failed.\n"); - err =3D PTR_ERR(hdev->sys_clk); - goto res_err; - } - err =3D img_hash_dma_init(hdev); if (err) goto res_err; --=20 2.55.0 From nobody Tue Sep 29 05:34:06 2026 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.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 154684334C6 for ; Tue, 11 Aug 2026 21:20:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786483236; cv=none; b=b6Wya2ub9MQHKt1z3sgxOUA6LLpzDdXG0bWdtYkESIP2onJYelu6hkrfJtInH81gquXX22CjE4RiGYtVn95rhUFCq0WPDqKd5sUb31Nzl7k/7/BhuVd4OZckx3fQkSRQ7C9e2MAPpm8AnvXLccQsjkIX7+brfUf1teSw6SG8nNw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786483236; c=relaxed/simple; bh=y4Dlb8ww/ed8rWZEaIPfqD2tENd23+yx1DjCsHqI+so=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jjz/1xeU6EeF4LQ41S75vRozT4nfhQMV5uio0OGU9HUHPu4/Fr+e1JxozfxUUt8Y7tN9dE4BfME2pjprkECKcaAIFJd9QgbDwVwPitKb4oupzjx1ApBCdxVGLb85OVYewvi/Mn3ufcUgceFCWSN78M7eEIn2sDyclz09s9MOjWo= 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=r7dZHyaJ; arc=none smtp.client-ip=209.85.214.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="r7dZHyaJ" Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-2cab973140bso7103955ad.3 for ; Tue, 11 Aug 2026 14:20:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786483234; x=1787088034; 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=TTlAMEE9ZBs5bbNdSTHaN1m7xGP9tQTBD2X4N04RR5g=; b=r7dZHyaJVNEz+/vfgrLK46KDpRZh7cfm/rW1eMIgaTUMfQ8WwnMpB8AE7AwIMvyBQs viLcqU0kDQH526/6NClGDFEIe9naUnEpWJ/gSSBqr/jbOZqOMUdd28ASUSmwtHdm/Qy7 nvqgnLntgDCJwGvsymT/a8v90QZ3ah9pyLyXDdaVdZLhydo/U0pskhYMIeztN3E/o/eW zP0ARAUWloFtKhqYieSI8nADlW55PC87wUrQLi+1eL77zTwhf1otyJrtIcg07SDlNetM GcMcRthElooKivbzwoC6t89xYWi5BVGd4c5rEYMENe2hU+NstKp1Qy58iopc3FnDVemn Pj8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786483234; x=1787088034; 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=TTlAMEE9ZBs5bbNdSTHaN1m7xGP9tQTBD2X4N04RR5g=; b=rzDAWo6hcIK1IMMZSs6bzXELq9OWInVd35FPkSQJBIfUQbCEIToIcwaR7WbPvMTu+I eIW8sWA1Dxg+FZyiyM7H0eYM7uMrslgeNwkpj57G27uEG1o0Damyvar3cw7AAzXzPd1m 6FaIRS7xybvHzjtNe1I+GPdzd0nsaHKh0wOLZtxn6j38FeJaMDLIAoiEjT9E4RIfx8D1 nSx+Brx7RH8r/QXgPdSxCEITI8igNs+Cfe5gv9CWIUQ3Qx0xe4Wo7sUvR27nEZ1j0gtX Xgfb9IC9HR7J7woAgrp6DQ+YwGm42AmNzDm3E1sb4e7MDpmFfFMMNdOW8W+P8ry25PzV GtRA== X-Forwarded-Encrypted: i=1; AHgh+Rrc7P6CUvLd6wofVGh6pB/UzURY5dReInYgzHuLoWBw2t8gIZpwT95hbnmsfOv8UxtQt8kMhu8rclpraaE=@vger.kernel.org X-Gm-Message-State: AOJu0YwmcWkIpq0c6Y2ZRs/kKKwqmFCSzxVR4pb3XGj/XNoy6oAxokOm NEcpLtuWIERpOmo61Yuv4ZZmkcC7n5sqU4C0o3z8P/XwunJO26o8KgTU X-Gm-Gg: AR+sD10NrzffYKUDTu6+WIIMVSWaINNf+mSduPyKFVeNROrs9sKi5JuL2pU+ocvfC7A TyK/wNUwL9lvvzRp6jpWVuDsA0LESSbE9uoEKZrbakmu1RKty0lqnk8k4gQYRjZ+t9U/hCrH7tu VFHe8aWorMx1JnoTkma7DoVkFcvnE9+vJ0ECiyj0+3OX1GBv03+/YJ8FkQJ3Z8j+FHIqfYVMHyp kNfxgpjjC9q9/2BK3oMop8yVfW5AmJsleFB8p72+3D+yGvVVFC+V7YRzz4zahs90L0y814N88BT y//sPwN4GlKaiAucBzyU02f+CyzWTubT1y2BQYhlEYtmtz1hXAiHWhWjt8KK1BqbgAFbI4Nd4WE /pyvvPJ7oL2DpFHNncD+I17vyF1qe3JDYPyzcNIkzhiq3JDGUxlCWc+0+LQUgpw8s8VVXQfkTEm vhmv0SEM4SwBDXlfKpBep/St/hfVeWzZPnqUB+laNOFH325hH4V1/X9IfE0BZqOsgyOI590eDy+ PmKzKHX30Vtp5/Pv5oojvYTEoMC1uHTmZEPf9Odo9v/Zar9qsADqEYO0EEBG1HBBVlRxgUEAMsQ jC3SylsNO6tjyn8YHm3ImRXuI5cH5lVxzvOyUA== X-Received: by 2002:a17:902:fc8f:b0:2ce:e75f:b713 with SMTP id d9443c01a7336-2d3456f5f5cmr5099095ad.23.1786483234249; Tue, 11 Aug 2026 14:20:34 -0700 (PDT) Received: from ryzen.lan ([2601:644:8000:7a86::e35]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2d315f2e10dsm12605465ad.23.2026.08.11.14.20.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Aug 2026 14:20:33 -0700 (PDT) From: Rosen Penev To: linux-crypto@vger.kernel.org Cc: Herbert Xu , "David S. Miller" , linux-kernel@vger.kernel.org (open list) Subject: [PATCH 2/2] crypto: img-hash: fix IRQ teardown ordering and fetch clocks early Date: Tue, 11 Aug 2026 14:20:30 -0700 Message-ID: <20260811212030.20057-3-rosenp@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260811212030.20057-1-rosenp@gmail.com> References: <20260811212030.20057-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" The IRQ handler schedules tasklets, so free_irq must run before tasklet_kill in img_hash_remove(). devm_request_irq only freed the IRQ during devm unwind, after remove() returned, leaving a race in which the handler could re-schedule a tasklet during teardown. Replace it with request_irq and free the IRQ explicitly in remove() and in the probe error path. Assisted-by: opencode:deepseek-v4-flash-free Signed-off-by: Rosen Penev --- drivers/crypto/img-hash.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/crypto/img-hash.c b/drivers/crypto/img-hash.c index f7265347901c..4153972ec3e7 100644 --- a/drivers/crypto/img-hash.c +++ b/drivers/crypto/img-hash.c @@ -125,6 +125,7 @@ struct img_hash_dev { =20 spinlock_t lock; int err; + int irq; struct tasklet_struct done_task; struct tasklet_struct dma_task; =20 @@ -978,16 +979,16 @@ static int img_hash_probe(struct platform_device *pde= v) hdev->bus_addr =3D hash_res->start; hdev->hash_clk =3D hash_clk; hdev->sys_clk =3D sys_clk; + hdev->irq =3D irq; =20 - err =3D devm_request_irq(dev, irq, img_irq_handler, 0, - dev_name(dev), hdev); + err =3D request_irq(hdev->irq, img_irq_handler, 0, dev_name(dev), hdev); if (err) goto res_err; dev_dbg(dev, "using IRQ channel %d\n", irq); =20 err =3D img_hash_dma_init(hdev); if (err) - goto res_err; + goto err_irq; =20 dev_dbg(dev, "using %s for DMA transfers\n", dma_chan_name(hdev->dma_lch)); @@ -1008,6 +1009,8 @@ static int img_hash_probe(struct platform_device *pde= v) list_del(&hdev->list); spin_unlock(&img_hash.lock); dma_release_channel(hdev->dma_lch); +err_irq: + free_irq(hdev->irq, hdev); res_err: tasklet_kill(&hdev->done_task); tasklet_kill(&hdev->dma_task); @@ -1026,6 +1029,7 @@ static void img_hash_remove(struct platform_device *p= dev) =20 img_unregister_algs(hdev); =20 + free_irq(hdev->irq, hdev); tasklet_kill(&hdev->done_task); tasklet_kill(&hdev->dma_task); =20 --=20 2.55.0