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

Commit bbc10f10 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "soc: qcom: hyp_core_ctl: Catch uninitialized freq QOS object"

parents e45a6c18 0f69c57d
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;