Skip to content

Commit 1695c43

Browse files
Mani-Sadhasivammartinkpetersen
authored andcommitted
scsi: ufs: core: Cancel RTC work during ufshcd_remove()
Currently, RTC work is only cancelled during __ufshcd_wl_suspend(). When ufshcd is removed in ufshcd_remove(), RTC work is not cancelled. Due to this, any further trigger of the RTC work after ufshcd_remove() would result in a NULL pointer dereference as below: Unable to handle kernel NULL pointer dereference at virtual address 00000000000002a4 Workqueue: events ufshcd_rtc_work Call trace: _raw_spin_lock_irqsave+0x34/0x8c pm_runtime_get_if_active+0x24/0xb4 ufshcd_rtc_work+0x124/0x19c process_scheduled_works+0x18c/0x2d8 worker_thread+0x144/0x280 kthread+0x11c/0x128 ret_from_fork+0x10/0x20 Since RTC work accesses the ufshcd internal structures, it should be cancelled when ufshcd is removed. So do that in ufshcd_remove(), as per the order in ufshcd_init(). Cc: [email protected] # 6.8 Fixes: 6bf999e ("scsi: ufs: core: Add UFS RTC support") Signed-off-by: Manivannan Sadhasivam <[email protected]> Link: https://lore.kernel.org/r/[email protected] Reviewed-by: Peter Wang <[email protected]> Reviewed-by: Bean Huo <[email protected]> Reviewed-by: Bart Van Assche <[email protected]> Signed-off-by: Martin K. Petersen <[email protected]>
1 parent 128faa1 commit 1695c43

File tree

1 file changed

+1
-0
lines changed

1 file changed

+1
-0
lines changed

drivers/ufs/core/ufshcd.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10189,6 +10189,7 @@ void ufshcd_remove(struct ufs_hba *hba)
1018910189
ufs_hwmon_remove(hba);
1019010190
ufs_bsg_remove(hba);
1019110191
ufs_sysfs_remove_nodes(hba->dev);
10192+
cancel_delayed_work_sync(&hba->ufs_rtc_update_work);
1019210193
blk_mq_destroy_queue(hba->tmf_queue);
1019310194
blk_put_queue(hba->tmf_queue);
1019410195
blk_mq_free_tag_set(&hba->tmf_tag_set);

0 commit comments

Comments
 (0)