# HG changeset patch # User Rob Landley # Date 1367290994 18000 # Node ID 3cbf1abde44a47a0e5b4248856697aa58f839a2a # Parent 15b4fc37d5f7f4be45bf8e1f19c6d99e534e5bd3 Update to linux 3.9. diff -r 15b4fc37d5f7 -r 3cbf1abde44a download.sh --- a/download.sh Tue Apr 23 19:13:02 2013 -0500 +++ b/download.sh Mon Apr 29 22:03:14 2013 -0500 @@ -29,8 +29,8 @@ SHA1=4082df10a2985c36be50a3643a0215b219154049 \ maybe_fork "download || dienow" -URL=ftp://kernel.org/pub/linux/kernel/v3.x/linux-3.8.tar.bz2 \ -SHA1=04e0496008f6aa08b0bd43963098a87067d00d7f \ +URL=ftp://kernel.org/pub/linux/kernel/v3.x/linux-3.9.tar.bz2 \ +SHA1=eccaff1bf7c671dacb18cfa98f8275fc9afbb0e1 \ maybe_fork "download || dienow" diff -r 15b4fc37d5f7 -r 3cbf1abde44a sources/patches/linux-arm.patch --- a/sources/patches/linux-arm.patch Tue Apr 23 19:13:02 2013 -0500 +++ b/sources/patches/linux-arm.patch Mon Apr 29 22:03:14 2013 -0500 @@ -90,16 +90,15 @@ config ARCH_VERSATILE_PB bool "Support Versatile Platform Baseboard for ARM926EJ-S" default y -diff --git a/arch/arm/mach-versatile/pci.c b/arch/arm/mach-versatile/pci.c -index 2f84f40..cd7c8ce 100644 ---- a/arch/arm/mach-versatile/pci.c -+++ b/arch/arm/mach-versatile/pci.c -@@ -332,7 +332,7 @@ static int __init versatile_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) - * 26 1 29 - * 27 1 30 +diff -ruN linux/arch/arm/mach-versatile/pci.c linux.bak/arch/arm/mach-versatile/pci.c +--- linux/arch/arm/mach-versatile/pci.c 2013-04-28 19:36:01.000000000 -0500 ++++ linux.bak/arch/arm/mach-versatile/pci.c 2013-04-29 19:09:44.857097553 -0500 +@@ -333,7 +333,7 @@ + * 26 1 IRQ_SIC_PCI2 + * 27 1 IRQ_SIC_PCI3 */ -- irq = 27 + ((slot - 24 + pin - 1) & 3); -+ irq = 59; //27 + ((slot - 24 + pin - 1) & 3); +- irq = IRQ_SIC_PCI0 + ((slot - 24 + pin - 1) & 3); ++ irq = 59; //IRQ_SIC_PCI0 + ((slot - 24 + pin - 1) & 3); return irq; } diff -r 15b4fc37d5f7 -r 3cbf1abde44a sources/patches/linux-noperl-capflags.patch --- a/sources/patches/linux-noperl-capflags.patch Tue Apr 23 19:13:02 2013 -0500 +++ b/sources/patches/linux-noperl-capflags.patch Mon Apr 29 22:03:14 2013 -0500 @@ -1,3 +1,19 @@ +From: Rob Landley +Subject: [PATCH 1/3] convert mkcapflags.pl to mkcapflags.sh +To: linux-kernel@vger.kernel.org +Cc: Arnd Bergmann +Cc: Dave Jones +Cc: David Howells +Cc: "Paul E. McKenney" +Cc: Cyrill Gorcunov +Cc: Vince Weaver +Cc: Zheng Yan +Cc: Peter Zijlstra +Cc: x86@kernel.org +Cc: "H. Peter Anvin" +Cc: Ingo Molnar +Cc: Thomas Gleixner + From: Rob Landley Generate asm-x86/cpufeature.h with posix-2008 commands instead of perl. @@ -6,9 +22,9 @@ --- arch/x86/kernel/cpu/Makefile | 4 +- - arch/x86/kernel/cpu/mkcapflags.pl | 45 ---------------------------- - arch/x86/kernel/cpu/mkcapflags.sh | 39 ++++++++++++++++++++++++ - 3 files changed, 41 insertions(+), 47 deletions(-) + arch/x86/kernel/cpu/mkcapflags.pl | 48 ---------------------------- + arch/x86/kernel/cpu/mkcapflags.sh | 41 +++++++++++++++++++++++ + 3 files changed, 43 insertions(+), 50 deletions(-) --- linux/arch/x86/kernel/cpu/mkcapflags.pl +++ /dev/null @@ -109,7 +125,7 @@ index 25f24dc..9edf7e7 100644 --- a/arch/x86/kernel/cpu/Makefile +++ b/arch/x86/kernel/cpu/Makefile -@@ -40,10 +40,10 @@ obj-$(CONFIG_MTRR) += mtrr/ +@@ -43,10 +43,10 @@ obj-$(CONFIG_MTRR) += mtrr/ obj-$(CONFIG_X86_LOCAL_APIC) += perfctr-watchdog.o perf_event_amd_ibs.o quiet_cmd_mkcapflags = MKCAP $@ diff -r 15b4fc37d5f7 -r 3cbf1abde44a sources/patches/linux-noperl-headers.patch --- a/sources/patches/linux-noperl-headers.patch Tue Apr 23 19:13:02 2013 -0500 +++ b/sources/patches/linux-noperl-headers.patch Mon Apr 29 22:03:14 2013 -0500 @@ -1,4 +1,13 @@ -Subject: [PATCH] Replace scripts/headers_install.pl with a shell script. +Subject: [PATCH 3/3] convert headers_install.pl to headers_install.sh +To: linux-kbuild@vger.kernel.org +Cc: linux-kernel@vger.kernel.org +Cc: Thomas Gleixner +Cc: Josh Boyer +Cc: "Paul E. McKenney" +Cc: Andrew Morton +Cc: David Howells +Cc: Michal Marek +Cc: Sam Ravnborg From: Rob Landley @@ -8,16 +17,19 @@ for loop calling sed and piping its output through unifdef to produce the target file. -Previous submission: Tuesday Jan 18, 2011 -Message-ID: <4D359E5C.1070002@parallels.com> +Same as last time except for minor tweak to deal with code review from here: +http://lkml.indiana.edu/hypermail/linux/kernel/1302.3/00078.html + +(Note that this drops the "arch" argument, which isn't used. Kbuild +already points to the right input files on the command line.) Signed-off-by: Rob Landley --- - scripts/Makefile.headersinst | 6 +-- - scripts/headers_install.pl | 58 --------------------------------- - scripts/headers_install.sh | 43 ++++++++++++++++++++++++ - 3 files changed, 46 insertions(+), 61 deletions(-) + scripts/Makefile.headersinst | 4 +- + scripts/headers_install.pl | 63 --------------------------------- + scripts/headers_install.sh | 43 ++++++++++++++++++++++ + 3 files changed, 45 insertions(+), 65 deletions(-) diff -ruN linux-3.1/scripts/headers_install.sh linux-2.6.30/scripts/headers_install.sh --- linux-3.1/scripts/headers_install.sh @@ -57,7 +69,7 @@ + -e 's/__attribute_const__([ \t]|$)/\1/g' \ + -e 's@^#include @@' \ + -e 's/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g' \ -+ -e 's/(^|[ \t])(inline|asm|volatile)([ \t(]|$)/\1__\2__\3/g' \ ++ -e 's/(^|[ \t(])(inline|asm|volatile)([ \t(]|$)/\1__\2__\3/g' \ + -e 's@#(ifndef|define|endif[ \t]*/[*])[ \t]*_UAPI@#\1 @' \ + "$i" > "$OUTDIR/$FILE.sed" || exit 1 + scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ "$OUTDIR/$FILE.sed" \ @@ -69,7 +81,7 @@ diff -ruN linux-3.1/scripts/Makefile.headersinst --- linux-3.1/scripts/Makefile.headersinst +++ linux/scripts/Makefile.headersinst -@@ -55,7 +55,7 @@ +@@ -71,7 +71,7 @@ quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\ file$(if $(word 2, $(all-files)),s)) cmd_install = \ @@ -78,7 +90,7 @@ for F in $(wrapper-files); do \ echo "\#include " > $(installdir)/$$F; \ done; \ -@@ -83,7 +83,7 @@ +@@ -97,7 +97,7 @@ @: targets += $(install-file) diff -r 15b4fc37d5f7 -r 3cbf1abde44a sources/patches/linux-noperl-timeconst.patch --- a/sources/patches/linux-noperl-timeconst.patch Tue Apr 23 19:13:02 2013 -0500 +++ b/sources/patches/linux-noperl-timeconst.patch Mon Apr 29 22:03:14 2013 -0500 @@ -1,50 +1,13 @@ -From: Rob Landley - -Replace perl header file generator with smaller/faster/simpler C version. - -Hasn't changed since last submission, which was: - -Message-ID: <4D35FEF3.4070001@parallels.com> -Subject: Re: [PATCH] Use sed instead of perl to generate x86/kernel/cpu/capflags.c. - -Signed-off-by: Rob Landley ---- - -I ran the attached test script to compare the output of the C program -with the output of the perl version for every HZ from 1 to 5000 to make -sure it was producing the same constants. - - kernel/Makefile | 10 - - kernel/mktimeconst.c | 109 +++++++++++ - kernel/timeconst.pl | 378 ----------------------------------------- - 3 files changed, 115 insertions(+), 382 deletions(-) +Replace timeconst.bc with the c version I've been using for years (to replace +the perl version). Eventually I should add bc to toybox, but for now... diff --git a/kernel/Makefile b/kernel/Makefile -index 5669f71..ba9ce6d 100644 ---- a/kernel/Makefile -+++ b/kernel/Makefile -@@ -133,11 +133,13 @@ $(obj)/config_data.h: $(obj)/config_data.gz FORCE - - $(obj)/time.o: $(obj)/timeconst.h - --quiet_cmd_timeconst = TIMEC $@ -- cmd_timeconst = $(PERL) $< $(CONFIG_HZ) > $@ -+hostprogs-y += mktimeconst -+quiet_cmd_mktimeconst = TIMEC $@ -+ cmd_mktimeconst = $(obj)/mktimeconst $(CONFIG_HZ) $@ || ( rm -f $@ && exit 1 ) -+ - targets += timeconst.h --$(obj)/timeconst.h: $(src)/timeconst.pl FORCE -- $(call if_changed,timeconst) -+$(obj)/timeconst.h: $(obj)/mktimeconst FORCE -+ $(call if_changed,mktimeconst) - - ifeq ($(CONFIG_MODULE_SIG),y) - # ---- /dev/null 2011-01-13 17:00:36.470564274 -0600 -+++ b/kernel/mktimeconst.c 2011-01-16 12:44:04.091168778 -0600 -@@ -0,0 +1,109 @@ +index eceac38..f00be6d 100644 +--- /dev/null ++++ linux/kernel/mktimeconst.c +@@ -0,0 +1,110 @@ +/* Copyright 2010 Parallels Inc, licensed under GPLv2 */ ++/* Copyright 2010-2013 Rob Landley */ + +#include +#include @@ -153,409 +116,141 @@ + fflush(stdout); + return ferror(stdout); +} ---- a/kernel/timeconst.pl 2010-12-19 11:33:53.969732934 -0600 -+++ /dev/null 2011-01-13 17:00:36.470564274 -0600 -@@ -1,378 +0,0 @@ --#!/usr/bin/perl --# ----------------------------------------------------------------------- --# --# Copyright 2007-2008 rPath, Inc. - All Rights Reserved --# --# This file is part of the Linux kernel, and is made available under --# the terms of the GNU General Public License version 2 or (at your --# option) any later version; incorporated herein by reference. --# --# ----------------------------------------------------------------------- --# -- --# --# Usage: timeconst.pl HZ > timeconst.h --# +--- linux/kernel/timeconst.bc 2013-04-28 19:36:01.000000000 -0500 ++++ /dev/null 2013-02-23 10:58:11.743993346 -0600 +@@ -1,108 +0,0 @@ +-scale=0 - --# 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, -- ] --); +-define gcd(a,b) { +- auto t; +- while (b) { +- t = b; +- b = a % b; +- a = t; +- } +- return a; +-} - --$has_bigint = eval 'use Math::BigInt qw(bgcd); 1;'; -- --sub bint($) --{ -- my($x) = @_; -- return Math::BigInt->new($x); +-/* Division by reciprocal multiplication. */ +-define fmul(b,n,d) { +- return (2^b*n+d-1)/d; -} - --# --# Constants for division by reciprocal multiplication. --# (bits, numerator, denominator) --# --sub fmul($$$) --{ -- my ($b,$n,$d) = @_; -- -- $n = bint($n); -- $d = bint($d); -- -- return scalar (($n << $b)+$d-bint(1))/$d; +-/* Adjustment factor when a ceiling value is used. Use as: +- (imul * n) + (fmulxx * n + fadjxx) >> xx) */ +-define fadj(b,n,d) { +- auto v; +- d = d/gcd(n,d); +- v = 2^b*(d-1)/d; +- return v; -} - --sub fadj($$$) --{ -- my($b,$n,$d) = @_; -- -- $n = bint($n); -- $d = bint($d); -- -- $d = $d/bgcd($n, $d); -- return scalar (($d-bint(1)) << $b)/$d; --} -- --sub fmuls($$$) { -- my($b,$n,$d) = @_; -- my($s,$m); -- my($thres) = bint(1) << ($b-1); -- -- $n = bint($n); -- $d = bint($d); -- -- for ($s = 0; 1; $s++) { -- $m = fmul($s,$n,$d); -- return $s if ($m >= $thres); +-/* Compute the appropriate mul/adj values as well as a shift count, +- which brings the mul value into the range 2^b-1 <= x < 2^b. Such +- a shift value will be correct in the signed integer range and off +- by at most one in the upper half of the unsigned range. */ +-define fmuls(b,n,d) { +- auto s, m; +- for (s = 0; 1; s++) { +- m = fmul(s,n,d); +- if (m >= 2^(b-1)) +- return s; - } - return 0; -} - --# Generate a hex value if the result fits in 64 bits; --# otherwise skip. --sub bignum_hex($) { -- my($x) = @_; -- my $s = $x->as_hex(); +-define timeconst(hz) { +- print "/* Automatically generated by kernel/timeconst.bc */\n" +- print "/* Time conversion constants for HZ == ", hz, " */\n" +- print "\n" - -- return (length($s) > 18) ? undef : $s; --} +- print "#ifndef KERNEL_TIMECONST_H\n" +- print "#define KERNEL_TIMECONST_H\n\n" +- +- print "#include \n" +- print "#include \n\n" +- +- print "#if HZ != ", hz, "\n" +- print "#error \qkernel/timeconst.h has the wrong HZ value!\q\n" +- print "#endif\n\n" - --# Provides mul, adj, and shr factors for a specific --# (bit, time, hz) combination --sub muladj($$$) { -- my($b, $t, $hz) = @_; -- my $s = fmuls($b, $t, $hz); -- my $m = fmul($s, $t, $hz); -- my $a = fadj($s, $t, $hz); -- return (bignum_hex($m), bignum_hex($a), $s); --} +- if (hz < 2) { +- print "#error Totally bogus HZ value!\n" +- } else { +- s=fmuls(32,1000,hz) +- obase=16 +- print "#define HZ_TO_MSEC_MUL32\tU64_C(0x", fmul(s,1000,hz), ")\n" +- print "#define HZ_TO_MSEC_ADJ32\tU64_C(0x", fadj(s,1000,hz), ")\n" +- obase=10 +- print "#define HZ_TO_MSEC_SHR32\t", s, "\n" - --# Provides numerator, denominator values --sub numden($$) { -- my($n, $d) = @_; -- my $g = bgcd($n, $d); -- return ($n/$g, $d/$g); --} -- --# All values for a specific (time, hz) combo --sub conversions($$) { -- my ($t, $hz) = @_; -- my @val = (); -- -- # HZ_TO_xx -- push(@val, muladj(32, $t, $hz)); -- push(@val, numden($t, $hz)); +- s=fmuls(32,hz,1000) +- obase=16 +- print "#define MSEC_TO_HZ_MUL32\tU64_C(0x", fmul(s,hz,1000), ")\n" +- print "#define MSEC_TO_HZ_ADJ32\tU64_C(0x", fadj(s,hz,1000), ")\n" +- obase=10 +- print "#define MSEC_TO_HZ_SHR32\t", s, "\n" - -- # xx_TO_HZ -- push(@val, muladj(32, $hz, $t)); -- push(@val, numden($hz, $t)); -- -- return @val; --} +- obase=10 +- cd=gcd(hz,1000) +- print "#define HZ_TO_MSEC_NUM\t\t", 1000/cd, "\n" +- print "#define HZ_TO_MSEC_DEN\t\t", hz/cd, "\n" +- print "#define MSEC_TO_HZ_NUM\t\t", hz/cd, "\n" +- print "#define MSEC_TO_HZ_DEN\t\t", 1000/cd, "\n" +- print "\n" - --sub compute_values($) { -- my($hz) = @_; -- my @val = (); -- my $s, $m, $a, $g; -- -- if (!$has_bigint) { -- die "$0: HZ == $hz not canned and ". -- "Math::BigInt not available\n"; -- } +- s=fmuls(32,1000000,hz) +- obase=16 +- print "#define HZ_TO_USEC_MUL32\tU64_C(0x", fmul(s,1000000,hz), ")\n" +- print "#define HZ_TO_USEC_ADJ32\tU64_C(0x", fadj(s,1000000,hz), ")\n" +- obase=10 +- print "#define HZ_TO_USEC_SHR32\t", s, "\n" - -- # MSEC conversions -- push(@val, conversions(1000, $hz)); -- -- # USEC conversions -- push(@val, conversions(1000000, $hz)); -- -- return @val; --} +- s=fmuls(32,hz,1000000) +- obase=16 +- print "#define USEC_TO_HZ_MUL32\tU64_C(0x", fmul(s,hz,1000000), ")\n" +- print "#define USEC_TO_HZ_ADJ32\tU64_C(0x", fadj(s,hz,1000000), ")\n" +- obase=10 +- print "#define USEC_TO_HZ_SHR32\t", s, "\n" - --sub outputval($$) --{ -- my($name, $val) = @_; -- my $csuf; +- obase=10 +- cd=gcd(hz,1000000) +- print "#define HZ_TO_USEC_NUM\t\t", 1000000/cd, "\n" +- print "#define HZ_TO_USEC_DEN\t\t", hz/cd, "\n" +- print "#define USEC_TO_HZ_NUM\t\t", hz/cd, "\n" +- print "#define USEC_TO_HZ_DEN\t\t", 1000000/cd, "\n" +- print "\n" - -- if (defined($val)) { -- if ($name !~ /SHR/) { -- $val = "U64_C($val)"; -- } -- printf "#define %-23s %s\n", $name.$csuf, $val.$csuf; +- print "#endif /* KERNEL_TIMECONST_H */\n" - } +- halt -} - --sub output($@) --{ -- 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 \n"; -- print "#include \n"; -- -- print "\n"; -- print "#if HZ != $hz\n"; -- print "#error \"kernel/timeconst.h has the wrong HZ value!\"\n"; -- print "#endif\n"; -- print "\n"; +-timeconst(hz) +--- linux/kernel/Makefile ++++ linux/kernel/Makefile +@@ -125,19 +125,13 @@ + + $(obj)/time.o: $(obj)/timeconst.h + +-quiet_cmd_hzfile = HZFILE $@ +- cmd_hzfile = echo "hz=$(CONFIG_HZ)" > $@ - -- foreach $pfx ('HZ_TO_MSEC','MSEC_TO_HZ', -- 'HZ_TO_USEC','USEC_TO_HZ') { -- foreach $bit (32) { -- foreach $suf ('MUL', 'ADJ', 'SHR') { -- outputval("${pfx}_$suf$bit", shift(@val)); -- } -- } -- foreach $suf ('NUM', 'DEN') { -- outputval("${pfx}_$suf", shift(@val)); -- } -- } -- -- print "\n"; -- print "#endif /* KERNEL_TIMECONST_H */\n"; --} -- --# Pretty-print Perl values --sub perlvals(@) { -- my $v; -- my @l = (); -- -- foreach $v (@_) { -- if (!defined($v)) { -- push(@l, 'undef'); -- } elsif ($v =~ /^0x/) { -- push(@l, "\'".$v."\'"); -- } else { -- push(@l, $v.''); -- } -- } -- return join(',', @l); --} -- --($hz) = @ARGV; -- --# Use this to generate the %canned_values structure --if ($hz eq '--can') { -- shift(@ARGV); -- @hzlist = sort {$a <=> $b} (@ARGV); +-targets += hz.bc +-$(obj)/hz.bc: $(objtree)/include/config/hz.h FORCE +- $(call if_changed,hzfile) - -- 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); -- } -- output($hz, @val); --} --exit 0; - ---------------070402000802050303040701 -Content-Type: application/x-sh; name="loopy.sh" -Content-Transfer-Encoding: 7bit -Content-Disposition: attachment; filename="loopy.sh" - -#!/bin/bash - -gcc mktimeconst.c || exit 1 - -X=1 -while [ $X -lt 5000 ] -do - echo $X - - perl ~/linux/linux/kernel/timeconst.pl $X | sed 's/KERNEL_TIMECONST/__KERNEL_TIMECONST/;/Automatically generated/d;/^$/d'> temp.txt - ./a.out $X temp2.txt - sed -i '/Automatically generated/d;/^$/d' temp2.txt - - diff -uw temp.txt temp2.txt || exit 1 - - X=$(($X+1)) -done - ---------------070402000802050303040701-- +-quiet_cmd_bc = BC $@ +- cmd_bc = bc -q $(filter-out FORCE,$^) > $@ ++hostprogs-y += mktimeconst ++quiet_cmd_mktimeconst = TIMEC $@ ++ cmd_mktimeconst = $(obj)/mktimeconst $(CONFIG_HZ) $@ || ( rm -f $@ && exit 1 ) + + targets += timeconst.h +-$(obj)/timeconst.h: $(obj)/hz.bc $(src)/timeconst.bc FORCE +- $(call if_changed,bc) ++$(obj)/timeconst.h: $(obj)/mktimeconst FORCE ++ $(call if_changed,mktimeconst) + + ifeq ($(CONFIG_MODULE_SIG),y) + #