From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (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 50B1A31354F for ; Sat, 11 Jul 2026 20:42:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783802568; cv=none; b=U8mmqZFRfCRTCbrlQt8WS+a+CJhri2+iKY+fXNDu7BtCxPKxuSYIxI7WSVyQ6G4z1rXeP4TLO+kA0DPvnHYZX1r7LIMcF4ztFSh+m9tj9tkIcFpGSNYE9y3XdNkvcF2grcDt3d87KfKQvVszkp6RJd4YD0x+4G1WKFeXNMEQN1I= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783802568; c=relaxed/simple; bh=Ks2eP/cpFMNIiN5iTQ0FeCLHneQLovfhgH+//9ums1M=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=N+8lMLad7fAsyR/XLwhhXZBoqXTMrkiNV/ThPhx3HgpqSupnZLjWI57Eob6PWl95jFz4vEHEsv+G458K8X3MESmKrK0k25JEsNfVZKul+HzNbAQqzZVjA1CuU/gwf66QVA4jL8FANgCnTHMOLwyHGDFfHUvm+SarftR1FGWGPVg= 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=bvNcRQTV; arc=none smtp.client-ip=209.85.128.50 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="bvNcRQTV" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-493c7902f47so17912565e9.1 for ; Sat, 11 Jul 2026 13:42:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783802565; x=1784407365; 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=OR+gVYl7lNIahaA/xS643KgVQohpeipjmcrGmazJ6MU=; b=bvNcRQTVVw8n7mMb16mUwF1RBVaHYV+09ypgkxTkb1FOPa6kuMof7CgQv01ABJeDKW tvPKp0HatvIkDf8fjvxfIwsBfQQeupcXo3ufOnXhw8VbuxEINFk7Qo3tIzdV3Tc5Pxyl CAQ/IjJfbzRwQGYZPx+ME8bSVhR1vt/m7jZKKmlyatqChpD3KaQr7MVcGBg+8v5+zFYL eZUIW/jh+zTENTDlBJpzN4pzZHoATWhJAo1Hz1YDnygOakMjnFzPmYZpJBuReJYhdT2Q DM8U1wZ1SCyATKfSSI0gfmMrNsW4pUczv0EL8davQJbS0JCJiTPtadxPHRlNuj7X9/f9 t1Ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783802565; x=1784407365; 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=OR+gVYl7lNIahaA/xS643KgVQohpeipjmcrGmazJ6MU=; b=RoryVkoOIk6aHcuE7J+z36xjTlVDAlSYgqk2cqB9OvH0npH9klL/ut2GITnJQM1DbX CDBOvwEqmbrr0QfNJMwgdsM0+FH9+nGGqjR3kcTnabPRxwwbSdc4cmOE8ggTLWP65efU uskD4dUUhc9hJfKDqZbhwNChd72UFf4EMNxuYS4O6c4K/PtMSDKkUcbVYvFPYrXOv30R ljLPokYN4FlGslSMDNxZZ4SjtOq2+17OUkxsyIFznWoq+57xpSwQXhjdHT19/UwY1GuV dh6iPv2cY0+E74Myzn8dys04HvM9RyUZAojaHoKw70JY5OjPAtCEyFlX0veLOnGTTB9y 3LJg== X-Forwarded-Encrypted: i=1; AHgh+RouUJjtqpa70Mr/V65mqU3muL5irlT0HNgMDGF3quFGU9/si0OQ7KBtfHtkXIZ9USoyrVNXOYYe2OKEaZI=@vger.kernel.org X-Gm-Message-State: AOJu0YxSH0xfWXkbwGTN0R+fxFW7sGuUcDlsA1xyPGULe0BJsmVlUrI6 4YFjcQHNCC0eI/j349Go7DzDDaRUUDtUwBrso7xL+U9N4gISzTZKhmj9 X-Gm-Gg: AfdE7clFRDOiiGUdqabvuhE4Zi6Wu4OxVw+5d71ZmZUE2hL6aINM6W8TrLns16lhjec 6dDwlf80pwHEpX/V5cPCOE9692M+HCp9TWNlrl+QjtMk3KgYCfPS45MJuNapUui8ondhiDt2v9L 6Js+oPwGtEubMfVB1S1lo7Y4Y+K2fhm/9qjFLaog/VrYcfEa53ypCR+i69pe5IPuQVPEM5HizAM +7zswqd0xdkMXE1eWdV5Mv5goECOLCvuLdKDgfS3U1M6OGqm+yOVnYR8K7F55bNHsWIAhOyOSrB T845n2BbCjZGqvlOWN6SUB9tqq0dGI7tR9PdqIKX0IU/9xPBMeH6K+9NC8JheguAI5K2ch3f0mu W+pgBFdrh8gNAIwtQBNcSW6m7DTgmsR0DWIMek+e3fiVIrQcsTWLA8L3E8l+6qHJhr/FPEqYy3B OBq7CGmIWxE/TQ2XVzJ+sZ7AGWQurFcYXNTNipTLWIfHwv X-Received: by 2002:a05:600c:46ce:b0:493:bc92:ef45 with SMTP id 5b1f17b1804b1-493f8820951mr35073795e9.24.1783802564720; Sat, 11 Jul 2026 13:42:44 -0700 (PDT) Received: from localhost.localdomain ([95.43.220.235]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-493f2d97527sm172704725e9.2.2026.07.11.13.42.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jul 2026 13:42:43 -0700 (PDT) From: Ivaylo Dimitrov To: Vinod Koul , Neil Armstrong , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Aaro Koskinen , Andreas Kemnade , Kevin Hilman , Roger Quadros , Tony Lindgren , Linus Walleij , Bartosz Golaszewski , --cc=linux-phy@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-omap@vger.kernel.org, linux-gpio@vger.kernel.org Cc: Ivaylo Dimitrov Subject: [PATCH v5 3/7] phy: cpcap-usb: fix IRQ teardown race Date: Sat, 11 Jul 2026 23:42:06 +0300 Message-Id: <20260711204210.197144-4-ivo.g.dimitrov.75@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260711204210.197144-1-ivo.g.dimitrov.75@gmail.com> References: <20260711204210.197144-1-ivo.g.dimitrov.75@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: 8bit there is a race between IRQ handler and remove: IRQ thread: ddata->active == 1 remove(): ddata->active = 0 cancel_delayed_work_sync() IRQ thread: schedule_delayed_work() The IRQ handler can therefore queue detect work after it has been canceled during remove(). Free the IRQ handlers before canceling detect work to prevent new work from being scheduled during teardown. Reported by Sashiko Signed-off-by: Ivaylo Dimitrov --- drivers/phy/motorola/phy-cpcap-usb.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/drivers/phy/motorola/phy-cpcap-usb.c b/drivers/phy/motorola/phy-cpcap-usb.c index 7cb020dd3423..741145c89e5b 100644 --- a/drivers/phy/motorola/phy-cpcap-usb.c +++ b/drivers/phy/motorola/phy-cpcap-usb.c @@ -393,6 +393,19 @@ static int cpcap_usb_init_interrupts(struct platform_device *pdev, return 0; } +static void cpcap_usb_fini_interrupts(struct platform_device *pdev, + struct cpcap_phy_ddata *ddata) +{ + int i, irq; + + for (i = 0; i < ARRAY_SIZE(cpcap_phy_irqs); i++) { + irq = platform_get_irq_byname(pdev, cpcap_phy_irqs[i]); + + if (irq >= 0) + devm_free_irq(ddata->dev, irq, ddata); + } +} + /* * Optional pins and modes. At least Motorola mapphone devices * are using two GPIOs and dynamic pinctrl to multiplex PHY pins @@ -691,6 +704,8 @@ static void cpcap_usb_phy_remove(struct platform_device *pdev) int error; atomic_set(&ddata->active, 0); + cpcap_usb_fini_interrupts(pdev, ddata); + cancel_delayed_work_sync(&ddata->detect_work); error = cpcap_usb_set_uart_mode(ddata); if (error) dev_err(ddata->dev, "could not set UART mode\n"); @@ -698,7 +713,6 @@ static void cpcap_usb_phy_remove(struct platform_device *pdev) cpcap_usb_try_musb_mailbox(ddata, MUSB_VBUS_OFF); usb_remove_phy(&ddata->phy); - cancel_delayed_work_sync(&ddata->detect_work); regulator_disable(ddata->vusb); } -- 2.39.5