[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAGXxSxXmgzxN361Cko1fY_+oWwfgjXLhS61gtvqB8YYXHXZVyw@mail.gmail.com>
Date: Mon, 31 Oct 2011 17:00:58 +0800
From: Chen Jie <chenj@...ote.com>
To: linux-mips@...ux-mips.org, LKML <linux-kernel@...r.kernel.org>
Cc: johnstul@...ibm.com, tglx@...utronix.de, yanhua <yanh@...ote.com>,
项宇 <xiangy@...ote.com>,
zhangfx <zhangfx@...ote.com>,
孙海勇 <sunhy@...ote.com>
Subject: [MIPS]clocks_calc_mult_shift() may gen a too big mult value
Hi all,
On MIPS, with maxsec=4, clocks_calc_mult_shift() may generate a very
big mult, which may easily cause timekeeper.mult overflow within
timekeeping jobs.
e.g. when clock freq was 250000500(i.e. mips_hpt_frequency=250000500,
and the CPU Freq will be 250000500*2=500001000), mult will be
0xffffde72
Attachment is a script that calculates mult values for CPU Freq
between 400050000 and 500050000, with 1KHz step. It outputs mult
values greater than 0xf0000000:
CPU Freq:500001000, mult:0xffffde72, shift:30
CPU Freq:500002000, mult:0xffffbce4, shift:30
CPU Freq:500003000, mult:0xffff9b56, shift:30
CPU Freq:500004000, mult:0xffff79c9, shift:30
...
The peak value appears around CPU_freq=500001000.
To avoid this, it may need:
1. Supply a bigger maxsec value?
2. In clocks_calc_mult_shift(), pick next mult/shift pair if mult is
too big? Then maxsec will not be strictly obeyed.
3. Change timekeeper.mult to u64?
4. ...
Any idea?
--
Regards,
- Chen Jie
View attachment "mult-test.py" of type "text/x-python" (511 bytes)
Powered by blists - more mailing lists