Re: [PATCH] x86/tsc: fix 64bit divisor be truncated in calc_hpet_ref

From: Thomas Gleixner
Date: Tue Apr 17 2018 - 05:24:43 EST


On Fri, 13 Apr 2018, Xiaoming Gao wrote:
> From ba3d2fb699c4d8ee61b05d7e70be48b9c4e22baf Mon Sep 17 00:00:00 2001
> From: Xiaoming Gao <newtongao@xxxxxxxxxxx>
> Date: Fri, 13 Apr 2018 17:05:18 +0800
> Subject: [PATCH] x86/tsc: fix 64bit divisor be truncated in calc_hpet_ref
>
> the HPET frequency got larger on intel skylake, thus could cause tmp to
> exceed 32bits.
> do_div will truncate 64bits tmp to 32bits, so the frequency calced via
> HPET will be wrong, use div64_u64 can fix it.
>
> Signed-off-by: Xiaoming Gao <newtongao@xxxxxxxxxxx>
> ---
> Âarch/x86/kernel/tsc.c |ÂÂÂ 2 +-
> Â1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
> index 9714a7a..8700269 100644
> --- a/arch/x86/kernel/tsc.c
> +++ b/arch/x86/kernel/tsc.c
> @@ -160,7 +160,7 @@ static unsigned long calc_hpet_ref(u64 deltatsc, u64
> hpet1, u64 hpet2)
> ÂÂÂÂ hpet2 -= hpet1;
> ÂÂÂÂ tmp = ((u64)hpet2 * hpet_readl(HPET_PERIOD));
> ÂÂÂÂ do_div(tmp, 1000000);
> -ÂÂÂ do_div(deltatsc, tmp);
> +ÂÂÂ deltatsc = div64_u64(deltatsc, tmp);
>
> ÂÂÂÂ return (unsigned long) deltatsc;

Please fix your MUA so it does not whitespace damage
patches. Documentation/process/email-clients.rst tells you how to teach
thunderbird to do the right thing.

Attaching the patch does not help either as it breaks the workflow. I've
fixed it up manually this time, but please be more careful next time.

Thanks,

tglx