diff options
author | Terje Bergstrom <tbergstrom@nvidia.com> | 2014-11-28 05:51:35 -0500 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-03-18 15:12:25 -0400 |
commit | 36834282354de2760e54b1381e03e0fe8bc8b2a4 (patch) | |
tree | cce5b221077f047fc2f9fd83b379b7f20e604c1e /drivers/gpu/nvgpu/gk20a/channel_gk20a.c | |
parent | 0d11ff0c9cd39b2ee6433b296c5ba029355e1c44 (diff) |
gpu: nvgpu: Enable syncpt reclaim only on gm20b
gm20b has more channels than sync points. We use aggressive reclaim
of sync points to offset that. Disable aggressive reclaim for gk20a
because it is not needed there.
Bug 1583849
Change-Id: I2a74b0504150a54cb8a97016effe20c5d905ac95
Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com>
Reviewed-on: http://git-master/r/657095
Reviewed-by: Deepak Nibade <dnibade@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/channel_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/channel_gk20a.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c index de51e83e..03163575 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c | |||
@@ -318,6 +318,7 @@ static void channel_gk20a_bind(struct channel_gk20a *ch_gk20a) | |||
318 | void channel_gk20a_unbind(struct channel_gk20a *ch_gk20a) | 318 | void channel_gk20a_unbind(struct channel_gk20a *ch_gk20a) |
319 | { | 319 | { |
320 | struct gk20a *g = ch_gk20a->g; | 320 | struct gk20a *g = ch_gk20a->g; |
321 | struct gk20a_platform *platform = gk20a_get_platform(g->dev); | ||
321 | 322 | ||
322 | gk20a_dbg_fn(""); | 323 | gk20a_dbg_fn(""); |
323 | 324 | ||
@@ -333,7 +334,7 @@ void channel_gk20a_unbind(struct channel_gk20a *ch_gk20a) | |||
333 | * resource at this point | 334 | * resource at this point |
334 | * if not, then it will be destroyed at channel_free() | 335 | * if not, then it will be destroyed at channel_free() |
335 | */ | 336 | */ |
336 | if (ch_gk20a->sync && ch_gk20a->sync->aggressive_destroy) { | 337 | if (ch_gk20a->sync && platform->sync_aggressive_destroy) { |
337 | ch_gk20a->sync->destroy(ch_gk20a->sync); | 338 | ch_gk20a->sync->destroy(ch_gk20a->sync); |
338 | ch_gk20a->sync = NULL; | 339 | ch_gk20a->sync = NULL; |
339 | } | 340 | } |
@@ -1469,6 +1470,7 @@ void gk20a_channel_update(struct channel_gk20a *c, int nr_completed) | |||
1469 | { | 1470 | { |
1470 | struct vm_gk20a *vm = c->vm; | 1471 | struct vm_gk20a *vm = c->vm; |
1471 | struct channel_gk20a_job *job, *n; | 1472 | struct channel_gk20a_job *job, *n; |
1473 | struct gk20a_platform *platform = gk20a_get_platform(c->g->dev); | ||
1472 | 1474 | ||
1473 | trace_gk20a_channel_update(c); | 1475 | trace_gk20a_channel_update(c); |
1474 | 1476 | ||
@@ -1506,7 +1508,7 @@ void gk20a_channel_update(struct channel_gk20a *c, int nr_completed) | |||
1506 | * the sync resource | 1508 | * the sync resource |
1507 | */ | 1509 | */ |
1508 | if (list_empty(&c->jobs)) { | 1510 | if (list_empty(&c->jobs)) { |
1509 | if (c->sync && c->sync->aggressive_destroy && | 1511 | if (c->sync && platform->sync_aggressive_destroy && |
1510 | gk20a_fence_is_expired(c->last_submit.post_fence)) { | 1512 | gk20a_fence_is_expired(c->last_submit.post_fence)) { |
1511 | c->sync->destroy(c->sync); | 1513 | c->sync->destroy(c->sync); |
1512 | c->sync = NULL; | 1514 | c->sync = NULL; |