Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0f69c57d authored by Sai Harshini Nimmala's avatar Sai Harshini Nimmala
Browse files

soc: qcom: hyp_core_ctl: Catch uninitialized freq QOS object



Currently, the code is not checking if the freq qos object was
requested before using it in the undo reservation path.
This causes warnings like "freq_qos_update_request() called for
unknown object".
Fix this by checking freq_qos_init_done flag is set prior to using the
qos objects.

Change-Id: Ie8009f5ea191f4ad0c199a3fce04376871a5d2c5
Signed-off-by: default avatarSai Harshini Nimmala <snimmala@codeaurora.org>
parent b490abfe
Loading
Loading
Loading
Loading
+30 −22
Original line number Diff line number Diff line
@@ -81,6 +81,7 @@ static struct hyp_core_ctl_cpu_map hh_cpumap[NR_CPUS];
static bool is_vcpu_info_populated;
static bool init_done;
static int nr_vcpus;
static bool freq_qos_init_done;

static inline void hyp_core_ctl_print_status(char *msg)
{
@@ -111,6 +112,7 @@ static void hyp_core_ctl_undo_reservation(struct hyp_core_ctl_data *hcd)

		cpumask_clear_cpu(cpu, &hcd->our_isolated_cpus);

		if (freq_qos_init_done) {
			qos_req = &per_cpu(qos_min_req, cpu);
			ret = freq_qos_update_request(qos_req,
					FREQ_QOS_MIN_DEFAULT_VALUE);
@@ -118,6 +120,7 @@ static void hyp_core_ctl_undo_reservation(struct hyp_core_ctl_data *hcd)
				pr_err("fail to update min freq for CPU%d ret=%d\n",
								cpu, ret);
		}
	}

	hyp_core_ctl_print_status("undo_reservation_end");
}
@@ -279,9 +282,9 @@ static void hyp_core_ctl_do_reservation(struct hyp_core_ctl_data *hcd)

		cpumask_set_cpu(i, &hcd->our_isolated_cpus);

		qos_req = &per_cpu(qos_min_req, i);
		min_freq = per_cpu(qos_min_freq, i);
		if (min_freq) {
		if (min_freq && freq_qos_init_done) {
			qos_req = &per_cpu(qos_min_req, i);
			ret = freq_qos_update_request(qos_req, min_freq);
			if (ret < 0)
				pr_err("fail to update min freq for CPU%d ret=%d\n",
@@ -339,9 +342,9 @@ static void hyp_core_ctl_do_reservation(struct hyp_core_ctl_data *hcd)

			cpumask_set_cpu(i, &hcd->our_isolated_cpus);

			qos_req = &per_cpu(qos_min_req, i);
			min_freq = per_cpu(qos_min_freq, i);
			if (min_freq) {
			if (min_freq && freq_qos_init_done) {
				qos_req = &per_cpu(qos_min_req, i);
				ret = freq_qos_update_request(qos_req,
								min_freq);
				if (ret < 0)
@@ -386,12 +389,14 @@ static void hyp_core_ctl_do_reservation(struct hyp_core_ctl_data *hcd)

			cpumask_clear_cpu(i, &hcd->our_isolated_cpus);

			if (freq_qos_init_done) {
				qos_req = &per_cpu(qos_min_req, i);
				ret = freq_qos_update_request(qos_req,
						FREQ_QOS_MIN_DEFAULT_VALUE);
				if (ret < 0)
					pr_err("fail to update min freq for CPU%d ret=%d\n",
								i, ret);
			}

			if (--unisolate_need == 0)
				break;
@@ -532,6 +537,7 @@ static int hyp_core_ctl_cpu_cooling_cb(struct notifier_block *nb,
		if (cpumask_test_cpu(cpu, &the_hcd->our_isolated_cpus)) {
			sched_unisolate_cpu(cpu);
			cpumask_clear_cpu(cpu, &the_hcd->our_isolated_cpus);
			if (freq_qos_init_done) {
				qos_req = &per_cpu(qos_min_req, cpu);
				ret = freq_qos_update_request(qos_req,
						FREQ_QOS_MIN_DEFAULT_VALUE);
@@ -539,6 +545,7 @@ static int hyp_core_ctl_cpu_cooling_cb(struct notifier_block *nb,
					pr_err("fail to update min freq for CPU%d ret=%d\n",
								cpu, ret);
			}
		}
	} else {
		/*
		 * A CPU is unblocked by thermal. We are interested if
@@ -597,6 +604,7 @@ static int hyp_core_ctl_hp_offline(unsigned int cpu)
	 */
	if (cpumask_test_and_clear_cpu(cpu, &the_hcd->our_isolated_cpus)) {
		sched_unisolate_cpu_unlocked(cpu);
		if (freq_qos_init_done) {
			qos_req = &per_cpu(qos_min_req, cpu);
			ret = freq_qos_update_request(qos_req,
					FREQ_QOS_MIN_DEFAULT_VALUE);
@@ -604,6 +612,7 @@ static int hyp_core_ctl_hp_offline(unsigned int cpu)
				pr_err("fail to update min freq for CPU%d ret=%d\n",
								cpu, ret);
		}
	}

	return 0;
}
@@ -799,7 +808,6 @@ static ssize_t status_show(struct device *dev, struct device_attribute *attr,

static DEVICE_ATTR_RO(status);

static bool freq_qos_init_done;
static int init_freq_qos_req(void)
{
	int cpu, ret;