Commit 03380d17 authored by Michał Winiarski's avatar Michał Winiarski Committed by Chris Wilson

drm/i915/guc: Don't try to enable GuC logging when we're not using GuC

When changing the default values for guc_log_level, we accidentally left
the log enabled on non-guc platforms. Let's fix that.

v2: Define the levels used and remove (now obsolete) comments (Chris)
v3: Use "IS" rather than "TO" for booleans (Chris)

Fixes: 9605d1ce ("drm/i915/guc: Default to non-verbose GuC logging")
Reported-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarMichał Winiarski <michal.winiarski@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Sagar Arun Kamble <sagar.a.kamble@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20180320115517.20423-1-michal.winiarski@intel.com
parent d3d57927
...@@ -229,10 +229,10 @@ static u32 get_log_control_flags(void) ...@@ -229,10 +229,10 @@ static u32 get_log_control_flags(void)
GEM_BUG_ON(level < 0); GEM_BUG_ON(level < 0);
if (!GUC_LOG_LEVEL_TO_ENABLED(level)) if (!GUC_LOG_LEVEL_IS_ENABLED(level))
flags |= GUC_LOG_DEFAULT_DISABLED; flags |= GUC_LOG_DEFAULT_DISABLED;
if (!GUC_LOG_LEVEL_TO_VERBOSE(level)) if (!GUC_LOG_LEVEL_IS_VERBOSE(level))
flags |= GUC_LOG_DISABLED; flags |= GUC_LOG_DISABLED;
else else
flags |= GUC_LOG_LEVEL_TO_VERBOSITY(level) << flags |= GUC_LOG_LEVEL_TO_VERBOSITY(level) <<
......
...@@ -515,8 +515,7 @@ int intel_guc_log_level_set(struct intel_guc_log *log, u64 val) ...@@ -515,8 +515,7 @@ int intel_guc_log_level_set(struct intel_guc_log *log, u64 val)
* GuC is recognizing log levels starting from 0 to max, we're using 0 * GuC is recognizing log levels starting from 0 to max, we're using 0
* as indication that logging should be disabled. * as indication that logging should be disabled.
*/ */
if (val < GUC_LOG_LEVEL_DISABLED || if (val < GUC_LOG_LEVEL_DISABLED || val > GUC_LOG_LEVEL_MAX)
val > GUC_VERBOSITY_TO_LOG_LEVEL(GUC_LOG_VERBOSITY_MAX))
return -EINVAL; return -EINVAL;
mutex_lock(&dev_priv->drm.struct_mutex); mutex_lock(&dev_priv->drm.struct_mutex);
...@@ -527,8 +526,8 @@ int intel_guc_log_level_set(struct intel_guc_log *log, u64 val) ...@@ -527,8 +526,8 @@ int intel_guc_log_level_set(struct intel_guc_log *log, u64 val)
} }
intel_runtime_pm_get(dev_priv); intel_runtime_pm_get(dev_priv);
ret = guc_log_control(guc, GUC_LOG_LEVEL_TO_VERBOSE(val), ret = guc_log_control(guc, GUC_LOG_LEVEL_IS_VERBOSE(val),
GUC_LOG_LEVEL_TO_ENABLED(val), GUC_LOG_LEVEL_IS_ENABLED(val),
GUC_LOG_LEVEL_TO_VERBOSITY(val)); GUC_LOG_LEVEL_TO_VERBOSITY(val));
intel_runtime_pm_put(dev_priv); intel_runtime_pm_put(dev_priv);
if (ret) { if (ret) {
......
...@@ -47,13 +47,15 @@ struct intel_guc; ...@@ -47,13 +47,15 @@ struct intel_guc;
* ignores the enable bit. * ignores the enable bit.
*/ */
#define GUC_LOG_LEVEL_DISABLED 0 #define GUC_LOG_LEVEL_DISABLED 0
#define GUC_LOG_LEVEL_TO_ENABLED(x) ((x) > 0) #define GUC_LOG_LEVEL_NON_VERBOSE 1
#define GUC_LOG_LEVEL_TO_VERBOSE(x) ((x) > 1) #define GUC_LOG_LEVEL_IS_ENABLED(x) ((x) > GUC_LOG_LEVEL_DISABLED)
#define GUC_LOG_LEVEL_IS_VERBOSE(x) ((x) > GUC_LOG_LEVEL_NON_VERBOSE)
#define GUC_LOG_LEVEL_TO_VERBOSITY(x) ({ \ #define GUC_LOG_LEVEL_TO_VERBOSITY(x) ({ \
typeof(x) _x = (x); \ typeof(x) _x = (x); \
GUC_LOG_LEVEL_TO_VERBOSE(_x) ? _x - 2 : 0; \ GUC_LOG_LEVEL_IS_VERBOSE(_x) ? _x - 2 : 0; \
}) })
#define GUC_VERBOSITY_TO_LOG_LEVEL(x) ((x) + 2) #define GUC_VERBOSITY_TO_LOG_LEVEL(x) ((x) + 2)
#define GUC_LOG_LEVEL_MAX GUC_VERBOSITY_TO_LOG_LEVEL(GUC_LOG_VERBOSITY_MAX)
struct intel_guc_log { struct intel_guc_log {
u32 flags; u32 flags;
......
...@@ -69,14 +69,15 @@ static int __get_platform_enable_guc(struct drm_i915_private *dev_priv) ...@@ -69,14 +69,15 @@ static int __get_platform_enable_guc(struct drm_i915_private *dev_priv)
static int __get_default_guc_log_level(struct drm_i915_private *dev_priv) static int __get_default_guc_log_level(struct drm_i915_private *dev_priv)
{ {
int guc_log_level = 1; /* non-verbose */ int guc_log_level;
/* Enable if we're running on platform with GuC and debug config */ if (!HAS_GUC(dev_priv) || !intel_uc_is_using_guc())
if (HAS_GUC(dev_priv) && intel_uc_is_using_guc() && guc_log_level = GUC_LOG_LEVEL_DISABLED;
(IS_ENABLED(CONFIG_DRM_I915_DEBUG) || else if (IS_ENABLED(CONFIG_DRM_I915_DEBUG) ||
IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))) IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))
guc_log_level = guc_log_level = GUC_LOG_LEVEL_MAX;
GUC_VERBOSITY_TO_LOG_LEVEL(GUC_LOG_VERBOSITY_MAX); else
guc_log_level = GUC_LOG_LEVEL_NON_VERBOSE;
/* Any platform specific fine-tuning can be done here */ /* Any platform specific fine-tuning can be done here */
...@@ -143,19 +144,17 @@ static void sanitize_options_early(struct drm_i915_private *dev_priv) ...@@ -143,19 +144,17 @@ static void sanitize_options_early(struct drm_i915_private *dev_priv)
i915_modparams.guc_log_level = 0; i915_modparams.guc_log_level = 0;
} }
if (i915_modparams.guc_log_level > if (i915_modparams.guc_log_level > GUC_LOG_LEVEL_MAX) {
GUC_VERBOSITY_TO_LOG_LEVEL(GUC_LOG_VERBOSITY_MAX)) {
DRM_WARN("Incompatible option detected: %s=%d, %s!\n", DRM_WARN("Incompatible option detected: %s=%d, %s!\n",
"guc_log_level", i915_modparams.guc_log_level, "guc_log_level", i915_modparams.guc_log_level,
"verbosity too high"); "verbosity too high");
i915_modparams.guc_log_level = i915_modparams.guc_log_level = GUC_LOG_LEVEL_MAX;
GUC_VERBOSITY_TO_LOG_LEVEL(GUC_LOG_VERBOSITY_MAX);
} }
DRM_DEBUG_DRIVER("guc_log_level=%d (enabled:%s, verbose:%s, verbosity:%d)\n", DRM_DEBUG_DRIVER("guc_log_level=%d (enabled:%s, verbose:%s, verbosity:%d)\n",
i915_modparams.guc_log_level, i915_modparams.guc_log_level,
yesno(i915_modparams.guc_log_level), yesno(i915_modparams.guc_log_level),
yesno(GUC_LOG_LEVEL_TO_VERBOSE(i915_modparams.guc_log_level)), yesno(GUC_LOG_LEVEL_IS_VERBOSE(i915_modparams.guc_log_level)),
GUC_LOG_LEVEL_TO_VERBOSITY(i915_modparams.guc_log_level)); GUC_LOG_LEVEL_TO_VERBOSITY(i915_modparams.guc_log_level));
/* Make sure that sanitization was done */ /* Make sure that sanitization was done */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment