[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <alpine.DEB.2.21.1809051240560.1416@nanos.tec.linutronix.de>
Date: Wed, 5 Sep 2018 12:42:38 +0200 (CEST)
From: Thomas Gleixner <tglx@...utronix.de>
To: "Chuan Hua, Lei" <chuanhua.lei@...ux.intel.com>
cc: Pavel Tatashin <pasha.tatashin@...cle.com>,
linux-kernel@...r.kernel.org, x86@...nel.org
Subject: Re: [PATCH v15 19/26] x86/tsc: calibrate tsc only once
On Wed, 5 Sep 2018, Chuan Hua, Lei wrote:
> > static unsigned long __init get_loops_per_jiffy(void)
> > {
> > unsigned long lpj = tsc_khz * KHZ;
> >
> > do_div(lpj, HZ);
> > return lpj;
> > }
> Just tried this with 4.19-rc2 on x86(32bit). lpj return as zero which is not
> expected
> After disassembling the code,
> 0xc1239a9e <+199>: imul $0x3e8,0xc12296e4,%edx
> 0xc1239aa8 <+209>: xor %ecx,%ecx
> 0xc1239aaa <+211>: test %edx,%edx
> 0xc1239aac <+213>: mov %eax,%ebx
> 0xc1239aae <+215>: je 0xc1239abd <tsc_init+230>
> 0xc1239ab0 <+217>: mov $0x64,%ecx
> 0xc1239ab5 <+222>: mov %edx,%eax
> 0xc1239ab7 <+224>: xor %edx,%edx
> 0xc1239ab9 <+226>: div %ecx
> 0xc1239abb <+228>: mov %eax,%ecx
> 0xc1239abd <+230>: mov %ebx,%eax
> 0xc1239abf <+232>: mov $0x64,%ebx
> 0xc1239ac4 <+237>: div %ebx
> 0xc1239ac6 <+239>: mov %ecx,%edx
> imul will load the result into %edx, %edx supposed to be high 32 bit which is
> not zero,
> It should be zero in this case. both lpj and tsc_khz should be u64 to work
> properly.
Good catch! Care to send a patch?
Thanks,
tglx
Powered by blists - more mailing lists