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

Commit f28a439a authored by Patrick Daly's avatar Patrick Daly
Browse files

psi: Use deferrable psi_avgs_work



The logic for psi_avgs_work to not reschedule itself does not appear
to work properly.

1) psi_avgs_work detects itself as a running task due to accounting for
current states in get_recent_times().

2) Drivers with self-rescheduling deferrable work with a period
less than that of psi_avgs_work will always run when psi_avgs_work runs.
This causes psi_avgs_work to retrigger.

Make psi_avgs_work deferrable to avoid this loop.

Change-Id: I90edc5d3cce87ada803f549f417cd0108ef2017f
Signed-off-by: default avatarPatrick Daly <pdaly@codeaurora.org>
parent 297bbec9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -189,7 +189,7 @@ static void group_init(struct psi_group *group)
	for_each_possible_cpu(cpu)
		seqcount_init(&per_cpu_ptr(group->pcpu, cpu)->seq);
	group->avg_next_update = sched_clock() + psi_period;
	INIT_DELAYED_WORK(&group->avgs_work, psi_avgs_work);
	INIT_DEFERRABLE_WORK(&group->avgs_work, psi_avgs_work);
	mutex_init(&group->avgs_lock);
	/* Init trigger-related members */
	atomic_set(&group->poll_scheduled, 0);