From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4897 invoked by alias); 19 May 2011 04:45:00 -0000 Received: (qmail 4886 invoked by uid 22791); 19 May 2011 04:44:57 -0000 X-SWARE-Spam-Status: No, hits=-1.5 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,TW_DD X-Spam-Check-By: sourceware.org Received: from mail-ey0-f175.google.com (HELO mail-ey0-f175.google.com) (209.85.215.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 19 May 2011 04:44:41 +0000 Received: by mail-ey0-f175.google.com with SMTP id 27so746218eye.20 for ; Wed, 18 May 2011 21:44:40 -0700 (PDT) MIME-Version: 1.0 Received: by 10.213.31.69 with SMTP id x5mr1909771ebc.91.1305780278300; Wed, 18 May 2011 21:44:38 -0700 (PDT) Received: by 10.213.98.72 with HTTP; Wed, 18 May 2011 21:44:38 -0700 (PDT) Date: Thu, 19 May 2011 10:26:00 -0000 Message-ID: Subject: [PATCH, SMS 3/4] Optimize stage count From: Revital Eres To: Ayal Zaks Cc: gcc-patches@gcc.gnu.org, Patch Tracking Content-Type: multipart/mixed; boundary=0015174c0f38a4921804a399a940 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2011-05/txt/msg01351.txt.bz2 --0015174c0f38a4921804a399a940 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1360 Hello, The attach patch tries to achieve optimised SC by normalizing the partial schedule (having the cycles start from cycle zero). The branch location must be placed in row ii-1 in the final scheduling. If that's not the case after the normalization then it tries to move the branch to that row if possible, while preserving the scheduling of the rest of the instructions. The patch was tested together with the rest of the patches in this series. On ppc64-redhat-linux regtest as well as bootstrap with SMS flags enabling SMS also on loops with stage count 1. Regtested on SPU. On arm-linux-gnueabi regtseted on c,c++. Bootstrap c language with SMS flags enabling SMS also on loops with stage count 1. OK for mainline? Thanks, Revital Changelog: * modulo-sched.c (calculate_stage_count, calculate_must_precede_follow, get_sched_window, try_scheduling_node_in_cycle, remove_node_from_ps): Add declaration. (update_node_sched_params, set_must_precede_follow, optimize_sc): New functions. (reset_sched_times): Call update_node_sched_params. (sms_schedule): Call optimize_sc. (get_sched_window): Change function arguments. (sms_schedule_by_order): Update call to get_sched_window. all set_must_precede_follow. (calculate_stage_count): Add function argument. --0015174c0f38a4921804a399a940 Content-Type: text/plain; charset=US-ASCII; name="patch_opt_sc_18_5.txt" Content-Disposition: attachment; filename="patch_opt_sc_18_5.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gnulp9ww0 Content-length: 20078 SW5kZXg6IG1vZHVsby1zY2hlZC5jDQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQotLS0gbW9kdWxvLXNjaGVkLmMJKHJldmlzaW9uIDE3Mzc4NikNCisrKyBt b2R1bG8tc2NoZWQuYwkod29ya2luZyBjb3B5KQ0KQEAgLTE5OCw3ICsxOTgs MTYgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVfcHJvbG9nX2VwaWxvZyAocGFy dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0eCwg cnR4KTsNCiBzdGF0aWMgdm9pZCBkdXBsaWNhdGVfaW5zbnNfb2ZfY3ljbGVz IChwYXJ0aWFsX3NjaGVkdWxlX3B0ciwNCiAJCQkJICAgICAgIGludCwgaW50 LCBpbnQsIHJ0eCk7DQotc3RhdGljIGludCBjYWxjdWxhdGVfc3RhZ2VfY291 bnQgKHBhcnRpYWxfc2NoZWR1bGVfcHRyIHBzKTsNCitzdGF0aWMgaW50IGNh bGN1bGF0ZV9zdGFnZV9jb3VudCAocGFydGlhbF9zY2hlZHVsZV9wdHIsIGlu dCk7DQorc3RhdGljIHZvaWQgY2FsY3VsYXRlX211c3RfcHJlY2VkZV9mb2xs b3cgKGRkZ19ub2RlX3B0ciwgaW50LCBpbnQsDQorCQkJCQkgICBpbnQsIGlu dCwgc2JpdG1hcCwgc2JpdG1hcCwgc2JpdG1hcCk7DQorc3RhdGljIGludCBn ZXRfc2NoZWRfd2luZG93IChwYXJ0aWFsX3NjaGVkdWxlX3B0ciwgZGRnX25v ZGVfcHRyLCANCisJCQkgICAgIHNiaXRtYXAsIGludCwgaW50ICosIGludCAq LCBpbnQgKik7DQorc3RhdGljIGJvb2wgdHJ5X3NjaGVkdWxpbmdfbm9kZV9p bl9jeWNsZSAocGFydGlhbF9zY2hlZHVsZV9wdHIsIGRkZ19ub2RlX3B0ciwN CisJCQkJCSAgaW50LCBpbnQsIHNiaXRtYXAsIGludCAqLCBzYml0bWFwLA0K KwkJCQkJICBzYml0bWFwKTsNCitzdGF0aWMgYm9vbCByZW1vdmVfbm9kZV9m cm9tX3BzIChwYXJ0aWFsX3NjaGVkdWxlX3B0ciwgcHNfaW5zbl9wdHIpOw0K Kw0KICNkZWZpbmUgU0NIRURfQVNBUCh4KSAoKChub2RlX3NjaGVkX3BhcmFt c19wdHIpKHgpLT5hdXguaW5mbyktPmFzYXApDQogI2RlZmluZSBTQ0hFRF9U SU1FKHgpICgoKG5vZGVfc2NoZWRfcGFyYW1zX3B0cikoeCktPmF1eC5pbmZv KS0+dGltZSkNCiAjZGVmaW5lIFNDSEVEX0ZJUlNUX1JFR19NT1ZFKHgpIFwN CkBAIC01NzIsNiArNTgxLDMzIEBAIGZyZWVfdW5kb19yZXBsYWNlX2J1ZmYg KHN0cnVjdCB1bmRvX3JlcGwNCiAgICAgfQ0KIH0NCiANCisvKiBVcGRhdGUg dGhlIHNjaGVkX3BhcmFtcyBmb3Igbm9kZSBVIHVzaW5nIHRoZSBJSSwNCisg ICB0aGUgQ1lDTEUgb2YgVSBhbmQgTUlOX0NZQ0xFLiAgKi8NCitzdGF0aWMg dm9pZA0KK3VwZGF0ZV9ub2RlX3NjaGVkX3BhcmFtcyAoZGRnX25vZGVfcHRy IHUsIGludCBpaSwgaW50IGN5Y2xlLCBpbnQgbWluX2N5Y2xlKQ0KK3sNCisg IGludCBzY191bnRpbF9jeWNsZV96ZXJvOw0KKyAgaW50IHN0YWdlOw0KKw0K KyAgU0NIRURfVElNRSAodSkgPSBjeWNsZTsNCisgIFNDSEVEX1JPVyAodSkg PSBTTU9EVUxPIChjeWNsZSwgaWkpOw0KKw0KKyAgLyogVGhlIGNhbGN1bGF0 aW9uIG9mIHN0YWdlIGNvdW50IGlzIGRvbmUgYWRkaW5nIHRoZSBudW1iZXIN CisgICAgIG9mIHN0YWdlcyBiZWZvcmUgY3ljbGUgemVybyBhbmQgYWZ0ZXIg Y3ljbGUgemVyby4gICovDQorICBzY191bnRpbF9jeWNsZV96ZXJvID0gQ0FM Q19TVEFHRV9DT1VOVCAoLTEsIG1pbl9jeWNsZSwgaWkpOw0KKw0KKyAgaWYg KFNDSEVEX1RJTUUgKHUpIDwgMCkNCisgICAgew0KKyAgICAgIHN0YWdlID0g Q0FMQ19TVEFHRV9DT1VOVCAoLTEsIFNDSEVEX1RJTUUgKHUpLCBpaSk7DQor ICAgICAgU0NIRURfU1RBR0UgKHUpID0gc2NfdW50aWxfY3ljbGVfemVybyAt IHN0YWdlOw0KKyAgICB9DQorICBlbHNlDQorICAgIHsNCisgICAgICBzdGFn ZSA9IENBTENfU1RBR0VfQ09VTlQgKFNDSEVEX1RJTUUgKHUpLCAwLCBpaSk7 DQorICAgICAgU0NIRURfU1RBR0UgKHUpID0gc2NfdW50aWxfY3ljbGVfemVy byArIHN0YWdlIC0gMTsNCisgICAgfQ0KK30NCisNCiAvKiBCdW1wIHRoZSBT Q0hFRF9USU1FcyBvZiBhbGwgbm9kZXMgYnkgQU1PVU5ULiAgU2V0IHRoZSB2 YWx1ZXMgb2YNCiAgICBTQ0hFRF9ST1cgYW5kIFNDSEVEX1NUQUdFLiAgSW5z dHJ1Y3Rpb24gc2NoZWR1bGVkIG9uIGN5Y2xlIEFNT1VOVA0KICAgIHdpbGwg bW92ZSB0byBjeWNsZSB6ZXJvLiAgKi8NCkBAIC01ODgsNyArNjI0LDYgQEAg cmVzZXRfc2NoZWRfdGltZXMgKHBhcnRpYWxfc2NoZWR1bGVfcHRyIA0KIAlk ZGdfbm9kZV9wdHIgdSA9IGNycl9pbnNuLT5ub2RlOw0KIAlpbnQgbm9ybWFs aXplZF90aW1lID0gU0NIRURfVElNRSAodSkgLSBhbW91bnQ7DQogCWludCBu ZXdfbWluX2N5Y2xlID0gUFNfTUlOX0NZQ0xFIChwcykgLSBhbW91bnQ7DQot ICAgICAgICBpbnQgc2NfdW50aWxfY3ljbGVfemVybywgc3RhZ2U7DQogDQog ICAgICAgICBpZiAoZHVtcF9maWxlKQ0KICAgICAgICAgICB7DQpAQCAtNjA0 LDIzICs2MzksOSBAQCByZXNldF9zY2hlZF90aW1lcyAocGFydGlhbF9zY2hl ZHVsZV9wdHIgDQogCQ0KIAlnY2NfYXNzZXJ0IChTQ0hFRF9USU1FICh1KSA+ PSBwcy0+bWluX2N5Y2xlKTsNCiAJZ2NjX2Fzc2VydCAoU0NIRURfVElNRSAo dSkgPD0gcHMtPm1heF9jeWNsZSk7DQotCVNDSEVEX1RJTUUgKHUpID0gbm9y bWFsaXplZF90aW1lOw0KLQlTQ0hFRF9ST1cgKHUpID0gU01PRFVMTyAobm9y bWFsaXplZF90aW1lLCBpaSk7DQotICAgICAgDQotICAgICAgICAvKiBUaGUg Y2FsY3VsYXRpb24gb2Ygc3RhZ2UgY291bnQgaXMgZG9uZSBhZGRpbmcgdGhl IG51bWJlcg0KLSAgICAgICAgICAgb2Ygc3RhZ2VzIGJlZm9yZSBjeWNsZSB6 ZXJvIGFuZCBhZnRlciBjeWNsZSB6ZXJvLiAgKi8NCi0Jc2NfdW50aWxfY3lj bGVfemVybyA9IENBTENfU1RBR0VfQ09VTlQgKC0xLCBuZXdfbWluX2N5Y2xl LCBpaSk7DQotCQ0KLQlpZiAoU0NIRURfVElNRSAodSkgPCAwKQ0KLQkgIHsN Ci0JICAgIHN0YWdlID0gQ0FMQ19TVEFHRV9DT1VOVCAoLTEsIFNDSEVEX1RJ TUUgKHUpLCBpaSk7DQotCSAgICBTQ0hFRF9TVEFHRSAodSkgPSBzY191bnRp bF9jeWNsZV96ZXJvIC0gc3RhZ2U7DQotCSAgfQ0KLQllbHNlDQotCSAgew0K LQkgICAgc3RhZ2UgPSBDQUxDX1NUQUdFX0NPVU5UIChTQ0hFRF9USU1FICh1 KSwgMCwgaWkpOw0KLQkgICAgU0NIRURfU1RBR0UgKHUpID0gc2NfdW50aWxf Y3ljbGVfemVybyArIHN0YWdlIC0gMTsNCi0JICB9DQorDQorCWNycl9pbnNu LT5jeWNsZSA9IG5vcm1hbGl6ZWRfdGltZTsNCisJdXBkYXRlX25vZGVfc2No ZWRfcGFyYW1zICh1LCBpaSwgbm9ybWFsaXplZF90aW1lLCBuZXdfbWluX2N5 Y2xlKTsNCiAgICAgICB9DQogfQ0KICANCkBAIC02NTcsNiArNjc4LDIwNiBA QCBwZXJtdXRlX3BhcnRpYWxfc2NoZWR1bGUgKHBhcnRpYWxfc2NoZWR1DQog CQkJICAgIFBSRVZfSU5TTiAobGFzdCkpOw0KIH0NCiANCisvKiBTZXQgYml0 bWFwcyBUTVBfRk9MTE9XIGFuZCBUTVBfUFJFQ0VERSB0byBNVVNUX0ZPTExP VyBhbmQgTVVTVF9QUkVDRURFDQorICAgcmVzcGVjdGl2ZWx5IG9ubHkgaWYg Y3ljbGUgQyBmYWxscyBpbiB0aGUgc2NoZWR1bGluZyB3aW5kb3cgYm91bmRh cmllcw0KKyAgIG1hcmtlZCBieSBTVEFSVCBhbmQgRU5EIGN5Y2xlcy4gIFNU RVAgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgd2luZG93Lg0KKyAgICovDQor c3RhdGljIGlubGluZSB2b2lkDQorc2V0X211c3RfcHJlY2VkZV9mb2xsb3cg KHNiaXRtYXAgKnRtcF9mb2xsb3csIHNiaXRtYXAgbXVzdF9mb2xsb3csDQor CQkJIHNiaXRtYXAgKnRtcF9wcmVjZWRlLCBzYml0bWFwIG11c3RfcHJlY2Vk ZSwgaW50IGMsDQorCQkJIGludCBzdGFydCwgaW50IGVuZCwgaW50IHN0ZXAp DQorew0KKyAgKnRtcF9wcmVjZWRlID0gTlVMTDsNCisgICp0bXBfZm9sbG93 ID0gTlVMTDsNCisNCisgIGlmIChjID09IHN0YXJ0KQ0KKyAgICB7DQorICAg ICAgaWYgKHN0ZXAgPT0gMSkNCisJKnRtcF9wcmVjZWRlID0gbXVzdF9wcmVj ZWRlOw0KKyAgICAgIGVsc2UJCQkvKiBzdGVwID09IC0xLiAgKi8NCisJKnRt cF9mb2xsb3cgPSBtdXN0X2ZvbGxvdzsNCisgICAgfQ0KKyAgaWYgKGMgPT0g ZW5kIC0gc3RlcCkNCisgICAgew0KKyAgICAgIGlmIChzdGVwID09IDEpDQor CSp0bXBfZm9sbG93ID0gbXVzdF9mb2xsb3c7DQorICAgICAgZWxzZQkJCS8q IHN0ZXAgPT0gLTEuICAqLw0KKwkqdG1wX3ByZWNlZGUgPSBtdXN0X3ByZWNl ZGU7DQorICAgIH0NCisNCit9DQorDQorLyogUmV0dXJuIFRydWUgaWYgdGhl IGJyYW5jaCBjYW4gYmUgbW92ZWQgdG8gcm93IGlpLTEgd2hpbGUNCisgICBu b3JtYWxpemluZyB0aGUgcGFydGlhbCBzY2hlZHVsZSBQUyB0byBzdGFydCBm cm9tIGN5Y2xlIHplcm8gYW5kIHRodXMNCisgICBvcHRpbWl6ZSB0aGUgU0Mu ICBPdGhlcndpc2UgcmV0dXJuIEZhbHNlLiAgKi8NCitzdGF0aWMgYm9vbA0K K29wdGltaXplX3NjIChwYXJ0aWFsX3NjaGVkdWxlX3B0ciBwcywgZGRnX3B0 ciBnKQ0KK3sNCisgIGludCBhbW91bnQgPSBQU19NSU5fQ1lDTEUgKHBzKTsN CisgIHNiaXRtYXAgc2NoZWRfbm9kZXMgPSBzYml0bWFwX2FsbG9jIChnLT5u dW1fbm9kZXMpOw0KKyAgaW50IHN0YXJ0LCBlbmQsIHN0ZXA7DQorICBpbnQg aWkgPSBwcy0+aWk7DQorICBib29sIG9rID0gZmFsc2U7DQorICBpbnQgc3Rh Z2VfY291bnQsIHN0YWdlX2NvdW50X2N1cnI7DQorDQorICAvKiBDb21wYXJl IHRoZSBTQyBhZnRlciBub3JtYWxpemF0aW9uIGFuZCBTQyBhZnRlciBicmlu Z2luZyB0aGUgYnJhbmNoDQorICAgICB0byByb3cgaWktMS4gIElmIHRoZXkg YXJlIGVxdWFsIGp1c3QgYmFpbCBvdXQuICAqLw0KKyAgc3RhZ2VfY291bnQg PSBjYWxjdWxhdGVfc3RhZ2VfY291bnQgKHBzLCBhbW91bnQpOw0KKyAgc3Rh Z2VfY291bnRfY3VyciA9DQorICAgIGNhbGN1bGF0ZV9zdGFnZV9jb3VudCAo cHMsIFNDSEVEX1RJTUUgKGctPmNsb3NpbmdfYnJhbmNoKSArIDEpOw0KKw0K KyAgaWYgKHN0YWdlX2NvdW50ID09IHN0YWdlX2NvdW50X2N1cnIpDQorICAg IHsNCisgICAgICBpZiAoZHVtcF9maWxlKQ0KKwlmcHJpbnRmIChkdW1wX2Zp bGUsICJTTVMgU0MgYWxyZWFkeSBvcHRpbWl6ZWQuXG4iKTsNCisNCisgICAg ICBvayA9IGZhbHNlOw0KKyAgICAgIGdvdG8gY2xlYXI7DQorICAgIH0NCisN CisgIGlmIChkdW1wX2ZpbGUpDQorICAgIHsNCisgICAgICBmcHJpbnRmIChk dW1wX2ZpbGUsICJTTVMgVHJ5aW5nIHRvIG9wdGltaXplIGJyYW5jaCBsb2Nh dGlvblxuIik7DQorICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiU01TIHBh cnRpYWwgc2NoZWR1bGUgYmVmb3JlIHRyaWFsOlxuIik7DQorICAgICAgcHJp bnRfcGFydGlhbF9zY2hlZHVsZSAocHMsIGR1bXBfZmlsZSk7DQorICAgIH0N CisNCisgIC8qIEZpcnN0LCBub3JtYWlsaXplIHRoZSBwYXJ0aWFsIHNjaGVk dWFsaW5nLiAgKi8NCisgIHJlc2V0X3NjaGVkX3RpbWVzIChwcywgYW1vdW50 KTsNCisgIHJvdGF0ZV9wYXJ0aWFsX3NjaGVkdWxlIChwcywgYW1vdW50KTsN CisgIGlmIChkdW1wX2ZpbGUpDQorICAgIHsNCisgICAgICBmcHJpbnRmIChk dW1wX2ZpbGUsDQorCSAgICAgICAiU01TIHBhcnRpYWwgc2NoZWR1bGUgYWZ0 ZXIgbm9ybWFsaXphdGlvbiAoaWksICVkLCBTQyAlZCk6XG4iLA0KKwkgICAg ICAgaWksIHN0YWdlX2NvdW50KTsNCisgICAgICBwcmludF9wYXJ0aWFsX3Nj aGVkdWxlIChwcywgZHVtcF9maWxlKTsNCisgICAgfQ0KKw0KKyAgaWYgKFNN T0RVTE8gKFNDSEVEX1RJTUUgKGctPmNsb3NpbmdfYnJhbmNoKSwgaWkpID09 IGlpIC0gMSkNCisgICAgew0KKyAgICAgIG9rID0gdHJ1ZTsNCisgICAgICBn b3RvIGNsZWFyOw0KKyAgICB9DQorDQorICBzYml0bWFwX29uZXMgKHNjaGVk X25vZGVzKTsNCisNCisgIC8qIENhbGN1bGF0ZSB0aGUgbmV3IHBsYWNlbWVu dCBvZiB0aGUgYnJhbmNoLiAgSXQgc2hvdWxkIGJlIGluIHJvdw0KKyAgICAg aWktMSBhbmQgZmFsbCBpbnRvIGl0J3Mgc2NoZWR1bGluZyB3aW5kb3cuICAq Lw0KKyAgaWYgKGdldF9zY2hlZF93aW5kb3cgKHBzLCBnLT5jbG9zaW5nX2Jy YW5jaCwgc2NoZWRfbm9kZXMsIGlpLCAmc3RhcnQsDQorCQkJJnN0ZXAsICZl bmQpID09IDApDQorICAgIHsNCisgICAgICBib29sIHN1Y2Nlc3M7DQorICAg ICAgcHNfaW5zbl9wdHIgbmV4dF9wc19pOw0KKyAgICAgIGludCBicmFuY2hf Y3ljbGUgPSBTQ0hFRF9USU1FIChnLT5jbG9zaW5nX2JyYW5jaCk7DQorICAg ICAgaW50IHJvdyA9IFNNT0RVTE8gKGJyYW5jaF9jeWNsZSwgcHMtPmlpKTsN CisgICAgICBpbnQgbnVtX3NwbGl0cyA9IDA7DQorICAgICAgc2JpdG1hcCBt dXN0X3ByZWNlZGUsIG11c3RfZm9sbG93LCB0bXBfcHJlY2VkZSwgdG1wX2Zv bGxvdzsNCisgICAgICBpbnQgYzsNCisNCisgICAgICBpZiAoZHVtcF9maWxl KQ0KKwlmcHJpbnRmIChkdW1wX2ZpbGUsICJcblRyeWluZyB0byBzY2hlZHVs ZSBub2RlICVkICINCisJCSAiSU5TTiA9ICVkICBpbiAoJWQgLi4gJWQpIHN0 ZXAgJWRcbiIsDQorCQkgZy0+Y2xvc2luZ19icmFuY2gtPmN1aWQsDQorCQkg KElOU05fVUlEIChnLT5jbG9zaW5nX2JyYW5jaC0+aW5zbikpLCBzdGFydCwg ZW5kLCBzdGVwKTsNCisNCisgICAgICBnY2NfYXNzZXJ0ICgoc3RlcCA+IDAg JiYgc3RhcnQgPCBlbmQpIHx8IChzdGVwIDwgMCAmJiBzdGFydCA+IGVuZCkp Ow0KKyAgICAgIGlmIChzdGVwID09IDEpDQorCXsNCisJICBjID0gc3RhcnQg KyBpaSAtIFNNT0RVTE8gKHN0YXJ0LCBpaSkgLSAxOw0KKwkgIGdjY19hc3Nl cnQgKGMgPj0gc3RhcnQpOw0KKwkgIGlmIChjID49IGVuZCkNCisJICAgIHsN CisJICAgICAgb2sgPSBmYWxzZTsNCisJICAgICAgaWYgKGR1bXBfZmlsZSkN CisJCWZwcmludGYgKGR1bXBfZmlsZSwNCisJCQkgIlNNUyBmYWlsZWQgdG8g c2NoZWR1bGUgYnJhbmNoIGF0IGN5Y2xlOiAlZFxuIiwgYyk7DQorCSAgICAg IGdvdG8gY2xlYXI7DQorCSAgICB9DQorCX0NCisgICAgICBlbHNlDQorCXsN CisJICBjID0gc3RhcnQgLSBTTU9EVUxPIChzdGFydCwgaWkpIC0gMTsNCisJ ICBnY2NfYXNzZXJ0IChjIDw9IHN0YXJ0KTsNCisNCisJICBpZiAoYyA8PSBl bmQpDQorCSAgICB7DQorCSAgICAgIGlmIChkdW1wX2ZpbGUpDQorCQlmcHJp bnRmIChkdW1wX2ZpbGUsDQorCQkJICJTTVMgZmFpbGVkIHRvIHNjaGVkdWxl IGJyYW5jaCBhdCBjeWNsZTogJWRcbiIsIGMpOw0KKwkgICAgICBvayA9IGZh bHNlOw0KKwkgICAgICBnb3RvIGNsZWFyOw0KKwkgICAgfQ0KKwl9DQorDQor ICAgICAgbXVzdF9wcmVjZWRlID0gc2JpdG1hcF9hbGxvYyAoZy0+bnVtX25v ZGVzKTsNCisgICAgICBtdXN0X2ZvbGxvdyA9IHNiaXRtYXBfYWxsb2MgKGct Pm51bV9ub2Rlcyk7DQorDQorICAgICAgLyogVHJ5IHRvIHNjaGVkdWxlIHRo ZSBicmFuY2ggaXMgaXQncyBuZXcgY3ljbGUuICAqLw0KKyAgICAgIGNhbGN1 bGF0ZV9tdXN0X3ByZWNlZGVfZm9sbG93IChnLT5jbG9zaW5nX2JyYW5jaCwg c3RhcnQsIGVuZCwNCisJCQkJICAgICBzdGVwLCBpaSwgc2NoZWRfbm9kZXMs DQorCQkJCSAgICAgbXVzdF9wcmVjZWRlLCBtdXN0X2ZvbGxvdyk7DQorDQor ICAgICAgc2V0X211c3RfcHJlY2VkZV9mb2xsb3cgKCZ0bXBfZm9sbG93LCBt dXN0X2ZvbGxvdywgJnRtcF9wcmVjZWRlLA0KKwkJCSAgICAgICBtdXN0X3By ZWNlZGUsIGMsIHN0YXJ0LCBlbmQsIHN0ZXApOw0KKw0KKyAgICAgIC8qIEZp bmQgdGhlIGVsZW1lbnQgaW4gdGhlIHBhcnRpYWwgc2NoZWR1bGUgcmVsYXRl ZCB0byB0aGUgY2xvc2luZw0KKyAgICAgICAgIGJyYW5jaCBzbyB3ZSBjYW4g cmVtb3ZlIGl0IGZyb20gaXQncyBjdXJyZW50IGN5Y2xlLiAgKi8NCisgICAg ICBmb3IgKG5leHRfcHNfaSA9IHBzLT5yb3dzW3Jvd107DQorCSAgIG5leHRf cHNfaTsgbmV4dF9wc19pID0gbmV4dF9wc19pLT5uZXh0X2luX3JvdykNCisJ aWYgKG5leHRfcHNfaS0+bm9kZS0+Y3VpZCA9PSBnLT5jbG9zaW5nX2JyYW5j aC0+Y3VpZCkNCisJICBicmVhazsNCisNCisgICAgICBnY2NfYXNzZXJ0IChu ZXh0X3BzX2kpOw0KKyAgICAgIGdjY19hc3NlcnQgKHJlbW92ZV9ub2RlX2Zy b21fcHMgKHBzLCBuZXh0X3BzX2kpKTsNCisgICAgICBzdWNjZXNzID0NCisJ dHJ5X3NjaGVkdWxpbmdfbm9kZV9pbl9jeWNsZSAocHMsIGctPmNsb3Npbmdf YnJhbmNoLA0KKwkJCQkgICAgICBnLT5jbG9zaW5nX2JyYW5jaC0+Y3VpZCwg YywNCisJCQkJICAgICAgc2NoZWRfbm9kZXMsICZudW1fc3BsaXRzLA0KKwkJ CQkgICAgICB0bXBfcHJlY2VkZSwgdG1wX2ZvbGxvdyk7DQorICAgICAgZ2Nj X2Fzc2VydCAobnVtX3NwbGl0cyA9PSAwKTsNCisgICAgICBpZiAoIXN1Y2Nl c3MpDQorCXsNCisJICBpZiAoZHVtcF9maWxlKQ0KKwkgICAgZnByaW50ZiAo ZHVtcF9maWxlLA0KKwkJICAgICAiU01TIGZhaWxlZCB0byBzY2hlZHVsZSBi cmFuY2ggYXQgY3ljbGU6ICVkLCAiDQorCQkgICAgICJicmluZ2luZyBpdCBi YWNrIHRvIGN5Y2xlICVkXG4iLCBjLCBicmFuY2hfY3ljbGUpOw0KKw0KKwkg IC8qIFRoZSBicmFuY2ggd2FzIGZhaWxlZCB0byBiZSBwbGFjZWQgaW4gcm93 IGlpIC0gMS4NCisJICAgICBQdXQgaXQgYmFjayBpbiBpdCdzIG9yaWdpbmFs IHBsYWNlIGluIHRoZSBwYXJ0aWFsDQorCSAgICAgc2NoZWR1YWxpbmcuICAq Lw0KKwkgIHNldF9tdXN0X3ByZWNlZGVfZm9sbG93ICgmdG1wX2ZvbGxvdywg bXVzdF9mb2xsb3csICZ0bXBfcHJlY2VkZSwNCisJCQkJICAgbXVzdF9wcmVj ZWRlLCBicmFuY2hfY3ljbGUsIHN0YXJ0LCBlbmQsDQorCQkJCSAgIHN0ZXAp Ow0KKwkgIHN1Y2Nlc3MgPQ0KKwkgICAgdHJ5X3NjaGVkdWxpbmdfbm9kZV9p bl9jeWNsZSAocHMsIGctPmNsb3NpbmdfYnJhbmNoLA0KKwkJCQkJICBnLT5j bG9zaW5nX2JyYW5jaC0+Y3VpZCwNCisJCQkJCSAgYnJhbmNoX2N5Y2xlLCBz Y2hlZF9ub2RlcywNCisJCQkJCSAgJm51bV9zcGxpdHMsIHRtcF9wcmVjZWRl LA0KKwkJCQkJICB0bXBfZm9sbG93KTsNCisJICBnY2NfYXNzZXJ0IChzdWNj ZXNzICYmIChudW1fc3BsaXRzID09IDApKTsNCisJICBvayA9IGZhbHNlOw0K Kwl9DQorICAgICAgZWxzZQ0KKwl7DQorCSAgLyogVGhlIGJyYW5jaCBpcyBw bGFjZWQgaW4gcm93IGlpIC0gMS4gICovDQorCSAgaWYgKGR1bXBfZmlsZSkN CisJICAgIGZwcmludGYgKGR1bXBfZmlsZSwNCisJCSAgICAgIlNNUyBzdWNj ZXNzIGluIG1vdmluZyBicmFuY2ggdG8gY3ljbGUgJWRcbiIsIGMpOw0KKw0K KwkgIHVwZGF0ZV9ub2RlX3NjaGVkX3BhcmFtcyAoZy0+Y2xvc2luZ19icmFu Y2gsIGlpLCBjLA0KKwkJCQkgICAgUFNfTUlOX0NZQ0xFIChwcykpOw0KKwkg IG9rID0gdHJ1ZTsNCisJfQ0KKw0KKyAgICAgIGZyZWUgKG11c3RfcHJlY2Vk ZSk7DQorICAgICAgZnJlZSAobXVzdF9mb2xsb3cpOw0KKyAgICB9DQorDQor Y2xlYXI6DQorICBmcmVlIChzY2hlZF9ub2Rlcyk7DQorICByZXR1cm4gb2s7 DQorfQ0KKw0KIHN0YXRpYyB2b2lkDQogZHVwbGljYXRlX2luc25zX29mX2N5 Y2xlcyAocGFydGlhbF9zY2hlZHVsZV9wdHIgcHMsIGludCBmcm9tX3N0YWdl LA0KIAkJCSAgIGludCB0b19zdGFnZSwgaW50IGZvcl9wcm9sb2csIHJ0eCBj b3VudF9yZWcpDQpAQCAtMTExMiw2ICsxMzMzLDcgQEAgc21zX3NjaGVkdWxl ICh2b2lkKQ0KICAgICAgIGludCBtaWksIHJlY19taWk7DQogICAgICAgdW5z aWduZWQgc3RhZ2VfY291bnQgPSAwOw0KICAgICAgIEhPU1RfV0lERVNUX0lO VCBsb29wX2NvdW50ID0gMDsNCisgICAgICBib29sIG9wdF9zY19wID0gZmFs c2U7DQogDQogICAgICAgaWYgKCEgKGcgPSBnX2Fycltsb29wLT5udW1dKSkN CiAgICAgICAgIGNvbnRpbnVlOw0KQEAgLTExOTMsMTQgKzE0MTUsMzIgQEAg c21zX3NjaGVkdWxlICh2b2lkKQ0KICAgICAgIHNldF9ub2RlX3NjaGVkX3Bh cmFtcyAoZyk7DQogDQogICAgICAgcHMgPSBzbXNfc2NoZWR1bGVfYnlfb3Jk ZXIgKGcsIG1paSwgbWF4aWksIG5vZGVfb3JkZXIpOw0KLQ0KLSAgICAgICBp ZiAocHMpDQotICAgICAgIHsNCi0gICAgICAgICBzdGFnZV9jb3VudCA9IGNh bGN1bGF0ZV9zdGFnZV9jb3VudCAocHMpOw0KLSAgICAgICAgIGdjY19hc3Nl cnQoc3RhZ2VfY291bnQgPj0gMSk7DQotICAgICAgICAgUFNfU1RBR0VfQ09V TlQocHMpID0gc3RhZ2VfY291bnQ7DQotICAgICAgIH0NCi0NCisgICAgICAN CisgICAgICBpZiAocHMpDQorCXsNCisJICAvKiBUcnkgdG8gYWNoaWV2ZSBv cHRpbWl6ZWQgU0MgYnkgbm9ybWFsaXppbmcgdGhlIHBhcnRpYWwNCisJICAg ICBzY2hlZHVsZSAoaGF2aW5nIHRoZSBjeWNsZXMgc3RhcnQgZnJvbSBjeWNs ZSB6ZXJvKS4gVGhlIGJyYW5jaA0KKwkgICAgIGxvY2F0aW9uIG11c3QgYmUg cGxhY2VkIGluIHJvdyBpaS0xIGluIHRoZSBmaW5hbCBzY2hlZHVsaW5nLg0K KwkgICAgIElmIHRoYXQncyBub3QgdGhlIGNhc2UgYWZ0ZXIgdGhlIG5vcm1h bGl6YXRpb24gdGhlbiB0cnkgdG8NCisJICAgICBtb3ZlIHRoZSBicmFuY2gg dG8gdGhhdCByb3cgaWYgcG9zc2libGUuICAqLw0KKwkgIG9wdF9zY19wID0g b3B0aW1pemVfc2MgKHBzLCBnKTsNCisJICBpZiAob3B0X3NjX3ApDQorCSAg ICBzdGFnZV9jb3VudCA9IGNhbGN1bGF0ZV9zdGFnZV9jb3VudCAocHMsIDAp Ow0KKwkgIGVsc2UNCisJICAgIHsNCisJICAgICAgLyogQnJpbmcgdGhlIGJy YW5jaCB0byBjeWNsZSAtMS4gICovDQorCSAgICAgIGludCBhbW91bnQgPSBT Q0hFRF9USU1FIChnLT5jbG9zaW5nX2JyYW5jaCkgKyAxOw0KKwkgICAgICAN CisJICAgICAgaWYgKGR1bXBfZmlsZSkNCisJCWZwcmludGYgKGR1bXBfZmls ZSwgIlNNUyBzY2hlZHVsZSBicmFuY2ggYXQgY3ljbGUgLTFcbiIpOw0KKwkg ICAgICANCisJICAgICAgc3RhZ2VfY291bnQgPSBjYWxjdWxhdGVfc3RhZ2Vf Y291bnQgKHBzLCBhbW91bnQpOw0KKwkgICAgfQ0KKwkgIA0KKwkgIGdjY19h c3NlcnQgKHN0YWdlX2NvdW50ID49IDEpOw0KKwkgIFBTX1NUQUdFX0NPVU5U IChwcykgPSBzdGFnZV9jb3VudDsNCisJfQ0KKyAgICAgIA0KICAgICAgIC8q IFRoZSBkZWZhdWx0IHZhbHVlIG9mIFBBUkFNX1NNU19NSU5fU0MgaXMgMiBh cyBzdGFnZSBjb3VudCBvZg0KIAkgMSBtZWFucyB0aGF0IHRoZXJlIGlzIG5v IGludGVybGVhdmluZyBiZXR3ZWVuIGl0ZXJhdGlvbnMgdGh1cw0KIAkgd2Ug bGV0IHRoZSBzY2hlZHVsaW5nIHBhc3NlcyBkbyB0aGUgam9iIGluIHRoaXMg Y2FzZS4gICovDQpAQCAtMTIyMSwxMiArMTQ2MSwxNiBAQCBzbXNfc2NoZWR1 bGUgKHZvaWQpDQogICAgICAgZWxzZQ0KIAl7DQogCSAgc3RydWN0IHVuZG9f cmVwbGFjZV9idWZmX2VsZW0gKnJlZ19tb3ZlX3JlcGxhY2VzOw0KLSAgICAg ICAgICBpbnQgYW1vdW50ID0gU0NIRURfVElNRSAoZy0+Y2xvc2luZ19icmFu Y2gpICsgMTsNCisNCisgICAgICAgICAgaWYgKCFvcHRfc2NfcCkNCisgICAg ICAgICAgICB7DQorCSAgICAgIC8qIFJvdGF0ZSB0aGUgcGFydGlhbCBzY2hl ZHVsZSB0byBoYXZlIHRoZSBicmFuY2ggaW4gcm93IGlpLTEuICAqLw0KKyAg ICAgICAgICAgICAgaW50IGFtb3VudCA9IFNDSEVEX1RJTUUgKGctPmNsb3Np bmdfYnJhbmNoKSArIDE7DQorCSAgICAgIA0KKyAgICAgICAgICAgICAgcmVz ZXRfc2NoZWRfdGltZXMgKHBzLCBhbW91bnQpOw0KKyAgICAgICAgICAgICAg cm90YXRlX3BhcnRpYWxfc2NoZWR1bGUgKHBzLCBhbW91bnQpOw0KKyAgICAg ICAgICAgIH0NCiAJICANCi0JICAvKiBTZXQgdGhlIHN0YWdlIGJvdW5kYXJp ZXMuCVRoZSBjbG9zaW5nX2JyYW5jaCB3YXMgc2NoZWR1bGVkDQotCSAgICAg YW5kIHNob3VsZCBhcHBlYXIgaW4gdGhlIGxhc3QgKGlpLTEpIHJvdy4gICov DQotCSAgcmVzZXRfc2NoZWRfdGltZXMgKHBzLCBhbW91bnQpOw0KLQkgIHJv dGF0ZV9wYXJ0aWFsX3NjaGVkdWxlIChwcywgYW1vdW50KTsNCiAJICBzZXRf Y29sdW1uc19mb3JfcHMgKHBzKTsNCiANCiAJICBjYW5vbl9sb29wIChsb29w KTsNCkBAIC0xMzc4LDEzICsxNjIyLDExIEBAIHNtc19zY2hlZHVsZSAodm9p ZCkNCiAgICBzY2hlZHVsaW5nIHdpbmRvdyBpcyBlbXB0eSBhbmQgemVybyBv dGhlcndpc2UuICAqLw0KIA0KIHN0YXRpYyBpbnQNCi1nZXRfc2NoZWRfd2lu ZG93IChwYXJ0aWFsX3NjaGVkdWxlX3B0ciBwcywgaW50ICpub2Rlc19vcmRl ciwgaW50IGksDQorZ2V0X3NjaGVkX3dpbmRvdyAocGFydGlhbF9zY2hlZHVs ZV9wdHIgcHMsIGRkZ19ub2RlX3B0ciB1X25vZGUsDQogCQkgIHNiaXRtYXAg c2NoZWRfbm9kZXMsIGludCBpaSwgaW50ICpzdGFydF9wLCBpbnQgKnN0ZXBf cCwgaW50ICplbmRfcCkNCiB7DQogICBpbnQgc3RhcnQsIHN0ZXAsIGVuZDsN CiAgIGRkZ19lZGdlX3B0ciBlOw0KLSAgaW50IHUgPSBub2Rlc19vcmRlciBb aV07DQotICBkZGdfbm9kZV9wdHIgdV9ub2RlID0gJnBzLT5nLT5ub2Rlc1t1 XTsNCiAgIHNiaXRtYXAgcHNwID0gc2JpdG1hcF9hbGxvYyAocHMtPmctPm51 bV9ub2Rlcyk7DQogICBzYml0bWFwIHBzcyA9IHNiaXRtYXBfYWxsb2MgKHBz LT5nLT5udW1fbm9kZXMpOw0KICAgc2JpdG1hcCB1X25vZGVfcHJlZHMgPSBO T0RFX1BSRURFQ0VTU09SUyAodV9ub2RlKTsNCkBAIC0xNzk2LDcgKzIwMzgs NyBAQCBzbXNfc2NoZWR1bGVfYnlfb3JkZXIgKGRkZ19wdHIgZywgaW50IG1p DQogDQogCSAgLyogVHJ5IHRvIGdldCBub24tZW1wdHkgc2NoZWR1bGluZyB3 aW5kb3cuICAqLw0KIAkgc3VjY2VzcyA9IDA7DQotICAgICAgICAgaWYgKGdl dF9zY2hlZF93aW5kb3cgKHBzLCBub2Rlc19vcmRlciwgaSwgc2NoZWRfbm9k ZXMsIGlpLCAmc3RhcnQsDQorICAgICAgICAgaWYgKGdldF9zY2hlZF93aW5k b3cgKHBzLCB1X25vZGUsIHNjaGVkX25vZGVzLCBpaSwgJnN0YXJ0LA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0ZXAsICZlbmQpID09 IDApDQogICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgaWYgKGR1bXBf ZmlsZSkNCkBAIC0xODE2LDIxICsyMDU4LDkgQEAgc21zX3NjaGVkdWxlX2J5 X29yZGVyIChkZGdfcHRyIGcsIGludCBtaQ0KICAgICAgICAgICAgICAgICAg IHNiaXRtYXAgdG1wX3ByZWNlZGUgPSBOVUxMOw0KICAgICAgICAgICAgICAg ICAgIHNiaXRtYXAgdG1wX2ZvbGxvdyA9IE5VTEw7DQogDQotICAgICAgICAg ICAgICAgICAgaWYgKGMgPT0gc3RhcnQpDQotICAgICAgICAgICAgICAgICAg ICB7DQotICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGVwID09IDEpDQot ICAgICAgICAgICAgICAgICAgICAgICAgdG1wX3ByZWNlZGUgPSBtdXN0X3By ZWNlZGU7DQotICAgICAgICAgICAgICAgICAgICAgIGVsc2UgICAgICAvKiBz dGVwID09IC0xLiAgKi8NCi0gICAgICAgICAgICAgICAgICAgICAgICB0bXBf Zm9sbG93ID0gbXVzdF9mb2xsb3c7DQotICAgICAgICAgICAgICAgICAgICB9 DQotICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gZW5kIC0gc3RlcCkNCi0g ICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAg aWYgKHN0ZXAgPT0gMSkNCi0gICAgICAgICAgICAgICAgICAgICAgICB0bXBf Zm9sbG93ID0gbXVzdF9mb2xsb3c7DQotICAgICAgICAgICAgICAgICAgICAg IGVsc2UgICAgICAvKiBzdGVwID09IC0xLiAgKi8NCi0gICAgICAgICAgICAg ICAgICAgICAgICB0bXBfcHJlY2VkZSA9IG11c3RfcHJlY2VkZTsNCi0gICAg ICAgICAgICAgICAgICAgIH0NCi0NCisgICAgICAgICAgICAgICAgICBzZXRf bXVzdF9wcmVjZWRlX2ZvbGxvdyAoJnRtcF9mb2xsb3csIG11c3RfZm9sbG93 LCANCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXBfcHJlY2Vk ZSwgbXVzdF9wcmVjZWRlLCANCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYywgc3RhcnQsIGVuZCwgc3RlcCk7DQogICAg ICAgICAgICAgICAgICAgc3VjY2VzcyA9DQogICAgICAgICAgICAgICAgICAg ICB0cnlfc2NoZWR1bGluZ19ub2RlX2luX2N5Y2xlIChwcywgdV9ub2RlLCB1 LCBjLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2NoZWRfbm9kZXMsDQpAQCAtMjg3NiwxMiArMzEwNiwx MCBAQCBwc19hZGRfbm9kZV9jaGVja19jb25mbGljdHMgKHBhcnRpYWxfc2No DQogfQ0KIA0KIC8qIENhbGN1bGF0ZSB0aGUgc3RhZ2UgY291bnQgb2YgdGhl IHBhcnRpYWwgc2NoZWR1bGUgUFMuICBUaGUgY2FsY3VsYXRpb24NCi0gICB0 YWtlcyBpbnRvIGFjY291bnQgdGhlIHJvdGF0aW9uIHRvIGJyaW5nIHRoZSBj bG9zaW5nIGJyYW5jaCB0byByb3cNCi0gICBpaS0xLiAgKi8NCisgICB0YWtl cyBpbnRvIGFjY291bnQgdGhlIHJvdGF0aW9uIGFtb3VudCBwYXNzZWQgaW4g Uk9UQVRJT05fQU1PVU5ULiAgKi8NCiBpbnQNCi1jYWxjdWxhdGVfc3RhZ2Vf Y291bnQgKHBhcnRpYWxfc2NoZWR1bGVfcHRyIHBzKQ0KK2NhbGN1bGF0ZV9z dGFnZV9jb3VudCAocGFydGlhbF9zY2hlZHVsZV9wdHIgcHMsIGludCByb3Rh dGlvbl9hbW91bnQpDQogew0KLSAgaW50IHJvdGF0aW9uX2Ftb3VudCA9IChT Q0hFRF9USU1FIChwcy0+Zy0+Y2xvc2luZ19icmFuY2gpKSArIDE7DQogICBp bnQgbmV3X21pbl9jeWNsZSA9IFBTX01JTl9DWUNMRSAocHMpIC0gcm90YXRp b25fYW1vdW50Ow0KICAgaW50IG5ld19tYXhfY3ljbGUgPSBQU19NQVhfQ1lD TEUgKHBzKSAtIHJvdGF0aW9uX2Ftb3VudDsNCiAgIGludCBzdGFnZV9jb3Vu dCA9IENBTENfU1RBR0VfQ09VTlQgKC0xLCBuZXdfbWluX2N5Y2xlLCBwcy0+ aWkpOw0K --0015174c0f38a4921804a399a940--