Unverified Commit 55b1bcbb authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!7351 PM / devfreq: Synchronize devfreq_monitor_[start/stop

parents 34e964ff 48ddafe7
Loading
Loading
Loading
Loading
+22 −2
Original line number Diff line number Diff line
@@ -438,10 +438,14 @@ static void devfreq_monitor(struct work_struct *work)
	if (err)
		dev_err(&devfreq->dev, "dvfs failed with (%d) error\n", err);

	if (devfreq->stop_polling)
		goto out;

	queue_delayed_work(devfreq_wq, &devfreq->work,
				msecs_to_jiffies(devfreq->profile->polling_ms));
	mutex_unlock(&devfreq->lock);

out:
	mutex_unlock(&devfreq->lock);
	trace_devfreq_monitor(devfreq);
}

@@ -459,6 +463,10 @@ void devfreq_monitor_start(struct devfreq *devfreq)
	if (devfreq->governor->interrupt_driven)
		return;

	mutex_lock(&devfreq->lock);
	if (delayed_work_pending(&devfreq->work))
		goto out;

	switch (devfreq->profile->timer) {
	case DEVFREQ_TIMER_DEFERRABLE:
		INIT_DEFERRABLE_WORK(&devfreq->work, devfreq_monitor);
@@ -467,12 +475,16 @@ void devfreq_monitor_start(struct devfreq *devfreq)
		INIT_DELAYED_WORK(&devfreq->work, devfreq_monitor);
		break;
	default:
		return;
		goto out;
	}

	if (devfreq->profile->polling_ms)
		queue_delayed_work(devfreq_wq, &devfreq->work,
			msecs_to_jiffies(devfreq->profile->polling_ms));

out:
	devfreq->stop_polling = false;
	mutex_unlock(&devfreq->lock);
}
EXPORT_SYMBOL(devfreq_monitor_start);

@@ -489,6 +501,14 @@ void devfreq_monitor_stop(struct devfreq *devfreq)
	if (devfreq->governor->interrupt_driven)
		return;

	mutex_lock(&devfreq->lock);
	if (devfreq->stop_polling) {
		mutex_unlock(&devfreq->lock);
		return;
	}

	devfreq->stop_polling = true;
	mutex_unlock(&devfreq->lock);
	cancel_delayed_work_sync(&devfreq->work);
}
EXPORT_SYMBOL(devfreq_monitor_stop);