diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-27 15:25:47 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-27 15:25:47 -0500 |
| commit | 0ca7ffb356063c5ece847687da457dfe748612a2 (patch) | |
| tree | f7858236ba482814c8cacf45447a3f96548a1688 /kernel | |
| parent | 30acd906b02470e7eb346401de966a33864d9af4 (diff) | |
| parent | 423a8155facf23719078ff63911c1e85ba40970b (diff) | |
Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
Pull kbuild changes from Michal Marek:
- Alias generation in modpost is cross-compile safe.
- kernel/timeconst.h is now generated using a bc script instead of
perl.
- scripts/link-vmlinux.sh now works with an alternative
$KCONFIG_CONFIG.
- destination-y for exported headers is supported in Kbuild files
again.
- depmod is called with -P $CONFIG_SYMBOL_PREFIX on architectures that
need it.
- CONFIG_DEBUG_INFO_REDUCED disables var-tracking
- scripts/setlocalversion works with too much translated locales ;)
* 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
kbuild: Fix reading of .config in link-vmlinux.sh
kbuild: Unset language specific variables in setlocalversion script
Kbuild: Disable var tracking with CONFIG_DEBUG_INFO_REDUCED
depmod: pass -P $CONFIG_SYMBOL_PREFIX
kbuild: Fix destination-y for installed headers
scripts/link-vmlinux.sh: source variables from KCONFIG_CONFIG
kernel: Replace timeconst.pl with a bc script
mod/file2alias: make modalias generation safe for cross compiling
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/Makefile | 16 | ||||
| -rw-r--r-- | kernel/timeconst.bc | 108 | ||||
| -rw-r--r-- | kernel/timeconst.pl | 376 |
3 files changed, 120 insertions, 380 deletions
diff --git a/kernel/Makefile b/kernel/Makefile index eceac38f3c65..05949c0510c5 100644 --- a/kernel/Makefile +++ b/kernel/Makefile | |||
| @@ -127,11 +127,19 @@ $(obj)/config_data.h: $(obj)/config_data.gz FORCE | |||
| 127 | 127 | ||
| 128 | $(obj)/time.o: $(obj)/timeconst.h | 128 | $(obj)/time.o: $(obj)/timeconst.h |
| 129 | 129 | ||
| 130 | quiet_cmd_timeconst = TIMEC $@ | 130 | quiet_cmd_hzfile = HZFILE $@ |
| 131 | cmd_timeconst = $(PERL) $< $(CONFIG_HZ) > $@ | 131 | cmd_hzfile = echo "hz=$(CONFIG_HZ)" > $@ |
| 132 | |||
| 133 | targets += hz.bc | ||
| 134 | $(obj)/hz.bc: $(objtree)/include/config/hz.h FORCE | ||
| 135 | $(call if_changed,hzfile) | ||
| 136 | |||
| 137 | quiet_cmd_bc = BC $@ | ||
| 138 | cmd_bc = bc -q $(filter-out FORCE,$^) > $@ | ||
| 139 | |||
| 132 | targets += timeconst.h | 140 | targets += timeconst.h |
| 133 | $(obj)/timeconst.h: $(src)/timeconst.pl FORCE | 141 | $(obj)/timeconst.h: $(obj)/hz.bc $(src)/timeconst.bc FORCE |
| 134 | $(call if_changed,timeconst) | 142 | $(call if_changed,bc) |
| 135 | 143 | ||
| 136 | ifeq ($(CONFIG_MODULE_SIG),y) | 144 | ifeq ($(CONFIG_MODULE_SIG),y) |
| 137 | # | 145 | # |
diff --git a/kernel/timeconst.bc b/kernel/timeconst.bc new file mode 100644 index 000000000000..511bdf2cafda --- /dev/null +++ b/kernel/timeconst.bc | |||
| @@ -0,0 +1,108 @@ | |||
| 1 | scale=0 | ||
| 2 | |||
| 3 | define gcd(a,b) { | ||
| 4 | auto t; | ||
| 5 | while (b) { | ||
| 6 | t = b; | ||
| 7 | b = a % b; | ||
| 8 | a = t; | ||
| 9 | } | ||
| 10 | return a; | ||
| 11 | } | ||
| 12 | |||
| 13 | /* Division by reciprocal multiplication. */ | ||
| 14 | define fmul(b,n,d) { | ||
| 15 | return (2^b*n+d-1)/d; | ||
| 16 | } | ||
| 17 | |||
| 18 | /* Adjustment factor when a ceiling value is used. Use as: | ||
| 19 | (imul * n) + (fmulxx * n + fadjxx) >> xx) */ | ||
| 20 | define fadj(b,n,d) { | ||
| 21 | auto v; | ||
| 22 | d = d/gcd(n,d); | ||
| 23 | v = 2^b*(d-1)/d; | ||
| 24 | return v; | ||
| 25 | } | ||
| 26 | |||
| 27 | /* Compute the appropriate mul/adj values as well as a shift count, | ||
| 28 | which brings the mul value into the range 2^b-1 <= x < 2^b. Such | ||
| 29 | a shift value will be correct in the signed integer range and off | ||
| 30 | by at most one in the upper half of the unsigned range. */ | ||
| 31 | define fmuls(b,n,d) { | ||
| 32 | auto s, m; | ||
| 33 | for (s = 0; 1; s++) { | ||
| 34 | m = fmul(s,n,d); | ||
| 35 | if (m >= 2^(b-1)) | ||
| 36 | return s; | ||
| 37 | } | ||
| 38 | return 0; | ||
| 39 | } | ||
| 40 | |||
| 41 | define timeconst(hz) { | ||
| 42 | print "/* Automatically generated by kernel/timeconst.bc */\n" | ||
| 43 | print "/* Time conversion constants for HZ == ", hz, " */\n" | ||
| 44 | print "\n" | ||
| 45 | |||
| 46 | print "#ifndef KERNEL_TIMECONST_H\n" | ||
| 47 | print "#define KERNEL_TIMECONST_H\n\n" | ||
| 48 | |||
| 49 | print "#include <linux/param.h>\n" | ||
| 50 | print "#include <linux/types.h>\n\n" | ||
| 51 | |||
| 52 | print "#if HZ != ", hz, "\n" | ||
| 53 | print "#error \qkernel/timeconst.h has the wrong HZ value!\q\n" | ||
| 54 | print "#endif\n\n" | ||
| 55 | |||
| 56 | if (hz < 2) { | ||
| 57 | print "#error Totally bogus HZ value!\n" | ||
| 58 | } else { | ||
| 59 | s=fmuls(32,1000,hz) | ||
| 60 | obase=16 | ||
| 61 | print "#define HZ_TO_MSEC_MUL32\tU64_C(0x", fmul(s,1000,hz), ")\n" | ||
| 62 | print "#define HZ_TO_MSEC_ADJ32\tU64_C(0x", fadj(s,1000,hz), ")\n" | ||
| 63 | obase=10 | ||
| 64 | print "#define HZ_TO_MSEC_SHR32\t", s, "\n" | ||
| 65 | |||
| 66 | s=fmuls(32,hz,1000) | ||
| 67 | obase=16 | ||
| 68 | print "#define MSEC_TO_HZ_MUL32\tU64_C(0x", fmul(s,hz,1000), ")\n" | ||
| 69 | print "#define MSEC_TO_HZ_ADJ32\tU64_C(0x", fadj(s,hz,1000), ")\n" | ||
| 70 | obase=10 | ||
| 71 | print "#define MSEC_TO_HZ_SHR32\t", s, "\n" | ||
| 72 | |||
| 73 | obase=10 | ||
| 74 | cd=gcd(hz,1000) | ||
| 75 | print "#define HZ_TO_MSEC_NUM\t\t", 1000/cd, "\n" | ||
| 76 | print "#define HZ_TO_MSEC_DEN\t\t", hz/cd, "\n" | ||
| 77 | print "#define MSEC_TO_HZ_NUM\t\t", hz/cd, "\n" | ||
| 78 | print "#define MSEC_TO_HZ_DEN\t\t", 1000/cd, "\n" | ||
| 79 | print "\n" | ||
| 80 | |||
| 81 | s=fmuls(32,1000000,hz) | ||
| 82 | obase=16 | ||
| 83 | print "#define HZ_TO_USEC_MUL32\tU64_C(0x", fmul(s,1000000,hz), ")\n" | ||
| 84 | print "#define HZ_TO_USEC_ADJ32\tU64_C(0x", fadj(s,1000000,hz), ")\n" | ||
| 85 | obase=10 | ||
| 86 | print "#define HZ_TO_USEC_SHR32\t", s, "\n" | ||
| 87 | |||
| 88 | s=fmuls(32,hz,1000000) | ||
| 89 | obase=16 | ||
| 90 | print "#define USEC_TO_HZ_MUL32\tU64_C(0x", fmul(s,hz,1000000), ")\n" | ||
| 91 | print "#define USEC_TO_HZ_ADJ32\tU64_C(0x", fadj(s,hz,1000000), ")\n" | ||
| 92 | obase=10 | ||
| 93 | print "#define USEC_TO_HZ_SHR32\t", s, "\n" | ||
| 94 | |||
| 95 | obase=10 | ||
| 96 | cd=gcd(hz,1000000) | ||
| 97 | print "#define HZ_TO_USEC_NUM\t\t", 1000000/cd, "\n" | ||
| 98 | print "#define HZ_TO_USEC_DEN\t\t", hz/cd, "\n" | ||
| 99 | print "#define USEC_TO_HZ_NUM\t\t", hz/cd, "\n" | ||
| 100 | print "#define USEC_TO_HZ_DEN\t\t", 1000000/cd, "\n" | ||
| 101 | print "\n" | ||
| 102 | |||
| 103 | print "#endif /* KERNEL_TIMECONST_H */\n" | ||
| 104 | } | ||
| 105 | halt | ||
| 106 | } | ||
| 107 | |||
| 108 | timeconst(hz) | ||
diff --git a/kernel/timeconst.pl b/kernel/timeconst.pl deleted file mode 100644 index 3f42652a6a37..000000000000 --- a/kernel/timeconst.pl +++ /dev/null | |||
| @@ -1,376 +0,0 @@ | |||
| 1 | #!/usr/bin/perl | ||
| 2 | # ----------------------------------------------------------------------- | ||
| 3 | # | ||
| 4 | # Copyright 2007-2008 rPath, Inc. - All Rights Reserved | ||
| 5 | # | ||
| 6 | # This file is part of the Linux kernel, and is made available under | ||
| 7 | # the terms of the GNU General Public License version 2 or (at your | ||
| 8 | # option) any later version; incorporated herein by reference. | ||
| 9 | # | ||
| 10 | # ----------------------------------------------------------------------- | ||
| 11 | # | ||
| 12 | |||
| 13 | # | ||
| 14 | # Usage: timeconst.pl HZ > timeconst.h | ||
| 15 | # | ||
| 16 | |||
| 17 | # Precomputed values for systems without Math::BigInt | ||
| 18 | # Generated by: | ||
| 19 | # timeconst.pl --can 24 32 48 64 100 122 128 200 250 256 300 512 1000 1024 1200 | ||
| 20 | %canned_values = ( | ||
| 21 | 24 => [ | ||
| 22 | '0xa6aaaaab','0x2aaaaaa',26, | ||
| 23 | 125,3, | ||
| 24 | '0xc49ba5e4','0x1fbe76c8b4',37, | ||
| 25 | 3,125, | ||
| 26 | '0xa2c2aaab','0xaaaa',16, | ||
| 27 | 125000,3, | ||
| 28 | '0xc9539b89','0x7fffbce4217d',47, | ||
| 29 | 3,125000, | ||
| 30 | ], 32 => [ | ||
| 31 | '0xfa000000','0x6000000',27, | ||
| 32 | 125,4, | ||
| 33 | '0x83126e98','0xfdf3b645a',36, | ||
| 34 | 4,125, | ||
| 35 | '0xf4240000','0x0',17, | ||
| 36 | 31250,1, | ||
| 37 | '0x8637bd06','0x3fff79c842fa',46, | ||
| 38 | 1,31250, | ||
| 39 | ], 48 => [ | ||
| 40 | '0xa6aaaaab','0x6aaaaaa',27, | ||
| 41 | 125,6, | ||
| 42 | '0xc49ba5e4','0xfdf3b645a',36, | ||
| 43 | 6,125, | ||
| 44 | '0xa2c2aaab','0x15555',17, | ||
| 45 | 62500,3, | ||
| 46 | '0xc9539b89','0x3fffbce4217d',46, | ||
| 47 | 3,62500, | ||
| 48 | ], 64 => [ | ||
| 49 | '0xfa000000','0xe000000',28, | ||
| 50 | 125,8, | ||
| 51 | '0x83126e98','0x7ef9db22d',35, | ||
| 52 | 8,125, | ||
| 53 | '0xf4240000','0x0',18, | ||
| 54 | 15625,1, | ||
| 55 | '0x8637bd06','0x1fff79c842fa',45, | ||
| 56 | 1,15625, | ||
| 57 | ], 100 => [ | ||
| 58 | '0xa0000000','0x0',28, | ||
