From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from zps76.corp.google.com (zps76.corp.google.com [172.25.146.76]) by smtp-out.google.com with ESMTP id m04G2eEn024743 for ; Fri, 4 Jan 2008 16:02:41 GMT Received: from fg-out-1718.google.com (fgad23.prod.google.com [10.86.55.23]) by zps76.corp.google.com with ESMTP id m04G2bwR022466 for ; Fri, 4 Jan 2008 08:02:38 -0800 Received: by fg-out-1718.google.com with SMTP id d23so3669431fga.29 for ; Fri, 04 Jan 2008 08:02:37 -0800 (PST) Message-ID: Date: Fri, 4 Jan 2008 11:02:37 -0500 From: "Ross Biro" Subject: RFC/Patch Make Page Tables Relocatable Part 2/2 Page Table Migration Code MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_25540_26835637.1199462557642" Sender: owner-linux-mm@kvack.org Return-Path: To: linux-mm@kvack.org List-ID: ------=_Part_25540_26835637.1199462557642 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Here is the code to do the actual relocation. I believe there is a race in this version of the code. If the relocation code sleeps while allocating memory and the rcu code frees the old page tables before the tlbflush, then if another cpu is running the process in user space, the page tables could be corrupted. Not really a big deal, but it needs to be fixed. Probably by not scheduling the rcu free until after all the page tables have been relocated. Ross ------=_Part_25540_26835637.1199462557642 Content-Type: application/octet-stream; name=relocate.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fb0wxtzb0 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 PSBwdGVfcGFnZSgqcHRlcCk7CiAKZGlmZiAtdXJ3TmJCIDIuNi4yMy9hcmNoL3g4Nl82NC9rZXJu ZWwvc21wLmMgMi42LjIzYS9hcmNoL3g4Nl82NC9rZXJuZWwvc21wLmMKLS0tIDIuNi4yMy9hcmNo L3g4Nl82NC9rZXJuZWwvc21wLmMJMjAwNy0xMC0wOSAxMzozMTozOC4wMDAwMDAwMDAgLTA3MDAK KysrIDIuNi4yM2EvYXJjaC94ODZfNjQva2VybmVsL3NtcC5jCTIwMDgtMDEtMDIgMDk6MDc6MDQu MDAwMDAwMDAwIC0wODAwCkBAIC01Niw2ICs1Niw3IEBACiAJCXN0cnVjdCBtbV9zdHJ1Y3QgKmZs dXNoX21tOwogCQl1bnNpZ25lZCBsb25nIGZsdXNoX3ZhOwogI2RlZmluZSBGTFVTSF9BTEwJLTFV TEwKKyNkZWZpbmUgUkVMT0FEX0FMTAktMlVMTAogCQlzcGlubG9ja190IHRsYnN0YXRlX2xvY2s7 CiAJfTsKIAljaGFyIHBhZFtTTVBfQ0FDSEVfQllURVNdOwpAQCAtMTU1LDYgKzE1Niw4IEBACiAJ CWlmIChyZWFkX3BkYShtbXVfc3RhdGUpID09IFRMQlNUQVRFX09LKSB7CiAJCQlpZiAoZi0+Zmx1 c2hfdmEgPT0gRkxVU0hfQUxMKQogCQkJCWxvY2FsX2ZsdXNoX3RsYigpOworCQkJZWxzZSBpZiAo Zi0+Zmx1c2hfdmEgPT0gUkVMT0FEX0FMTCkKKwkJCQlsb2NhbF9yZWxvYWRfdGxiX21tKGYtPmZs dXNoX21tKTsKIAkJCWVsc2UKIAkJCQlfX2ZsdXNoX3RsYl9vbmUoZi0+Zmx1c2hfdmEpOwogCQl9 IGVsc2UKQEAgLTIyNSwxMCArMjI4LDM0IEBACiB9CiBFWFBPUlRfU1lNQk9MKGZsdXNoX3RsYl9j dXJyZW50X3Rhc2spOwogCit2b2lkIHJlbG9hZF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0p Cit7CisJY3B1bWFza190IGNwdV9tYXNrOworCisJY2xlYXJfYml0KE1NRl9ORUVEX1JFTE9BRCwg Jm1tLT5mbGFncyk7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwljcHVfbWFzayA9IG1tLT5jcHVf dm1fbWFzazsKKwljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7CisKKwlp ZiAoY3VycmVudC0+YWN0aXZlX21tID09IG1tKSB7CisJCWlmIChjdXJyZW50LT5tbSkKKwkJCWxv Y2FsX3JlbG9hZF90bGJfbW0obW0pOworCQllbHNlCisJCQlsZWF2ZV9tbShzbXBfcHJvY2Vzc29y X2lkKCkpOworCX0KKwlpZiAoIWNwdXNfZW1wdHkoY3B1X21hc2spKQorCQlmbHVzaF90bGJfb3Ro ZXJzKGNwdV9tYXNrLCBtbSwgUkVMT0FEX0FMTCk7CisKKwlwcmVlbXB0X2VuYWJsZSgpOworfQor CiB2b2lkIGZsdXNoX3RsYl9tbSAoc3RydWN0IG1tX3N0cnVjdCAqIG1tKQogewogCWNwdW1hc2tf dCBjcHVfbWFzazsKIAorCWNsZWFyX2JpdChNTUZfTkVFRF9GTFVTSCwgJm1tLT5mbGFncyk7CisK IAlwcmVlbXB0X2Rpc2FibGUoKTsKIAljcHVfbWFzayA9IG1tLT5jcHVfdm1fbWFzazsKIAljcHVf Y2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7CmRpZmYgLXVyd05iQiAyLjYuMjMv aW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmggMi42LjIzYS9pbmNsdWRlL2FzbS1nZW5lcmlj L3BndGFibGUuaAotLS0gMi42LjIzL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oCTIwMDct MTAtMDkgMTM6MzE6MzguMDAwMDAwMDAwIC0wNzAwCisrKyAyLjYuMjNhL2luY2x1ZGUvYXNtLWdl bmVyaWMvcGd0YWJsZS5oCTIwMDgtMDEtMDQgMDc6MzY6NDEuMDAwMDAwMDAwIC0wODAwCkBAIC00 LDYgKzQsOCBAQAogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNpZmRlZiBDT05GSUdfTU1VCiAKKyNp bmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FD Q0VTU19GTEFHUwogLyoKICAqIExhcmdlbHkgc2FtZSBhcyBhYm92ZSwgYnV0IG9ubHkgc2V0cyB0 aGUgYWNjZXNzIGZsYWdzIChkaXJ0eSwKQEAgLTE5OSw2ICsyMDEsODggQEAKIAl9CiAJcmV0dXJu IDA7CiB9CisKKworLyogVXNlZCB0byByZXdhbGsgdGhlIHBhZ2UgdGFibGVzIGlmIGFmdGVyIHdl IGdyYWIgdGhlIGFwcHJvcHJpYXRlIGxvY2ssCisgICB3ZSBlbmQgdXAgd2l0aCBhIHBhZ2UgdGhh dCdzIGp1c3Qgd2FpdGluZyB0byBnbyBhd2F5LiAqLworc3RhdGljIGlubGluZSBwZ2RfdCAqd2Fs a19wYWdlX3RhYmxlX3BnZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJICB1bnNpZ25lZCBs b25nIGFkZHIpCit7CisJcmV0dXJuIHBnZF9vZmZzZXQobW0sIGFkZHIpOworfQorCitzdGF0aWMg aW5saW5lIHB1ZF90ICp3YWxrX3BhZ2VfdGFibGVfcHVkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAor CQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyKSB7CisJcGdkX3QgKnBnZDsKKwlwZ2QgPSB3YWxrX3Bh Z2VfdGFibGVfcGdkKG1tLCBhZGRyKTsKKwlCVUdfT04oIXBnZCk7CisJcmV0dXJuIHB1ZF9vZmZz ZXQocGdkLCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSBwbWRfdCAqd2Fsa19wYWdlX3RhYmxl X3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sK KwlwdWRfdCAqcHVkOworCXB1ZCA9IHdhbGtfcGFnZV90YWJsZV9wdWQobW0sIGFkZHIpOworCUJV R19PTighcHVkKTsKKwlyZXR1cm4gIHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKK30KKworc3RhdGlj IGlubGluZSBwdGVfdCAqd2Fsa19wYWdlX3RhYmxlX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwK KwkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlwbWRfdCAqcG1kOworCXBtZCA9IHdhbGtf cGFnZV90YWJsZV9wbWQobW0sIGFkZHIpOworCUJVR19PTighcG1kKTsKKwlyZXR1cm4gcHRlX29m ZnNldF9tYXAocG1kLCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCAqd2Fsa19wYWdl X3RhYmxlX2h1Z2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgICAgICB1bnNpZ25l ZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIChwdGVfdCAqKXdhbGtfcGFnZV90YWJsZV9wbWQobW0s IGFkZHIpOworfQorCisKKyNpZmRlZiBBUkNIX0hBU19GT1JDRV9QQUdFX1RBQkxFX1JFTE9BRAor c3RhdGljIGlubGluZSB2b2lkIG1heWJlX2ZvcmNlX3JlbG9hZF90bGJfbW0oc3RydWN0IG1tX3N0 cnVjdCAqbW0pCit7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChNTUZfTkVFRF9SRUxPQUQsICZt bS0+ZmxhZ3MpKQorCQlmb3JjZV9yZWxvYWRfdGxiX21tKG1tKTsKK30KKworc3RhdGljIGlubGlu ZSBpbnQgbWF5YmVfbmVlZF9mb3JjZV9yZWxvYWRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7 CisJaWYgKCFjcHVzX2VtcHR5KG1tLT5jcHVfdm1fbWFzaykpIHsKKwkJc2V0X2JpdChNTUZfTkVF RF9SRUxPQUQsICZtbS0+ZmxhZ3MpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbmxpbmUgaW50IG1pZ3JhdGVfdG9wX2xldmVsX3BhZ2VfdGFibGUoc3RydWN0IG1t X3N0cnVjdCAqbW0sCisJCQkJCSAgICAgICBzdHJ1Y3QgcGFnZSAqZGVzdCkKK3sKKwl1bnNpZ25l ZCBsb25nIGZsYWdzOworCXZvaWQgKmRlc3RfcHRyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1t LT5wYWdlX3RhYmxlX2xvY2ssIGZsYWdzKTsKKwlkZXN0X3B0ciA9IHBhZ2VfYWRkcmVzcyhkZXN0 KTsKKwltZW1jcHkoZGVzdF9wdHIsIG1tLT5wZ2QsIFBBR0VfU0laRSk7CisJSU5JVF9SQ1VfSEVB RCgmKHZpcnRfdG9fcGFnZShtbS0+cGdkKS0+cmN1KSk7CisJY2FsbF9yY3UoJih2aXJ0X3RvX3Bh Z2UobW0tPnBnZCktPnJjdSksIHJjdV9mcmVlX3B0KTsKKwltbS0+cGdkID0gKHBnZF90ICopZGVz dF9wdHI7CisJbWF5YmVfbmVlZF9mb3JjZV9yZWxvYWRfbW0obW0pOworCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJm1tLT5wYWdlX3RhYmxlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKyNl bHNlCitzdGF0aWMgaW5saW5lIGludCBtaWdyYXRlX3RvcF9sZXZlbF9wYWdlX3RhYmxlKHN0cnVj dCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgICAgICAgc3RydWN0IHBhZ2UgKmRlc3QpIHsKKwlyZXR1 cm4gMTsKK30KKyNlbmRpZgorCiAjZW5kaWYgLyogQ09ORklHX01NVSAqLwogCiAvKgpkaWZmIC11 cndOYkIgMi42LjIzL2luY2x1ZGUvYXNtLXg4Nl82NC90bGJmbHVzaC5oIDIuNi4yM2EvaW5jbHVk ZS9hc20teDg2XzY0L3RsYmZsdXNoLmgKLS0tIDIuNi4yMy9pbmNsdWRlL2FzbS14ODZfNjQvdGxi Zmx1c2guaAkyMDA3LTEwLTA5IDEzOjMxOjM4LjAwMDAwMDAwMCAtMDcwMAorKysgMi42LjIzYS9p bmNsdWRlL2FzbS14ODZfNjQvdGxiZmx1c2guaAkyMDA4LTAxLTA0IDA2OjM4OjI4LjAwMDAwMDAw MCAtMDgwMApAQCAtNiw2ICs2LDEzIEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2lu Y2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAorI2RlZmluZSBBUkNIX0hBU19UTEJfUkVMT0FECitzdGF0 aWMgaW5saW5lIHZvaWQgbG9hZF9jcjMocGdkX3QgKnBnZCk7CitzdGF0aWMgaW5saW5lIHZvaWQg X19yZWxvYWRfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWxvYWRfY3IzKG1tLT5w Z2QpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGIodm9pZCkKIHsKIAl3cml0 ZV9jcjMocmVhZF9jcjMoKSk7CkBAIC00NCw2ICs1MCwxMiBAQAogI2RlZmluZSBmbHVzaF90bGJf YWxsKCkgX19mbHVzaF90bGJfYWxsKCkKICNkZWZpbmUgbG9jYWxfZmx1c2hfdGxiKCkgX19mbHVz aF90bGIoKQogCitzdGF0aWMgaW5saW5lIHZvaWQgcmVsb2FkX3RsYl9tbShzdHJ1Y3QgbW1fc3Ry dWN0ICptbSkKK3sKKwlpZiAobW0gPT0gY3VycmVudC0+YWN0aXZlX21tKQorCQlfX3JlbG9hZF90 bGJfbW0obW0pOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBt bV9zdHJ1Y3QgKm1tKQogewogCWlmIChtbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pCkBAIC03MSw2 ICs4MywxMCBAQAogI2RlZmluZSBsb2NhbF9mbHVzaF90bGIoKSBcCiAJX19mbHVzaF90bGIoKQog CisjZGVmaW5lIGxvY2FsX3JlbG9hZF90bGJfbW0obW0pIFwKKwlfX3JlbG9hZF90bGJfbW0obW0p CisKK2V4dGVybiB2b2lkIHJlbG9hZF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogZXh0 ZXJuIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKTsKIGV4dGVybiB2b2lkIGZsdXNoX3RsYl9jdXJy ZW50X3Rhc2sodm9pZCk7CiBleHRlcm4gdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVj dCAqKTsKQEAgLTEwNiw0ICsxMjIsOSBAQAogCSAgIGJ5IHRoZSBub3JtYWwgVExCIGZsdXNoaW5n IGFsZ29yaXRobXMuICovCiB9CiAKKy8qIERvIHRoaXMgYXQgdGhlIGVuZCBiZWNhdXNlIHdlIG5l ZWQgVExCU1RBVEVfT0sgZXQgYWwgZGVmaW5lZCwgYnV0CisgICB3ZSBuZWVkIHRvIGluY2x1ZGUg dGhpcyBiZWNhdXNlIHdlIHVzZSBsb2FkX2NyMy4gKi8KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRl eHQuaD4KKworCiAjZW5kaWYgLyogX1g4NjY0X1RMQkZMVVNIX0ggKi8KZGlmZiAtdXJ3TmJCIDIu Ni4yMy9pbmNsdWRlL2xpbnV4L21tLmggMi42LjIzYS9pbmNsdWRlL2xpbnV4L21tLmgKLS0tIDIu Ni4yMy9pbmNsdWRlL2xpbnV4L21tLmgJMjAwNy0xMC0wOSAxMzozMTozOC4wMDAwMDAwMDAgLTA3 MDAKKysrIDIuNi4yM2EvaW5jbHVkZS9saW51eC9tbS5oCTIwMDgtMDEtMDIgMDg6MDc6NDcuMDAw MDAwMDAwIC0wODAwCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVidWdfbG9j a3MuaD4KICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogI2luY2x1ZGUgPGxpbnV4L21t X3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAogc3RydWN0IG1lbXBvbGljeTsK IHN0cnVjdCBhbm9uX3ZtYTsKQEAgLTkzNSw2ICs5MzYsNyBAQAogCXB0ZV90ICpfX3B0ZSA9IHB0 ZV9vZmZzZXRfbWFwKHBtZCwgYWRkcmVzcyk7CVwKIAkqKHB0bHApID0gX19wdGw7CQkJCVwKIAlz cGluX2xvY2soX19wdGwpOwkJCQlcCisJZGVsaW1ib19wdGUoJl9fcHRlLCBwdGxwLCAmcG1kLCBt bSwgYWRkcmVzcyk7CVwKIAlfX3B0ZTsJCQkJCQlcCiB9KQogCkBAIC05NTksNiArOTYyLDYyIEBA CiBleHRlcm4gdm9pZCBmcmVlX2FyZWFfaW5pdF9ub2RlKGludCBuaWQsIHBnX2RhdGFfdCAqcGdk YXQsCiAJdW5zaWduZWQgbG9uZyAqIHpvbmVzX3NpemUsIHVuc2lnbmVkIGxvbmcgem9uZV9zdGFy dF9wZm4sIAogCXVuc2lnbmVkIGxvbmcgKnpob2xlc19zaXplKTsKKworCisKK3N0YXRpYyBpbmxp bmUgdm9pZCBkZWxpbWJvX3B0ZShwdGVfdCAqKnB0ZSwgc3BpbmxvY2tfdCAqKnB0bCwgIHBtZF90 ICoqcG1kLAorCQkJICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCSAgdW5zaWduZWQgbG9uZyBh ZGRyKQoreworI2lmIE5SX0NQVVMgPj0gQ09ORklHX1NQTElUX1BUTE9DS19DUFVTCisJc3Bpbl91 bmxvY2soKnB0bCk7CisjZW5kaWYKKwlwdGVfdW5tYXAoKnB0ZSk7CisJKnBtZCA9IHdhbGtfcGFn ZV90YWJsZV9wbWQobW0sIGFkZHIpOworCSpwdGUgPSBwdGVfb2Zmc2V0X21hcCgqcG1kLCBhZGRy KTsKKwkqcHRsID0gcHRlX2xvY2twdHIobW0sICpwbWQpOworI2lmIE5SX0NQVVMgPj0gQ09ORklH X1NQTElUX1BUTE9DS19DUFVTCisJc3Bpbl9sb2NrKCpwdGwpOworI2VuZGlmCit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZCBkZWxpbWJvX3B0ZV9uZXN0ZWQocHRlX3QgKipwdGUsIHNwaW5sb2NrX3Qg KipwdGwsCisJCQkJcG1kX3QgKipwbWQsCisJCQkJc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJ dW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgc3ViY2xhc3MpCit7CisjaWYgTlJfQ1BVUyA+PSBDT05G SUdfU1BMSVRfUFRMT0NLX0NQVVMKKwlzcGluX3VubG9jaygqcHRsKTsKKyNlbmRpZgorCSpwbWQg PSB3YWxrX3BhZ2VfdGFibGVfcG1kKG1tLCBhZGRyKTsKKwkqcHRlID0gcHRlX29mZnNldF9tYXAo KnBtZCwgYWRkcik7CisJKnB0bCA9IHB0ZV9sb2NrcHRyKG1tLCAqcG1kKTsKKworI2lmIE5SX0NQ VVMgPj0gQ09ORklHX1NQTElUX1BUTE9DS19DUFVTCisJc3Bpbl9sb2NrX25lc3RlZCgqcHRsLCBz dWJjbGFzcyk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlbGltYm9fcHVkKHB1 ZF90ICoqcHVkLCAgc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkgIHVuc2lnbmVkIGxvbmcgYWRk cikgeworCSpwdWQgPSB3YWxrX3BhZ2VfdGFibGVfcHVkKG1tLCBhZGRyKTsKK30KKworc3RhdGlj IGlubGluZSB2b2lkIGRlbGltYm9fcG1kKHBtZF90ICoqcG1kLCAgc3RydWN0IG1tX3N0cnVjdCAq bW0sCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyKSB7CisJKnBtZCA9IHdhbGtfcGFnZV90 YWJsZV9wbWQobW0sIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVsaW1ib19wZ2Qo cGdkX3QgKipwZ2QsICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCSAgICAgICB1bnNpZ25lZCBs b25nIGFkZHIpIHsKKwkqcGdkID0gd2Fsa19wYWdlX3RhYmxlX3BnZChtbSwgYWRkcik7Cit9CisK K3N0YXRpYyBpbmxpbmUgdm9pZCBkZWxpbWJvX2h1Z2VfcHRlKHB0ZV90ICoqcHRlLCAgc3RydWN0 IG1tX3N0cnVjdCAqbW0sCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcikgeworCSpwdGUgPSB3 YWxrX3BhZ2VfdGFibGVfaHVnZV9wdGUobW0sIGFkZHIpOworfQorCiAjaWZkZWYgQ09ORklHX0FS Q0hfUE9QVUxBVEVTX05PREVfTUFQCiAvKgogICogV2l0aCBDT05GSUdfQVJDSF9QT1BVTEFURVNf Tk9ERV9NQVAgc2V0LCBhbiBhcmNoaXRlY3R1cmUgbWF5IGluaXRpYWxpc2UgaXRzCmRpZmYgLXVy d05iQiAyLjYuMjMvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIDIuNi4yM2EvaW5jbHVkZS9saW51 eC9tbV90eXBlcy5oCi0tLSAyLjYuMjMvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCTIwMDctMTAt MDkgMTM6MzE6MzguMDAwMDAwMDAwIC0wNzAwCisrKyAyLjYuMjNhL2luY2x1ZGUvbGludXgvbW1f dHlwZXMuaAkyMDA4LTAxLTAyIDA4OjA2OjA5LjAwMDAwMDAwMCAtMDgwMApAQCAtNSw2ICs1LDcg QEAKICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgog I2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4K IAogc3RydWN0IGFkZHJlc3Nfc3BhY2U7CiAKQEAgLTYxLDkgKzYyLDE4IEBACiAJCXBnb2ZmX3Qg aW5kZXg7CQkvKiBPdXIgb2Zmc2V0IHdpdGhpbiBtYXBwaW5nLiAqLwogCQl2b2lkICpmcmVlbGlz dDsJCS8qIFNMVUI6IGZyZWVsaXN0IHJlcS4gc2xhYiBsb2NrICovCiAJfTsKKworCXVuaW9uIHsK IAlzdHJ1Y3QgbGlzdF9oZWFkIGxydTsJCS8qIFBhZ2VvdXQgbGlzdCwgZWcuIGFjdGl2ZV9saXN0 CiAJCQkJCSAqIHByb3RlY3RlZCBieSB6b25lLT5scnVfbG9jayAhCiAJCQkJCSAqLworCQlzdHJ1 Y3QgcmN1X2hlYWQgcmN1OwkvKiBVc2VkIGJ5IHBhZ2UgdGFibGUgcmVsb2NhdGlvbiBjb2RlCisJ CQkJCSAqIHRvIHJlbWVtYmVyIHBhZ2UgZm9yIGxhdGVyIGZyZWVpbmcsCisJCQkJCSAqIGFmdGVy IHdlIGFyZSBzdXJlIGFueW9uZQorCQkJCQkgKiBwb2tpbmcgYXQgdGhlIHBhZ2UgdGFibGVzIGlz IG5vCisJCQkJCSAqIGxvbmdlciBsb29raW5nIGF0IHRoaXMgcGFnZS4KKwkJCQkJICovCisJfTsK IAkvKgogCSAqIE9uIG1hY2hpbmVzIHdoZXJlIGFsbCBSQU0gaXMgbWFwcGVkIGludG8ga2VybmVs IGFkZHJlc3Mgc3BhY2UsCiAJICogd2UgY2FuIHNpbXBseSBjYWxjdWxhdGUgdGhlIHZpcnR1YWwg YWRkcmVzcy4gT24gbWFjaGluZXMgd2l0aApkaWZmIC11cndOYkIgMi42LjIzL21tL2h1Z2V0bGIu YyAyLjYuMjNhL21tL2h1Z2V0bGIuYwotLS0gMi42LjIzL21tL2h1Z2V0bGIuYwkyMDA3LTEwLTA5 IDEzOjMxOjM4LjAwMDAwMDAwMCAtMDcwMAorKysgMi42LjIzYS9tbS9odWdldGxiLmMJMjAwNy0x MC0zMCAwNzozMjo1MC4wMDAwMDAwMDAgLTA3MDAKQEAgLTM3OSw2ICszNzksOCBAQAogCQkJZ290 byBub21lbTsKIAkJc3Bpbl9sb2NrKCZkc3QtPnBhZ2VfdGFibGVfbG9jayk7CiAJCXNwaW5fbG9j aygmc3JjLT5wYWdlX3RhYmxlX2xvY2spOworCQlkZWxpbWJvX2h1Z2VfcHRlKCZzcmNfcHRlLCBz cmMsIGFkZHIpOworCQlkZWxpbWJvX2h1Z2VfcHRlKCZkc3RfcHRlLCBkc3QsIGFkZHIpOwogCQlp ZiAoIXB0ZV9ub25lKCpzcmNfcHRlKSkgewogCQkJaWYgKGNvdykKIAkJCQlwdGVwX3NldF93cnBy b3RlY3Qoc3JjLCBhZGRyLCBzcmNfcHRlKTsKQEAgLTU1MSw2ICs1NTMsNyBAQAogCX0KIAogCXNw aW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJZGVsaW1ib19odWdlX3B0ZSgmcHRlcCwg bW0sIGFkZHJlc3MpOwogCXNpemUgPSBpX3NpemVfcmVhZChtYXBwaW5nLT5ob3N0KSA+PiBIUEFH RV9TSElGVDsKIAlpZiAoaWR4ID49IHNpemUpCiAJCWdvdG8gYmFja291dDsKQEAgLTYwOSw2ICs2 MTIsNyBAQAogCXJldCA9IDA7CiAKIAlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwor CWRlbGltYm9faHVnZV9wdGUoJnB0ZXAsIG1tLCBhZGRyZXNzKTsKIAkvKiBDaGVjayBmb3IgYSBy YWNpbmcgdXBkYXRlIGJlZm9yZSBjYWxsaW5nIGh1Z2V0bGJfY293ICovCiAJaWYgKGxpa2VseShw dGVfc2FtZShlbnRyeSwgKnB0ZXApKSkKIAkJaWYgKHdyaXRlX2FjY2VzcyAmJiAhcHRlX3dyaXRl KGVudHJ5KSkKZGlmZiAtdXJ3TmJCIDIuNi4yMy9tbS9tZW1vcnkuYyAyLjYuMjNhL21tL21lbW9y eS5jCi0tLSAyLjYuMjMvbW0vbWVtb3J5LmMJMjAwNy0xMC0wOSAxMzozMTozOC4wMDAwMDAwMDAg LTA3MDAKKysrIDIuNi4yM2EvbW0vbWVtb3J5LmMJMjAwNy0xMS0zMCAwODowNjoxNy4wMDAwMDAw MDAgLTA4MDAKQEAgLTMwNiw2ICszMDYsNyBAQAogCiAJcHRlX2xvY2tfaW5pdChuZXcpOwogCXNw aW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJZGVsaW1ib19wbWQoJnBtZCwgbW0sIGFk ZHJlc3MpOwogCWlmIChwbWRfcHJlc2VudCgqcG1kKSkgewkvKiBBbm90aGVyIGhhcyBwb3B1bGF0 ZWQgaXQgKi8KIAkJcHRlX2xvY2tfZGVpbml0KG5ldyk7CiAJCXB0ZV9mcmVlKG5ldyk7CkBAIC0z MjUsNiArMzI2LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzcGluX2xvY2soJmluaXRfbW0u cGFnZV90YWJsZV9sb2NrKTsKKwlkZWxpbWJvX3BtZCgmcG1kLCAmaW5pdF9tbSwgYWRkcmVzcyk7 CiAJaWYgKHBtZF9wcmVzZW50KCpwbWQpKQkJLyogQW5vdGhlciBoYXMgcG9wdWxhdGVkIGl0ICov CiAJCXB0ZV9mcmVlX2tlcm5lbChuZXcpOwogCWVsc2UKQEAgLTUwNCw2ICs1MDYsOCBAQAogCXNy Y19wdGUgPSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoc3JjX3BtZCwgYWRkcik7CiAJc3JjX3B0bCA9 IHB0ZV9sb2NrcHRyKHNyY19tbSwgc3JjX3BtZCk7CiAJc3Bpbl9sb2NrX25lc3RlZChzcmNfcHRs LCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisKKwlkZWxpbWJvX3B0ZSgmc3JjX3B0ZSwgJnNyY19w dGwsICZzcmNfcG1kLCBzcmNfbW0sIGFkZHIpOwogCWFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgp OwogCiAJZG8gewpAQCAtMTU1OCwxMyArMTU2MiwxNSBAQAogICogYW5kIGRvX2Fub255bW91c19w YWdlIGFuZCBkb19ub19wYWdlIGNhbiBzYWZlbHkgY2hlY2sgbGF0ZXIgb24pLgogICovCiBzdGF0 aWMgaW5saW5lIGludCBwdGVfdW5tYXBfc2FtZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3Qg KnBtZCwKLQkJCQlwdGVfdCAqcGFnZV90YWJsZSwgcHRlX3Qgb3JpZ19wdGUpCisJCQkJcHRlX3Qg KnBhZ2VfdGFibGUsIHB0ZV90IG9yaWdfcHRlLAorCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykK IHsKIAlpbnQgc2FtZSA9IDE7CiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENP TkZJR19QUkVFTVBUKQogCWlmIChzaXplb2YocHRlX3QpID4gc2l6ZW9mKHVuc2lnbmVkIGxvbmcp KSB7CiAJCXNwaW5sb2NrX3QgKnB0bCA9IHB0ZV9sb2NrcHRyKG1tLCBwbWQpOwogCQlzcGluX2xv Y2socHRsKTsKKwkJZGVsaW1ib19wdGUoJnBhZ2VfdGFibGUsICZwdGwsICZwbWQsIG1tLCBhZGRy ZXNzKTsKIAkJc2FtZSA9IHB0ZV9zYW1lKCpwYWdlX3RhYmxlLCBvcmlnX3B0ZSk7CiAJCXNwaW5f dW5sb2NrKHB0bCk7CiAJfQpAQCAtMjE1Myw3ICsyMTU5LDcgQEAKIAlwdGVfdCBwdGU7CiAJaW50 IHJldCA9IDA7CiAKLQlpZiAoIXB0ZV91bm1hcF9zYW1lKG1tLCBwbWQsIHBhZ2VfdGFibGUsIG9y aWdfcHRlKSkKKwlpZiAoIXB0ZV91bm1hcF9zYW1lKG1tLCBwbWQsIHBhZ2VfdGFibGUsIG9yaWdf cHRlLCBhZGRyZXNzKSkKIAkJZ290byBvdXQ7CiAKIAllbnRyeSA9IHB0ZV90b19zd3BfZW50cnko b3JpZ19wdGUpOwpAQCAtMjIyNyw2ICsyMjMzLDEwIEBACiAJfQogCiAJLyogTm8gbmVlZCB0byBp bnZhbGlkYXRlIC0gaXQgd2FzIG5vbi1wcmVzZW50IGJlZm9yZSAqLworCS8qIFVubGVzcyBvZiBj b3Vyc2UgdGhlIGNwdSBtaWdodCBiZSBsb29raW5nIGF0IGFuIG9sZAorCSAgIGNvcHkgb2YgdGhl IHB0ZS4gKi8KKwltYXliZV9mbHVzaF90bGJfbW0obW0pOworCiAJdXBkYXRlX21tdV9jYWNoZSh2 bWEsIGFkZHJlc3MsIHB0ZSk7CiB1bmxvY2s6CiAJcHRlX3VubWFwX3VubG9jayhwYWdlX3RhYmxl LCBwdGwpOwpAQCAtMjI3OSw2ICsyMjg5LDcgQEAKIAogCQlwdGwgPSBwdGVfbG9ja3B0cihtbSwg cG1kKTsKIAkJc3Bpbl9sb2NrKHB0bCk7CisJCWRlbGltYm9fcHRlKCZwYWdlX3RhYmxlLCAmcHRs LCAmcG1kLCBtbSwgYWRkcmVzcyk7CiAJCWlmICghcHRlX25vbmUoKnBhZ2VfdGFibGUpKQogCQkJ Z290byByZWxlYXNlOwogCQlpbmNfbW1fY291bnRlcihtbSwgZmlsZV9yc3MpOwpAQCAtMjI4OCw2 ICsyMjk5LDEwIEBACiAJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcGFnZV90YWJsZSwgZW50cnkp OwogCiAJLyogTm8gbmVlZCB0byBpbnZhbGlkYXRlIC0gaXQgd2FzIG5vbi1wcmVzZW50IGJlZm9y ZSAqLworCS8qIFVubGVzcyBvZiBjb3Vyc2UgdGhlIGNwdSBtaWdodCBiZSBsb29raW5nIGF0IGFu IG9sZAorCSAgIGNvcHkgb2YgdGhlIHB0ZS4gKi8KKwltYXliZV9mbHVzaF90bGJfbW0obW0pOwor CiAJdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIGVudHJ5KTsKIAlsYXp5X21tdV9wcm90 X3VwZGF0ZShlbnRyeSk7CiB1bmxvY2s6CkBAIC0yNDQxLDYgKzI0NTYsMTAgQEAKIAkJfQogCiAJ CS8qIG5vIG5lZWQgdG8gaW52YWxpZGF0ZTogYSBub3QtcHJlc2VudCBwYWdlIHdvbid0IGJlIGNh Y2hlZCAqLworCQkvKiBVbmxlc3Mgb2YgY291cnNlIHRoZSBjcHUgY291bGQgYmUgbG9va2luZyBh dCBhbiBvbGQgcGFnZQorCQkgICB0YWJsZSBlbnRyeS4gKi8KKwkJbWF5YmVfZmx1c2hfdGxiX21t KG1tKTsKKwogCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgZW50cnkpOwogCQlsYXp5 X21tdV9wcm90X3VwZGF0ZShlbnRyeSk7CiAJfSBlbHNlIHsKQEAgLTI1NDQsNyArMjU2Myw3IEBA CiAJCQkJKHdyaXRlX2FjY2VzcyA/IEZBVUxUX0ZMQUdfV1JJVEUgOiAwKTsKIAlwZ29mZl90IHBn b2ZmOwogCi0JaWYgKCFwdGVfdW5tYXBfc2FtZShtbSwgcG1kLCBwYWdlX3RhYmxlLCBvcmlnX3B0 ZSkpCisJaWYgKCFwdGVfdW5tYXBfc2FtZShtbSwgcG1kLCBwYWdlX3RhYmxlLCBvcmlnX3B0ZSwg YWRkcmVzcykpCiAJCXJldHVybiAwOwogCiAJaWYgKHVubGlrZWx5KCEodm1hLT52bV9mbGFncyAm IFZNX05PTkxJTkVBUikgfHwKQEAgLTI2MDMsNiArMjYyMiw3IEBACiAKIAlwdGwgPSBwdGVfbG9j a3B0cihtbSwgcG1kKTsKIAlzcGluX2xvY2socHRsKTsKKwlkZWxpbWJvX3B0ZSgmcHRlLCAmcHRs LCAmcG1kLCBtbSwgYWRkcmVzcyk7CiAJaWYgKHVubGlrZWx5KCFwdGVfc2FtZSgqcHRlLCBlbnRy eSkpKQogCQlnb3RvIHVubG9jazsKIAlpZiAod3JpdGVfYWNjZXNzKSB7CkBAIC0yNjI1LDYgKzI2 NDUsMTIgQEAKIAkJaWYgKHdyaXRlX2FjY2VzcykKIAkJCWZsdXNoX3RsYl9wYWdlKHZtYSwgYWRk cmVzcyk7CiAJfQorCisJLyogaWYgdGhlIGNwdSBjb3VsZCBiZSBsb29raW5nIGF0IGFuIG9sZCBw YWdlIHRhYmxlLCB3ZSBuZWVkIHRvCisJICAgZmx1c2ggb3V0IGV2ZXJ5dGhpbmcuICovCisJbWF5 YmVfZmx1c2hfdGxiX21tKG1tKTsKKworCiB1bmxvY2s6CiAJcHRlX3VubWFwX3VubG9jayhwdGUs IHB0bCk7CiAJcmV0dXJuIDA7CkBAIC0yNjc0LDYgKzI3MDAsNyBAQAogCQlyZXR1cm4gLUVOT01F TTsKIAogCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJZGVsaW1ib19wZ2QoJnBn ZCwgbW0sIGFkZHJlc3MpOwogCWlmIChwZ2RfcHJlc2VudCgqcGdkKSkJCS8qIEFub3RoZXIgaGFz IHBvcHVsYXRlZCBpdCAqLwogCQlwdWRfZnJlZShuZXcpOwogCWVsc2UKQEAgLTI2OTUsNiArMjcy Miw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9s b2NrKTsKKwlkZWxpbWJvX3B1ZCgmcHVkLCBtbSwgYWRkcmVzcyk7CiAjaWZuZGVmIF9fQVJDSF9I QVNfNExFVkVMX0hBQ0sKIAlpZiAocHVkX3ByZXNlbnQoKnB1ZCkpCQkvKiBBbm90aGVyIGhhcyBw b3B1bGF0ZWQgaXQgKi8KIAkJcG1kX2ZyZWUobmV3KTsKZGlmZiAtdXJ3TmJCIDIuNi4yMy9tbS9t ZW1wb2xpY3kuYyAyLjYuMjNhL21tL21lbXBvbGljeS5jCi0tLSAyLjYuMjMvbW0vbWVtcG9saWN5 LmMJMjAwNy0xMC0wOSAxMzozMTozOC4wMDAwMDAwMDAgLTA3MDAKKysrIDIuNi4yM2EvbW0vbWVt cG9saWN5LmMJMjAwOC0wMS0wMiAwNzo1OTowNS4wMDAwMDAwMDAgLTA4MDAKQEAgLTEwMSw2ICsx MDEsMTEgQEAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcG9saWN5X2NhY2hlOwogc3RhdGlj IHN0cnVjdCBrbWVtX2NhY2hlICpzbl9jYWNoZTsKIAorCitpbnQgbWlncmF0ZV9wYWdlX3RhYmxl c19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgIGludCBzb3VyY2UsCisJCQkgICBuZXdfcGFnZV90 IGdldF9uZXdfcGFnZSwgdW5zaWduZWQgbG9uZyBwcml2YXRlKTsKKworCiAvKiBIaWdoZXN0IHpv bmUuIEFuIHNwZWNpZmljIGFsbG9jYXRpb24gZm9yIGEgem9uZSBiZWxvdyB0aGF0IGlzIG5vdAog ICAgcG9saWNpZWQuICovCiBlbnVtIHpvbmVfdHlwZSBwb2xpY3lfem9uZSA9IDA7CkBAIC01OTcs NiArNjAyLDExIEBACiAJcmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgR0ZQX0hJR0hVU0VS X01PVkFCTEUsIDApOwogfQogCitzdGF0aWMgc3RydWN0IHBhZ2UgKm5ld19ub2RlX3BhZ2VfcGFn ZV90YWJsZXMoc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbm9k ZSwgaW50ICoqeCkgeworCXJldHVybiBhbGxvY19wYWdlc19ub2RlKG5vZGUsIEdGUF9VU0VSLCAw KTsKK30KKwogLyoKICAqIE1pZ3JhdGUgcGFnZXMgZnJvbSBvbmUgbm9kZSB0byBhIHRhcmdldCBu b2RlLgogICogUmV0dXJucyBlcnJvciBvciB0aGUgbnVtYmVyIG9mIHBhZ2VzIG5vdCBtaWdyYXRl ZC4KQEAgLTYxNiw2ICs2MjYsMTAgQEAKIAlpZiAoIWxpc3RfZW1wdHkoJnBhZ2VsaXN0KSkKIAkJ ZXJyID0gbWlncmF0ZV9wYWdlcygmcGFnZWxpc3QsIG5ld19ub2RlX3BhZ2UsIGRlc3QpOwogCisJ aWYgKCFlcnIpCisJCWVyciA9IG1pZ3JhdGVfcGFnZV90YWJsZXNfbW0obW0sIHNvdXJjZSwKKwkJ CQkJICAgICBuZXdfbm9kZV9wYWdlX3BhZ2VfdGFibGVzLCBkZXN0KTsKKwogCXJldHVybiBlcnI7 CiB9CiAKZGlmZiAtdXJ3TmJCIDIuNi4yMy9tbS9taWdyYXRlLmMgMi42LjIzYS9tbS9taWdyYXRl LmMKLS0tIDIuNi4yMy9tbS9taWdyYXRlLmMJMjAwNy0xMC0wOSAxMzozMTozOC4wMDAwMDAwMDAg LTA3MDAKKysrIDIuNi4yM2EvbW0vbWlncmF0ZS5jCTIwMDgtMDEtMDQgMDc6Mzc6MzcuMDAwMDAw MDAwIC0wODAwCkBAIC0yOCw5ICsyOCwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L21lbXBvbGljeS5o PgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5o PgotCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vdGxiLmg+CisjaW5jbHVk ZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCitpbnQgbWlncmF0ZV9w YWdlX3RhYmxlc19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHNvdXJjZSwKKwkJCSAgIG5l d19wYWdlX3QgZ2V0X25ld19wYWdlLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpOworCiAjZGVmaW5l IGxydV90b19wYWdlKF9oZWFkKSAobGlzdF9lbnRyeSgoX2hlYWQpLT5wcmV2LCBzdHJ1Y3QgcGFn ZSwgbHJ1KSkKIAogLyoKQEAgLTE1OCw2ICsxNjMsNyBAQAogCiAgCXB0bCA9IHB0ZV9sb2NrcHRy KG1tLCBwbWQpOwogIAlzcGluX2xvY2socHRsKTsKKwlkZWxpbWJvX3B0ZSgmcHRlcCwgJnB0bCwg JnBtZCwgbW0sIGFkZHIpOwogCXB0ZSA9ICpwdGVwOwogCWlmICghaXNfc3dhcF9wdGUocHRlKSkK IAkJZ290byBvdXQ7CkBAIC04NTksOSArODY1LDEwIEBACiAJCWVyciA9IG1pZ3JhdGVfcGFnZXMo JnBhZ2VsaXN0LCBuZXdfcGFnZV9ub2RlLAogCQkJCSh1bnNpZ25lZCBsb25nKXBtKTsKIAllbHNl Ci0JCWVyciA9IC1FTk9FTlQ7CisJCWVyciA9IDA7CiAKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0p OworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTAzOSwzICsxMDQ2LDI2MCBAQAogIAl9CiAgCXJl dHVybiBlcnI7CiB9CisKK3N0YXRpYyB2b2lkIHJjdV9mcmVlX3B0KHN0cnVjdCByY3VfaGVhZCAq aGVhZCkKK3sKKwkvKiBOZWVkIHRvIGtub3cgdGhhdCB0aGUgbW0gaGFzIGJlZW4gZmx1c2hlZCBi ZWZvcmUKKwkgKiB3ZSBnZXQgaGVyZS4gIE90aGVyd2lzZSB3ZSBuZWVkIGEgd2F5IHRvIGZpbmQK KwkgKiB0aGUgYXBwcm9wcmlhdGUgbW0gdG8gZmx1c2guCisJICovCisJc3RydWN0IHBhZ2UgKnBh Z2UgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHBhZ2UsIHJjdSk7CisJX19mcmVlX3BhZ2Uo cGFnZSk7Cit9CisKK2ludCBtaWdyYXRlX3BnZChwZ2RfdCAqcGdkLCBzdHJ1Y3QgbW1fc3RydWN0 ICptbSwKKwkJdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgcGFnZSAqZGVzdCkKK3sKKwl1bnNp Z25lZCBsb25nIGZsYWdzOworCXZvaWQgKmRlc3RfcHRyOworCXB1ZF90ICpwdWQ7CisKKwlzcGlu X2xvY2tfaXJxc2F2ZSgmbW0tPnBhZ2VfdGFibGVfbG9jaywgZmxhZ3MpOworCisJZGVsaW1ib19w Z2QoJnBnZCwgbW0sIGFkZHIpOworCisJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOworCWRl c3RfcHRyID0gcGFnZV9hZGRyZXNzKGRlc3QpOworCW1lbWNweShkZXN0X3B0ciwgcHVkLCBQQUdF X1NJWkUpOworCisJSU5JVF9SQ1VfSEVBRCgmcGdkX3BhZ2UoKnBnZCktPnJjdSk7CisJY2FsbF9y Y3UoJihwZ2RfcGFnZSgqcGdkKS0+cmN1KSwgcmN1X2ZyZWVfcHQpOworCXBnZF9wb3B1bGF0ZSht bSwgcGdkLCBkZXN0X3B0cik7CisKKwlmbHVzaF90bGJfcGd0YWJsZXMobW0sIGFkZHIsCisJCQkg ICBhZGRyICsgKDEgPDwgUE1EX1NISUZUKQorCQkJICAgLSAxKTsKKworCW1heWJlX25lZWRfZmx1 c2hfbW0obW0pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW0tPnBhZ2VfdGFibGVfbG9j aywgZmxhZ3MpOworCisJcmV0dXJuIDA7CisKK30KKworaW50IG1pZ3JhdGVfcHVkKHB1ZF90ICpw dWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCXN0cnVjdCBw YWdlICpkZXN0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCAqZGVzdF9wdHI7CisJ cG1kX3QgKnBtZDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtbS0+cGFnZV90YWJsZV9sb2NrLCBm bGFncyk7CisKKwlkZWxpbWJvX3B1ZCgmcHVkLCBtbSwgYWRkcik7CisJcG1kID0gcG1kX29mZnNl dChwdWQsIGFkZHIpOworCisJZGVzdF9wdHIgPSBwYWdlX2FkZHJlc3MoZGVzdCk7CisJbWVtY3B5 KGRlc3RfcHRyLCBwbWQsIFBBR0VfU0laRSk7CisKKwlJTklUX1JDVV9IRUFEKCZwdWRfcGFnZSgq cHVkKS0+cmN1KTsKKwljYWxsX3JjdSgmKHB1ZF9wYWdlKCpwdWQpLT5yY3UpLCByY3VfZnJlZV9w dCk7CisJcHVkX3BvcHVsYXRlKG1tLCBwdWQsIGRlc3RfcHRyKTsKKwlmbHVzaF90bGJfcGd0YWJs ZXMobW0sIGFkZHIsCisJCQkgICBhZGRyICsgKDEgPDwgUE1EX1NISUZUKQorCQkJICAgLSAxKTsK KwltYXliZV9uZWVkX2ZsdXNoX21tKG1tKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1t LT5wYWdlX3RhYmxlX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisKK2ludCBtaWdy YXRlX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBh ZGRyLAorCQlzdHJ1Y3QgcGFnZSAqZGVzdCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZv aWQgKmRlc3RfcHRyOworCXNwaW5sb2NrX3QgKnB0bDsKKwlwdGVfdCAqcHRlOworCisJc3Bpbl9s b2NrX2lycXNhdmUoJm1tLT5wYWdlX3RhYmxlX2xvY2ssIGZsYWdzKTsKKworCWRlbGltYm9fcG1k KCZwbWQsIG1tLCBhZGRyKTsKKworCS8qIHRoaXMgY291bGQgaGFwcGVuIGlmIHRoZSBwYWdlIHRh YmxlIGhhcyBiZWVuIHN3YXBwZWQgb3V0IGFuZCB3ZQorCSAgIHdlcmUgbG9va2luZyBhdCB0aGUg b2xkIG9uZS4gKi8KKwlpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KCpwbWQpKSkgeworCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZtbS0+cGFnZV90YWJsZV9sb2NrLCBmbGFncyk7CisJCXJldHVy biAxOworCX0KKworCXB0bCA9IHB0ZV9sb2NrcHRyKG1tLCBwbWQpOworCisJLyogV2UgbmVlZCB0 aGUgcGFnZSBsb2NrIGFzIHdlbGwuICovCisJaWYgKHB0bCAhPSAmbW0tPnBhZ2VfdGFibGVfbG9j aykKKwkJc3Bpbl9sb2NrKHB0bCk7CisKKwlwdGUgPSBwdGVfb2Zmc2V0X21hcChwbWQsIGFkZHIp OworCisJZGVzdF9wdHIgPSBrbWFwX2F0b21pYyhkZXN0LCBLTV9VU0VSMCk7CisJbWVtY3B5KGRl c3RfcHRyLCBwdGUsIFBBR0VfU0laRSk7CisJSU5JVF9SQ1VfSEVBRCgmcG1kX3BhZ2UoKnBtZCkt PnJjdSk7CisJY2FsbF9yY3UoJihwbWRfcGFnZSgqcG1kKS0+cmN1KSwgcmN1X2ZyZWVfcHQpOwor CWt1bm1hcF9hdG9taWMoZGVzdCwgS01fVVNFUjApOworCXB0ZV91bm1hcChwdGUpOworCXB0ZV9s b2NrX2luaXQoZGVzdCk7CisJcG1kX3BvcHVsYXRlKE5VTEwsIHBtZCwgZGVzdCk7CisJZmx1c2hf dGxiX3BndGFibGVzKG1tLCBhZGRyLAorCQkJICAgYWRkciArICgxIDw8IFBNRF9TSElGVCkKKwkJ CSAgIC0gMSk7CisJbWF5YmVfbmVlZF9mbHVzaF9tbShtbSk7CisKKwlpZiAocHRsICE9ICZtbS0+ cGFnZV90YWJsZV9sb2NrKQorCQlzcGluX3VubG9jayhwdGwpOworCisJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmbW0tPnBhZ2VfdGFibGVfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgbWlncmF0ZV9wYWdlX3RhYmxlc19wbWQocG1kX3QgKnBtZCwgc3RydWN0IG1t X3N0cnVjdCAqbW0sCisJCQkJICAgdW5zaWduZWQgbG9uZyAqYWRkcmVzcywgaW50IHNvdXJjZSwK KwkJCQkgICBuZXdfcGFnZV90IGdldF9uZXdfcGFnZSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHBy aXZhdGUpCit7CisJaW50IHBhZ2VzX25vdF9taWdyYXRlZCA9IDA7CisJaW50ICpyZXN1bHQgPSBO VUxMOworCXN0cnVjdCBwYWdlICpvbGRfcGFnZSA9IHZpcnRfdG9fcGFnZShwbWQpOworCXN0cnVj dCBwYWdlICpuZXdfcGFnZTsKKworCWlmICghcG1kX3ByZXNlbnQoKnBtZCkpIHsKKwkJKmFkZHJl c3MgKz0gICh1bnNpZ25lZCBsb25nKVBUUlNfUEVSX1BURSAqIFBBR0VfU0laRTsKKwkJcmV0dXJu IDA7CisJfQorCisJaWYgKHBhZ2VfdG9fbmlkKG9sZF9wYWdlKSA9PSBzb3VyY2UpIHsKKwkJbmV3 X3BhZ2UgPSBnZXRfbmV3X3BhZ2Uob2xkX3BhZ2UsIHByaXZhdGUsICZyZXN1bHQpOworCQlpZiAo IW5ld19wYWdlKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXBhZ2VzX25vdF9taWdyYXRlZCArPSBt aWdyYXRlX3BtZChwbWQsIG1tLCAqYWRkcmVzcywgbmV3X3BhZ2UpOworCX0KKwkqYWRkcmVzcyAr PSAgKHVuc2lnbmVkIGxvbmcpUFRSU19QRVJfUFRFICogUEFHRV9TSVpFOworCisJcmV0dXJuIHBh Z2VzX25vdF9taWdyYXRlZDsKK30KKworc3RhdGljIGludCBtaWdyYXRlX3BhZ2VfdGFibGVzX3B1 ZChwdWRfdCAqcHVkLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICB1bnNpZ25lZCBsb25n ICphZGRyZXNzLCBpbnQgc291cmNlLAorCQkJCSAgIG5ld19wYWdlX3QgZ2V0X25ld19wYWdlLAor CQkJCSAgIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSkKK3sKKwlpbnQgcGFnZXNfbm90X21pZ3JhdGVk ID0gMDsKKwlpbnQgaTsKKwlpbnQgKnJlc3VsdCA9IE5VTEw7CisJc3RydWN0IHBhZ2UgKm9sZF9w YWdlID0gdmlydF90b19wYWdlKHB1ZCk7CisJc3RydWN0IHBhZ2UgKm5ld19wYWdlOworCisJaWYg KCFwdWRfcHJlc2VudCgqcHVkKSkgeworCQkqYWRkcmVzcyArPSAodW5zaWduZWQgbG9uZylQVFJT X1BFUl9QTUQgKgorCQkJCSh1bnNpZ25lZCBsb25nKVBUUlNfUEVSX1BURSAqIFBBR0VfU0laRTsK KwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHBhZ2VfdG9fbmlkKG9sZF9wYWdlKSA9PSBzb3VyY2Up IHsKKwkJbmV3X3BhZ2UgPSBnZXRfbmV3X3BhZ2Uob2xkX3BhZ2UsIHByaXZhdGUsICZyZXN1bHQp OworCQlpZiAoIW5ld19wYWdlKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcGFnZXNfbm90X21p Z3JhdGVkICs9IG1pZ3JhdGVfcHVkKHB1ZCwgbW0sICphZGRyZXNzLCBuZXdfcGFnZSk7CisJfQor CisJZm9yIChpID0gMDsgaSA8IFBUUlNfUEVSX1BVRDsgaSsrKSB7CisJCWludCByZXQ7CisJCXJl dCA9IG1pZ3JhdGVfcGFnZV90YWJsZXNfcG1kKHBtZF9vZmZzZXQocHVkLCAqYWRkcmVzcyksIG1t LAorCQkJCQkgICAgICBhZGRyZXNzLCBzb3VyY2UsCisJCQkJCSAgICAgIGdldF9uZXdfcGFnZSwg cHJpdmF0ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJcGFnZXNfbm90X21p Z3JhdGVkICs9IHJldDsKKwl9CisKKwlyZXR1cm4gcGFnZXNfbm90X21pZ3JhdGVkOworfQorCitz dGF0aWMgaW50IG1pZ3JhdGVfcGFnZV90YWJsZXNfcGdkKHBnZF90ICpwZ2QsIHN0cnVjdCBtbV9z dHJ1Y3QgKm1tLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgKmFkZHJlc3MsIGludCBzb3VyY2UsCisJ CQkJICAgbmV3X3BhZ2VfdCBnZXRfbmV3X3BhZ2UsCisJCQkJICAgdW5zaWduZWQgbG9uZyBwcml2 YXRlKQoreworCWludCBwYWdlc19ub3RfbWlncmF0ZWQgPSAwOworCWludCBpOworCWludCAqcmVz dWx0ID0gTlVMTDsKKwlzdHJ1Y3QgcGFnZSAqb2xkX3BhZ2UgPSB2aXJ0X3RvX3BhZ2UocGdkKTsK KwlzdHJ1Y3QgcGFnZSAqbmV3X3BhZ2U7CisKKwlpZiAoIXBnZF9wcmVzZW50KCpwZ2QpKSB7CisJ CSphZGRyZXNzICs9ICAodW5zaWduZWQgbG9uZylQVFJTX1BFUl9QVUQgKgorCQkJCSh1bnNpZ25l ZCBsb25nKVBUUlNfUEVSX1BNRCAqCisJCQkJKHVuc2lnbmVkIGxvbmcpUFRSU19QRVJfUFRFICog UEFHRV9TSVpFOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocGFnZV90b19uaWQob2xkX3BhZ2Up ID09IHNvdXJjZSkgeworCQluZXdfcGFnZSA9IGdldF9uZXdfcGFnZShvbGRfcGFnZSwgcHJpdmF0 ZSwgJnJlc3VsdCk7CisJCWlmICghbmV3X3BhZ2UpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlw YWdlc19ub3RfbWlncmF0ZWQgKz0gbWlncmF0ZV9wZ2QocGdkLCBtbSwgICphZGRyZXNzLCBuZXdf cGFnZSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QVUQ7IGkrKykgeworCQlpbnQg cmV0OworCQlyZXQgPSBtaWdyYXRlX3BhZ2VfdGFibGVzX3B1ZChwdWRfb2Zmc2V0KHBnZCwgKmFk ZHJlc3MpLCBtbSwKKwkJCQkJICAgICAgYWRkcmVzcywgc291cmNlLAorCQkJCQkgICAgICBnZXRf bmV3X3BhZ2UsIHByaXZhdGUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCXBh Z2VzX25vdF9taWdyYXRlZCArPSByZXQ7CisJfQorCXJldHVybiBwYWdlc19ub3RfbWlncmF0ZWQ7 Cit9CisKKy8qIHNpbWlsaWFyIHRvIG1pZ3JhdGUgcGFnZXMsIGJ1dCBtaWdyYWdlcyB0aGUgcGFn ZSB0YWJsZXMuICovCitpbnQgbWlncmF0ZV9wYWdlX3RhYmxlc19tbShzdHJ1Y3QgbW1fc3RydWN0 ICptbSwgaW50IHNvdXJjZSwKKwkJCSAgIG5ld19wYWdlX3QgZ2V0X25ld19wYWdlLCB1bnNpZ25l ZCBsb25nIHByaXZhdGUpCit7CisJaW50IHBhZ2VzX25vdF9taWdyYXRlZCA9IDA7CisJaW50IGk7 CisJaW50ICpyZXN1bHQgPSBOVUxMOworCXN0cnVjdCBwYWdlICpvbGRfcGFnZSA9IHZpcnRfdG9f cGFnZShtbS0+cGdkKTsKKwlzdHJ1Y3QgcGFnZSAqbmV3X3BhZ2U7CisJdW5zaWduZWQgbG9uZyBh ZGRyZXNzID0gMFVMOworCisJaWYgKG1tLT5wZ2QgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlp ZiAocGFnZV90b19uaWQob2xkX3BhZ2UpID09IHNvdXJjZSkgeworCQluZXdfcGFnZSA9IGdldF9u ZXdfcGFnZShvbGRfcGFnZSwgcHJpdmF0ZSwgJnJlc3VsdCk7CisJCWlmICghbmV3X3BhZ2UpCisJ CQlyZXR1cm4gLUVOT01FTTsKKwkJcGFnZXNfbm90X21pZ3JhdGVkICs9IG1pZ3JhdGVfdG9wX2xl dmVsX3BhZ2VfdGFibGUobW0sCisJCQkJCQkJCW5ld19wYWdlKTsKKwl9CisKKwlmb3IgKGkgPSAw OyBpIDwgUFRSU19QRVJfUEdEICYmIGFkZHJlc3MgPCBtbS0+dGFza19zaXplOyBpKyspIHsKKwkJ aW50IHJldDsKKwkJcmV0ID0gbWlncmF0ZV9wYWdlX3RhYmxlc19wZ2QocGdkX29mZnNldChtbSwg YWRkcmVzcyksIG1tLAorCQkJCQkgICAgICAmYWRkcmVzcywgc291cmNlLAorCQkJCQkgICAgICBn ZXRfbmV3X3BhZ2UsIHByaXZhdGUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisK KwkJcGFnZXNfbm90X21pZ3JhdGVkICs9IHJldDsKKwl9CisKKwkvKiBmbHVzaCB0aGUgdGxicyBp ZiBuZWNlc3NhcnkuICovCisJbWF5YmVfZmx1c2hfdGxiX21tKG1tKTsKKwlyZXR1cm4gcGFnZXNf bm90X21pZ3JhdGVkOworfQpkaWZmIC11cndOYkIgMi42LjIzL21tL21yZW1hcC5jIDIuNi4yM2Ev bW0vbXJlbWFwLmMKLS0tIDIuNi4yMy9tbS9tcmVtYXAuYwkyMDA3LTEwLTA5IDEzOjMxOjM4LjAw MDAwMDAwMCAtMDcwMAorKysgMi42LjIzYS9tbS9tcmVtYXAuYwkyMDA3LTEwLTMwIDA2OjU3OjQ5 LjAwMDAwMDAwMCAtMDcwMApAQCAtOTgsNiArOTgsNyBAQAogCW5ld19wdGwgPSBwdGVfbG9ja3B0 cihtbSwgbmV3X3BtZCk7CiAJaWYgKG5ld19wdGwgIT0gb2xkX3B0bCkKIAkJc3Bpbl9sb2NrX25l c3RlZChuZXdfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJZGVsaW1ib19wdGUoJm5ld19w dGUsICZuZXdfcHRsLCAmbmV3X3BtZCwgbW0sIG5ld19hZGRyKTsKIAlhcmNoX2VudGVyX2xhenlf bW11X21vZGUoKTsKIAogCWZvciAoOyBvbGRfYWRkciA8IG9sZF9lbmQ7IG9sZF9wdGUrKywgb2xk X2FkZHIgKz0gUEFHRV9TSVpFLApkaWZmIC11cndOYkIgMi42LjIzL21tL3JtYXAuYyAyLjYuMjNh L21tL3JtYXAuYwotLS0gMi42LjIzL21tL3JtYXAuYwkyMDA3LTEwLTA5IDEzOjMxOjM4LjAwMDAw MDAwMCAtMDcwMAorKysgMi42LjIzYS9tbS9ybWFwLmMJMjAwNy0xMC0yOSAwOTo0NjoyNS4wMDAw MDAwMDAgLTA3MDAKQEAgLTI1NCw2ICsyNTQsNyBAQAogCiAJcHRsID0gcHRlX2xvY2twdHIobW0s IHBtZCk7CiAJc3Bpbl9sb2NrKHB0bCk7CisJZGVsaW1ib19wdGUoJnB0ZSwgJnB0bCwgJnBtZCwg bW0sIGFkZHJlc3MpOwogCWlmIChwdGVfcHJlc2VudCgqcHRlKSAmJiBwYWdlX3RvX3BmbihwYWdl KSA9PSBwdGVfcGZuKCpwdGUpKSB7CiAJCSpwdGxwID0gcHRsOwogCQlyZXR1cm4gcHRlOwo= ------=_Part_25540_26835637.1199462557642-- -- 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