FAILED: patch "[PATCH] drm/i915: Use ktime on wait_for" failed to apply to 4.16-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.16-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
6de3b1f26d1e8adb53d97835400c541ce50155e5Mon Sep 17 00:00:00 2001
From: Mika Kuoppala <[email protected]>
Date: Mon, 23 Apr 2018 14:37:53 +0300
Subject: [PATCH] drm/i915: Use ktime on wait_for
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
We use jiffies to determine when wait expires. However Imre did find out that jiffies can and will do a >1 increments on certain situations [1]. When this happens in a wait_for loop, we return timeout errorneously much earlier than what the real wallclock would say.
We can't afford our waits to timeout prematurely. Discard jiffies and change to ktime to detect timeouts.
v2: added bugzilla entry (Imre), added stable (Chris)
References: https://lkml.org/lkml/2018/4/18/798 [1]
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105771
drivers/gpu/drm/i915/intel_drv.h +2 -2
@@ -49,12 +49,12 @@* check the condition before the timeout. */ #define __wait_for (OP ,COND ,US , Wmin, Wmax) ({ \ - unsigned long timeout__ = jiffies + usecs_to_jiffies(US) + 1; \ + const ktime_t end__ = ktime_add_ns(ktime_get_raw(), 1000ll * (US)); \ long wait__ = (Wmin);/* recommended min for usleep is 10 us */ \int ret__; \might_sleep (); \for (;;) { \ -bool expired__ =time_after (jiffies, timeout__); \ +const bool expired__ =ktime_after (ktime_get_raw (), end__); \OP ; \if (COND ) { \ ret__ =0 ; \