Commit 62c95ea7 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

cpufreq: intel_pstate: Use mutex guard for driver locking



Use guard(mutex)(&intel_pstate_driver_lock), or the scoped variant of
it, wherever intel_pstate_driver_lock needs to be held.

This allows some local variables and goto statements to be dropped as
they are not necessary any more.

Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: default avatarMuhammad Usama Anjum <usama.anjum@collabora.com>
Link: https://patch.msgid.link/2807232.mvXUDI8C0e@rafael.j.wysocki
parent 25ca6630
Loading
Loading
Loading
Loading
+33 −66
Original line number Diff line number Diff line
@@ -1393,7 +1393,8 @@ static void set_power_ctl_ee_state(bool input)
{
	u64 power_ctl;

	mutex_lock(&intel_pstate_driver_lock);
	guard(mutex)(&intel_pstate_driver_lock);

	rdmsrq(MSR_IA32_POWER_CTL, power_ctl);
	if (input) {
		power_ctl &= ~BIT(MSR_IA32_POWER_CTL_BIT_EE);
@@ -1403,7 +1404,6 @@ static void set_power_ctl_ee_state(bool input)
		power_ctl_ee_state = POWER_CTL_EE_DISABLE;
	}
	wrmsrq(MSR_IA32_POWER_CTL, power_ctl);
	mutex_unlock(&intel_pstate_driver_lock);
}

static void intel_pstate_hwp_enable(struct cpudata *cpudata);
@@ -1525,13 +1525,9 @@ static int intel_pstate_update_status(const char *buf, size_t size);
static ssize_t show_status(struct kobject *kobj,
			   struct kobj_attribute *attr, char *buf)
{
	ssize_t ret;

	mutex_lock(&intel_pstate_driver_lock);
	ret = intel_pstate_show_status(buf);
	mutex_unlock(&intel_pstate_driver_lock);
	guard(mutex)(&intel_pstate_driver_lock);

	return ret;
	return intel_pstate_show_status(buf);
}

