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

Commit 2f2e145e authored by Harshdeep Dhatt's avatar Harshdeep Dhatt
Browse files

msm: kgsl: Take devfreq event lock for ddr qos vote



This lock protects against any concurrent governor re-assignments
through sysfs. Furthermore, such re-assignment can lead to another
issue i.e. say someone assigns performance governor to this device
from sysfs. Then there can be a mismatch in what kgsl intends to
vote, and what actually gets voted. Therefore, fix both the min and
max frequencies for this devfreq device at the desired qos level so
that the intended vote is propagated regardless of the governor.

Change-Id: Ibc3b0ef1f585dae311aab028d8c2bc9f1a53b4b8
Signed-off-by: default avatarHarshdeep Dhatt <hdhatt@codeaurora.org>
parent f64d2bf5
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
 * Copyright (c) 2019-2021, The Linux Foundation. All rights reserved.
 */

#include <linux/interconnect.h>
@@ -54,10 +54,21 @@ static void set_ddr_qos(struct kgsl_device *device, int buslevel)
	if (new_min_freq == cur_min_freq)
		return;

	/*
	 * We need the event lock to protect against concurrent governor
	 * re-assignments.
	 */
	event_mutex_lock(dev);
	mutex_lock(&dev->lock);
	/*
	 * Update both min/max to make sure correct vote is set regardless
	 * of the governor, which can be changed from sysfs
	 */
	dev->min_freq = new_min_freq;
	dev->max_freq = new_min_freq;
	ret = update_devfreq(dev);
	mutex_unlock(&dev->lock);
	event_mutex_unlock(dev);

	if (!ret)
		cur_min_freq = new_min_freq;