On 14-12-07 03:59, David P. Reed wrote: > Replace use of outb to "unused" diagnostic port 0x80 for time delay > with udelay based time delay on x86_64 architecture machines. Fix for > bugs 9511 and 6307 in bugzilla, plus bugs reported in > bugzilla.redhat.com. > > Derived from suggestion (that didn't compile) by Pavel Machek, and > tested, also based on measurements of typical timings of out's > collated by Rene Herman from many in the community. > > This patch fixes a number of bugs known to cause problems on HP > Pavilion dv9000z and dv6000z laptops - in the form of solid freezes > when hwclock is used to show or set the time. Also, it potentially > improves bus utilization on SMP machines, by using a waiting process > that doesn't tie up the ISA/LPC bus for 1 or 2 microseconds. > > i386 family fixes (completely parallel) were not included, considering > that such machines might involve more risk of problems on legacy machines. Here's the corresponding 32-bit patch. Applies fine to (and works on) v2.6.23.x as well after un-uniting the paths... I do believe it would be better to do both; x86-64 machines can run 32-bit kernels fine and might certainly in the form of generic (installer) kernels and the like so if it's a fix lets fix it across the board -- the 2 us delay is going to be enough for everything out there, certainly given that _0_ is normally enough. With the arches just merged, minimising diferences should be a goal in itself I guess. One thing though -- I believe we want to adjust the loops_per_jiffy default to make sure this works, or would work, pre-calibration as well? Not really sure how needed it is, but bogomips is defined as bogomips = loops_per_jiffy / (500000 / HZ) <=> loops_per_jiffy = bogomips * (500000 / HZ) which with assuming any machine above 1G isn't affected by any of this and bogomips coming out to 2 * MHz on anything I myself have run linux on might suggest that loops_per_jiffy = 2 * 1000 * (500000 / HZ) = 1000000000 / HZ could possibly be a sane if very large default? Alan? diff --git a/init/main.c b/init/main.c index 9def935..6d41771 100644 --- a/init/main.c +++ b/init/main.c @@ -229,10 +229,9 @@ static int __init obsolete_checksetup(char *line) } /* - * This should be approx 2 Bo*oMips to start (note initial shift), and will - * still work even if initially too large, it will just take slightly longer + * Initial value roughly corresponds to a 1 GHz CPU */ -unsigned long loops_per_jiffy = (1<<12); +unsigned long loops_per_jiffy = 1000000000 / HZ; EXPORT_SYMBOL(loops_per_jiffy);