From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from zps75.corp.google.com (zps75.corp.google.com [172.25.146.75]) by smtp-out.google.com with ESMTP id lAUGaiYP001284 for ; Fri, 30 Nov 2007 16:36:45 GMT Received: from mu-out-0910.google.com (muei2.prod.google.com [10.102.160.2]) by zps75.corp.google.com with ESMTP id lAUGZnFr002478 for ; Fri, 30 Nov 2007 08:36:43 -0800 Received: by mu-out-0910.google.com with SMTP id i2so3929023mue for ; Fri, 30 Nov 2007 08:36:42 -0800 (PST) Message-ID: Date: Fri, 30 Nov 2007 11:36:42 -0500 From: "Ross Biro" Subject: Re: RFC/POC Make Page Tables Relocatable Part 2 Page Table Migration Code MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_2003_23435539.1196440602892" Sender: owner-linux-mm@kvack.org Return-Path: To: Mel Gorman Cc: Dave Hansen , linux-mm@kvack.org, Mel Gorman List-ID: ------=_Part_2003_23435539.1196440602892 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Here's the actual page table migration code. I'm not sure I plugged it into the correct spot, but it works well enough to test. Ross ------=_Part_2003_23435539.1196440602892 Content-Type: application/octet-stream; name=relocate.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_f9mxsyxa0 Content-Disposition: attachment; filename=relocate.patch ZGlmZiAtdXJ3TmJCIDIuNi4yMy9hcmNoL2kzODYvbW0vaHVnZXRsYnBhZ2UuYyAyLjYuMjNhL2Fy Y2gvaTM4Ni9tbS9odWdldGxicGFnZS5jCi0tLSAyLjYuMjMvYXJjaC9pMzg2L21tL2h1Z2V0bGJw YWdlLmMJMjAwNy0xMC0wOSAxMzozMTozOC4wMDAwMDAwMDAgLTA3MDAKKysrIDIuNi4yM2EvYXJj aC9pMzg2L21tL2h1Z2V0bGJwYWdlLmMJMjAwNy0xMC0yOSAwOTo0ODo0OC4wMDAwMDAwMDAgLTA3 MDAKQEAgLTg3LDYgKzg3LDcgQEAKIAkJZ290byBvdXQ7CiAKIAlzcGluX2xvY2soJm1tLT5wYWdl X3RhYmxlX2xvY2spOworCWRlbGltYm9fcHVkKCZwdWQsIG1tLCBhZGRyKTsKIAlpZiAocHVkX25v bmUoKnB1ZCkpCiAJCXB1ZF9wb3B1bGF0ZShtbSwgcHVkLCAodW5zaWduZWQgbG9uZykgc3B0ZSAm IFBBR0VfTUFTSyk7CiAJZWxzZQpkaWZmIC11cndOYkIgMi42LjIzL2FyY2gvcG93ZXJwYy9tbS9m YXVsdC5jIDIuNi4yM2EvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKLS0tIDIuNi4yMy9hcmNoL3Bv d2VycGMvbW0vZmF1bHQuYwkyMDA3LTEwLTA5IDEzOjMxOjM4LjAwMDAwMDAwMCAtMDcwMAorKysg Mi42LjIzYS9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYwkyMDA3LTEwLTI5IDA5OjM4OjA5LjAwMDAw MDAwMCAtMDcwMApAQCAtMzAxLDYgKzMwMSw4IEBACiAJCWlmIChnZXRfcHRlcHRyKG1tLCBhZGRy ZXNzLCAmcHRlcCwgJnBtZHApKSB7CiAJCQlzcGlubG9ja190ICpwdGwgPSBwdGVfbG9ja3B0ciht bSwgcG1kcCk7CiAJCQlzcGluX2xvY2socHRsKTsKKwkJCWRlbGltYm9fcHRlKCZwdGVwLCAmcHRs LCAmcG1kcCwgbW0sIGFkZHJlc3MpOworCiAJCQlpZiAocHRlX3ByZXNlbnQoKnB0ZXApKSB7CiAJ CQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdGVfcGFnZSgqcHRlcCk7CiAKZGlmZiAtdXJ3TmJCIDIu Ni4yMy9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYyAyLjYuMjNhL2FyY2gvcG93ZXJwYy9t bS9odWdldGxicGFnZS5jCi0tLSAyLjYuMjMvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMJ MjAwNy0xMC0wOSAxMzozMTozOC4wMDAwMDAwMDAgLTA3MDAKKysrIDIuNi4yM2EvYXJjaC9wb3dl cnBjL21tL2h1Z2V0bGJwYWdlLmMJMjAwNy0xMC0yOSAwOTo1MzozNi4wMDAwMDAwMDAgLTA3MDAK QEAgLTc3LDYgKzc3LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzcGluX2xvY2soJm1tLT5w YWdlX3RhYmxlX2xvY2spOworCWRlbGltYm9faHBkKCZocGRwLCBtbSwgYWRkcmVzcyk7CiAJaWYg KCFodWdlcGRfbm9uZSgqaHBkcCkpCiAJCWttZW1fY2FjaGVfZnJlZShodWdlX3BndGFibGVfY2Fj aGUsIG5ldyk7CiAJZWxzZQpkaWZmIC11cndOYkIgMi42LjIzL2FyY2gvcHBjL21tL2ZhdWx0LmMg Mi42LjIzYS9hcmNoL3BwYy9tbS9mYXVsdC5jCi0tLSAyLjYuMjMvYXJjaC9wcGMvbW0vZmF1bHQu YwkyMDA3LTEwLTA5IDEzOjMxOjM4LjAwMDAwMDAwMCAtMDcwMAorKysgMi42LjIzYS9hcmNoL3Bw Yy9tbS9mYXVsdC5jCTIwMDctMTAtMjkgMDk6Mzg6MTkuMDAwMDAwMDAwIC0wNzAwCkBAIC0yMTks NiArMjE5LDcgQEAKIAkJaWYgKGdldF9wdGVwdHIobW0sIGFkZHJlc3MsICZwdGVwLCAmcG1kcCkp IHsKIAkJCXNwaW5sb2NrX3QgKnB0bCA9IHB0ZV9sb2NrcHRyKG1tLCBwbWRwKTsKIAkJCXNwaW5f bG9jayhwdGwpOworCQkJZGVsaW1ib19wdGUoJnB0ZXAsICZwdGwsICZwbWRwLCBtbSwgYWRkcmVz cyk7CiAJCQlpZiAocHRlX3ByZXNlbnQoKnB0ZXApKSB7CiAJCQkJc3RydWN0IHBhZ2UgKnBhZ2Ug PSBwdGVfcGFnZSgqcHRlcCk7CiAKZGlmZiAtdXJ3TmJCIDIuNi4yMy9pbmNsdWRlL2FzbS1nZW5l cmljL3BndGFibGUuaCAyLjYuMjNhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oCi0tLSAy LjYuMjMvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgJMjAwNy0xMC0wOSAxMzozMTozOC4w MDAwMDAwMDAgLTA3MDAKKysrIDIuNi4yM2EvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgJ MjAwNy0xMC0zMCAwNzoyODoyMS4wMDAwMDAwMDAgLTA3MDAKQEAgLTQsNiArNCw4IEBACiAjaWZu ZGVmIF9fQVNTRU1CTFlfXwogI2lmZGVmIENPTkZJR19NTVUKIAorI2luY2x1ZGUgPGxpbnV4L3Nj aGVkLmg+CisKICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9TRVRfQUNDRVNTX0ZMQUdTCiAvKgog ICogTGFyZ2VseSBzYW1lIGFzIGFib3ZlLCBidXQgb25seSBzZXRzIHRoZSBhY2Nlc3MgZmxhZ3Mg KGRpcnR5LApAQCAtMTk5LDYgKzIwMSw0NSBAQAogCX0KIAlyZXR1cm4gMDsKIH0KKworCisvKiBV c2VkIHRvIHJld2FsayB0aGUgcGFnZSB0YWJsZXMgaWYgYWZ0ZXIgd2UgZ3JhYiB0aGUgYXBwcm9w cmlhdGUgbG9jaywKKyAgIHdlIGVuZCB1cCB3aXRoIGEgcGFnZSB0aGF0J3MganVzdCB3YWl0aW5n IHRvIGdvIGF3YXkuICovCitzdGF0aWMgaW5saW5lIHBnZF90ICp3YWxrX3BhZ2VfdGFibGVfcGdk KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcikgeworCXJl dHVybiBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSBwdWRfdCAqd2Fs a19wYWdlX3RhYmxlX3B1ZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJIHVuc2lnbmVkIGxv bmcgYWRkcikgeworCXBnZF90ICpwZ2Q7CisJcGdkID0gd2Fsa19wYWdlX3RhYmxlX3BnZChtbSwg YWRkcik7CisJQlVHX09OKCFwZ2QpOworCXJldHVybiBwdWRfb2Zmc2V0KHBnZCwgYWRkcik7Cit9 CisKK3N0YXRpYyBpbmxpbmUgcG1kX3QgKndhbGtfcGFnZV90YWJsZV9wbWQoc3RydWN0IG1tX3N0 cnVjdCAqbW0sCisJCQkJCSB1bnNpZ25lZCBsb25nIGFkZHIpIHsKKwlwdWRfdCAqcHVkOworCXB1 ZCA9IHdhbGtfcGFnZV90YWJsZV9wdWQobW0sIGFkZHIpOworCUJVR19PTighcHVkKTsKKwlyZXR1 cm4gIHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCAqd2Fs a19wYWdlX3RhYmxlX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJIHVuc2lnbmVkIGxv bmcgYWRkcikgeworCXBtZF90ICpwbWQ7CisJcG1kID0gd2Fsa19wYWdlX3RhYmxlX3BtZChtbSwg YWRkcik7CisJQlVHX09OKCFwbWQpOworCXJldHVybiBwdGVfb2Zmc2V0X21hcChwbWQsIGFkZHIp OworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90ICp3YWxrX3BhZ2VfdGFibGVfaHVnZV9wdGUoc3Ry dWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcikgeworCXJl dHVybiAocHRlX3QgKil3YWxrX3BhZ2VfdGFibGVfcG1kKG1tLCBhZGRyKTsKK30KKworCiAjZW5k aWYgLyogQ09ORklHX01NVSAqLwogCiAvKgpkaWZmIC11cndOYkIgMi42LjIzL2luY2x1ZGUvbGlu dXgvbW0uaCAyLjYuMjNhL2luY2x1ZGUvbGludXgvbW0uaAotLS0gMi42LjIzL2luY2x1ZGUvbGlu dXgvbW0uaAkyMDA3LTEwLTA5IDEzOjMxOjM4LjAwMDAwMDAwMCAtMDcwMAorKysgMi42LjIzYS9p bmNsdWRlL2xpbnV4L21tLmgJMjAwNy0xMS0zMCAwODowNTo0MC4wMDAwMDAwMDAgLTA4MDAKQEAg LTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z19sb2Nrcy5oPgogI2luY2x1ZGUg PGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbW1fdHlwZXMuaD4KKyNpbmNs dWRlIDxhc20vcGd0YWJsZS5oPgogCiBzdHJ1Y3QgbWVtcG9saWN5Owogc3RydWN0IGFub25fdm1h OwpAQCAtOTM1LDYgKzkzNiw3IEBACiAJcHRlX3QgKl9fcHRlID0gcHRlX29mZnNldF9tYXAocG1k LCBhZGRyZXNzKTsJXAogCSoocHRscCkgPSBfX3B0bDsJCQkJXAogCXNwaW5fbG9jayhfX3B0bCk7 CQkJCVwKKwlkZWxpbWJvX3B0ZSgmX19wdGUsIHB0bHAsICZwbWQsIG1tLCBhZGRyZXNzKTsJXAog CV9fcHRlOwkJCQkJCVwKIH0pCiAKQEAgLTk1OSw2ICs5NjIsOTIgQEAKIGV4dGVybiB2b2lkIGZy ZWVfYXJlYV9pbml0X25vZGUoaW50IG5pZCwgcGdfZGF0YV90ICpwZ2RhdCwKIAl1bnNpZ25lZCBs b25nICogem9uZXNfc2l6ZSwgdW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0X3BmbiwgCiAJdW5zaWdu ZWQgbG9uZyAqemhvbGVzX3NpemUpOworCisKKworc3RhdGljIGlubGluZSB2b2lkIGRlbGltYm9f cHRlKHB0ZV90ICoqcHRlLCBzcGlubG9ja190ICoqcHRsLCAgcG1kX3QgKipwbWQsCisJCQkgIHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJICB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisjaWZkZWYg Q09ORklHX1NMT1dfQ0FDSEUKKwl3aGlsZSAodW5saWtlbHkoUGFnZUR5aW5nKHBtZF9wYWdlKCoq cG1kKSkpKQorI2VuZGlmCisJeworI2lmIE5SX0NQVVMgPj0gQ09ORklHX1NQTElUX1BUTE9DS19D UFVTCisJCXNwaW5fdW5sb2NrKCpwdGwpOworI2VuZGlmCisJCXB0ZV91bm1hcCgqcHRlKTsKKwkJ KnBtZCA9IHdhbGtfcGFnZV90YWJsZV9wbWQobW0sIGFkZHIpOworCQkqcHRlID0gcHRlX29mZnNl dF9tYXAoKnBtZCwgYWRkcik7CisJCSpwdGwgPSBwdGVfbG9ja3B0cihtbSwgKnBtZCk7CisjaWYg TlJfQ1BVUyA+PSBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVMKKwkJc3Bpbl9sb2NrKCpwdGwpOwor I2VuZGlmCisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVsaW1ib19wdGVfbmVzdGVkKHB0 ZV90ICoqcHRlLCBzcGlubG9ja190ICoqcHRsLAorCQkJCXBtZF90ICoqcG1kLAorCQkJCXN0cnVj dCBtbV9zdHJ1Y3QgKm1tLAorCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgaW50IHN1YmNsYXNzKQor eworI2lmZGVmIENPTkZJR19TTE9XX0NBQ0hFCisJd2hpbGUgKHVubGlrZWx5KFBhZ2VEeWluZyhw bWRfcGFnZSgqKnBtZCkpKSkKKyNlbmRpZgorCXsKKyNpZiBOUl9DUFVTID49IENPTkZJR19TUExJ VF9QVExPQ0tfQ1BVUworCQlzcGluX3VubG9jaygqcHRsKTsKKyNlbmRpZgorCQkqcG1kID0gd2Fs a19wYWdlX3RhYmxlX3BtZChtbSwgYWRkcik7CisJCSpwdGUgPSBwdGVfb2Zmc2V0X21hcCgqcG1k LCBhZGRyKTsKKwkJKnB0bCA9IHB0ZV9sb2NrcHRyKG1tLCAqcG1kKTsKKworI2lmIE5SX0NQVVMg Pj0gQ09ORklHX1NQTElUX1BUTE9DS19DUFVTCisJCXNwaW5fbG9ja19uZXN0ZWQoKnB0bCwgc3Vi Y2xhc3MpOworI2VuZGlmCisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVsaW1ib19wdWQo cHVkX3QgKipwdWQsICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCSAgdW5zaWduZWQgbG9uZyBh ZGRyKSB7CisjaWZkZWYgQ09ORklHX1NMT1dfQ0FDSEUKKwl3aGlsZSAodW5saWtlbHkoUGFnZUR5 aW5nKHZpcnRfdG9fcGFnZSgqcHVkKSkpKQorI2VuZGlmCisJeworCQkqcHVkID0gd2Fsa19wYWdl X3RhYmxlX3B1ZChtbSwgYWRkcik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVsaW1i b19wbWQocG1kX3QgKipwbWQsICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCSAgICAgICB1bnNp Z25lZCBsb25nIGFkZHIpIHsKKyNpZmRlZiBDT05GSUdfU0xPV19DQUNIRQorCXdoaWxlICh1bmxp a2VseShQYWdlRHlpbmcodmlydF90b19wYWdlKCpwbWQpKSkpCisjZW5kaWYKKwl7CisJCSpwbWQg PSB3YWxrX3BhZ2VfdGFibGVfcG1kKG1tLCBhZGRyKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZCBkZWxpbWJvX3BnZChwZ2RfdCAqKnBnZCwgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJ ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcikgeworI2lmZGVmIENPTkZJR19TTE9XX0NBQ0hFCisJ d2hpbGUgKHVubGlrZWx5KFBhZ2VEeWluZyh2aXJ0X3RvX3BhZ2UoKnBnZCkpKSkKKyNlbmRpZgor CXsKKwkJKnBnZCA9IHdhbGtfcGFnZV90YWJsZV9wZ2QobW0sIGFkZHIpOworCX0KK30KKworc3Rh dGljIGlubGluZSB2b2lkIGRlbGltYm9faHVnZV9wdGUocHRlX3QgKipwdGUsICBzdHJ1Y3QgbW1f c3RydWN0ICptbSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyKSB7CisjaWZkZWYgQ09ORklH X1NMT1dfQ0FDSEUKKwl3aGlsZSAodW5saWtlbHkoUGFnZUR5aW5nKHZpcnRfdG9fcGFnZSgqcHRl KSkpKQorI2VuZGlmCisJeworCQkqcHRlID0gd2Fsa19wYWdlX3RhYmxlX2h1Z2VfcHRlKG1tLCBh ZGRyKTsKKwl9Cit9CisKICNpZmRlZiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVAKIC8q CiAgKiBXaXRoIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUCBzZXQsIGFuIGFyY2hpdGVj dHVyZSBtYXkgaW5pdGlhbGlzZSBpdHMKZGlmZiAtdXJ3TmJCIDIuNi4yMy9pbmNsdWRlL2xpbnV4 L21tX3R5cGVzLmggMi42LjIzYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKLS0tIDIuNi4yMy9p bmNsdWRlL2xpbnV4L21tX3R5cGVzLmgJMjAwNy0xMC0wOSAxMzozMTozOC4wMDAwMDAwMDAgLTA3 MDAKKysrIDIuNi4yM2EvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCTIwMDctMTEtMTMgMDc6NDM6 MDkuMDAwMDAwMDAwIC0wODAwCkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RocmVh ZHMuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2su aD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogCiBzdHJ1Y3QgYWRkcmVzc19zcGFjZTsK IApAQCAtNjEsOSArNjIsMTMgQEAKIAkJcGdvZmZfdCBpbmRleDsJCS8qIE91ciBvZmZzZXQgd2l0 aGluIG1hcHBpbmcuICovCiAJCXZvaWQgKmZyZWVsaXN0OwkJLyogU0xVQjogZnJlZWxpc3QgcmVx LiBzbGFiIGxvY2sgKi8KIAl9OworCisJdW5pb24gewogCXN0cnVjdCBsaXN0X2hlYWQgbHJ1OwkJ LyogUGFnZW91dCBsaXN0LCBlZy4gYWN0aXZlX2xpc3QKIAkJCQkJICogcHJvdGVjdGVkIGJ5IHpv bmUtPmxydV9sb2NrICEKIAkJCQkJICovCisJCXN0cnVjdCByY3VfaGVhZCByY3U7CisJfTsKIAkv KgogCSAqIE9uIG1hY2hpbmVzIHdoZXJlIGFsbCBSQU0gaXMgbWFwcGVkIGludG8ga2VybmVsIGFk ZHJlc3Mgc3BhY2UsCiAJICogd2UgY2FuIHNpbXBseSBjYWxjdWxhdGUgdGhlIHZpcnR1YWwgYWRk cmVzcy4gT24gbWFjaGluZXMgd2l0aApkaWZmIC11cndOYkIgMi42LjIzL21tL2h1Z2V0bGIuYyAy LjYuMjNhL21tL2h1Z2V0bGIuYwotLS0gMi42LjIzL21tL2h1Z2V0bGIuYwkyMDA3LTEwLTA5IDEz OjMxOjM4LjAwMDAwMDAwMCAtMDcwMAorKysgMi42LjIzYS9tbS9odWdldGxiLmMJMjAwNy0xMC0z MCAwNzozMjo1MC4wMDAwMDAwMDAgLTA3MDAKQEAgLTM3OSw2ICszNzksOCBAQAogCQkJZ290byBu b21lbTsKIAkJc3Bpbl9sb2NrKCZkc3QtPnBhZ2VfdGFibGVfbG9jayk7CiAJCXNwaW5fbG9jaygm c3JjLT5wYWdlX3RhYmxlX2xvY2spOworCQlkZWxpbWJvX2h1Z2VfcHRlKCZzcmNfcHRlLCBzcmMs IGFkZHIpOworCQlkZWxpbWJvX2h1Z2VfcHRlKCZkc3RfcHRlLCBkc3QsIGFkZHIpOwogCQlpZiAo IXB0ZV9ub25lKCpzcmNfcHRlKSkgewogCQkJaWYgKGNvdykKIAkJCQlwdGVwX3NldF93cnByb3Rl Y3Qoc3JjLCBhZGRyLCBzcmNfcHRlKTsKQEAgLTU1MSw2ICs1NTMsNyBAQAogCX0KIAogCXNwaW5f bG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJZGVsaW1ib19odWdlX3B0ZSgmcHRlcCwgbW0s IGFkZHJlc3MpOwogCXNpemUgPSBpX3NpemVfcmVhZChtYXBwaW5nLT5ob3N0KSA+PiBIUEFHRV9T SElGVDsKIAlpZiAoaWR4ID49IHNpemUpCiAJCWdvdG8gYmFja291dDsKQEAgLTYwOSw2ICs2MTIs NyBAQAogCXJldCA9IDA7CiAKIAlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCWRl bGltYm9faHVnZV9wdGUoJnB0ZXAsIG1tLCBhZGRyZXNzKTsKIAkvKiBDaGVjayBmb3IgYSByYWNp bmcgdXBkYXRlIGJlZm9yZSBjYWxsaW5nIGh1Z2V0bGJfY293ICovCiAJaWYgKGxpa2VseShwdGVf c2FtZShlbnRyeSwgKnB0ZXApKSkKIAkJaWYgKHdyaXRlX2FjY2VzcyAmJiAhcHRlX3dyaXRlKGVu dHJ5KSkKZGlmZiAtdXJ3TmJCIDIuNi4yMy9tbS9tZW1vcnkuYyAyLjYuMjNhL21tL21lbW9yeS5j Ci0tLSAyLjYuMjMvbW0vbWVtb3J5LmMJMjAwNy0xMC0wOSAxMzozMTozOC4wMDAwMDAwMDAgLTA3 MDAKKysrIDIuNi4yM2EvbW0vbWVtb3J5LmMJMjAwNy0xMS0zMCAwODowNjoxNy4wMDAwMDAwMDAg LTA4MDAKQEAgLTMwNiw2ICszMDYsNyBAQAogCiAJcHRlX2xvY2tfaW5pdChuZXcpOwogCXNwaW5f bG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJZGVsaW1ib19wbWQoJnBtZCwgbW0sIGFkZHJl c3MpOwogCWlmIChwbWRfcHJlc2VudCgqcG1kKSkgewkvKiBBbm90aGVyIGhhcyBwb3B1bGF0ZWQg aXQgKi8KIAkJcHRlX2xvY2tfZGVpbml0KG5ldyk7CiAJCXB0ZV9mcmVlKG5ldyk7CkBAIC0zMjUs NiArMzI2LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzcGluX2xvY2soJmluaXRfbW0ucGFn ZV90YWJsZV9sb2NrKTsKKwlkZWxpbWJvX3BtZCgmcG1kLCAmaW5pdF9tbSwgYWRkcmVzcyk7CiAJ aWYgKHBtZF9wcmVzZW50KCpwbWQpKQkJLyogQW5vdGhlciBoYXMgcG9wdWxhdGVkIGl0ICovCiAJ CXB0ZV9mcmVlX2tlcm5lbChuZXcpOwogCWVsc2UKQEAgLTUwNCw2ICs1MDYsOCBAQAogCXNyY19w dGUgPSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoc3JjX3BtZCwgYWRkcik7CiAJc3JjX3B0bCA9IHB0 ZV9sb2NrcHRyKHNyY19tbSwgc3JjX3BtZCk7CiAJc3Bpbl9sb2NrX25lc3RlZChzcmNfcHRsLCBT SU5HTEVfREVQVEhfTkVTVElORyk7CisKKwlkZWxpbWJvX3B0ZSgmc3JjX3B0ZSwgJnNyY19wdGws ICZzcmNfcG1kLCBzcmNfbW0sIGFkZHIpOwogCWFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpOwog CiAJZG8gewpAQCAtMTU1OCwxMyArMTU2MiwxNSBAQAogICogYW5kIGRvX2Fub255bW91c19wYWdl IGFuZCBkb19ub19wYWdlIGNhbiBzYWZlbHkgY2hlY2sgbGF0ZXIgb24pLgogICovCiBzdGF0aWMg aW5saW5lIGludCBwdGVfdW5tYXBfc2FtZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBt ZCwKLQkJCQlwdGVfdCAqcGFnZV90YWJsZSwgcHRlX3Qgb3JpZ19wdGUpCisJCQkJcHRlX3QgKnBh Z2VfdGFibGUsIHB0ZV90IG9yaWdfcHRlLAorCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsK IAlpbnQgc2FtZSA9IDE7CiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJ R19QUkVFTVBUKQogCWlmIChzaXplb2YocHRlX3QpID4gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7 CiAJCXNwaW5sb2NrX3QgKnB0bCA9IHB0ZV9sb2NrcHRyKG1tLCBwbWQpOwogCQlzcGluX2xvY2so cHRsKTsKKwkJZGVsaW1ib19wdGUoJnBhZ2VfdGFibGUsICZwdGwsICZwbWQsIG1tLCBhZGRyZXNz KTsKIAkJc2FtZSA9IHB0ZV9zYW1lKCpwYWdlX3RhYmxlLCBvcmlnX3B0ZSk7CiAJCXNwaW5fdW5s b2NrKHB0bCk7CiAJfQpAQCAtMjE1Myw3ICsyMTU5LDcgQEAKIAlwdGVfdCBwdGU7CiAJaW50IHJl dCA9IDA7CiAKLQlpZiAoIXB0ZV91bm1hcF9zYW1lKG1tLCBwbWQsIHBhZ2VfdGFibGUsIG9yaWdf cHRlKSkKKwlpZiAoIXB0ZV91bm1hcF9zYW1lKG1tLCBwbWQsIHBhZ2VfdGFibGUsIG9yaWdfcHRl LCBhZGRyZXNzKSkKIAkJZ290byBvdXQ7CiAKIAllbnRyeSA9IHB0ZV90b19zd3BfZW50cnkob3Jp Z19wdGUpOwpAQCAtMjIyNyw2ICsyMjMzLDEwIEBACiAJfQogCiAJLyogTm8gbmVlZCB0byBpbnZh bGlkYXRlIC0gaXQgd2FzIG5vbi1wcmVzZW50IGJlZm9yZSAqLworCS8qIFVubGVzcyBvZiBjb3Vy c2UgdGhlIGNwdSBtaWdodCBiZSBsb29raW5nIGF0IGFuIG9sZAorCSAgIGNvcHkgb2YgdGhlIHB0 ZS4gKi8KKwltYXliZV9mbHVzaF90bGJfbW0obW0pOworCiAJdXBkYXRlX21tdV9jYWNoZSh2bWEs IGFkZHJlc3MsIHB0ZSk7CiB1bmxvY2s6CiAJcHRlX3VubWFwX3VubG9jayhwYWdlX3RhYmxlLCBw dGwpOwpAQCAtMjI3OSw2ICsyMjg5LDcgQEAKIAogCQlwdGwgPSBwdGVfbG9ja3B0cihtbSwgcG1k KTsKIAkJc3Bpbl9sb2NrKHB0bCk7CisJCWRlbGltYm9fcHRlKCZwYWdlX3RhYmxlLCAmcHRsLCAm cG1kLCBtbSwgYWRkcmVzcyk7CiAJCWlmICghcHRlX25vbmUoKnBhZ2VfdGFibGUpKQogCQkJZ290 byByZWxlYXNlOwogCQlpbmNfbW1fY291bnRlcihtbSwgZmlsZV9yc3MpOwpAQCAtMjI4OCw2ICsy Mjk5LDEwIEBACiAJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcGFnZV90YWJsZSwgZW50cnkpOwog CiAJLyogTm8gbmVlZCB0byBpbnZhbGlkYXRlIC0gaXQgd2FzIG5vbi1wcmVzZW50IGJlZm9yZSAq LworCS8qIFVubGVzcyBvZiBjb3Vyc2UgdGhlIGNwdSBtaWdodCBiZSBsb29raW5nIGF0IGFuIG9s ZAorCSAgIGNvcHkgb2YgdGhlIHB0ZS4gKi8KKwltYXliZV9mbHVzaF90bGJfbW0obW0pOworCiAJ dXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIGVudHJ5KTsKIAlsYXp5X21tdV9wcm90X3Vw ZGF0ZShlbnRyeSk7CiB1bmxvY2s6CkBAIC0yNDQxLDYgKzI0NTYsMTAgQEAKIAkJfQogCiAJCS8q IG5vIG5lZWQgdG8gaW52YWxpZGF0ZTogYSBub3QtcHJlc2VudCBwYWdlIHdvbid0IGJlIGNhY2hl ZCAqLworCQkvKiBVbmxlc3Mgb2YgY291cnNlIHRoZSBjcHUgY291bGQgYmUgbG9va2luZyBhdCBh biBvbGQgcGFnZQorCQkgICB0YWJsZSBlbnRyeS4gKi8KKwkJbWF5YmVfZmx1c2hfdGxiX21tKG1t KTsKKwogCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgZW50cnkpOwogCQlsYXp5X21t dV9wcm90X3VwZGF0ZShlbnRyeSk7CiAJfSBlbHNlIHsKQEAgLTI1NDQsNyArMjU2Myw3IEBACiAJ CQkJKHdyaXRlX2FjY2VzcyA/IEZBVUxUX0ZMQUdfV1JJVEUgOiAwKTsKIAlwZ29mZl90IHBnb2Zm OwogCi0JaWYgKCFwdGVfdW5tYXBfc2FtZShtbSwgcG1kLCBwYWdlX3RhYmxlLCBvcmlnX3B0ZSkp CisJaWYgKCFwdGVfdW5tYXBfc2FtZShtbSwgcG1kLCBwYWdlX3RhYmxlLCBvcmlnX3B0ZSwgYWRk cmVzcykpCiAJCXJldHVybiAwOwogCiAJaWYgKHVubGlrZWx5KCEodm1hLT52bV9mbGFncyAmIFZN X05PTkxJTkVBUikgfHwKQEAgLTI2MDMsNiArMjYyMiw3IEBACiAKIAlwdGwgPSBwdGVfbG9ja3B0 cihtbSwgcG1kKTsKIAlzcGluX2xvY2socHRsKTsKKwlkZWxpbWJvX3B0ZSgmcHRlLCAmcHRsLCAm cG1kLCBtbSwgYWRkcmVzcyk7CiAJaWYgKHVubGlrZWx5KCFwdGVfc2FtZSgqcHRlLCBlbnRyeSkp KQogCQlnb3RvIHVubG9jazsKIAlpZiAod3JpdGVfYWNjZXNzKSB7CkBAIC0yNjI1LDYgKzI2NDUs MTIgQEAKIAkJaWYgKHdyaXRlX2FjY2VzcykKIAkJCWZsdXNoX3RsYl9wYWdlKHZtYSwgYWRkcmVz cyk7CiAJfQorCisJLyogaWYgdGhlIGNwdSBjb3VsZCBiZSBsb29raW5nIGF0IGFuIG9sZCBwYWdl IHRhYmxlLCB3ZSBuZWVkIHRvCisJICAgZmx1c2ggb3V0IGV2ZXJ5dGhpbmcuICovCisJbWF5YmVf Zmx1c2hfdGxiX21tKG1tKTsKKworCiB1bmxvY2s6CiAJcHRlX3VubWFwX3VubG9jayhwdGUsIHB0 bCk7CiAJcmV0dXJuIDA7CkBAIC0yNjc0LDYgKzI3MDAsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsK IAogCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJZGVsaW1ib19wZ2QoJnBnZCwg bW0sIGFkZHJlc3MpOwogCWlmIChwZ2RfcHJlc2VudCgqcGdkKSkJCS8qIEFub3RoZXIgaGFzIHBv cHVsYXRlZCBpdCAqLwogCQlwdWRfZnJlZShuZXcpOwogCWVsc2UKQEAgLTI2OTUsNiArMjcyMiw3 IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2Nr KTsKKwlkZWxpbWJvX3B1ZCgmcHVkLCBtbSwgYWRkcmVzcyk7CiAjaWZuZGVmIF9fQVJDSF9IQVNf NExFVkVMX0hBQ0sKIAlpZiAocHVkX3ByZXNlbnQoKnB1ZCkpCQkvKiBBbm90aGVyIGhhcyBwb3B1 bGF0ZWQgaXQgKi8KIAkJcG1kX2ZyZWUobmV3KTsKZGlmZiAtdXJ3TmJCIDIuNi4yMy9tbS9tZW1w b2xpY3kuYyAyLjYuMjNhL21tL21lbXBvbGljeS5jCi0tLSAyLjYuMjMvbW0vbWVtcG9saWN5LmMJ MjAwNy0xMC0wOSAxMzozMTozOC4wMDAwMDAwMDAgLTA3MDAKKysrIDIuNi4yM2EvbW0vbWVtcG9s aWN5LmMJMjAwNy0xMS0zMCAwODowNzo1OC4wMDAwMDAwMDAgLTA4MDAKQEAgLTEwMSw2ICsxMDEs MTEgQEAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcG9saWN5X2NhY2hlOwogc3RhdGljIHN0 cnVjdCBrbWVtX2NhY2hlICpzbl9jYWNoZTsKIAorCitpbnQgbWlncmF0ZV9wYWdlX3RhYmxlc19t bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgIGludCBzb3VyY2UsCisJCQkgICBuZXdfcGFnZV90IGdl dF9uZXdfcGFnZSwgdW5zaWduZWQgbG9uZyBwcml2YXRlKTsKKworCiAvKiBIaWdoZXN0IHpvbmUu IEFuIHNwZWNpZmljIGFsbG9jYXRpb24gZm9yIGEgem9uZSBiZWxvdyB0aGF0IGlzIG5vdAogICAg cG9saWNpZWQuICovCiBlbnVtIHpvbmVfdHlwZSBwb2xpY3lfem9uZSA9IDA7CkBAIC01OTcsNiAr NjAyLDExIEBACiAJcmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgR0ZQX0hJR0hVU0VSX01P VkFCTEUsIDApOwogfQogCitzdGF0aWMgc3RydWN0IHBhZ2UgKm5ld19ub2RlX3BhZ2VfcGFnZV90 YWJsZXMoc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbm9kZSwg aW50ICoqeCkgeworCXJldHVybiBhbGxvY19wYWdlc19ub2RlKG5vZGUsIEdGUF9VU0VSLCAwKTsK K30KKwogLyoKICAqIE1pZ3JhdGUgcGFnZXMgZnJvbSBvbmUgbm9kZSB0byBhIHRhcmdldCBub2Rl LgogICogUmV0dXJucyBlcnJvciBvciB0aGUgbnVtYmVyIG9mIHBhZ2VzIG5vdCBtaWdyYXRlZC4K QEAgLTYxNiw2ICs2MjYsMTAgQEAKIAlpZiAoIWxpc3RfZW1wdHkoJnBhZ2VsaXN0KSkKIAkJZXJy ID0gbWlncmF0ZV9wYWdlcygmcGFnZWxpc3QsIG5ld19ub2RlX3BhZ2UsIGRlc3QpOwogCisJaWYg KCFlcnIpCisJCWVyciA9IG1pZ3JhdGVfcGFnZV90YWJsZXNfbW0obW0sIHNvdXJjZSwKKwkJCQkJ ICAgICBuZXdfbm9kZV9wYWdlX3BhZ2VfdGFibGVzLCBkZXN0KTsKKwogCXJldHVybiBlcnI7CiB9 CiAKQEAgLTY3MSw2ICs2ODUsOSBAQAogICovCiAKIAl0bXAgPSAqZnJvbV9ub2RlczsKKwlwcmlu dGsoS0VSTl9JTkZPICJmcm9tX25vZGVzID0gJWxYIHRvX25vZGVzID0gJWxYXG4iLAorCQkqKG5v ZGVzX2FkZHIodG1wKSksICoobm9kZXNfYWRkcigqdG9fbm9kZXMpKSk7CisKIAl3aGlsZSAoIW5v ZGVzX2VtcHR5KHRtcCkpIHsKIAkJaW50IHMsZDsKIAkJaW50IHNvdXJjZSA9IC0xOwpAQCAtNjc4 LDYgKzY5NSw4IEBACiAKIAkJZm9yX2VhY2hfbm9kZV9tYXNrKHMsIHRtcCkgewogCQkJZCA9IG5v ZGVfcmVtYXAocywgKmZyb21fbm9kZXMsICp0b19ub2Rlcyk7CisJCQlwcmludGsoS0VSTl9JTkZP ICJkb19taWdyYXRlX3BhZ2VzIHM9JWQgZD0lZFxuIiwKKwkJCQlzLCBkKTsKIAkJCWlmIChzID09 IGQpCiAJCQkJY29udGludWU7CiAKQEAgLTgxNSw2ICs4MzQsOCBAQAogCXVuc2lnbmVkIGxvbmcg bmxvbmdzOwogCXVuc2lnbmVkIGxvbmcgZW5kbWFzazsKIAorCXByaW50ayhLRVJOX0lORk8gImdl dF9ub2RlcyglcCwgJXAsICVsZClcbiIsIG5vZGVzLCBubWFzaywgbWF4bm9kZSk7CisKIAktLW1h eG5vZGU7CiAJbm9kZXNfY2xlYXIoKm5vZGVzKTsKIAlpZiAobWF4bm9kZSA9PSAwIHx8ICFubWFz aykKQEAgLTg1MCw2ICs4NzEsOCBAQAogCWlmIChjb3B5X2Zyb21fdXNlcihub2Rlc19hZGRyKCpu b2RlcyksIG5tYXNrLCBubG9uZ3Mqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkKIAkJcmV0dXJuIC1F RkFVTFQ7CiAJbm9kZXNfYWRkcigqbm9kZXMpW25sb25ncy0xXSAmPSBlbmRtYXNrOworCXByaW50 ayAoS0VSTl9JTkZPICJlbmRtYXNrPSVsWCBub2Rlcz0lbFhcbiIsCisJCWVuZG1hc2ssIG5vZGVz X2FkZHIoKm5vZGVzKVtubG9uZ3MtMV0pOwogCXJldHVybiAwOwogfQogCmRpZmYgLXVyd05iQiAy LjYuMjMvbW0vbWlncmF0ZS5jIDIuNi4yM2EvbW0vbWlncmF0ZS5jCi0tLSAyLjYuMjMvbW0vbWln cmF0ZS5jCTIwMDctMTAtMDkgMTM6MzE6MzguMDAwMDAwMDAwIC0wNzAwCisrKyAyLjYuMjNhL21t L21pZ3JhdGUuYwkyMDA3LTExLTMwIDA4OjIxOjI1LjAwMDAwMDAwMCAtMDgwMApAQCAtMjgsOSAr MjgsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9tZW1wb2xpY3kuaD4KICNpbmNsdWRlIDxsaW51eC92 bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KLQorI2luY2x1ZGUgPGxpbnV4 L21tLmg+CisjaW5jbHVkZSA8YXNtL3RsYi5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAj aW5jbHVkZSAiaW50ZXJuYWwuaCIKIAoraW50IG1pZ3JhdGVfcGFnZV90YWJsZXNfbW0oc3RydWN0 IG1tX3N0cnVjdCAqbW0sIGludCBzb3VyY2UsCisJCQkgICBuZXdfcGFnZV90IGdldF9uZXdfcGFn ZSwgdW5zaWduZWQgbG9uZyBwcml2YXRlKTsKKwogI2RlZmluZSBscnVfdG9fcGFnZShfaGVhZCkg KGxpc3RfZW50cnkoKF9oZWFkKS0+cHJldiwgc3RydWN0IHBhZ2UsIGxydSkpCiAKIC8qCkBAIC0x NTgsNiArMTYzLDcgQEAKIAogIAlwdGwgPSBwdGVfbG9ja3B0cihtbSwgcG1kKTsKICAJc3Bpbl9s b2NrKHB0bCk7CisJZGVsaW1ib19wdGUoJnB0ZXAsICZwdGwsICZwbWQsIG1tLCBhZGRyKTsKIAlw dGUgPSAqcHRlcDsKIAlpZiAoIWlzX3N3YXBfcHRlKHB0ZSkpCiAJCWdvdG8gb3V0OwpAQCAtODAw LDYgKzgwNiw4IEBACiAJc3RydWN0IHBhZ2VfdG9fbm9kZSAqcHA7CiAJTElTVF9IRUFEKHBhZ2Vs aXN0KTsKIAorCXByaW50aygiZG9fbW92ZV9wYWdlcyglcCwgJXAsICVkKVxuIiwgbW0sIHBtLCBt aWdyYXRlX2FsbCk7CisKIAlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAKIAkvKgpAQCAtODU5 LDkgKzg2NywxMCBAQAogCQllcnIgPSBtaWdyYXRlX3BhZ2VzKCZwYWdlbGlzdCwgbmV3X3BhZ2Vf bm9kZSwKIAkJCQkodW5zaWduZWQgbG9uZylwbSk7CiAJZWxzZQotCQllcnIgPSAtRU5PRU5UOwor CQllcnIgPSAwOwogCiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwogCXJldHVybiBlcnI7CiB9 CiAKQEAgLTkxNSw5ICs5MjQsMTYgQEAKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlzdHJ1Y3Qg cGFnZV90b19ub2RlICpwbSA9IE5VTEw7CiAKKwlwcmludGsoInN5c19tb3ZlX3BhZ2VzKCVkLCAl bGQsICVwLCAlcCwgJXAsICVkKVxuIiwKKwkJcGlkLCBucl9wYWdlcywgcGFnZXMsIG5vZGVzLCBz dGF0dXMsIGZsYWdzKTsKKwogCS8qIENoZWNrIGZsYWdzICovCi0JaWYgKGZsYWdzICYgfihNUE9M X01GX01PVkV8TVBPTF9NRl9NT1ZFX0FMTCkpCi0JCXJldHVybiAtRUlOVkFMOworCWlmIChmbGFn cyAmIH4oTVBPTF9NRl9NT1ZFfE1QT0xfTUZfTU9WRV9BTEwpKSB7CisJCXByaW50ayhLRVJOX0lO Rk8gInN5c19tb3ZlX3BhZ2VzOiBiYWQgZmxhZ3M6ICVkXG4iLAorCQkJZmxhZ3MpOworCQlmbGFn cyA9IDA7CisJCS8qWFhYWFggRml4IHRoaXMgYmVmb3JlIHN1Ym1pdCByZXR1cm4gLUVJTlZBTDsg Ki8KKwl9CiAKIAlpZiAoKGZsYWdzICYgTVBPTF9NRl9NT1ZFX0FMTCkgJiYgIWNhcGFibGUoQ0FQ X1NZU19OSUNFKSkKIAkJcmV0dXJuIC1FUEVSTTsKQEAgLTkzMiw4ICs5NDgsMTAgQEAKIAltbSA9 IGdldF90YXNrX21tKHRhc2spOwogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAotCWlm ICghbW0pCisJaWYgKCFtbSkgeworCQlwcmludGsoS0VSTl9JTkZPICJObyBTdWNoIFRhc2tcbiIp OwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAkvKgogCSAqIENoZWNrIGlmIHRoaXMgcHJvY2Vz cyBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgc3BlY2lmaWVkCkBAIC0xMDM5LDMgKzEwNTcs MzAxIEBACiAgCX0KICAJcmV0dXJuIGVycjsKIH0KKworc3RhdGljIHZvaWQgcmN1X2ZyZWVfcHQo c3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBwYWdlICpwYWdlID0gY29udGFpbmVy X29mKGhlYWQsIHN0cnVjdCBwYWdlLCByY3UpOworCXByaW50ayhLRVJOX0lORk8gInJjdV9mcmVl X3B0IGZyZWVpbmcgJXAgZmxhZ3M9JWxYIG1hcHBpbmc9JXBcbiIsCisJCXBhZ2UsIHBhZ2UtPmZs YWdzLCBwYWdlLT5tYXBwaW5nKTsKKwlfX2ZyZWVfcGFnZShwYWdlKTsKK30KKworaW50IG1pZ3Jh dGVfdG9wX2xldmVsX3BhZ2VfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwYWdl ICpkZXN0KQoreworCXJldHVybiAxOworI2lmIDAKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZv aWQgKmRlc3RfcHRyOworCisJLyogV2UgY2FuJ3QgZG8gdGhpcyB1bnRpbCB3ZSBnZXQgYSBoZWF2 eSBkdXR5IHRsYiBmbHVzaCwgb3IKKwkgICB3ZSBjYW4gZm9yY2UgdGhpcyBtbSB0byBiZSBzd2l0 Y2hlZCBvbiBhbGwgY3B1cy4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbW0tPnBhZ2VfdGFibGVf bG9jaywgZmxhZ3MpOworCWRlc3RfcHRyID0gcGFnZV9hZGRyZXNzKGRlc3QpOworCW1lbWNweShk ZXN0X3B0ciwgbW0tPnBnZCwgUEFHRV9TSVpFKTsKKwlJTklUX1JDVV9IRUFEKCYodmlydF90b19w YWdlKG1tLT5wZ2QpLT5yY3UpKTsKKwljYWxsX3JjdSgmKHZpcnRfdG9fcGFnZShtbS0+cGdkKS0+ cmN1KSwgcmN1X2ZyZWVfcHQpOworCW1tLT5wZ2QgPSAocGdkX3QgKilkZXN0X3B0cjsKKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZtbS0+cGFnZV90YWJsZV9sb2NrLCBmbGFncyk7CisJcmV0dXJu IDA7CisjZW5kaWYKK30KKworaW50IG1pZ3JhdGVfcGdkKHBnZF90ICpwZ2QsIHN0cnVjdCBtbV9z dHJ1Y3QgKm1tLAorCQl1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwYWdlICpkZXN0KQorewor CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCAqZGVzdF9wdHI7CisJcHVkX3QgKnB1ZDsKKwor CXNwaW5fbG9ja19pcnFzYXZlKCZtbS0+cGFnZV90YWJsZV9sb2NrLCBmbGFncyk7CisKKwlkZWxp bWJvX3BnZCgmcGdkLCBtbSwgYWRkcik7CisKKwlwcmludGsoIm1pZ3JhdGVfcGdkICpwZ2Q9JWxY XG4iLCAqKHVuc2lnbmVkIGxvbmcgKilwZ2QpOworCisJcHVkID0gcHVkX29mZnNldChwZ2QsIGFk ZHIpOworCWRlc3RfcHRyID0gcGFnZV9hZGRyZXNzKGRlc3QpOworCW1lbWNweShkZXN0X3B0ciwg cHVkLCBQQUdFX1NJWkUpOworCXByaW50ayhLRVJOX0lORk8gIm1pZ3JhdGVfcGdkICglcCktPmZs YWdzPSVsWFxuIiwKKwkJcGdkX3BhZ2UoKnBnZCksCisJCXBnZF9wYWdlKCpwZ2QpLT5mbGFncyk7 CisJSU5JVF9SQ1VfSEVBRCgmcGdkX3BhZ2UoKnBnZCktPnJjdSk7CisJY2FsbF9yY3UoJihwZ2Rf cGFnZSgqcGdkKS0+cmN1KSwgcmN1X2ZyZWVfcHQpOworCXBnZF9wb3B1bGF0ZShtbSwgcGdkLCBk ZXN0X3B0cik7CisKKwlmbHVzaF90bGJfcGd0YWJsZXMobW0sIGFkZHIsCisJCQkgICBhZGRyICsg KDEgPDwgUE1EX1NISUZUKQorCQkJICAgLSAxKTsKKworCW1heWJlX25lZWRfZmx1c2hfbW0obW0p OworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW0tPnBhZ2VfdGFibGVfbG9jaywgZmxhZ3Mp OworCisJcmV0dXJuIDA7CisKK30KKworaW50IG1pZ3JhdGVfcHVkKHB1ZF90ICpwdWQsIHN0cnVj dCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCXN0cnVjdCBwYWdlICpkZXN0 KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCAqZGVzdF9wdHI7CisJcG1kX3QgKnBt ZDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtbS0+cGFnZV90YWJsZV9sb2NrLCBmbGFncyk7CisK KwlkZWxpbWJvX3B1ZCgmcHVkLCBtbSwgYWRkcik7CisJcHJpbnRrKCJtaWdyYXRlX3B1ZCAqcHVk PSVsWFxuIiwgKih1bnNpZ25lZCBsb25nICopcHVkKTsKKworCXBtZCA9IHBtZF9vZmZzZXQocHVk LCBhZGRyKTsKKworCWRlc3RfcHRyID0gcGFnZV9hZGRyZXNzKGRlc3QpOworCW1lbWNweShkZXN0 X3B0ciwgcG1kLCBQQUdFX1NJWkUpOworCisJcHJpbnRrKEtFUk5fSU5GTyAibWlncmF0ZV9wdWQg KCVwKS0+ZmxhZ3M9JWxYXG4iLAorCQlwdWRfcGFnZSgqcHVkKSwKKwkJcHVkX3BhZ2UoKnB1ZCkt PmZsYWdzKTsKKwlJTklUX1JDVV9IRUFEKCZwdWRfcGFnZSgqcHVkKS0+cmN1KTsKKwljYWxsX3Jj dSgmKHB1ZF9wYWdlKCpwdWQpLT5yY3UpLCByY3VfZnJlZV9wdCk7CisJcHVkX3BvcHVsYXRlKG1t LCBwdWQsIGRlc3RfcHRyKTsKKwlmbHVzaF90bGJfcGd0YWJsZXMobW0sIGFkZHIsCisJCQkgICBh ZGRyICsgKDEgPDwgUE1EX1NISUZUKQorCQkJICAgLSAxKTsKKwltYXliZV9uZWVkX2ZsdXNoX21t KG1tKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1tLT5wYWdlX3RhYmxlX2xvY2ssIGZs YWdzKTsKKworCXJldHVybiAwOworfQorCisKK2ludCBtaWdyYXRlX3BtZChwbWRfdCAqcG1kLCBz dHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQlzdHJ1Y3QgcGFnZSAq ZGVzdCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvaWQgKmRlc3RfcHRyOworCXNwaW5s b2NrX3QgKnB0bDsKKwlwdGVfdCAqcHRlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1tLT5wYWdl X3RhYmxlX2xvY2ssIGZsYWdzKTsKKworCWRlbGltYm9fcG1kKCZwbWQsIG1tLCBhZGRyKTsKKwor CS8qIHRoaXMgY291bGQgaGFwcGVuIGlmIHRoZSBwYWdlIHRhYmxlIGhhcyBiZWVuIHN3YXBwZWQg b3V0IGFuZCB3ZQorCSAgIHdlcmUgbG9va2luZyBhdCB0aGUgb2xkIG9uZS4gKi8KKwlpZiAodW5s aWtlbHkoIXBtZF9wcmVzZW50KCpwbWQpKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZt bS0+cGFnZV90YWJsZV9sb2NrLCBmbGFncyk7CisJCXJldHVybiAxOworCX0KKworCXByaW50aygi bWlncmF0ZV9wbWQgKnBtZCA9ICVsWFxuIiwgKih1bnNpZ25lZCBsb25nICopcG1kKTsKKwlwdGwg PSBwdGVfbG9ja3B0cihtbSwgcG1kKTsKKworCS8qIFdlIG5lZWQgdGhlIHBhZ2UgbG9jayBhcyB3 ZWxsLiAqLworCWlmIChwdGwgIT0gJm1tLT5wYWdlX3RhYmxlX2xvY2spCisJCXNwaW5fbG9jayhw dGwpOworCisJcHRlID0gcHRlX29mZnNldF9tYXAocG1kLCBhZGRyKTsKKworCWRlc3RfcHRyID0g a21hcF9hdG9taWMoZGVzdCwgS01fSVJRMCk7CisJbWVtY3B5KGRlc3RfcHRyLCBwdGUsIFBBR0Vf U0laRSk7CisJcHJpbnRrKEtFUk5fSU5GTyAibWlncmF0ZV9wbWQgKCVwKS0+ZmxhZ3M9JWxYXG4i LAorCQlwbWRfcGFnZSgqcG1kKSwKKwkJcG1kX3BhZ2UoKnBtZCktPmZsYWdzKTsKKwlJTklUX1JD VV9IRUFEKCZwbWRfcGFnZSgqcG1kKS0+cmN1KTsKKwljYWxsX3JjdSgmKHBtZF9wYWdlKCpwbWQp LT5yY3UpLCByY3VfZnJlZV9wdCk7CisJa3VubWFwX2F0b21pYyhkZXN0LCBLTV9JUlEwKTsKKwlw dGVfdW5tYXAocHRlKTsKKwlwdGVfbG9ja19pbml0KGRlc3QpOworCXBtZF9wb3B1bGF0ZShOVUxM LCBwbWQsIGRlc3QpOworCWZsdXNoX3RsYl9wZ3RhYmxlcyhtbSwgYWRkciwKKwkJCSAgIGFkZHIg KyAoMSA8PCBQTURfU0hJRlQpCisJCQkgICAtIDEpOworCW1heWJlX25lZWRfZmx1c2hfbW0obW0p OworCisJaWYgKHB0bCAhPSAmbW0tPnBhZ2VfdGFibGVfbG9jaykKKwkJc3Bpbl91bmxvY2socHRs KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1tLT5wYWdlX3RhYmxlX2xvY2ssIGZsYWdz KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZV90YWJsZXNfcG1k KHBtZF90ICpwbWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcg KmFkZHJlc3MsIGludCBzb3VyY2UsCisJCQkJICAgbmV3X3BhZ2VfdCBnZXRfbmV3X3BhZ2UsCisJ CQkJICAgdW5zaWduZWQgbG9uZyBwcml2YXRlKQoreworCWludCBwYWdlc19ub3RfbWlncmF0ZWQg PSAwOworCWludCAqcmVzdWx0ID0gTlVMTDsKKwlzdHJ1Y3QgcGFnZSAqb2xkX3BhZ2UgPSB2aXJ0 X3RvX3BhZ2UocG1kKTsKKwlzdHJ1Y3QgcGFnZSAqbmV3X3BhZ2U7CisKKwlpZiAoIXBtZF9wcmVz ZW50KCpwbWQpKSB7CisJCSphZGRyZXNzICs9ICAodW5zaWduZWQgbG9uZylQVFJTX1BFUl9QVEUg KiBQQUdFX1NJWkU7CisJCXJldHVybiAwOworCX0KKworCWlmIChwYWdlX3RvX25pZChvbGRfcGFn ZSkgPT0gc291cmNlKSB7CisJCW5ld19wYWdlID0gZ2V0X25ld19wYWdlKG9sZF9wYWdlLCBwcml2 YXRlLCAmcmVzdWx0KTsKKwkJaWYgKCFuZXdfcGFnZSkKKwkJCXJldHVybiAtRU5PTUVNOworCQlw YWdlc19ub3RfbWlncmF0ZWQgKz0gbWlncmF0ZV9wbWQocG1kLCBtbSwgKmFkZHJlc3MsIG5ld19w YWdlKTsKKwl9CisJKmFkZHJlc3MgKz0gICh1bnNpZ25lZCBsb25nKVBUUlNfUEVSX1BURSAqIFBB R0VfU0laRTsKKworCXJldHVybiBwYWdlc19ub3RfbWlncmF0ZWQ7Cit9CisKK3N0YXRpYyBpbnQg bWlncmF0ZV9wYWdlX3RhYmxlc19wdWQocHVkX3QgKnB1ZCwgc3RydWN0IG1tX3N0cnVjdCAqbW0s CisJCQkJICAgdW5zaWduZWQgbG9uZyAqYWRkcmVzcywgaW50IHNvdXJjZSwKKwkJCQkgICBuZXdf cGFnZV90IGdldF9uZXdfcGFnZSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHByaXZhdGUpCit7CisJ aW50IHBhZ2VzX25vdF9taWdyYXRlZCA9IDA7CisJaW50IGk7CisJaW50ICpyZXN1bHQgPSBOVUxM OworCXN0cnVjdCBwYWdlICpvbGRfcGFnZSA9IHZpcnRfdG9fcGFnZShwdWQpOworCXN0cnVjdCBw YWdlICpuZXdfcGFnZTsKKworCWlmICghcHVkX3ByZXNlbnQoKnB1ZCkpIHsKKwkJKmFkZHJlc3Mg Kz0gKHVuc2lnbmVkIGxvbmcpUFRSU19QRVJfUE1EICoKKwkJCQkodW5zaWduZWQgbG9uZylQVFJT X1BFUl9QVEUgKiBQQUdFX1NJWkU7CisJCXJldHVybiAwOworCX0KKworCWlmIChwYWdlX3RvX25p ZChvbGRfcGFnZSkgPT0gc291cmNlKSB7CisJCW5ld19wYWdlID0gZ2V0X25ld19wYWdlKG9sZF9w YWdlLCBwcml2YXRlLCAmcmVzdWx0KTsKKwkJaWYgKCFuZXdfcGFnZSkKKwkJCXJldHVybiAtRU5P TUVNOworCisJCXBhZ2VzX25vdF9taWdyYXRlZCArPSBtaWdyYXRlX3B1ZChwdWQsIG1tLCAqYWRk cmVzcywgbmV3X3BhZ2UpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QVUQ7IGkr KykgeworCQlpbnQgcmV0OworCQlyZXQgPSBtaWdyYXRlX3BhZ2VfdGFibGVzX3BtZChwbWRfb2Zm c2V0KHB1ZCwgKmFkZHJlc3MpLCBtbSwKKwkJCQkJICAgICAgYWRkcmVzcywgc291cmNlLAorCQkJ CQkgICAgICBnZXRfbmV3X3BhZ2UsIHByaXZhdGUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVy biByZXQ7CisJCXBhZ2VzX25vdF9taWdyYXRlZCArPSByZXQ7CisJfQorCisJcmV0dXJuIHBhZ2Vz X25vdF9taWdyYXRlZDsKK30KKworc3RhdGljIGludCBtaWdyYXRlX3BhZ2VfdGFibGVzX3BnZChw Z2RfdCAqcGdkLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICB1bnNpZ25lZCBsb25nICph ZGRyZXNzLCBpbnQgc291cmNlLAorCQkJCSAgIG5ld19wYWdlX3QgZ2V0X25ld19wYWdlLAorCQkJ CSAgIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSkKK3sKKwlpbnQgcGFnZXNfbm90X21pZ3JhdGVkID0g MDsKKwlpbnQgaTsKKwlpbnQgKnJlc3VsdCA9IE5VTEw7CisJc3RydWN0IHBhZ2UgKm9sZF9wYWdl ID0gdmlydF90b19wYWdlKHBnZCk7CisJc3RydWN0IHBhZ2UgKm5ld19wYWdlOworCisJaWYgKCFw Z2RfcHJlc2VudCgqcGdkKSkgeworCQkqYWRkcmVzcyArPSAgKHVuc2lnbmVkIGxvbmcpUFRSU19Q RVJfUFVEICoKKwkJCQkodW5zaWduZWQgbG9uZylQVFJTX1BFUl9QTUQgKgorCQkJCSh1bnNpZ25l ZCBsb25nKVBUUlNfUEVSX1BURSAqIFBBR0VfU0laRTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYg KHBhZ2VfdG9fbmlkKG9sZF9wYWdlKSA9PSBzb3VyY2UpIHsKKwkJbmV3X3BhZ2UgPSBnZXRfbmV3 X3BhZ2Uob2xkX3BhZ2UsIHByaXZhdGUsICZyZXN1bHQpOworCQlpZiAoIW5ld19wYWdlKQorCQkJ cmV0dXJuIC1FTk9NRU07CisKKwkJcGFnZXNfbm90X21pZ3JhdGVkICs9IG1pZ3JhdGVfcGdkKHBn ZCwgbW0sICAqYWRkcmVzcywgbmV3X3BhZ2UpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgUFRSU19Q RVJfUFVEOyBpKyspIHsKKwkJaW50IHJldDsKKwkJcmV0ID0gbWlncmF0ZV9wYWdlX3RhYmxlc19w dWQocHVkX29mZnNldChwZ2QsICphZGRyZXNzKSwgbW0sCisJCQkJCSAgICAgIGFkZHJlc3MsIHNv dXJjZSwKKwkJCQkJICAgICAgZ2V0X25ld19wYWdlLCBwcml2YXRlKTsKKwkJaWYgKHJldCA8IDAp CisJCQlyZXR1cm4gcmV0OworCQlwYWdlc19ub3RfbWlncmF0ZWQgKz0gcmV0OworCX0KKwlyZXR1 cm4gcGFnZXNfbm90X21pZ3JhdGVkOworfQorCisvKiBzaW1pbGlhciB0byBtaWdyYXRlIHBhZ2Vz LCBidXQgbWlncmFnZXMgdGhlIHBhZ2UgdGFibGVzLiAqLworaW50IG1pZ3JhdGVfcGFnZV90YWJs ZXNfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBzb3VyY2UsCisJCQkgICBuZXdfcGFnZV90 IGdldF9uZXdfcGFnZSwgdW5zaWduZWQgbG9uZyBwcml2YXRlKQoreworCWludCBwYWdlc19ub3Rf bWlncmF0ZWQgPSAwOworCWludCBpOworCWludCAqcmVzdWx0ID0gTlVMTDsKKwlzdHJ1Y3QgcGFn ZSAqb2xkX3BhZ2UgPSB2aXJ0X3RvX3BhZ2UobW0tPnBnZCk7CisJc3RydWN0IHBhZ2UgKm5ld19w YWdlOworCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IDBVTDsKKworCWlmIChtbS0+cGdkID09IE5V TEwpCisJCXJldHVybiAwOworCisJaWYgKHBhZ2VfdG9fbmlkKG9sZF9wYWdlKSA9PSBzb3VyY2Up IHsKKwkJbmV3X3BhZ2UgPSBnZXRfbmV3X3BhZ2Uob2xkX3BhZ2UsIHByaXZhdGUsICZyZXN1bHQp OworCQlpZiAoIW5ld19wYWdlKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJnZXRfbmV3X3BhZ2Ug ZmFpbGVkIGF0IHRvcCBsZXZlbFxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlwYWdl c19ub3RfbWlncmF0ZWQgKz0gbWlncmF0ZV90b3BfbGV2ZWxfcGFnZV90YWJsZShtbSwKKwkJCQkJ CQkJbmV3X3BhZ2UpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QR0QgJiYgYWRk cmVzcyA8IG1tLT50YXNrX3NpemU7IGkrKykgeworCQlpbnQgcmV0OworCQlwcmludGsoIm1pZ3Jh dGVfcGFnZV90YWJsZXNfbW0gYWRyZXNzPSVsWCAqcGdkID0gJWxYXG4iLAorCQkJYWRkcmVzcywg Kih1bnNpZ25lZCBsb25nICopcGdkX29mZnNldChtbSwgYWRkcmVzcykpOworCisJCXJldCA9IG1p Z3JhdGVfcGFnZV90YWJsZXNfcGdkKHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpLCBtbSwKKwkJCQkJ ICAgICAgJmFkZHJlc3MsIHNvdXJjZSwKKwkJCQkJICAgICAgZ2V0X25ld19wYWdlLCBwcml2YXRl KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIm1pZ3JhdGVfcGFnZV90 YWJsZXNfbW0gcmV0dXJuaW5nIGVhcmx5ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJ fQorCQlwYWdlc19ub3RfbWlncmF0ZWQgKz0gcmV0OworCX0KKworCS8qIGZsdXNoIHRoZSB0bGJz IGlmIG5lY2Vzc2FyeS4gKi8KKwltYXliZV9mbHVzaF90bGJfbW0obW0pOworCisJcHJpbnRrKEtF Uk5fSU5GTyAibWlncmF0ZV9wYWdlX3RhYmxlc19tbSByZXR1cm5pbmcgJWRcbiIsCisJCXBhZ2Vz X25vdF9taWdyYXRlZCk7CisKKwlyZXR1cm4gcGFnZXNfbm90X21pZ3JhdGVkOworfQpkaWZmIC11 cndOYkIgMi42LjIzL21tL21yZW1hcC5jIDIuNi4yM2EvbW0vbXJlbWFwLmMKLS0tIDIuNi4yMy9t bS9tcmVtYXAuYwkyMDA3LTEwLTA5IDEzOjMxOjM4LjAwMDAwMDAwMCAtMDcwMAorKysgMi42LjIz YS9tbS9tcmVtYXAuYwkyMDA3LTEwLTMwIDA2OjU3OjQ5LjAwMDAwMDAwMCAtMDcwMApAQCAtOTgs NiArOTgsNyBAQAogCW5ld19wdGwgPSBwdGVfbG9ja3B0cihtbSwgbmV3X3BtZCk7CiAJaWYgKG5l d19wdGwgIT0gb2xkX3B0bCkKIAkJc3Bpbl9sb2NrX25lc3RlZChuZXdfcHRsLCBTSU5HTEVfREVQ VEhfTkVTVElORyk7CisJZGVsaW1ib19wdGUoJm5ld19wdGUsICZuZXdfcHRsLCAmbmV3X3BtZCwg bW0sIG5ld19hZGRyKTsKIAlhcmNoX2VudGVyX2xhenlfbW11X21vZGUoKTsKIAogCWZvciAoOyBv bGRfYWRkciA8IG9sZF9lbmQ7IG9sZF9wdGUrKywgb2xkX2FkZHIgKz0gUEFHRV9TSVpFLApkaWZm IC11cndOYkIgMi42LjIzL21tL3JtYXAuYyAyLjYuMjNhL21tL3JtYXAuYwotLS0gMi42LjIzL21t L3JtYXAuYwkyMDA3LTEwLTA5IDEzOjMxOjM4LjAwMDAwMDAwMCAtMDcwMAorKysgMi42LjIzYS9t bS9ybWFwLmMJMjAwNy0xMC0yOSAwOTo0NjoyNS4wMDAwMDAwMDAgLTA3MDAKQEAgLTI1NCw2ICsy NTQsNyBAQAogCiAJcHRsID0gcHRlX2xvY2twdHIobW0sIHBtZCk7CiAJc3Bpbl9sb2NrKHB0bCk7 CisJZGVsaW1ib19wdGUoJnB0ZSwgJnB0bCwgJnBtZCwgbW0sIGFkZHJlc3MpOwogCWlmIChwdGVf cHJlc2VudCgqcHRlKSAmJiBwYWdlX3RvX3BmbihwYWdlKSA9PSBwdGVfcGZuKCpwdGUpKSB7CiAJ CSpwdGxwID0gcHRsOwogCQlyZXR1cm4gcHRlOwo= ------=_Part_2003_23435539.1196440602892-- -- 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/ . Don't email: email@kvack.org