msm: thermal: Clean up KTM progressive mitigation exit path

If userspace request to disable progressive mitigation, it removes
threshold settings and clear device mitigation, but it keeps
progressive config list. But request to disable comes more than once
from userspace, it retries above clean up which may leads to crash due
to use after free. Clean up KTM progressive mitigation exit properly.

Change-Id: I2083411361c943612293a403e5f4c6a7cd31e281
Signed-off-by: Manaf Meethalavalappu Pallikunhi <manafm@codeaurora.org>
This commit is contained in:
Manaf Meethalavalappu Pallikunhi 2015-10-09 21:37:08 +05:30 committed by Gerrit - the friendly Code Review server
parent abe105f868
commit b4ea5dcfb9
1 changed files with 11 additions and 8 deletions

View File

@ -4894,9 +4894,10 @@ static int __ref set_enabled(const char *val, const struct kernel_param *kp)
ret = param_set_bool(val, kp);
if (!enabled) {
if (ktm_prog_thresh_enabled)
if (ktm_prog_thresh_enabled) {
ktm_progressive_exit();
disable_msm_thermal();
ktm_prog_thresh_enabled = false;
}
interrupt_mode_init();
} else {
pr_info("no action for enabled = %d\n",
@ -7488,14 +7489,16 @@ static int msm_thermal_dev_exit(struct platform_device *inp_dev)
if (ktm_prog_thresh_enabled) {
ktm_progressive_exit();
list_for_each_entry_safe(prog, next_prog,
&prog_rules_list, list_ptr) {
list_del(&prog->list_ptr);
devm_kfree(&inp_dev->dev, prog);
prog = NULL;
}
ktm_prog_thresh_enabled = false;
}
list_for_each_entry_safe(prog, next_prog,
&prog_rules_list, list_ptr) {
devmgr_unregister_mitigation_client(
&inp_dev->dev, prog->handle);
list_del(&prog->list_ptr);
devm_kfree(&inp_dev->dev, prog);
prog = NULL;
}
return 0;
}