From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from burns.conectiva (burns.conectiva [10.0.0.4]) by perninha.conectiva.com.br (Postfix) with SMTP id ECB3C38CF2 for ; Wed, 22 Aug 2001 13:49:47 -0300 (EST) Date: Wed, 22 Aug 2001 13:49:38 -0300 (BRST) From: Rik van Riel Subject: Re: Rmap code? In-Reply-To: <7040000.998430236@baldur> Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="655889-615121386-998498978=:31410" Sender: owner-linux-mm@kvack.org Return-Path: To: Dave McCracken Cc: linux-mm@kvack.org List-ID: --655889-615121386-998498978=:31410 Content-Type: TEXT/PLAIN; charset=US-ASCII [due to popular demand, cc'd to linux-mm ... if you feel like playing with this code, please don't do double work but tell the others] On Tue, 21 Aug 2001, Dave McCracken wrote: > On the MM Wiki page you said you have some code already written that does > reverse mapping. Could you possibly send me a copy of what you've done so > I can play with it? I'd like to experiment with what's possible, and it'd > make it a whole lot easier if I started with your ideas so far. Here you are. Note the TODO file in the top level directory, where some of the problems are noted down. Rik -- IA64: a worthy successor to the i860. http://www.surriel.com/ http://www.conectiva.com/ http://distro.conectiva.com/ --655889-615121386-998498978=:31410 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="2.4.7-pmap" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: 2.4.7-pmap Content-Disposition: attachment; filename="2.4.7-pmap" LS0tIGxpbnV4LTIuNC43L2ZzL2V4ZWMuYy5vcmlnCVRodSBKdWwgMjYgMTM6 MjI6MjYgMjAwMQ0KKysrIGxpbnV4LTIuNC43L2ZzL2V4ZWMuYwlUaHUgSnVs IDI2IDE2OjE5OjAyIDIwMDENCkBAIC0zNCw2ICszNCw3IEBADQogI2luY2x1 ZGUgPGxpbnV4L3BhZ2VtYXAuaD4NCiAjaW5jbHVkZSA8bGludXgvaGlnaG1l bS5oPg0KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPg0KKyNpbmNsdWRl IDxsaW51eC9zd2FwLmg+DQogI2RlZmluZSBfX05PX1ZFUlNJT05fXw0KICNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCiANCkBAIC0yNzcsOCArMjc4LDkg QEANCiAJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7DQogCWZsdXNoX3BhZ2Vf dG9fcmFtKHBhZ2UpOw0KIAlzZXRfcHRlKHB0ZSwgcHRlX21rZGlydHkocHRl X21rd3JpdGUobWtfcHRlKHBhZ2UsIFBBR0VfQ09QWSkpKSk7DQorCXBhZ2Vf YWRkX3BtYXAocGFnZSwgcHRlKTsNCisJc3Bpbl91bmxvY2soJnBhZ2VtYXBf bHJ1X2xvY2spOw0KIAl0c2stPm1tLT5yc3MrKzsNCi0Jc3Bpbl91bmxvY2so JnRzay0+bW0tPnBhZ2VfdGFibGVfbG9jayk7DQogDQogCS8qIG5vIG5lZWQg Zm9yIGZsdXNoX3RsYiAqLw0KIAlyZXR1cm47DQotLS0gbGludXgtMi40Ljcv bW0vZmlsZW1hcC5jLm9yaWcJVGh1IEp1bCAyNiAxMzoyMjowOSAyMDAxDQor KysgbGludXgtMi40LjcvbW0vZmlsZW1hcC5jCVRodSBKdWwgMjYgMTM6MjQ6 MzcgMjAwMQ0KQEAgLTUyMCw3ICs1MjAsOSBAQA0KIAlwYWdlLT5pbmRleCA9 IGluZGV4Ow0KIAlhZGRfcGFnZV90b19pbm9kZV9xdWV1ZShtYXBwaW5nLCBw YWdlKTsNCiAJYWRkX3BhZ2VfdG9faGFzaF9xdWV1ZShwYWdlLCBwYWdlX2hh c2gobWFwcGluZywgaW5kZXgpKTsNCi0JbHJ1X2NhY2hlX2FkZChwYWdlKTsN CisJLyogWFhYOiBhbHJlYWR5IG9uIHRoZSBpbmFjdGl2ZV9kaXJ0eSBsaXN0 IC4uLiBkZXVnbGlmeSEgKi8NCisJaWYgKCFQYWdlU3dhcENhY2hlKHBhZ2Up KQ0KKwkJbHJ1X2NhY2hlX2FkZChwYWdlKTsNCiAJc3Bpbl91bmxvY2soJnBh Z2VjYWNoZV9sb2NrKTsNCiB9DQogDQotLS0gbGludXgtMi40LjcvbW0vbWVt b3J5LmMub3JpZwlUaHUgSnVsIDI2IDEzOjIyOjA5IDIwMDENCisrKyBsaW51 eC0yLjQuNy9tbS9tZW1vcnkuYwlGcmkgSnVsIDI3IDExOjA4OjQwIDIwMDEN CkBAIC03Niw2ICs3Niw3IEBADQogc3RhdGljIGlubGluZSB2b2lkIGZyZWVf b25lX3BtZChwbWRfdCAqIGRpcikNCiB7DQogCXB0ZV90ICogcHRlOw0KKwlz dHJ1Y3QgcGFnZSAqIHBhZ2U7DQogDQogCWlmIChwbWRfbm9uZSgqZGlyKSkN CiAJCXJldHVybjsNCkBAIC04Niw2ICs4NywxMCBAQA0KIAl9DQogCXB0ZSA9 IHB0ZV9vZmZzZXQoZGlyLCAwKTsNCiAJcG1kX2NsZWFyKGRpcik7DQorCXBh Z2UgPSB2aXJ0X3RvX3BhZ2UocHRlKTsNCisJLyogQ2xlYXIgdGhlIHJldmVy c2UgbWFwcGluZyBzdHVmZiBvbiB0aGlzIHBhZ2UgdGFibGUgcGFnZS4gKi8N CisJcGFnZS0+bWFwcGluZyA9IDA7DQorCXBhZ2UtPmluZGV4ID0gMDsNCiAJ cHRlX2ZyZWUocHRlKTsNCiB9DQogDQpAQCAtMjE2LDcgKzIyMSw5IEBADQog CQkJCQlnb3RvIGNvbnRfY29weV9wdGVfcmFuZ2Vfbm9zZXQ7DQogCQkJCWlm ICghcHRlX3ByZXNlbnQocHRlKSkgew0KIAkJCQkJc3dhcF9kdXBsaWNhdGUo cHRlX3RvX3N3cF9lbnRyeShwdGUpKTsNCi0JCQkJCWdvdG8gY29udF9jb3B5 X3B0ZV9yYW5nZTsNCisJCQkJCS8qIFN3YXBwZWQgb3V0LCBza2lwIHRoZSBw bWFwIHN0dWZmLiAqLw0KKwkJCQkJc2V0X3B0ZShkc3RfcHRlLCBwdGUpOw0K KwkJCQkJZ290byBjb250X2NvcHlfcHRlX3JhbmdlX25vc2V0Ow0KIAkJCQl9 DQogCQkJCXB0ZXBhZ2UgPSBwdGVfcGFnZShwdGUpOw0KIAkJCQlpZiAoKCFW QUxJRF9QQUdFKHB0ZXBhZ2UpKSB8fCANCkBAIC0yMzYsNiArMjQzLDcgQEAN CiAJCQkJZ2V0X3BhZ2UocHRlcGFnZSk7DQogDQogY29udF9jb3B5X3B0ZV9y YW5nZToJCXNldF9wdGUoZHN0X3B0ZSwgcHRlKTsNCisJCQkJcGFnZV9hZGRf cG1hcChwdGVwYWdlLCBkc3RfcHRlKTsNCiBjb250X2NvcHlfcHRlX3Jhbmdl X25vc2V0OglhZGRyZXNzICs9IFBBR0VfU0laRTsNCiAJCQkJaWYgKGFkZHJl c3MgPj0gZW5kKQ0KIAkJCQkJZ290byBvdXRfdW5sb2NrOw0KQEAgLTMxMiw2 ICszMjAsOCBAQA0KIAkJaWYgKCFzaXplKQ0KIAkJCWJyZWFrOw0KIAkJcGFn ZSA9IHB0ZXBfZ2V0X2FuZF9jbGVhcihwdGUpOw0KKwkJaWYgKHB0ZV9wcmVz ZW50KHBhZ2UpKQ0KKwkJCXBhZ2VfcmVtb3ZlX3BtYXAocHRlX3BhZ2UocGFn ZSksIHB0ZSk7DQogCQlwdGUrKzsNCiAJCXNpemUtLTsNCiAJCWlmIChwdGVf bm9uZShwYWdlKSkNCkBAIC04NDksNiArODU5LDcgQEANCiAgKiAgLSBmbHVz aCB0aGUgb2xkIG9uZQ0KICAqICAtIHVwZGF0ZSB0aGUgcGFnZSB0YWJsZXMN CiAgKiAgLSBpbmZvcm0gdGhlIFRMQiBhYm91dCB0aGUgbmV3IG9uZQ0KKyAq ICAtIHVwZGF0ZSB0aGUgcmV2ZXJzZSBtYXBwaW5ncyAoaWYgdGhlIHBhZ2Ug Y2hhbmdlcykNCiAgKg0KICAqIFdlIGhvbGQgdGhlIG1tIHNlbWFwaG9yZSBm b3IgcmVhZGluZyBhbmQgdm1hLT52bV9tbS0+cGFnZV90YWJsZV9sb2NrDQog ICovDQpAQCAtODY4LDcgKzg3OSw5IEBADQogCWNvcHlfY293X3BhZ2Uob2xk X3BhZ2UsbmV3X3BhZ2UsYWRkcmVzcyk7DQogCWZsdXNoX3BhZ2VfdG9fcmFt KG5ld19wYWdlKTsNCiAJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHJlc3Mp Ow0KKwlwYWdlX3JlbW92ZV9wbWFwKG9sZF9wYWdlLCBwYWdlX3RhYmxlKTsN CiAJZXN0YWJsaXNoX3B0ZSh2bWEsIGFkZHJlc3MsIHBhZ2VfdGFibGUsIHB0 ZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KG1rX3B0ZShuZXdfcGFnZSwgdm1hLT52 bV9wYWdlX3Byb3QpKSkpOw0KKwlwYWdlX2FkZF9wbWFwKG5ld19wYWdlLCBw YWdlX3RhYmxlKTsNCiB9DQogDQogLyoNCkBAIC0xMTM5LDYgKzExNTIsNyBA QA0KIAlmbHVzaF9wYWdlX3RvX3JhbShwYWdlKTsNCiAJZmx1c2hfaWNhY2hl X3BhZ2Uodm1hLCBwYWdlKTsNCiAJc2V0X3B0ZShwYWdlX3RhYmxlLCBwdGUp Ow0KKwlwYWdlX2FkZF9wbWFwKHBhZ2UsIHBhZ2VfdGFibGUpOw0KIA0KIAkv KiBObyBuZWVkIHRvIGludmFsaWRhdGUgLSBpdCB3YXMgbm9uLXByZXNlbnQg YmVmb3JlICovDQogCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBw dGUpOw0KQEAgLTExNTMsMTQgKzExNjcsMTMgQEANCiBzdGF0aWMgaW50IGRv X2Fub255bW91c19wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSwgc3RydWN0 IHZtX2FyZWFfc3RydWN0ICogdm1hLCBwdGVfdCAqcGFnZV90YWJsZSwgaW50 IHdyaXRlX2FjY2VzcywgdW5zaWduZWQgbG9uZyBhZGRyKQ0KIHsNCiAJcHRl X3QgZW50cnk7DQorCXN0cnVjdCBwYWdlICpwYWdlID0gWkVST19QQUdFKGFk ZHIpOw0KIA0KIAkvKiBSZWFkLW9ubHkgbWFwcGluZyBvZiBaRVJPX1BBR0Uu ICovDQogCWVudHJ5ID0gcHRlX3dycHJvdGVjdChta19wdGUoWkVST19QQUdF KGFkZHIpLCB2bWEtPnZtX3BhZ2VfcHJvdCkpOw0KIA0KIAkvKiAuLmV4Y2Vw dCBpZiBpdCdzIGEgd3JpdGUgYWNjZXNzICovDQogCWlmICh3cml0ZV9hY2Nl c3MpIHsNCi0JCXN0cnVjdCBwYWdlICpwYWdlOw0KLQ0KIAkJLyogQWxsb2Nh dGUgb3VyIG93biBwcml2YXRlIHBhZ2UuICovDQogCQlzcGluX3VubG9jaygm bW0tPnBhZ2VfdGFibGVfbG9jayk7DQogCQlwYWdlID0gYWxsb2NfcGFnZShH RlBfSElHSFVTRVIpOw0KQEAgLTExNzgsNiArMTE5MSw3IEBADQogCX0NCiAN CiAJc2V0X3B0ZShwYWdlX3RhYmxlLCBlbnRyeSk7DQorCXBhZ2VfYWRkX3Bt YXAocGFnZSwgcGFnZV90YWJsZSk7IC8qIElnbm9yZXMgZW1wdHlfemVyb19w YWdlIDspICovDQogDQogCS8qIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSAtIGl0 IHdhcyBub24tcHJlc2VudCBiZWZvcmUgKi8NCiAJdXBkYXRlX21tdV9jYWNo ZSh2bWEsIGFkZHIsIGVudHJ5KTsNCkBAIC0xMjQwLDYgKzEyNTQsNyBAQA0K IAkJCSAgICEodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkpDQogCQkJZW50 cnkgPSBwdGVfd3Jwcm90ZWN0KGVudHJ5KTsNCiAJCXNldF9wdGUocGFnZV90 YWJsZSwgZW50cnkpOw0KKwkJcGFnZV9hZGRfcG1hcChuZXdfcGFnZSwgcGFn ZV90YWJsZSk7DQogCX0gZWxzZSB7DQogCQkvKiBPbmUgb2Ygb3VyIHNpYmxp bmcgdGhyZWFkcyB3YXMgZmFzdGVyLCBiYWNrIG91dC4gKi8NCiAJCXBhZ2Vf Y2FjaGVfcmVsZWFzZShuZXdfcGFnZSk7DQpAQCAtMTM3Miw2ICsxMzg3LDcg QEANCiBwdGVfdCAqcHRlX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBw bWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpDQogew0KIAlpZiAo IXBtZF9wcmVzZW50KCpwbWQpKSB7DQorCQlzdHJ1Y3QgcGFnZSAqIHBhZ2U7 DQogCQlwdGVfdCAqbmV3Ow0KIA0KIAkJLyogImZhc3QiIGFsbG9jYXRpb24g Y2FuIGhhcHBlbiB3aXRob3V0IGRyb3BwaW5nIHRoZSBsb2NrLi4gKi8NCkBA IC0xMzkyLDYgKzE0MDgsMTAgQEANCiAJCQkJZ290byBvdXQ7DQogCQkJfQ0K IAkJfQ0KKwkJLyogQWRkIHJldmVyc2UgcHRlIG1hcHBpbmcgcG9pbnRlcnMg Zm9yIHBtYXAuYy4gKi8NCisJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UobmV3KTsN CisJCXBhZ2UtPm1hcHBpbmcgPSAodm9pZCAqKW1tOw0KKwkJcGFnZS0+aW5k ZXggPSBhZGRyZXNzICYgfigoUFRSU19QRVJfUFRFICogUEFHRV9TSVpFKSAt IDEpOw0KIAkJcG1kX3BvcHVsYXRlKG1tLCBwbWQsIG5ldyk7DQogCX0NCiBv dXQ6DQotLS0gbGludXgtMi40LjcvbW0vbXJlbWFwLmMub3JpZwlUaHUgSnVs IDI2IDEzOjIyOjA5IDIwMDENCisrKyBsaW51eC0yLjQuNy9tbS9tcmVtYXAu YwlUaHUgSnVsIDI2IDEzOjI0OjM3IDIwMDENCkBAIC02Myw2ICs2Myw3IEBA DQogCXB0ZV90IHB0ZTsNCiANCiAJaWYgKCFwdGVfbm9uZSgqc3JjKSkgew0K KwkJcGFnZV9yZW1vdmVfcG1hcChwdGVfcGFnZShwdGUpLCBzcmMpOw0KIAkJ cHRlID0gcHRlcF9nZXRfYW5kX2NsZWFyKHNyYyk7DQogCQlpZiAoIWRzdCkg ew0KIAkJCS8qIE5vIGRlc3Q/ICBXZSBtdXN0IHB1dCBpdCBiYWNrLiAqLw0K QEAgLTcwLDYgKzcxLDcgQEANCiAJCQllcnJvcisrOw0KIAkJfQ0KIAkJc2V0 X3B0ZShkc3QsIHB0ZSk7DQorCQlwYWdlX2FkZF9wbWFwKHB0ZV9wYWdlKHB0 ZSksIGRzdCk7DQogCX0NCiAJcmV0dXJuIGVycm9yOw0KIH0NCi0tLSBsaW51 eC0yLjQuNy9tbS9wYWdlX2FsbG9jLmMub3JpZwlUaHUgSnVsIDI2IDEzOjIy OjA5IDIwMDENCisrKyBsaW51eC0yLjQuNy9tbS9wYWdlX2FsbG9jLmMJVGh1 IEp1bCAyNiAxMzoyNDozNyAyMDAxDQpAQCAtODcsNiArODcsOCBAQA0KIAkJ QlVHKCk7DQogCWlmIChQYWdlSW5hY3RpdmVDbGVhbihwYWdlKSkNCiAJCUJV RygpOw0KKwlpZiAocGFnZS0+cHRlX2NoYWluKQ0KKwkJQlVHKCk7DQogDQog CXBhZ2UtPmZsYWdzICY9IH4oKDE8PFBHX3JlZmVyZW5jZWQpIHwgKDE8PFBH X2RpcnR5KSk7DQogCXBhZ2UtPmFnZSA9IFBBR0VfQUdFX1NUQVJUOw0KLS0t IGxpbnV4LTIuNC43L21tL3N3YXAuYy5vcmlnCVRodSBKdWwgMjYgMTM6MjI6 MDkgMjAwMQ0KKysrIGxpbnV4LTIuNC43L21tL3N3YXAuYwlUaHUgSnVsIDI2 IDEzOjI0OjM3IDIwMDENCkBAIC0xNjQsMjIgKzE2NCwxMiBAQA0KIHZvaWQg ZGVhY3RpdmF0ZV9wYWdlX25vbG9jayhzdHJ1Y3QgcGFnZSAqIHBhZ2UpDQog ew0KIAkvKg0KLQkgKiBPbmUgZm9yIHRoZSBjYWNoZSwgb25lIGZvciB0aGUg ZXh0cmEgcmVmZXJlbmNlIHRoZQ0KLQkgKiBjYWxsZXIgaGFzIGFuZCAobWF5 YmUpIG9uZSBmb3IgdGhlIGJ1ZmZlcnMuDQotCSAqDQotCSAqIFRoaXMgaXNu J3QgcGVyZmVjdCwgYnV0IHdvcmtzIGZvciBqdXN0IGFib3V0IGV2ZXJ5dGhp bmcuDQotCSAqIEJlc2lkZXMsIGFzIGxvbmcgYXMgd2UgZG9uJ3QgbW92ZSB1 bmZyZWVhYmxlIHBhZ2VzIHRvIHRoZQ0KLQkgKiBpbmFjdGl2ZV9jbGVhbiBs aXN0IGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBwZXJmZWN0Li4uDQotCSAqLw0K LQlpbnQgbWF4Y291bnQgPSAocGFnZS0+YnVmZmVycyA/IDMgOiAyKTsNCi0J cGFnZS0+YWdlID0gMDsNCi0JQ2xlYXJQYWdlUmVmZXJlbmNlZChwYWdlKTsN Ci0NCi0JLyoNCiAJICogRG9uJ3QgdG91Y2ggaXQgaWYgaXQncyBub3Qgb24g dGhlIGFjdGl2ZSBsaXN0Lg0KIAkgKiAoc29tZSBwYWdlcyBhcmVuJ3Qgb24g YW55IGxpc3QgYXQgYWxsKQ0KIAkgKi8NCi0JaWYgKFBhZ2VBY3RpdmUocGFn ZSkgJiYgcGFnZV9jb3VudChwYWdlKSA8PSBtYXhjb3VudCAmJiAhcGFnZV9y YW1kaXNrKHBhZ2UpKSB7DQorCWlmIChQYWdlQWN0aXZlKHBhZ2UpICYmICFw YWdlX3JhbWRpc2socGFnZSkpIHsNCisJCXBhZ2UtPmFnZSA9IDA7DQorCQlD bGVhclBhZ2VSZWZlcmVuY2VkKHBhZ2UpOw0KIAkJZGVsX3BhZ2VfZnJvbV9h Y3RpdmVfbGlzdChwYWdlKTsNCiAJCWFkZF9wYWdlX3RvX2luYWN0aXZlX2Rp cnR5X2xpc3QocGFnZSk7DQogCX0NCkBAIC0yNjYsOCArMjU2LDYgQEANCiAg Ki8NCiB2b2lkIGxydV9jYWNoZV9kZWwoc3RydWN0IHBhZ2UgKiBwYWdlKQ0K IHsNCi0JaWYgKCFQYWdlTG9ja2VkKHBhZ2UpKQ0KLQkJQlVHKCk7DQogCXNw aW5fbG9jaygmcGFnZW1hcF9scnVfbG9jayk7DQogCV9fbHJ1X2NhY2hlX2Rl bChwYWdlKTsNCiAJc3Bpbl91bmxvY2soJnBhZ2VtYXBfbHJ1X2xvY2spOw0K LS0tIGxpbnV4LTIuNC43L21tL3N3YXBmaWxlLmMub3JpZwlUaHUgSnVsIDI2 IDEzOjIyOjA5IDIwMDENCisrKyBsaW51eC0yLjQuNy9tbS9zd2FwZmlsZS5j CVRodSBKdWwgMjYgMTM6MjQ6MzcgMjAwMQ0KQEAgLTIzMiw2ICsyMzIsNyBA QA0KIAlzZXRfcHRlKGRpciwgcHRlX21rZGlydHkobWtfcHRlKHBhZ2UsIHZt YS0+dm1fcGFnZV9wcm90KSkpOw0KIAlzd2FwX2ZyZWUoZW50cnkpOw0KIAln ZXRfcGFnZShwYWdlKTsNCisJcGFnZV9hZGRfcG1hcChwYWdlLCBkaXIpOw0K IAkrK3ZtYS0+dm1fbW0tPnJzczsNCiB9DQogDQotLS0gbGludXgtMi40Ljcv bW0vc3dhcF9zdGF0ZS5jLm9yaWcJVGh1IEp1bCAyNiAxMzoyMjowOSAyMDAx DQorKysgbGludXgtMi40LjcvbW0vc3dhcF9zdGF0ZS5jCVRodSBKdWwgMjYg MTM6NTU6MTMgMjAwMQ0KQEAgLTE2NSw3ICsxNjUsMTMgQEANCiAJCWlmIChl eGNsdXNpdmVfc3dhcF9wYWdlKHBhZ2UpKQ0KIAkJCWRlbGV0ZV9mcm9tX3N3 YXBfY2FjaGVfbm9sb2NrKHBhZ2UpOw0KIAkJVW5sb2NrUGFnZShwYWdlKTsN Ci0JfQ0KKwkvKg0KKwkgKiBJZiB3ZSBhcmUgdGhlIG9ubHkgdXNlciBhbmQg aXQgd2FzIGFuIGFub255bW91cyBwYWdlDQorCSAqIHdpdGhvdXQgc3dhcCBi YWNraW5nLCByZW1vdmUgdGhlIHBhZ2UgZnJvbSB0aGUgbGlzdC4NCisJICog U01QL2ZvcmsoKSBzYWZlIGJlY2F1c2Ugd2UgaG9sZCB0aGUgbW0tPnBhZ2Vf dGFibGVfbG9jay4NCisJICovDQorCX0gZWxzZSBpZiAocGFnZV9jb3VudChw YWdlKSA9PSAxKQ0KKwkJbHJ1X2NhY2hlX2RlbChwYWdlKTsNCiAJcGFnZV9j YWNoZV9yZWxlYXNlKHBhZ2UpOw0KIH0NCiANCi0tLSBsaW51eC0yLjQuNy9t bS92bXNjYW4uYy5vcmlnCVRodSBKdWwgMjYgMTM6MjI6MDkgMjAwMQ0KKysr IGxpbnV4LTIuNC43L21tL3Ztc2Nhbi5jCVR1ZSBKdWwgMzEgMTg6MTI6MDcg MjAwMQ0KQEAgLTI3LDMwICsyNyw3MSBAQA0KICNkZWZpbmUgTUFYKGEsYikg KChhKSA+IChiKSA/IChhKSA6IChiKSkNCiANCiAvKg0KLSAqIFRoZSBzd2Fw LW91dCBmdW5jdGlvbiByZXR1cm5zIDEgaWYgaXQgc3VjY2Vzc2Z1bGx5DQot ICogc2Nhbm5lZCBhbGwgdGhlIHBhZ2VzIGl0IHdhcyBhc2tlZCB0byAoYGNv dW50JykuDQotICogSXQgcmV0dXJucyB6ZXJvIGlmIGl0IGNvdWxkbid0IGRv IGFueXRoaW5nLA0KKyAqIFRyeV90b19zd2FwX291dCBkb2VzIG5vdGhpbmcg YnV0IHVubWFwIGEgcGFnZSB0YWJsZSBlbnRyeSB0bw0KKyAqIGEgcGFnZS4g SXQgaGFzIDQgcmV0dXJuIHZhbHVlczoNCisgKiBTV0FQX1NVQ0NFU1MgLSB3 ZSBzdWNjZWVkZWQgaW4gdW5tYXBwaW5nIHRoaXMgcGFnZSB0YWJsZSBlbnRy eQ0KKyAqIFNXQVBfQUdBSU4gICAtIHdlIGZhaWxlZCBhIHRyeV9sb2NrLCB0 cnkgYWdhaW4gbGF0ZXINCisgKiBTV0FQX0ZBSUwgICAgLSB3ZSBjYW5ub3Qg c3dhcCBvdXQgdGhpcyBwYWdlIGFueSB0aW1lIHNvb24NCisgKiAgICAgICAg ICAgICAgICAobWxvY2tlZCBwYWdlLCBubyBzd2FwIHNwYWNlIGxlZnQsIC4u LikNCisgKiBTV0FQX0VSUk9SICAgLSBhbiBlcnJvciBvY2N1cnJlZA0KICAq DQotICogcnNzIG1heSBkZWNyZWFzZSBiZWNhdXNlIHBhZ2VzIGFyZSBzaGFy ZWQsIGJ1dCB0aGlzDQotICogZG9lc24ndCBjb3VudCBhcyBoYXZpbmcgZnJl ZWQgYSBwYWdlLg0KKyAqIE5PVEU6IHdlIGhhdmUgdG8gdXNlIHRyeWxvY2sg ZXZlcnl3aGVyZSwgc2luY2Ugb3VyIGxvY2tpbmcNCisgKiBvcmRlciBpcyBv cHBvc2l0ZSBvZiB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyLCBldGMuDQogICov DQogDQotLyogbW0tPnBhZ2VfdGFibGVfbG9jayBpcyBoZWxkLiBtbWFwX3Nl bSBpcyBub3QgaGVsZCAqLw0KLXN0YXRpYyB2b2lkIHRyeV90b19zd2FwX291 dChzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVj dCogdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICogcGFnZV90 YWJsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpDQorLyogbW0tPnBhZ2VfdGFibGVf bG9jayBuZWVkcyB0byBiZSBoZWxkLiBtbWFwX3NlbSBpcyBub3QgaGVsZCAq Lw0KK2ludCB0cnlfdG9fc3dhcF9vdXQoc3RydWN0IG1tX3N0cnVjdCAqIG1t LCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICogcGFnZV90YWJsZSwg c3RydWN0IHBhZ2UgKnBhZ2UpDQogew0KIAlwdGVfdCBwdGU7DQogCXN3cF9l bnRyeV90IGVudHJ5Ow0KKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWE7 DQorCWludCByZXQ7DQogDQotCS8qIERvbid0IGxvb2sgYXQgdGhpcyBwdGUg aWYgaXQncyBiZWVuIGFjY2Vzc2VkIHJlY2VudGx5LiAqLw0KLQlpZiAocHRl cF90ZXN0X2FuZF9jbGVhcl95b3VuZyhwYWdlX3RhYmxlKSkgew0KLQkJcGFn ZS0+YWdlICs9IFBBR0VfQUdFX0FEVjsNCi0JCWlmIChwYWdlLT5hZ2UgPiBQ QUdFX0FHRV9NQVgpDQotCQkJcGFnZS0+YWdlID0gUEFHRV9BR0VfTUFYOw0K LQkJcmV0dXJuOw0KKwkvKg0KKwkgKiBUcnkgdG8gZ2V0IHRoZSBtbS0+cGFn ZV90YWJsZV9sb2NrLiBJZGVhbGx5IHdlJ2QNCisJICogY2hhbmdlIHRoZSBw YWdlIGZhdWx0IGNvZGUgc28gd2UgbmV2ZXIgZ3JhYiB0aGUNCisJICogcGFn ZW1hcF9scnVfbG9jayBvciBwYWdlX3RhYmxlX2xvY2sgd2hpbGUgaG9sZGlu Zw0KKwkgKiB0aGUgbW0tPnBhZ2VfdGFibGVfbG9jaywgYnV0IGZvciBub3cg d2UgdHJ5bG9jay4uLg0KKwkgKi8NCisJaWYgKCFzcGluX3RyeWxvY2soJm1t LT5wYWdlX3RhYmxlX2xvY2spKSB7DQorCQlyZXQgPSBTV0FQX0FHQUlOOw0K KwkJZ290byBvdXRfdW5sb2NrOw0KKwl9DQorDQorCS8qDQorCSAqIEZpcnN0 LCBjaGVjayBmb3IgdmFyaW91cyBlcnJvciBjb25kaXRpb25zLg0KKwkgKiBU aGVzZSBzaG91bGQgYmUgQlVHKCkgb3IgcGFuaWMoKSBvbmNlIHRoZSBwbWFw DQorCSAqIFZNIHN0YWJpbGlzZXMuLi4NCisJICovDQorCXJldCA9IFNXQVBf RVJST1I7DQorDQorCWlmICghbW0gfHwgIXBhZ2VfdGFibGUgfHwgIXBhZ2Up IHsNCisJCXByaW50ayAoInRyeV90b19zd2FwX291dDogY2FsbGVkIHdpdGgg bnVsbCBhcmd1bWVudC4uLlxuIik7DQorCQlnb3RvIG91dF91bmxvY2s7DQor CX0NCisNCisJaWYgKCFQYWdlTG9ja2VkKHBhZ2UpKSB7DQorCQlwcmludGso InRyeV90b19zd2FwX291dDogcGFnZSBub3QgbG9ja2VkIVxuIik7DQorCQln b3RvIG91dF91bmxvY2s7DQorCX0NCisNCisJdm1hID0gZmluZF92bWEobW0s IGFkZHJlc3MpOw0KKwlpZiAoIXZtYSkgew0KKwkJcHJpbnRrICgidHJ5X3Rv X3N3YXBfb3V0OiBwYWdlIG5vdCBpbiBhIFZNQT8hXG4iKTsNCisJCWdvdG8g b3V0X3VubG9jazsNCisJfQ0KKw0KKwkvKg0KKwkgKiBPSywgbm8gZXJyb3Jz IG9jY3VycmVkLiBUaGVyZSBhcmUgc3RpbGwgdmFyaW91cw0KKwkgKiBvcHBv cnR1bml0aWVzIGZvciBmYWlsdXJlLCB0aG91Z2ggLi4uDQorCSAqLw0KKwly ZXQgPSBTV0FQX0ZBSUw7DQorDQorCS8qIG1sb2NrKCllZCBWTUEgKi8NCisJ aWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsNCisJCWdvdG8gb3V0 X3VubG9jazsNCiAJfQ0KIA0KLQlpZiAoVHJ5TG9ja1BhZ2UocGFnZSkpDQot CQlyZXR1cm47DQogDQogCS8qIEZyb20gdGhpcyBwb2ludCBvbiwgdGhlIG9k ZHMgYXJlIHRoYXQgd2UncmUgZ29pbmcgdG8NCiAJICogbnVrZSB0aGlzIHB0 ZSwgc28gcmVhZCBhbmQgY2xlYXIgdGhlIHB0ZS4gIFRoaXMgaG9vaw0KQEAg LTc0LDExICsxMTUsOSBAQA0KIAkJc2V0X3B0ZShwYWdlX3RhYmxlLCBzd3Bf ZW50cnlfdG9fcHRlKGVudHJ5KSk7DQogZHJvcF9wdGU6DQogCQltbS0+cnNz LS07DQotCQlpZiAoIXBhZ2UtPmFnZSkNCi0JCQlkZWFjdGl2YXRlX3BhZ2Uo cGFnZSk7DQotCQlVbmxvY2tQYWdlKHBhZ2UpOw0KIAkJcGFnZV9jYWNoZV9y ZWxlYXNlKHBhZ2UpOw0KLQkJcmV0dXJuOw0KKwkJcmV0ID0gU1dBUF9TVUND RVNTOw0KKwkJZ290byBvdXRfdW5sb2NrOw0KIAl9DQogDQogCS8qDQpAQCAt MTIwLDIwNiArMTU5LDE4IEBADQogCQlnb3RvIG91dF91bmxvY2tfcmVzdG9y ZTsgLyogTm8gc3dhcCBzcGFjZSBsZWZ0ICovDQogDQogCS8qIEFkZCBpdCB0 byB0aGUgc3dhcCBjYWNoZSBhbmQgbWFyayBpdCBkaXJ0eSAqLw0KKwkvKiBY WFg6IFNNUCBkZWFkbG9jayBkdWUgdG8gcGFnZWNhY2hlX2xvY2sgLyBwYWdl bWFwX2xydV9sb2NrIG9yZGVyICovDQogCWFkZF90b19zd2FwX2NhY2hlKHBh Z2UsIGVudHJ5KTsNCiAJc2V0X3BhZ2VfZGlydHkocGFnZSk7DQogCWdvdG8g c2V0X3N3YXBfcHRlOw0KIA0KIG91dF91bmxvY2tfcmVzdG9yZToNCiAJc2V0 X3B0ZShwYWdlX3RhYmxlLCBwdGUpOw0KLQlVbmxvY2tQYWdlKHBhZ2UpOw0K LQlyZXR1cm47DQotfQ0KLQ0KLS8qIG1tLT5wYWdlX3RhYmxlX2xvY2sgaXMg aGVsZC4gbW1hcF9zZW0gaXMgbm90IGhlbGQgKi8NCi1zdGF0aWMgaW50IHN3 YXBfb3V0X3BtZChzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHN0cnVjdCB2bV9h cmVhX3N0cnVjdCAqIHZtYSwgcG1kX3QgKmRpciwgdW5zaWduZWQgbG9uZyBh ZGRyZXNzLCB1bnNpZ25lZCBsb25nIGVuZCwgaW50IGNvdW50KQ0KLXsNCi0J cHRlX3QgKiBwdGU7DQotCXVuc2lnbmVkIGxvbmcgcG1kX2VuZDsNCi0NCi0J aWYgKHBtZF9ub25lKCpkaXIpKQ0KLQkJcmV0dXJuIGNvdW50Ow0KLQlpZiAo cG1kX2JhZCgqZGlyKSkgew0KLQkJcG1kX0VSUk9SKCpkaXIpOw0KLQkJcG1k X2NsZWFyKGRpcik7DQotCQlyZXR1cm4gY291bnQ7DQotCX0NCi0JDQotCXB0 ZSA9IHB0ZV9vZmZzZXQoZGlyLCBhZGRyZXNzKTsNCi0JDQotCXBtZF9lbmQg PSAoYWRkcmVzcyArIFBNRF9TSVpFKSAmIFBNRF9NQVNLOw0KLQlpZiAoZW5k ID4gcG1kX2VuZCkNCi0JCWVuZCA9IHBtZF9lbmQ7DQotDQotCWRvIHsNCi0J CWlmIChwdGVfcHJlc2VudCgqcHRlKSkgew0KLQkJCXN0cnVjdCBwYWdlICpw YWdlID0gcHRlX3BhZ2UoKnB0ZSk7DQotDQotCQkJaWYgKFZBTElEX1BBR0Uo cGFnZSkgJiYgIVBhZ2VSZXNlcnZlZChwYWdlKSkgew0KLQkJCQl0cnlfdG9f c3dhcF9vdXQobW0sIHZtYSwgYWRkcmVzcywgcHRlLCBwYWdlKTsNCi0JCQkJ aWYgKCEtLWNvdW50KQ0KLQkJCQkJYnJlYWs7DQotCQkJfQ0KLQkJfQ0KLQkJ YWRkcmVzcyArPSBQQUdFX1NJWkU7DQotCQlwdGUrKzsNCi0JfSB3aGlsZSAo YWRkcmVzcyAmJiAoYWRkcmVzcyA8IGVuZCkpOw0KLQltbS0+c3dhcF9hZGRy ZXNzID0gYWRkcmVzcyArIFBBR0VfU0laRTsNCi0JcmV0dXJuIGNvdW50Ow0K LX0NCi0NCi0vKiBtbS0+cGFnZV90YWJsZV9sb2NrIGlzIGhlbGQuIG1tYXBf c2VtIGlzIG5vdCBoZWxkICovDQotc3RhdGljIGlubGluZSBpbnQgc3dhcF9v dXRfcGdkKHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSwgc3RydWN0IHZtX2FyZWFf c3RydWN0ICogdm1hLCBwZ2RfdCAqZGlyLCB1bnNpZ25lZCBsb25nIGFkZHJl c3MsIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgY291bnQpDQotew0KLQlwbWRf dCAqIHBtZDsNCi0JdW5zaWduZWQgbG9uZyBwZ2RfZW5kOw0KLQ0KLQlpZiAo cGdkX25vbmUoKmRpcikpDQotCQlyZXR1cm4gY291bnQ7DQotCWlmIChwZ2Rf YmFkKCpkaXIpKSB7DQotCQlwZ2RfRVJST1IoKmRpcik7DQotCQlwZ2RfY2xl YXIoZGlyKTsNCi0JCXJldHVybiBjb3VudDsNCi0JfQ0KLQ0KLQlwbWQgPSBw bWRfb2Zmc2V0KGRpciwgYWRkcmVzcyk7DQotDQotCXBnZF9lbmQgPSAoYWRk cmVzcyArIFBHRElSX1NJWkUpICYgUEdESVJfTUFTSzsJDQotCWlmIChwZ2Rf ZW5kICYmIChlbmQgPiBwZ2RfZW5kKSkNCi0JCWVuZCA9IHBnZF9lbmQ7DQot CQ0KLQlkbyB7DQotCQljb3VudCA9IHN3YXBfb3V0X3BtZChtbSwgdm1hLCBw bWQsIGFkZHJlc3MsIGVuZCwgY291bnQpOw0KLQkJaWYgKCFjb3VudCkNCi0J CQlicmVhazsNCi0JCWFkZHJlc3MgPSAoYWRkcmVzcyArIFBNRF9TSVpFKSAm IFBNRF9NQVNLOw0KLQkJcG1kKys7DQotCX0gd2hpbGUgKGFkZHJlc3MgJiYg KGFkZHJlc3MgPCBlbmQpKTsNCi0JcmV0dXJuIGNvdW50Ow0KLX0NCi0NCi0v KiBtbS0+cGFnZV90YWJsZV9sb2NrIGlzIGhlbGQuIG1tYXBfc2VtIGlzIG5v dCBoZWxkICovDQotc3RhdGljIGludCBzd2FwX291dF92bWEoc3RydWN0IG1t X3N0cnVjdCAqIG1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsIHVu c2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IGNvdW50KQ0KLXsNCi0JcGdkX3Qg KnBnZGlyOw0KLQl1bnNpZ25lZCBsb25nIGVuZDsNCi0NCi0JLyogRG9uJ3Qg c3dhcCBvdXQgYXJlYXMgd2hpY2ggYXJlIGxvY2tlZCBkb3duICovDQotCWlm ICh2bWEtPnZtX2ZsYWdzICYgKFZNX0xPQ0tFRHxWTV9SRVNFUlZFRCkpDQot CQlyZXR1cm4gY291bnQ7DQotDQotCXBnZGlyID0gcGdkX29mZnNldChtbSwg YWRkcmVzcyk7DQotDQotCWVuZCA9IHZtYS0+dm1fZW5kOw0KLQlpZiAoYWRk cmVzcyA+PSBlbmQpDQotCQlCVUcoKTsNCi0JZG8gew0KLQkJY291bnQgPSBz d2FwX291dF9wZ2QobW0sIHZtYSwgcGdkaXIsIGFkZHJlc3MsIGVuZCwgY291 bnQpOw0KLQkJaWYgKCFjb3VudCkNCi0JCQlicmVhazsNCi0JCWFkZHJlc3Mg PSAoYWRkcmVzcyArIFBHRElSX1NJWkUpICYgUEdESVJfTUFTSzsNCi0JCXBn ZGlyKys7DQotCX0gd2hpbGUgKGFkZHJlc3MgJiYgKGFkZHJlc3MgPCBlbmQp KTsNCi0JcmV0dXJuIGNvdW50Ow0KLX0NCi0NCi0vKg0KLSAqIFJldHVybnMg bm9uLXplcm8gaWYgd2Ugc2Nhbm5lZCBhbGwgYGNvdW50JyBwYWdlcw0KLSAq Lw0KLXN0YXRpYyBpbnQgc3dhcF9vdXRfbW0oc3RydWN0IG1tX3N0cnVjdCAq IG1tLCBpbnQgY291bnQpDQotew0KLQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7 DQotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCogdm1hOw0KLQ0KLQlpZiAoIWNv dW50KQ0KLQkJcmV0dXJuIDE7DQotCS8qDQotCSAqIEdvIHRocm91Z2ggcHJv Y2VzcycgcGFnZSBkaXJlY3RvcnkuDQotCSAqLw0KLQ0KLQkvKg0KLQkgKiBG aW5kIHRoZSBwcm9wZXIgdm0tYXJlYSBhZnRlciBmcmVlemluZyB0aGUgdm1h IGNoYWluIA0KLQkgKiBhbmQgcHRlcy4NCi0JICovDQotCXNwaW5fbG9jaygm bW0tPnBhZ2VfdGFibGVfbG9jayk7DQotCWFkZHJlc3MgPSBtbS0+c3dhcF9h ZGRyZXNzOw0KLQl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcmVzcyk7DQotCWlm ICh2bWEpIHsNCi0JCWlmIChhZGRyZXNzIDwgdm1hLT52bV9zdGFydCkNCi0J CQlhZGRyZXNzID0gdm1hLT52bV9zdGFydDsNCi0NCi0JCWZvciAoOzspIHsN Ci0JCQljb3VudCA9IHN3YXBfb3V0X3ZtYShtbSwgdm1hLCBhZGRyZXNzLCBj b3VudCk7DQotCQkJaWYgKCFjb3VudCkNCi0JCQkJZ290byBvdXRfdW5sb2Nr Ow0KLQkJCXZtYSA9IHZtYS0+dm1fbmV4dDsNCi0JCQlpZiAoIXZtYSkNCi0J CQkJYnJlYWs7DQotCQkJYWRkcmVzcyA9IHZtYS0+dm1fc3RhcnQ7DQotCQl9 DQotCX0NCi0JLyogUmVzZXQgdG8gMCB3aGVuIHdlIHJlYWNoIHRoZSBlbmQg b2YgYWRkcmVzcyBzcGFjZSAqLw0KLQltbS0+c3dhcF9hZGRyZXNzID0gMDsN Ci0NCiBvdXRfdW5sb2NrOg0KIAlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFi bGVfbG9jayk7DQotCXJldHVybiAhY291bnQ7DQotfQ0KLQ0KLSNkZWZpbmUg U1dBUF9NTV9TSElGVAk0DQotI2RlZmluZSBTV0FQX1NISUZUCTUNCi0jZGVm aW5lIFNXQVBfTUlOCTgNCi0NCi1zdGF0aWMgaW5saW5lIGludCBzd2FwX2Ft b3VudChzdHJ1Y3QgbW1fc3RydWN0ICptbSkNCi17DQotCWludCBuciA9IG1t LT5yc3MgPj4gU1dBUF9TSElGVDsNCi0JaWYgKG5yIDwgU1dBUF9NSU4pIHsN Ci0JCW5yID0gU1dBUF9NSU47DQotCQlpZiAobnIgPiBtbS0+cnNzKQ0KLQkJ CW5yID0gbW0tPnJzczsNCi0JfQ0KLQlyZXR1cm4gbnI7DQotfQ0KLQ0KLXN0 YXRpYyB2b2lkIHN3YXBfb3V0KHVuc2lnbmVkIGludCBwcmlvcml0eSwgaW50 IGdmcF9tYXNrKQ0KLXsNCi0JaW50IGNvdW50ZXI7DQotCWludCByZXR2YWwg PSAwOw0KLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOw0K LQ0KLQkvKiBBbHdheXMgc3RhcnQgYnkgdHJ5aW5nIHRvIHBlbmFsaXplIHRo ZSBwcm9jZXNzIHRoYXQgaXMgYWxsb2NhdGluZyBtZW1vcnkgKi8NCi0JaWYg KG1tKQ0KLQkJcmV0dmFsID0gc3dhcF9vdXRfbW0obW0sIHN3YXBfYW1vdW50 KG1tKSk7DQotDQotCS8qIFRoZW4sIGxvb2sgYXQgdGhlIG90aGVyIG1tJ3Mg Ki8NCi0JY291bnRlciA9IChtbWxpc3RfbnIgPDwgU1dBUF9NTV9TSElGVCkg Pj4gcHJpb3JpdHk7DQotCWRvIHsNCi0JCXN0cnVjdCBsaXN0X2hlYWQgKnA7 DQotDQotCQlzcGluX2xvY2soJm1tbGlzdF9sb2NrKTsNCi0JCXAgPSBpbml0 X21tLm1tbGlzdC5uZXh0Ow0KLQkJaWYgKHAgPT0gJmluaXRfbW0ubW1saXN0 KQ0KLQkJCWdvdG8gZW1wdHk7DQotDQotCQkvKiBNb3ZlIGl0IHRvIHRoZSBi YWNrIG9mIHRoZSBxdWV1ZS4uICovDQotCQlsaXN0X2RlbChwKTsNCi0JCWxp c3RfYWRkX3RhaWwocCwgJmluaXRfbW0ubW1saXN0KTsNCi0JCW1tID0gbGlz dF9lbnRyeShwLCBzdHJ1Y3QgbW1fc3RydWN0LCBtbWxpc3QpOw0KLQ0KLQkJ LyogTWFrZSBzdXJlIHRoZSBtbSBkb2Vzbid0IGRpc2FwcGVhciB3aGVuIHdl IGRyb3AgdGhlIGxvY2suLiAqLw0KLQkJYXRvbWljX2luYygmbW0tPm1tX3Vz ZXJzKTsNCi0JCXNwaW5fdW5sb2NrKCZtbWxpc3RfbG9jayk7DQotDQotCQkv KiBXYWxrIGFib3V0IDYlIG9mIHRoZSBhZGRyZXNzIHNwYWNlIGVhY2ggdGlt ZSAqLw0KLQkJcmV0dmFsIHw9IHN3YXBfb3V0X21tKG1tLCBzd2FwX2Ftb3Vu dChtbSkpOw0KLQkJbW1wdXQobW0pOw0KLQl9IHdoaWxlICgtLWNvdW50ZXIg Pj0gMCk7DQotCXJldHVybjsNCi0NCi1lbXB0eToNCi0Jc3Bpbl91bmxvY2so Jm1tbGlzdF9sb2NrKTsNCisJcmV0dXJuIHJldDsNCiB9DQogDQotDQogLyoq DQogICogcmVjbGFpbV9wYWdlIC0JcmVjbGFpbXMgb25lIHBhZ2UgZnJvbSB0 aGUgaW5hY3RpdmVfY2xlYW4gbGlzdA0KICAqIEB6b25lOiByZWNsYWltIGEg cGFnZSBmcm9tIHRoaXMgem9uZQ0KQEAgLTM5NSw2ICsyNDYsMTYgQEANCiAJ ZGVsX3BhZ2VfZnJvbV9pbmFjdGl2ZV9jbGVhbl9saXN0KHBhZ2UpOw0KIAlV bmxvY2tQYWdlKHBhZ2UpOw0KIAlwYWdlLT5hZ2UgPSBQQUdFX0FHRV9TVEFS VDsNCisJLyoNCisJICogVGhlIGJ1Z3MgYmVsb3cgY2Fubm90IGhhcHBlbiBi ZWNhdXNlIG90aGVyIHByb2Nlc3NlcyB3b3VsZA0KKwkgKiBuZWVkIHRoZSBw YWdlY2FjaGVfbG9jayB0byBmaW5kIHRoZSBwYWdlLiBXaGVuIHRoZXkgZmlu ZCBpdCwNCisJICogdGhleSBuZWVkIHRvIGluY3JlYXNlIHRoZSBwYWdlIGNv dW50LCB3aGljaCBtYWtlcyB1cyBtb3ZlDQorCSAqIHRoZSBwYWdlIGJhY2sg dG8gdGhlIGFjdGl2ZSBsaXN0IGluIHRoZSBjb2RlIGFib3ZlLg0KKwkgKg0K KwkgKiBUaHVzLCB0aGVzZSBjaGVja3MgY2hlY2sgb3RoZXIgY29kZS4uLg0K KwkgKi8NCisJaWYgKHBhZ2UtPnB0ZV9jaGFpbikNCisJCUJVRygpOw0KIAlp ZiAocGFnZV9jb3VudChwYWdlKSAhPSAxKQ0KIAkJcHJpbnRrKCJWTTogcmVj bGFpbV9wYWdlLCBmb3VuZCBwYWdlIHdpdGggY291bnQgJWQhXG4iLA0KIAkJ CQlwYWdlX2NvdW50KHBhZ2UpKTsNCkBAIC00NTQsNyArMzE1LDYgQEANCiAN CiAJCS8qIFBhZ2UgaXMgb3Igd2FzIGluIHVzZT8gIE1vdmUgaXQgdG8gdGhl IGFjdGl2ZSBsaXN0LiAqLw0KIAkJaWYgKFBhZ2VSZWZlcmVuY2VkKHBhZ2Up IHx8IHBhZ2UtPmFnZSA+IDAgfHwNCi0JCQkJKCFwYWdlLT5idWZmZXJzICYm IHBhZ2VfY291bnQocGFnZSkgPiAxKSB8fA0KIAkJCQlwYWdlX3JhbWRpc2so cGFnZSkpIHsNCiAJCQlkZWxfcGFnZV9mcm9tX2luYWN0aXZlX2RpcnR5X2xp c3QocGFnZSk7DQogCQkJYWRkX3BhZ2VfdG9fYWN0aXZlX2xpc3QocGFnZSk7 DQpAQCAtNDcyLDYgKzMzMiwzMCBAQA0KIAkJfQ0KIA0KIAkJLyoNCisJCSAq IFRyeSB0byByZW1vdmUgYWxsIHRoZSBtYXBwaW5ncyBwcm9jZXNzZXMgaGF2 ZSB0bw0KKwkJICogdGhpcyBwYWdlLiAgUGFnZXMgY2FuIGhhdmUgImhpZGRl biIgdXNlcnMsIGlmIHRoYXQNCisJCSAqIGlzIHRoZSBjYXNlIHRoZSBwYWdl IGdldHMgbW92ZWQgYmFjayB0byB0aGUgYWN0aXZlDQorCQkgKiBsaXN0Lg0K KwkJICoNCisJCSAqIFRoaXMgdGVzdCBpcyBqdXN0IGFuIG9wdGltaXNhdGlv biB0byBtb3ZlIHVuZnJlZWFibGUNCisJCSAqIHBhZ2VzIGJhY2sgdG8gdGhl IGFjdGl2ZSBsaXN0IGFuZCBwcmV2ZW50IHVzIGZyb20NCisJCSAqIGRvaW5n IChleHBlbnNpdmUpIGRpc2sgSU8uIFRoZSAicmVhbCIgdGVzdCBpcyBkb25l DQorCQkgKiBpbiByZWNsYWltX3BhZ2UoKSBhbmQgcHJvdGVjdGVkIGJ5IHRo ZSBwYWdldGFibGVfbG9jay4NCisJCSAqLw0KKwkJc3dpdGNoIChwYWdlX3Jl bW92ZV9hbGxfcG1hcHMocGFnZSkpIHsNCisJCQljYXNlIFNXQVBfQUdBSU46 DQorCQkJCVVubG9ja1BhZ2UocGFnZSk7DQorCQkJCWNvbnRpbnVlOw0KKwkJ CWNhc2UgU1dBUF9GQUlMOg0KKwkJCWNhc2UgU1dBUF9FUlJPUjoNCisJCQkJ Z290byBwYWdlX2FjdGl2ZTsNCisJCQljYXNlIFNXQVBfU1VDQ0VTUzoNCisJ CQkJbWF4Y291bnQgPSAocGFnZS0+YnVmZmVycyA/IDIgOiAxKTsNCisJCQkJ aWYgKHBhZ2VfY291bnQocGFnZSkgPiBtYXhjb3VudCkNCisJCQkJCWdvdG8g cGFnZV9hY3RpdmU7DQorCQl9DQorDQorCQkvKg0KIAkJICogRGlydHkgc3dh cC1jYWNoZSBwYWdlPyBXcml0ZSBpdCBvdXQgaWYNCiAJCSAqIGxhc3QgY29w eS4uDQogCQkgKi8NCkBAIC02MzAsMjAgKzUxNCwyMiBAQA0KIH0NCiANCiAv KioNCi0gKiByZWZpbGxfaW5hY3RpdmVfc2NhbiAtIHNjYW4gdGhlIGFjdGl2 ZSBsaXN0IGFuZCBmaW5kIHBhZ2VzIHRvIGRlYWN0aXZhdGUNCi0gKiBAcHJp b3JpdHk6IHRoZSBwcmlvcml0eSBhdCB3aGljaCB0byBzY2FuDQorICogcmVm aWxsX2luYWN0aXZlIC0gc2NhbiB0aGUgYWN0aXZlIGxpc3QgYW5kIGZpbmQg cGFnZXMgdG8gZGVhY3RpdmF0ZQ0KKyAqIEBtYXhzY2FuOiB0aGUgcHJpb3Jp dHkgYXQgd2hpY2ggdG8gc2NhbiAoZ2V0cyBjb252ZXJ0ZWQgdG8gcGFnZXMp DQogICogQHRhcmdldDogbnVtYmVyIG9mIHBhZ2VzIHRvIGRlYWN0aXZhdGUs IHplcm8gZm9yIGJhY2tncm91bmQgYWdpbmcNCiAgKg0KICAqIFRoaXMgZnVu Y3Rpb24gd2lsbCBzY2FuIGEgcG9ydGlvbiBvZiB0aGUgYWN0aXZlIGxpc3Qg dG8gZmluZA0KICAqIHVudXNlZCBwYWdlcywgdGhvc2UgcGFnZXMgd2lsbCB0 aGVuIGJlIG1vdmVkIHRvIHRoZSBpbmFjdGl2ZSBsaXN0Lg0KICAqLw0KLWlu dCByZWZpbGxfaW5hY3RpdmVfc2Nhbih1bnNpZ25lZCBpbnQgcHJpb3JpdHks IGludCB0YXJnZXQpDQoraW50IHJlZmlsbF9pbmFjdGl2ZSh1bnNpZ25lZCBp bnQgbWF4c2NhbiwgaW50IHRhcmdldCkNCiB7DQogCXN0cnVjdCBsaXN0X2hl YWQgKiBwYWdlX2xydTsNCiAJc3RydWN0IHBhZ2UgKiBwYWdlOw0KLQlpbnQg bWF4c2NhbiA9IG5yX2FjdGl2ZV9wYWdlcyA+PiBwcmlvcml0eTsNCi0JaW50 IHBhZ2VfYWN0aXZlID0gMDsNCi0JaW50IG5yX2RlYWN0aXZhdGVkID0gMDsN CisJaW50IHJlZmVyZW5jZWQsIHBhZ2VfYWN0aXZlLCBucl9kZWFjdGl2YXRl ZDs7DQorDQorCS8qIENvbnZlcnQgbWF4c2NhbiB0byB0aGUgbWF4aW11bSBu dW1iZXIgb2YgcGFnZXMgdG8gc2Nhbi4gKi8NCisJbWF4c2NhbiA9IG5yX2Fj dGl2ZV9wYWdlcyA+PiBtYXhzY2FuOw0KKwlucl9kZWFjdGl2YXRlZCA9IDA7 DQogDQogCS8qDQogCSAqIFdoZW4gd2UgYXJlIGJhY2tncm91bmQgYWdpbmcs IHdlIHRyeSB0byBpbmNyZWFzZSB0aGUgcGFnZSBhZ2luZw0KQEAgLTY2Niwy MyArNTUyLDE1IEBADQogCQl9DQogDQogCQkvKiBEbyBhZ2luZyBvbiB0aGUg cGFnZXMuICovDQotCQlpZiAoUGFnZVRlc3RhbmRDbGVhclJlZmVyZW5jZWQo cGFnZSkpIHsNCi0JCQlhZ2VfcGFnZV91cF9ub2xvY2socGFnZSk7DQorCQly ZWZlcmVuY2VkID0gcGFnZV9yZWZlcmVuY2VkKHBhZ2UpOw0KKwkJaWYgKHJl ZmVyZW5jZWQpIHsNCisJCQlwYWdlLT5hZ2UgKz0gKHJlZmVyZW5jZWQgKyBQ QUdFX0FHRV9BRFYpOw0KKwkJCWlmIChwYWdlLT5hZ2UgPiBQQUdFX0FHRV9N QVgpDQorCQkJCXBhZ2UtPmFnZSA9IFBBR0VfQUdFX01BWDsNCiAJCQlwYWdl X2FjdGl2ZSA9IDE7DQogCQl9IGVsc2Ugew0KIAkJCWFnZV9wYWdlX2Rvd25f YWdlb25seShwYWdlKTsNCi0JCQkvKg0KLQkJCSAqIFNpbmNlIHdlIGRvbid0 IGhvbGQgYSByZWZlcmVuY2Ugb24gdGhlIHBhZ2UNCi0JCQkgKiBvdXJzZWx2 ZXMsIHdlIGhhdmUgdG8gZG8gb3VyIHRlc3QgYSBiaXQgbW9yZQ0KLQkJCSAq IHN0cmljdCB0aGVuIGRlYWN0aXZhdGVfcGFnZSgpLiBUaGlzIGlzIG5lZWRl ZA0KLQkJCSAqIHNpbmNlIG90aGVyd2lzZSB0aGUgc3lzdGVtIGNvdWxkIGhh bmcgc2h1ZmZsaW5nDQotCQkJICogdW5mcmVlYWJsZSBwYWdlcyBmcm9tIHRo ZSBhY3RpdmUgbGlzdCB0byB0aGUNCi0JCQkgKiBpbmFjdGl2ZV9kaXJ0eSBs aXN0IGFuZCBiYWNrIGFnYWluLi4uDQotCQkJICoNCi0JCQkgKiBTVUJUTEU6 IHdlIGNhbiBoYXZlIGJ1ZmZlciBwYWdlcyB3aXRoIGNvdW50IDEuDQotCQkJ ICovDQotCQkJaWYgKHBhZ2UtPmFnZSA9PSAwICYmIHBhZ2VfY291bnQocGFn ZSkgPD0NCi0JCQkJCQkocGFnZS0+YnVmZmVycyA/IDIgOiAxKSkgew0KKwkJ CWlmIChwYWdlLT5hZ2UgPT0gMCkgew0KIAkJCQlkZWFjdGl2YXRlX3BhZ2Vf bm9sb2NrKHBhZ2UpOw0KIAkJCQlwYWdlX2FjdGl2ZSA9IDA7DQogCQkJfSBl bHNlIHsNCkBAIC04NDEsNyArNzE5LDcgQEANCiANCiBzdGF0aWMgaW50IGRv X3RyeV90b19mcmVlX3BhZ2VzKHVuc2lnbmVkIGludCBnZnBfbWFzaywgaW50 IHVzZXIpDQogew0KLQlpbnQgcmV0ID0gMDsNCisJaW50IHRhcmdldCwgbWF4 c2NhbiwgcmV0ID0gMDsNCiANCiAJLyoNCiAJICogSWYgd2UncmUgbG93IG9u IGZyZWUgcGFnZXMsIG1vdmUgcGFnZXMgZnJvbSB0aGUNCkBAIC04NTksMTAg KzczNywxNSBAQA0KIA0KIAkvKg0KIAkgKiBJZiBuZWVkZWQsIHdlIG1vdmUg cGFnZXMgZnJvbSB0aGUgYWN0aXZlIGxpc3QNCi0JICogdG8gdGhlIGluYWN0 aXZlIGxpc3QuDQotCSAqLw0KLQlpZiAoaW5hY3RpdmVfc2hvcnRhZ2UoKSkN Ci0JCXJldCArPSByZWZpbGxfaW5hY3RpdmUoZ2ZwX21hc2ssIHVzZXIpOw0K KwkgKiB0byB0aGUgaW5hY3RpdmUgbGlzdC4gTm90ZSB0aGF0IHVzZXIgcHJv Y2Vzc2VzDQorCSAqIG9ubHkgc2NhbiBhIHNtYWxsIHBhcnQgb2YgdGhlIGFj dGl2ZSBsaXN0LCBzbw0KKwkgKiB0aGF0IG11bHRpcGxlIHBhZ2UgZnJlZWVy cyBhdCB0aGUgc2FtZSB0aW1lDQorCSAqIHdvbid0IHVwc2V0IHBhZ2UgYWdp bmcuDQorCSAqLw0KKwl0YXJnZXQgPSBpbmFjdGl2ZV9zaG9ydGFnZSgpOw0K KwltYXhzY2FuID0gdXNlciA/IERFRl9QUklPUklUWSA6IDA7DQorCWlmICh0 YXJnZXQpDQorCQlyZXQgKz0gcmVmaWxsX2luYWN0aXZlKG1heHNjYW4sIHRh cmdldCk7DQogDQogCS8qIAkNCiAJICogUmVjbGFpbSB1bnVzZWQgc2xhYiBj YWNoZSBpZiBtZW1vcnkgaXMgbG93Lg0KQEAgLTkyOCw3ICs4MTEsNyBAQA0K IAkJCXJlY2FsY3VsYXRlX3ZtX3N0YXRzKCk7DQogDQogCQkJLyogRG8gYmFj a2dyb3VuZCBwYWdlIGFnaW5nLiAqLw0KLQkJCXJlZmlsbF9pbmFjdGl2ZV9z Y2FuKERFRl9QUklPUklUWSwgMCk7DQorCQkJcmVmaWxsX2luYWN0aXZlKDAs IDApOw0KIAkJfQ0KIA0KIAkJcnVuX3Rhc2tfcXVldWUoJnRxX2Rpc2spOw0K LS0tIGxpbnV4LTIuNC43L21tL01ha2VmaWxlLm9yaWcJVGh1IEp1bCAyNiAx MzoyMjoxNCAyMDAxDQorKysgbGludXgtMi40LjcvbW0vTWFrZWZpbGUJVGh1 IEp1bCAyNiAxMzoyNDozNyAyMDAxDQpAQCAtMTQsNyArMTQsNyBAQA0KIG9i ai15CSA6PSBtZW1vcnkubyBtbWFwLm8gZmlsZW1hcC5vIG1wcm90ZWN0Lm8g bWxvY2subyBtcmVtYXAubyBcDQogCSAgICB2bWFsbG9jLm8gc2xhYi5vIGJv b3RtZW0ubyBzd2FwLm8gdm1zY2FuLm8gcGFnZV9pby5vIFwNCiAJICAgIHBh Z2VfYWxsb2MubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUubyBudW1hLm8gb29t X2tpbGwubyBcDQotCSAgICBzaG1lbS5vDQorCSAgICBzaG1lbS5vIHBtYXAu bw0KIA0KIG9iai0kKENPTkZJR19ISUdITUVNKSArPSBoaWdobWVtLm8NCiAN Ci0tLSBsaW51eC0yLjQuNy9tbS9wbWFwLmMub3JpZwlUaHUgSnVsIDI2IDEz OjI0OjA1IDIwMDENCisrKyBsaW51eC0yLjQuNy9tbS9wbWFwLmMJVGh1IEp1 bCAyNiAxMzoyNDozNyAyMDAxDQpAQCAtMCwwICsxLDM0MSBAQA0KKy8qDQor ICogbW0vcG1hcC5jIC0gcGh5c2ljYWwgdG8gdmlydHVhbCByZXZlcnNlIG1h cHBpbmdzDQorICoNCisgKiBDb3B5cmlnaHQgMjAwMSwgUmlrIHZhbiBSaWVs ICAocmllbEBjb25lY3RpdmEuY29tLmJyKQ0KKyAqDQorICogUmVsZWFzZWQg dW5kZXIgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkuDQorICoN CisgKg0KKyAqIFRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIHByb3ZpZGUg YSBwaHlzaWNhbCB0byB2aXJ0dWFsDQorICogcmV2ZXJzZSBtYXBwaW5nLCB3 aGljaCBpcyBoYW5keSBmb3IgTlVNQSBtZW1vcnkgbWlncmF0aW9uLA0KKyAq IHByb2Nlc3MgbWlncmF0aW9uLCBjYWNoZSBjb2hlcmVuY3kgb24gc29tZSBt YWNoaW5lcyBhbmQNCisgKiBmb3IgZWFzaWVyIHN3YXBvdXQgYmFsYW5jaW5n Lg0KKyAqDQorICogVGhlIGVtcGhhc2lzIGluIHRoaXMgaW1wbGVtZW50YXRp b24gaXMgb24gc2ltcGxpY2l0eSBhbmQNCisgKiBsb3cgb3ZlcmhlYWQuDQor ICoNCisgKiBYWFg6IGludGVncmF0ZSB0aGUgKnB0ZSogZnVuY3Rpb25zIGlu dG8gdGhpcyBmaWxlIHNvIFBQQywgUy8zOTANCisgKiBhbmQgb3RoZXJzIGNh biBvdmVycmlkZSBzb21lIHRoaW5ncyBoZXJlIGFuZCBzdG9wIHByZXRlbmRp bmcgdGhleQ0KKyAqIGhhdmUgdGhlIGV4YWN0IHNhbWUgcGFnZSB0YWJsZSBm dW5jdGlvbmFsaXR5IG90aGVycyBoYXZlID8/DQorICovDQorDQorLyoNCisg KiBPbiBsb2NraW5nOg0KKyAqIC0gdG8ga2VlcCB0aGUgY2hhbmdlIGluIGJv dGggcHRlIGFuZCBwdGVfY2hhaW4gYXRvbWljLCB3ZSBzdXJyb3VuZA0KKyAq ICAgdGhlIGNoYW5naW5nIG9mIHRoZSB0d28gYnkgdGhlIHBhZ2VtYXBfbHJ1 X2xvY2s7IHdlIG1pZ2h0IHdhbnQgdG8NCisgKiAgIGNoYW5nZSB0aGlzIGlu IHRoZSBmdXR1cmUgaWYgdGhlcmUgdHVybnMgb3V0IHRvIGJlIGNvbnRlbnRp b24NCisgKiAtIGJlY2F1c2Ugc3dhcG91dCBsb2NraW5nIG9yZGVyIGlzIG9w cG9zaXRlIHRvIHRoZSBsb2NraW5nIG9yZGVyDQorICogICB1c2VkIGJ5IHBh Z2UgZmF1bHRzLCB0aGUgc3dhcG91dCBwYXRoIGFsd2F5cyB1c2VzIHRyeWxv Y2sNCisgKi8NCisjaW5jbHVkZSA8bGludXgvbW0uaD4NCisjaW5jbHVkZSA8 bGludXgvc3dhcC5oPg0KKw0KKyNpbmNsdWRlIDxhc20vc21wbG9jay5oPg0K Kw0KKyNkZWZpbmUgREVCVUcNCisNCisvKg0KKyAqIEZvciBzaGFyZWQgcGFn ZXMsIHdlIGhhdmUgYSBzZXJpZXMgb2YgcHRlX2NoYWluIHN0cnVjdHVyZXMu DQorICogVGhleSBhcmUgYSBzaW5nbHkgbGlua2VkIGxpc3QgdG8gbWluaW1p c2UgbWVtb3J5IG92ZXJoZWFkLA0KKyAqIHRoaXMgc2hvdWxkIG5vdCBiZSBh biBpc3N1ZSBmb3IgbW9zdCB1c2VzLiBGb3IgZm9yay1hZnRlci1leGVjDQor ICogd2UnbGwgYmUgaW4gdGhlIHN0YXJ0IG9mIHRoZSBsaW5rZWQgbGlzdCBh bmQgOTAlIG9mIHByb2Nlc3Nlcw0KKyAqIHNlZW0gdG8gYmUgc2hvcnQtbGl2 ZWQgYW5kIHdpbGwgYmUgaW4gdGhlIHN0YXJ0IG9mIHRoZSBsaXN0Lg0KKyAq DQorICogVHVybmluZyB0aGlzIGludG8gYSBkb3VibHktbGlua2VkIGxpc3Qg d2l0aCBmb3J3YXJkIG1hcHBpbmcgZnJvbQ0KKyAqIGVhY2ggcHJvY2VzcyB0 byB0aGUgcHRlX2NoYWluIHN0cnVjdHVyZSBjb3VsZCBiZSBhIGJlbmlmaXQg b24NCisgKiB3b3JrbG9hZHMgd2hlcmUgdGhlIHN5c3RlbSBoYXMgbG90cyBv ZiBwcm9ncmFtcyB3aGljaCBleGl0IGFmdGVyDQorICogYWJvdXQgYW4gZXF1 YWwgdGltZSwgc2F5IGFwYWNoZSB3aXRoIGEgZmV3IGh1bmRyZWQgY2hpbGRy ZW4uDQorICogT1RPSCwgaW4gdGhvc2UgY2FzZXMgdGhlIGNoaWxkIHByb2Nl c3NlcyBzaG91bGRuJ3QgYmUgZXhpdGluZyBhbGwNCisgKiB0aGF0IG9mdGVu Lg0KKyAqLw0KK3N0cnVjdCBwdGVfY2hhaW4gew0KKwlzdHJ1Y3QgcHRlX2No YWluICogbmV4dDsNCisJcHRlX3QgKiBwdGVwOw0KK307DQorDQorc3RhdGlj IHN0cnVjdCBwdGVfY2hhaW4gKiBwdGVfY2hhaW5fZnJlZWxpc3Q7DQorDQor c3RhdGljIHN0cnVjdCBwdGVfY2hhaW4gKiBwdGVfY2hhaW5fYWxsb2Modm9p ZCk7DQorc3RhdGljIHZvaWQgcHRlX2NoYWluX2ZyZWUoc3RydWN0IHB0ZV9j aGFpbiAqLCBzdHJ1Y3QgcHRlX2NoYWluICosIHN0cnVjdCBwYWdlICopOw0K Kw0KKy8qDQorICogUXVpY2sgdGVzdF9hbmRfY2xlYXIgcmVmZXJlbmNlZCBm b3IgYWxsIG1hcHBpbmdzIHRvIGEgcGFnZS4NCisgKg0KKyAqIFRoZSBjYWxs ZXIgbmVlZHMgdG8gaG9sZCB0aGUgcGFnZW1hcF9scnVfbG9jay4NCisgKi8N CitpbnQgcGFnZV9yZWZlcmVuY2VkKHN0cnVjdCBwYWdlICogcGFnZSkNCit7 DQorCXN0cnVjdCBwdGVfY2hhaW4gKiBwdGVfY2hhaW4gPSBwYWdlLT5wdGVf Y2hhaW47DQorCWludCByZWZlcmVuY2VkID0gMDsNCisNCisJaWYgKFBhZ2VS ZWZlcmVuY2VkKHBhZ2UpKQ0KKwkJcmVmZXJlbmNlZCsrOw0KKw0KKwl3aGls ZSAocHRlX2NoYWluKSB7DQorCQlpZiAocHRlcF90ZXN0X2FuZF9jbGVhcl95 b3VuZyhwdGVfY2hhaW4tPnB0ZXApKQ0KKwkJCXJlZmVyZW5jZWQrKzsNCisJ CXB0ZV9jaGFpbiA9IHB0ZV9jaGFpbi0+bmV4dDsNCisJfQ0KKw0KKwlyZXR1 cm4gcmVmZXJlbmNlZDsNCit9DQorDQorLyoNCisgKiBBZGQgYSBuZXcgcHRl IHJldmVyc2UgbWFwcGluZyB0byBhIHBhZ2UuIE5ldyBwYWdlcyBnZXQgYWRk ZWQNCisgKiB0byB0aGUgcGFnZW91dCBsaXN0cywgcmVzZXJ2ZWQgYW5kIG5v bmV4aXN0YW50IHBhZ2VzIChlZy4NCisgKiBtbWFwZWQgZGV2aWNlcykgZ2V0 IHNraXBwZWQuICBJbiBvcmRlciB0byBwcmV2ZW50IHJhY2VzIHdpdGgNCisg KiB0aGUgcGFnZW91dCBjb2RlIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkg Z2V0IGNhbGxlZCBhZnRlcg0KKyAqIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGhh cyBiZWVuIHNldCB1cC4NCisgKg0KKyAqIFRoZSBjYWxsZXIgbmVlZHMgdG8g aG9sZCB0aGUgbW0tPnBhZ2VfdGFibGVfbG9jay4NCisgKi8NCit2b2lkIHBh Z2VfYWRkX3BtYXAoc3RydWN0IHBhZ2UgKiBwYWdlLCBwdGVfdCAqIHB0ZXAp DQorew0KKwlzdHJ1Y3QgcHRlX2NoYWluICogcHRlX2NoYWluOw0KKwlzdHJ1 Y3QgcGFnZSAqIHB0ZV9wYWdlID0gdmlydF90b19wYWdlKHB0ZXApOw0KKyNp ZmRlZiBERUJVRw0KKwlzdHJ1Y3QgbW1fc3RydWN0ICogbW0gPSAodm9pZCAq KSBwdGVfcGFnZS0+bWFwcGluZzsNCisNCisJaWYgKCFtbSkNCisJCUJVRygp Ow0KKyNlbmRpZg0KKw0KKwlpZiAoIXBhZ2UgfHwgIXB0ZXApDQorCQlCVUco KTsNCisNCisJaWYgKCFwdGVfcHJlc2VudCgqcHRlcCkpDQorCQlyZXR1cm47 DQorDQorCWlmICghVkFMSURfUEFHRShwYWdlKSB8fCBQYWdlUmVzZXJ2ZWQo cGFnZSkpDQorCQlyZXR1cm47DQorDQorCXNwaW5fbG9jaygmcGFnZW1hcF9s cnVfbG9jayk7DQorI2lmZGVmIERFQlVHDQorCXB0ZV9jaGFpbiA9IHBhZ2Ut PnB0ZV9jaGFpbjsNCisJd2hpbGUgKHB0ZV9jaGFpbikgew0KKwkJaWYgKHB0 ZV9jaGFpbi0+cHRlcCA9PSBwdGVwKSB7DQorCQkJcHJpbnRrKCJwYWdlX2Fk ZF9wbWFwOiBwbWFwIGZvciB0aGlzIChwYWdlLCAqcHRlKSBhbHJlYWR5IHBy ZXNlbnQhXG4iKTsNCisJCQlCVUcoKTsNCisJCX0NCisJCXB0ZV9jaGFpbiA9 IHB0ZV9jaGFpbi0+bmV4dDsNCisJfQ0KKyNlbmRpZg0KKwlwdGVfY2hhaW4g PSBwdGVfY2hhaW5fYWxsb2MoKTsNCisNCisJcHRlX2NoYWluLT5wdGVwID0g cHRlcDsNCisNCisJcHRlX2NoYWluLT5uZXh0ID0gcGFnZS0+cHRlX2NoYWlu Ow0KKwlwYWdlLT5wdGVfY2hhaW4gPSBwdGVfY2hhaW47DQorDQorCS8qDQor CSAqIFdlIGNhbiBnZXQgY2FsbGVkIHdpdGggbmV3IHBhZ2VzLCB3aGljaCBh cmUgbm90IG9uIGFueSBvZg0KKwkgKiB0aGUgcGFnZW91dCBsaXN0cyB5ZXQs IGluIHRoYXQgY2FzZSB3ZSBhZGQgdGhlIHBhZ2UgaGVyZS4NCisJICovDQor CWlmICgocGFnZS0+ZmxhZ3MgJiAoKDE8PFBHX2FjdGl2ZSl8KDE8PFBHX2lu YWN0aXZlX2RpcnR5KXwNCisJCQkJCQkoMTw8UEdfaW5hY3RpdmVfY2xlYW4p KSkgPT0gMCkNCisJCWFkZF9wYWdlX3RvX2FjdGl2ZV9saXN0KHBhZ2UpOw0K Kw0KKwlzcGluX3VubG9jaygmcGFnZW1hcF9scnVfbG9jayk7DQorfQ0KKw0K Ky8qKg0KKyAqIHBhZ2VfcmVtb3ZlX3BtYXAgLSByZW1vdmUgb25lIG1hcHBp bmcgdG8gYSBwYWdlDQorICogQHBhZ2U6IHBhZ2UgdG8gcmVtb3ZlIG1hcHBp bmcgZnJvbQ0KKyAqIEBwdGVwOiBwYWdlIHRhYmxlIGVudHJ5IHRvIHJlbW92 ZQ0KKyAqDQorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIGEgcmV2ZXJzZSBw dGUgbWFwcGluZyBzdHJ1Y3R1cmUgZnJvbSB0aGUNCisgKiBwdGVfY2hhaW4g b2YgYSBwYWdlLiBBZnRlciB0aGlzIHRoZSBjYWxsZXIgY2FuIGNsZWFyIHRo ZSBwYWdlDQorICogdGFibGUgZW50cnkgYW5kIGZyZWUgdGhlIHBhZ2UuDQor ICoNCisgKiBUaGUgY2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIG1tLT5wYWdl X3RhYmxlX2xvY2sNCisgKi8NCitpbnQgcGFnZV9yZW1vdmVfcG1hcChzdHJ1 Y3QgcGFnZSAqIHBhZ2UsIHB0ZV90ICogcHRlcCkNCit7DQorCXN0cnVjdCBw dGVfY2hhaW4gKiBwdGVfY2hhaW47DQorCXN0cnVjdCBwdGVfY2hhaW4gKiBw cmV2X3B0ZV9jaGFpbiA9IE5VTEw7DQorCWludCByZXQgPSBTV0FQX0VSUk9S Ow0KKw0KKwlpZiAoIXBhZ2UgfHwgIXB0ZXApDQorCQlCVUcoKTsNCisNCisJ aWYgKCFWQUxJRF9QQUdFKHBhZ2UpIHx8IFBhZ2VSZXNlcnZlZChwYWdlKSkN CisJCXJldHVybiBTV0FQX1NVQ0NFU1M7DQorDQorCXNwaW5fbG9jaygmcGFn ZW1hcF9scnVfbG9jayk7DQorCXB0ZV9jaGFpbiA9IHBhZ2UtPnB0ZV9jaGFp bjsNCisJd2hpbGUgKHB0ZV9jaGFpbikgew0KKwkJaWYgKHB0ZV9jaGFpbi0+ cHRlcCA9PSBwdGVwKSB7DQorCQkJcHRlX2NoYWluX2ZyZWUocHRlX2NoYWlu LCBwcmV2X3B0ZV9jaGFpbiwgcGFnZSk7DQorCQkJcmV0ID0gU1dBUF9TVUND RVNTOw0KKwkJCWdvdG8gb3V0Ow0KKwkJfQ0KKwkJDQorCQlwcmV2X3B0ZV9j aGFpbiA9IHB0ZV9jaGFpbjsNCisJCXB0ZV9jaGFpbiA9IHB0ZV9jaGFpbi0+ bmV4dDsNCisJfQ0KKwlnb3RvIG5vdGZvdW5kOw0KK291dDoNCisJc3Bpbl91 bmxvY2soJnBhZ2VtYXBfbHJ1X2xvY2spOw0KKwlyZXR1cm4gcmV0Ow0KKw0K K25vdGZvdW5kOg0KKwkvKiBOb3QgZm91bmQsIHNob3VsZCBuZXZlciBoYXBw ZW4uICovDQorCXByaW50aygicGFnZV9yZW1vdmVfcG1hcDogcHRlX2NoYWlu ICVwIG5vdCBwcmVzZW50Li4uXG4iLCBwdGVwKTsNCisJcHJpbnRrKCJwYWdl X3JlbW92ZV9wbWFwOiBvbmx5IGZvdW5kOiAiKTsNCisJcHRlX2NoYWluID0g cGFnZS0+cHRlX2NoYWluOw0KKwl3aGlsZSAocHRlX2NoYWluKSB7DQorCQlw cmludGsoIiVwICIsIHB0ZV9jaGFpbi0+cHRlcCk7DQorCQlwdGVfY2hhaW4g PSBwdGVfY2hhaW4tPm5leHQ7DQorCX0NCisJcHJpbnRrKCJcbiIpOw0KKwlw YW5pYygicGFnZV9yZW1vdmVfcG1hcDogZ2l2aW5nIHVwLlxuIik7DQorfQ0K Kw0KKy8qDQorICogV29ya2VyIGZ1bmN0aW9uIGZvciBwYWdlX3JlbW92ZV9h bGxfcG1hcHMoKS4NCisgKi8NCitzdGF0aWMgaW50IHBtYXBfcmVtb3ZlKHN0 cnVjdCBwYWdlICogcGFnZSwgc3RydWN0IHB0ZV9jaGFpbiAqIHB0ZV9jaGFp biwgc3RydWN0IHB0ZV9jaGFpbiAqIHByZXZfcHRlX2NoYWluKQ0KK3sNCisJ cHRlX3QgKiBwdGVwID0gcHRlX2NoYWluLT5wdGVwOw0KKwlzdHJ1Y3QgcGFn ZSAqIHB0ZV9wYWdlOw0KKwlzdHJ1Y3QgbW1fc3RydWN0ICogbW07DQorCXVu c2lnbmVkIGxvbmcgYWRkcmVzcywgbG93X2FkZHJlc3M7DQorDQorCS8qIENh bGN1bGF0ZSB0aGUgYXJndW1lbnRzIHRvIHRyeV90b19zd2FwX291dC4uLiAq Lw0KKwlwdGVfcGFnZSA9IHZpcnRfdG9fcGFnZShwdGVwKTsNCisJLyogWFhY OiBnZXQgdGhpcyByaWdodCBmb3Igbm9uLXg4NiAuLiBwZXItYXJjaCBwdGVf YWRkciBtYWNyb3M/ICovDQorCWxvd19hZGRyZXNzID0gKCh1bnNpZ25lZCBs b25nKXB0ZXAgJiB+UEFHRV9NQVNLKSAqIFBUUlNfUEVSX1BURTsNCisJYWRk cmVzcyA9IHB0ZV9wYWdlLT5pbmRleCArIGxvd19hZGRyZXNzOw0KKwltbSA9 ICh2b2lkICopIHB0ZV9wYWdlLT5tYXBwaW5nOw0KKwlpZiAoIW1tKSB7DQor CQlwcmludGsoInBtYXBfcmVtb3ZlOiBOVUxMIG1tLCAlbHggYWRkcmVzc1xu IiwgYWRkcmVzcyk7DQorCQlCVUcoKTsNCisJfQ0KKw0KKwlyZXR1cm4gdHJ5 X3RvX3N3YXBfb3V0KG1tLCBhZGRyZXNzLCBwdGVwLCBwYWdlKTsNCit9DQor DQorLyoqDQorICogcGFnZV9yZW1vdmVfYWxsX3BtYXBzIC0gcmVtb3ZlIGFs bCBtYXBwaW5ncyB0byBhIHBhZ2UNCisgKiBAcGFnZTogdGhlIHBhZ2UgdG8g cmVtb3ZlIG1hcHBpbmdzIGZyb20NCisgKg0KKyAqIFRoaXMgZnVuY3Rpb24g dHJpZXMgdG8gcmVtb3ZlIGFsbCBtYXBwaW5ncyB0byBhIHBhZ2UsIGl0IGNh biBmYWlsDQorICogaWYgaXQgbWlzc2VkIGEgdHJ5bG9jayAoU1dBUF9BR0FJ Tikgb3IgaWYgaXQgcnVucyBvdXQgb2Ygc3dhcCBvcg0KKyAqIGVuY291bnRl cnMgYW4gdW5zd2FwcGFibGUgcGFnZSAoU1dBUF9GQUlMKS4NCisgKg0KKyAq IFRoZSBjYWxsZXIgbXVzdCBob2xkIGJvdGggdGhlIHBhZ2VtYXBfbHJ1X2xv Y2sgYW5kIHRoZSBwYWdlIGxvY2sgZm9yDQorICogdGhlIHNwZWNpZmllZCBw YWdlLg0KKyAqLw0KK2ludCBwYWdlX3JlbW92ZV9hbGxfcG1hcHMoc3RydWN0 IHBhZ2UgKiBwYWdlKQ0KK3sNCisJc3RydWN0IHB0ZV9jaGFpbiAqIHB0ZV9j aGFpbiA9IHBhZ2UtPnB0ZV9jaGFpbjsNCisJc3RydWN0IHB0ZV9jaGFpbiAq IHByZXZfcHRlX2NoYWluID0gTlVMTDsNCisJaW50IHJldCA9IFNXQVBfU1VD Q0VTUzsNCisNCisJLyogVGhlc2UgcGFnZXMgc2hvdWxkIG5ldmVyIGVuZCB1 cCBvbiB0aGUgcGFnZW91dCBsaXN0cy4gKi8NCisJaWYgKCFWQUxJRF9QQUdF KHBhZ2UpIHx8IFBhZ2VSZXNlcnZlZChwYWdlKSkNCisJCUJVRygpOw0KKw0K KwlpZiAoIVBhZ2VMb2NrZWQocGFnZSkpDQorCQlCVUcoKTsNCisNCisJd2hp bGUgKHB0ZV9jaGFpbikgew0KKwkJc3dpdGNoIChwbWFwX3JlbW92ZShwYWdl LCBwdGVfY2hhaW4sIHByZXZfcHRlX2NoYWluKSkgew0KKwkJCWNhc2UgU1dB UF9TVUNDRVNTOg0KKwkJCQkvKiBGcmVlIHRoZSBjdXJyZW50IHB0ZV9jaGFp biAuLi4gKi8NCisJCQkJcHRlX2NoYWluLT5wdGVwID0gTlVMTDsNCisJCQkJ cHRlX2NoYWluX2ZyZWUocHRlX2NoYWluLCBwcmV2X3B0ZV9jaGFpbiwgcGFn ZSk7DQorCQkJCS8qIC4uLiBhbmQgc3RhcnQgYXQgdGhlIGhlYWQgb2YgdGhl IG5ldyBsaXN0LiAqLw0KKwkJCQlwdGVfY2hhaW4gPSBwYWdlLT5wdGVfY2hh aW47DQorCQkJCWJyZWFrOw0KKwkJCWNhc2UgU1dBUF9BR0FJTjoNCisJCQkJ LyogU2tpcCB0aGlzIHB0ZSBpZiB3ZSBtaXNzZWQgYSB0cnlsb2NrLiAqLw0K KwkJCQlwcmV2X3B0ZV9jaGFpbiA9IHB0ZV9jaGFpbjsNCisJCQkJcHRlX2No YWluID0gcHRlX2NoYWluLT5uZXh0Ow0KKwkJCQlyZXQgPSBTV0FQX0FHQUlO Ow0KKwkJCQlicmVhazsNCisJCQljYXNlIFNXQVBfRkFJTDoNCisJCQkJLyog R2l2ZSB1cCBpZiB0aGUgcGFnZSBpcyB1bnN3YXBwYWJsZS4gKi8NCisJCQkJ cmV0dXJuIFNXQVBfRkFJTDsNCisJCQljYXNlIFNXQVBfRVJST1I6DQorCQkJ CS8qIEFpZWVlLCBpbnZhbGlkIGFyZ3VtZW50cyAuLi4gKi8NCisJCQkJcHJp bnRrKCJwYWdlX3JlbW92ZV9hbGxfcG1hcHM6IFNXQVBfRVJST1JcbiIpOw0K KwkJCQlyZXR1cm4gU1dBUF9FUlJPUjsNCisJCX0NCisJfQ0KKw0KKwlyZXR1 cm4gcmV0Ow0KK30NCisNCisvKg0KKyAqIEhlbHBlciBmdW5jdGlvbiB0byB1 bmxpbmsgZnJlZWQgcHRlX2NoYWluIHN0cnVjdHVyZXMgYW5kIGFkZA0KKyAq IHRoZW0gdG8gdGhlIGZyZWVsaXN0LiBQcm90ZWN0ZWQgYnkgdGhlIHBhZ2Vt YXBfbHJ1X2xvY2suDQorICovDQorc3RhdGljIHZvaWQgcHRlX2NoYWluX2Zy ZWUoc3RydWN0IHB0ZV9jaGFpbiAqIHB0ZV9jaGFpbiwgc3RydWN0IHB0ZV9j aGFpbiAqIHByZXZfcHRlX2NoYWluLCBzdHJ1Y3QgcGFnZSAqIHBhZ2UpDQor ew0KKwlpZiAocHJldl9wdGVfY2hhaW4pDQorCQlwcmV2X3B0ZV9jaGFpbi0+ bmV4dCA9IHB0ZV9jaGFpbi0+bmV4dDsNCisJZWxzZSBpZiAocGFnZSkNCisJ CXBhZ2UtPnB0ZV9jaGFpbiA9IHB0ZV9jaGFpbi0+bmV4dDsNCisNCisJcHRl X2NoYWluLT5uZXh0ID0gcHRlX2NoYWluX2ZyZWVsaXN0Ow0KKwlwdGVfY2hh aW5fZnJlZWxpc3QgPSBwdGVfY2hhaW47DQorfQ0KKw0KKy8qDQorICogV2hl biB3ZSBjYW5ub3QgYWxsb2NhdGUgYSBuZXcgcHRlX2NoYWluIHN0cnVjdHVy ZSwgd2Ugc2ltcGx5IHVubWFwDQorICogc29tZSBvdGhlciBwYWdlIHRhYmxl IGVudHJpZXMgaW4gdGhlIHN5c3RlbSBhbmQgdXNlIHRob3NlLg0KKyAqDQor ICogVE9ETzogaW1wbGVtZW50YXRpb24gLS0gUmlrDQorICovDQorc3RhdGlj IHZvaWQgcHRlX2NoYWluX3JlY2xhaW0odm9pZCkNCit7DQorCXBhbmljKCJJ bXBsZW1lbnQgcHRlX2NoYWluX3JlY2xhaW0sIHlvdSBsYXp5IGJhc3RhcmQh XG4iKTsNCit9DQorDQorLyoNCisgKiBBbGxvY2F0ZXMgYSBwYWdlZnVsIG9m IG5ldyBwdGVfY2hhaW5zLiBJZiB0aGUgcGFnZSBhbGxvY2F0aW9uDQorICog ZmFpbHMgd2Ugc2ltcGx5IHJlY2xhaW0gcHRlX2NoYWluIHN0cnVjdHVyZXMg d2hpY2ggYXJlIGluIHVzZQ0KKyAqIGluIHRoZSBzeXN0ZW0uIEFsd2F5cyBz dWNjZWVkcy4NCisgKi8NCitzdGF0aWMgdm9pZCBhbGxvY19uZXdfcHRlX2No YWlucyh2b2lkKQ0KK3sNCisJc3RydWN0IHB0ZV9jaGFpbiAqIHB0ZV9jaGFp bjsNCisJdm9pZCAqIHBhZ2UgPSAodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2Uo R0ZQX0FUT01JQyk7DQorCWlmIChwYWdlKSB7DQorCQlpbnQgY291bnQgPSBQ QUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IHB0ZV9jaGFpbik7DQorCQlwdGVf Y2hhaW4gPSBwYWdlOw0KKwkJZG8gew0KKwkJCXB0ZV9jaGFpbl9mcmVlKHB0 ZV9jaGFpbiwgTlVMTCwgTlVMTCk7DQorCQkJcHRlX2NoYWluKys7DQorCQl9 IHdoaWxlICgtLWNvdW50ID4gMCk7DQorCX0gZWxzZSB7DQorCQkvKiBSZWNs YWltIHB0ZV9jaGFpbiBzdHJ1Y3R1cmVzIHdoaWNoIGFyZSBpbiB1c2UuICov DQorCQlwdGVfY2hhaW5fcmVjbGFpbSgpOw0KKwl9DQorfQ0KKw0KKy8qDQor ICogR3JhYiBhIHB0ZV9jaGFpbiBvZmYgdGhlIGZyZWVsaXN0LCBhbGxvY2F0 aW5nIG5ldyBwdGVfY2hhaW5zDQorICogaWYgbmVjZXNzYXJ5LiBXZSBhcmUg cHJvdGVjdGVkIGJ5IHRoZSBwYWdlbWFwX2xydV9sb2NrLg0KKyAqLw0KK3N0 YXRpYyBzdHJ1Y3QgcHRlX2NoYWluICogcHRlX2NoYWluX2FsbG9jKHZvaWQp DQorew0KKwlzdHJ1Y3QgcHRlX2NoYWluICogcHRlX2NoYWluOw0KKw0KKwkv Kg0KKwkgKiBJZiB3ZSBydW4gb3V0IG9mIGZyZWUgcHRlX2NoYWluIHN0cnVj dHVyZXMsIHdlIHRyeSB0bw0KKwkgKiBhbGxvY2F0ZSBhIHBhZ2Ugb2YgbWVt b3J5IGFuZCBjb252ZXJ0IHRoYXQgaW50byBuZXcNCisJICogcHRlX2NoYWlu IHN0cnVjdHVyZXMuDQorCSAqLw0KKwlpZiAoIXB0ZV9jaGFpbl9mcmVlbGlz dCkgew0KKwkJYWxsb2NfbmV3X3B0ZV9jaGFpbnMoKTsNCisJfQ0KKw0KKwkv KiBSZW1vdmUgcHRlX2NoYWluIGZyb20gbGlzdCBhbmQgcmV0dXJuIGl0LiAq Lw0KKwlwdGVfY2hhaW4gPSBwdGVfY2hhaW5fZnJlZWxpc3Q7DQorCXB0ZV9j aGFpbl9mcmVlbGlzdCA9IHB0ZV9jaGFpbi0+bmV4dDsNCisJcHRlX2NoYWlu LT5uZXh0ID0gMDsNCisNCisJcmV0dXJuIHB0ZV9jaGFpbjsNCit9DQotLS0g bGludXgtMi40LjcvaW5jbHVkZS9saW51eC9tbS5oLm9yaWcJVGh1IEp1bCAy NiAxMzoyMjo0NiAyMDAxDQorKysgbGludXgtMi40LjcvaW5jbHVkZS9saW51 eC9tbS5oCVRodSBKdWwgMjYgMTM6NTA6NDkgMjAwMQ0KQEAgLTEzMCw2ICsx MzAsOSBAQA0KIAlzdHJ1Y3QgcGFnZSAqICgqbm9wYWdlKShzdHJ1Y3Qgdm1f YXJlYV9zdHJ1Y3QgKiBhcmVhLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGlu dCB3cml0ZV9hY2Nlc3MpOw0KIH07DQogDQorLyogSW5jb21wbGV0ZSBkZWNs YXJhdGlvbjsgcHRlX2NoYWluIGlzIGludGVybmFsIHRvIG1tL3BtYXAuYyAq Lw0KK3N0cnVjdCBwdGVfY2hhaW47DQorDQogLyoNCiAgKiBFYWNoIHBoeXNp Y2FsIHBhZ2UgaW4gdGhlIHN5c3RlbSBoYXMgYSBzdHJ1Y3QgcGFnZSBhc3Nv Y2lhdGVkIHdpdGgNCiAgKiBpdCB0byBrZWVwIHRyYWNrIG9mIHdoYXRldmVy IGl0IGlzIHdlIGFyZSB1c2luZyB0aGUgcGFnZSBmb3IgYXQgdGhlDQpAQCAt MTU3LDYgKzE2MCw3IEBADQogCXN0cnVjdCBsaXN0X2hlYWQgbHJ1OwkJLyog UGFnZW91dCBsaXN0LCBlZy4gYWN0aXZlX2xpc3Q7DQogCQkJCQkgICBwcm90 ZWN0ZWQgYnkgcGFnZW1hcF9scnVfbG9jayAhISAqLw0KIAl1bnNpZ25lZCBs b25nIGFnZTsJCS8qIFBhZ2UgYWdpbmcgY291bnRlci4gKi8NCisJc3RydWN0 IHB0ZV9jaGFpbiAqIHB0ZV9jaGFpbjsJLyogUmV2ZXJzZSBwdGUgbWFwcGlu ZyBwb2ludGVyLiAqLw0KIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwkJLyog UGFnZSBsb2NrZWQ/ICBTdGFuZCBpbiBsaW5lLi4uICovDQogCXN0cnVjdCBw YWdlICoqcHByZXZfaGFzaDsJLyogQ29tcGxlbWVudCB0byAqbmV4dF9oYXNo LiAqLw0KIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBidWZmZXJzOwkvKiBCdWZm ZXIgbWFwcyB1cyB0byBhIGRpc2sgYmxvY2suICovDQotLS0gbGludXgtMi40 LjcvaW5jbHVkZS9saW51eC9zd2FwLmgub3JpZwlUaHUgSnVsIDI2IDEzOjIy OjUwIDIwMDENCisrKyBsaW51eC0yLjQuNy9pbmNsdWRlL2xpbnV4L3N3YXAu aAlUaHUgSnVsIDI2IDEzOjUyOjQ4IDIwMDENCkBAIC05OCw2ICs5OCwxOCBA QA0KIA0KIHN0cnVjdCB6b25lX3Q7DQogDQorLyogbGludXgvbW0vcG1hcC5j ICovDQorZXh0ZXJuIGludCBwYWdlX3JlZmVyZW5jZWQoc3RydWN0IHBhZ2Ug Kik7DQorZXh0ZXJuIHZvaWQgcGFnZV9hZGRfcG1hcChzdHJ1Y3QgcGFnZSAq LCBwdGVfdCAqKTsNCitleHRlcm4gaW50IHBhZ2VfcmVtb3ZlX3BtYXAoc3Ry dWN0IHBhZ2UgKiwgcHRlX3QgKik7DQorZXh0ZXJuIGludCBwYWdlX3JlbW92 ZV9hbGxfcG1hcHMoc3RydWN0IHBhZ2UgKik7DQorDQorLyogcGFnZV91bm1h cF9hbGxfcG1hcHMgYW5kIHRyeV90b19zd2FwX291dCByZXR1cm4gdmFsdWVz ICovDQorI2RlZmluZQlTV0FQX1NVQ0NFU1MJMAkvKiB1bm1hcHBlZCBldmVy eSB1c2VyIG9mIHRoZSBwYWdlICovDQorI2RlZmluZSBTV0FQX0FHQUlOCTEJ LyogbWlzc2VkIGEgdHJ5bG9jaywgdHJ5IGFnYWluIGxhdGVyICovDQorI2Rl ZmluZSBTV0FQX0ZBSUwJMgkvKiBjYW5ub3Qgc3dhcCB0aGlzIHBhZ2Ugb3V0 LCByZWFjdGl2YXRlICovDQorI2RlZmluZQlTV0FQX0VSUk9SCTMJLyogaWxs ZWdhbCBhcmd1bWVudHMgb3IgbWlzYyBlcnJvciAqLw0KKw0KIC8qIGxpbnV4 L21tL3N3YXAuYyAqLw0KIGV4dGVybiBpbnQgbWVtb3J5X3ByZXNzdXJlOw0K IGV4dGVybiB2b2lkIGFnZV9wYWdlX3VwKHN0cnVjdCBwYWdlICopOw0KQEAg LTExNiw2ICsxMjgsNyBAQA0KIGV4dGVybiB2b2lkIHN3YXBfc2V0dXAodm9p ZCk7DQogDQogLyogbGludXgvbW0vdm1zY2FuLmMgKi8NCitleHRlcm4gaW50 IHRyeV90b19zd2FwX291dChzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVk IGxvbmcsIHB0ZV90ICosIHN0cnVjdCBwYWdlICopOw0KIGV4dGVybiBzdHJ1 Y3QgcGFnZSAqIHJlY2xhaW1fcGFnZSh6b25lX3QgKik7DQogZXh0ZXJuIHdh aXRfcXVldWVfaGVhZF90IGtzd2FwZF93YWl0Ow0KIGV4dGVybiB3YWl0X3F1 ZXVlX2hlYWRfdCBrcmVjbGFpbWRfd2FpdDsNCkBAIC0yNjEsOCArMjc0LDgg QEANCiAgKi8NCiAjZGVmaW5lIElOQUNUSVZFX1NISUZUIDYNCiAjZGVmaW5l IGluYWN0aXZlX21pbihhLGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpDQot I2RlZmluZSBpbmFjdGl2ZV90YXJnZXQgaW5hY3RpdmVfbWluKChtZW1vcnlf cHJlc3N1cmUgPj4gSU5BQ1RJVkVfU0hJRlQpLCBcDQotCQkobnVtX3BoeXNw YWdlcyAvIDQpKQ0KKyNkZWZpbmUgaW5hY3RpdmVfdGFyZ2V0IGluYWN0aXZl X21pbigoKG1lbW9yeV9wcmVzc3VyZSA+PiBJTkFDVElWRV9TSElGVCksIFwN CisJCQkobnVtX3BoeXNwYWdlcyAvIDQpKQ0KIA0KIC8qDQogICogVWdseSB1 Z2x5IHVnbHkgSEFDSyB0byBtYWtlIHN1cmUgdGhlIGluYWN0aXZlIGxpc3Rz DQotLS0gbGludXgtMi40LjcvVE9ETy5vcmlnCVRodSBKdWwgMjYgMTM6NTg6 MDAgMjAwMQ0KKysrIGxpbnV4LTIuNC43L1RPRE8JVGh1IEp1bCAyNiAxMzoy NTo0MSAyMDAxDQpAQCAtMCwwICsxLDMyIEBADQorCXJldmVyc2UgbWFwcGlu ZyBUT0RPDQorDQorLSBwYWdlX2FkZF9wbWFwIC8gcGFnZV9yZW1vdmVfcG1h cCAvIC4uLiBMT0NBTCBMT0NLSU5HICENCistIHJlbW92ZSBhZGRfdG9fc3dh cF9jYWNoZSgpIFNNUCBkZWFkbG9jayBwYWdlbWFwX2xydV9sb2NrL3BhZ2Vj YWNoZV9sb2NrDQorLSBtYWtlIHBtYXBfcmVtb3ZlKCkvcHRlX2FsbG9jKCkg cG9ydGFibGUgLi4uIHBlci1hcmNoIHB0ZV9hZGRyIG1hY3JvcyA/DQorLSBu byBwdGVfY2hhaW4gc3RydWN0IGZvciB1bnNoYXJlZCBwYWdlcywgZGlyZWN0 IHB0ZV90ICoNCistIGltcGxlbWVudCBwdGVfY2hhaW5fcmVjbGFpbSgpDQor DQorLSBleHBsaWNpdCBzd2Fwb3V0IGNsdXN0ZXJpbmcgaW4gdHJ5X3RvX3N3 YXBfb3V0KCkNCistIGRlZnJhZ21lbnRhdGlvbiBmb3IgX19hbGxvY19wYWdl cygpIC4uLg0KKy0gc3dhcCBjaGFpbmluZyA/Pz8/IChzd2FwcGFibGUgc3dh cCBjaGFpbnM/KSAod2h5PyA7KSkgDQorDQorDQorCXB0ZSAvIGdldCAvIHBt YXAgb3JkZXINCisNCisgLS0gYWRkaW5nIGEgcGFnZQ0KKzEuIGluY3JlbWVu dCBwYWdlIGNvdW50DQorMi4gc2V0dXAgcGFnZSB0YWJsZSBlbnRyeQ0KKzMu IGFkZCBwYWdlIHRvIHBtYXANCisNCisgLS0gcmVtb3ZpbmcgYSBwYWdlDQor MS4gcmVtb3ZlIHBtYXANCisyLiBjbGVhciBwYWdlIHRhYmxlIGVudHJ5DQor My4gZGVjcmVtZW50IHBhZ2UgY291bnQNCisNCitUaGlzIGludGVyZmVyZXMg d2l0aCB0aGUgcGFnZW91dCBjb2RlIGluIG9ubHkgb25lIHdheTogaWYNCit0 aGUgcGFnZW91dCBjb2RlIGNhdGNoZXMgdGhlIHBhZ2Ugd2l0aG91dCBvdXIg cG1hcCBlbnRyeQ0KK2J1dCB3aXRoIG91ciBpbmNyZW1lbnRlZCBwYWdlIGNv dW50LCBpdCdsbCBtb3ZlIHRoZSBwYWdlDQordG8gdGhlIGFjdGl2ZSBsaXN0 IGFuZCB3aWxsIG5vdCBnZXQgYXJvdW5kIHRvIHN3YXBwaW5nIGl0DQorb3V0 IHJpZ2h0IG5vdy4gIFRoaXMgaXMgYSB2ZXJ5IG5hcnJvdyByYWNlIHdpbmRv dyBzbyB0aGUNCitjaGFuY2VzIG9mIGl0IGhhcHBlbmluZyBhcmUgc21hbGwg YW5kIGltcGFjdCBvbiB0aGUgc3lzdGVtDQorc2hvdWxkIGJlIHplcm8uDQo= --655889-615121386-998498978=:31410-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/