diff options
| author | H. Peter Anvin <hpa@zytor.com> | 2008-05-02 19:18:42 -0400 |
|---|---|---|
| committer | H. Peter Anvin <hpa@zytor.com> | 2008-05-02 19:18:42 -0400 |
| commit | b9095fd8a7f41dc7ac0b0b7864f74766a3056f96 (patch) | |
| tree | 85653322dfb5b0c2faef3973d9d480d8117e4454 /kernel | |
| parent | c25bd29805f4d854c3a0b4176813f3c1bff569d3 (diff) | |
Make constants in kernel/timeconst.h fixed 64 bits
Force constants in kernel/timeconst.h (except shift counts) to be 64 bits,
using U64_C() constructor macros, and eliminate constants that cannot
be represented at all in 64 bits. This avoids warnings with some gcc
versions.
Drop generating 64-bit constants, since we have no real hope of
getting a full set (operation on 64-bit values requires a 128-bit
intermediate result, which gcc only supports on 64-bit platforms, and
only with libgcc support on some.) Note that the use of these
constants does not depend on if we are on a 32- or 64-bit architecture.
This resolves Bugzilla 10153.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/time.c | 8 | ||||
| -rw-r--r-- | kernel/timeconst.pl | 120 |
2 files changed, 52 insertions, 76 deletions
diff --git a/kernel/time.c b/kernel/time.c index cbe0d5a222ff..6a08660b4fac 100644 --- a/kernel/time.c +++ b/kernel/time.c | |||
| @@ -246,7 +246,7 @@ unsigned int inline jiffies_to_msecs(const unsigned long j) | |||
| 246 | return (j + (HZ / MSEC_PER_SEC) - 1)/(HZ / MSEC_PER_SEC); | 246 | return (j + (HZ / MSEC_PER_SEC) - 1)/(HZ / MSEC_PER_SEC); |
| 247 | #else | 247 | #else |
| 248 | # if BITS_PER_LONG == 32 | 248 | # if BITS_PER_LONG == 32 |
| 249 | return ((u64)HZ_TO_MSEC_MUL32 * j) >> HZ_TO_MSEC_SHR32; | 249 | return (HZ_TO_MSEC_MUL32 * j) >> HZ_TO_MSEC_SHR32; |
| 250 | # else | 250 | # else |
| 251 | return (j * HZ_TO_MSEC_NUM) / HZ_TO_MSEC_DEN; | 251 | return (j * HZ_TO_MSEC_NUM) / HZ_TO_MSEC_DEN; |
| 252 | # endif | 252 | # endif |
| @@ -262,7 +262,7 @@ unsigned int inline jiffies_to_usecs(const unsigned long j) | |||
| 262 | return (j + (HZ / USEC_PER_SEC) - 1)/(HZ / USEC_PER_SEC); | 262 | return (j + (HZ / USEC_PER_SEC) - 1)/(HZ / USEC_PER_SEC); |
| 263 | #else | 263 | #else |
| 264 | # if BITS_PER_LONG == 32 | 264 | # if BITS_PER_LONG == 32 |
| 265 | return ((u64)HZ_TO_USEC_MUL32 * j) >> HZ_TO_USEC_SHR32; | 265 | return (HZ_TO_USEC_MUL32 * j) >> HZ_TO_USEC_SHR32; |
| 266 | # else | 266 | # else |
| 267 | return (j * HZ_TO_USEC_NUM) / HZ_TO_USEC_DEN; | 267 | return (j * HZ_TO_USEC_NUM) / HZ_TO_USEC_DEN; |
| 268 | # endif | 268 | # endif |
| @@ -476,7 +476,7 @@ unsigned long msecs_to_jiffies(const unsigned int m) | |||
| 476 | if (HZ > MSEC_PER_SEC && m > jiffies_to_msecs(MAX_JIFFY_OFFSET)) | 476 | if (HZ > MSEC_PER_SEC && m > jiffies_to_msecs(MAX_JIFFY_OFFSET)) |
| 477 | return MAX_JIFFY_OFFSET; | 477 | return MAX_JIFFY_OFFSET; |
| 478 | 478 | ||
| 479 | return ((u64)MSEC_TO_HZ_MUL32 * m + MSEC_TO_HZ_ADJ32) | 479 | return (MSEC_TO_HZ_MUL32 * m + MSEC_TO_HZ_ADJ32) |
| 480 | >> MSEC_TO_HZ_SHR32; | 480 | >> MSEC_TO_HZ_SHR32; |
| 481 | #endif | 481 | #endif |
| 482 | } | 482 | } |
| @@ -491,7 +491,7 @@ unsigned long usecs_to_jiffies(const unsigned int u) | |||
| 491 | #elif HZ > USEC_PER_SEC && !(HZ % USEC_PER_SEC) | 491 | #elif HZ > USEC_PER_SEC && !(HZ % USEC_PER_SEC) |
| 492 | return u * (HZ / USEC_PER_SEC); | 492 | return u * (HZ / USEC_PER_SEC); |
| 493 | #else | 493 | #else |
| 494 | return ((u64)USEC_TO_HZ_MUL32 * u + USEC_TO_HZ_ADJ32) | 494 | return (USEC_TO_HZ_MUL32 * u + USEC_TO_HZ_ADJ32) |
| 495 | >> USEC_TO_HZ_SHR32; | 495 | >> USEC_TO_HZ_SHR32; |
| 496 | #endif | 496 | #endif |
| 497 | } | 497 | } |
diff --git a/kernel/timeconst.pl b/kernel/timeconst.pl index 41468035473c..eb51d76e058a 100644 --- a/kernel/timeconst.pl +++ b/kernel/timeconst.pl | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | #!/usr/bin/perl | 1 | #!/usr/bin/perl |
| 2 | # ----------------------------------------------------------------------- | 2 | # ----------------------------------------------------------------------- |
| 3 | # | 3 | # |
| 4 | # Copyright 2007 rPath, Inc. - All Rights Reserved | 4 | # Copyright 2007-2008 rPath, Inc. - All Rights Reserved |
| 5 | # | 5 | # |
| 6 | # This file is part of the Linux kernel, and is made available under | 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 | 7 | # the terms of the GNU General Public License version 2 or (at your |
| @@ -20,198 +20,138 @@ | |||
| 20 | %canned_values = ( | 20 | %canned_values = ( |
| 21 | 24 => [ | 21 | 24 => [ |
| 22 | '0xa6aaaaab','0x2aaaaaa',26, | 22 | '0xa6aaaaab','0x2aaaaaa',26, |
| 23 | '0xa6aaaaaaaaaaaaab','0x2aaaaaaaaaaaaaa',58, | ||
| 24 | 125,3, | 23 | 125,3, |
| 25 | '0xc49ba5e4','0x1fbe76c8b4',37, | 24 | '0xc49ba5e4','0x1fbe76c8b4',37, |
| 26 | '0xc49ba5e353f7ceda','0x1fbe76c8b439581062',69, | ||
| 27 | 3,125, | 25 | 3,125, |
| 28 | '0xa2c2aaab','0xaaaa',16, | 26 | '0xa2c2aaab','0xaaaa',16, |
| 29 | '0xa2c2aaaaaaaaaaab','0xaaaaaaaaaaaa',48, | ||
| 30 | 125000,3, | 27 | 125000,3, |
| 31 | '0xc9539b89','0x7fffbce4217d',47, | 28 | '0xc9539b89','0x7fffbce4217d',47, |
| 32 | '0xc9539b8887229e91','0x7fffbce4217d2849cb25',79, | ||
| 33 | 3,125000, | 29 | 3,125000, |
| 34 | ], 32 => [ | 30 | ], 32 => [ |
| 35 | '0xfa000000','0x6000000',27, | 31 | '0xfa000000','0x6000000',27, |
| 36 | '0xfa00000000000000','0x600000000000000',59, | ||
| 37 | 125,4, | 32 | 125,4, |
| 38 | '0x83126e98','0xfdf3b645a',36, | 33 | '0x83126e98','0xfdf3b645a',36, |
| 39 | '0x83126e978d4fdf3c','0xfdf3b645a1cac0831',68, | ||
| 40 | 4,125, | 34 | 4,125, |
| 41 | '0xf4240000','0x0',17, | 35 | '0xf4240000','0x0',17, |
| 42 | '0xf424000000000000','0x0',49, | ||
| 43 | 31250,1, | 36 | 31250,1, |
| 44 | '0x8637bd06','0x3fff79c842fa',46, | 37 | '0x8637bd06','0x3fff79c842fa',46, |
| 45 | '0x8637bd05af6c69b6','0x3fff79c842fa5093964a',78, | ||
| 46 | 1,31250, | 38 | 1,31250, |
| 47 | ], 48 => [ | 39 | ], 48 => [ |
| 48 | '0xa6aaaaab','0x6aaaaaa',27, | 40 | '0xa6aaaaab','0x6aaaaaa',27, |
| 49 | '0xa6aaaaaaaaaaaaab','0x6aaaaaaaaaaaaaa',59, | ||
| 50 | 125,6, | 41 | 125,6, |
| 51 | '0xc49ba5e4','0xfdf3b645a',36, | 42 | '0xc49ba5e4','0xfdf3b645a',36, |
| 52 | '0xc49ba5e353f7ceda','0xfdf3b645a1cac0831',68, | ||
| 53 | 6,125, | 43 | 6,125, |
| 54 | '0xa2c2aaab','0x15555',17, | 44 | '0xa2c2aaab','0x15555',17, |
| 55 | '0xa2c2aaaaaaaaaaab','0x1555555555555',49, | ||
| 56 | 62500,3, | 45 | 62500,3, |
| 57 | '0xc9539b89','0x3fffbce4217d',46, | 46 | '0xc9539b89','0x3fffbce4217d',46, |
| 58 | '0xc9539b8887229e91','0x3fffbce4217d2849cb25',78, | ||
| 59 | 3,62500, | 47 | 3,62500, |
| 60 | ], 64 => [ | 48 | ], 64 => [ |
| 61 | '0xfa000000','0xe000000',28, | 49 | '0xfa000000','0xe000000',28, |
| 62 | '0xfa00000000000000','0xe00000000000000',60, | ||
| 63 | 125,8, | 50 | 125,8, |
| 64 | '0x83126e98','0x7ef9db22d',35, | 51 | '0x83126e98','0x7ef9db22d',35, |
| 65 | '0x83126e978d4fdf3c','0x7ef9db22d0e560418',67, | ||
| 66 | 8,125, | 52 | 8,125, |
| 67 | '0xf4240000','0x0',18, | 53 | '0xf4240000','0x0',18, |
| 68 | '0xf424000000000000','0x0',50, | ||
| 69 | 15625,1, | 54 | 15625,1, |
| 70 | '0x8637bd06','0x1fff79c842fa',45, | 55 | '0x8637bd06','0x1fff79c842fa',45, |
| 71 | '0x8637bd05af6c69b6','0x1fff79c842fa5093964a',77, | ||
| 72 | 1,15625, | 56 | 1,15625, |
| 73 | ], 100 => [ | 57 | ], 100 => [ |
| 74 | '0xa0000000','0x0',28, | 58 | '0xa0000000','0x0',28, |
| 75 | '0xa000000000000000','0x0',60, | ||
| 76 | 10,1, | 59 | 10,1, |
| 77 | '0xcccccccd','0x733333333',35, | 60 | '0xcccccccd','0x733333333',35, |
| 78 | '0xcccccccccccccccd','0x73333333333333333',67, | ||
| 79 | 1,10, | 61 | 1,10, |
| 80 | '0x9c400000','0x0',18, | 62 | '0x9c400000','0x0',18, |
| 81 | '0x9c40000000000000','0x0',50, | ||
| 82 | 10000,1, | 63 | 10000,1, |
| 83 | '0xd1b71759','0x1fff2e48e8a7',45, | 64 | '0xd1b71759','0x1fff2e48e8a7',45, |
| 84 | '0xd1b71758e219652c','0x1fff2e48e8a71de69ad4',77, | ||
| 85 | 1,10000, | 65 | 1,10000, |
| 86 | ], 122 => [ | 66 | ], 122 => [ |
| 87 | '0x8325c53f','0xfbcda3a',28, | 67 | '0x8325c53f','0xfbcda3a',28, |
| 88 | '0x8325c53ef368eb05','0xfbcda3ac10c9714',60, | ||
| 89 | 500,61, | 68 | 500,61, |
| 90 | '0xf9db22d1','0x7fbe76c8b',35, | 69 | '0xf9db22d1','0x7fbe76c8b',35, |
| 91 | '0xf9db22d0e560418a','0x7fbe76c8b43958106',67, | ||
| 92 | 61,500, | 70 | 61,500, |
| 93 | '0x8012e2a0','0x3ef36',18, | 71 | '0x8012e2a0','0x3ef36',18, |
| 94 | '0x8012e29f79b47583','0x3ef368eb04325',50, | ||
| 95 | 500000,61, | 72 | 500000,61, |
| 96 | '0xffda4053','0x1ffffbce4217',45, | 73 | '0xffda4053','0x1ffffbce4217',45, |
| 97 | '0xffda4052d666a983','0x1ffffbce4217d2849cb2',77, | ||
| 98 | 61,500000, | 74 | 61,500000, |
| 99 | ], 128 => [ | 75 | ], 128 => [ |
| 100 | '0xfa000000','0x1e000000',29, | 76 | '0xfa000000','0x1e000000',29, |
| 101 | '0xfa00000000000000','0x1e00000000000000',61, | ||
| 102 | 125,16, | 77 | 125,16, |
| 103 | '0x83126e98','0x3f7ced916',34, | 78 | '0x83126e98','0x3f7ced916',34, |
| 104 | '0x83126e978d4fdf3c','0x3f7ced916872b020c',66, | ||
| 105 | 16,125, | 79 | 16,125, |
| 106 | '0xf4240000','0x40000',19, | 80 | '0xf4240000','0x40000',19, |
| 107 | '0xf424000000000000','0x4000000000000',51, | ||
| 108 | 15625,2, | 81 | 15625,2, |
| 109 | '0x8637bd06','0xfffbce4217d',44, | 82 | '0x8637bd06','0xfffbce4217d',44, |
| 110 | '0x8637bd05af6c69b6','0xfffbce4217d2849cb25',76, | ||
| 111 | 2,15625, | 83 | 2,15625, |
| 112 | ], 200 => [ | 84 | ], 200 => [ |
| 113 | '0xa0000000','0x0',29, | 85 | '0xa0000000','0x0',29, |
| 114 | '0xa000000000000000','0x0',61, | ||
| 115 | 5,1, | 86 | 5,1, |
| 116 | '0xcccccccd','0x333333333',34, | 87 | '0xcccccccd','0x333333333',34, |
| 117 | '0xcccccccccccccccd','0x33333333333333333',66, | ||
| 118 | 1,5, | 88 | 1,5, |
| 119 | '0x9c400000','0x0',19, | 89 | '0x9c400000','0x0',19, |
| 120 | '0x9c40000000000000','0x0',51, | ||
| 121 | 5000,1, | 90 | 5000,1, |
| 122 | '0xd1b71759','0xfff2e48e8a7',44, | 91 | '0xd1b71759','0xfff2e48e8a7',44, |
| 123 | '0xd1b71758e219652c','0xfff2e48e8a71de69ad4',76, | ||
| 124 | 1,5000, | 92 | 1,5000, |
| 125 | ], 250 => [ | 93 | ], 250 => [ |
| 126 | '0x80000000','0x0',29, | 94 | '0x80000000','0x0',29, |
| 127 | '0x8000000000000000','0x0',61, | ||
| 128 | 4,1, | 95 | 4,1, |
| 129 | '0x80000000','0x180000000',33, | 96 | '0x80000000','0x180000000',33, |
| 130 | '0x8000000000000000','0x18000000000000000',65, | ||
| 131 | 1,4, | 97 | 1,4, |
| 132 | '0xfa000000','0x0',20, | 98 | '0xfa000000','0x0',20, |
| 133 | '0xfa00000000000000','0x0',52, | ||
| 134 | 4000,1, | 99 | 4000,1, |
| 135 | '0x83126e98','0x7ff7ced9168',43, | 100 | '0x83126e98','0x7ff7ced9168',43, |
| 136 | '0x83126e978d4fdf3c','0x7ff7ced916872b020c4',75, | ||
| 137 | 1,4000, | 101 | 1,4000, |
| 138 | ], 256 => [ | 102 | ], 256 => [ |
| 139 | '0xfa000000','0x3e000000',30, | 103 | '0xfa000000','0x3e000000',30, |
| 140 | '0xfa00000000000000','0x3e00000000000000',62, | ||
| 141 | 125,32, | 104 | 125,32, |
| 142 | '0x83126e98','0x1fbe76c8b',33, | 105 | '0x83126e98','0x1fbe76c8b',33, |
| 143 | '0x83126e978d4fdf3c','0x1fbe76c8b43958106',65, | ||
| 144 | 32,125, | 106 | 32,125, |
| 145 | '0xf4240000','0xc0000',20, | 107 | '0xf4240000','0xc0000',20, |
| 146 | '0xf424000000000000','0xc000000000000',52, | ||
| 147 | 15625,4, | 108 | 15625,4, |
| 148 | '0x8637bd06','0x7ffde7210be',43, | 109 | '0x8637bd06','0x7ffde7210be',43, |
| 149 | '0x8637bd05af6c69b6','0x7ffde7210be9424e592',75, | ||
| 150 | 4,15625, | 110 | 4,15625, |
| 151 | ], 300 => [ | 111 | ], 300 => [ |
| 152 | '0xd5555556','0x2aaaaaaa',30, | 112 | '0xd5555556','0x2aaaaaaa',30, |
| 153 | '0xd555555555555556','0x2aaaaaaaaaaaaaaa',62, | ||
| 154 | 10,3, | 113 | 10,3, |
| 155 | '0x9999999a','0x1cccccccc',33, | 114 | '0x9999999a','0x1cccccccc',33, |
| 156 | '0x999999999999999a','0x1cccccccccccccccc',65, | ||
| 157 | 3,10, | 115 | 3,10, |
| 158 | '0xd0555556','0xaaaaa',20, | 116 | '0xd0555556','0xaaaaa',20, |
| 159 | '0xd055555555555556','0xaaaaaaaaaaaaa',52, | ||
| 160 | 10000,3, | 117 | 10000,3, |
| 161 | '0x9d495183','0x7ffcb923a29',43, | 118 | '0x9d495183','0x7ffcb923a29',43, |
| 162 | '0x9d495182a9930be1','0x7ffcb923a29c779a6b5',75, | ||
| 163 | 3,10000, | 119 | 3,10000, |
| 164 | ], 512 => [ | 120 | ], 512 => [ |
| 165 | '0xfa000000','0x7e000000',31, | 121 | '0xfa000000','0x7e000000',31, |
| 166 | '0xfa00000000000000','0x7e00000000000000',63, | ||
| 167 | 125,64, | 122 | 125,64, |
| 168 | '0x83126e98','0xfdf3b645',32, | 123 | '0x83126e98','0xfdf3b645',32, |
| 169 | '0x83126e978d4fdf3c','0xfdf3b645a1cac083',64, | ||
| 170 | 64,125, | 124 | 64,125, |
| 171 | '0xf4240000','0x1c0000',21, | 125 | '0xf4240000','0x1c0000',21, |
| 172 | '0xf424000000000000','0x1c000000000000',53, | ||
| 173 | 15625,8, | 126 | 15625,8, |
| 174 | '0x8637bd06','0x3ffef39085f',42, | 127 | '0x8637bd06','0x3ffef39085f',42, |
| 175 | '0x8637bd05af6c69b6','0x3ffef39085f4a1272c9',74, | ||
| 176 | 8,15625, | 128 | 8,15625, |
| 177 | ], 1000 => [ | 129 | ], 1000 => [ |
| 178 | '0x80000000','0x0',31, | 130 | '0x80000000','0x0',31, |
| 179 | '0x8000000000000000','0x0',63, | ||
| 180 | 1,1, | 131 | 1,1, |
| 181 | '0x80000000','0x0',31, | 132 | '0x80000000','0x0',31, |
| 182 | '0x8000000000000000','0x0',63, | ||
| 183 | 1,1, | 133 | 1,1, |
| 184 | '0xfa000000','0x0',22, | 134 | '0xfa000000','0x0',22, |
| 185 | '0xfa00000000000000','0x0',54, | ||
| 186 | 1000,1, | 135 | 1000,1, |
| 187 | '0x83126e98','0x1ff7ced9168',41, | 136 | '0x83126e98','0x1ff7ced9168',41, |
| 188 | '0x83126e978d4fdf3c','0x1ff7ced916872b020c4',73, | ||
| 189 | 1,1000, | 137 | 1,1000, |
| 190 | ], 1024 => [ | 138 | ], 1024 => [ |
| 191 | '0xfa000000','0xfe000000',32, | 139 | '0xfa000000','0xfe000000',32, |
| 192 | '0xfa00000000000000','0xfe00000000000000',64, | ||
| 193 | 125,128, | 140 | 125,128, |
| 194 | '0x83126e98','0x7ef9db22',31, | 141 | '0x83126e98','0x7ef9db22',31, |
| 195 | '0x83126e978d4fdf3c','0x7ef9db22d0e56041',63, | ||
| 196 | 128,125, | 142 | 128,125, |
| 197 | '0xf4240000','0x3c0000',22, | 143 | '0xf4240000','0x3c0000',22, |
| 198 | '0xf424000000000000','0x3c000000000000',54, | ||
| 199 | 15625,16, | 144 | 15625,16, |
| 200 | '0x8637bd06','0x1fff79c842f',41, | 145 | '0x8637bd06','0x1fff79c842f',41, |
| 201 | '0x8637bd05af6c69b6','0x1fff79c842fa5093964',73, | ||
| 202 | 16,15625, | 146 | 16,15625, |
| 203 | ], 1200 => [ | 147 | ], 1200 => [ |
| 204 | '0xd5555556','0xd5555555',32, | 148 | '0xd5555556','0xd5555555',32, |
| 205 | '0xd555555555555556','0xd555555555555555',64, | ||
| 206 | 5,6, | 149 | 5,6, |
| 207 | '0x9999999a','0x66666666',31, | 150 | '0x9999999a','0x66666666',31, |
| 208 | '0x999999999999999a','0x6666666666666666',63, | ||
| 209 | 6,5, | 151 | 6,5, |
| 210 | '0xd0555556','0x2aaaaa',22, | 152 | '0xd0555556','0x2aaaaa',22, |
| 211 | '0xd055555555555556','0x2aaaaaaaaaaaaa',54, | ||
| 212 | 2500,3, | 153 | 2500,3, |
| 213 | '0x9d495183','0x1ffcb923a29',41, | 154 | '0x9d495183','0x1ffcb923a29',41, |
| 214 | '0x9d495182a9930be1','0x1ffcb923a29c779a6b5',73, | ||
| 215 | 3,2500, | 155 | 3,2500, |
| 216 | ] | 156 | ] |
| 217 | ); | 157 | ); |
| @@ -264,6 +204,15 @@ sub fmuls($$$) { | |||
| 264 | return 0; | 204 | return 0; |
| 265 | } | 205 | } |
| 266 | 206 | ||
| 207 | # Generate a hex value if the result fits in 64 bits; | ||
| 208 | # otherwise skip. | ||
| 209 | sub bignum_hex($) { | ||
| 210 | my($x) = @_; | ||
| 211 | my $s = $x->as_hex(); | ||
| 212 | |||
| 213 | return (length($s) > 18) ? undef : $s; | ||
| 214 | } | ||
| 215 | |||
| 267 | # Provides mul, adj, and shr factors for a specific | 216 | # Provides mul, adj, and shr factors for a specific |
| 268 | # (bit, time, hz) combination | 217 | # (bit, time, hz) combination |
| 269 | sub muladj($$$) { | 218 | sub muladj($$$) { |
| @@ -271,7 +220,7 @@ sub muladj($$$) { | |||
| 271 | my $s = fmuls($b, $t, $hz); | 220 | my $s = fmuls($b, $t, $hz); |
| 272 | my $m = fmul($s, $t, $hz); | 221 | my $m = fmul($s, $t, $hz); |
| 273 | my $a = fadj($s, $t, $hz); | 222 | my $a = fadj($s, $t, $hz); |
| 274 | return ($m->as_hex(), $a->as_hex(), $s); | 223 | return (bignum_hex($m), bignum_hex($a), $s); |
| 275 | } | 224 | } |
| 276 | 225 | ||
| 277 | # Provides numerator, denominator values | 226 | # Provides numerator, denominator values |
| @@ -288,12 +237,10 @@ sub conversions($$) { | |||
| 288 | 237 | ||
| 289 | # HZ_TO_xx | 238 | # HZ_TO_xx |
| 290 | push(@val, muladj(32, $t, $hz)); | 239 | push(@val, muladj(32, $t, $hz)); |
| 291 | push(@val, muladj(64, $t, $hz)); | ||
| 292 | push(@val, numden($t, $hz)); | 240 | push(@val, numden($t, $hz)); |
| 293 | 241 | ||
| 294 | # xx_TO_HZ | 242 | # xx_TO_HZ |
| 295 | push(@val, muladj(32, $hz, $t)); | 243 | push(@val, muladj(32, $hz, $t)); |
| 296 | push(@val, muladj(64, $hz, $t)); | ||
| 297 | push(@val, numden($hz, $t)); | 244 | push(@val, numden($hz, $t)); |
| 298 | 245 | ||
| 299 | return @val; | 246 | return @val; |
| @@ -318,6 +265,19 @@ sub compute_values($) { | |||
| 318 | return @val; | 265 | return @val; |
| 319 | } | 266 | } |
| 320 | 267 | ||
| 268 | sub outputval($$) | ||
| 269 | { | ||
| 270 | my($name, $val) = @_; | ||
| 271 | my $csuf; | ||
| 272 | |||
| 273 | if (defined($val)) { | ||
| 274 | if ($name !~ /SHR/) { | ||
| 275 | $val = "U64_C($val)"; | ||
| 276 | } | ||
| 277 | printf "#define %-23s %s\n", $name.$csuf, $val.$csuf; | ||
| 278 | } | ||
| 279 | } | ||
| 280 | |||
| 321 | sub output($@) | 281 | sub output($@) |
| 322 | { | 282 | { |
| 323 | my($hz, @val) = @_; | 283 | my($hz, @val) = @_; |
| @@ -331,6 +291,7 @@ sub output($@) | |||
| 331 | print "\n"; | 291 | print "\n"; |
| 332 | 292 | ||
| 333 | print "#include <linux/param.h>\n"; | 293 | print "#include <linux/param.h>\n"; |
| 294 | print "#include <linux/types.h>\n"; | ||
| 334 | 295 | ||
| 335 | print "\n"; | 296 | print "\n"; |
| 336 | print "#if HZ != $hz\n"; | 297 | print "#if HZ != $hz\n"; |
| @@ -340,15 +301,13 @@ sub output($@) | |||
| 340 | 301 | ||
| 341 | foreach $pfx ('HZ_TO_MSEC','MSEC_TO_HZ', | 302 | foreach $pfx ('HZ_TO_MSEC','MSEC_TO_HZ', |
| 342 | 'HZ_TO_USEC','USEC_TO_HZ') { | 303 | 'HZ_TO_USEC','USEC_TO_HZ') { |
| 343 | foreach $bit (32, 64) { | 304 | foreach $bit (32) { |
| 344 | foreach $suf ('MUL', 'ADJ', 'SHR') { | 305 | foreach $suf ('MUL', 'ADJ', 'SHR') { |
| 345 | printf "#define %-23s %s\n", | 306 | outputval("${pfx}_$suf$bit", shift(@val)); |
| 346 | "${pfx}_$suf$bit", shift(@val); | ||
| 347 | } | 307 | } |
| 348 | } | 308 | } |
| 349 | foreach $suf ('NUM', 'DEN') { | 309 | foreach $suf ('NUM', 'DEN') { |
| 350 | printf "#define %-23s %s\n", | 310 | outputval("${pfx}_$suf", shift(@val)); |
| 351 | "${pfx}_$suf", shift(@val); | ||
| 352 | } | 311 | } |
| 353 | } | 312 | } |
| 354 | 313 | ||
| @@ -356,6 +315,23 @@ sub output($@) | |||
| 356 | print "#endif /* KERNEL_TIMECONST_H */\n"; | 315 | print "#endif /* KERNEL_TIMECONST_H */\n"; |
| 357 | } | 316 | } |
| 358 | 317 | ||
| 318 | # Pretty-print Perl values | ||
| 319 | sub perlvals(@) { | ||
| 320 | my $v; | ||
| 321 | my @l = (); | ||
| 322 | |||
| 323 | foreach $v (@_) { | ||
| 324 | if (!defined($v)) { | ||
| 325 | push(@l, 'undef'); | ||
| 326 | } elsif ($v =~ /^0x/) { | ||
| 327 | push(@l, "\'".$v."\'"); | ||
| 328 | } else { | ||
| 329 | push(@l, $v.''); | ||
| 330 | } | ||
| 331 | } | ||
| 332 | return join(',', @l); | ||
| 333 | } | ||
| 334 | |||
| 359 | ($hz) = @ARGV; | 335 | ($hz) = @ARGV; |
| 360 | 336 | ||
| 361 | # Use this to generate the %canned_values structure | 337 | # Use this to generate the %canned_values structure |
| @@ -373,15 +349,15 @@ if ($hz eq '--can') { | |||
| 373 | print "$pf$hz => [\n"; | 349 | print "$pf$hz => [\n"; |
| 374 | while (scalar(@values)) { | 350 | while (scalar(@values)) { |
| 375 | my $bit; | 351 | my $bit; |
| 376 | foreach $bit (32, 64) { | 352 | foreach $bit (32) { |
| 377 | my $m = shift(@values); | 353 | my $m = shift(@values); |
| 378 | my $a = shift(@values); | 354 | my $a = shift(@values); |
| 379 | my $s = shift(@values); | 355 | my $s = shift(@values); |
| 380 | print "\t\t\'",$m,"\',\'",$a,"\',",$s,",\n"; | 356 | print "\t\t", perlvals($m,$a,$s), ",\n"; |
| 381 | } | 357 | } |
| 382 | my $n = shift(@values); | 358 | my $n = shift(@values); |
| 383 | my $d = shift(@values); | 359 | my $d = shift(@values); |
| 384 | print "\t\t",$n,',',$d,",\n"; | 360 | print "\t\t", perlvals($n,$d), ",\n"; |
| 385 | } | 361 | } |
| 386 | print "\t]"; | 362 | print "\t]"; |
| 387 | $pf = ', '; | 363 | $pf = ', '; |
