A patch in 2.6.25 added perl as a build requirement for the Linux kernel, by 
making the file kernel/timeconst.h generated by a perl script.

Oddly, the perl script in question tested whether or not you had _enough_ perl 
installed, and if you didn't have an optional bignum package out of cpan it 
checked if the HZ value you wanted to generate #defines for matched one of 15 
cached values it had precomputed numbers for.  (This cached information took 
up half the perl file).

These values are in fact all the ones currently used by the Linux kernel.  
Every HZ value for every platform is set by a kconfig choice menu, so the 
only way to add a new HZ value is modify the kernel source.  After 17 years, 
with hundreds of target boards, there are currently 15 only values in use.

This patch moves the cache out of the perl program and instead pregenerates a 
kernel/timeconst.h file, which it checks in.  The start of that file is:

> /* Conversion constants for HZ */
> /* DO NOT EDIT!  Automatically generated by:
>    kernel/timeconst.pl 24 32 48 64 100 122 128 200 250 256 300 512 1000 1024 
1200
> */

I.E. it gives you the command line to run to regenerate the file.  If you need 
to add another value, cut and paste that command line to generate a new 
timeconst.h file, and submit the diff.  (Note that the perl script records 
the command line it was run with automatically, that will be part of the 
diff.)

This patch:

1) Removes half the perl script (all the conditional cached stuff).  The 
result is a much smaller and simpler perl script.

2) Changes the perl script to generate a single include file with 15 #ifdefs 
rather than generating an #include file with the one HZ value currently 
selected by kconfig.  (The last #else case #errors out with the existing 
error message about an unknown HZ value.)

3) Removes all mention of kernel/timeconst.h from the makefiles.  They don't 
need to know anymore.

