diff --git a/drivers/gpu/arm/bifrost_for_linux/backend/gpu/mali_kbase_devfreq.c b/drivers/gpu/arm/bifrost_for_linux/backend/gpu/mali_kbase_devfreq.c index 0a961885b766..ea95e384955d 100644 --- a/drivers/gpu/arm/bifrost_for_linux/backend/gpu/mali_kbase_devfreq.c +++ b/drivers/gpu/arm/bifrost_for_linux/backend/gpu/mali_kbase_devfreq.c @@ -96,15 +96,13 @@ kbase_devfreq_target(struct device *dev, unsigned long *target_freq, u32 flags) freq = *target_freq; - rcu_read_lock(); opp = devfreq_recommended_opp(dev, &freq, flags); if (IS_ERR(opp)) { - rcu_read_unlock(); dev_err(dev, "Failed to get opp (%ld)\n", PTR_ERR(opp)); return PTR_ERR(opp); } voltage = dev_pm_opp_get_voltage(opp); - rcu_read_unlock(); + dev_pm_opp_put(opp); nominal_freq = freq; /* @@ -205,28 +203,24 @@ static int kbase_devfreq_init_freq_table(struct kbase_device *kbdev, unsigned long freq; struct dev_pm_opp *opp; - rcu_read_lock(); count = dev_pm_opp_get_opp_count(kbdev->dev); if (count < 0) { - rcu_read_unlock(); return count; } - rcu_read_unlock(); dp->freq_table = kmalloc_array(count, sizeof(dp->freq_table[0]), GFP_KERNEL); if (!dp->freq_table) return -ENOMEM; - rcu_read_lock(); for (i = 0, freq = ULONG_MAX; i < count; i++, freq--) { opp = dev_pm_opp_find_freq_floor(kbdev->dev, &freq); if (IS_ERR(opp)) break; + dev_pm_opp_put(opp); dp->freq_table[i] = freq; } - rcu_read_unlock(); if (count != i) dev_warn(kbdev->dev, "Unable to enumerate all OPPs (%d!=%d\n", @@ -374,9 +368,9 @@ int kbase_devfreq_init(struct kbase_device *kbdev) } opp_rate = kbdev->current_freq; - rcu_read_lock(); - devfreq_recommended_opp(kbdev->dev, &opp_rate, 0); - rcu_read_unlock(); + opp = devfreq_recommended_opp(kbdev->dev, &opp_rate, 0); + if (!IS_ERR(opp)) + dev_pm_opp_put(opp); kbdev->devfreq->last_status.current_frequency = opp_rate; mali_mdevp.data = kbdev->devfreq;