Loading drivers/scsi/ufs/ufshcd.c +8 −6 Original line number Diff line number Diff line Loading @@ -1487,7 +1487,7 @@ int ufshcd_hold(struct ufs_hba *hba, bool async) hba->clk_gating.state = REQ_CLKS_ON; trace_ufshcd_clk_gating(dev_name(hba->dev), hba->clk_gating.state); queue_work(hba->clk_gating.ungating_workq, queue_work(hba->clk_gating.clk_gating_workq, &hba->clk_gating.ungate_work); /* * fall through to check if we should wait for this Loading Loading @@ -1755,7 +1755,8 @@ static enum hrtimer_restart ufshcd_clkgate_hrtimer_handler( struct ufs_hba *hba = container_of(timer, struct ufs_hba, clk_gating.gate_hrtimer); schedule_work(&hba->clk_gating.gate_work); queue_work(hba->clk_gating.clk_gating_workq, &hba->clk_gating.gate_work); return HRTIMER_NORESTART; } Loading @@ -1763,7 +1764,7 @@ static enum hrtimer_restart ufshcd_clkgate_hrtimer_handler( static void ufshcd_init_clk_gating(struct ufs_hba *hba) { struct ufs_clk_gating *gating = &hba->clk_gating; char wq_name[sizeof("ufs_clk_ungating_00")]; char wq_name[sizeof("ufs_clk_gating_00")]; hba->clk_gating.state = CLKS_ON; Loading Loading @@ -1792,9 +1793,10 @@ static void ufshcd_init_clk_gating(struct ufs_hba *hba) hrtimer_init(&gating->gate_hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); gating->gate_hrtimer.function = ufshcd_clkgate_hrtimer_handler; snprintf(wq_name, ARRAY_SIZE(wq_name), "ufs_clk_ungating_%d", snprintf(wq_name, ARRAY_SIZE(wq_name), "ufs_clk_gating_%d", hba->host->host_no); hba->clk_gating.ungating_workq = create_singlethread_workqueue(wq_name); hba->clk_gating.clk_gating_workq = create_singlethread_workqueue(wq_name); gating->is_enabled = true; Loading Loading @@ -1858,7 +1860,7 @@ static void ufshcd_exit_clk_gating(struct ufs_hba *hba) device_remove_file(hba->dev, &hba->clk_gating.enable_attr); ufshcd_cancel_gate_work(hba); cancel_work_sync(&hba->clk_gating.ungate_work); destroy_workqueue(hba->clk_gating.ungating_workq); destroy_workqueue(hba->clk_gating.clk_gating_workq); } static void ufshcd_set_auto_hibern8_timer(struct ufs_hba *hba, u32 delay) Loading drivers/scsi/ufs/ufshcd.h +1 −1 Original line number Diff line number Diff line Loading @@ -446,7 +446,7 @@ struct ufs_clk_gating { struct device_attribute enable_attr; bool is_enabled; int active_reqs; struct workqueue_struct *ungating_workq; struct workqueue_struct *clk_gating_workq; }; /* Hibern8 state */ Loading Loading
drivers/scsi/ufs/ufshcd.c +8 −6 Original line number Diff line number Diff line Loading @@ -1487,7 +1487,7 @@ int ufshcd_hold(struct ufs_hba *hba, bool async) hba->clk_gating.state = REQ_CLKS_ON; trace_ufshcd_clk_gating(dev_name(hba->dev), hba->clk_gating.state); queue_work(hba->clk_gating.ungating_workq, queue_work(hba->clk_gating.clk_gating_workq, &hba->clk_gating.ungate_work); /* * fall through to check if we should wait for this Loading Loading @@ -1755,7 +1755,8 @@ static enum hrtimer_restart ufshcd_clkgate_hrtimer_handler( struct ufs_hba *hba = container_of(timer, struct ufs_hba, clk_gating.gate_hrtimer); schedule_work(&hba->clk_gating.gate_work); queue_work(hba->clk_gating.clk_gating_workq, &hba->clk_gating.gate_work); return HRTIMER_NORESTART; } Loading @@ -1763,7 +1764,7 @@ static enum hrtimer_restart ufshcd_clkgate_hrtimer_handler( static void ufshcd_init_clk_gating(struct ufs_hba *hba) { struct ufs_clk_gating *gating = &hba->clk_gating; char wq_name[sizeof("ufs_clk_ungating_00")]; char wq_name[sizeof("ufs_clk_gating_00")]; hba->clk_gating.state = CLKS_ON; Loading Loading @@ -1792,9 +1793,10 @@ static void ufshcd_init_clk_gating(struct ufs_hba *hba) hrtimer_init(&gating->gate_hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); gating->gate_hrtimer.function = ufshcd_clkgate_hrtimer_handler; snprintf(wq_name, ARRAY_SIZE(wq_name), "ufs_clk_ungating_%d", snprintf(wq_name, ARRAY_SIZE(wq_name), "ufs_clk_gating_%d", hba->host->host_no); hba->clk_gating.ungating_workq = create_singlethread_workqueue(wq_name); hba->clk_gating.clk_gating_workq = create_singlethread_workqueue(wq_name); gating->is_enabled = true; Loading Loading @@ -1858,7 +1860,7 @@ static void ufshcd_exit_clk_gating(struct ufs_hba *hba) device_remove_file(hba->dev, &hba->clk_gating.enable_attr); ufshcd_cancel_gate_work(hba); cancel_work_sync(&hba->clk_gating.ungate_work); destroy_workqueue(hba->clk_gating.ungating_workq); destroy_workqueue(hba->clk_gating.clk_gating_workq); } static void ufshcd_set_auto_hibern8_timer(struct ufs_hba *hba, u32 delay) Loading
drivers/scsi/ufs/ufshcd.h +1 −1 Original line number Diff line number Diff line Loading @@ -446,7 +446,7 @@ struct ufs_clk_gating { struct device_attribute enable_attr; bool is_enabled; int active_reqs; struct workqueue_struct *ungating_workq; struct workqueue_struct *clk_gating_workq; }; /* Hibern8 state */ Loading