Avoid angering clang and smatch by using a constant value in a '&&' test,
by forcing that constant value into a boolean.
E.g.,
drivers/gpu/drm/i915/gt/intel_engine_heartbeat.c:159:13: warning: use of logical '&&' with constant operand [-Wconstant-logical-operand]
	if (!delay && CONFIG_DRM_I915_PREEMPT_TIMEOUT) {
                      ^  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Reported-by: kbuild test robot <lkp@intel.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Nathan Chancellor <natechancellor@gmail.com>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Nathan Chancellor <natechancellor@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191025135943.12524-1-chris@chris-wilson.co.uk
 
         * kill the banned context, we fallback to doing a local reset
         * instead.
         */
-       if (CONFIG_DRM_I915_PREEMPT_TIMEOUT && !intel_engine_pulse(engine))
+       if (IS_ACTIVE(CONFIG_DRM_I915_PREEMPT_TIMEOUT) &&
+           !intel_engine_pulse(engine))
                return true;
 
        /* If we are unable to send a pulse, try resetting this engine. */
 
                list_add(&obj->userfault_link, &i915->ggtt.userfault_list);
        mutex_unlock(&i915->ggtt.vm.mutex);
 
-       if (CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND)
+       if (IS_ACTIVE(CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND))
                intel_wakeref_auto(&i915->ggtt.userfault_wakeref,
                                   msecs_to_jiffies_timeout(CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND));
 
 
 
 void intel_engine_unpark_heartbeat(struct intel_engine_cs *engine)
 {
-       if (!CONFIG_DRM_I915_HEARTBEAT_INTERVAL)
+       if (!IS_ACTIVE(CONFIG_DRM_I915_HEARTBEAT_INTERVAL))
                return;
 
        next_heartbeat(engine);
        int err;
 
        /* Send one last pulse before to cleanup persistent hogs */
-       if (!delay && CONFIG_DRM_I915_PREEMPT_TIMEOUT) {
+       if (!delay && IS_ACTIVE(CONFIG_DRM_I915_PREEMPT_TIMEOUT)) {
                err = intel_engine_pulse(engine);
                if (err)
                        return err;
 
         * completion. That requires having a good predictor for the request
         * duration, which we currently lack.
         */
-       if (CONFIG_DRM_I915_SPIN_REQUEST &&
+       if (IS_ACTIVE(CONFIG_DRM_I915_SPIN_REQUEST) &&
            __i915_spin_request(rq, state, CONFIG_DRM_I915_SPIN_REQUEST)) {
                dma_fence_signal(&rq->fence);
                goto out;
 
        return READ_ONCE(t->expires) && !timer_pending(t);
 }
 
+/*
+ * This is a lookalike for IS_ENABLED() that takes a kconfig value,
+ * e.g. CONFIG_DRM_I915_SPIN_REQUEST, and evaluates whether it is non-zero
+ * i.e. whether the configuration is active. Wrapping up the config inside
+ * a boolean context prevents clang and smatch from complaining about potential
+ * issues in confusing logical-&& with bitwise-& for constants.
+ *
+ * Sadly IS_ENABLED() itself does not work with kconfig values.
+ *
+ * Returns 0 if @config is 0, 1 if set to any value.
+ */
+#define IS_ACTIVE(config) ((config) != 0)
+
 #endif /* !__I915_UTILS_H */