From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-m49198.qiye.163.com (mail-m49198.qiye.163.com [45.254.49.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D96D13D091C for ; Tue, 28 Jul 2026 06:56:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.254.49.198 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785221768; cv=none; b=RhHzxMKjWlMt7Dt/CV9IjBpsWV9N/BYTKsa1iR5IoU1OO+SWbm8aEkmpwiiadrtw9N4otoWezEtc2cq6EVkbr4dbI9XkJqL8Co8MFWu6ADtF6pDx5VsWJdCyUC/LkcZ3SjEyzYWpw8n3aqJSmz919GupBfGEQUq717HAGbAxiFs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785221768; c=relaxed/simple; bh=K9vxSL1BO/BDjF0RNhBwieZQpVdfpxrOkbJB69gbfAs=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=kxkd5oQPcgMqx2KMG72kWEv4QikMvWpNESQdH40epdulhujixiokqkNO7QUE1MWJ/9gXBvQRRkcenj1U+dAKc8jTQg6SIg58pCS7UnlL4vhHY2k2Q3o4knAtp8icE+uqQfuem8/DxcDKpjYThkh4yC5r2DAjOgF3R4s4ngd0ToA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=seu.edu.cn; spf=pass smtp.mailfrom=seu.edu.cn; dkim=pass (1024-bit key) header.d=seu.edu.cn header.i=@seu.edu.cn header.b=i8CULJI5; arc=none smtp.client-ip=45.254.49.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=seu.edu.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=seu.edu.cn Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=seu.edu.cn header.i=@seu.edu.cn header.b="i8CULJI5" Received: from LAPTOP-99KJFSET (unknown [222.191.246.242]) by smtp.qiye.163.com (Hmail) with ESMTP id 47d3f7934; Tue, 28 Jul 2026 14:55:55 +0800 (GMT+08:00) From: Hongyan Xu To: James Schulman , David Rhodes , Richard Fitzgerald , Lee Jones Cc: alsa-devel@alsa-project.org, patches@opensource.cirrus.com, linux-kernel@vger.kernel.org, jianhao.xu@seu.edu.cn, getshell@seu.edu.cn Subject: [PATCH] mfd: cs42l43: cancel boot work during remove Date: Tue, 28 Jul 2026 14:55:56 +0800 Message-ID: <20260728065556.1508-1-getshell@seu.edu.cn> X-Mailer: git-send-email 2.50.1.windows.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 X-HM-Tid: 0a9fa782328503a1kunm502714bde42d2 X-HM-MType: 10 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFITzdXWRgWCB1ZQUpXWS1ZQUlXWQ8JGhUIEh9ZQVkZSkJKVh8dHRhJGktDH0wfGVYeHw 5VEwETFhoSFyQUDg9ZV1kYEgtZQVlJSUlVSkJKVUlPTVVJT0lZV1kWGg8SFR0UWUFZT0tIVUpLSU hOQ0NVSktLVUtZBg++ DKIM-Signature: a=rsa-sha256; b=i8CULJI5VrgrWneb8MXHz9hZpLhqoOObFyNAHZ4eRWJzfHSADcNHhyGshVQrF0/6PpB3E7yenn69dXFnAorACj5hscsPKzkb/2S8ruNO3OGnaWSeRbUiyjOK95WRa+fNJ1f9j8oMDZDDQORquEA/346c7Y0E2CBU7HQFEla2QcM=; s=default; c=relaxed/relaxed; d=seu.edu.cn; v=1; bh=5RZNJeUj0krBwNh2Di9WbsEc1dsAr+ALq4D1gvEVVx0=; h=date:mime-version:subject:message-id:from; Probe queues boot_work on system_long_wq, but both transport remove callbacks release the devm-allocated CS42L43 data without waiting for it. Cancel the work before powering the device down. Balance the runtime-PM reference when pending work is cancelled, and have the worker call the power-down helper directly on error to avoid cancelling itself. This issue was found by a static analysis tool. Signed-off-by: Hongyan Xu --- drivers/mfd/cs42l43.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/mfd/cs42l43.c b/drivers/mfd/cs42l43.c index 7b6d07c..411566e 100644 --- a/drivers/mfd/cs42l43.c +++ b/drivers/mfd/cs42l43.c @@ -868,6 +868,8 @@ static int cs42l43_irq_config(struct cs42l43 *cs42l43) return 0; } +static int cs42l43_power_down(struct cs42l43 *cs42l43); + static void cs42l43_boot_work(struct work_struct *work) { struct cs42l43 *cs42l43 = container_of(work, struct cs42l43, boot_work); @@ -937,7 +939,7 @@ static void cs42l43_boot_work(struct work_struct *work) err: pm_runtime_put_sync(cs42l43->dev); - cs42l43_dev_remove(cs42l43); + cs42l43_power_down(cs42l43); } static int cs42l43_power_up(struct cs42l43 *cs42l43) @@ -1069,6 +1071,8 @@ EXPORT_SYMBOL_NS_GPL(cs42l43_dev_probe, MFD_CS42L43); void cs42l43_dev_remove(struct cs42l43 *cs42l43) { + if (cancel_work_sync(&cs42l43->boot_work)) + pm_runtime_put_noidle(cs42l43->dev); cs42l43_power_down(cs42l43); } EXPORT_SYMBOL_NS_GPL(cs42l43_dev_remove, MFD_CS42L43); -- 2.50.1.windows.1