diff options
Diffstat (limited to 'drivers/gpu/nvgpu')
-rw-r--r-- | drivers/gpu/nvgpu/gp10b/gr_gp10b.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/gpu/nvgpu/gp10b/gr_gp10b.c b/drivers/gpu/nvgpu/gp10b/gr_gp10b.c index 051e16a3..aa2e3b65 100644 --- a/drivers/gpu/nvgpu/gp10b/gr_gp10b.c +++ b/drivers/gpu/nvgpu/gp10b/gr_gp10b.c | |||
@@ -877,6 +877,15 @@ static int gr_gp10b_set_ctxsw_preemption_mode(struct gk20a *g, | |||
877 | (compute_preempt_mode == NVGPU_COMPUTE_PREEMPTION_MODE_CILP)) | 877 | (compute_preempt_mode == NVGPU_COMPUTE_PREEMPTION_MODE_CILP)) |
878 | return -EINVAL; | 878 | return -EINVAL; |
879 | 879 | ||
880 | /* Do not allow lower preemption modes than current ones */ | ||
881 | if (graphics_preempt_mode && | ||
882 | (graphics_preempt_mode < gr_ctx->graphics_preempt_mode)) | ||
883 | return -EINVAL; | ||
884 | |||
885 | if (compute_preempt_mode && | ||
886 | (compute_preempt_mode < gr_ctx->compute_preempt_mode)) | ||
887 | return -EINVAL; | ||
888 | |||
880 | /* set preemption modes */ | 889 | /* set preemption modes */ |
881 | switch (graphics_preempt_mode) { | 890 | switch (graphics_preempt_mode) { |
882 | case NVGPU_GRAPHICS_PREEMPTION_MODE_GFXP: | 891 | case NVGPU_GRAPHICS_PREEMPTION_MODE_GFXP: |
@@ -2064,10 +2073,6 @@ static int gr_gp10b_set_preemption_mode(struct channel_gk20a *ch, | |||
2064 | if (!class) | 2073 | if (!class) |
2065 | return -EINVAL; | 2074 | return -EINVAL; |
2066 | 2075 | ||
2067 | /* preemption already set ? */ | ||
2068 | if (gr_ctx->graphics_preempt_mode || gr_ctx->compute_preempt_mode) | ||
2069 | return -EINVAL; | ||
2070 | |||
2071 | if (gk20a_is_channel_marked_as_tsg(ch)) { | 2076 | if (gk20a_is_channel_marked_as_tsg(ch)) { |
2072 | tsg = &g->fifo.tsg[ch->tsgid]; | 2077 | tsg = &g->fifo.tsg[ch->tsgid]; |
2073 | vm = tsg->vm; | 2078 | vm = tsg->vm; |