From patchwork Wed Jun 2 16:41:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Ekstrand X-Patchwork-Id: 12295315 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BBC5FC47092 for ; Wed, 2 Jun 2021 16:42:09 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 899F9619BF for ; Wed, 2 Jun 2021 16:42:09 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 899F9619BF Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=jlekstrand.net Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4267B6ED17; Wed, 2 Jun 2021 16:42:03 +0000 (UTC) Received: from mail-pg1-x52b.google.com (mail-pg1-x52b.google.com [IPv6:2607:f8b0:4864:20::52b]) by gabe.freedesktop.org (Postfix) with ESMTPS id DE4AD6ED12 for ; Wed, 2 Jun 2021 16:42:01 +0000 (UTC) Received: by mail-pg1-x52b.google.com with SMTP id i5so2757071pgm.0 for ; Wed, 02 Jun 2021 09:42:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jlekstrand-net.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7cZNhnr+5WrsKr439fZAhMrLnU+fpKD+CnIKC/4jxAo=; b=GM/4MinUSiyf/eKEPggHAGFFOaNYff4zljupkjuUAIW/7u6F9+9oK1P6nsm1NoAWr5 DwRu7kaFE+NvwyaTMpqSYWCWtcxxqGaG7OAeydNC5Pwx9v2pR72/E5dmIjLbqcYpGtwW HTTo4EC5mFLvC0Q+I/Nfq+nVmDDbhjpTWkymzmTHkEESP3VKQBxs92O4YhhVYCMNMIDg 8bfAFC68YU3u7s3GrpQZq7FgZEgtCHMGzuMBO4K47gxd5FwJwwFBrQ0KqWwQL6P2jo28 pX5w14A5dXAR4WU774B1kqGEfvGQ9Xz0Ov/RokXUitM9qBbciIqd6W5Li1fE++FL+vZ7 moIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=7cZNhnr+5WrsKr439fZAhMrLnU+fpKD+CnIKC/4jxAo=; b=iJpRJ/7IOdIJu13fO+E/MCFTaLUbsB5lDym292azQQVwspu2Ndt/9kTZnATd1ajLXf jpTxCrJTRUuBatV5ArXsb9hiEYnU9oqYIx+LsYDSTChemwn9TAdNh8Gh6AhkEgHxukRI iFR2FMfEKhDRMO5wWKi1tQ1pjo+CFklmZMq5c3WVsCB8nh4xA4T6YvP6mwu/4B+o2KVp 4uvtUCLF7KdmbXOhkyMSTT3ZOOHu/P6VQ8vM0Hbd+DLBRrJAvl3C4oX9OYSu9rFH0JEt grRAw5bR8BNL/v7uX4COebgto/IjuaTy5cFAPtlrLW1q8M+G5BUnatYtDLoKUdzMyXOO tTbA== X-Gm-Message-State: AOAM530wEntFlMtjq8MR3V3d7cNrs/mKsUdEJeacwNkv9YT7OGvlAGnA WBA+CXbhSw+E1BTu9zJ6FIQdz/7Krl+ouQ== X-Google-Smtp-Source: ABdhPJx8KCvFopugluMFyrRON4sJZ+RkXEAps7abWc2UWrC1RhnJ4O1fekZ3/lVN5KGAhAVuG2gItw== X-Received: by 2002:a65:6a52:: with SMTP id o18mr34714079pgu.177.1622652121159; Wed, 02 Jun 2021 09:42:01 -0700 (PDT) Received: from omlet.lan (jfdmzpr04-ext.jf.intel.com. [134.134.137.73]) by smtp.gmail.com with ESMTPSA id h6sm75803pjs.15.2021.06.02.09.41.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jun 2021 09:42:00 -0700 (PDT) From: Jason Ekstrand To: dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org Subject: [PATCH 5/5] Revert "drm/i915: Skip over MI_NOOP when parsing" Date: Wed, 2 Jun 2021 11:41:49 -0500 Message-Id: <20210602164149.391653-6-jason@jlekstrand.net> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210602164149.391653-1-jason@jlekstrand.net> References: <20210602164149.391653-1-jason@jlekstrand.net> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jon Bloomfield , Jason Ekstrand Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" This reverts a6c5e2aea704 ("drm/i915: Skip over MI_NOOP when parsing"). It complicates the batch parsing code a bit and increases indentation for no reason other than fast-skipping a command that userspace uses only rarely. Sure, there may be IGT tests that fill batches with NOOPs but that's not a case we should optimize for in the kernel. We should optimize for code clarity instead. Signed-off-by: Jason Ekstrand Reviewed-by: Jon Bloomfield --- drivers/gpu/drm/i915/i915_cmd_parser.c | 67 +++++++++++++------------- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_cmd_parser.c b/drivers/gpu/drm/i915/i915_cmd_parser.c index 056a233f443b4..8d34f05d22b75 100644 --- a/drivers/gpu/drm/i915/i915_cmd_parser.c +++ b/drivers/gpu/drm/i915/i915_cmd_parser.c @@ -1470,42 +1470,43 @@ int intel_engine_cmd_parser(struct intel_engine_cs *engine, * space. Parsing should be faster in some cases this way. */ batch_end = cmd + batch_length / sizeof(*batch_end); - while (*cmd != MI_BATCH_BUFFER_END) { - u32 length = 1; - - if (*cmd != MI_NOOP) { /* MI_NOOP == 0 */ - desc = find_cmd(engine, *cmd, desc, &default_desc); - if (!desc) { - DRM_DEBUG("CMD: Unrecognized command: 0x%08X\n", *cmd); - ret = -EINVAL; - break; - } + do { + u32 length; - if (desc->flags & CMD_DESC_FIXED) - length = desc->length.fixed; - else - length = (*cmd & desc->length.mask) + LENGTH_BIAS; + if (*cmd == MI_BATCH_BUFFER_END) + break; - if ((batch_end - cmd) < length) { - DRM_DEBUG("CMD: Command length exceeds batch length: 0x%08X length=%u batchlen=%td\n", - *cmd, - length, - batch_end - cmd); - ret = -EINVAL; - break; - } + desc = find_cmd(engine, *cmd, desc, &default_desc); + if (!desc) { + DRM_DEBUG("CMD: Unrecognized command: 0x%08X\n", *cmd); + ret = -EINVAL; + break; + } - if (!check_cmd(engine, desc, cmd, length)) { - ret = -EACCES; - break; - } + if (desc->flags & CMD_DESC_FIXED) + length = desc->length.fixed; + else + length = (*cmd & desc->length.mask) + LENGTH_BIAS; - if (cmd_desc_is(desc, MI_BATCH_BUFFER_START)) { - ret = check_bbstart(cmd, offset, length, batch_length, - batch_addr, shadow_addr, - jump_whitelist); - break; - } + if ((batch_end - cmd) < length) { + DRM_DEBUG("CMD: Command length exceeds batch length: 0x%08X length=%u batchlen=%td\n", + *cmd, + length, + batch_end - cmd); + ret = -EINVAL; + break; + } + + if (!check_cmd(engine, desc, cmd, length)) { + ret = -EACCES; + break; + } + + if (cmd_desc_is(desc, MI_BATCH_BUFFER_START)) { + ret = check_bbstart(cmd, offset, length, batch_length, + batch_addr, shadow_addr, + jump_whitelist); + break; } if (!IS_ERR_OR_NULL(jump_whitelist)) @@ -1518,7 +1519,7 @@ int intel_engine_cmd_parser(struct intel_engine_cs *engine, ret = -EINVAL; break; } - } + } while (1); if (trampoline) { /*