static ssize_t store_status(struct kobject *a, struct kobj_attribute *b,
@@ -1540,11 +1536,13 @@ static ssize_t store_status(struct kobject *a, struct kobj_attribute *b,
	char *p = memchr(buf, '\n', count);
	int ret;

	mutex_lock(&intel_pstate_driver_lock);
	guard(mutex)(&intel_pstate_driver_lock);

	ret = intel_pstate_update_status(buf, p ? p - buf : count);
	mutex_unlock(&intel_pstate_driver_lock);
	if (ret < 0)
		return ret;

	return ret < 0 ? ret : count;
	return count;
}

static ssize_t show_turbo_pct(struct kobject *kobj,
@@ -1554,12 +1552,10 @@ static ssize_t show_turbo_pct(struct kobject *kobj,
	int total, no_turbo, turbo_pct;
	uint32_t turbo_fp;

	mutex_lock(&intel_pstate_driver_lock);
	guard(mutex)(&intel_pstate_driver_lock);

	if (!intel_pstate_driver) {
		mutex_unlock(&intel_pstate_driver_lock);
	if (!intel_pstate_driver)
		return -EAGAIN;
	}

	cpu = all_cpu_data[0];

@@ -1568,8 +1564,6 @@ static ssize_t show_turbo_pct(struct kobject *kobj,
	turbo_fp = div_fp(no_turbo, total);
	turbo_pct = 100 - fp_toint(mul_fp(turbo_fp, int_tofp(100)));

	mutex_unlock(&intel_pstate_driver_lock);

	return sprintf(buf, "%u\n", turbo_pct);
}

@@ -1579,38 +1573,26 @@ static ssize_t show_num_pstates(struct kobject *kobj,
	struct cpudata *cpu;
	int total;

	mutex_lock(&intel_pstate_driver_lock);
	guard(mutex)(&intel_pstate_driver_lock);

	if (!intel_pstate_driver) {
		mutex_unlock(&intel_pstate_driver_lock);
	if (!intel_pstate_driver)
		return -EAGAIN;
	}

	cpu = all_cpu_data[0];
	total = cpu->pstate.turbo_pstate - cpu->pstate.min_pstate + 1;

	mutex_unlock(&intel_pstate_driver_lock);

	return sprintf(buf, "%u\n", total);
}

static ssize_t show_no_turbo(struct kobject *kobj,
			     struct kobj_attribute *attr, char *buf)
{
	ssize_t ret;
	guard(mutex)(&intel_pstate_driver_lock);

	mutex_lock(&intel_pstate_driver_lock);

	if (!intel_pstate_driver) {
		mutex_unlock(&intel_pstate_driver_lock);
	if (!intel_pstate_driver)
		return -EAGAIN;
	}

	ret = sprintf(buf, "%u\n", global.no_turbo);

	mutex_unlock(&intel_pstate_driver_lock);

	return ret;
	return sprintf(buf, "%u\n", global.no_turbo);
}

static ssize_t store_no_turbo(struct kobject *a, struct kobj_attribute *b,
@@ -1622,28 +1604,24 @@ static ssize_t store_no_turbo(struct kobject *a, struct kobj_attribute *b,
	if (sscanf(buf, "%u", &input) != 1)
		return -EINVAL;

	mutex_lock(&intel_pstate_driver_lock);
	guard(mutex)(&intel_pstate_driver_lock);

	if (!intel_pstate_driver) {
		count = -EAGAIN;
		goto unlock_driver;
	}
	if (!intel_pstate_driver)
		return -EAGAIN;

	no_turbo = !!clamp_t(int, input, 0, 1);

	WRITE_ONCE(global.turbo_disabled, turbo_is_disabled());
	if (global.turbo_disabled && !no_turbo) {
		pr_notice("Turbo disabled by BIOS or unavailable on processor\n");
		count = -EPERM;
		if (global.no_turbo)
			goto unlock_driver;
		else
			return -EPERM;

		no_turbo = 1;
	}

	if (no_turbo == global.no_turbo) {
		goto unlock_driver;
	}
	if (no_turbo == global.no_turbo)
		return count;

	WRITE_ONCE(global.no_turbo, no_turbo);

@@ -1663,9 +1641,6 @@ static ssize_t store_no_turbo(struct kobject *a, struct kobj_attribute *b,
	intel_pstate_update_limits_for_all();
	arch_set_max_freq_ratio(no_turbo);

unlock_driver:
	mutex_unlock(&intel_pstate_driver_lock);

	return count;
}

@@ -1715,12 +1690,10 @@ static ssize_t store_max_perf_pct(struct kobject *a, struct kobj_attribute *b,
	if (ret != 1)
		return -EINVAL;

	mutex_lock(&intel_pstate_driver_lock);
	guard(mutex)(&intel_pstate_driver_lock);

	if (!intel_pstate_driver) {
		mutex_unlock(&intel_pstate_driver_lock);
	if (!intel_pstate_driver)
		return -EAGAIN;
	}

	mutex_lock(&intel_pstate_limits_lock);

@@ -1733,8 +1706,6 @@ static ssize_t store_max_perf_pct(struct kobject *a, struct kobj_attribute *b,
	else
		update_qos_requests(FREQ_QOS_MAX);

	mutex_unlock(&intel_pstate_driver_lock);

	return count;
}

@@ -1748,12 +1719,10 @@ static ssize_t store_min_perf_pct(struct kobject *a, struct kobj_attribute *b,
	if (ret != 1)
		return -EINVAL;

	mutex_lock(&intel_pstate_driver_lock);
	guard(mutex)(&intel_pstate_driver_lock);

	if (!intel_pstate_driver) {
		mutex_unlock(&intel_pstate_driver_lock);
	if (!intel_pstate_driver)
		return -EAGAIN;
	}

	mutex_lock(&intel_pstate_limits_lock);

@@ -1767,8 +1736,6 @@ static ssize_t store_min_perf_pct(struct kobject *a, struct kobj_attribute *b,
	else
		update_qos_requests(FREQ_QOS_MIN);

	mutex_unlock(&intel_pstate_driver_lock);

	return count;
}

@@ -1789,10 +1756,10 @@ static ssize_t store_hwp_dynamic_boost(struct kobject *a,
	if (ret)
		return ret;

	mutex_lock(&intel_pstate_driver_lock);
	guard(mutex)(&intel_pstate_driver_lock);

	hwp_boost = !!input;
	intel_pstate_update_policies();
	mutex_unlock(&intel_pstate_driver_lock);

	return count;
}
@@ -3914,9 +3881,9 @@ static int __init intel_pstate_init(void)

	}

	mutex_lock(&intel_pstate_driver_lock);
	scoped_guard(mutex, &intel_pstate_driver_lock) {
		rc = intel_pstate_register_driver(default_driver);
	mutex_unlock(&intel_pstate_driver_lock);
	}
	if (rc) {
		intel_pstate_sysfs_remove();
		return rc;