From: Pavel Emelyanov <xemul@openvz.org>
To: Kirill Korotaev <dev@parallels.com>, Ingo Molnar <mingo@elte.hu>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Kirill Korotaev <dev@openvz.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Thomas Gleixner <tglx@linutronix.de>
Subject: Re: [git pull] timer fix
Date: Thu, 05 Feb 2009 12:58:15 +0300 [thread overview]
Message-ID: <498AB837.1040404@openvz.org> (raw)
In-Reply-To: <C5B07536.B77D%dev@parallels.com>
Kirill Korotaev wrote:
> ACK, it works. Why not save another 4 bytes of .bss then by changing
> hept_t1_cmp to u32? ;-)
Hm... .bss you say? :) The bloat-o-meter results would be:
For the original fix with casting hpet_t1_cmp to u32 inside the loop
add/remove: 0/0 grow/shrink: 1/0 up/down: 2/0 (2)
function old new delta
hpet_rtc_interrupt 741 743 +2
For the fix with casting the substitution result to s32
add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-2 (-2)
function old new delta
hpet_rtc_interrupt 741 739 -2
For the proposed by Kirill type change of the hpet_t1_cmp
add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-6 (-6)
function old new delta
hpet_rtc_timer_init 186 185 -1
hpet_rtc_interrupt 741 740 -1
hpet_t1_cmp 8 4 -4
That's the fix:
diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c
index 64d5ad0..dfbbb94 100644
--- a/arch/x86/kernel/hpet.c
+++ b/arch/x86/kernel/hpet.c
@@ -897,7 +897,7 @@ static unsigned long hpet_rtc_flags;
static int hpet_prev_update_sec;
static struct rtc_time hpet_alarm_time;
static unsigned long hpet_pie_count;
-static unsigned long hpet_t1_cmp;
+static u32 hpet_t1_cmp;
static unsigned long hpet_default_delta;
static unsigned long hpet_pie_delta;
static unsigned long hpet_pie_limit;
Reported-by: Kirill Korotaev <dev@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
This one also works. Should I re-send this patch in a proper way?
> Kirill
>
>
> On 2/5/09 1:58 AM, "Ingo Molnar" <mingo@elte.hu> wrote:
>
>>
>> * Linus Torvalds <torvalds@linux-foundation.org> wrote:
>>
>>> } while ((s32)(hpet_readl(HPET_COUNTER) - hpet_t1_cmp) > 0);
>> that is also more efficient code by 6 bytes:
>>
>> before:
>>
>> ffffffff81020856: ff c3 inc %ebx
>> ffffffff81020858: 48 05 f0 00 00 00 add $0xf0,%rax
>> ffffffff8102085e: 8b 00 mov (%rax),%eax
>> ffffffff81020860: 8b 15 2a 79 85 00 mov 0x85792a(%rip),%edx
>> # ffffffff81878190 <hpet_t1_cmp>
>> ffffffff81020866: 89 c0 mov %eax,%eax
>> ffffffff81020868: 48 29 d0 sub %rdx,%rax
>> ffffffff8102086b: 48 85 c0 test %rax,%rax
>> ffffffff8102086e: 7f bf jg ffffffff8102082f
>> <hpet_rtc_interrupt+0x68>
>> ffffffff81020870: 85 db test %ebx,%ebx
>>
>> after:
>>
>> ffffffff81020856: ff c3 inc %ebx
>> ffffffff81020858: 48 05 f0 00 00 00 add $0xf0,%rax
>> ffffffff8102085e: 8b 00 mov (%rax),%eax
>> ffffffff81020860: 2b 05 2a 79 85 00 sub 0x85792a(%rip),%eax
>> # ffffffff81878190 <hpet_t1_cmp>
>> ffffffff81020866: 85 c0 test %eax,%eax
>> ffffffff81020868: 7f c5 jg ffffffff8102082f
>> <hpet_rtc_interrupt+0x68>
>> ffffffff8102086a: 85 db test %ebx,%ebx
>>
>> Kirill, Pavel, could you please re-test the updated commit attached below?
>>
>> Ingo
>>
>> ---------------->
>> From 66a36a1e95fe9de9c6a56f0bcd01f4ba21929f86 Mon Sep 17 00:00:00 2001
>> From: Pavel Emelyanov <xemul@openvz.org>
>> Date: Wed, 4 Feb 2009 13:40:31 +0300
>> Subject: [PATCH] x86: fix hpet timer reinit for x86_64
>>
>> There's a small problem with hpet_rtc_reinit function - it checks
>> for the:
>>
>> hpet_readl(HPET_COUNTER) - hpet_t1_cmp > 0
>>
>> to continue increasing both the HPET_T1_CMP (register) and the
>> hpet_t1_cmp (variable).
>>
>> But since the HPET_COUNTER is always 32-bit, if the hpet_t1_cmp
>> is 64-bit this condition will always be FALSE once the latter hits
>> the 32-bit boundary, and we can have a situation, when we don't
>> increase the HPET_T1_CMP register high enough.
>>
>> The result - timer stops ticking, since HPET_T1_CMP becomes less,
>> than the COUNTER and never increased again.
>>
>> The solution is (based on Linus's suggestion) to compare 64-bits
>> (on 64-bit x86), but to do the comparison on 32-bit signed
>> integers.
>>
>> Reported-by: Kirill Korotaev <dev@openvz.org>
>> Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
>> Signed-off-by: Ingo Molnar <mingo@elte.hu>
>> ---
>> arch/x86/kernel/hpet.c | 2 +-
>> 1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c
>> index 64d5ad0..c761f91 100644
>> --- a/arch/x86/kernel/hpet.c
>> +++ b/arch/x86/kernel/hpet.c
>> @@ -1075,7 +1075,7 @@ static void hpet_rtc_timer_reinit(void)
>> hpet_t1_cmp += delta;
>> hpet_writel(hpet_t1_cmp, HPET_T1_CMP);
>> lost_ints++;
>> - } while ((long)(hpet_readl(HPET_COUNTER) - hpet_t1_cmp) > 0);
>> + } while ((s32)(hpet_readl(HPET_COUNTER) - hpet_t1_cmp) > 0);
>>
>> if (lost_ints) {
>> if (hpet_rtc_flags & RTC_PIE)
>
>
>
next prev parent reply other threads:[~2009-02-05 10:00 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-04 19:25 [git pull] timer fix Ingo Molnar
2009-02-04 22:11 ` Linus Torvalds
2009-02-04 22:16 ` Linus Torvalds
2009-02-04 22:25 ` Ingo Molnar
2009-02-04 22:58 ` Ingo Molnar
2009-02-04 23:13 ` H. Peter Anvin
2009-02-05 0:04 ` Ingo Molnar
2009-02-05 7:51 ` Kirill Korotaev
2009-02-05 9:58 ` Pavel Emelyanov [this message]
2009-02-05 14:30 ` Ingo Molnar
2009-02-05 16:04 ` Ray Lee
-- strict thread matches above, loose matches on Subject: below --
2009-02-17 16:38 Ingo Molnar
2009-06-20 16:55 [GIT PULL] " Ingo Molnar
2009-08-04 19:04 Ingo Molnar
2009-08-09 16:09 Ingo Molnar
2009-09-26 12:27 Ingo Molnar
2009-10-02 12:38 Ingo Molnar
2010-01-31 17:26 Ingo Molnar
2011-02-15 17:06 Ingo Molnar
2011-02-28 17:39 Ingo Molnar
2011-04-29 18:11 Ingo Molnar
2011-10-17 1:39 Linux 3.1-rc9 Linus Torvalds
2011-10-17 10:34 ` Peter Zijlstra
2011-10-17 14:57 ` Linus Torvalds
2011-10-17 17:54 ` Peter Zijlstra
2011-10-17 18:31 ` Linus Torvalds
2011-10-17 19:23 ` Peter Zijlstra
2011-10-17 21:00 ` Thomas Gleixner
2011-10-18 8:39 ` Thomas Gleixner
2011-10-18 9:05 ` Peter Zijlstra
2011-10-18 14:59 ` Linus Torvalds
2011-10-18 18:14 ` [GIT PULL] timer fix Ingo Molnar
2013-09-18 16:22 Ingo Molnar
2013-10-26 12:27 Ingo Molnar
2014-01-15 18:27 Ingo Molnar
2014-03-29 18:44 Ingo Molnar
2015-02-06 18:38 Ingo Molnar
2015-07-18 3:06 Ingo Molnar
2015-08-14 7:13 Ingo Molnar
2016-04-23 11:34 Ingo Molnar
2016-07-13 12:58 Ingo Molnar
2016-10-18 11:18 Ingo Molnar
2016-12-23 22:53 Ingo Molnar
2017-01-18 9:37 Ingo Molnar
2017-05-12 7:35 Ingo Molnar
2017-07-21 10:21 Ingo Molnar
2017-08-26 7:17 Ingo Molnar
2017-09-24 11:25 Ingo Molnar
2018-03-25 9:00 Ingo Molnar
2018-12-21 12:34 Ingo Molnar
2018-12-21 19:30 ` pr-tracker-bot
2018-12-23 19:29 ` Heiko Carstens
2019-01-17 9:51 ` Ingo Molnar
2019-01-17 15:58 ` Heiko Carstens
2019-01-17 16:57 ` Thomas Gleixner
2019-04-12 13:09 Ingo Molnar
2019-04-13 4:05 ` pr-tracker-bot
2019-09-26 20:18 Ingo Molnar
2019-09-26 23:00 ` pr-tracker-bot
2019-10-02 22:06 Ingo Molnar
2019-10-02 23:00 ` pr-tracker-bot
2019-11-16 21:38 Ingo Molnar
2019-11-17 0:35 ` pr-tracker-bot
2020-04-25 10:16 Ingo Molnar
2020-04-25 19:30 ` pr-tracker-bot
2020-06-28 18:39 Ingo Molnar
2020-06-28 22:05 ` pr-tracker-bot
2024-05-10 11:12 Ingo Molnar
2024-05-10 17:29 ` pr-tracker-bot
2024-06-15 8:05 Ingo Molnar
2024-06-15 18:38 ` pr-tracker-bot
2025-04-18 20:34 Ingo Molnar
2025-04-18 21:15 ` pr-tracker-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=498AB837.1040404@openvz.org \
--to=xemul@openvz.org \
--cc=akpm@linux-foundation.org \
--cc=dev@openvz.org \
--cc=dev@parallels.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.