| From 9b50898ad96c793a8f7cde9d8f281596d752a7dd Mon Sep 17 00:00:00 2001 |
| From: Takashi Iwai <tiwai@suse.de> |
| Date: Tue, 25 Oct 2016 15:56:35 +0200 |
| Subject: ALSA: seq: Fix time account regression |
| |
| From: Takashi Iwai <tiwai@suse.de> |
| |
| commit 9b50898ad96c793a8f7cde9d8f281596d752a7dd upstream. |
| |
| The recent rewrite of the sequencer time accounting using timespec64 |
| in the commit [3915bf294652: ALSA: seq_timer: use monotonic times |
| internally] introduced a bad regression. Namely, the time reported |
| back doesn't increase but goes back and forth. |
| |
| The culprit was obvious: the delta is stored to the result (cur_time = |
| delta), instead of adding the delta (cur_time += delta)! |
| |
| Let's fix it. |
| |
| Fixes: 3915bf294652 ('ALSA: seq_timer: use monotonic times internally') |
| Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=177571 |
| Reported-by: Yves Guillemot <yc.guillemot@wanadoo.fr> |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| sound/core/seq/seq_timer.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/sound/core/seq/seq_timer.c |
| +++ b/sound/core/seq/seq_timer.c |
| @@ -448,8 +448,8 @@ snd_seq_real_time_t snd_seq_timer_get_cu |
| |
| ktime_get_ts64(&tm); |
| tm = timespec64_sub(tm, tmr->last_update); |
| - cur_time.tv_nsec = tm.tv_nsec; |
| - cur_time.tv_sec = tm.tv_sec; |
| + cur_time.tv_nsec += tm.tv_nsec; |
| + cur_time.tv_sec += tm.tv_sec; |
| snd_seq_sanity_real_time(&cur_time); |
| } |
| spin_unlock_irqrestore(&tmr->lock, flags); |