From patchwork Tue Aug 9 10:54:42 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dave Gordon X-Patchwork-Id: 9270879 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 515D96082E for ; Tue, 9 Aug 2016 10:55:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 424D627D0C for ; Tue, 9 Aug 2016 10:55:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3722E27F8D; Tue, 9 Aug 2016 10:55:27 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id E0DDE27D0C for ; Tue, 9 Aug 2016 10:55:26 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 7D96E6E4ED; Tue, 9 Aug 2016 10:55:26 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id ACB356E4ED for ; Tue, 9 Aug 2016 10:55:25 +0000 (UTC) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga103.jf.intel.com with ESMTP; 09 Aug 2016 03:55:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.28,494,1464678000"; d="scan'208";a="862260320" Received: from dsgordon-linux2.isw.intel.com ([10.102.226.88]) by orsmga003.jf.intel.com with ESMTP; 09 Aug 2016 03:55:10 -0700 From: Dave Gordon To: intel-gfx@lists.freedesktop.org Date: Tue, 9 Aug 2016 11:54:42 +0100 Message-Id: <1470740082-12945-6-git-send-email-david.s.gordon@intel.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1470740082-12945-1-git-send-email-david.s.gordon@intel.com> References: <1470740082-12945-1-git-send-email-david.s.gordon@intel.com> Organization: Intel Corporation (UK) Ltd. - Co. Reg. #1134945 - Pipers Way, Swindon SN3 1RJ Subject: [Intel-gfx] [PATCH v4 5/5] drm/i915/guc: ignore unrecognised loading & submission options X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Virus-Scanned: ClamAV using ClamSMTP Previously the code allowed *any* values for the enable_guc_loading and enable_guc_submission parameters, and forced them into range by clipping at each extremum. This version instead ignores unknown values, treating them as DEFAULT (which then gets converted to DISABLED or PREFERRED). Of course we also have to report that we've ignored unknown values so that the administrator or developer knows the kernel command line wasn't sensible! Signed-off-by: Dave Gordon Cc: Jani Nikula --- drivers/gpu/drm/i915/intel_guc.h | 8 ++++---- drivers/gpu/drm/i915/intel_guc_loader.c | 34 ++++++++++++++++++++++++++++----- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_guc.h b/drivers/gpu/drm/i915/intel_guc.h index 94db252..f8c44b1 100644 --- a/drivers/gpu/drm/i915/intel_guc.h +++ b/drivers/gpu/drm/i915/intel_guc.h @@ -91,10 +91,10 @@ struct i915_guc_client { }; /* - * These signed ranges represent user-requested preferences. - * Out-of-range values from the user will be clipped towards - * zero: any negative value is treated as -1, anything over 2 - * is just 2. ANY user-supplied value also taints the kernel. + * These values represent user-requested preferences; any other value will be + * treated as DEFAULT, so the driver will then choose an appropriate value. + * + * ANY user-supplied value (even DEFAULT) also taints the kernel. */ enum { GUC_SUBMISSION_DEFAULT = -1, diff --git a/drivers/gpu/drm/i915/intel_guc_loader.c b/drivers/gpu/drm/i915/intel_guc_loader.c index 898cccb..8a81e80 100644 --- a/drivers/gpu/drm/i915/intel_guc_loader.c +++ b/drivers/gpu/drm/i915/intel_guc_loader.c @@ -521,9 +521,9 @@ int intel_guc_setup(struct drm_device *dev) * nonfatal error (i.e. it doesn't prevent driver load, but * marks the GPU as wedged until reset). */ - if (i915.enable_guc_loading >= FIRMWARE_LOAD_MANDATORY) { + if (i915.enable_guc_loading == FIRMWARE_LOAD_MANDATORY) { ret = -EIO; - } else if (i915.enable_guc_submission >= GUC_SUBMISSION_MANDATORY) { + } else if (i915.enable_guc_submission == GUC_SUBMISSION_MANDATORY) { ret = -EIO; } else { ret = 0; @@ -687,13 +687,37 @@ void intel_guc_init(struct drm_device *dev) struct intel_guc_fw *guc_fw = &dev_priv->guc.guc_fw; const char *fw_path; - /* Any negative value means "use platform default" */ - if (i915.enable_guc_loading <= FIRMWARE_LOAD_DEFAULT) + /* Sanitise user-specified options */ + switch (i915.enable_guc_loading) { + case FIRMWARE_LOAD_DISABLED: + case FIRMWARE_LOAD_PREFERRED: + case FIRMWARE_LOAD_MANDATORY: + break; + + default: + DRM_INFO("ignoring unknown value %d for 'enable_guc_loading'\n", + i915.enable_guc_loading); + /*FALLTHRU*/ + case FIRMWARE_LOAD_DEFAULT: i915.enable_guc_loading = HAS_GUC_UCODE(dev) ? FIRMWARE_LOAD_PREFERRED : FIRMWARE_LOAD_DISABLED; - if (i915.enable_guc_submission <= GUC_SUBMISSION_DEFAULT) + break; + } + + switch (i915.enable_guc_submission) { + case GUC_SUBMISSION_DISABLED: + case GUC_SUBMISSION_PREFERRED: + case GUC_SUBMISSION_MANDATORY: + break; + + default: + DRM_INFO("ignoring unknown value %d for 'enable_guc_submission'\n", + i915.enable_guc_submission); + /*FALLTHRU*/ + case GUC_SUBMISSION_DEFAULT: i915.enable_guc_submission = HAS_GUC_SCHED(dev) ? GUC_SUBMISSION_PREFERRED : GUC_SUBMISSION_DISABLED; + } if (!HAS_GUC_UCODE(dev)) { fw_path = NULL;