Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3520378pxf; Mon, 15 Mar 2021 11:22:54 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx3wEQPEnrTB26GMm8yPIqkrEsryljcQB6PIeVUUEtajCXjXKsTD5rBhU6YVhn2+gSztDF8 X-Received: by 2002:aa7:c5c4:: with SMTP id h4mr30380650eds.375.1615832574120; Mon, 15 Mar 2021 11:22:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1615832574; cv=none; d=google.com; s=arc-20160816; b=DvTTSoQxygFUxI/tIc9TM0Qlfflz8lc9SOhxeqEknIklTCGlbE2giF6+BPeGj0zpU3 ilLKzYgD14yA2eDNk/o3EaobyCtxY33ez8NiHhoJ3wStGvZyeoeXzuNEXNeNsS1TuFab Fx/c1hP+MZPWxuDvKasJLpEgmxax/ZK9hNWr+VkWmtcVwBacYdCqsBzd9DekJZDA7mD3 NH7eLSYru9fEmIacIjzuZnbTBJo00HMdgZlzzu4XULYw4t3qGaJmcW40WjEb5CPRMeYU +eXzTXIYEb7OTw+JRqjHulThxSPML8RQTqzxlGBGNow3X0wpE9ERjXoGRgGFZWqQcwTW rTgQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=hIVFkUYvZClUqoFaLIS1NgwPjxJh7GhN5vJJm3gGCO0=; b=OSdYeQKoJ6Y5Hs5heFringjmtrK/nkW11SYtdwbxlPRsECQiN1e0uHl9SLwSna5KQ+ wSe7BsFwlA9HnpIHlcoKYE3IBU7Y0XgMI58tXlJwbM/+EXw3MxfjYM9HktY5bccG/K23 cuu7WwWA3MSNj/kJ2RSUOKdN+rS83llmVr9bVmdtXhkHaOjVJf0brqiNbXadS/wjipl/ qggdyuLwz1wHMWjdvKvm4jSLjh7mIxje36bL/N/FAh0i3UnrjpmYSieluCpbksZsFa5N 9Rg53UNPNIS7OH2IhZO1bHB/NDxs9y0iSuQA/LjipnIjlxEzn2kQknqyqJLCAcAV/vkZ zTrg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=OSB1wpWB; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id k7si11348085ejs.165.2021.03.15.11.22.31; Mon, 15 Mar 2021 11:22:54 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=OSB1wpWB; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237724AbhCOOTs (ORCPT + 99 others); Mon, 15 Mar 2021 10:19:48 -0400 Received: from mail.kernel.org ([198.145.29.99]:37540 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232500AbhCON7v (ORCPT ); Mon, 15 Mar 2021 09:59:51 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 3DEE864F37; Mon, 15 Mar 2021 13:59:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1615816758; bh=a77GqLSXsGmp8xbkH5T6Phr1hqd34GJGS40ghwUy/FM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OSB1wpWBonPuxC+T0NPvUBgF6Q8fWXrgyqU2R0r4dYXQTZ2PNyNGYoQBNIFtNXS+i VzqDMhgsSbYyEkiAm4L61CCg+cGj5lHuZD3d8XtigtZfe64T1w4sJqa6ktPIdj5LNd w2sEu9NLqtA9gtkw3/hZmwaAyzO6rfz1iLkA1rKQ= From: gregkh@linuxfoundation.org To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Tvrtko Ursulin , Jon Bloomfield , Joonas Lahtinen , Chris Wilson , Rodrigo Vivi , Dave Airlie Subject: [PATCH 5.10 097/290] drm/i915: Wedge the GPU if command parser setup fails Date: Mon, 15 Mar 2021 14:53:10 +0100 Message-Id: <20210315135545.196139488@linuxfoundation.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210315135541.921894249@linuxfoundation.org> References: <20210315135541.921894249@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Greg Kroah-Hartman From: Tvrtko Ursulin commit a829f033e966d5e4aa27c3ef2b381f51734e4a7f upstream. Commit 311a50e76a33 ("drm/i915: Add support for mandatory cmdparsing") introduced mandatory command parsing but setup failures were not translated into wedging the GPU which was probably the intent. Possible errors come in two categories. Either the sanity check on internal tables has failed, which should be caught in CI unless an affected platform would be missed in testing; or memory allocation failure happened during driver load, which should be extremely unlikely but for correctness should still be handled. v2: * Tidy coding style. (Chris) [airlied: cherry-picked to avoid rc1 base] Signed-off-by: Tvrtko Ursulin Fixes: 311a50e76a33 ("drm/i915: Add support for mandatory cmdparsing") Cc: Jon Bloomfield Cc: Joonas Lahtinen Cc: Chris Wilson Reviewed-by: Chris Wilson Link: https://patchwork.freedesktop.org/patch/msgid/20210302114213.1102223-1-tvrtko.ursulin@linux.intel.com (cherry picked from commit 5a1a659762d35a6dc51047c9127c011303c77b7f) Signed-off-by: Rodrigo Vivi Signed-off-by: Dave Airlie Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/i915/gt/intel_engine_cs.c | 7 ++++++- drivers/gpu/drm/i915/i915_cmd_parser.c | 19 +++++++++++++------ drivers/gpu/drm/i915/i915_drv.h | 2 +- 3 files changed, 20 insertions(+), 8 deletions(-) --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c @@ -708,9 +708,12 @@ static int engine_setup_common(struct in goto err_status; } + err = intel_engine_init_cmd_parser(engine); + if (err) + goto err_cmd_parser; + intel_engine_init_active(engine, ENGINE_PHYSICAL); intel_engine_init_execlists(engine); - intel_engine_init_cmd_parser(engine); intel_engine_init__pm(engine); intel_engine_init_retire(engine); @@ -724,6 +727,8 @@ static int engine_setup_common(struct in return 0; +err_cmd_parser: + intel_breadcrumbs_free(engine->breadcrumbs); err_status: cleanup_status_page(engine); return err; --- a/drivers/gpu/drm/i915/i915_cmd_parser.c +++ b/drivers/gpu/drm/i915/i915_cmd_parser.c @@ -939,7 +939,7 @@ static void fini_hash_table(struct intel * struct intel_engine_cs based on whether the platform requires software * command parsing. */ -void intel_engine_init_cmd_parser(struct intel_engine_cs *engine) +int intel_engine_init_cmd_parser(struct intel_engine_cs *engine) { const struct drm_i915_cmd_table *cmd_tables; int cmd_table_count; @@ -947,7 +947,7 @@ void intel_engine_init_cmd_parser(struct if (!IS_GEN(engine->i915, 7) && !(IS_GEN(engine->i915, 9) && engine->class == COPY_ENGINE_CLASS)) - return; + return 0; switch (engine->class) { case RENDER_CLASS: @@ -1012,19 +1012,19 @@ void intel_engine_init_cmd_parser(struct break; default: MISSING_CASE(engine->class); - return; + goto out; } if (!validate_cmds_sorted(engine, cmd_tables, cmd_table_count)) { drm_err(&engine->i915->drm, "%s: command descriptions are not sorted\n", engine->name); - return; + goto out; } if (!validate_regs_sorted(engine)) { drm_err(&engine->i915->drm, "%s: registers are not sorted\n", engine->name); - return; + goto out; } ret = init_hash_table(engine, cmd_tables, cmd_table_count); @@ -1032,10 +1032,17 @@ void intel_engine_init_cmd_parser(struct drm_err(&engine->i915->drm, "%s: initialised failed!\n", engine->name); fini_hash_table(engine); - return; + goto out; } engine->flags |= I915_ENGINE_USING_CMD_PARSER; + +out: + if (intel_engine_requires_cmd_parser(engine) && + !intel_engine_using_cmd_parser(engine)) + return -EINVAL; + + return 0; } /** --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -1946,7 +1946,7 @@ const char *i915_cache_level_str(struct /* i915_cmd_parser.c */ int i915_cmd_parser_get_version(struct drm_i915_private *dev_priv); -void intel_engine_init_cmd_parser(struct intel_engine_cs *engine); +int intel_engine_init_cmd_parser(struct intel_engine_cs *engine); void intel_engine_cleanup_cmd_parser(struct intel_engine_cs *engine); int intel_engine_cmd_parser(struct intel_engine_cs *engine, struct i915_vma *batch,