diff --git a/drivers/gpu/msm/kgsl_bus.c b/drivers/gpu/msm/kgsl_bus.c index 810a16bbca5e..8cae22d18b54 100644 --- a/drivers/gpu/msm/kgsl_bus.c +++ b/drivers/gpu/msm/kgsl_bus.c @@ -1,6 +1,6 @@ // 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 @@ -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;