gpu: nvgpu: restrict devfreq during active clk_arb set requests

Restrict access to devfreq when there are active set requests in the
clk_arbiter. We make the following changes in the patch.

1) Add a global counter in the struct gk20a named clk_arb_global_nr which
is used to track the number of active set requests in the system.

2) Anytime a set request is successfully made by the userspace,
clk_arb_global_nr is incremented by 1 and during the completion of
request(releasing the corresponding file handle), clk_arb_global_nr is
decremented by 1.

3) gk20a_scale_target(invoked by devfreq to set the new frequency based
on load) atomically checks clk_arb_global_nr. If the value = 0, the
code simply continue or else if its > 0, it quits thus making devfreq
requests mutually exclusive with the clk_arbiter.

Bug 2061372

Change-Id: I5d19de03e45520f4ff8fccb97b1f1589d04c8ab8
Signed-off-by: Debarshi Dutta <ddutta@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1790002
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
Debarshi Dutta
2018-08-08 17:36:01 +05:30
committed by mobile promotions
parent 519948a9c6
commit 85c323c3e8
9 changed files with 33 additions and 2 deletions

View File

@@ -66,6 +66,9 @@ static void nvgpu_init_vars(struct gk20a *g)
nvgpu_mutex_init(&g->tpc_pg_lock);
nvgpu_mutex_init(&g->clk_arb_enable_lock);
/* Init the clock req count to 0 */
nvgpu_atomic_set(&g->clk_arb_global_nr, 0);
l->regs_saved = l->regs;
l->bar1_saved = l->bar1;