diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 26 |
1 files changed, 8 insertions, 18 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 71713a6e4c89..d70ea316d83a 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -2657,34 +2657,24 @@ err_unlock: goto out_unlock; } -static bool i915_context_is_banned(const struct i915_gem_context *ctx) +static bool ban_context(const struct i915_gem_context *ctx) { - if (ctx->banned) - return true; - - if (!ctx->bannable) - return false; - - if (ctx->ban_score >= CONTEXT_SCORE_BAN_THRESHOLD) { - DRM_DEBUG("context hanging too often, banning!\n"); - return true; - } - - return false; + return (i915_gem_context_is_bannable(ctx) && + ctx->ban_score >= CONTEXT_SCORE_BAN_THRESHOLD); } static void i915_gem_context_mark_guilty(struct i915_gem_context *ctx) { - ctx->ban_score += CONTEXT_SCORE_GUILTY; - - ctx->banned = i915_context_is_banned(ctx); ctx->guilty_count++; + ctx->ban_score += CONTEXT_SCORE_GUILTY; + if (ban_context(ctx)) + i915_gem_context_set_banned(ctx); DRM_DEBUG_DRIVER("context %s marked guilty (score %d) banned? %s\n", ctx->name, ctx->ban_score, - yesno(ctx->banned)); + yesno(i915_gem_context_is_banned(ctx))); - if (!ctx->banned || IS_ERR_OR_NULL(ctx->file_priv)) + if (!i915_gem_context_is_banned(ctx) || IS_ERR_OR_NULL(ctx->file_priv)) return; ctx->file_priv->context_bans++; |