The only other potential change (which I didn't make) is to move 
kernel/timeconst.pl into scripts/timeconst.pl, since it's now in the same 
class with the python script bloat-o-meter; something developers can run but 
which is not required to simply compile an unmodified kernel tarball.

Comments welcome.

Rob
-- 
"One of my most productive days was throwing away 1000 lines of code."
  - Ken Thompson.
diff -ru linux-2.6.26/kernel/Makefile linux-2.6.26-new/kernel/Makefile
--- linux-2.6.26/kernel/Makefile	2008-07-13 16:51:29.000000000 -0500
+++ linux-2.6.26-new/kernel/Makefile	2008-07-25 11:46:15.000000000 -0500
@@ -95,8 +95,3 @@
 
 $(obj)/time.o: $(obj)/timeconst.h
 
-quiet_cmd_timeconst  = TIMEC   $@
-      cmd_timeconst  = $(PERL) $< $(CONFIG_HZ) > $@
-targets += timeconst.h
-$(obj)/timeconst.h: $(src)/timeconst.pl FORCE
-	$(call if_changed,timeconst)
diff -ru linux-2.6.26/kernel/timeconst.pl linux-2.6.26-new/kernel/timeconst.pl
--- linux-2.6.26/kernel/timeconst.pl	2008-07-13 16:51:29.000000000 -0500
+++ linux-2.6.26-new/kernel/timeconst.pl	2008-07-25 12:01:27.000000000 -0500
@@ -11,150 +11,12 @@
 #
 
 #
-# Usage: timeconst.pl HZ > timeconst.h
+# Usage: timeconst.pl HZ... > timeconst.h
 #
 
 # Precomputed values for systems without Math::BigInt
 # Generated by:
 # timeconst.pl --can 24 32 48 64 100 122 128 200 250 256 300 512 1000 1024 1200
-%canned_values = (
-	24 => [
-		'0xa6aaaaab','0x2aaaaaa',26,
-		125,3,
-		'0xc49ba5e4','0x1fbe76c8b4',37,
-		3,125,
-		'0xa2c2aaab','0xaaaa',16,
-		125000,3,
-		'0xc9539b89','0x7fffbce4217d',47,
-		3,125000,
-	], 32 => [
-		'0xfa000000','0x6000000',27,
-		125,4,
-		'0x83126e98','0xfdf3b645a',36,
-		4,125,
-		'0xf4240000','0x0',17,
-		31250,1,
-		'0x8637bd06','0x3fff79c842fa',46,
-		1,31250,
-	], 48 => [
-		'0xa6aaaaab','0x6aaaaaa',27,
-		125,6,
-		'0xc49ba5e4','0xfdf3b645a',36,
-		6,125,
-		'0xa2c2aaab','0x15555',17,
-		62500,3,
-		'0xc9539b89','0x3fffbce4217d',46,
-		3,62500,
-	], 64 => [
-		'0xfa000000','0xe000000',28,
-		125,8,
-		'0x83126e98','0x7ef9db22d',35,
-		8,125,
-		'0xf4240000','0x0',18,
-		15625,1,
-		'0x8637bd06','0x1fff79c842fa',45,
-		1,15625,
-	], 100 => [
-		'0xa0000000','0x0',28,
-		10,1,
-		'0xcccccccd','0x733333333',35,
-		1,10,
-		'0x9c400000','0x0',18,
-		10000,1,
-		'0xd1b71759','0x1fff2e48e8a7',45,
-		1,10000,
-	], 122 => [
-		'0x8325c53f','0xfbcda3a',28,
-		500,61,
-		'0xf9db22d1','0x7fbe76c8b',35,
-		61,500,
-		'0x8012e2a0','0x3ef36',18,
-		500000,61,
-		'0xffda4053','0x1ffffbce4217',45,
-		61,500000,
-	], 128 => [
-		'0xfa000000','0x1e000000',29,
-		125,16,
-		'0x83126e98','0x3f7ced916',34,
-		16,125,
-		'0xf4240000','0x40000',19,
-		15625,2,
-		'0x8637bd06','0xfffbce4217d',44,
-		2,15625,
-	], 200 => [
-		'0xa0000000','0x0',29,
-		5,1,
-		'0xcccccccd','0x333333333',34,
-		1,5,
-		'0x9c400000','0x0',19,
-		5000,1,
-		'0xd1b71759','0xfff2e48e8a7',44,
-		1,5000,
-	], 250 => [
-		'0x80000000','0x0',29,
-		4,1,
-		'0x80000000','0x180000000',33,
-		1,4,
-		'0xfa000000','0x0',20,
-		4000,1,
-		'0x83126e98','0x7ff7ced9168',43,
-		1,4000,
-	], 256 => [
-		'0xfa000000','0x3e000000',30,
-		125,32,
-		'0x83126e98','0x1fbe76c8b',33,
-		32,125,
-		'0xf4240000','0xc0000',20,
-		15625,4,
-		'0x8637bd06','0x7ffde7210be',43,
-		4,15625,
-	], 300 => [
-		'0xd5555556','0x2aaaaaaa',30,
-		10,3,
-		'0x9999999a','0x1cccccccc',33,
-		3,10,
-		'0xd0555556','0xaaaaa',20,
-		10000,3,
-		'0x9d495183','0x7ffcb923a29',43,
-		3,10000,
-	], 512 => [
-		'0xfa000000','0x7e000000',31,
-		125,64,
-		'0x83126e98','0xfdf3b645',32,
-		64,125,
-		'0xf4240000','0x1c0000',21,
-		15625,8,
-		'0x8637bd06','0x3ffef39085f',42,
-		8,15625,
-	], 1000 => [
-		'0x80000000','0x0',31,
-		1,1,
-		'0x80000000','0x0',31,
-		1,1,
-		'0xfa000000','0x0',22,
-		1000,1,
-		'0x83126e98','0x1ff7ced9168',41,
-		1,1000,
-	], 1024 => [
-		'0xfa000000','0xfe000000',32,
-		125,128,
-		'0x83126e98','0x7ef9db22',31,
-		128,125,
-		'0xf4240000','0x3c0000',22,
-		15625,16,
-		'0x8637bd06','0x1fff79c842f',41,
-		16,15625,
-	], 1200 => [
-		'0xd5555556','0xd5555555',32,
-		5,6,
-		'0x9999999a','0x66666666',31,
-		6,5,
-		'0xd0555556','0x2aaaaa',22,
-		2500,3,
-		'0x9d495183','0x1ffcb923a29',41,
-		3,2500,
-	]
-);
 
 $has_bigint = eval 'use Math::BigInt qw(bgcd); 1;';
 
@@ -252,8 +114,7 @@
 	my $s, $m, $a, $g;
 
 	if (!$has_bigint) {
-		die "$0: HZ == $hz not canned and ".
-		    "Math::BigInt not available\n";
+		die "$0: Math::BigInt not available\n";
 	}
 
 	# MSEC conversions
@@ -283,21 +144,7 @@
 	my($hz, @val) = @_;
 	my $pfx, $bit, $suf, $s, $m, $a;
 
-	print "/* Automatically generated by kernel/timeconst.pl */\n";
-	print "/* Conversion constants for HZ == $hz */\n";
-	print "\n";
-	print "#ifndef KERNEL_TIMECONST_H\n";
-	print "#define KERNEL_TIMECONST_H\n";
-	print "\n";
-
-	print "#include <linux/param.h>\n";
-	print "#include <linux/types.h>\n";
-
-	print "\n";
-	print "#if HZ != $hz\n";
-	print "#error \"kernel/timeconst.h has the wrong HZ value!\"\n";
-	print "#endif\n";
-	print "\n";
+	print "HZ == $hz\n";
 
 	foreach $pfx ('HZ_TO_MSEC','MSEC_TO_HZ',
 		      'HZ_TO_USEC','USEC_TO_HZ') {
@@ -311,8 +158,7 @@
 		}
 	}
 
