mirror of https://gitee.com/openkylin/linux.git
gpio: Switch timestamps to ktime_get_ns()
The existing use of ktime_get_real_ns() in the timestamps from the GPIO events is dubious. We have had several discussions about this timestamp, and it is unclear whether userspace has ever taken into account that a timestamp from ktime_get_real_ns() can actually move backwards in time relative the previous timetamp, and userspace is more likely to expect a monotonic counter. Background: https://lore.kernel.org/linux-gpio/CAK8P3a1Skvm48sje8FNDPLYqyz9Lf8q0qX1QETWtyZTxuX4k1g@mail.gmail.com/ https://marc.info/?l=linux-gpio&m=151661955709074&w=2 The change is ABI incompatible, but incompatible in a way that is IMO more likely to fix future bugs rather than break current userspace. To the best of my knowledge all userspace expects a monotonic timestamp and users are just lucky that they very seldom move backwards in time. Cc: Arnd Bergmann <arnd@arndb.de> Acked-by: Bartosz Golaszewski <bgolaszewski@baylibre.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
1739a2d852
commit
f8850206e1
|
@ -954,7 +954,7 @@ static irqreturn_t lineevent_irq_thread(int irq, void *p)
|
|||
* we didn't get the timestamp from lineevent_irq_handler().
|
||||
*/
|
||||
if (!le->timestamp)
|
||||
ge.timestamp = ktime_get_real_ns();
|
||||
ge.timestamp = ktime_get_ns();
|
||||
else
|
||||
ge.timestamp = le->timestamp;
|
||||
|
||||
|
@ -995,7 +995,7 @@ static irqreturn_t lineevent_irq_handler(int irq, void *p)
|
|||
* Just store the timestamp in hardirq context so we get it as
|
||||
* close in time as possible to the actual event.
|
||||
*/
|
||||
le->timestamp = ktime_get_real_ns();
|
||||
le->timestamp = ktime_get_ns();
|
||||
|
||||
return IRQ_WAKE_THREAD;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue