Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Wed, 4 Apr 2001 17:41:17 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Wed, 4 Apr 2001 17:41:10 -0400 Received: from ha1.rdc2.bc.wave.home.com ([24.2.10.68]:3248 "EHLO mail.rdc2.bc.home.com") by vger.kernel.org with ESMTP id ; Wed, 4 Apr 2001 17:40:56 -0400 Date: Wed, 4 Apr 2001 13:41:54 -0700 (PDT) From: Jonathan Morton To: linux-kernel@vger.kernel.org cc: torvalds@transmeta.com, alan@lxorguk.ukuu.org.uk Subject: [PATCH] Revised memory-management stuff (was: OOM killer) Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="1897407998-355975241-986416914=:6489" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --1897407998-355975241-986416914=:6489 Content-Type: TEXT/PLAIN; charset=US-ASCII The attached patch applies to 2.4.3 and should address the most serious concerns surrounding OOM and low-memory situations for most people. A summary of the patch contents follows: MAJOR: OOM killer now only activates when truly out of memory, ie. when buffer and cache memory has already been eaten down to the bone. MEDIUM: The allocation mechanism will now only allow processes to reserve memory if there is sufficient memory remaining *and* the process is not already hogging RAM. IOW, if the allocating process is already 4x the size of the remaining free memory, reservation of more memory (by fork(), malloc() or related calls) will fail. MEDIUM: The OOM killer algorithm has been reworked to be a little more intelligent by default, and also now allows the sysadmin to specify PIDs and/or process names which should be left untouched. Simply echo a space-delimited list of PIDs and/or process names into /proc/sys/vm/oom-no-kill, and the OOM killer will ignore all processes matching any entry in the list until only they and init remain. Init (as PID 1 or as a root process named "init") is now always ignored. TODO: make certain parameters of the OOM killer configurable. W-I-P: The memory-accounting code from an old 2.3.99 patch has been re-introduced, but is in sore need of debugging. It can be activated by echoing a negative number into /proc/sys/vm/overcommit_memory - but do this at your own risk. Interested kernel hackers should alter the "#define VM_DEBUG 0" to 1 in include/linux/mm.h to view lots of debugging and warning messages. I have seen the memory-accounting code attempt to "free" blocks of memory exceeding 2GB which had never been allocated, while running gcc. The sanity-check code detects these anomalies and attempts to correct for them, but this isn't good... SIDE EFFECT: All parts of the kernel which can change the total amount of VM (eg. by adding/removing swap) should now call vm_invalidate_totalmem() to notify the VM about this. A new function vm_total() now reports the total amount of VM available. The total VM and the amount of reserved memory are now available from /proc/meminfo. --1897407998-355975241-986416914=:6489 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="oom-patch.3.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Various OOM and low-memory fixes Content-Disposition: attachment; filename="oom-patch.3.diff" ZGlmZiAtckJVIDUgbGludXgtMi40LjMvZnMvZXhlYy5jIGxpbnV4LW9vbS9m cy9leGVjLmMNCi0tLSBsaW51eC0yLjQuMy9mcy9leGVjLmMJVGh1IE1hciAy MiAwOToyNjoxOCAyMDAxDQorKysgbGludXgtb29tL2ZzL2V4ZWMuYwlUdWUg QXByICAzIDA5OjMyOjA3IDIwMDENCkBAIC0zODYsMjMgKzM4NiwzMSBAQA0K IH0NCiANCiBzdGF0aWMgaW50IGV4ZWNfbW1hcCh2b2lkKQ0KIHsNCiAJc3Ry dWN0IG1tX3N0cnVjdCAqIG1tLCAqIG9sZF9tbTsNCisJc3RydWN0IHRhc2tf c3RydWN0ICogdHNrID0gY3VycmVudDsNCisJdW5zaWduZWQgbG9uZyByZXNl cnZlZCA9IDA7DQogDQotCW9sZF9tbSA9IGN1cnJlbnQtPm1tOw0KKwlvbGRf bW0gPSB0c2stPm1tOw0KIAlpZiAob2xkX21tICYmIGF0b21pY19yZWFkKCZv bGRfbW0tPm1tX3VzZXJzKSA9PSAxKSB7DQorCSAgICAgICAgLyogS2VlcCBv bGQgc3RhY2sgcmVzZXJ2YXRpb24gKi8NCiAJCW1tX3JlbGVhc2UoKTsNCiAJ CWV4aXRfbW1hcChvbGRfbW0pOw0KIAkJcmV0dXJuIDA7DQogCX0NCiANCisJ cmVzZXJ2ZWQgPSB2bV9lbm91Z2hfbWVtb3J5KHRzay0+cmxpbVtSTElNSVRf U1RBQ0tdLnJsaW1fY3VyID4+IA0KKwkJCQkgICAgUEFHRV9TSElGVCk7DQor CWlmKCFyZXNlcnZlZCkNCisJICAgICAgICByZXR1cm4gLUVOT01FTTsNCisN CiAJbW0gPSBtbV9hbGxvYygpOw0KIAlpZiAobW0pIHsNCi0JCXN0cnVjdCBt bV9zdHJ1Y3QgKmFjdGl2ZV9tbTsNCisJCXN0cnVjdCBtbV9zdHJ1Y3QgKmFj dGl2ZV9tbSA9IHRzay0+YWN0aXZlX21tOw0KIA0KLQkJaWYgKGluaXRfbmV3 X2NvbnRleHQoY3VycmVudCwgbW0pKSB7DQorCQlpZiAoaW5pdF9uZXdfY29u dGV4dCh0c2ssIG1tKSkgew0KIAkJCW1tZHJvcChtbSk7DQogCQkJcmV0dXJu IC1FTk9NRU07DQogCQl9DQogDQogCQkvKiBBZGQgaXQgdG8gdGhlIGxpc3Qg b2YgbW0ncyAqLw0KQEAgLTQyNCwxMCArNDMyLDEyIEBADQogCQkJcmV0dXJu IDA7DQogCQl9DQogCQltbWRyb3AoYWN0aXZlX21tKTsNCiAJCXJldHVybiAw Ow0KIAl9DQorDQorCXZtX3JlbGVhc2VfbWVtb3J5KHJlc2VydmVkKTsNCiAJ cmV0dXJuIC1FTk9NRU07DQogfQ0KIA0KIC8qDQogICogVGhpcyBmdW5jdGlv biBtYWtlcyBzdXJlIHRoZSBjdXJyZW50IHByb2Nlc3MgaGFzIGl0cyBvd24g c2lnbmFsIHRhYmxlLA0KZGlmZiAtckJVIDUgbGludXgtMi40LjMvZnMvcHJv Yy9wcm9jX21pc2MuYyBsaW51eC1vb20vZnMvcHJvYy9wcm9jX21pc2MuYw0K LS0tIGxpbnV4LTIuNC4zL2ZzL3Byb2MvcHJvY19taXNjLmMJRnJpIE1hciAy MyAxMTo0NToyOCAyMDAxDQorKysgbGludXgtb29tL2ZzL3Byb2MvcHJvY19t aXNjLmMJVHVlIEFwciAgMyAwOTozMjoyNyAyMDAxDQpAQCAtMTczLDExICsx NzMsMTMgQEANCiAgICAgICAgICAgICAgICAgIkhpZ2hUb3RhbDogICAgJThs dSBrQlxuIg0KICAgICAgICAgICAgICAgICAiSGlnaEZyZWU6ICAgICAlOGx1 IGtCXG4iDQogICAgICAgICAgICAgICAgICJMb3dUb3RhbDogICAgICU4bHUg a0JcbiINCiAgICAgICAgICAgICAgICAgIkxvd0ZyZWU6ICAgICAgJThsdSBr QlxuIg0KICAgICAgICAgICAgICAgICAiU3dhcFRvdGFsOiAgICAlOGx1IGtC XG4iDQotICAgICAgICAgICAgICAgICJTd2FwRnJlZTogICAgICU4bHUga0Jc biIsDQorICAgICAgICAgICAgICAgICJTd2FwRnJlZTogICU4bHUga0JcbiIN CisgICAgICAgICAgICAgICAgIlZNVG90YWw6ICAgJThsdSBrQlxuIg0KKyAg ICAgICAgICAgICAgICAiVk1SZXNlcnZlZDolOGx1IGtCXG4iLA0KICAgICAg ICAgICAgICAgICBLKGkudG90YWxyYW0pLA0KICAgICAgICAgICAgICAgICBL KGkuZnJlZXJhbSksDQogICAgICAgICAgICAgICAgIEsoaS5zaGFyZWRyYW0p LA0KICAgICAgICAgICAgICAgICBLKGkuYnVmZmVycmFtKSwNCiAgICAgICAg ICAgICAgICAgSyhhdG9taWNfcmVhZCgmcGFnZV9jYWNoZV9zaXplKSksDQpA QCAtMTg4LDExICsxOTAsMTMgQEANCiAgICAgICAgICAgICAgICAgSyhpLnRv dGFsaGlnaCksDQogICAgICAgICAgICAgICAgIEsoaS5mcmVlaGlnaCksDQog ICAgICAgICAgICAgICAgIEsoaS50b3RhbHJhbS1pLnRvdGFsaGlnaCksDQog ICAgICAgICAgICAgICAgIEsoaS5mcmVlcmFtLWkuZnJlZWhpZ2gpLA0KICAg ICAgICAgICAgICAgICBLKGkudG90YWxzd2FwKSwNCi0gICAgICAgICAgICAg ICAgSyhpLmZyZWVzd2FwKSk7DQorICAgICAgICAgICAgICAgIEsoaS5mcmVl c3dhcCksDQorICAgICAgICAgICAgICAgIEsodm1fdG90YWwoKSksIA0KKyAg ICAgICAgICAgICAgICBLKHZtX3Jlc2VydmVkKSk7DQogDQogCXJldHVybiBw cm9jX2NhbGNfbWV0cmljcyhwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9m LCBsZW4pOw0KICN1bmRlZiBCDQogI3VuZGVmIEsNCiB9DQpkaWZmIC1yQlUg NSBsaW51eC0yLjQuMy9pbmNsdWRlL2xpbnV4L21tLmggbGludXgtb29tL2lu Y2x1ZGUvbGludXgvbW0uaA0KLS0tIGxpbnV4LTIuNC4zL2luY2x1ZGUvbGlu dXgvbW0uaAlNb24gTWFyIDI2IDE1OjQ4OjEzIDIwMDENCisrKyBsaW51eC1v b20vaW5jbHVkZS9saW51eC9tbS5oCVR1ZSBBcHIgIDMgMTk6NTk6MTIgMjAw MQ0KQEAgLTIyLDEwICsyMiwxOSBAQA0KICNpbmNsdWRlIDxhc20vcGFnZS5o Pg0KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPg0KICNpbmNsdWRlIDxhc20v YXRvbWljLmg+DQogDQogLyoNCisgKiBUaGVzZSBhcmUgdXNlZCB0byBwcmV2 ZW50IFZNIG92ZXJjb21taXQuDQorICovDQorDQorI2RlZmluZSBWTV9ERUJV RyAwDQorZXh0ZXJuIGxvbmcgdm1fcmVzZXJ2ZWQ7DQorZXh0ZXJuIHNwaW5s b2NrX3Qgdm1fbG9jazsNCitleHRlcm4gaW5saW5lIGxvbmcgdm1fdG90YWwo dm9pZCk7DQorDQorLyoNCiAgKiBMaW51eCBrZXJuZWwgdmlydHVhbCBtZW1v cnkgbWFuYWdlciBwcmltaXRpdmVzLg0KICAqIFRoZSBpZGVhIGJlaW5nIHRv IGhhdmUgYSAidmlydHVhbCIgbW0gaW4gdGhlIHNhbWUgd2F5DQogICogd2Ug aGF2ZSBhIHZpcnR1YWwgZnMgLSBnaXZpbmcgYSBjbGVhbmVyIGludGVyZmFj ZSB0byB0aGUNCiAgKiBtbSBkZXRhaWxzLCBhbmQgYWxsb3dpbmcgZGlmZmVy ZW50IGtpbmRzIG9mIG1lbW9yeSBtYXBwaW5ncw0KICAqIChmcm9tIHNoYXJl ZCBtZW1vcnkgdG8gZXhlY3V0YWJsZSBsb2FkaW5nIHRvIGFyYml0cmFyeQ0K QEAgLTQ1NiwxMCArNDY1LDE0IEBADQogZXh0ZXJuIGludCBkb19tdW5tYXAo c3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBzaXplX3QpOw0K IA0KIGV4dGVybiB1bnNpZ25lZCBsb25nIGRvX2Jyayh1bnNpZ25lZCBsb25n LCB1bnNpZ25lZCBsb25nKTsNCiANCiBzdHJ1Y3Qgem9uZV90Ow0KKw0KK2V4 dGVybiBsb25nIHZtX2Vub3VnaF9tZW1vcnkobG9uZyBwYWdlcyk7DQorZXh0 ZXJuIHZvaWQgdm1fcmVsZWFzZV9tZW1vcnkobG9uZyBwYWdlcyk7DQorDQog LyogZmlsZW1hcC5jICovDQogZXh0ZXJuIHZvaWQgcmVtb3ZlX2lub2RlX3Bh Z2Uoc3RydWN0IHBhZ2UgKik7DQogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGFn ZV91bnVzZShzdHJ1Y3QgcGFnZSAqKTsNCiBleHRlcm4gdm9pZCB0cnVuY2F0 ZV9pbm9kZV9wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBsb2ZmX3Qp Ow0KIA0KZGlmZiAtckJVIDUgbGludXgtMi40LjMvaW5jbHVkZS9saW51eC9z eXNjdGwuaCBsaW51eC1vb20vaW5jbHVkZS9saW51eC9zeXNjdGwuaA0KLS0t IGxpbnV4LTIuNC4zL2luY2x1ZGUvbGludXgvc3lzY3RsLmgJTW9uIE1hciAy NiAxNTo0ODoxMCAyMDAxDQorKysgbGludXgtb29tL2luY2x1ZGUvbGludXgv c3lzY3RsLmgJVHVlIEFwciAgMyAxMjo1NzoyNyAyMDAxDQpAQCAtMTMwLDEx ICsxMzAsMTIgQEANCiAJVk1fT1ZFUkNPTU1JVF9NRU1PUlk9NSwJLyogVHVy biBvZmYgdGhlIHZpcnR1YWwgbWVtb3J5IHNhZmV0eSBsaW1pdCAqLw0KIAlW TV9CVUZGRVJNRU09NiwJCS8qIHN0cnVjdDogU2V0IGJ1ZmZlciBtZW1vcnkg dGhyZXNob2xkcyAqLw0KIAlWTV9QQUdFQ0FDSEU9NywJCS8qIHN0cnVjdDog U2V0IGNhY2hlIG1lbW9yeSB0aHJlc2hvbGRzICovDQogCVZNX1BBR0VSREFF TU9OPTgsCS8qIHN0cnVjdDogQ29udHJvbCBrc3dhcGQgYmVoYXZpb3VyICov DQogCVZNX1BHVF9DQUNIRT05LAkJLyogc3RydWN0OiBTZXQgcGFnZSB0YWJs ZSBjYWNoZSBwYXJhbWV0ZXJzICovDQotCVZNX1BBR0VfQ0xVU1RFUj0xMAkv KiBpbnQ6IHNldCBudW1iZXIgb2YgcGFnZXMgdG8gc3dhcCB0b2dldGhlciAq Lw0KKwlWTV9QQUdFX0NMVVNURVI9MTAsCS8qIGludDogc2V0IG51bWJlciBv ZiBwYWdlcyB0byBzd2FwIHRvZ2V0aGVyICovDQorCVZNX09PTV9OT0tJTEw9 MTEgICAgICAgIC8qIHN0cmluZzogTGlzdCBvZiBQSURzIHRvIGF2b2lkIGtp bGxpbmcgb24gT09NICovDQogfTsNCiANCiANCiAvKiBDVExfTkVUIG5hbWVz OiAqLw0KIGVudW0NCmRpZmYgLXJCVSA1IGxpbnV4LTIuNC4zL2tlcm5lbC9l eGl0LmMgbGludXgtb29tL2tlcm5lbC9leGl0LmMNCi0tLSBsaW51eC0yLjQu My9rZXJuZWwvZXhpdC5jCUZyaSBGZWIgIDkgMTE6Mjk6NDQgMjAwMQ0KKysr IGxpbnV4LW9vbS9rZXJuZWwvZXhpdC5jCVR1ZSBBcHIgIDMgMDk6MzI6MTQg MjAwMQ0KQEAgLTMwNCwxMCArMzA0LDE1IEBADQogCXN0cnVjdCBtbV9zdHJ1 Y3QgKiBtbSA9IHRzay0+bW07DQogDQogCW1tX3JlbGVhc2UoKTsNCiAJaWYg KG1tKSB7DQogCQlhdG9taWNfaW5jKCZtbS0+bW1fY291bnQpOw0KKwkJaWYg KGF0b21pY19yZWFkKCZtbS0+bW1fdXNlcnMpID09IDEpIHsNCisJCS8qIE9u bHkgcmVsZWFzZSBzdGFjayBpZiB3ZSdyZSB0aGUgbGFzdCBvbmUgdXNpbmcg dGhpcyBtbSAqLw0KKwkJCXZtX3JlbGVhc2VfbWVtb3J5KHRzay0+cmxpbVtS TElNSVRfU1RBQ0tdLnJsaW1fY3VyID4+DQorCQkJCVBBR0VfU0hJRlQpOw0K KwkJfQ0KIAkJaWYgKG1tICE9IHRzay0+YWN0aXZlX21tKSBCVUcoKTsNCiAJ CS8qIG1vcmUgYSBtZW1vcnkgYmFycmllciB0aGFuIGEgcmVhbCBsb2NrICov DQogCQl0YXNrX2xvY2sodHNrKTsNCiAJCXRzay0+bW0gPSBOVUxMOw0KIAkJ dGFza191bmxvY2sodHNrKTsNCmRpZmYgLXJCVSA1IGxpbnV4LTIuNC4zL2tl cm5lbC9mb3JrLmMgbGludXgtb29tL2tlcm5lbC9mb3JrLmMNCi0tLSBsaW51 eC0yLjQuMy9rZXJuZWwvZm9yay5jCU1vbiBNYXIgMTkgMTI6MzU6MDggMjAw MQ0KKysrIGxpbnV4LW9vbS9rZXJuZWwvZm9yay5jCVR1ZSBBcHIgIDMgMDk6 MzI6MjEgMjAwMQ0KQEAgLTEyMywxMCArMTIzLDExIEBADQogfQ0KIA0KIHN0 YXRpYyBpbmxpbmUgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKiBt bSkNCiB7DQogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIG1wbnQsICp0bXAs ICoqcHByZXY7DQorCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQgPSAwOw0KIAlp bnQgcmV0dmFsOw0KIA0KIAlmbHVzaF9jYWNoZV9tbShjdXJyZW50LT5tbSk7 DQogCW1tLT5sb2NrZWRfdm0gPSAwOw0KIAltbS0+bW1hcCA9IE5VTEw7DQpA QCAtMTQwLDEwICsxNDEsMTkgQEANCiAJCXN0cnVjdCBmaWxlICpmaWxlOw0K IA0KIAkJcmV0dmFsID0gLUVOT01FTTsNCiAJCWlmKG1wbnQtPnZtX2ZsYWdz ICYgVk1fRE9OVENPUFkpDQogCQkJY29udGludWU7DQorDQorCQlyZXNlcnZl ZCA9IDA7DQorCQlpZigobXBudC0+dm1fZmxhZ3MgJiAoVk1fR1JPV1NET1dO IHwgVk1fV1JJVEUgfCBWTV9TSEFSRUQpKSA9PSBWTV9XUklURSkgew0KKwkJ CXVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gbXBudC0+dm1fZW5kIC0gbXBudC0+ dm1fc3RhcnQ7DQorCQkJcmVzZXJ2ZWQgPSB2bV9lbm91Z2hfbWVtb3J5KG5w YWdlcyA+PiBQQUdFX1NISUZUKTsNCisJCQlpZighcmVzZXJ2ZWQpDQorCQkJ CWdvdG8gZmFpbF9ub21lbTsNCisJCX0NCisNCiAJCXRtcCA9IGttZW1fY2Fj aGVfYWxsb2Modm1fYXJlYV9jYWNoZXAsIFNMQUJfS0VSTkVMKTsNCiAJCWlm ICghdG1wKQ0KIAkJCWdvdG8gZmFpbF9ub21lbTsNCiAJCSp0bXAgPSAqbXBu dDsNCiAJCXRtcC0+dm1fZmxhZ3MgJj0gflZNX0xPQ0tFRDsNCkBAIC0yNzgs MTAgKzI4OCwxMSBAQA0KIH0NCiANCiBzdGF0aWMgaW50IGNvcHlfbW0odW5z aWduZWQgbG9uZyBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICog dHNrKQ0KIHsNCiAJc3RydWN0IG1tX3N0cnVjdCAqIG1tLCAqb2xkbW07DQor CXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQ7DQogCWludCByZXR2YWw7DQogDQog CXRzay0+bWluX2ZsdCA9IHRzay0+bWFqX2ZsdCA9IDA7DQogCXRzay0+Y21p bl9mbHQgPSB0c2stPmNtYWpfZmx0ID0gMDsNCiAJdHNrLT5uc3dhcCA9IHRz ay0+Y25zd2FwID0gMDsNCkBAIC0zMDMsMTAgKzMxNCwxNCBAQA0KIAkJbW0g PSBvbGRtbTsNCiAJCWdvdG8gZ29vZF9tbTsNCiAJfQ0KIA0KIAlyZXR2YWwg PSAtRU5PTUVNOw0KKwlyZXNlcnZlZCA9IHZtX2Vub3VnaF9tZW1vcnkodHNr LT5ybGltW1JMSU1JVF9TVEFDS10ucmxpbV9jdXIgPj4gUEFHRV9TSElGVCk7 DQorCWlmKCFyZXNlcnZlZCkNCisJCWdvdG8gZmFpbF9ub21lbTsNCisNCiAJ bW0gPSBhbGxvY2F0ZV9tbSgpOw0KIAlpZiAoIW1tKQ0KIAkJZ290byBmYWls X25vbWVtOw0KIA0KIAkvKiBDb3B5IHRoZSBjdXJyZW50IE1NIHN0dWZmLi4g Ki8NCkBAIC0zNDcsMTAgKzM2MiwxMiBAQA0KIAlyZXR1cm4gMDsNCiANCiBm cmVlX3B0Og0KIAltbXB1dChtbSk7DQogZmFpbF9ub21lbToNCisJaWYgKHJl c2VydmVkKQ0KKwkJdm1fcmVsZWFzZV9tZW1vcnkocmVzZXJ2ZWQpOw0KIAly ZXR1cm4gcmV0dmFsOw0KIH0NCiANCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBm c19zdHJ1Y3QgKl9fY29weV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAq b2xkKQ0KIHsNCmRpZmYgLXJCVSA1IGxpbnV4LTIuNC4zL2tlcm5lbC9zeXNj dGwuYyBsaW51eC1vb20va2VybmVsL3N5c2N0bC5jDQotLS0gbGludXgtMi40 LjMva2VybmVsL3N5c2N0bC5jCUZyaSBGZWIgMTYgMTY6MDI6MzcgMjAwMQ0K KysrIGxpbnV4LW9vbS9rZXJuZWwvc3lzY3RsLmMJVHVlIEFwciAgMyAwOToz Mjo0OSAyMDAxDQpAQCAtNDIsMTAgKzQyLDExIEBADQogLyogRXh0ZXJuYWwg dmFyaWFibGVzIG5vdCBpbiBhIGhlYWRlciBmaWxlLiAqLw0KIGV4dGVybiBp bnQgcGFuaWNfdGltZW91dDsNCiBleHRlcm4gaW50IENfQV9EOw0KIGV4dGVy biBpbnQgYmRmX3BybVtdLCBiZGZsdXNoX21pbltdLCBiZGZsdXNoX21heFtd Ow0KIGV4dGVybiBpbnQgc3lzY3RsX292ZXJjb21taXRfbWVtb3J5Ow0KK2V4 dGVybiBjaGFyIHZtX25va2lsbFtdOw0KIGV4dGVybiBpbnQgbWF4X3RocmVh ZHM7DQogZXh0ZXJuIGludCBucl9xdWV1ZWRfc2lnbmFscywgbWF4X3F1ZXVl ZF9zaWduYWxzOw0KIGV4dGVybiBpbnQgc3lzcnFfZW5hYmxlZDsNCiANCiAv KiB0aGlzIGlzIG5lZWRlZCBmb3IgdGhlIHByb2NfZG9pbnR2ZWNfbWlubWF4 IGZvciBbZnNfXW92ZXJmbG93IFVJRCBhbmQgR0lEICovDQpAQCAtMjY4LDEw ICsyNjksMTIgQEANCiAJICZwYWdlcl9kYWVtb24sIHNpemVvZihwYWdlcl9k YWVtb25fdCksIDA2NDQsIE5VTEwsICZwcm9jX2RvaW50dmVjfSwNCiAJe1ZN X1BHVF9DQUNIRSwgInBhZ2V0YWJsZV9jYWNoZSIsIA0KIAkgJnBndF9jYWNo ZV93YXRlciwgMipzaXplb2YoaW50KSwgMDY0NCwgTlVMTCwgJnByb2NfZG9p bnR2ZWN9LA0KIAl7Vk1fUEFHRV9DTFVTVEVSLCAicGFnZS1jbHVzdGVyIiwg DQogCSAmcGFnZV9jbHVzdGVyLCBzaXplb2YoaW50KSwgMDY0NCwgTlVMTCwg JnByb2NfZG9pbnR2ZWN9LA0KKwl7Vk1fT09NX05PS0lMTCwgIm9vbS1uby1r aWxsIiwgDQorCSAmdm1fbm9raWxsLCAyNTYsIDA2NDQsIE5VTEwsICZwcm9j X2Rvc3RyaW5nLCAmc3lzY3RsX3N0cmluZ30sDQogCXswfQ0KIH07DQogDQog c3RhdGljIGN0bF90YWJsZSBwcm9jX3RhYmxlW10gPSB7DQogCXswfQ0KZGlm ZiAtckJVIDUgbGludXgtMi40LjMvbW0vbW1hcC5jIGxpbnV4LW9vbS9tbS9t bWFwLmMNCi0tLSBsaW51eC0yLjQuMy9tbS9tbWFwLmMJV2VkIE1hciAyOCAx Mjo1NTozNCAyMDAxDQorKysgbGludXgtb29tL21tL21tYXAuYwlXZWQgQXBy ICA0IDAwOjQxOjM5IDIwMDENCkBAIC0zNSw0NyArMzUsMTYzIEBADQogcGdw cm90X3QgcHJvdGVjdGlvbl9tYXBbMTZdID0gew0KIAlfX1AwMDAsIF9fUDAw MSwgX19QMDEwLCBfX1AwMTEsIF9fUDEwMCwgX19QMTAxLCBfX1AxMTAsIF9f UDExMSwNCiAJX19TMDAwLCBfX1MwMDEsIF9fUzAxMCwgX19TMDExLCBfX1Mx MDAsIF9fUzEwMSwgX19TMTEwLCBfX1MxMTENCiB9Ow0KIA0KLWludCBzeXNj dGxfb3ZlcmNvbW1pdF9tZW1vcnk7DQoraW50IHN5c2N0bF9vdmVyY29tbWl0 X21lbW9yeSA9IDA7DQorDQorLyogVW5mb3J0dW5hdGVseSB0aGVzZSBuZWVk IHRvIGJlIGxvbmdzIHNvIHdlIG5lZWQgYSBzcGlubG9jay4gKi8NCitsb25n IHZtX3Jlc2VydmVkID0gMDsNCitsb25nIHRvdGFsdm0gPSAwOw0KK3NwaW5s b2NrX3Qgdm1fbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsNCisNCit2b2lk IHZtX2ludmFsaWRhdGVfdG90YWxtZW0odm9pZCkNCit7DQorCWludCBmbGFn czsNCisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZtX2xvY2ssIGZsYWdzKTsN CisJdG90YWx2bSA9IDA7DQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZt X2xvY2ssIGZsYWdzKTsNCit9DQorDQorbG9uZyB2bV90b3RhbCh2b2lkKSAN Cit7DQorCWludCBmbGFnczsNCisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZt X2xvY2ssIGZsYWdzKTsNCisJaWYoIXRvdGFsdm0pIHsNCisJCXN0cnVjdCBz eXNpbmZvIGk7DQorCQlzaV9tZW1pbmZvKCZpKTsNCisJCXNpX3N3YXBpbmZv KCZpKTsNCisJCXRvdGFsdm0gPSBpLnRvdGFscmFtICsgaS50b3RhbHN3YXA7 DQorCX0NCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdm1fbG9jaywgZmxh Z3MpOwkNCisNCisJcmV0dXJuIHRvdGFsdm07DQorfQ0KIA0KIC8qIENoZWNr IHRoYXQgYSBwcm9jZXNzIGhhcyBlbm91Z2ggbWVtb3J5IHRvIGFsbG9jYXRl IGENCiAgKiBuZXcgdmlydHVhbCBtYXBwaW5nLg0KICAqLw0KLWludCB2bV9l bm91Z2hfbWVtb3J5KGxvbmcgcGFnZXMpDQorbG9uZyB2bV9lbm91Z2hfbWVt b3J5KGxvbmcgcGFnZXMpDQogew0KIAkvKiBTdHVwaWQgYWxnb3JpdGhtIHRv IGRlY2lkZSBpZiB3ZSBoYXZlIGVub3VnaCBtZW1vcnk6IHdoaWxlDQogCSAq IHNpbXBsZSwgaXQgaG9wZWZ1bGx5IHdvcmtzIGluIG1vc3Qgb2J2aW91cyBj YXNlcy4uIEVhc3kgdG8NCiAJICogZm9vbCBpdCwgYnV0IHRoaXMgc2hvdWxk IGNhdGNoIG1vc3QgbWlzdGFrZXMuDQogCSAqLw0KIAkvKiAyMy8xMS85OCBO SkM6IFNvbWV3aGF0IGxlc3Mgc3R1cGlkIHZlcnNpb24gb2YgYWxnb3JpdGht LA0KIAkgKiB3aGljaCB0cmllcyB0byBkbyAiVGhlUmlnaHRUaGluZyIuICBJ bnN0ZWFkIG9mIHVzaW5nIGhhbGYgb2YNCiAJICogKGJ1ZmZlcnMrY2FjaGUp LCB1c2UgdGhlIG1pbmltdW0gdmFsdWVzLiAgQWxsb3cgYW4gZXh0cmEgMiUN CiAJICogb2YgbnVtX3BoeXNwYWdlcyBmb3Igc2FmZXR5IG1hcmdpbi4NCiAJ ICovDQorCS8qIEZyb20gbm9uLW92ZXJjb21taXQgcGF0Y2g6IG9ubHkgYWxs b3cgdm1fcmVzZXJ2ZWQgdG8gZXhjZWVkDQorCSAqIHZtX3RvdGFsIGlmIHdl J3JlIHJvb3QuDQorCSAqLw0KIA0KLQlsb25nIGZyZWU7DQorCWludCBmbGFn czsNCisJbG9uZyBmcmVlID0gMDsNCiAJDQotICAgICAgICAvKiBTb21ldGlt ZXMgd2Ugd2FudCB0byB1c2UgbW9yZSBtZW1vcnkgdGhhbiB3ZSBoYXZlLiAq Lw0KLQlpZiAoc3lzY3RsX292ZXJjb21taXRfbWVtb3J5KQ0KLQkgICAgcmV0 dXJuIDE7DQorCXNwaW5fbG9ja19pcnFzYXZlKCZ2bV9sb2NrLCBmbGFncyk7 DQogDQorCS8qIEpETTogZm9yIHRlc3RpbmcgdGhlIG1lbW9yeS1hY2NvdW50 aW5nIGNvZGUsIGlmIFZNX0RFQlVHIGlzIHNldA0KKwkgKiB3ZSBjYWxjdWFs dGUgdGhlIGZyZWUgbWVtb3J5IGJvdGggd2F5cyBhbmQgY2hlY2sgb25lIGFn YWluc3QNCisJICogdGhlIG90aGVyLiAgT3RoZXJ3aXNlIHdlIGp1c3QgY2Fs Y3VsYXRlIHRoZSBvbmUgd2UgbmVlZC4NCisJICovDQorI2lmICghVk1fREVC VUcpDQorCWlmKHN5c2N0bF9vdmVyY29tbWl0X21lbW9yeSA+PSAwKSB7DQor I2VuZGlmDQogCWZyZWUgPSBhdG9taWNfcmVhZCgmYnVmZmVybWVtX3BhZ2Vz KTsNCiAJZnJlZSArPSBhdG9taWNfcmVhZCgmcGFnZV9jYWNoZV9zaXplKTsN CiAJZnJlZSArPSBucl9mcmVlX3BhZ2VzKCk7DQogCWZyZWUgKz0gbnJfc3dh cF9wYWdlczsNCi0JLyoNCi0JICogVGhlIGNvZGUgYmVsb3cgZG9lc24ndCBh Y2NvdW50IGZvciBmcmVlIHNwYWNlIGluIHRoZSBpbm9kZQ0KLQkgKiBhbmQg ZGVudHJ5IHNsYWIgY2FjaGUsIHNsYWIgY2FjaGUgZnJhZ21lbnRhdGlvbiwg aW5vZGVzIGFuZA0KLQkgKiBkZW50cmllcyB3aGljaCB3aWxsIGJlY29tZSBm cmVlYWJsZSB1bmRlciBWTSBsb2FkLCBldGMuDQotCSAqIExldHMganVzdCBo b3BlIGFsbCB0aGVzZSAoY29tcGxleCkgZmFjdG9ycyBiYWxhbmNlIG91dC4u Lg0KKw0KKwkvKiBUaGUgZGVudHJ5IGFuZCBpbm9kZSBjYWNoZXMgbWF5IGNv bnRhaW4gdW51c2VkIGVudHJpZXMuICBJIGhhdmUgbm8NCisJICogaWRlYSB3 aGV0aGVyIHRoZXNlIGNhY2hlcyBhY3R1YWxseSBzaHJpbmsgdW5kZXIgcHJl c3N1cmUsIGJ1dC4uLg0KKwkgKi8NCisJZnJlZSArPSAoZGVudHJ5X3N0YXQu bnJfdW51c2VkICogc2l6ZW9mKHN0cnVjdCBkZW50cnkpKSA+PiBQQUdFX1NI SUZUOw0KKwlmcmVlICs9IChpbm9kZXNfc3RhdC5ucl91bnVzZWQgKiBzaXpl b2Yoc3RydWN0IGlub2RlKSkgPj4gUEFHRV9TSElGVDsNCisNCisjaWYgVk1f REVCVUcNCisJaWYodm1fcmVzZXJ2ZWQgPCAodm1fdG90YWwoKSAtIGZyZWUp KSB7DQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2bV9lbm91Z2hfbWVtb3J5 OiB2bV9yZXNlcnZlZCAoJWxkKSB3YXMgaW5jb25zaXN0ZW50ICINCisJCQkJ IndpdGggYWxsb2NhdGVkIG1lbW9yeSAoJWxkKSBpbiBwcm9jZXNzICVkICgl cylcbiIsIA0KKwkJICAgICAgICAgICAgICAgIHZtX3Jlc2VydmVkLCB2bV90 b3RhbCgpIC0gZnJlZSwgY3VycmVudC0+cGlkLCBjdXJyZW50LT5jb21tKTsN CisJCS8qIE1ha2UgaXQgY29uc2lzdGVudCBmb3Igbm93ICovDQorCQl2bV9y ZXNlcnZlZCA9IHZtX3RvdGFsKCkgLSBmcmVlOw0KKyNlbmRpZg0KKwl9DQor DQorCWlmKHN5c2N0bF9vdmVyY29tbWl0X21lbW9yeSA8IDApDQorCQlmcmVl ID0gdm1fdG90YWwoKSAtIHZtX3Jlc2VydmVkOw0KKwkNCisJLyogQXR0ZW1w dCB0byBjdXJ0YWlsIG1lbW9yeSBhbGxvY2F0aW9ucyBiZWZvcmUgaGFyZCBP T00gb2NjdXJzLg0KKwkgKiBCYXNlZCBvbiBjdXJyZW50IHByb2Nlc3Mgc2l6 ZSwgd2hpY2ggaXMgaG9wZWZ1bGx5IGEgZ29vZCBhbmQgZmFzdCBoZXVyaXN0 aWMuDQorCSAqIEFsc28gZml4IGJ1ZyB3aGVyZSB0aGUgcmVhbCBPT00gbGlt aXQgb2YgKGZyZWUgPT0gZnJlZXBhZ2VzLm1pbikgaXMgbm90IHRha2VuIGlu dG8gYWNjb3VudC4NCisJICogSW4gZmFjdCwgd2UgdXNlIGZyZWVwYWdlcy5o aWdoIGFzIHRoZSB0aHJlc2hvbGQgdG8gbWFrZSBzdXJlIHRoZXJlJ3Mgc3Rp bGwgcm9vbSBmb3IgYnVmZmVycytjYWNoZS4NCisJICoNCisJICogLS0gSm9u YXRoYW4gIkNocm9tYXRpeCIgTW9ydG9uIFtKRE1dLCAyMDAxLTAzLTI0IHRv IDIwMDEtMDQtMDMNCisJICovDQorDQorCWlmKGN1cnJlbnQtPm1tKQ0KKwkJ ZnJlZSAtPSAoY3VycmVudC0+bW0tPnRvdGFsX3ZtIC8gNCkgKyBmcmVlcGFn ZXMuaGlnaDsNCisJZWxzZQ0KKwkJZnJlZSAtPSBmcmVlcGFnZXMubWluOw0K Kw0KKyNpZiBWTV9ERUJVRw0KKwlwcmludGsoS0VSTl9ERUJVRyAidm1fZW5v dWdoX21lbW9yeSgpOiBwcm9jZXNzICVkIHJlc2VydmluZyAlbGQgcGFnZXNc biIsDQorCQkJY3VycmVudC0+cGlkLCBwYWdlcyk7DQorI2VuZGlmDQorDQor CWlmKHBhZ2VzID4gZnJlZSkNCisJCWlmKCAhKHN5c2N0bF9vdmVyY29tbWl0 X21lbW9yeSA9PSAtMSAmJiBjdXJyZW50LT51aWQgPT0gMCkNCisJCQkJJiYg c3lzY3RsX292ZXJjb21taXRfbWVtb3J5ICE9IDEpDQorCQkJcGFnZXMgPSAw Ow0KKw0KKwl2bV9yZXNlcnZlZCArPSBwYWdlczsNCisJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmdm1fbG9jaywgZmxhZ3MpOw0KKwkJCQ0KKwlyZXR1cm4g cGFnZXM7DQorfQ0KKw0KKy8qIEFjY291bnQgZm9yIGZyZWVpbmcgdXAgdGhl IG1lbW9yeSAqLw0KK2lubGluZSB2b2lkIHZtX3JlbGVhc2VfbWVtb3J5KGxv bmcgcGFnZXMpDQorew0KKwlpbnQgZmxhZ3M7DQorCWxvbmcgZnJlZTsNCisN CisJc3Bpbl9sb2NrX2lycXNhdmUoJnZtX2xvY2ssIGZsYWdzKTsNCisNCisJ dm1fcmVzZXJ2ZWQgLT0gcGFnZXM7DQorDQorI2lmIFZNX0RFQlVHDQorCS8q IFBlcmZvcm0gc2FuaXR5IGNoZWNrICovICANCisJZnJlZSA9IGF0b21pY19y ZWFkKCZidWZmZXJtZW1fcGFnZXMpOw0KKwlmcmVlICs9IGF0b21pY19yZWFk KCZwYWdlX2NhY2hlX3NpemUpOw0KKwlmcmVlICs9IG5yX2ZyZWVfcGFnZXMo KTsNCisJZnJlZSArPSBucl9zd2FwX3BhZ2VzOw0KKyAgDQorCS8qIFRoZSBk ZW50cnkgYW5kIGlub2RlIGNhY2hlcyBtYXkgY29udGFpbiB1bnVzZWQgZW50 cmllcy4gIEkgaGF2ZSBubw0KKwkgKiBpZGVhIHdoZXRoZXIgdGhlc2UgY2Fj aGVzIGFjdHVhbGx5IHNocmluayB1bmRlciBwcmVzc3VyZSwgYnV0Li4uDQog CSAqLw0KIAlmcmVlICs9IChkZW50cnlfc3RhdC5ucl91bnVzZWQgKiBzaXpl b2Yoc3RydWN0IGRlbnRyeSkpID4+IFBBR0VfU0hJRlQ7DQogCWZyZWUgKz0g KGlub2Rlc19zdGF0Lm5yX3VudXNlZCAqIHNpemVvZihzdHJ1Y3QgaW5vZGUp KSA+PiBQQUdFX1NISUZUOw0KIA0KLQlyZXR1cm4gZnJlZSA+IHBhZ2VzOw0K KwlpZih2bV9yZXNlcnZlZCA8ICh2bV90b3RhbCgpIC0gZnJlZSkpIHsNCisJ CXByaW50ayhLRVJOX1dBUk5JTkcgInZtX2Vub3VnaF9tZW1vcnk6IHZtX3Jl c2VydmVkICglbGQpIHdhcyBpbmNvbnNpc3RlbnQgIg0KKwkJCQkid2l0aCBh bGxvY2F0ZWQgbWVtb3J5ICglbGQpIGluIHByb2Nlc3MgJWQgKCVzKVxuIiwg DQorCQkgICAgICAgICAgICAgICAgdm1fcmVzZXJ2ZWQsIHZtX3RvdGFsKCkg LSBmcmVlLCBjdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0pOw0KKwkJLyog TWFrZSBpdCBjb25zaXN0ZW50IGZvciBub3cgKi8NCisJCXZtX3Jlc2VydmVk ID0gdm1fdG90YWwoKSAtIGZyZWU7DQorCX0NCisjZW5kaWYNCisNCisJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmdm1fbG9jaywgZmxhZ3MpOw0KKw0KKyNp ZiBWTV9ERUJVRw0KKwlwcmludGsoS0VSTl9ERUJVRyAidm1fcmVsZWFzZV9t ZW1vcnkoKTogcHJvY2VzcyAlZCBmcmVlaW5nICVsZCBwYWdlc1xuIiwNCisJ CQljdXJyZW50LT5waWQsIHBhZ2VzKTsNCisjZW5kaWYNCiB9DQogDQogLyog UmVtb3ZlIG9uZSB2bSBzdHJ1Y3R1cmUgZnJvbSB0aGUgaW5vZGUncyBpX21h cHBpbmcgYWRkcmVzcyBzcGFjZS4gKi8NCiBzdGF0aWMgaW5saW5lIHZvaWQg X19yZW1vdmVfc2hhcmVkX3ZtX3N0cnVjdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKnZtYSkNCiB7DQpAQCAtMTk5LDEwICszMTUsMTEgQEANCiAJdW5zaWdu ZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBs b25nIHBnb2ZmKQ0KIHsNCiAJc3RydWN0IG1tX3N0cnVjdCAqIG1tID0gY3Vy cmVudC0+bW07DQogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYTsNCiAJ dW5zaWduZWQgaW50IHZtX2ZsYWdzOw0KKwlsb25nIHJlc2VydmVkID0gMDsN CiAJaW50IGNvcnJlY3Rfd2NvdW50ID0gMDsNCiAJaW50IGVycm9yOw0KIA0K IAlpZiAoZmlsZSAmJiAoIWZpbGUtPmZfb3AgfHwgIWZpbGUtPmZfb3AtPm1t YXApKQ0KIAkJcmV0dXJuIC1FTk9ERVY7DQpAQCAtMzc3LDEwICs0OTQsMTEg QEANCiAJLyogVW5kbyBhbnkgcGFydGlhbCBtYXBwaW5nIGRvbmUgYnkgYSBk ZXZpY2UgZHJpdmVyLiAqLw0KIAlmbHVzaF9jYWNoZV9yYW5nZShtbSwgdm1h LT52bV9zdGFydCwgdm1hLT52bV9lbmQpOw0KIAl6YXBfcGFnZV9yYW5nZSht bSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0 KTsNCiAJZmx1c2hfdGxiX3JhbmdlKG1tLCB2bWEtPnZtX3N0YXJ0LCB2bWEt PnZtX2VuZCk7DQogZnJlZV92bWE6DQorICAgICAgIHZtX3JlbGVhc2VfbWVt b3J5KHJlc2VydmVkKTsNCiAJa21lbV9jYWNoZV9mcmVlKHZtX2FyZWFfY2Fj aGVwLCB2bWEpOw0KIAlyZXR1cm4gZXJyb3I7DQogfQ0KIA0KIC8qIEdldCBh biBhZGRyZXNzIHJhbmdlIHdoaWNoIGlzIGN1cnJlbnRseSB1bm1hcHBlZC4N CkBAIC01NTYsMTAgKzY3NCwxMyBAQA0KIAl1bnNpZ25lZCBsb25nIGVuZCA9 IGFkZHIgKyBsZW47DQogDQogCWFyZWEtPnZtX21tLT50b3RhbF92bSAtPSBs ZW4gPj4gUEFHRV9TSElGVDsNCiAJaWYgKGFyZWEtPnZtX2ZsYWdzICYgVk1f TE9DS0VEKQ0KIAkJYXJlYS0+dm1fbW0tPmxvY2tlZF92bSAtPSBsZW4gPj4g UEFHRV9TSElGVDsNCisgICAgICAgaWYgKChhcmVhLT52bV9mbGFncyAmIChW TV9HUk9XU0RPV04gfCBWTV9XUklURSB8IFZNX1NIQVJFRCkpIA0KKyAgICAg ICAgICAgICAgID09IFZNX1dSSVRFKQ0KKyAgICAgICAgICAgICAgIHZtX3Jl bGVhc2VfbWVtb3J5KGxlbiA+PiBQQUdFX1NISUZUKTsNCiANCiAJLyogVW5t YXBwaW5nIHRoZSB3aG9sZSBhcmVhLiAqLw0KIAlpZiAoYWRkciA9PSBhcmVh LT52bV9zdGFydCAmJiBlbmQgPT0gYXJlYS0+dm1fZW5kKSB7DQogCQlpZiAo YXJlYS0+dm1fb3BzICYmIGFyZWEtPnZtX29wcy0+Y2xvc2UpDQogCQkJYXJl YS0+dm1fb3BzLT5jbG9zZShhcmVhKTsNCkBAIC03OTEsMTEgKzkxMiwxMSBA QA0KICAqLw0KIHVuc2lnbmVkIGxvbmcgZG9fYnJrKHVuc2lnbmVkIGxvbmcg YWRkciwgdW5zaWduZWQgbG9uZyBsZW4pDQogew0KIAlzdHJ1Y3QgbW1fc3Ry dWN0ICogbW0gPSBjdXJyZW50LT5tbTsNCiAJc3RydWN0IHZtX2FyZWFfc3Ry dWN0ICogdm1hOw0KLQl1bnNpZ25lZCBsb25nIGZsYWdzLCByZXR2YWw7DQor CXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHJldHZhbCwgcmVzZXJ2ZWQgPSAwOw0K IA0KIAlsZW4gPSBQQUdFX0FMSUdOKGxlbik7DQogCWlmICghbGVuKQ0KIAkJ cmV0dXJuIGFkZHI7DQogDQpAQCAtODIyLDExICs5NDMsMTEgQEANCiAJCXJl dHVybiAtRU5PTUVNOw0KIA0KIAlpZiAobW0tPm1hcF9jb3VudCA+IE1BWF9N QVBfQ09VTlQpDQogCQlyZXR1cm4gLUVOT01FTTsNCiANCi0JaWYgKCF2bV9l bm91Z2hfbWVtb3J5KGxlbiA+PiBQQUdFX1NISUZUKSkNCisJaWYgKCEocmVz ZXJ2ZWQgPSB2bV9lbm91Z2hfbWVtb3J5KGxlbiA+PiBQQUdFX1NISUZUKSkp DQogCQlyZXR1cm4gLUVOT01FTTsNCiANCiAJZmxhZ3MgPSBjYWxjX3ZtX2Zs YWdzKFBST1RfUkVBRHxQUk9UX1dSSVRFfFBST1RfRVhFQywNCiAJCQkJTUFQ X0ZJWEVEfE1BUF9QUklWQVRFKSB8IG1tLT5kZWZfZmxhZ3M7DQogDQpAQCAt ODQwLDE2ICs5NjIsMTkgQEANCiAJCQl2bWEtPnZtX2VuZCA9IGFkZHIgKyBs ZW47DQogCQkJZ290byBvdXQ7DQogCQl9DQogCX0JDQogDQorDQogCS8qDQog CSAqIGNyZWF0ZSBhIHZtYSBzdHJ1Y3QgZm9yIGFuIGFub255bW91cyBtYXBw aW5nDQogCSAqLw0KIAl2bWEgPSBrbWVtX2NhY2hlX2FsbG9jKHZtX2FyZWFf Y2FjaGVwLCBTTEFCX0tFUk5FTCk7DQotCWlmICghdm1hKQ0KKwlpZiAoIXZt YSkgew0KKwkJdm1fcmVsZWFzZV9tZW1vcnkocmVzZXJ2ZWQpOw0KIAkJcmV0 dXJuIC1FTk9NRU07DQorCX0NCiANCiAJdm1hLT52bV9tbSA9IG1tOw0KIAl2 bWEtPnZtX3N0YXJ0ID0gYWRkcjsNCiAJdm1hLT52bV9lbmQgPSBhZGRyICsg bGVuOw0KIAl2bWEtPnZtX2ZsYWdzID0gZmxhZ3M7DQpAQCAtOTA4LDEwICsx MDMzLDEzIEBADQogCQltbS0+bWFwX2NvdW50LS07DQogCQlyZW1vdmVfc2hh cmVkX3ZtX3N0cnVjdChtcG50KTsNCiAJCXphcF9wYWdlX3JhbmdlKG1tLCBz dGFydCwgc2l6ZSk7DQogCQlpZiAobXBudC0+dm1fZmlsZSkNCiAJCQlmcHV0 KG1wbnQtPnZtX2ZpbGUpOw0KKyAgICAgICAgICAgICAgIGlmICgobXBudC0+ dm1fZmxhZ3MgJiAoVk1fR1JPV1NET1dOIHwgVk1fV1JJVEUgfCBWTV9TSEFS RUQpKSANCisgICAgICAgICAgICAgICAgICAgICAgID09IFZNX1dSSVRFKQ0K KyAgICAgICAgICAgICAgICAgICAgICAgdm1fcmVsZWFzZV9tZW1vcnkoc2l6 ZSA+PiBQQUdFX1NISUZUKTsNCiAJCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVh X2NhY2hlcCwgbXBudCk7DQogCQltcG50ID0gbmV4dDsNCiAJfQ0KIAlmbHVz aF90bGJfbW0obW0pOw0KIA0KZGlmZiAtckJVIDUgbGludXgtMi40LjMvbW0v bXJlbWFwLmMgbGludXgtb29tL21tL21yZW1hcC5jDQotLS0gbGludXgtMi40 LjMvbW0vbXJlbWFwLmMJTW9uIE1hciAxOSAxNzoxNzo0MyAyMDAxDQorKysg bGludXgtb29tL21tL21yZW1hcC5jCVR1ZSBBcHIgIDMgMTA6MDc6MzMgMjAw MQ0KQEAgLTExLDEyICsxMSwxMCBAQA0KICNpbmNsdWRlIDxsaW51eC9zd2Fw Lmg+DQogDQogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+DQogI2luY2x1ZGUg PGFzbS9wZ2FsbG9jLmg+DQogDQotZXh0ZXJuIGludCB2bV9lbm91Z2hfbWVt b3J5KGxvbmcgcGFnZXMpOw0KLQ0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgKmdl dF9vbmVfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25n IGFkZHIpDQogew0KIAlwZ2RfdCAqIHBnZDsNCiAJcG1kX3QgKiBwbWQ7DQog CXB0ZV90ICogcHRlID0gTlVMTDsNCmRpZmYgLXJCVSA1IGxpbnV4LTIuNC4z L21tL29vbV9raWxsLmMgbGludXgtb29tL21tL29vbV9raWxsLmMNCi0tLSBs aW51eC0yLjQuMy9tbS9vb21fa2lsbC5jCVR1ZSBOb3YgMTQgMTA6NTY6NDYg MjAwMA0KKysrIGxpbnV4LW9vbS9tbS9vb21fa2lsbC5jCVR1ZSBBcHIgIDMg MDk6MjY6MDggMjAwMQ0KQEAgLTExLDE0MyArMTEsMjk1IEBADQogICoNCiAg KiAgU2luY2Ugd2Ugd29uJ3QgY2FsbCB0aGVzZSByb3V0aW5lcyBvZnRlbiAo b24gYSB3ZWxsLWNvbmZpZ3VyZWQNCiAgKiAgbWFjaGluZSkgdGhpcyBmaWxl IHdpbGwgZG91YmxlIGFzIGEgJ2NvZGluZyBndWlkZScgYW5kIGEgc2lnbnBv c3QNCiAgKiAgZm9yIG5ld2JpZSBrZXJuZWwgaGFja2Vycy4gSXQgZmVhdHVy ZXMgc2V2ZXJhbCBwb2ludGVycyB0byBtYWpvcg0KICAqICBrZXJuZWwgc3Vi c3lzdGVtcyBhbmQgaGludHMgYXMgdG8gd2hlcmUgdG8gZmluZCBvdXQgd2hh dCB0aGluZ3MgZG8uDQorICoNCisgKiAgUmV3b3JrZWQgQXByaWwgMjAwMSBi eSBKb25hdGhhbiAiQ2hyb21hdGl4IiBNb3J0b24gW0pETV0NCiAgKi8NCiAN CiAjaW5jbHVkZSA8bGludXgvbW0uaD4NCiAjaW5jbHVkZSA8bGludXgvc2No ZWQuaD4NCiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPg0KICNpbmNsdWRlIDxs aW51eC9zd2FwY3RsLmg+DQogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+DQog DQogLyogI2RlZmluZSBERUJVRyAqLw0KIA0KK2VudW0gew0KKwlmYWxzZSA9 IDAsDQorCXRydWUgPSAxDQorfTsNCisNCisvKiBBIGxpc3Qgb2YgUElEcyBh bmQvb3IgcHJvY2VzcyBuYW1lcyB3aGljaCBzaG91bGRuJ3QgYmUga2lsbGVk IGluIE9PTSBzaXR1YXRpb25zICovDQorY2hhciB2bV9ub2tpbGxbMjU2XSA9 IHswfTsNCisNCiAvKioNCiAgKiBpbnRfc3FydCAtIG9vbV9raWxsLmMgaW50 ZXJuYWwgZnVuY3Rpb24sIHJvdWdoIGFwcHJveGltYXRpb24gdG8gc3FydA0K ICAqIEB4OiBpbnRlZ2VyIG9mIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgc3Fy dA0KICAqIA0KICAqIEEgdmVyeSByb3VnaCBhcHByb3hpbWF0aW9uIHRvIHRo ZSBzcXJ0KCkgZnVuY3Rpb24uDQogICovDQotc3RhdGljIHVuc2lnbmVkIGlu dCBpbnRfc3FydCh1bnNpZ25lZCBpbnQgeCkNCitzdGF0aWMgdW5zaWduZWQg bG9uZyBpbnRfc3FydCh1bnNpZ25lZCBsb25nIHgpDQogew0KLQl1bnNpZ25l ZCBpbnQgb3V0ID0geDsNCisJdW5zaWduZWQgbG9uZyBvdXQgPSB4Ow0KIAl3 aGlsZSAoeCAmIH4odW5zaWduZWQgaW50KTEpIHggPj49Miwgb3V0ID4+PTE7 DQogCWlmICh4KSBvdXQgLT0gb3V0ID4+IDI7DQogCXJldHVybiAob3V0ID8g b3V0IDogMSk7DQogfQkNCiANCiAvKioNCisgKiBvb21fdW5raWxsYWJsZSAt IGRldGVybWluZSB3aGV0aGVyIGEgcHJvY2VzcyBpcyBpbiB0aGUgbGlzdCBv ZiAicGxlYXNlIGRvbid0IGh1cnQgbWUiDQorICogcHJvY2Vzc2VzLiAgVGhp cyBhbGxvd3Mgc3lzYWRtaW5zIHRvIGRlc2lnbmF0ZSBtaXNzaW9uLWNyaXRp Y2FsIHByb2Nlc3NlcyB3aGljaCB3aWxsDQorICogbmV2ZXIgYmUga2lsbGVk IHVubGVzcyBubyBhbHRlcm5hdGl2ZXMgcmVtYWluLiAgTkI6ICdpbml0JyBu ZWVkIG5vdCBiZSBleHBsaWNpdGx5DQorICogbGlzdGVkIGhlcmUsIHNpbmNl IGl0IGlzIGFscmVhZHkgZmlsdGVyZWQgb3V0IGJ5IG90aGVyIG1lYW5zLg0K KyAqLw0KK2ludCBvb21fdW5raWxsYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3Qg KnApDQorew0KKwkvKiBGb3IgZWFjaCBzcGFjZS1kZWxpbWl0ZWQgZW50cnkg aW4gdGhlIHZtX25va2lsbCBhcnJheSwgY2hlY2sgd2hldGhlciBpdCdzIGEg bnVtYmVyDQorCSAqIG9yIGEgbmFtZS4gIElmIGEgbnVtYmVyLCBtYXRjaCBp dCB0byB0aGUgUElEIG9mIHRoZSBzcGVjaWZpZWQgcHJvY2Vzcy4gIElmIGEg bmFtZSwNCisJICogbWF0Y2ggdG8gdGhlIG5hbWUuICBQcm9jZXNzIG5hbWVz IGNvbnNpc3RpbmcgZW50aXJlbHkgb2YgZGlnaXRzIGFyZSBub3Qgc3VwcG9y dGVkLg0KKwkgKi8NCisNCisJLyogQSBwb3RlbnRpYWwgcmFjZSBjb25kaXRp b24gZXhpc3RzIGhlcmUgd2hlbiB0aGUgdm1fbm9raWxsIHN0cmluZyBpcyBi ZWluZyBtb2RpZmllZA0KKwkgKiBhdCB0aGUgc2FtZSB0aW1lIGFzIE9PTSBp cyByZWFjaGVkLiAgVGhlIGNoYW5jZXMgb2YgdGhpcyBzaG91bGQgYmUgbWlu aW1hbCwgYW5kDQorCSAqIHNvbWUgY2FyZSBpcyB0YWtlbiB0byBtaW5pbWlz ZSB0aGUgZWZmZWN0cy4gIEluIHBhcnRpY3VsYXIsIHJ1bm5pbmcgb2ZmIHRo ZSBlbmQNCisJICogb2YgdGhlIGFycmF5IGlzIGd1YXJkZWQgYWdhaW5zdC4N CisJICovDQorDQorCWNoYXIgKndvcmRzdGFydCwgKndvcmRlbmQsICpwdHI7 DQorCWludCBjLCBwaWQ7DQorDQorCWZvcih3b3Jkc3RhcnQgPSB3b3JkZW5k ID0gdm1fbm9raWxsLCBjID0gcGlkID0gMDsNCisJCQljIDwgMjU2ICYmICgq d29yZGVuZCkgJiYgKCp3b3Jkc3RhcnQpOw0KKwkJCWMrKywgd29yZHN0YXJ0 ID0gd29yZGVuZCArIDEpIHsNCisNCisJCS8qIEZpbmQgdGhlIHN0YXJ0IG9m IHRoZSBuZXh0IHdvcmQgKi8NCisJCWZvciggOyAoKndvcmRzdGFydCA9PSAw IHx8ICp3b3Jkc3RhcnQgPT0gJyAnIHx8ICp3b3Jkc3RhcnQgPT0gJ1x0Jykg JiYgYyA8IDI1NjsgYysrLCB3b3Jkc3RhcnQrKykNCisJCQk7DQorDQorCQkv KiBGaW5kIHRoZSBlbmQgb2YgdGhpcyB3b3JkICovDQorCQlmb3Iod29yZGVu ZCA9IHdvcmRzdGFydDsgKndvcmRlbmQgIT0gMCAmJiAqd29yZGVuZCAhPSAn ICcgJiYgKndvcmRlbmQgIT0gJ1x0JyAmJiBjIDwgMjU2OyBjKyssIHdvcmRl bmQrKykNCisJCQk7DQorDQorCQkvKiBObyBkaWZmZXJlbmNlPyAgTXVzdCBi ZSBlbmQgb2Ygc3RyaW5nICovDQorCQlpZih3b3JkZW5kID09IHdvcmRzdGFy dCkNCisJCQlicmVhazsNCisNCisJCS8qIERldGVybWluZSB3aGV0aGVyIGl0 J3MgYSBudW1iZXIgb3IgbmFtZSAqLw0KKwkJZm9yKHBpZCA9IHRydWUsIHB0 ciA9IHdvcmRzdGFydDsgcHRyIDwgd29yZGVuZDsgcHRyKyspDQorCQkJaWYo KnB0ciA+ICc5JyB8fCAqcHRyIDwgJzAnKSB7DQorCQkJCXBpZCA9IGZhbHNl Ow0KKwkJCQlicmVhazsNCisJCQl9DQorDQorCQlpZihwaWQpIHsNCisJCQkv KiBEb2VzIHRoZSBwaWQgbWF0Y2g/ICovDQorCQkJcGlkID0gc2ltcGxlX3N0 cnRvbCh3b3Jkc3RhcnQsIDAsIDEwKTsNCisJCQlpZihwaWQgPT0gcC0+cGlk KQ0KKwkJCQlyZXR1cm4gdHJ1ZTsNCisJCX0gZWxzZSB7DQorCQkJLyogRG9l cyB0aGUgbmFtZSBtYXRjaD8gKi8NCisJCQlpZighcC0+Y29tbSkNCisJCQkJ Y29udGludWU7DQorCQkJaWYoIXN0cm5jbXAod29yZHN0YXJ0LCBwLT5jb21t LCB3b3JkZW5kIC0gd29yZHN0YXJ0KSAmJiBzdHJsZW4ocC0+Y29tbSkgPT0g KHdvcmRlbmQgLSB3b3Jkc3RhcnQpKQ0KKwkJCQlyZXR1cm4gdHJ1ZTsNCisJ CX0NCisNCisJfQ0KKw0KKwkvKiBObyBtYXRjaCwgc28gbm90aGluZyBzcGVj aWFsICovDQorCXJldHVybiBmYWxzZTsNCit9DQorDQorLyoqDQogICogb29t X2JhZG5lc3MgLSBjYWxjdWxhdGUgYSBudW1lcmljIHZhbHVlIGZvciBob3cg YmFkIHRoaXMgdGFzayBoYXMgYmVlbg0KICAqIEBwOiB0YXNrIHN0cnVjdCBv ZiB3aGljaCB0YXNrIHdlIHNob3VsZCBjYWxjdWxhdGUNCisgKiBAcGFzczog d2VpZ2h0IHJlZHVjdGlvbiBmYWN0b3IgZm9yIHRpbWUtYmFzZWQgY29ycmVj dGlvbnMNCiAgKg0KICAqIFRoZSBmb3JtdWxhIHVzZWQgaXMgcmVsYXRpdmVs eSBzaW1wbGUgYW5kIGRvY3VtZW50ZWQgaW5saW5lIGluIHRoZQ0KICAqIGZ1 bmN0aW9uLiBUaGUgbWFpbiByYXRpb25hbGUgaXMgdGhhdCB3ZSB3YW50IHRv IHNlbGVjdCBhIGdvb2QgdGFzaw0KLSAqIHRvIGtpbGwgd2hlbiB3ZSBydW4g b3V0IG9mIG1lbW9yeS4NCisgKiB0byBraWxsIHdoZW4gd2UgcnVuIG91dCBv ZiBtZW1vcnkuICBUaGlzIHNlbGVjdGlvbiBzaG91bGQgYWxzbyBiZQ0KKyAq IGludHVpdGl2ZSB0byB0aGUgYXZlcmFnZSBzeXNhZG1pbi4NCisgKg0KKyAq IFByb2Nlc3NlcyB3ZSBkb24ndCByZWFsbHkgd2FudCB0byBraWxsIGluY2x1 ZGU6DQorICogICBCYXRjaC1ydW4gcHJvY2Vzc2VzIHdoaWNoIGhhdmUgbG90 cyBvZiBjb21wdXRhdGlvbiBkb25lICh3aGljaCB3b3VsZCBiZSB3YXN0ZWQp DQorICogICBTeXN0ZW0gZGFlbW9ucyBvciBzZXJ2aWNlcyAoZWcuIG1haWwg c2VydmVyIG9yIGRhdGFiYXNlKQ0KKyAqICAgICAodXN1YWxseSB0aGVzZSBy dW4gZm9yIGEgbG9uZyB0aW1lIGFuZCBhcmUgd2VsbC1iZWhhdmVkKQ0KKyAq ICAgUHJvY2Vzc2VzIHN0YXJ0ZWQgYnkgdGhlIHN1cGVydXNlciAod2UgYXNz dW1lIGhlIGtub3dzIHdoYXQgaGUncyBkb2luZykNCisgKg0KKyAqIFByb2Nl c3NlcyB3ZSAqZG8qIHdhbnQgdG8ga2lsbCBpbmNsdWRlOg0KKyAqICAgVW5w cml2aWxlZ2VkLXVzZXIgcHJvY2Vzc2VzIHdoaWNoIGFyZSBncmF0dWl0b3Vz bHkgY29uc3VtaW5nIG1lbW9yeSB2ZXJ5IHF1aWNrbHkNCisgKiAgICAgKHVz dWFsbHkgdGhlc2Ugd2lsbCBoYXZlIHNob3J0IHJ1bnRpbWVzLCBDUFUgdXNh Z2UgYW5kIGhpZ2ggVUlEcykNCisgKiAgIFN5c3RlbSBkYWVtb25zIHdoaWNo IGhhdmUgc3VkZGVubHkgInNwcnVuZyBhIGxlYWsiICh0aGlzIGlzIGEgcmVs YXRpdmVseSByYXJlIGV2ZW50KQ0KKyAqDQorICogVGhlIGFib3ZlIHJ1bGVz IGFyZSBvbmx5IGd1aWRlbGluZXMgLSBmb3IgZXhhbXBsZSBpdCBtYWtlcyBt b3JlIHNlbnNlIHRvIGtpbGwgYQ0KKyAqIHZpcnR1YWxseS11bnVzZWQgbWFp bCBvciB3ZWIgc2VydmVyIHJhdGhlciB0aGFuIGFuIGludGVyYWN0aXZlIGNs aWVudCBvbiBhIHdvcmtzdGF0aW9uLA0KKyAqIHdoZXJlYXMgdGhlIHJldmVy c2UgbWlnaHQgYmUgdHJ1ZSBvbiBhIGJ1c3kgc2VydmVyLiAgSG93ZXZlciwg dGhpcyBpcyBwYXJ0aWFsbHkgYWNjb3VudGVkDQorICogZm9yIGJ5IHRoZSBz aW1wbGUgYWxnb3JpdGhtIGVtYmVkZGVkIGhlcmUgKGJ1c3kgc2VydmVycyBj b25zdW1lIENQVSwgcmlnaHQ/KS4NCisgKg0KKyAqIE9uIHRoZSBmaXJzdCBw YXNzIHRocm91Z2ggdGhlIGxpc3Qgb2YgcHJvY2Vzc2VzLCB0aGUgT09NIGtp bGxlciB1c2VzIChwYXNzID09IDApIHdoaWNoIHNob3VsZA0KKyAqIHdvcmsg d2VsbCBmb3IgbW9zdCBzaXR1YXRpb25zLiAgSWYgbm8gIm9idmlvdXMiIHRh cmdldCBzaG93cyB1cCwgdGhlIHBhc3MgbnVtYmVyIGlzDQorICogaW5jcmVh c2VkIG9uIGVhY2ggc3Vic2VxdWVudCBydW4gdG8gc2VsZWN0IGEgbGVzc2Vy IHdlaWdodCBvbiB0aGUgQ1BVIHRpbWUgYW5kIHJ1biB0aW1lIHZhbHVlcy4N CiAgKg0KLSAqIEdvb2QgaW4gdGhpcyBjb250ZXh0IG1lYW5zIHRoYXQ6DQot ICogMSkgd2UgbG9zZSB0aGUgbWluaW11bSBhbW91bnQgb2Ygd29yayBkb25l DQotICogMikgd2UgcmVjb3ZlciBhIGxhcmdlIGFtb3VudCBvZiBtZW1vcnkN Ci0gKiAzKSB3ZSBkb24ndCBraWxsIGFueXRoaW5nIGlubm9jZW50IG9mIGVh dGluZyB0b25zIG9mIG1lbW9yeQ0KLSAqIDQpIHdlIHdhbnQgdG8ga2lsbCB0 aGUgbWluaW11bSBhbW91bnQgb2YgcHJvY2Vzc2VzIChvbmUpDQotICogNSkg d2UgdHJ5IHRvIGtpbGwgdGhlIHByb2Nlc3MgdGhlIHVzZXIgZXhwZWN0cyB1 cyB0byBraWxsLCB0aGlzDQotICogICAgYWxnb3JpdGhtIGhhcyBiZWVuIG1l dGljdWxvdXNseSB0dW5lZCB0byBtZWV0IHRoZSBwcmluaWNpcGxlDQotICog ICAgb2YgbGVhc3Qgc3VycHJpc2UgLi4uIChiZSBjYXJlZnVsIHdoZW4geW91 IGNoYW5nZSBpdCkNCisgKiBJbiB0aGlzIHdheSwgbG9uZy1ydW5uaW5nIHBy b2Nlc3NlcyB3aWxsIHN0aWxsIGdldCB0ZXJtaW5hdGVkIGlmIHRoZXkgc3By aW5nIGEgbGVhaywgd2hlbiBubw0KKyAqIG90aGVyICJvYnZpb3VzbHkgYmFk IiAoaWUuIHNob3J0bGl2ZWQgYW5kIGh1Z2UpIHByb2Nlc3NlcyBhcmUgbGVm dCBpbiB0aGUgc3lzdGVtLg0KICAqLw0KIA0KLXN0YXRpYyBpbnQgYmFkbmVz cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApDQorc3RhdGljIHVuc2lnbmVkIGxv bmcgYmFkbmVzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBwYXNzKQ0K IHsNCi0JaW50IHBvaW50cywgY3B1X3RpbWUsIHJ1bl90aW1lOw0KKwl1bnNp Z25lZCBsb25nIHBvaW50cywgY3B1X3RpbWUsIHJ1bl90aW1lLCB0Ow0KIA0K KwkvKiBJZiB0aGVyZSdzIG5vIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhp cyBwcm9jZXNzLCBraWxsaW5nIGl0IHdpbGwgaGVscCBub3RoaW5nICovDQog CWlmICghcC0+bW0pDQogCQlyZXR1cm4gMDsNCi0JLyoNCi0JICogVGhlIG1l bW9yeSBzaXplIG9mIHRoZSBwcm9jZXNzIGlzIHRoZSBiYXNpcyBmb3IgdGhl IGJhZG5lc3MuDQorDQorCS8qIERvbid0ICpldmVyKiB0cnkgdG8ga2lsbCBp bml0IQ0KKwkgKiBJZiB0aGF0J3MgdGhlIG9ubHkgcHJvY2VzcyBsZWZ0LCB3 ZSdsbCBwYW5pYyBhbnl3YXkuLi4NCiAJICovDQotCXBvaW50cyA9IHAtPm1t LT50b3RhbF92bTsNCisJaWYgKHAtPnBpZCA9PSAxIHx8ICghc3RyY21wKCJp bml0IiwgcC0+Y29tbSkgJiYgcC0+dWlkID09IDApKQ0KKwkJcmV0dXJuIDA7 DQogDQogCS8qDQotCSAqIENQVSB0aW1lIGlzIGluIHNlY29uZHMgYW5kIHJ1 biB0aW1lIGlzIGluIG1pbnV0ZXMuIFRoZXJlIGlzIG5vDQotCSAqIHBhcnRp Y3VsYXIgcmVhc29uIGZvciB0aGlzIG90aGVyIHRoYW4gdGhhdCBpdCB0dXJu ZWQgb3V0IHRvIHdvcmsNCi0JICogdmVyeSB3ZWxsIGluIHByYWN0aWNlLiBU aGlzIGlzIG5vdCBzYWZlIGFnYWluc3QgamlmZmllIHdyYXBzDQotCSAqIGJ1 dCB3ZSBkb24ndCBjYXJlIF90aGF0XyBtdWNoLi4uDQorCSAqIFRoZSBtZW1v cnkgc2l6ZSBvZiB0aGUgcHJvY2VzcyBpcyB0aGUgbWFpbiBiYWRuZXNzIGZh Y3Rvci4NCisJICogU2NhbGUgaXQgdXAgc28gaXQncyByb3VnaGx5IG5vcm1h bGlzZWQgcmVsYXRpdmUgdG8gdGhlIHRvdGFsIFZNIGluIHRoZSBzeXN0ZW0u DQorCSAqIE9uIG1vc3Qgc3lzdGVtcywgdW5zaWduZWQgbG9uZyBpcyAzMiBi aXRzIC0gbm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgY29kZSB3aWxsDQorCSAq IHByb2R1Y2UgYmlnZ2VyIG51bWJlcnMgb24gc3lzdGVtcyB3aGVyZSB0aGlz IGlzIG5vdCB0aGUgY2FzZS4NCiAJICovDQotCWNwdV90aW1lID0gKHAtPnRp bWVzLnRtc191dGltZSArIHAtPnRpbWVzLnRtc19zdGltZSkgPj4gKFNISUZU X0haICsgMyk7DQotCXJ1bl90aW1lID0gKGppZmZpZXMgLSBwLT5zdGFydF90 aW1lKSA+PiAoU0hJRlRfSFogKyAxMCk7DQotDQotCXBvaW50cyAvPSBpbnRf c3FydChjcHVfdGltZSk7DQotCXBvaW50cyAvPSBpbnRfc3FydChpbnRfc3Fy dChydW5fdGltZSkpOw0KKwlwb2ludHMgPSBwLT5tbS0+dG90YWxfdm07DQor CXQgPSB2bV90b3RhbCgpOw0KKwl3aGlsZSh0IDwgKDEgPDwgKHNpemVvZih1 bnNpZ25lZCBsb25nKSAtIDEpKSkgew0KKwkJdCA8PD0gMTsNCisJCXBvaW50 cyA8PD0gMTsNCisJfQ0KIA0KIAkvKg0KLQkgKiBOaWNlZCBwcm9jZXNzZXMg YXJlIG1vc3QgbGlrZWx5IGxlc3MgaW1wb3J0YW50LCBzbyBkb3VibGUNCi0J ICogdGhlaXIgYmFkbmVzcyBwb2ludHMuDQorCSAqIFByb2Nlc3Mgd2l0aCBw bGVudHkgb2YgcnVudGltZSBhbmQgY3B1IHRpbWUgdW5kZXIgdGhlaXIgYmVs dCBhcmUgbW9yZSBsaWtlbHkgdG8gYmUNCisJICogd2VsbC1iZWhhdmVkIGFu ZC9vciBpbXBvcnRhbnQsIHNvIGdpdmUgdGhlbSBiaWcgZ29vZG5lc3MgZmFj dG9ycy4gIFRoZXNlIHJlZHVjZSB0bw0KKwkgKiAidmlydHVhbGx5IGltbXVu ZSIgYWZ0ZXIgYWJvdXQgMSB3ZWVrIHVwdGltZSBhbmQgMSBkYXkgQ1BVIHRp bWUsIG9yIHByb3BvcnRpb25hbGx5DQorCSAqIGVxdWl2YWxlbnQgdmFsdWVz LiAgU2hvcnQtbGl2ZWQgcHJvY2Vzc2VzICh3aXRoLCBzYXkgdW5kZXIgMTAg bWlucyBDUFUgdGltZSBhbmQgMQ0KKwkgKiBob3VyIHJ1bnRpbWUgb3IgcHJv cG9ydGlvbmF0ZSBiYWxhbmNlcykgd2lsbCBnZXQgbmljZSBiaWcgc2NvcmVz IGRlcGVuZGluZyBtb3N0bHkNCisJICogb24gdGhlaXIgc2l6ZS4NCisJICoN CisJICogQ1BVIHRpbWUgaXMgaW4gc2Vjb25kcyBhbmQgcnVuIHRpbWUgaXMg aW4gbWludXRlcyAod2VsbCwgYWN0dWFsbHksIDY0IHNlY29uZHMpLg0KKwkg KiBUaGVyZSBpcyBubyBwYXJ0aWN1bGFyIHJlYXNvbiBmb3IgdGhpcyBvdGhl ciB0aGFuIHRoYXQgaXQgdHVybmVkIG91dCB0byB3b3JrDQorCSAqIHJlYXNv bmFibHkgd2VsbCBpbiBhIGZldyBjb21tb24gdGVzdGNhc2VzLg0KIAkgKi8N Ci0JaWYgKHAtPm5pY2UgPiAwKQ0KLQkJcG9pbnRzICo9IDI7DQorCWNwdV90 aW1lID0gKHAtPnRpbWVzLnRtc191dGltZSArIHAtPnRpbWVzLnRtc19zdGlt ZSkgPj4gU0hJRlRfSFo7DQorCXJ1bl90aW1lID0gKCh1bnNpZ25lZCBsb25n KSBqaWZmaWVzIC0gcC0+c3RhcnRfdGltZSkgPj4gKFNISUZUX0haICsgNik7 DQorCQ0KKwkvKiBJZiB0aGlzIGlzbid0IHRoZSBmaXJzdCBwYXNzLCBnaXZl IHRoZSBDUFUgYW5kIHJ1biB0aW1lcyBwcm9ncmVzc2l2ZWx5IGxlc3Mgd2Vp Z2h0ICovDQorCXdoaWxlKHBhc3MgPiAwKSB7DQorCQlwYXNzLS07DQorCQlj cHVfdGltZSA9IGludF9zcXJ0KGNwdV90aW1lKTsNCisJCXJ1bl90aW1lID0g aW50X3NxcnQocnVuX3RpbWUpOw0KKwl9DQorDQorCS8qIE1ha2Ugc3VyZSBu byBkaXZpZGUtYnktemVybyBjcmFwIGhhcHBlbnMgbGF0ZXIsIGZvciB2ZXJ5 IG5ldyBwcm9jZXNzZXMgKi8NCisJaWYoIWNwdV90aW1lKQ0KKwkJY3B1X3Rp bWUgPSAxOw0KKwlpZighcnVuX3RpbWUpDQorCQlydW5fdGltZSA9IDE7DQor DQorCS8qIEFwcGx5IHRoZSB3ZWlnaHRzIC0gc2luY2UgdGhlc2UgYXJlIGdv b2RuZXNzIGZhY3RvcnMsIHRoZXkgcmVkdWNlIHRoZSBiYWRuZXNzIGZhY3Rv ciAqLw0KKwlwb2ludHMgLz0gY3B1X3RpbWU7DQorCXBvaW50cyAvPSBydW5f dGltZTsNCiANCiAJLyoNCiAJICogU3VwZXJ1c2VyIHByb2Nlc3NlcyBhcmUg dXN1YWxseSBtb3JlIGltcG9ydGFudCwgc28gd2UgbWFrZSBpdA0KIAkgKiBs ZXNzIGxpa2VseSB0aGF0IHdlIGtpbGwgdGhvc2UuDQogCSAqLw0KIAlpZiAo Y2FwX3QocC0+Y2FwX2VmZmVjdGl2ZSkgJiBDQVBfVE9fTUFTSyhDQVBfU1lT X0FETUlOKSB8fA0KIAkJCQlwLT51aWQgPT0gMCB8fCBwLT5ldWlkID09IDAp DQotCQlwb2ludHMgLz0gNDsNCisJCXBvaW50cyAvPSAyOw0KKw0KKwkvKiBN dWNoIHRoZSBzYW1lIGdvZXMgZm9yIHByb2Nlc3NlcyB3aXRoIGxvdyBVSURz IChGSVhNRTogbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZSkgKi8NCisJaWYocC0+ dWlkIDwgMTAwIHx8IHAtPmV1aWQgPCAxMDApDQorCQlwb2ludHMgLz0gMjsN CiANCiAJLyoNCiAJICogV2UgZG9uJ3Qgd2FudCB0byBraWxsIGEgcHJvY2Vz cyB3aXRoIGRpcmVjdCBoYXJkd2FyZSBhY2Nlc3MuDQogCSAqIE5vdCBvbmx5 IGNvdWxkIHRoYXQgbWVzcyB1cCB0aGUgaGFyZHdhcmUsIGJ1dCB1c3VhbGx5 IHVzZXJzDQogCSAqIHRlbmQgdG8gb25seSBoYXZlIHRoaXMgZmxhZyBzZXQg b24gYXBwbGljYXRpb25zIHRoZXkgdGhpbmsNCiAJICogb2YgYXMgaW1wb3J0 YW50Lg0KIAkgKi8NCiAJaWYgKGNhcF90KHAtPmNhcF9lZmZlY3RpdmUpICYg Q0FQX1RPX01BU0soQ0FQX1NZU19SQVdJTykpDQogCQlwb2ludHMgLz0gNDsN Ci0jaWZkZWYgREVCVUcNCi0JcHJpbnRrKEtFUk5fREVCVUcgIk9PTWtpbGw6 IHRhc2sgJWQgKCVzKSBnb3QgJWQgcG9pbnRzXG4iLA0KLQlwLT5waWQsIHAt PmNvbW0sIHBvaW50cyk7DQorDQorCS8qIEFsd2F5cyByZXR1cm4gYXQgbGVh c3QgMSBpZiB0aGVyZSBpcyBhbnkgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0 aGUgcHJvY2VzcyAqLw0KKwlpZihwb2ludHMgPCAxKQ0KKwkJcG9pbnRzID0g MTsNCisNCisjaWYgZGVmaW5lZChERUJVRykgfHwgVk1fREVCVUcNCisJcHJp bnRrKEtFUk5fREVCVUcgIk9PTWtpbGw6IHRhc2sgJWQgKCVzKSBnb3QgJWx1 IHBvaW50cyBvbiBwYXNzICVkICh3aXRoIGNwdXRpbWUgJWx1IGFuZCBydW50 aW1lICVsdSlcbiIsDQorCXAtPnBpZCwgcC0+Y29tbSwgcG9pbnRzLCBwYXNz LCBjcHVfdGltZSwgcnVuX3RpbWUpOw0KICNlbmRpZg0KIAlyZXR1cm4gcG9p bnRzOw0KIH0NCiANCiAvKg0KICAqIFNpbXBsZSBzZWxlY3Rpb24gbG9vcC4g V2UgY2hvc2UgdGhlIHByb2Nlc3Mgd2l0aCB0aGUgaGlnaGVzdA0KICAqIG51 bWJlciBvZiAncG9pbnRzJy4gV2UgbmVlZCB0aGUgbG9ja3MgdG8gbWFrZSBz dXJlIHRoYXQgdGhlDQogICogbGlzdCBvZiB0YXNrIHN0cnVjdHMgZG9lc24n dCBjaGFuZ2Ugd2hpbGUgd2UgbG9vayB0aGUgb3RoZXIgd2F5Lg0KICAqDQor ICogQXMgZG9jdW1lbnRlZCBmb3IgYmFkbmVzcygpLCB3ZSByZXNjYW4gdGhl IHRhc2sgbGlzdCAod2l0aCBkaWZmZXJlbnQgd2VpZ2h0cykgaWYgd2UgZG9u J3QgZmluZCBhDQorICogcGFydGljdWxhcmx5ICJiYWQiIHByb2Nlc3MuICBX ZSBwdXQgYSBjYXAgb24gaG93IG1hbnkgdGltZXMgd2UgdHJ5IHRoaXMsIHRo b3VnaCAtIGEgbWFjaGluZSBmdWxsDQorICogb2YgbWFueSBzbWFsbCBwcm9j ZXNzZXMgY2FuIHN0aWxsIGdvIE9PTS4NCisgKg0KICAqIChub3QgZG9jYm9v a2VkLCB3ZSBkb24ndCB3YW50IHRoaXMgb25lIGNsdXR0ZXJpbmcgdXAgdGhl IG1hbnVhbCkNCiAgKi8NCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICog c2VsZWN0X2JhZF9wcm9jZXNzKHZvaWQpDQogew0KLQlpbnQgbWF4cG9pbnRz ID0gMDsNCisJdW5zaWduZWQgbG9uZyBtYXhwb2ludHMgPSAwOw0KIAlzdHJ1 Y3QgdGFza19zdHJ1Y3QgKnAgPSBOVUxMOw0KIAlzdHJ1Y3QgdGFza19zdHJ1 Y3QgKmNob3NlbiA9IE5VTEw7DQorCWludCBwYXNzID0gMDsNCisJaW50IHN1 cHByZXNzX3Vua2lsbGFibGUgPSAwOw0KIA0KIAlyZWFkX2xvY2soJnRhc2ts aXN0X2xvY2spOw0KLQlmb3JfZWFjaF90YXNrKHApIHsNCi0JCWlmIChwLT5w aWQpIHsNCi0JCQlpbnQgcG9pbnRzID0gYmFkbmVzcyhwKTsNCi0JCQlpZiAo cG9pbnRzID4gbWF4cG9pbnRzKSB7DQotCQkJCWNob3NlbiA9IHA7DQotCQkJ CW1heHBvaW50cyA9IHBvaW50czsNCi0JCQl9DQorCWZvciggOyBzdXBwcmVz c191bmtpbGxhYmxlIDwgMjsgc3VwcHJlc3NfdW5raWxsYWJsZSsrKSB7DQor CQlpZihzdXBwcmVzc191bmtpbGxhYmxlKQ0KKwkJCXByaW50ayhLRVJOX0VS UiAiT09Na2lsbDogdW5hYmxlIHRvIGZpbmQgYSBub24tY3JpdGljYWwgcHJv Y2VzcyB0byBraWxsIVxuIik7DQorDQorCQlkbyB7DQorCQkJZm9yX2VhY2hf dGFzayhwKSB7DQorCQkJCWlmIChwLT5waWQgJiYgKCFvb21fdW5raWxsYWJs ZShwKSB8fCBzdXBwcmVzc191bmtpbGxhYmxlKSkgew0KKwkJCQkJdW5zaWdu ZWQgbG9uZyBwb2ludHMgPSBiYWRuZXNzKHAsIHBhc3MpOw0KKwkJCQkJaWYg KHBvaW50cyA+IG1heHBvaW50cykgew0KKwkJCQkJCWNob3NlbiA9IHA7DQor CQkJCQkJbWF4cG9pbnRzID0gcG9pbnRzOw0KIAkJfQ0KKwkJCQl9IGVsc2Ug ew0KKyNpZiBkZWZpbmVkKERFQlVHKSB8fCBWTV9ERUJVRw0KKwkJCQkJcHJp bnRrKEtFUk5fREVCVUcgIk9PTWtpbGw6IHRhc2sgJWQgKCVzKSBza2lwcGVk IGR1ZSB0byB2bV9ub2tpbGwgbGlzdFxuIiwNCisJCQkJCQkJcC0+cGlkLCBw LT5jb21tKTsNCisjZW5kaWYNCisJIAkJCX0NCisJCQl9DQorCQkJcGFzcysr Ow0KKwkJfSB3aGlsZShtYXhwb2ludHMgPCAxMDI0ICYmIHBhc3MgPCAxMCk7 DQorCQlpZihtYXhwb2ludHMgPiAxKQ0KKwkJCWJyZWFrOw0KIAl9DQogCXJl YWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsNCisNCisJcHJpbnRrKEtFUk5f SU5GTyAiT3V0IG9mIE1lbW9yeTogU2VsZWN0ZWQgcHJvY2VzcyB3aXRoIGJh ZG5lc3MgJWx1IG9uIHBhc3MgJWRcbiIsDQorCSAgICAgICBtYXhwb2ludHMs IHBhc3MgLSAxKTsNCisNCiAJcmV0dXJuIGNob3NlbjsNCiB9DQogDQogLyoq DQotICogb29tX2tpbGwgLSBraWxsIHRoZSAiYmVzdCIgcHJvY2VzcyB3aGVu IHdlIHJ1biBvdXQgb2YgbWVtb3J5DQorICogb29tX2tpbGwgLSBraWxsIHRo ZSBtb3N0IGFwcHJvcHJpYXRlIHByb2Nlc3Mgd2hlbiB3ZSBydW4gb3V0IG9m IG1lbW9yeQ0KICAqDQogICogSWYgd2UgcnVuIG91dCBvZiBtZW1vcnksIHdl IGhhdmUgdGhlIGNob2ljZSBiZXR3ZWVuIGVpdGhlcg0KICAqIGtpbGxpbmcg YSByYW5kb20gdGFzayAoYmFkKSwgbGV0dGluZyB0aGUgc3lzdGVtIGNyYXNo ICh3b3JzZSkNCiAgKiBPUiB0cnkgdG8gYmUgc21hcnQgYWJvdXQgd2hpY2gg cHJvY2VzcyB0byBraWxsLiBOb3RlIHRoYXQgd2UNCiAgKiBkb24ndCBoYXZl IHRvIGJlIHBlcmZlY3QgaGVyZSwgd2UganVzdCBoYXZlIHRvIGJlIGdvb2Qu DQogICoNCiAgKiBXZSBtdXN0IGJlIGNhcmVmdWwgdGhvdWdoIHRvIG5ldmVy IHNlbmQgU0lHS0lMTCBhIHByb2Nlc3Mgd2l0aA0KLSAqIENBUF9TWVNfUkFX X0lPIHNldCwgc2VuZCBTSUdURVJNIGluc3RlYWQgKGJ1dCBpdCdzIHVubGlr ZWx5IHRoYXQNCi0gKiB3ZSBzZWxlY3QgYSBwcm9jZXNzIHdpdGggQ0FQX1NZ U19SQVdfSU8gc2V0KS4NCisgKiBDQVBfU1lTX1JBV19JTyBzZXQsIHNlbmQg U0lHVEVSTSBpbnN0ZWFkLg0KICAqLw0KIHZvaWQgb29tX2tpbGwodm9pZCkN CiB7DQogDQogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IHNlbGVjdF9iYWRf cHJvY2VzcygpOw0KQEAgLTE4OSwyMiArMzQxLDMxIEBADQogICogUmV0dXJu cyAwIGlmIHRoZXJlIGlzIHN0aWxsIGVub3VnaCBtZW1vcnkgbGVmdCwNCiAg KiAxIHdoZW4gd2UgYXJlIG91dCBvZiBtZW1vcnkgKG90aGVyd2lzZSkuDQog ICovDQogaW50IG91dF9vZl9tZW1vcnkodm9pZCkNCiB7DQotCXN0cnVjdCBz eXNpbmZvIHN3cF9pbmZvOw0KKwlsb25nIGZyZWU7DQogDQogCS8qIEVub3Vn aCBmcmVlIG1lbW9yeT8gIE5vdCBPT00uICovDQotCWlmIChucl9mcmVlX3Bh Z2VzKCkgPiBmcmVlcGFnZXMubWluKQ0KKwlmcmVlID0gbnJfZnJlZV9wYWdl cygpOw0KKwlpZiAoZnJlZSA+IGZyZWVwYWdlcy5taW4pDQorCQlyZXR1cm4g MDsNCisNCisJaWYgKGZyZWUgKyBucl9pbmFjdGl2ZV9jbGVhbl9wYWdlcygp ID4gZnJlZXBhZ2VzLmxvdykNCiAJCXJldHVybiAwOw0KIA0KLQlpZiAobnJf ZnJlZV9wYWdlcygpICsgbnJfaW5hY3RpdmVfY2xlYW5fcGFnZXMoKSA+IGZy ZWVwYWdlcy5sb3cpDQorCS8qDQorCSAqIEJ1ZmZlcnMgYW5kIGNhY2hlcyBj YW4gYmUgZnJlZWQgdXAgKEpvbmF0aGFuICJDaHJvbWF0aXgiIE1vcnRvbikN CisJICogRml4ZXMgYnVnIHdoZXJlIHN5c3RlbXMgd2l0aCB0b25zIG9mICJm cmVlIiBSQU0gd2VyZSBlcnJvbmVvdXNseSBkZXRlY3RpbmcgT09NLg0KKwkg Ki8NCisJZnJlZSArPSBhdG9taWNfcmVhZCgmYnVmZmVybWVtX3BhZ2VzKTsN CisJZnJlZSArPSBhdG9taWNfcmVhZCgmcGFnZV9jYWNoZV9zaXplKTsNCisJ aWYgKGZyZWUgPiBmcmVlcGFnZXMubG93KQ0KIAkJcmV0dXJuIDA7DQogDQog CS8qIEVub3VnaCBzd2FwIHNwYWNlIGxlZnQ/ICBOb3QgT09NLiAqLw0KLQlz aV9zd2FwaW5mbygmc3dwX2luZm8pOw0KLQlpZiAoc3dwX2luZm8uZnJlZXN3 YXAgPiAwKQ0KKwlpZiAobnJfc3dhcF9wYWdlcyA+IDApDQogCQlyZXR1cm4g MDsNCiANCiAJLyogRWxzZS4uLiAqLw0KIAlyZXR1cm4gMTsNCiB9DQpkaWZm IC1yQlUgNSBsaW51eC0yLjQuMy9tbS9zaG1lbS5jIGxpbnV4LW9vbS9tbS9z aG1lbS5jDQotLS0gbGludXgtMi40LjMvbW0vc2htZW0uYwlGcmkgTWFyICAy IDE1OjE2OjU5IDIwMDENCisrKyBsaW51eC1vb20vbW0vc2htZW0uYwlUdWUg QXByICAzIDA5OjMyOjM1IDIwMDENCkBAIC04NDIsMTEgKzg0MiwxMCBAQA0K IAlpbnQgZXJyb3I7DQogCXN0cnVjdCBmaWxlICpmaWxlOw0KIAlzdHJ1Y3Qg aW5vZGUgKiBpbm9kZTsNCiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCAqcm9v dDsNCiAJc3RydWN0IHFzdHIgdGhpczsNCi0JaW50IHZtX2Vub3VnaF9tZW1v cnkobG9uZyBwYWdlcyk7DQogDQogCWVycm9yID0gLUVOT01FTTsNCiAJaWYg KCF2bV9lbm91Z2hfbWVtb3J5KChzaXplKSA+PiBQQUdFX1NISUZUKSkNCiAJ CWdvdG8gb3V0Ow0KIA0KZGlmZiAtckJVIDUgbGludXgtMi40LjMvbW0vc3dh cGZpbGUuYyBsaW51eC1vb20vbW0vc3dhcGZpbGUuYw0KLS0tIGxpbnV4LTIu NC4zL21tL3N3YXBmaWxlLmMJVGh1IE1hciAyMiAwOToyMjoxNSAyMDAxDQor KysgbGludXgtb29tL21tL3N3YXBmaWxlLmMJVHVlIEFwciAgMyAwOTozMjo0 MCAyMDAxDQpAQCAtMTUsMTAgKzE1LDEzIEBADQogI2luY2x1ZGUgPGxpbnV4 L3BhZ2VtYXAuaD4NCiAjaW5jbHVkZSA8bGludXgvc2htLmg+DQogDQogI2lu Y2x1ZGUgPGFzbS9wZ3RhYmxlLmg+DQogDQorZXh0ZXJuIGludCBzeXNjdGxf b3ZlcmNvbW1pdF9tZW1vcnk7DQorZXh0ZXJuIHZvaWQgdm1faW52YWxpZGF0 ZV90b3RhbG1lbSh2b2lkKTsNCisNCiBzcGlubG9ja190IHN3YXBsb2NrID0g U1BJTl9MT0NLX1VOTE9DS0VEOw0KIHVuc2lnbmVkIGludCBucl9zd2FwZmls ZXM7DQogDQogc3RydWN0IHN3YXBfbGlzdF90IHN3YXBfbGlzdCA9IHstMSwg LTF9Ow0KIA0KQEAgLTQwNSwxMSArNDA4LDExIEBADQogDQogYXNtbGlua2Fn ZSBsb25nIHN5c19zd2Fwb2ZmKGNvbnN0IGNoYXIgKiBzcGVjaWFsZmlsZSkN CiB7DQogCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICogcCA9IE5VTEw7DQog CXN0cnVjdCBuYW1laWRhdGEgbmQ7DQotCWludCBpLCB0eXBlLCBwcmV2Ow0K KwlpbnQgaSwgdHlwZSwgcHJldiwgZmxhZ3M7DQogCWludCBlcnI7DQogCQ0K IAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpDQogCQlyZXR1cm4gLUVQ RVJNOw0KIA0KQEAgLTQ1MCwxMSArNDUzLDIyIEBADQogCQlzd2FwX2xpc3Qu bmV4dCA9IHN3YXBfbGlzdC5oZWFkOw0KIAl9DQogCW5yX3N3YXBfcGFnZXMg LT0gcC0+cGFnZXM7DQogCXN3YXBfbGlzdF91bmxvY2soKTsNCiAJcC0+Zmxh Z3MgPSBTV1BfVVNFRDsNCi0JZXJyID0gdHJ5X3RvX3VudXNlKHR5cGUpOw0K Kw0KKyAgICAgICAvKiBEb24ndCBhbGxvdyByZW1vdmFsIG9mIHN3YXAgaWYg aXQgd2lsbCBjYXVzZSBvdmVyY29tbWl0ICovDQorICAgICAgIHNwaW5fbG9j a19pcnFzYXZlKCZ2bV9sb2NrLCBmbGFncyk7DQorICAgICAgIGlmICgoc3lz Y3RsX292ZXJjb21taXRfbWVtb3J5IDwgMCkgJiYgDQorICAgICAgICAgICAg ICAgKHZtX3Jlc2VydmVkID4gdm1fdG90YWwoKSkpIHsNCisgICAgICAgICAg ICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2bV9sb2NrLCBmbGFncyk7 DQorICAgICAgICAgICAgICAgZXJyID0gLUVOT01FTTsNCisgICAgICAgfSBl bHNlIHsNCisgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZ2bV9sb2NrLCBmbGFncyk7DQorICAgICAgICAgICAgICAgZXJyID0gdHJ5 X3RvX3VudXNlKHR5cGUpOw0KKyAgICAgICB9DQorDQogCWlmIChlcnIpIHsN CiAJCS8qIHJlLWluc2VydCBzd2FwIHNwYWNlIGJhY2sgaW50byBzd2FwX2xp c3QgKi8NCiAJCXN3YXBfbGlzdF9sb2NrKCk7DQogCQlmb3IgKHByZXYgPSAt MSwgaSA9IHN3YXBfbGlzdC5oZWFkOyBpID49IDA7IHByZXYgPSBpLCBpID0g c3dhcF9pbmZvW2ldLm5leHQpDQogCQkJaWYgKHAtPnByaW8gPj0gc3dhcF9p bmZvW2ldLnByaW8pDQpAQCAtNDg1LDEwICs0OTksMTEgQEANCiANCiBvdXRf ZHB1dDoNCiAJdW5sb2NrX2tlcm5lbCgpOw0KIAlwYXRoX3JlbGVhc2UoJm5k KTsNCiBvdXQ6DQorCXZtX2ludmFsaWRhdGVfdG90YWxtZW0oKTsNCiAJcmV0 dXJuIGVycjsNCiB9DQogDQogaW50IGdldF9zd2FwYXJlYV9pbmZvKGNoYXIg KmJ1ZikNCiB7DQpAQCAtNzg5LDEwICs4MDQsMTEgQEANCiAJCSsrbGVhc3Rf cHJpb3JpdHk7DQogCXBhdGhfcmVsZWFzZSgmbmQpOw0KIG91dDoNCiAJaWYg KHN3YXBfaGVhZGVyKQ0KIAkJZnJlZV9wYWdlKChsb25nKSBzd2FwX2hlYWRl cik7DQorCXZtX2ludmFsaWRhdGVfdG90YWxtZW0oKTsNCiAJdW5sb2NrX2tl cm5lbCgpOw0KIAlyZXR1cm4gZXJyb3I7DQogfQ0KIA0KIHZvaWQgc2lfc3dh cGluZm8oc3RydWN0IHN5c2luZm8gKnZhbCkNCg== --1897407998-355975241-986416914=:6489-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/