-	print "\n";
-	print "#endif /* KERNEL_TIMECONST_H */\n";
+	print "\n#elif ";
 }
 
 # Pretty-print Perl values
@@ -332,47 +178,36 @@
 	return join(',', @l);
 }
 
-($hz) = @ARGV;
+print "/* Conversion constants for HZ */\n";
+print "/* DO NOT EDIT!  Automatically generated by:\n";
+print "   kernel/timeconst.pl @ARGV\n */\n";
+print "\n";
+print "#ifndef KERNEL_TIMECONST_H\n";
+print "#define KERNEL_TIMECONST_H\n";
+print "\n";
+
+print "#include <linux/param.h>\n";
+print "#include <linux/types.h>\n";
+
+print "\n";
+print "#if ";
+
+foreach $hz (@ARGV)
+{
 
-# Use this to generate the %canned_values structure
-if ($hz eq '--can') {
-	shift(@ARGV);
-	@hzlist = sort {$a <=> $b} (@ARGV);
-
-	print "# Precomputed values for systems without Math::BigInt\n";
-	print "# Generated by:\n";
-	print "# timeconst.pl --can ", join(' ', @hzlist), "\n";
-	print "\%canned_values = (\n";
-	my $pf = "\t";
-	foreach $hz (@hzlist) {
-		my @values = compute_values($hz);
-		print "$pf$hz => [\n";
-		while (scalar(@values)) {
-			my $bit;
-			foreach $bit (32) {
-				my $m = shift(@values);
-				my $a = shift(@values);
-				my $s = shift(@values);
-				print "\t\t", perlvals($m,$a,$s), ",\n";
-			}
-			my $n = shift(@values);
-			my $d = shift(@values);
-			print "\t\t", perlvals($n,$d), ",\n";
-		}
-		print "\t]";
-		$pf = ', ';
-	}
-	print "\n);\n";
-} else {
 	$hz += 0;			# Force to number
 	if ($hz < 1) {
 		die "Usage: $0 HZ\n";
 	}
 
-	@val = @{$canned_values{$hz}};
-	if (!defined(@val)) {
-		@val = compute_values($hz);
-	}
+	@val = compute_values($hz);
 	output($hz, @val);
 }
+
+print "1\n";
+print "#error \"kernel/timeconst.h has unknown HZ value!\"\n";
+print "#endif\n";
+print "\n";
+print "#endif /* KERNEL_TIMECONST_H */\n";
+
 exit 0;
--- /dev/null	2007-10-16 17:06:33.000000000 -0500
+++ linux-2.6.26-new/kernel/timeconst.h	2008-07-25 12:02:02.000000000 -0500
@@ -0,0 +1,346 @@
+/* Conversion constants for HZ */
+/* DO NOT EDIT!  Automatically generated by:
+   kernel/timeconst.pl 24 32 48 64 100 122 128 200 250 256 300 512 1000 1024 1200
+ */
+
+#ifndef KERNEL_TIMECONST_H
+#define KERNEL_TIMECONST_H
+
+#include <linux/param.h>
+#include <linux/types.h>
+
+#if HZ == 24
+#define HZ_TO_MSEC_MUL32        U64_C(0xa6aaaaab)
+#define HZ_TO_MSEC_ADJ32        U64_C(0x2aaaaaa)
+#define HZ_TO_MSEC_SHR32        26
+#define HZ_TO_MSEC_NUM          U64_C(125)
+#define HZ_TO_MSEC_DEN          U64_C(3)
+#define MSEC_TO_HZ_MUL32        U64_C(0xc49ba5e4)
+#define MSEC_TO_HZ_ADJ32        U64_C(0x1fbe76c8b4)
+#define MSEC_TO_HZ_SHR32        37
+#define MSEC_TO_HZ_NUM          U64_C(3)
+#define MSEC_TO_HZ_DEN          U64_C(125)
+#define HZ_TO_USEC_MUL32        U64_C(0xa2c2aaab)
+#define HZ_TO_USEC_ADJ32        U64_C(0xaaaa)
+#define HZ_TO_USEC_SHR32        16
+#define HZ_TO_USEC_NUM          U64_C(125000)
+#define HZ_TO_USEC_DEN          U64_C(3)
+#define USEC_TO_HZ_MUL32        U64_C(0xc9539b89)
+#define USEC_TO_HZ_ADJ32        U64_C(0x7fffbce4217d)
+#define USEC_TO_HZ_SHR32        47
+#define USEC_TO_HZ_NUM          U64_C(3)
+#define USEC_TO_HZ_DEN          U64_C(125000)
+
+#elif HZ == 32
+#define HZ_TO_MSEC_MUL32        U64_C(0xfa000000)
+#define HZ_TO_MSEC_ADJ32        U64_C(0x6000000)
+#define HZ_TO_MSEC_SHR32        27
+#define HZ_TO_MSEC_NUM          U64_C(125)
+#define HZ_TO_MSEC_DEN          U64_C(4)
+#define MSEC_TO_HZ_MUL32        U64_C(0x83126e98)
+#define MSEC_TO_HZ_ADJ32        U64_C(0xfdf3b645a)
+#define MSEC_TO_HZ_SHR32        36
+#define MSEC_TO_HZ_NUM          U64_C(4)
+#define MSEC_TO_HZ_DEN          U64_C(125)
+#define HZ_TO_USEC_MUL32        U64_C(0xf4240000)
+#define HZ_TO_USEC_ADJ32        U64_C(0x0)
+#define HZ_TO_USEC_SHR32        17
+#define HZ_TO_USEC_NUM          U64_C(31250)
+#define HZ_TO_USEC_DEN          U64_C(1)
+#define USEC_TO_HZ_MUL32        U64_C(0x8637bd06)
+#define USEC_TO_HZ_ADJ32        U64_C(0x3fff79c842fa)
+#define USEC_TO_HZ_SHR32        46
+#define USEC_TO_HZ_NUM          U64_C(1)
+#define USEC_TO_HZ_DEN          U64_C(31250)
+
+#elif HZ == 48
+#define HZ_TO_MSEC_MUL32        U64_C(0xa6aaaaab)
+#define HZ_TO_MSEC_ADJ32        U64_C(0x6aaaaaa)
+#define HZ_TO_MSEC_SHR32        27
+#define HZ_TO_MSEC_NUM          U64_C(125)
+#define HZ_TO_MSEC_DEN          U64_C(6)
+#define MSEC_TO_HZ_MUL32        U64_C(0xc49ba5e4)
+#define MSEC_TO_HZ_ADJ32        U64_C(0xfdf3b645a)
+#define MSEC_TO_HZ_SHR32        36
+#define MSEC_TO_HZ_NUM          U64_C(6)
+#define MSEC_TO_HZ_DEN          U64_C(125)
+#define HZ_TO_USEC_MUL32        U64_C(0xa2c2aaab)
+#define HZ_TO_USEC_ADJ32        U64_C(0x15555)
+#define HZ_TO_USEC_SHR32        17
+#define HZ_TO_USEC_NUM          U64_C(62500)
+#define HZ_TO_USEC_DEN          U64_C(3)
+#define USEC_TO_HZ_MUL32        U64_C(0xc9539b89)
+#define USEC_TO_HZ_ADJ32        U64_C(0x3fffbce4217d)
+#define USEC_TO_HZ_SHR32        46
+#define USEC_TO_HZ_NUM          U64_C(3)
+#define USEC_TO_HZ_DEN          U64_C(62500)
+
+#elif HZ == 64
+#define HZ_TO_MSEC_MUL32        U64_C(0xfa000000)
+#define HZ_TO_MSEC_ADJ32        U64_C(0xe000000)
+#define HZ_TO_MSEC_SHR32        28
+#define HZ_TO_MSEC_NUM          U64_C(125)
+#define HZ_TO_MSEC_DEN          U64_C(8)
+#define MSEC_TO_HZ_MUL32        U64_C(0x83126e98)
+#define MSEC_TO_HZ_ADJ32        U64_C(0x7ef9db22d)
+#define MSEC_TO_HZ_SHR32        35
+#define MSEC_TO_HZ_NUM          U64_C(8)
+#define MSEC_TO_HZ_DEN          U64_C(125)
+#define HZ_TO_USEC_MUL32        U64_C(0xf4240000)
+#define HZ_TO_USEC_ADJ32        U64_C(0x0)
+#define HZ_TO_USEC_SHR32        18
+#define HZ_TO_USEC_NUM          U64_C(15625)
+#define HZ_TO_USEC_DEN          U64_C(1)
+#define USEC_TO_HZ_MUL32        U64_C(0x8637bd06)
+#define USEC_TO_HZ_ADJ32        U64_C(0x1fff79c842fa)
+#define USEC_TO_HZ_SHR32        45
+#define USEC_TO_HZ_NUM          U64_C(1)
+#define USEC_TO_HZ_DEN          U64_C(15625)
+
+#elif HZ == 100
+#define HZ_TO_MSEC_MUL32        U64_C(0xa0000000)
+#define HZ_TO_MSEC_ADJ32        U64_C(0x0)
+#define HZ_TO_MSEC_SHR32        28
+#define HZ_TO_MSEC_NUM          U64_C(10)
+#define HZ_TO_MSEC_DEN          U64_C(1)
+#define MSEC_TO_HZ_MUL32        U64_C(0xcccccccd)
+#define MSEC_TO_HZ_ADJ32        U64_C(0x733333333)
+#define MSEC_TO_HZ_SHR32        35
+#define MSEC_TO_HZ_NUM          U64_C(1)
+#define MSEC_TO_HZ_DEN          U64_C(10)
+#define HZ_TO_USEC_MUL32        U64_C(0x9c400000)
+#define HZ_TO_USEC_ADJ32        U64_C(0x0)
+#define HZ_TO_USEC_SHR32        18
+#define HZ_TO_USEC_NUM          U64_C(10000)
+#define HZ_TO_USEC_DEN          U64_C(1)
+#define USEC_TO_HZ_MUL32        U64_C(0xd1b71759)
+#define USEC_TO_HZ_ADJ32        U64_C(0x1fff2e48e8a7)
+#define USEC_TO_HZ_SHR32        45
+#define USEC_TO_HZ_NUM          U64_C(1)
+#define USEC_TO_HZ_DEN          U64_C(10000)
+
+#elif HZ == 122
+#define HZ_TO_MSEC_MUL32        U64_C(0x8325c53f)
+#define HZ_TO_MSEC_ADJ32        U64_C(0xfbcda3a)
+#define HZ_TO_MSEC_SHR32        28
+#define HZ_TO_MSEC_NUM          U64_C(500)
+#define HZ_TO_MSEC_DEN          U64_C(61)
+#define MSEC_TO_HZ_MUL32        U64_C(0xf9db22d1)
+#define MSEC_TO_HZ_ADJ32        U64_C(0x7fbe76c8b)
+#define MSEC_TO_HZ_SHR32        35
+#define MSEC_TO_HZ_NUM          U64_C(61)
+#define MSEC_TO_HZ_DEN          U64_C(500)
+#define HZ_TO_USEC_MUL32        U64_C(0x8012e2a0)
+#define HZ_TO_USEC_ADJ32        U64_C(0x3ef36)
+#define HZ_TO_USEC_SHR32        18
+#define HZ_TO_USEC_NUM          U64_C(500000)
+#define HZ_TO_USEC_DEN          U64_C(61)
+#define USEC_TO_HZ_MUL32        U64_C(0xffda4053)
+#define USEC_TO_HZ_ADJ32        U64_C(0x1ffffbce4217)
+#define USEC_TO_HZ_SHR32        45
+#define USEC_TO_HZ_NUM          U64_C(61)
+#define USEC_TO_HZ_DEN          U64_C(500000)
+
+#elif HZ == 128
+#define HZ_TO_MSEC_MUL32        U64_C(0xfa000000)
+#define HZ_TO_MSEC_ADJ32        U64_C(0x1e000000)
+#define HZ_TO_MSEC_SHR32        29
+#define HZ_TO_MSEC_NUM          U64_C(125)
+#define HZ_TO_MSEC_DEN          U64_C(16)
+#define MSEC_TO_HZ_MUL32        U64_C(0x83126e98)
+#define MSEC_TO_HZ_ADJ32        U64_C(0x3f7ced916)
+#define MSEC_TO_HZ_SHR32        34
+#define MSEC_TO_HZ_NUM          U64_C(16)
+#define MSEC_TO_HZ_DEN          U64_C(125)
+#define HZ_TO_USEC_MUL32        U64_C(0xf4240000)
+#define HZ_TO_USEC_ADJ32        U64_C(0x40000)
+#define HZ_TO_USEC_SHR32        19
+#define HZ_TO_USEC_NUM          U64_C(15625)
+#define HZ_TO_USEC_DEN          U64_C(2)
+#define USEC_TO_HZ_MUL32        U64_C(0x8637bd06)
+#define USEC_TO_HZ_ADJ32        U64_C(0xfffbce4217d)
+#define USEC_TO_HZ_SHR32        44
+#define USEC_TO_HZ_NUM          U64_C(2)
+#define USEC_TO_HZ_DEN          U64_C(15625)
+
+#elif HZ == 200
+#define HZ_TO_MSEC_MUL32        U64_C(0xa0000000)
+#define HZ_TO_MSEC_ADJ32        U64_C(0x0)
+#define HZ_TO_MSEC_SHR32        29
+#define HZ_TO_MSEC_NUM          U64_C(5)
+#define HZ_TO_MSEC_DEN          U64_C(1)
+#define MSEC_TO_HZ_MUL32        U64_C(0xcccccccd)
+#define MSEC_TO_HZ_ADJ32        U64_C(0x333333333)
+#define MSEC_TO_HZ_SHR32        34
+#define MSEC_TO_HZ_NUM          U64_C(1)
+#define MSEC_TO_HZ_DEN          U64_C(5)
+#define HZ_TO_USEC_MUL32        U64_C(0x9c400000)
+#define HZ_TO_USEC_ADJ32        U64_C(0x0)
+#define HZ_TO_USEC_SHR32        19
+#define HZ_TO_USEC_NUM          U64_C(5000)
+#define HZ_TO_USEC_DEN          U64_C(1)
+#define USEC_TO_HZ_MUL32        U64_C(0xd1b71759)
+#define USEC_TO_HZ_ADJ32        U64_C(0xfff2e48e8a7)
+#define USEC_TO_HZ_SHR32        44
+#define USEC_TO_HZ_NUM          U64_C(1)
+#define USEC_TO_HZ_DEN          U64_C(5000)
+
+#elif HZ == 250
+#define HZ_TO_MSEC_MUL32        U64_C(0x80000000)
+#define HZ_TO_MSEC_ADJ32        U64_C(0x0)
+#define HZ_TO_MSEC_SHR32        29
+#define HZ_TO_MSEC_NUM          U64_C(4)
+#define HZ_TO_MSEC_DEN          U64_C(1)
+#define MSEC_TO_HZ_MUL32        U64_C(0x80000000)
+#define MSEC_TO_HZ_ADJ32        U64_C(0x180000000)
+#define MSEC_TO_HZ_SHR32        33
+#define MSEC_TO_HZ_NUM          U64_C(1)
+#define MSEC_TO_HZ_DEN          U64_C(4)
+#define HZ_TO_USEC_MUL32        U64_C(0xfa000000)
+#define HZ_TO_USEC_ADJ32        U64_C(0x0)
+#define HZ_TO_USEC_SHR32        20
+#define HZ_TO_USEC_NUM          U64_C(4000)
+#define HZ_TO_USEC_DEN          U64_C(1)
+#define USEC_TO_HZ_MUL32        U64_C(0x83126e98)
+#define USEC_TO_HZ_ADJ32        U64_C(0x7ff7ced9168)
+#define USEC_TO_HZ_SHR32        43
+#define USEC_TO_HZ_NUM          U64_C(1)
+#define USEC_TO_HZ_DEN          U64_C(4000)
+
+#elif HZ == 256
+#define HZ_TO_MSEC_MUL32        U64_C(0xfa000000)
+#define HZ_TO_MSEC_ADJ32        U64_C(0x3e000000)
+#define HZ_TO_MSEC_SHR32        30
+#define HZ_TO_MSEC_NUM          U64_C(125)
+#define HZ_TO_MSEC_DEN          U64_C(32)
+#define MSEC_TO_HZ_MUL32        U64_C(0x83126e98)
+#define MSEC_TO_HZ_ADJ32        U64_C(0x1fbe76c8b)
+#define MSEC_TO_HZ_SHR32        33
+#define MSEC_TO_HZ_NUM          U64_C(32)
+#define MSEC_TO_HZ_DEN          U64_C(125)
+#define HZ_TO_USEC_MUL32        U64_C(0xf4240000)
+#define HZ_TO_USEC_ADJ32        U64_C(0xc0000)
+#define HZ_TO_USEC_SHR32        20
+#define HZ_TO_USEC_NUM          U64_C(15625)
+#define HZ_TO_USEC_DEN          U64_C(4)
+#define USEC_TO_HZ_MUL32        U64_C(0x8637bd06)
+#define USEC_TO_HZ_ADJ32        U64_C(0x7ffde7210be)
+#define USEC_TO_HZ_SHR32        43
+#define USEC_TO_HZ_NUM          U64_C(4)
+#define USEC_TO_HZ_DEN          U64_C(15625)
+
+#elif HZ == 300
+#define HZ_TO_MSEC_MUL32        U64_C(0xd5555556)
+#define HZ_TO_MSEC_ADJ32        U64_C(0x2aaaaaaa)
+#define HZ_TO_MSEC_SHR32        30
+#define HZ_TO_MSEC_NUM          U64_C(10)
+#define HZ_TO_MSEC_DEN          U64_C(3)
+#define MSEC_TO_HZ_MUL32        U64_C(0x9999999a)
+#define MSEC_TO_HZ_ADJ32        U64_C(0x1cccccccc)
+#define MSEC_TO_HZ_SHR32        33
+#define MSEC_TO_HZ_NUM          U64_C(3)
+#define MSEC_TO_HZ_DEN          U64_C(10)
+#define HZ_TO_USEC_MUL32        U64_C(0xd0555556)
+#define HZ_TO_USEC_ADJ32        U64_C(0xaaaaa)
+#define HZ_TO_USEC_SHR32        20
+#define HZ_TO_USEC_NUM          U64_C(10000)
+#define HZ_TO_USEC_DEN          U64_C(3)
+#define USEC_TO_HZ_MUL32        U64_C(0x9d495183)
+#define USEC_TO_HZ_ADJ32        U64_C(0x7ffcb923a29)
+#define USEC_TO_HZ_SHR32        43
+#define USEC_TO_HZ_NUM          U64_C(3)
+#define USEC_TO_HZ_DEN          U64_C(10000)
+
+#elif HZ == 512
+#define HZ_TO_MSEC_MUL32        U64_C(0xfa000000)
+#define HZ_TO_MSEC_ADJ32        U64_C(0x7e000000)
+#define HZ_TO_MSEC_SHR32        31
+#define HZ_TO_MSEC_NUM          U64_C(125)
+#define HZ_TO_MSEC_DEN          U64_C(64)
+#define MSEC_TO_HZ_MUL32        U64_C(0x83126e98)
+#define MSEC_TO_HZ_ADJ32        U64_C(0xfdf3b645)
+#define MSEC_TO_HZ_SHR32        32
+#define MSEC_TO_HZ_NUM          U64_C(64)
+#define MSEC_TO_HZ_DEN          U64_C(125)
+#define HZ_TO_USEC_MUL32        U64_C(0xf4240000)
+#define HZ_TO_USEC_ADJ32        U64_C(0x1c0000)
+#define HZ_TO_USEC_SHR32        21
+#define HZ_TO_USEC_NUM          U64_C(15625)
+#define HZ_TO_USEC_DEN          U64_C(8)
+#define USEC_TO_HZ_MUL32        U64_C(0x8637bd06)
+#define USEC_TO_HZ_ADJ32        U64_C(0x3ffef39085f)
+#define USEC_TO_HZ_SHR32        42
+#define USEC_TO_HZ_NUM          U64_C(8)
+#define USEC_TO_HZ_DEN          U64_C(15625)
+
+#elif HZ == 1000
+#define HZ_TO_MSEC_MUL32        U64_C(0x80000000)
+#define HZ_TO_MSEC_ADJ32        U64_C(0x0)
+#define HZ_TO_MSEC_SHR32        31
+#define HZ_TO_MSEC_NUM          U64_C(1)
+#define HZ_TO_MSEC_DEN          U64_C(1)
+#define MSEC_TO_HZ_MUL32        U64_C(0x80000000)
+#define MSEC_TO_HZ_ADJ32        U64_C(0x0)
+#define MSEC_TO_HZ_SHR32        31
+#define MSEC_TO_HZ_NUM          U64_C(1)
+#define MSEC_TO_HZ_DEN          U64_C(1)
+#define HZ_TO_USEC_MUL32        U64_C(0xfa000000)
+#define HZ_TO_USEC_ADJ32        U64_C(0x0)
+#define HZ_TO_USEC_SHR32        22
+#define HZ_TO_USEC_NUM          U64_C(1000)
+#define HZ_TO_USEC_DEN          U64_C(1)
+#define USEC_TO_HZ_MUL32        U64_C(0x83126e98)
+#define USEC_TO_HZ_ADJ32        U64_C(0x1ff7ced9168)
+#define USEC_TO_HZ_SHR32        41
+#define USEC_TO_HZ_NUM          U64_C(1)
+#define USEC_TO_HZ_DEN          U64_C(1000)
+
+#elif HZ == 1024
+#define HZ_TO_MSEC_MUL32        U64_C(0xfa000000)
+#define HZ_TO_MSEC_ADJ32        U64_C(0xfe000000)
+#define HZ_TO_MSEC_SHR32        32
+#define HZ_TO_MSEC_NUM          U64_C(125)
+#define HZ_TO_MSEC_DEN          U64_C(128)
+#define MSEC_TO_HZ_MUL32        U64_C(0x83126e98)
+#define MSEC_TO_HZ_ADJ32        U64_C(0x7ef9db22)
+#define MSEC_TO_HZ_SHR32        31
+#define MSEC_TO_HZ_NUM          U64_C(128)
+#define MSEC_TO_HZ_DEN          U64_C(125)
+#define HZ_TO_USEC_MUL32        U64_C(0xf4240000)
+#define HZ_TO_USEC_ADJ32        U64_C(0x3c0000)
+#define HZ_TO_USEC_SHR32        22
+#define HZ_TO_USEC_NUM          U64_C(15625)
+#define HZ_TO_USEC_DEN          U64_C(16)
+#define USEC_TO_HZ_MUL32        U64_C(0x8637bd06)
+#define USEC_TO_HZ_ADJ32        U64_C(0x1fff79c842f)
+#define USEC_TO_HZ_SHR32        41
+#define USEC_TO_HZ_NUM          U64_C(16)
+#define USEC_TO_HZ_DEN          U64_C(15625)
+
+#elif HZ == 1200
+#define HZ_TO_MSEC_MUL32        U64_C(0xd5555556)
+#define HZ_TO_MSEC_ADJ32        U64_C(0xd5555555)
+#define HZ_TO_MSEC_SHR32        32
+#define HZ_TO_MSEC_NUM          U64_C(5)
+#define HZ_TO_MSEC_DEN          U64_C(6)
+#define MSEC_TO_HZ_MUL32        U64_C(0x9999999a)
+#define MSEC_TO_HZ_ADJ32        U64_C(0x66666666)
+#define MSEC_TO_HZ_SHR32        31
+#define MSEC_TO_HZ_NUM          U64_C(6)
+#define MSEC_TO_HZ_DEN          U64_C(5)
+#define HZ_TO_USEC_MUL32        U64_C(0xd0555556)
+#define HZ_TO_USEC_ADJ32        U64_C(0x2aaaaa)
+#define HZ_TO_USEC_SHR32        22
+#define HZ_TO_USEC_NUM          U64_C(2500)
+#define HZ_TO_USEC_DEN          U64_C(3)
+#define USEC_TO_HZ_MUL32        U64_C(0x9d495183)
+#define USEC_TO_HZ_ADJ32        U64_C(0x1ffcb923a29)
+#define USEC_TO_HZ_SHR32        41
+#define USEC_TO_HZ_NUM          U64_C(3)
+#define USEC_TO_HZ_DEN          U64_C(2500)
+
+#elif 1
+#error "kernel/timeconst.h has unknown HZ value!"
+#endif
+
+#endif /* KERNEL_TIMECONST_H */

Reply via email to