Re: [PATCH 09/11] scsi: ufs: Fix a kernel crash during shutdown

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/10/21 11:48 PM, Avri Altman wrote:
@@ -1961,11 +1962,15 @@ static void ufshcd_exit_clk_gating(struct ufs_hba
*hba)  {
         if (!hba->clk_gating.is_initialized)
                 return;
+
         ufshcd_remove_clk_gating_sysfs(hba);
-       cancel_work_sync(&hba->clk_gating.ungate_work);
-       cancel_delayed_work_sync(&hba->clk_gating.gate_work);
-       destroy_workqueue(hba->clk_gating.clk_gating_workq);
+
+       /* Ungate the clock if necessary. */
+       ufshcd_hold(hba, false);
         hba->clk_gating.is_initialized = false;
+       ufshcd_release(hba);
>
Not sure that the symmetry in calling ufshcd_release() is meaningful here?
You don't really want to queue a new gate work, this is why you added !.is_initialized to release(),
Or did I get it wrong?

Hi Avri,

The purpose of the above changes is as follows:
* Call ufshcd_hold() to ungate the clock and also to wait for any pending work. * Change hba->clk_gating.is_initialized from true to false to make sure that the clock remains ungated and also that no new work is queued.
* Call ufshcd_release() to decrement hba->clk_gating.active_reqs.

Thanks,

Bart.



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux