From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f43.google.com (mail-pj1-f43.google.com [209.85.216.43]) (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 EA53A2F1FE3 for ; Sat, 25 Jul 2026 07:25:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.43 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784964348; cv=none; b=B5XeU29N2p6d/6MO5rPWrFYAKBRtsk1CaF/l+9rbb9ZRdt8VkTUMGju8Txr89NI1DS+tJ5E8AkhdsNPgBvu89rV3wnOA2Xl90C1/u1B0/zvr1xmPsQpebJ90jmB9idbuuPPBoU0OUW6dRxbPduzr9vYl6GbpRNB+jxkj01eg97o= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784964348; c=relaxed/simple; bh=DCI7rjRmM93lutxj7+bxqQZ86jwK5qGWszKWi9ztQ4A=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=tQPI+xoYJAlTF0oDb5PJ2UAGTfwdnU1pkqK7tq6o2QjZapq7ECBxiBbLyGU3YQgtgEowZXXHw2f1FnSmiX5LOnVQFgXc5Dmtnst+CHTjh3oi9ovpwDDBZCln52JnyqX/RsG8WNptXwdfIkIzBH2nzTPWolydNoAWbQsgLiS6m+s= 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=TWqDM5mQ; arc=none smtp.client-ip=209.85.216.43 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="TWqDM5mQ" Received: by mail-pj1-f43.google.com with SMTP id 98e67ed59e1d1-38e041ea211so1195667a91.0 for ; Sat, 25 Jul 2026 00:25:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784964346; x=1785569146; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=IxN16LlGLH2WwnDJmdIskymBeU5WPj7iW8e+rfqR+5c=; b=TWqDM5mQ0LvbGO3xv90snOwBtokbv7LCbbDftiCg3HVPneK7e/7MuYwuqEiv4nLr8y FFIPec+LxtPLG+0JlJ8CqAfkQ4GdIky2EsW1WHsCsja1XJgCQ5n/clfJw542JfarLKsc 2JVNh1/X83sOBWllROG0a1dggH+TraGt0H9Zp5D34SVLIUQSS4hnCSRpzcXt4AHy4XMS 2LXYloOjGXl1v2Rk5qC0qc2j7u2XDtPlL44k8r0rZzdRnPDTvJfe0EGMIo6Kw8DT+dmC 2A/+qfVO16dOxgpbRwTc31NwPv3Wys5UUSNWT/nWPsiLz8cugpLWoo9FazMuc5nX1pt3 ubCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784964346; x=1785569146; h=content-transfer-encoding:mime-version: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=IxN16LlGLH2WwnDJmdIskymBeU5WPj7iW8e+rfqR+5c=; b=APQNQEWRU8Jm/cYTUbqtscHYAfX7fDFRD5Gy6GAviqhtxl1r2J2WLlsaYvEQCjHygo JmXIXHs2tkJO6IfMLfXWUKpTEykau+9SwB6Y8bVOcw0OGTgVTF1hvhRcBoRast78VNWp 793mmFPJ1wVgKAwpuRxmHCMN4/oSQ6rgGup5P46siFsRtlNBwJJH4IXrGnMnLQP7U99Y sY0CUVec90ha4OBLB0HQY2OAE59+xMG8+w9BXKHLA2vdi69kzhb1haXPPql19HAxXFud R92LRJXVFGPRI0a3mqqn9iTZEQmHw4CyyXSL8FvJdXpYNQYC26COIDP5+MRreO5IqSu/ mD6g== X-Forwarded-Encrypted: i=1; AHgh+RrNLI4eAh3xYRm138Lgqe69R/bdx6WGdtfc0wimrz41eP4JcqFDnNNOBRNqQjuYQgfBcgh4CKHdzYLSlwY=@vger.kernel.org X-Gm-Message-State: AOJu0YxMmIwtM7Og5NY7dI+PyYSE9cU58O4tlArIyVfVGSjjC9DfYBvN qqLMkjxQruvSF8V6PqxVbBLFGEE9YKXw0d6mLk3GUcitWBANTGAEhDo6 X-Gm-Gg: AR+sD11Vzg2uCbnvzkNuhEVfkc8JS1ZSol8agFlJNI1SQwLlrQDtwp5KmiCiwz/yA24 3Kyq9dOkRTS5HviVbxnOYmcBB0QYoP2IaEYz7qcvH4Hi0U6qmR4um0pIGN07W1PIZCQZsk+q9J0 MGM5vRwaRQI9SolyWr/hQZ0h2MPHZ1b5km6pS/b4vEUT+ysnc4NuW9xjcQTm4oVWmK4zTTIry5V 85gy710u5Stq9+PJBQFWNewbwvj14LzfGP8c/aO7GCa0oFTkxrWBCAA0BkawZXGOlGPXsby5u4y 1KaI7aviymS8yUQmzcbMOMxdkT+mtA8e+TPodm5ICxeA9d+Jb5UAMLTBd2a5xSXbZxC1bZbybqs /No5Q6JVD8FlmYJkW5f43UZytUlbpYKLTqtaza/sdkprWUAiF1+5V4Yol1PLA/27khfJhH4V9Vy Mn7AzvzuAzbCK73Q9n2VDhSh8paKJ23hLSJj4BtQ== X-Received: by 2002:a17:90b:3f0c:b0:387:e0bb:57f1 with SMTP id 98e67ed59e1d1-38f2975d581mr1657727a91.34.1784964346221; Sat, 25 Jul 2026 00:25:46 -0700 (PDT) Received: from csl-conti-dell7858.ntu.edu.sg ([155.69.195.57]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-13d13014d27sm33921944c88.4.2026.07.25.00.25.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Jul 2026 00:25:45 -0700 (PDT) From: Maoyi Xie To: Sebastian Reichel Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, "H . Nikolaus Schaller" , Anton Vorontsov Subject: [PATCH] power: supply: twl4030_charger: cancel workers via devm Date: Sat, 25 Jul 2026 15:25:40 +0800 Message-Id: <20260725072540.3092504-1-maoyixie.tju@gmail.com> X-Mailer: git-send-email 2.34.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit bci is devm-allocated. Two workers (bci->work and bci->current_worker) dereference it. twl4030_bci_remove() disables charging and masks interrupts. It cancels neither worker. A worker pending at remove() can run after devm frees bci. The USB transceiver comes from devm_usb_get_phy_by_node(). devm unregisters its notifier only after remove() returns. A cancel_work_sync() in remove() can then race a notifier reschedule. devm_work_autocancel() and devm_delayed_work_autocancel() avoid that. They cancel the workers during devm release, before bci is freed. Suggested-by: Sebastian Reichel Fixes: d6ccc442b1210 ("twl4030_charger: Make the driver atomic notifier safe") Cc: stable@vger.kernel.org Link: https://lore.kernel.org/r/20260702172128.2001753-1-maoyixie.tju@gmail.com Signed-off-by: Maoyi Xie --- drivers/power/supply/twl4030_charger.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/power/supply/twl4030_charger.c b/drivers/power/supply/twl4030_charger.c index 04216b2bfb6c3..d8bae2daac23d 100644 --- a/drivers/power/supply/twl4030_charger.c +++ b/drivers/power/supply/twl4030_charger.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -1002,8 +1003,18 @@ static int twl4030_bci_probe(struct platform_device *pdev) platform_set_drvdata(pdev, bci); - INIT_WORK(&bci->work, twl4030_bci_usb_work); - INIT_DELAYED_WORK(&bci->current_worker, twl4030_current_worker); + /* Register current_worker first: devm cancels in reverse order, and + * bci->work can reschedule current_worker. + */ + ret = devm_delayed_work_autocancel(&pdev->dev, &bci->current_worker, + twl4030_current_worker); + if (ret) + return ret; + + ret = devm_work_autocancel(&pdev->dev, &bci->work, + twl4030_bci_usb_work); + if (ret) + return ret; bci->channel_vac = devm_iio_channel_get(&pdev->dev, "vac"); if (IS_ERR(bci->channel_vac)) { -- 2.34.1