From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Landley Subject: PATCH [1/3]: Replace kernel/timeconst.pl with kernel/timeconst.sh (v2) Date: Sat, 3 Jan 2009 19:27:07 -0600 Message-ID: <200901031927.07670.rob@landley.net> References: <200901020207.30359.rob@landley.net> <200901031924.15869.rob@landley.net> Mime-Version: 1.0 Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <200901031924.15869.rob@landley.net> Content-Disposition: inline Sender: linux-embedded-owner@vger.kernel.org List-ID: Content-Type: text/plain; charset="us-ascii" To: Embedded Linux mailing list Cc: linux-kernel@vger.kernel.org, Andrew Morton , "H. Peter Anvin" , Sam Ravnborg RnJvbTogUm9iIExhbmRsZXkgPHJvYkBsYW5kbGV5Lm5ldD4KClJlcGxhY2Uga2VybmVsL3RpbWVj b25zdC5wbCB3aXRoIGtlcm5lbC90aW1lY29uc3Quc2guICBUaGUgbmV3IHNoZWxsIHNjcmlwdApp cyBtdWNoIHNpbXBsZXIsIGFib3V0IDEvNCB0aGUgc2l6ZSwgYW5kIHJ1bnMgb24gUmVkIEhhdCA5 IGZyb20gMjAwMy4KCkl0IHJlcXVpcmVzIGEgc2hlbGwgd2hpY2ggY2FuIGRvIDY0IGJpdCBtYXRo LCBzdWNoIGFzIGJhc2gsIGJ1c3lib3ggYXNoLApvciBkYXNoIHJ1bm5pbmcgb24gYSA2NCBiaXQg aG9zdC4KCkNoYW5nZXMgZnJvbSBwcmV2aW91cyB2ZXJzaW9uOgoKUmVkbyBBREozMiBtYXRoIHRv IGF2b2lkIGludGVnZXIgb3ZlcmZsb3cgZm9yIHNtYWxsIEhaIHNpemVzIChzdWNoIGFzIDI0IG9y CjEyMikuICBJbiB0aGUgcGF0aG9sb2dpY2FsIGNhc2UgKEhaPTEpIGJvdGggdmVyc2lvbnMgbm93 IHByb2R1Y2UKVVNFQ19UT19IWl9BREozMiBvZiAweDdmZmZmNzljODQyZmEuICAoU2VlIHNvdXJj ZSBjb21tZW50cyBmb3IgZGV0YWlscy4pCgpBbHNvIGV4cGFuZCB1c2FnZSBtZXNzYWdlLCBhZGQg ZXJyb3IgbWVzc2FnZSB3aGVuIG5vIDY0IGJpdCBtYXRoIGF2YWlsYWJsZSBpbgpzaGVsbCAoYW5k IHN1Z2dlc3Qgc29tZSBzaGVsbHMgdGhhdCBzdXBwb3J0IGl0KSwgYWRkIHdoaXRlc3BhY2UgYXJv dW5kCm9wZXJhdG9ycyBpbiBlcXVhdGlvbnMsIGFkZGVkIHVuZGVyc2NvcmVzIGJlZm9yZSBfX0tF Uk5FTF9USU1FQ09OU1RfSCwgY2hhbmdlCm1ha2VmaWxlIHNvIHNjcmlwdCBpcyByZXNwb25zaWJs ZSBmb3IgY3JlYXRpbmcgb3V0cHV0IGZpbGUsIG1ha2Ugc2NyaXB0IGRlbGV0ZSAKb3V0cHV0IGZp bGUgb24gZXJyb3IsIGNoYW5nZSBzaGViYW5nIHRvICMhL2Jpbi9zaCBhbmQgdGVzdCB3aXRoIGRh c2ggYW5kIGJhc2guCgpTaWduZWQtb2ZmLWJ5OiBSb2IgTGFuZGxleSA8cm9iQGxhbmRsZXkubmV0 PgotLS0KCiBrZXJuZWwvTWFrZWZpbGUgICAgIHwgICAgNCAKIGtlcm5lbC90aW1lY29uc3QucGwg fCAgMzc4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoga2VybmVs L3RpbWVjb25zdC5zaCB8ICAxNDkgKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAx NTEgaW5zZXJ0aW9ucygrKSwgMzgwIGRlbGV0aW9ucygtKQoKLS0tIGxpbnV4LTIuNi4yOC9rZXJu ZWwvdGltZWNvbnN0LnBsCTIwMDgtMTItMjQgMTc6MjY6MzcuMDAwMDAwMDAwIC0wNjAwCisrKyAv ZGV2L251bGwJMjAwOC0xMS0yMSAwNDo0Njo0MS4wMDAwMDAwMDAgLTA2MDAKQEAgLTEsMzc4ICsw LDAgQEAKLSMhL3Vzci9iaW4vcGVybAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIwotIyAgIENvcHlyaWdo dCAyMDA3LTIwMDggclBhdGgsIEluYy4gLSBBbGwgUmlnaHRzIFJlc2VydmVkCi0jCi0jICAgVGhp cyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCwgYW5kIGlzIG1hZGUgYXZhaWxhYmxl IHVuZGVyCi0jICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgb3IgKGF0IHlvdXIKLSMgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uOyBpbmNv cnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KLSMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMKLQot IwotIyBVc2FnZTogdGltZWNvbnN0LnBsIEhaID4gdGltZWNvbnN0LmgKLSMKLQotIyBQcmVjb21w dXRlZCB2YWx1ZXMgZm9yIHN5c3RlbXMgd2l0aG91dCBNYXRoOjpCaWdJbnQKLSMgR2VuZXJhdGVk IGJ5OgotIyB0aW1lY29uc3QucGwgLS1jYW4gMjQgMzIgNDggNjQgMTAwIDEyMiAxMjggMjAwIDI1 MCAyNTYgMzAwIDUxMiAxMDAwIDEwMjQgMTIwMAotJWNhbm5lZF92YWx1ZXMgPSAoCi0JMjQgPT4g WwotCQknMHhhNmFhYWFhYicsJzB4MmFhYWFhYScsMjYsCi0JCTEyNSwzLAotCQknMHhjNDliYTVl NCcsJzB4MWZiZTc2YzhiNCcsMzcsCi0JCTMsMTI1LAotCQknMHhhMmMyYWFhYicsJzB4YWFhYScs MTYsCi0JCTEyNTAwMCwzLAotCQknMHhjOTUzOWI4OScsJzB4N2ZmZmJjZTQyMTdkJyw0NywKLQkJ MywxMjUwMDAsCi0JXSwgMzIgPT4gWwotCQknMHhmYTAwMDAwMCcsJzB4NjAwMDAwMCcsMjcsCi0J CTEyNSw0LAotCQknMHg4MzEyNmU5OCcsJzB4ZmRmM2I2NDVhJywzNiwKLQkJNCwxMjUsCi0JCScw eGY0MjQwMDAwJywnMHgwJywxNywKLQkJMzEyNTAsMSwKLQkJJzB4ODYzN2JkMDYnLCcweDNmZmY3 OWM4NDJmYScsNDYsCi0JCTEsMzEyNTAsCi0JXSwgNDggPT4gWwotCQknMHhhNmFhYWFhYicsJzB4 NmFhYWFhYScsMjcsCi0JCTEyNSw2LAotCQknMHhjNDliYTVlNCcsJzB4ZmRmM2I2NDVhJywzNiwK LQkJNiwxMjUsCi0JCScweGEyYzJhYWFiJywnMHgxNTU1NScsMTcsCi0JCTYyNTAwLDMsCi0JCScw eGM5NTM5Yjg5JywnMHgzZmZmYmNlNDIxN2QnLDQ2LAotCQkzLDYyNTAwLAotCV0sIDY0ID0+IFsK LQkJJzB4ZmEwMDAwMDAnLCcweGUwMDAwMDAnLDI4LAotCQkxMjUsOCwKLQkJJzB4ODMxMjZlOTgn LCcweDdlZjlkYjIyZCcsMzUsCi0JCTgsMTI1LAotCQknMHhmNDI0MDAwMCcsJzB4MCcsMTgsCi0J CTE1NjI1LDEsCi0JCScweDg2MzdiZDA2JywnMHgxZmZmNzljODQyZmEnLDQ1LAotCQkxLDE1NjI1 LAotCV0sIDEwMCA9PiBbCi0JCScweGEwMDAwMDAwJywnMHgwJywyOCwKLQkJMTAsMSwKLQkJJzB4 Y2NjY2NjY2QnLCcweDczMzMzMzMzMycsMzUsCi0JCTEsMTAsCi0JCScweDljNDAwMDAwJywnMHgw JywxOCwKLQkJMTAwMDAsMSwKLQkJJzB4ZDFiNzE3NTknLCcweDFmZmYyZTQ4ZThhNycsNDUsCi0J CTEsMTAwMDAsCi0JXSwgMTIyID0+IFsKLQkJJzB4ODMyNWM1M2YnLCcweGZiY2RhM2EnLDI4LAot CQk1MDAsNjEsCi0JCScweGY5ZGIyMmQxJywnMHg3ZmJlNzZjOGInLDM1LAotCQk2MSw1MDAsCi0J CScweDgwMTJlMmEwJywnMHgzZWYzNicsMTgsCi0JCTUwMDAwMCw2MSwKLQkJJzB4ZmZkYTQwNTMn LCcweDFmZmZmYmNlNDIxNycsNDUsCi0JCTYxLDUwMDAwMCwKLQldLCAxMjggPT4gWwotCQknMHhm YTAwMDAwMCcsJzB4MWUwMDAwMDAnLDI5LAotCQkxMjUsMTYsCi0JCScweDgzMTI2ZTk4JywnMHgz ZjdjZWQ5MTYnLDM0LAotCQkxNiwxMjUsCi0JCScweGY0MjQwMDAwJywnMHg0MDAwMCcsMTksCi0J CTE1NjI1LDIsCi0JCScweDg2MzdiZDA2JywnMHhmZmZiY2U0MjE3ZCcsNDQsCi0JCTIsMTU2MjUs Ci0JXSwgMjAwID0+IFsKLQkJJzB4YTAwMDAwMDAnLCcweDAnLDI5LAotCQk1LDEsCi0JCScweGNj Y2NjY2NkJywnMHgzMzMzMzMzMzMnLDM0LAotCQkxLDUsCi0JCScweDljNDAwMDAwJywnMHgwJywx OSwKLQkJNTAwMCwxLAotCQknMHhkMWI3MTc1OScsJzB4ZmZmMmU0OGU4YTcnLDQ0LAotCQkxLDUw MDAsCi0JXSwgMjUwID0+IFsKLQkJJzB4ODAwMDAwMDAnLCcweDAnLDI5LAotCQk0LDEsCi0JCScw eDgwMDAwMDAwJywnMHgxODAwMDAwMDAnLDMzLAotCQkxLDQsCi0JCScweGZhMDAwMDAwJywnMHgw JywyMCwKLQkJNDAwMCwxLAotCQknMHg4MzEyNmU5OCcsJzB4N2ZmN2NlZDkxNjgnLDQzLAotCQkx LDQwMDAsCi0JXSwgMjU2ID0+IFsKLQkJJzB4ZmEwMDAwMDAnLCcweDNlMDAwMDAwJywzMCwKLQkJ MTI1LDMyLAotCQknMHg4MzEyNmU5OCcsJzB4MWZiZTc2YzhiJywzMywKLQkJMzIsMTI1LAotCQkn MHhmNDI0MDAwMCcsJzB4YzAwMDAnLDIwLAotCQkxNTYyNSw0LAotCQknMHg4NjM3YmQwNicsJzB4 N2ZmZGU3MjEwYmUnLDQzLAotCQk0LDE1NjI1LAotCV0sIDMwMCA9PiBbCi0JCScweGQ1NTU1NTU2 JywnMHgyYWFhYWFhYScsMzAsCi0JCTEwLDMsCi0JCScweDk5OTk5OTlhJywnMHgxY2NjY2NjY2Mn LDMzLAotCQkzLDEwLAotCQknMHhkMDU1NTU1NicsJzB4YWFhYWEnLDIwLAotCQkxMDAwMCwzLAot CQknMHg5ZDQ5NTE4MycsJzB4N2ZmY2I5MjNhMjknLDQzLAotCQkzLDEwMDAwLAotCV0sIDUxMiA9 PiBbCi0JCScweGZhMDAwMDAwJywnMHg3ZTAwMDAwMCcsMzEsCi0JCTEyNSw2NCwKLQkJJzB4ODMx MjZlOTgnLCcweGZkZjNiNjQ1JywzMiwKLQkJNjQsMTI1LAotCQknMHhmNDI0MDAwMCcsJzB4MWMw MDAwJywyMSwKLQkJMTU2MjUsOCwKLQkJJzB4ODYzN2JkMDYnLCcweDNmZmVmMzkwODVmJyw0MiwK LQkJOCwxNTYyNSwKLQldLCAxMDAwID0+IFsKLQkJJzB4ODAwMDAwMDAnLCcweDAnLDMxLAotCQkx LDEsCi0JCScweDgwMDAwMDAwJywnMHgwJywzMSwKLQkJMSwxLAotCQknMHhmYTAwMDAwMCcsJzB4 MCcsMjIsCi0JCTEwMDAsMSwKLQkJJzB4ODMxMjZlOTgnLCcweDFmZjdjZWQ5MTY4Jyw0MSwKLQkJ MSwxMDAwLAotCV0sIDEwMjQgPT4gWwotCQknMHhmYTAwMDAwMCcsJzB4ZmUwMDAwMDAnLDMyLAot CQkxMjUsMTI4LAotCQknMHg4MzEyNmU5OCcsJzB4N2VmOWRiMjInLDMxLAotCQkxMjgsMTI1LAot CQknMHhmNDI0MDAwMCcsJzB4M2MwMDAwJywyMiwKLQkJMTU2MjUsMTYsCi0JCScweDg2MzdiZDA2 JywnMHgxZmZmNzljODQyZicsNDEsCi0JCTE2LDE1NjI1LAotCV0sIDEyMDAgPT4gWwotCQknMHhk NTU1NTU1NicsJzB4ZDU1NTU1NTUnLDMyLAotCQk1LDYsCi0JCScweDk5OTk5OTlhJywnMHg2NjY2 NjY2NicsMzEsCi0JCTYsNSwKLQkJJzB4ZDA1NTU1NTYnLCcweDJhYWFhYScsMjIsCi0JCTI1MDAs MywKLQkJJzB4OWQ0OTUxODMnLCcweDFmZmNiOTIzYTI5Jyw0MSwKLQkJMywyNTAwLAotCV0KLSk7 Ci0KLSRoYXNfYmlnaW50ID0gZXZhbCAndXNlIE1hdGg6OkJpZ0ludCBxdyhiZ2NkKTsgMTsnOwot Ci1zdWIgYmludCgkKQotewotCW15KCR4KSA9IEBfOwotCXJldHVybiBNYXRoOjpCaWdJbnQtPm5l dygkeCk7Ci19Ci0KLSMKLSMgQ29uc3RhbnRzIGZvciBkaXZpc2lvbiBieSByZWNpcHJvY2FsIG11 bHRpcGxpY2F0aW9uLgotIyAoYml0cywgbnVtZXJhdG9yLCBkZW5vbWluYXRvcikKLSMKLXN1YiBm bXVsKCQkJCkKLXsKLQlteSAoJGIsJG4sJGQpID0gQF87Ci0KLQkkbiA9IGJpbnQoJG4pOwotCSRk ID0gYmludCgkZCk7Ci0KLQlyZXR1cm4gc2NhbGFyICgoJG4gPDwgJGIpKyRkLWJpbnQoMSkpLyRk OwotfQotCi1zdWIgZmFkaigkJCQpCi17Ci0JbXkoJGIsJG4sJGQpID0gQF87Ci0KLQkkbiA9IGJp bnQoJG4pOwotCSRkID0gYmludCgkZCk7Ci0KLQkkZCA9ICRkL2JnY2QoJG4sICRkKTsKLQlyZXR1 cm4gc2NhbGFyICgoJGQtYmludCgxKSkgPDwgJGIpLyRkOwotfQotCi1zdWIgZm11bHMoJCQkKSB7 Ci0JbXkoJGIsJG4sJGQpID0gQF87Ci0JbXkoJHMsJG0pOwotCW15KCR0aHJlcykgPSBiaW50KDEp IDw8ICgkYi0xKTsKLQotCSRuID0gYmludCgkbik7Ci0JJGQgPSBiaW50KCRkKTsKLQotCWZvciAo JHMgPSAwOyAxOyAkcysrKSB7Ci0JCSRtID0gZm11bCgkcywkbiwkZCk7Ci0JCXJldHVybiAkcyBp ZiAoJG0gPj0gJHRocmVzKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLSMgR2VuZXJhdGUgYSBoZXgg dmFsdWUgaWYgdGhlIHJlc3VsdCBmaXRzIGluIDY0IGJpdHM7Ci0jIG90aGVyd2lzZSBza2lwLgot c3ViIGJpZ251bV9oZXgoJCkgewotCW15KCR4KSA9IEBfOwotCW15ICRzID0gJHgtPmFzX2hleCgp OwotCi0JcmV0dXJuIChsZW5ndGgoJHMpID4gMTgpID8gdW5kZWYgOiAkczsKLX0KLQotIyBQcm92 aWRlcyBtdWwsIGFkaiwgYW5kIHNociBmYWN0b3JzIGZvciBhIHNwZWNpZmljCi0jIChiaXQsIHRp bWUsIGh6KSBjb21iaW5hdGlvbgotc3ViIG11bGFkaigkJCQpIHsKLQlteSgkYiwgJHQsICRoeikg PSBAXzsKLQlteSAkcyA9IGZtdWxzKCRiLCAkdCwgJGh6KTsKLQlteSAkbSA9IGZtdWwoJHMsICR0 LCAkaHopOwotCW15ICRhID0gZmFkaigkcywgJHQsICRoeik7Ci0JcmV0dXJuIChiaWdudW1faGV4 KCRtKSwgYmlnbnVtX2hleCgkYSksICRzKTsKLX0KLQotIyBQcm92aWRlcyBudW1lcmF0b3IsIGRl bm9taW5hdG9yIHZhbHVlcwotc3ViIG51bWRlbigkJCkgewotCW15KCRuLCAkZCkgPSBAXzsKLQlt eSAkZyA9IGJnY2QoJG4sICRkKTsKLQlyZXR1cm4gKCRuLyRnLCAkZC8kZyk7Ci19Ci0KLSMgQWxs IHZhbHVlcyBmb3IgYSBzcGVjaWZpYyAodGltZSwgaHopIGNvbWJvCi1zdWIgY29udmVyc2lvbnMo JCQpIHsKLQlteSAoJHQsICRoeikgPSBAXzsKLQlteSBAdmFsID0gKCk7Ci0KLQkjIEhaX1RPX3h4 Ci0JcHVzaChAdmFsLCBtdWxhZGooMzIsICR0LCAkaHopKTsKLQlwdXNoKEB2YWwsIG51bWRlbigk dCwgJGh6KSk7Ci0KLQkjIHh4X1RPX0haCi0JcHVzaChAdmFsLCBtdWxhZGooMzIsICRoeiwgJHQp KTsKLQlwdXNoKEB2YWwsIG51bWRlbigkaHosICR0KSk7Ci0KLQlyZXR1cm4gQHZhbDsKLX0KLQot c3ViIGNvbXB1dGVfdmFsdWVzKCQpIHsKLQlteSgkaHopID0gQF87Ci0JbXkgQHZhbCA9ICgpOwot CW15ICRzLCAkbSwgJGEsICRnOwotCi0JaWYgKCEkaGFzX2JpZ2ludCkgewotCQlkaWUgIiQwOiBI WiA9PSAkaHogbm90IGNhbm5lZCBhbmQgIi4KLQkJICAgICJNYXRoOjpCaWdJbnQgbm90IGF2YWls YWJsZVxuIjsKLQl9Ci0KLQkjIE1TRUMgY29udmVyc2lvbnMKLQlwdXNoKEB2YWwsIGNvbnZlcnNp b25zKDEwMDAsICRoeikpOwotCi0JIyBVU0VDIGNvbnZlcnNpb25zCi0JcHVzaChAdmFsLCBjb252 ZXJzaW9ucygxMDAwMDAwLCAkaHopKTsKLQotCXJldHVybiBAdmFsOwotfQotCi1zdWIgb3V0cHV0 dmFsKCQkKQotewotCW15KCRuYW1lLCAkdmFsKSA9IEBfOwotCW15ICRjc3VmOwotCi0JaWYgKGRl ZmluZWQoJHZhbCkpIHsKLQkgICAgaWYgKCRuYW1lICF+IC9TSFIvKSB7Ci0JCSR2YWwgPSAiVTY0 X0MoJHZhbCkiOwotCSAgICB9Ci0JICAgIHByaW50ZiAiI2RlZmluZSAlLTIzcyAlc1xuIiwgJG5h bWUuJGNzdWYsICR2YWwuJGNzdWY7Ci0JfQotfQotCi1zdWIgb3V0cHV0KCRAKQotewotCW15KCRo eiwgQHZhbCkgPSBAXzsKLQlteSAkcGZ4LCAkYml0LCAkc3VmLCAkcywgJG0sICRhOwotCi0JcHJp bnQgIi8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGtlcm5lbC90aW1lY29uc3QucGwgKi9c biI7Ci0JcHJpbnQgIi8qIENvbnZlcnNpb24gY29uc3RhbnRzIGZvciBIWiA9PSAkaHogKi9cbiI7 Ci0JcHJpbnQgIlxuIjsKLQlwcmludCAiI2lmbmRlZiBLRVJORUxfVElNRUNPTlNUX0hcbiI7Ci0J cHJpbnQgIiNkZWZpbmUgS0VSTkVMX1RJTUVDT05TVF9IXG4iOwotCXByaW50ICJcbiI7Ci0KLQlw cmludCAiI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+XG4iOwotCXByaW50ICIjaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD5cbiI7Ci0KLQlwcmludCAiXG4iOwotCXByaW50ICIjaWYgSFogIT0gJGh6XG4i OwotCXByaW50ICIjZXJyb3IgXCJrZXJuZWwvdGltZWNvbnN0LmggaGFzIHRoZSB3cm9uZyBIWiB2 YWx1ZSFcIlxuIjsKLQlwcmludCAiI2VuZGlmXG4iOwotCXByaW50ICJcbiI7Ci0KLQlmb3JlYWNo ICRwZnggKCdIWl9UT19NU0VDJywnTVNFQ19UT19IWicsCi0JCSAgICAgICdIWl9UT19VU0VDJywn VVNFQ19UT19IWicpIHsKLQkJZm9yZWFjaCAkYml0ICgzMikgewotCQkJZm9yZWFjaCAkc3VmICgn TVVMJywgJ0FESicsICdTSFInKSB7Ci0JCQkJb3V0cHV0dmFsKCIke3BmeH1fJHN1ZiRiaXQiLCBz aGlmdChAdmFsKSk7Ci0JCQl9Ci0JCX0KLQkJZm9yZWFjaCAkc3VmICgnTlVNJywgJ0RFTicpIHsK LQkJCW91dHB1dHZhbCgiJHtwZnh9XyRzdWYiLCBzaGlmdChAdmFsKSk7Ci0JCX0KLQl9Ci0KLQlw cmludCAiXG4iOwotCXByaW50ICIjZW5kaWYgLyogS0VSTkVMX1RJTUVDT05TVF9IICovXG4iOwot fQotCi0jIFByZXR0eS1wcmludCBQZXJsIHZhbHVlcwotc3ViIHBlcmx2YWxzKEApIHsKLQlteSAk djsKLQlteSBAbCA9ICgpOwotCi0JZm9yZWFjaCAkdiAoQF8pIHsKLQkJaWYgKCFkZWZpbmVkKCR2 KSkgewotCQkJcHVzaChAbCwgJ3VuZGVmJyk7Ci0JCX0gZWxzaWYgKCR2ID1+IC9eMHgvKSB7Ci0J CQlwdXNoKEBsLCAiXCciLiR2LiJcJyIpOwotCQl9IGVsc2UgewotCQkJcHVzaChAbCwgJHYuJycp OwotCQl9Ci0JfQotCXJldHVybiBqb2luKCcsJywgQGwpOwotfQotCi0oJGh6KSA9IEBBUkdWOwot Ci0jIFVzZSB0aGlzIHRvIGdlbmVyYXRlIHRoZSAlY2FubmVkX3ZhbHVlcyBzdHJ1Y3R1cmUKLWlm ICgkaHogZXEgJy0tY2FuJykgewotCXNoaWZ0KEBBUkdWKTsKLQlAaHpsaXN0ID0gc29ydCB7JGEg PD0+ICRifSAoQEFSR1YpOwotCi0JcHJpbnQgIiMgUHJlY29tcHV0ZWQgdmFsdWVzIGZvciBzeXN0 ZW1zIHdpdGhvdXQgTWF0aDo6QmlnSW50XG4iOwotCXByaW50ICIjIEdlbmVyYXRlZCBieTpcbiI7 Ci0JcHJpbnQgIiMgdGltZWNvbnN0LnBsIC0tY2FuICIsIGpvaW4oJyAnLCBAaHpsaXN0KSwgIlxu IjsKLQlwcmludCAiXCVjYW5uZWRfdmFsdWVzID0gKFxuIjsKLQlteSAkcGYgPSAiXHQiOwotCWZv cmVhY2ggJGh6IChAaHpsaXN0KSB7Ci0JCW15IEB2YWx1ZXMgPSBjb21wdXRlX3ZhbHVlcygkaHop OwotCQlwcmludCAiJHBmJGh6ID0+IFtcbiI7Ci0JCXdoaWxlIChzY2FsYXIoQHZhbHVlcykpIHsK LQkJCW15ICRiaXQ7Ci0JCQlmb3JlYWNoICRiaXQgKDMyKSB7Ci0JCQkJbXkgJG0gPSBzaGlmdChA dmFsdWVzKTsKLQkJCQlteSAkYSA9IHNoaWZ0KEB2YWx1ZXMpOwotCQkJCW15ICRzID0gc2hpZnQo QHZhbHVlcyk7Ci0JCQkJcHJpbnQgIlx0XHQiLCBwZXJsdmFscygkbSwkYSwkcyksICIsXG4iOwot CQkJfQotCQkJbXkgJG4gPSBzaGlmdChAdmFsdWVzKTsKLQkJCW15ICRkID0gc2hpZnQoQHZhbHVl cyk7Ci0JCQlwcmludCAiXHRcdCIsIHBlcmx2YWxzKCRuLCRkKSwgIixcbiI7Ci0JCX0KLQkJcHJp bnQgIlx0XSI7Ci0JCSRwZiA9ICcsICc7Ci0JfQotCXByaW50ICJcbik7XG4iOwotfSBlbHNlIHsK LQkkaHogKz0gMDsJCQkjIEZvcmNlIHRvIG51bWJlcgotCWlmICgkaHogPCAxKSB7Ci0JCWRpZSAi VXNhZ2U6ICQwIEhaXG4iOwotCX0KLQotCUB2YWwgPSBAeyRjYW5uZWRfdmFsdWVzeyRoen19Owot CWlmICghZGVmaW5lZChAdmFsKSkgewotCQlAdmFsID0gY29tcHV0ZV92YWx1ZXMoJGh6KTsKLQl9 Ci0Jb3V0cHV0KCRoeiwgQHZhbCk7Ci19Ci1leGl0IDA7Ci0tLSAvZGV2L251bGwJMjAwOC0xMS0y MSAwNDo0Njo0MS4wMDAwMDAwMDAgLTA2MDAKKysrIGxpbnV4LTIuNi4yOC1uZXcva2VybmVsL3Rp bWVjb25zdC5zaAkyMDA5LTAxLTAzIDE1OjI0OjAxLjAwMDAwMDAwMCAtMDYwMApAQCAtMCwwICsx LDE0NyBAQAorIyEvYmluL3NoCisKK2lmIFsgJCMgLW5lIDIgXQordGhlbgorCWVjaG8gIlVzYWdl OiB0aW1lY29uc3Quc2ggSFogRklMRU5BTUUiCisJZWNobworCWVjaG8gIkdlbmVyYXRlIGEgaGVh ZGVyIGZpbGUgd2l0aCBjb25zdGFudHMgZm9yIGNvdmVydGluZyBiZXR3ZWVuIgorCWVjaG8gImRl Y2ltYWwgSFogdGltZXIgdGlja3MgYW5kIG1pbGlzZWNvbmQgb3IgbWljcm9zZWNvbmQgZGVsYXlz LiIKKwllY2hvCisJZXhpdCAxCitmaQorCitIWj0kMQorc2hpZnQKK0ZJTEVOQU1FPSQxCisKKyMg U2FuaXR5IHRlc3Q6IGV2ZW4gdGhlIHNoZWxsIGluIFJlZCBIYXQgOSAoY2lyY2EgMjAwMykgc3Vw cG9ydGVkIDY0IGJpdCBtYXRoLgorCitpZiBbICQoKDEgPDwgMzIpKSAtbHQgMCBdCit0aGVuCisJ ZWNobyAidGltZWNvbnN0LnNoIG5lZWRzIGEgc2hlbGwgd2l0aCA2NCBiaXQgbWF0aCwgc3VjaCBh cyBiYXNoLCIKKwllY2hvICJidXN5Ym94IGFzaCwgb3IgZGFzaCBydW5uaW5nIG9uIGEgNjQgYml0 IGhvc3QuIgorCWV4aXQgMQorZmkKKworIyBJZiB0aGlzIHNjcmlwdCBleGl0cyBmb3IgYW55IHJl YXNvbiBiZWZvcmUgdGhpcyB0cmFwIGlzIHJlbW92ZWQsCisjIGRlbGV0ZSB0aGUgb3V0cHV0IGZp bGUgc28gYSBwYXJ0aWFsIGZpbGUgd29uJ3QgY29uZnVzZSB0aGUgYnVpbGQuCisKK3RyYXAgInJt ICRGSUxFTkFNRSIgRVhJVAorCisjIE91dHB1dCBzdGFydCBvZiBoZWFkZXIgZmlsZQorCitjYXQg PiAkRklMRU5BTUUgPDwgRU9GIHx8IGV4aXQgMQorLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQg Ynkga2VybmVsL3RpbWVjb25zdC5zaCAqLworLyogQ29udmVyc2lvbiBjb25zdGFudHMgZm9yIEha ID09ICRIWiAqLworCisjaWZuZGVmIF9fS0VSTkVMX1RJTUVDT05TVF9ICisjZGVmaW5lIF9fS0VS TkVMX1RJTUVDT05TVF9ICisKKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgorI2luY2x1ZGUgPGxp bnV4L3R5cGVzLmg+CisKKyNpZiBIWiAhPSAkSFoKKyNlcnJvciAia2VybmVsL3RpbWVjb25zdC5o IGhhcyB0aGUgd3JvbmcgSFogdmFsdWUhIgorI2VuZGlmCisKK0VPRgorCisjIEZvciBib3RoIE1p bGxpc2Vjb25kcyBhbmQgTWljcm9zZWNvbmRzCisKK2ZvciBpIGluICJNU0VDIDEwMDAiICJVU0VD IDEwMDAwMDAiCitkbworCU5BTUU9JChlY2hvICRpIHwgY3V0IC1kICcgJyAtZiAxKQorCVBFUklP RD0kKGVjaG8gJGkgfCBjdXQgLWQgJyAnIC1mIDIpCisKKwkjIEZpbmQgZ3JlYXRlc3QgY29tbW9u IGRlbm9taW5hdG9yICh1c2luZyBFdWNsaWQncyBhbGdvcml0aG0pCisKKwlBPSRIWgorCUI9JFBF UklPRAorCisJd2hpbGUgWyAkQiAtbmUgMCBdCisJZG8KKwkJQz0kKCggJEEgJSAkQiApKQorCQlB PSRCCisJCUI9JEMKKwlkb25lCisKKwlHQ0Q9JEEKKworCSMgRG8gdGhpcyBmb3IgZWFjaCBkaXJl Y3Rpb24gKEhaX1RPX1BFUklPRCBhbmQgUEVSSU9EX1RPX0haKQorCisJZm9yIERJUkVDVElPTiBp biAwIDEKKwlkbworCQlpZiBbICRESVJFQ1RJT04gLWVxIDAgXQorCQl0aGVuCisJCQlDT05WRVJU PSJIWl9UT18ke05BTUV9IgorCQkJRlJPTT0kSFoKKwkJCVRPPSRQRVJJT0QKKwkJZWxzZQorCQkJ Q09OVkVSVD0iJHtOQU1FfV9UT19IWiIKKwkJCUZST009JFBFUklPRAorCQkJVE89JEhaCisJCWZp CisKKwkJIyBDYWxjdWxhdGUgMzIgc2lnbmlmaWNhbnQgYml0cyBvZiBNVUwzMiBkYXRhLgorCisJ CVNISUZUPTAKKwkJd2hpbGUgdHJ1ZQorCQlkbworCQkJIyBUaGlzIGNhbid0IG92ZXJmbG93IDY0 IGJpdCBtYXRoLiAgUGF0aG9sb2dpY2FsIGNhc2UKKwkJCSMgKFRPPTEsIEZST009MTAwMDAwMCkg dXNlcyBhcm91bmQgMzIrMjA9NTIgYml0cy4KKworCQkJTVVMMzI9JCgoICggKCAkVE8gPDwgJFNI SUZUICkgKyAkRlJPTSAtIDEgKSAvICRGUk9NICkpCisKKwkJCSMgS2VlcCBpbmNyZWFzaW5nICRT SElGVCB1bnRpbCB3ZSd2ZSBnb3QgMzIgYml0cy4KKworCQkJWyAkTVVMMzIgLWd0ICQoKCAxIDw8 IDMxICkpIF0gJiYgYnJlYWsKKwkJCVNISUZUPSQoKCAkU0hJRlQgKyAxICkpCisJCWRvbmUKKwkJ TVVMMzI9JCggcHJpbnRmICV4ICRNVUwzMiApCisKKwkJIyBBREozMiBpcyBqdXN0ICgoKEZST00v R0NEKS0xKTw8U0hJRlQpLyhGUk9NL0dDRCkgYnV0IHRoaXMKKwkJIyBjYW4gb3ZlcmZsb3cgNjQg Yml0IG1hdGggKGV4YW1wbGVzLCBIWj0yNCBvciBIWj0xMjIpLgorCQkjIFBhdGhvbG9naWNhbCBj YXNlIGNvdWxkIHVzZSAzMisyMCsyMD03MiBiaXRzLiAgKEFuZCB0aGlzIGlzCisJCSMgdGhlIHBh dGhvbG9naWNhbCBjYXNlIGJlY2F1c2UgYSBsYXJnZXIgJEhaIHJlc3VsdHMgaW4gYQorCQkjIHNt YWxsZXIgJFNISUZULCBzbyBldmVuIGluc2FuZSBIWj5VU0VDIGNhc2VzIHNob3VsZCBiZSBvay4p CisKKwkJIyBUbyBnZXQgYXJvdW5kIHRoaXMsIHdlIGNob3AgdGhlIGJvdHRvbSAzMiBiaXRzIG9m ZiB0aGUKKwkJIyBjYWxjdWxhdGlvbiBhbmQgdGhlbiByZWFzc2VtYmxlIGl0IHRvIGF2b2lkIG92 ZXJmbG93OgorCQkjIDMyKzY0PTk2LCB3aGljaCBpcyA+IDcyLgorCisJCUFESjMyPSQoKCAkRlJP TSAvICRHQ0QgKSkKKwkJaWYgWyAkU0hJRlQgLWd0IDMyIF0KKwkJdGhlbgorCQkJVVBQRVI9JCgo ICggJEFESjMyIC0gMSApIDw8ICggJFNISUZUIC0gMzIgKSApKQorCQkJTE9XRVI9JCgoICggJFVQ UEVSICUgJEFESjMyICkgPDwgMzIgKSkKKwkJCUFESjMyPSQoKCAoICggJFVQUEVSIC8gJEFESjMy ICkgPDwgMzIgKSArICggJExPV0VSIC8gJEFESjMyICkpKQorCQllbHNlCisJCQlBREozMj0kKCgg KCAoICRBREozMiAtIDEgKSA8PCAkU0hJRlQpIC8gJEFESjMyICkpCisJCWZpCisJCUFESjMyPSQo IHByaW50ZiAleCAkQURKMzIgKQorCisJCU5VTT0kKCggJFRPIC8gJEdDRCApKQorCQlERU49JCgo ICRGUk9NIC8gJEdDRCApKQorCisJCSMgT3V0cHV0IG5leHQgY2h1bmsgb2YgaGVhZGVyIGRhdGEg dG8gZmlsZQorCisJCSgKKwkJCWVjaG8gIiNkZWZpbmUgJHtDT05WRVJUfV9NVUwzMglVNjRfQygw eCRNVUwzMikiICYmCisJCQllY2hvICIjZGVmaW5lICR7Q09OVkVSVH1fQURKMzIJVTY0X0MoMHgk QURKMzIpIiAmJgorCQkJZWNobyAiI2RlZmluZSAke0NPTlZFUlR9X1NIUjMyCSRTSElGVCIgJiYK KwkJCWVjaG8gIiNkZWZpbmUgJHtDT05WRVJUfV9OVU0JCVU2NF9DKCROVU0pIiAmJgorCQkJZWNo byAiI2RlZmluZSAke0NPTlZFUlR9X0RFTgkJVTY0X0MoJERFTikiCisJCSkgPj4gJEZJTEVOQU1F IHx8IGV4aXQgMQorCWRvbmUKK2RvbmUKKworKAorCWVjaG8KKwllY2hvICIjZW5kaWYgLyogX19L RVJORUxfVElNRUNIT05TVF9IICovIgorKSA+PiAkRklMRU5BTUUgfHwgZXhpdCAxCisKKyMgRG9u J3Qgcm0gJEZJTEVOQU1FIG9uIGV4aXQgYW55bW9yZS4KKwordHJhcCAiIiBFWElUCisKK2V4aXQg MAotLS0gbGludXgtMi42LjI4L2tlcm5lbC9NYWtlZmlsZQkyMDA4LTEyLTI0IDE3OjI2OjM3LjAw MDAwMDAwMCAtMDYwMAorKysgbGludXgtMi42LjI4LW5ldy9rZXJuZWwvTWFrZWZpbGUJMjAwOS0w MS0wMyAwMDo0MDoyMS4wMDAwMDAwMDAgLTA2MDAKQEAgLTExNiw3ICsxMTYsNyBAQAogJChvYmop L3RpbWUubzogJChvYmopL3RpbWVjb25zdC5oCiAKIHF1aWV0X2NtZF90aW1lY29uc3QgID0gVElN RUMgICAkQAotICAgICAgY21kX3RpbWVjb25zdCAgPSAkKFBFUkwpICQ8ICQoQ09ORklHX0haKSA+ ICRACisgICAgICBjbWRfdGltZWNvbnN0ICA9ICQoQ09ORklHX1NIRUxMKSAkPCAkKENPTkZJR19I WikgJEAKIHRhcmdldHMgKz0gdGltZWNvbnN0LmgKLSQob2JqKS90aW1lY29uc3QuaDogJChzcmMp L3RpbWVjb25zdC5wbCBGT1JDRQorJChvYmopL3RpbWVjb25zdC5oOiAkKHNyYykvdGltZWNvbnN0 LnNoIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdGltZWNvbnN0KQoACg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753093AbZADB1Y (ORCPT ); Sat, 3 Jan 2009 20:27:24 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1750863AbZADB1N (ORCPT ); Sat, 3 Jan 2009 20:27:13 -0500 Received: from static-71-162-243-5.phlapa.fios.verizon.net ([71.162.243.5]:41667 "EHLO grelber.thyrsus.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750793AbZADB1L (ORCPT ); Sat, 3 Jan 2009 20:27:11 -0500 From: Rob Landley Organization: Boundaries Unlimited To: Embedded Linux mailing list Subject: PATCH [1/3]: Replace kernel/timeconst.pl with kernel/timeconst.sh (v2) Date: Sat, 3 Jan 2009 19:27:07 -0600 User-Agent: KMail/1.10.1 (Linux/2.6.27-7-generic; KDE/4.1.2; x86_64; ; ) Cc: linux-kernel@vger.kernel.org, Andrew Morton , "H. Peter Anvin" , Sam Ravnborg References: <200901020207.30359.rob@landley.net> <200901031924.15869.rob@landley.net> In-Reply-To: <200901031924.15869.rob@landley.net> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Disposition: inline Message-Id: <200901031927.07670.rob@landley.net> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by alpha id n041RSwM029242 From: Rob Landley Replace kernel/timeconst.pl with kernel/timeconst.sh. The new shell scriptis much simpler, about 1/4 the size, and runs on Red Hat 9 from 2003. It requires a shell which can do 64 bit math, such as bash, busybox ash,or dash running on a 64 bit host. Changes from previous version: Redo ADJ32 math to avoid integer overflow for small HZ sizes (such as 24 or122). In the pathological case (HZ=1) both versions now produceUSEC_TO_HZ_ADJ32 of 0x7ffff79c842fa. (See source comments for details.) Also expand usage message, add error message when no 64 bit math available inshell (and suggest some shells that support it), add whitespace aroundoperators in equations, added underscores before __KERNEL_TIMECONST_H, changemakefile so script is responsible for creating output file, make script delete output file on error, change shebang to #!/bin/sh and test with dash and bash. Signed-off-by: Rob Landley --- kernel/Makefile | 4 kernel/timeconst.pl | 378 ------------------------------------------ kernel/timeconst.sh | 149 ++++++++++++++++ 3 files changed, 151 insertions(+), 380 deletions(-) --- linux-2.6.28/kernel/timeconst.pl 2008-12-24 17:26:37.000000000 -0600+++ /dev/null 2008-11-21 04:46:41.000000000 -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-#--# 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;';--sub bint($)-{- my($x) = @_;- return Math::BigInt->new($x);-}--#-# 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;-}--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);- }- 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();-- return (length($s) > 18) ? undef : $s;-}--# 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);-}--# 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));-- # xx_TO_HZ- push(@val, muladj(32, $hz, $t));- push(@val, numden($hz, $t));-- return @val;-}--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";- }-- # MSEC conversions- push(@val, conversions(1000, $hz));-- # USEC conversions- push(@val, conversions(1000000, $hz));-- return @val;-}--sub outputval($$)-{- my($name, $val) = @_;- my $csuf;-- if (defined($val)) {- if ($name !~ /SHR/) {- $val = "U64_C($val)";- }- printf "#define %-23s %s\n", $name.$csuf, $val.$csuf;- }-}--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";-- 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);-- 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;--- /dev/null 2008-11-21 04:46:41.000000000 -0600+++ linux-2.6.28-new/kernel/timeconst.sh 2009-01-03 15:24:01.000000000 -0600@@ -0,0 +1,147 @@+#!/bin/sh++if [ $# -ne 2 ]+then+ echo "Usage: timeconst.sh HZ FILENAME"+ echo+ echo "Generate a header file with constants for coverting between"+ echo "decimal HZ timer ticks and milisecond or microsecond delays."+ echo+ exit 1+fi++HZ=$1+shift+FILENAME=$1++# Sanity test: even the shell in Red Hat 9 (circa 2003) supported 64 bit math.++if [ $((1 << 32)) -lt 0 ]+then+ echo "timeconst.sh needs a shell with 64 bit math, such as bash,"+ echo "busybox ash, or dash running on a 64 bit host."+ exit 1+fi++# If this script exits for any reason before this trap is removed,+# delete the output file so a partial file won't confuse the build.++trap "rm $FILENAME" EXIT++# Output start of header file++cat > $FILENAME << EOF || exit 1+/* Automatically generated by kernel/timeconst.sh */+/* Conversion constants for HZ == $HZ */++#ifndef __KERNEL_TIMECONST_H+#define __KERNEL_TIMECONST_H++#include +#include ++#if HZ != $HZ+#error "kernel/timeconst.h has the wrong HZ value!"+#endif++EOF++# For both Milliseconds and Microseconds++for i in "MSEC 1000" "USEC 1000000"+do+ NAME=$(echo $i | cut -d ' ' -f 1)+ PERIOD=$(echo $i | cut -d ' ' -f 2)++ # Find greatest common denominator (using Euclid's algorithm)++ A=$HZ+ B=$PERIOD++ while [ $B -ne 0 ]+ do+ C=$(( $A % $B ))+ A=$B+ B=$C+ done++ GCD=$A++ # Do this for each direction (HZ_TO_PERIOD and PERIOD_TO_HZ)++ for DIRECTION in 0 1+ do+ if [ $DIRECTION -eq 0 ]+ then+ CONVERT="HZ_TO_${NAME}"+ FROM=$HZ+ TO=$PERIOD+ else+ CONVERT="${NAME}_TO_HZ"+ FROM=$PERIOD+ TO=$HZ+ fi++ # Calculate 32 significant bits of MUL32 data.++ SHIFT=0+ while true+ do+ # This can't overflow 64 bit math. Pathological case+ # (TO=1, FROM=1000000) uses around 32+20=52 bits.++ MUL32=$(( ( ( $TO << $SHIFT ) + $FROM - 1 ) / $FROM ))++ # Keep increasing $SHIFT until we've got 32 bits.++ [ $MUL32 -gt $(( 1 << 31 )) ] && break+ SHIFT=$(( $SHIFT + 1 ))+ done+ MUL32=$( printf %x $MUL32 )++ # ADJ32 is just (((FROM/GCD)-1)<USEC cases should be ok.)++ # To get around this, we chop the bottom 32 bits off the+ # calculation and then reassemble it to avoid overflow:+ # 32+64=96, which is > 72.++ ADJ32=$(( $FROM / $GCD ))+ if [ $SHIFT -gt 32 ]+ then+ UPPER=$(( ( $ADJ32 - 1 ) << ( $SHIFT - 32 ) ))+ LOWER=$(( ( $UPPER % $ADJ32 ) << 32 ))+ ADJ32=$(( ( ( $UPPER / $ADJ32 ) << 32 ) + ( $LOWER / $ADJ32 )))+ else+ ADJ32=$(( ( ( $ADJ32 - 1 ) << $SHIFT) / $ADJ32 ))+ fi+ ADJ32=$( printf %x $ADJ32 )++ NUM=$(( $TO / $GCD ))+ DEN=$(( $FROM / $GCD ))++ # Output next chunk of header data to file++ (+ echo "#define ${CONVERT}_MUL32 U64_C(0x$MUL32)" &&+ echo "#define ${CONVERT}_ADJ32 U64_C(0x$ADJ32)" &&+ echo "#define ${CONVERT}_SHR32 $SHIFT" &&+ echo "#define ${CONVERT}_NUM U64_C($NUM)" &&+ echo "#define ${CONVERT}_DEN U64_C($DEN)"+ ) >> $FILENAME || exit 1+ done+done++(+ echo+ echo "#endif /* __KERNEL_TIMECHONST_H */"+) >> $FILENAME || exit 1++# Don't rm $FILENAME on exit anymore.++trap "" EXIT++exit 0--- linux-2.6.28/kernel/Makefile 2008-12-24 17:26:37.000000000 -0600+++ linux-2.6.28-new/kernel/Makefile 2009-01-03 00:40:21.000000000 -0600@@ -116,7 +116,7 @@ $(obj)/time.o: $(obj)/timeconst.h quiet_cmd_timeconst = TIMEC $@- cmd_timeconst = $(PERL) $< $(CONFIG_HZ) > $@+ cmd_timeconst = $(CONFIG_SHELL) $< $(CONFIG_HZ) $@ targets += timeconst.h-$(obj)/timeconst.h: $(src)/timeconst.pl FORCE+$(obj)/timeconst.h: $(src)/timeconst.sh FORCE $(call if_changed,timeconst)ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ¥Šwÿº{.nÇ+‰·¥Š{±þG«éÿŠ{ayºʇڙë,j­¢f£¢·hšïêÿ‘êçz_è®(­éšŽŠÝ¢j"ú¶m§ÿÿ¾«þG«éÿ¢¸?™¨è­Ú&£ø§~á¶iO•æ¬z·švØ^¶m§ÿÿà ÿ¶ìÿ¢¸?–I¥