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 l9PFGLgO009185 for ; Thu, 25 Oct 2007 16:16:22 +0100 Received: from nf-out-0910.google.com (nfhf5.prod.google.com [10.48.233.5]) by zps75.corp.google.com with ESMTP id l9PFGJUV026750 for ; Thu, 25 Oct 2007 08:16:20 -0700 Received: by nf-out-0910.google.com with SMTP id f5so413459nfh for ; Thu, 25 Oct 2007 08:16:19 -0700 (PDT) Message-ID: Date: Thu, 25 Oct 2007 11:16:19 -0400 From: "Ross Biro" Subject: RFC/POC Make Page Tables Relocatable MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_4834_31567726.1193325379283" Sender: owner-linux-mm@kvack.org Return-Path: To: linux-mm@kvack.org List-ID: ------=_Part_4834_31567726.1193325379283 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline [ The attached patch is Proof of Concept (POC) code only. It only works on x86_64, it only supports the slab allocator, it only relocates the lowest level of page tables, it's less efficient that it should be, and I'm convinced the locking is deficient. It does work well enough to play around with though. The patch is a unified diff against a clean 2.6.23.] I'd like to propose 4 somewhat interdependent code changes. 1) Add a separate meta-data allocation to the slab and slub allocator and allocate full pages through kmem_cache_alloc instead of get_page. The primary motivation of this is that we could shrink struct page by using kmem_cache_alloc to allocate whole pages and put the supported data in the meta_data area instead of struct page. The downside is that we might end up using more memory because of alignment issues. I believe we can keep the code as efficient as the current code by allocating many pages at once with known alignment and locating the meta data in the first few pages. Then locating the meta data for a page by page_address & mask + (page_address >> foo) & mask * meta_data_size + offset. Which should be just as fast as the current calculation. This is different than the proof of concept implementation. I also believe this would reduce kernel memory fragmentation. 2) Add support for relocating memory allocated via kmem_cache_alloc. When a cache is created, optional relocation information can be provided. If a relocation function is provided, caches can be defragmented and overall memory consumption can be reduced. 3) Create a handle struct for holding references to memory that might be moved out from under you. This is one of those things that looks really good on paper, but in practice isn't very useful. While I'm sure there are a few case in /syfs and /proc where handles could be put to good use, in general the overhead involved does not justify their use. I worry that they could become a fad and that people will start using them when they should not be used. The reason for including them is that they are really good for setting up synthetic tests for relocating memory. and finally the real reason for doing all of the above. 4) Modify pte_alloc/free and friends to use kmem_cache_alloc and make page tables relocatable. I believe this would go a long way towards keeping kernel memory from fragmenting. The biggest down side is the number of tlb flushes involved. The POC code uses RCU to free the old copies of the page tables, which should reduce the flushes. However, it blindly flushes the tlbs on all of the cpus, when it really only needs to flush the tlb on any cpu using the mm in question. I believe that by only flushing the tlbs on cpus actually using the mm in question, we can reduce the flushes to an acceptable level. One alternative is to create an RCU class for tlb flushes, so that the old table only gets freed after all the cpus have flushed their tlbs. I believe that the above opens the doors to shrinking struct page and greatly reducing kernel memory fragmentation with the only real downside being an increase in code complexity and a possible increase in memory usage if we are not careful. I'm willing to code all of this, but I'd like to get others opinions on what's appropriate and what's already being done. With the exception of tlb flushes and meta data location, I believe the POC code demonstrates how I intend to solve most of the problems that will be encountered. One thing I am worried about is the performance impact of the changes and I would like pointers to any micro benchmarks that might be relevant. Ross ------=_Part_4834_31567726.1193325379283 Content-Type: application/octet-stream; name=pte-relocate-poc.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_f87dwhxg Content-Disposition: attachment; filename=pte-relocate-poc.patch ZGlmZiAtLXVuaWRpcmVjdGlvbmFsLW5ldy1maWxlIC14Jyp+JyAteCcuKicgLXVyIGxpbnV4LTIu Ni4yMy9Eb2N1bWVudGF0aW9uL3ZtL2xvY2tpbmcgbHNyYy9wcm9ka2VybmVsLzIuNi4yMy9Eb2N1 bWVudGF0aW9uL3ZtL2xvY2tpbmcKLS0tIGxpbnV4LTIuNi4yMy9Eb2N1bWVudGF0aW9uL3ZtL2xv Y2tpbmcJMjAwNy0xMC0wOSAxMzozMTozOC4wMDAwMDAwMDAgLTA3MDAKKysrIGxzcmMvcHJvZGtl cm5lbC8yLjYuMjMvRG9jdW1lbnRhdGlvbi92bS9sb2NraW5nCTIwMDctMTAtMjQgMDc6MDg6NTIu MDAwMDAwMDAwIC0wNzAwCkBAIC04Myw2ICs4MywxMCBAQAogdm10cnVuY2F0ZSkgZG9lcyBub3Qg bG9zZSBzZW5kaW5nIGlwaSdzIHRvIGNsb25lZCB0aHJlYWRzIHRoYXQgbWlnaHQgCiBiZSBzcGF3 bmVkIHVuZGVybmVhdGggaXQgYW5kIGdvIHRvIHVzZXIgbW9kZSB0byBkcmFnIGluIHB0ZSdzIGlu dG8gdGxicy4KIAorV2l0aCB0aGUgbmV3IHBhZ2UgdGFibGUgcmVsb2NhdGlvbiBjb2RlLCB3aGVu ZXZlciB0aGUgcGFnZV90YWJsZV9sb2NrCitpcyBncmFiYmVkLCB0aGUgcGFnZSB0YWJsZXMgbXVz dCBiZSByZXdhbGtlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUKK3RhYmxlIHlvdSBhcmUgbG9va2lu ZyBhdCBoYXMgbm90IGJlZW4gbW92ZWQgb3V0IGZyb20gdW5kZXIgeW91LgorCiBzd2FwX2xvY2sK IC0tLS0tLS0tLS0tLS0tCiBUaGUgc3dhcCBkZXZpY2VzIGFyZSBjaGFpbmVkIGluIHByaW9yaXR5 IG9yZGVyIGZyb20gdGhlICJzd2FwX2xpc3QiIGhlYWRlci4gCmRpZmYgLS11bmlkaXJlY3Rpb25h bC1uZXctZmlsZSAteCcqficgLXgnLionIC11ciBsaW51eC0yLjYuMjMvYXJjaC9pMzg2L21tL2h1 Z2V0bGJwYWdlLmMgbHNyYy9wcm9ka2VybmVsLzIuNi4yMy9hcmNoL2kzODYvbW0vaHVnZXRsYnBh Z2UuYwotLS0gbGludXgtMi42LjIzL2FyY2gvaTM4Ni9tbS9odWdldGxicGFnZS5jCTIwMDctMTAt MDkgMTM6MzE6MzguMDAwMDAwMDAwIC0wNzAwCisrKyBsc3JjL3Byb2RrZXJuZWwvMi42LjIzL2Fy Y2gvaTM4Ni9tbS9odWdldGxicGFnZS5jCTIwMDctMTAtMjQgMDc6MDg6NTIuMDAwMDAwMDAwIC0w NzAwCkBAIC04Nyw2ICs4Nyw4IEBACiAJCWdvdG8gb3V0OwogCiAJc3Bpbl9sb2NrKCZtbS0+cGFn ZV90YWJsZV9sb2NrKTsKKwlwdWQgPSB3YWxrX3BhZ2VfdGFibGVfcHVkKG1tLCBhZGRyKTsKKwlC VUdfT04oIXB1ZCk7CiAJaWYgKHB1ZF9ub25lKCpwdWQpKQogCQlwdWRfcG9wdWxhdGUobW0sIHB1 ZCwgKHVuc2lnbmVkIGxvbmcpIHNwdGUgJiBQQUdFX01BU0spOwogCWVsc2UKZGlmZiAtLXVuaWRp cmVjdGlvbmFsLW5ldy1maWxlIC14Jyp+JyAteCcuKicgLXVyIGxpbnV4LTIuNi4yMy9hcmNoL3g4 Nl82NC9rZXJuZWwvc21wLmMgbHNyYy9wcm9ka2VybmVsLzIuNi4yMy9hcmNoL3g4Nl82NC9rZXJu ZWwvc21wLmMKLS0tIGxpbnV4LTIuNi4yMy9hcmNoL3g4Nl82NC9rZXJuZWwvc21wLmMJMjAwNy0x MC0wOSAxMzozMTozOC4wMDAwMDAwMDAgLTA3MDAKKysrIGxzcmMvcHJvZGtlcm5lbC8yLjYuMjMv YXJjaC94ODZfNjQva2VybmVsL3NtcC5jCTIwMDctMTAtMjQgMDc6MDg6NTIuMDAwMDAwMDAwIC0w NzAwCkBAIC0yMzMsNiArMjMzLDggQEAKIAljcHVfbWFzayA9IG1tLT5jcHVfdm1fbWFzazsKIAlj cHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7CiAKKwltbS0+bmVlZF9mbHVz aCA9IDA7CisKIAlpZiAoY3VycmVudC0+YWN0aXZlX21tID09IG1tKSB7CiAJCWlmIChjdXJyZW50 LT5tbSkKIAkJCWxvY2FsX2ZsdXNoX3RsYigpOwpkaWZmIC0tdW5pZGlyZWN0aW9uYWwtbmV3LWZp bGUgLXgnKn4nIC14Jy4qJyAtdXIgbGludXgtMi42LjIzL2luY2x1ZGUvYXNtLXg4Nl82NC9wZ2Fs bG9jLmggbHNyYy9wcm9ka2VybmVsLzIuNi4yMy9pbmNsdWRlL2FzbS14ODZfNjQvcGdhbGxvYy5o Ci0tLSBsaW51eC0yLjYuMjMvaW5jbHVkZS9hc20teDg2XzY0L3BnYWxsb2MuaAkyMDA3LTEwLTA5 IDEzOjMxOjM4LjAwMDAwMDAwMCAtMDcwMAorKysgbHNyYy9wcm9ka2VybmVsLzIuNi4yMy9pbmNs dWRlL2FzbS14ODZfNjQvcGdhbGxvYy5oCTIwMDctMTAtMjQgMDc6MDg6NTIuMDAwMDAwMDAwIC0w NzAwCkBAIC01LDYgKzUsMTYgQEAKICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVk ZSA8bGludXgvbW0uaD4KIAorc3RydWN0IHBhZ2VfdGFibGVfbWV0YWRhdGEgeworCXN0cnVjdCBy Y3VfaGVhZCBoZWFkOworCXZvaWQgKm9iajsKKwlzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwOwor CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBs b25nIGNzdW07CisJc3BpbmxvY2tfdCBtZF9sb2NrOworfTsKKwogI2RlZmluZSBwbWRfcG9wdWxh dGVfa2VybmVsKG1tLCBwbWQsIHB0ZSkgXAogCQlzZXRfcG1kKHBtZCwgX19wbWQoX1BBR0VfVEFC TEUgfCBfX3BhKHB0ZSkpKQogI2RlZmluZSBwdWRfcG9wdWxhdGUobW0sIHB1ZCwgcG1kKSBcCkBA IC04NCw2ICs5NCw4IEBACiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBnZCk7CiB9CiAKK2V4 dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqcHRlX2NhY2hlOworCiBzdGF0aWMgaW5saW5lIHB0ZV90 ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9u ZyBhZGRyZXNzKQogewogCXJldHVybiAocHRlX3QgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5F THxfX0dGUF9SRVBFQVQpOwpAQCAtOTEsOSArMTAzLDI4IEBACiAKIHN0YXRpYyBpbmxpbmUgc3Ry dWN0IHBhZ2UgKnB0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxv bmcgYWRkcmVzcykKIHsKKyNpZiAwCiAJdm9pZCAqcCA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdl KEdGUF9LRVJORUx8X19HRlBfUkVQRUFUKTsKIAlpZiAoIXApCiAJCXJldHVybiBOVUxMOworI2Vs c2UKKwl2b2lkICpwOworCXN0cnVjdCBwYWdlX3RhYmxlX21ldGFkYXRhICptZDsKKworCXAgPSBr bWVtX2NhY2hlX2FsbG9jKHB0ZV9jYWNoZSwgR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQpOworCWlm ICghcCkKKwkJcmV0dXJuIE5VTEw7CisJY2xlYXJfcGFnZShwKTsKKwltZCA9IChzdHJ1Y3QgcGFn ZV90YWJsZV9tZXRhZGF0YSAqKWttZW1fY2FjaGVfZ2V0X21ldGFkYXRhKHB0ZV9jYWNoZSwgcCk7 CisJbWQtPmFkZHIgPSBhZGRyZXNzOworCW1kLT5tbSA9IG1tOworCW1kLT5jc3VtID0gKHVuc2ln bmVkIGxvbmcpbW0gXiBhZGRyZXNzOworCXNwaW5fbG9ja19pbml0KCZtZC0+bWRfbG9jayk7CisK KwlhdG9taWNfaW5jKCZtbS0+bW1fY291bnQpOworCQorI2VuZGlmCisKIAlyZXR1cm4gdmlydF90 b19wYWdlKHApOwogfQogCkBAIC0xMDMsMTUgKzEzNCw0MCBAQAogc3RhdGljIGlubGluZSB2b2lk IHB0ZV9mcmVlX2tlcm5lbChwdGVfdCAqcHRlKQogewogCUJVR19PTigodW5zaWduZWQgbG9uZylw dGUgJiAoUEFHRV9TSVpFLTEpKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcHRlKTsgCisJ ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXB0ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBw dGVfZnJlZShzdHJ1Y3QgcGFnZSAqcHRlKQogeworI2lmIDAKIAlfX2ZyZWVfcGFnZShwdGUpOwot fSAKKyNlbHNlCisJc3RydWN0IHBhZ2VfdGFibGVfbWV0YWRhdGEgKm1kOworCXN0cnVjdCBtbV9z dHJ1Y3QgKm1tOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwltZCA9IChzdHJ1Y3QgcGFnZV90 YWJsZV9tZXRhZGF0YSAqKWttZW1fY2FjaGVfZ2V0X21ldGFkYXRhKHB0ZV9jYWNoZSwgcGFnZV9h ZGRyZXNzKHB0ZSkpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1kLT5tZF9sb2NrLCBmbGFncyk7 CisKKwlCVUdfT04oCW1kLT5jc3VtICE9ICgodW5zaWduZWQgbG9uZykobWQtPm1tKSBeIChtZC0+ YWRkcikpKTsKKworCW1tID0gbWQtPm1tOworCW1kLT5tbSA9IE5VTEw7CisJbWQtPmFkZHIgPSAw OworCW1kLT5jc3VtID0gMDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kLT5tZF9sb2Nr LCBmbGFncyk7CisKKwlpZiAobW0pCisJICAgbW1kcm9wKG1tKTsgCisKKwlrbWVtX2NhY2hlX2Zy ZWUocHRlX2NhY2hlLCBwYWdlX2FkZHJlc3MocHRlKSk7CisKKyNlbmRpZgorfQogCi0jZGVmaW5l IF9fcHRlX2ZyZWVfdGxiKHRsYixwdGUpIHRsYl9yZW1vdmVfcGFnZSgodGxiKSwocHRlKSkKKyNk ZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLHB0ZSkgcHRlX2ZyZWUocHRlKQogCiAjZGVmaW5lIF9f cG1kX2ZyZWVfdGxiKHRsYix4KSAgIHRsYl9yZW1vdmVfcGFnZSgodGxiKSx2aXJ0X3RvX3BhZ2Uo eCkpCiAjZGVmaW5lIF9fcHVkX2ZyZWVfdGxiKHRsYix4KSAgIHRsYl9yZW1vdmVfcGFnZSgodGxi KSx2aXJ0X3RvX3BhZ2UoeCkpCmRpZmYgLS11bmlkaXJlY3Rpb25hbC1uZXctZmlsZSAteCcqficg LXgnLionIC11ciBsaW51eC0yLjYuMjMvaW5jbHVkZS9hc20teDg2XzY0L3BndGFibGUuaCBsc3Jj L3Byb2RrZXJuZWwvMi42LjIzL2luY2x1ZGUvYXNtLXg4Nl82NC9wZ3RhYmxlLmgKLS0tIGxpbnV4 LTIuNi4yMy9pbmNsdWRlL2FzbS14ODZfNjQvcGd0YWJsZS5oCTIwMDctMTAtMDkgMTM6MzE6Mzgu MDAwMDAwMDAwIC0wNzAwCisrKyBsc3JjL3Byb2RrZXJuZWwvMi42LjIzL2luY2x1ZGUvYXNtLXg4 Nl82NC9wZ3RhYmxlLmgJMjAwNy0xMC0yNCAwNzowODo1Mi4wMDAwMDAwMDAgLTA3MDAKQEAgLTEy Miw2ICsxMjIsNyBAQAogCiAjZGVmaW5lIHB0ZV9wZ3Byb3QoYSkJKF9fcGdwcm90KChhKS5wdGUg JiB+UEhZU0lDQUxfUEFHRV9NQVNLKSkKIAorCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwog CiAjZGVmaW5lIFBNRF9TSVpFCShfQUMoMSxVTCkgPDwgUE1EX1NISUZUKQpAQCAtNDIxLDYgKzQy Miw1MSBAQAogI2RlZmluZQlrY19vZmZzZXRfdG9fdmFkZHIobykgXAogICAgKCgobykgJiAoMVVM IDw8IChfX1ZJUlRVQUxfTUFTS19TSElGVC0xKSkpID8gKChvKSB8ICh+X19WSVJUVUFMX01BU0sp KSA6IChvKSkKIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CitzdGF0aWMgaW5saW5lIHBnZF90 ICp3YWxrX3BhZ2VfdGFibGVfcGdkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgIHVuc2ln bmVkIGxvbmcgYWRkcikgeworCXJldHVybiBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKTsKK30KKworc3Rh dGljIGlubGluZSBwdWRfdCAqd2Fsa19wYWdlX3RhYmxlX3B1ZChzdHJ1Y3QgbW1fc3RydWN0ICpt bSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkcikgeworCXBnZF90ICpwZ2Q7CisJcGdkID0gd2Fs a19wYWdlX3RhYmxlX3BnZChtbSwgYWRkcik7CisJQlVHX09OKCFwZ2QpOworCXJldHVybiBwdWRf b2Zmc2V0KHBnZCwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgcG1kX3QgKndhbGtfcGFnZV90 YWJsZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJCSB1bnNpZ25lZCBsb25nIGFkZHIp IHsKKwlwdWRfdCAqcHVkOworCXB1ZCA9IHdhbGtfcGFnZV90YWJsZV9wdWQobW0sIGFkZHIpOwor CS8vQlVHX09OKCFwdWQpOworCWlmICghcHVkKSB7CisJCXByaW50ayAoS0VSTl9ERUJVRyAid2Fs a19wYWdlX3RhYmxlX3BtZDogcHVkIGlzIE5VTExcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisK KwlyZXR1cm4gIHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSBwdGVf dCAqd2Fsa19wYWdlX3RhYmxlX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJIHVuc2ln bmVkIGxvbmcgYWRkcikgeworCXBtZF90ICpwbWQ7CisJcG1kID0gd2Fsa19wYWdlX3RhYmxlX3Bt ZChtbSwgYWRkcik7CisJQlVHX09OKCFwbWQpOworCXJldHVybiBwdGVfb2Zmc2V0X21hcChwbWQs IGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHBtZF90ICp3YWxrX3BhZ2VfdGFibGVfa2VybmVs X3BtZCh1bnNpZ25lZCBsb25nIGFkZHIpIHsKKwlyZXR1cm4gd2Fsa19wYWdlX3RhYmxlX3BtZCgm aW5pdF9tbSwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgKndhbGtfcGFnZV90YWJs ZV9odWdlX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJICAgICAgdW5zaWduZWQgbG9u ZyBhZGRyKSB7CisJcmV0dXJuIChwdGVfdCAqKXdhbGtfcGFnZV90YWJsZV9wbWQobW0sIGFkZHIp OworfQorCisKICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9URVNUX0FORF9DTEVBUl9ZT1VORwog I2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0dFVF9BTkRfQ0xFQVIKICNkZWZpbmUgX19IQVZFX0FS Q0hfUFRFUF9HRVRfQU5EX0NMRUFSX0ZVTEwKZGlmZiAtLXVuaWRpcmVjdGlvbmFsLW5ldy1maWxl IC14Jyp+JyAteCcuKicgLXVyIGxpbnV4LTIuNi4yMy9pbmNsdWRlL2FzbS14ODZfNjQvdGxiZmx1 c2guaCBsc3JjL3Byb2RrZXJuZWwvMi42LjIzL2luY2x1ZGUvYXNtLXg4Nl82NC90bGJmbHVzaC5o Ci0tLSBsaW51eC0yLjYuMjMvaW5jbHVkZS9hc20teDg2XzY0L3RsYmZsdXNoLmgJMjAwNy0xMC0w OSAxMzozMTozOC4wMDAwMDAwMDAgLTA3MDAKKysrIGxzcmMvcHJvZGtlcm5lbC8yLjYuMjMvaW5j bHVkZS9hc20teDg2XzY0L3RsYmZsdXNoLmgJMjAwNy0xMC0yNCAwNzoxMDowMC4wMDAwMDAwMDAg LTA3MDAKQEAgLTQ2LDggKzQ2LDkgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9t bShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQlpZiAobW0gPT0gY3VycmVudC0+YWN0aXZlX21t KQorCWlmIChtbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pIHsKIAkJX19mbHVzaF90bGIoKTsKKwl9 CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKnZtYSwKQEAgLTYwLDggKzYxLDEwIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hf dGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXVuc2lnbmVkIGxvbmcgc3Rh cnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCWlmICh2bWEtPnZtX21tID09IGN1cnJlbnQtPmFj dGl2ZV9tbSkKKwlpZiAodm1hLT52bV9tbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pIHsKKwkJdm1h LT52bV9tbS0+bmVlZF9mbHVzaCA9IDA7CiAJCV9fZmx1c2hfdGxiKCk7CisJfQogfQogCiAjZWxz ZQpAQCAtMTA2LDQgKzEwOSwxMSBAQAogCSAgIGJ5IHRoZSBub3JtYWwgVExCIGZsdXNoaW5nIGFs Z29yaXRobXMuICovCiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXliZV9mbHVzaF90bGJfbW0o c3RydWN0IG1tX3N0cnVjdCAqbW0pIHsKKwlpZiAobW0tPm5lZWRfZmx1c2gpIHsKKwkJbW0tPm5l ZWRfZmx1c2ggPSAwOworCQlmbHVzaF90bGJfYWxsKCk7CisJfQorfQorCiAjZW5kaWYgLyogX1g4 NjY0X1RMQkZMVVNIX0ggKi8KZGlmZiAtLXVuaWRpcmVjdGlvbmFsLW5ldy1maWxlIC14Jyp+JyAt eCcuKicgLXVyIGxpbnV4LTIuNi4yMy9pbmNsdWRlL2xpbnV4L2hhbmRsZS5oIGxzcmMvcHJvZGtl cm5lbC8yLjYuMjMvaW5jbHVkZS9saW51eC9oYW5kbGUuaAotLS0gbGludXgtMi42LjIzL2luY2x1 ZGUvbGludXgvaGFuZGxlLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysr IGxzcmMvcHJvZGtlcm5lbC8yLjYuMjMvaW5jbHVkZS9saW51eC9oYW5kbGUuaAkyMDA3LTEwLTI0 IDA4OjA0OjQ2LjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDEyNyBAQAorLyogbGludXgvaGFu ZGxlLmgKKyAqIFdyaXR0ZW4gYnkgUm9zcyBCaXJvLCAyMDA3IChyb3NzYkBnb29nbGUuY29tKQor ICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBHb29nbGUgSW5jLgorICogU2VlIENvcHlpbmcgRmls ZS4KKyAqCisgKi8KKworI2lmbmRlZiBfTElOVVhfSEFORExFX0gKKyNkZWZpbmUgX0xJTlVYX0hB TkRMRV9ICisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3Ns YWIuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKK3N0cnVjdCBraGFuZGxlX3RhcmdldCB7 CisJc3RydWN0IGtoYW5kbGUgKmhhbmRsZTsKKwlhdG9taWNfdCBkZXJlZl9jb3VudDsKKwlhdG9t aWNfdCBoYW5kbGVfcmVmX2NvdW50OworCWF0b21pY190IGdlbmVyYXRpb25fY291bnQ7Cit9Owor CitzdHJ1Y3Qga2hhbmRsZSB7CisJc3RydWN0IGtoYW5kbGVfdGFyZ2V0ICp0YXJnZXQ7CisJc3Bp bmxvY2tfdCByZWxvY2F0aW9uX2xvY2s7Cit9OworCitpbnQgcmVsb2NhdGVfaGFuZGxlKHZvaWQg KnNvdXJjZV9vYmosIHZvaWQgKnRhcmdldF9vYmosCisJCSAgICBzdHJ1Y3Qga21lbV9jYWNoZSAq Y2FjaGVwLAorCQkgICAgdW5zaWduZWQgbG9uZyBoYW5kbGVfdGFyZ2V0X29mZnNldCwKKwkJICAg IHVuc2lnbmVkIGxvbmcgb2JqZWN0X3NpemUpOworCitleHRlcm4gc3RydWN0IGttZW1fY2FjaGUg KmhhbmRsZV9jYWNoZTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qga2hhbmRsZSAqYWxsb2NfaGFu ZGxlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZmxh Z3MpIHsKKwl2b2lkICpvYmogPSBrbWVtX2NhY2hlX2FsbG9jKGNhY2hlcCwgZmxhZ3MpOworCXN0 cnVjdCBraGFuZGxlICpoYW5kbGU7CisJaWYgKG9iaiA9PSBOVUxMKSB7CisJCXJldHVybiBOVUxM OworCX0KKworCWhhbmRsZSA9IGttZW1fY2FjaGVfYWxsb2MoaGFuZGxlX2NhY2hlLCBmbGFncyk7 CisJaWYgKGhhbmRsZSA9PSBOVUxMKSB7CisJCWttZW1fY2FjaGVfZnJlZShjYWNoZXAsIG9iaik7 CisJCXJldHVybiBOVUxMOworCX0KKworCXNwaW5fbG9ja19pbml0KCZoYW5kbGUtPnJlbG9jYXRp b25fbG9jayk7CisJaGFuZGxlLT50YXJnZXQgPSBvYmogKyBrbWVtX2NhY2hlcF9yZWxvY2F0b3Jf cHJpdmF0ZShjYWNoZXApOworCisJLyogVGhlIGNvbnN0cnVjdG9yIG11c3QgbWFrZSBzdXJlIHRo ZXNlIGFyZSBzZXQgdXAKKwkgKiBwcm9wZXJseS4KKwkgKi8KKwlhdG9taWNfaW5jKCZoYW5kbGUt PnRhcmdldC0+Z2VuZXJhdGlvbl9jb3VudCk7CisJYXRvbWljX2RlYygmaGFuZGxlLT50YXJnZXQt PmRlcmVmX2NvdW50KTsKKwlhdG9taWNfaW5jKCZoYW5kbGUtPnRhcmdldC0+aGFuZGxlX3JlZl9j b3VudCk7CisKKwloYW5kbGUtPnRhcmdldC0+aGFuZGxlID0gaGFuZGxlOworCisJcHJpbnRrICgi YWxsb2NfaGFuZGxlIHRhcmdldC0+ZGVyZWZfY291bnQ9JWRcbiIsCisJCWF0b21pY19yZWFkKCZo YW5kbGUtPnRhcmdldC0+ZGVyZWZfY291bnQpKTsKKworCXJldHVybiBoYW5kbGU7Cit9CisKKy8q IEFueSBjb25zdHJ1Y3RvciBmb3IgYSBjYWNoZSB1c2luZyBoYW5kbGVzICptdXN0KiBoYXZlIGEg Y29uc3RydWN0b3IgYW5kCisgKiBtdXN0IGNhbGwgdGhpcyBjb25zdHJ1dG9yLiAgVGhpcyBtZWFu cyB0aGF0IFNMQUJfUE9JU09OIHdpbGwgbm90CisgKiB3b3JrIHdpdGggYW55IGhhbmRsZXMuCisg Ki8KK3ZvaWQgZ2VuZXJpY19oYW5kbGVfY3Rvcih2b2lkICosIHN0cnVjdCBrbWVtX2NhY2hlICos IHVuc2lnbmVkIGxvbmcpOworCisjZGVmaW5lIGhhbmRsZV9jYWNoZV9jcmVhdGUobmFtZSwgZmxh Z3MsIHR5cGUsIG1lbWJlciwgc2l6ZSwgYWxpZ24sIGN0b3IpXAorICAgIGttZW1fY2FjaGVfY3Jl YXRlX3JlbG9jYXRhYmxlKG5hbWUsIHNpemUsIGFsaWduLCBmbGFncywJCVwKKwljdG9yPzpnZW5l cmljX2hhbmRsZV9jdG9yLCByZWxvY2F0ZV9oYW5kbGUsCSAJCVwKKwlvZmZzZXRvZih0eXBlLCBt ZW1iZXIpLCAwKQorCisvKioKKyAqIGRlcmVmX2hhbmRsZSBnZXQgdGhlIHBvaW50ZXIgZm9yIHRo aXMgaGFuZGxlLgorICogQGhhbmRsZToJYSBwdHIgdG8gdGhlIHN0cnVjdCBraGFuZGxlLgorICog QHR5cGU6CXRoZSB0eXBlIG9mIHRoZSBzdHJ1Y3QgdGhpcyBwb2ludHMgdG8uCisgKiBAbWVtYmVy Ogl0aGUgbmFtZSBvZiB0aGUga2hhbmRsZV90YXJnZXQgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKi8K KyNkZWZpbmUgZGVyZWZfaGFuZGxlKGhhbmRsZSwgdHlwZSwgbWVtYmVyKSBcCisgICAgKHR5cGUg KilfZGVyZWZfaGFuZGxlKGhhbmRsZSwgb2Zmc2V0b2YodHlwZSwgbWVtYmVyKSkKKworc3RhdGlj IGlubGluZSB2b2lkICpfZGVyZWZfaGFuZGxlKHN0cnVjdCBraGFuZGxlICpoYW5kbGUsCisJCQkJ ICB1bnNpZ25lZCBsb25nIG9mZnNldCkgeworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwor CXZvaWQgKm9iajsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGFuZGxlLT5yZWxvY2F0aW9uX2xvY2ss IGZsYWdzKTsKKwlvYmogPSBoYW5kbGUtPnRhcmdldCAtIG9mZnNldDsKKwlhdG9taWNfaW5jKCZo YW5kbGUtPnRhcmdldC0+ZGVyZWZfY291bnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhh bmRsZS0+cmVsb2NhdGlvbl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIG9iajsKK30KKworI2RlZmlu ZSBwdXRfaGFuZGxlX3JlZihoYW5kbGUpIGRvIHsJCQkJCVwKKyAgICAgICAgYXRvbWljX2RlYygm aGFuZGxlLT50YXJnZXQtPmRlcmVmX2NvdW50KTsJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5l IGdldF9oYW5kbGUoaGFuZGxlKSBkbyB7CQkJCQkJXAorCWF0b21pY19pbmMoJmhhbmRsZS0+dGFy Z2V0LT5oYW5kbGVfcmVmX2NvdW50KTsJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHB1dF9o YW5kbGUoaCwgdHlwZSwgbWVtYmVyLCBjYWNoZXApIGRvIHsJCQlcCisJaWYgKGF0b21pY19kZWNf YW5kX3Rlc3QoJmgtPnRhcmdldC0+aGFuZGxlX3JlZl9jb3VudCkpIHsJXAorCQl1bnNpZ25lZCBs b25nIGZsYWdzOwkJCQkJXAorCQl0eXBlICpvYmo7CQkJCQkJXAorCQlzcGluX2xvY2tfaXJxc2F2 ZSgmaC0+cmVsb2NhdGlvbl9sb2NrLCBmbGFncyk7CVwKKwkJb2JqID0gY29udGFpbmVyX29mKGgt PnRhcmdldCwgdHlwZSwgbWVtYmVyKTsJXAorICAgICAgICAgICAgICAgIGgtPnRhcmdldC0+aGFu ZGxlID0gTlVMTDsJCQkJXAorCQl3bWIoKTsJCQkJCQkJXAorCQlhdG9taWNfaW5jKCZoLT50YXJn ZXQtPmRlcmVmX2NvdW50KTsJCVwKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+cmVsb2Nh dGlvbl9sb2NrLCBmbGFncyk7XAorCQlrbWVtX2NhY2hlX2ZyZWUoY2FjaGVwLCBvYmopOwkJCQlc CisJCWttZW1fY2FjaGVfZnJlZShoYW5kbGVfY2FjaGUsIGgpOwkJCVwKKwkJaCA9IE5VTEw7CQkJ CQkJXAorCX0gCQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisKKworCisKKworI2VuZGlmIC8qIF9M SU5VWF9IQU5ETEVfSCAqLwpkaWZmIC0tdW5pZGlyZWN0aW9uYWwtbmV3LWZpbGUgLXgnKn4nIC14 Jy4qJyAtdXIgbGludXgtMi42LjIzL2luY2x1ZGUvbGludXgvbW0uaCBsc3JjL3Byb2RrZXJuZWwv Mi42LjIzL2luY2x1ZGUvbGludXgvbW0uaAotLS0gbGludXgtMi42LjIzL2luY2x1ZGUvbGludXgv bW0uaAkyMDA3LTEwLTA5IDEzOjMxOjM4LjAwMDAwMDAwMCAtMDcwMAorKysgbHNyYy9wcm9ka2Vy bmVsLzIuNi4yMy9pbmNsdWRlL2xpbnV4L21tLmgJMjAwNy0xMC0yNCAwNzowODo1Mi4wMDAwMDAw MDAgLTA3MDAKQEAgLTkzNSw2ICs5MzUsNyBAQAogCXB0ZV90ICpfX3B0ZSA9IHB0ZV9vZmZzZXRf bWFwKHBtZCwgYWRkcmVzcyk7CVwKIAkqKHB0bHApID0gX19wdGw7CQkJCVwKIAlzcGluX2xvY2so X19wdGwpOwkJCQlcCisJX19wdGUgPSB3YWxrX3BhZ2VfdGFibGVfcHRlKG1tLCBhZGRyZXNzKTsJ XAogCV9fcHRlOwkJCQkJCVwKIH0pCiAKZGlmZiAtLXVuaWRpcmVjdGlvbmFsLW5ldy1maWxlIC14 Jyp+JyAteCcuKicgLXVyIGxpbnV4LTIuNi4yMy9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGxzcmMv cHJvZGtlcm5lbC8yLjYuMjMvaW5jbHVkZS9saW51eC9tbXpvbmUuaAotLS0gbGludXgtMi42LjIz L2luY2x1ZGUvbGludXgvbW16b25lLmgJMjAwNy0xMC0wOSAxMzozMTozOC4wMDAwMDAwMDAgLTA3 MDAKKysrIGxzcmMvcHJvZGtlcm5lbC8yLjYuMjMvaW5jbHVkZS9saW51eC9tbXpvbmUuaAkyMDA3 LTEwLTI0IDA3OjA4OjUyLjAwMDAwMDAwMCAtMDcwMApAQCAtMTgsNyArMTgsNyBAQAogCiAvKiBG cmVlIG1lbW9yeSBtYW5hZ2VtZW50IC0gem9uZWQgYnVkZHkgYWxsb2NhdG9yLiAgKi8KICNpZm5k ZWYgQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVIKLSNkZWZpbmUgTUFYX09SREVSIDExCisjZGVm aW5lIE1BWF9PUkRFUiAxNAogI2Vsc2UKICNkZWZpbmUgTUFYX09SREVSIENPTkZJR19GT1JDRV9N QVhfWk9ORU9SREVSCiAjZW5kaWYKZGlmZiAtLXVuaWRpcmVjdGlvbmFsLW5ldy1maWxlIC14Jyp+ JyAteCcuKicgLXVyIGxpbnV4LTIuNi4yMy9pbmNsdWRlL2xpbnV4L3NjaGVkLmggbHNyYy9wcm9k a2VybmVsLzIuNi4yMy9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKLS0tIGxpbnV4LTIuNi4yMy9pbmNs dWRlL2xpbnV4L3NjaGVkLmgJMjAwNy0xMC0wOSAxMzozMTozOC4wMDAwMDAwMDAgLTA3MDAKKysr IGxzcmMvcHJvZGtlcm5lbC8yLjYuMjMvaW5jbHVkZS9saW51eC9zY2hlZC5oCTIwMDctMTAtMjQg MDc6MDg6NTIuMDAwMDAwMDAwIC0wNzAwCkBAIC00MzIsNiArNDMyLDcgQEAKIAkvKiBhaW8gYml0 cyAqLwogCXJ3bG9ja190CQlpb2N0eF9saXN0X2xvY2s7CiAJc3RydWN0IGtpb2N0eAkJKmlvY3R4 X2xpc3Q7CisJaW50CQkJbmVlZF9mbHVzaDsKIH07CiAKIHN0cnVjdCBzaWdoYW5kX3N0cnVjdCB7 CmRpZmYgLS11bmlkaXJlY3Rpb25hbC1uZXctZmlsZSAteCcqficgLXgnLionIC11ciBsaW51eC0y LjYuMjMvaW5jbHVkZS9saW51eC9zbGFiLmggbHNyYy9wcm9ka2VybmVsLzIuNi4yMy9pbmNsdWRl L2xpbnV4L3NsYWIuaAotLS0gbGludXgtMi42LjIzL2luY2x1ZGUvbGludXgvc2xhYi5oCTIwMDct MTAtMDkgMTM6MzE6MzguMDAwMDAwMDAwIC0wNzAwCisrKyBsc3JjL3Byb2RrZXJuZWwvMi42LjIz L2luY2x1ZGUvbGludXgvc2xhYi5oCTIwMDctMTAtMjQgMDg6MzM6NTkuMDAwMDAwMDAwIC0wNzAw CkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIFNMQUJfREVTVFJPWV9CWV9SQ1UJMHgwMDA4MDAw MFVMCS8qIERlZmVyIGZyZWVpbmcgc2xhYnMgdG8gUkNVICovCiAjZGVmaW5lIFNMQUJfTUVNX1NQ UkVBRAkJMHgwMDEwMDAwMFVMCS8qIFNwcmVhZCBzb21lIG1lbW9yeSBvdmVyIGNwdXNldCAqLwog I2RlZmluZSBTTEFCX1RSQUNFCQkweDAwMjAwMDAwVUwJLyogVHJhY2UgYWxsb2NhdGlvbnMgYW5k IGZyZWVzICovCisjZGVmaW5lIFNMQUJfSFVHRV9QQUdFCQkweDAwNDAwMDAwVUwgICAgLyogQWx3 YXlzIHVzZSBhdCBsZWFzdCBodWdlIHBhZ2Ugc2l6ZSBwYWdlcyBmb3IgdGhpcyBzbGFiLiAqLwog CiAvKgogICogWkVST19TSVpFX1BUUiB3aWxsIGJlIHJldHVybmVkIGZvciB6ZXJvIHNpemVkIGtt YWxsb2MgcmVxdWVzdHMuCkBAIC00OSwxNSArNTAsNDIgQEAKIHZvaWQgX19pbml0IGttZW1fY2Fj aGVfaW5pdCh2b2lkKTsKIGludCBzbGFiX2lzX2F2YWlsYWJsZSh2b2lkKTsKIAotc3RydWN0IGtt ZW1fY2FjaGUgKmttZW1fY2FjaGVfY3JlYXRlKGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBzaXplX3Qs Ci0JCQl1bnNpZ25lZCBsb25nLAotCQkJdm9pZCAoKikodm9pZCAqLCBzdHJ1Y3Qga21lbV9jYWNo ZSAqLCB1bnNpZ25lZCBsb25nKSk7CitzdHJ1Y3Qga21lbV9jYWNoZSAqa21lbV9jYWNoZV9jcmVh dGVfcmVsb2NhdGFibGUoY29uc3QgY2hhciAqLCBzaXplX3QsIHNpemVfdCwKKyAgCQkJdW5zaWdu ZWQgbG9uZywKKyAgCQkJdm9pZCAoKikodm9pZCAqLCBzdHJ1Y3Qga21lbV9jYWNoZSAqLCB1bnNp Z25lZCBsb25nKSwKKwkJCWludCAoKikodm9pZCAqLCB2b2lkICosIHN0cnVjdCBrbWVtX2NhY2hl ICosCisJCQkJdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyksCisJCQl1bnNpZ25lZCBsb25n LCBzaXplX3QpOworCit1bnNpZ25lZCBsb25nIGttZW1fY2FjaGVwX3JlbG9jYXRvcl9wcml2YXRl KHN0cnVjdCBrbWVtX2NhY2hlICopOworCitzdGF0aWMgaW5saW5lCitzdHJ1Y3Qga21lbV9jYWNo ZSAqa21lbV9jYWNoZV9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsCisJCQlz aXplX3QgYWxpZ24sCisJCQl1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCSAgICAgdm9pZCAoKmN0 b3IpKHZvaWQgKiwgc3RydWN0IGttZW1fY2FjaGUgKiwgdW5zaWduZWQgbG9uZykpIHsKKwlyZXR1 cm4ga21lbV9jYWNoZV9jcmVhdGVfcmVsb2NhdGFibGUobmFtZSwgc2l6ZSwgYWxpZ24sIGZsYWdz LCBjdG9yLCBOVUxMLCAwLCAwKTsKK30KKwordm9pZCB0ZXN0X2RlZnJhZyhzdHJ1Y3Qga21lbV9j YWNoZSAqKTsKKwogdm9pZCBrbWVtX2NhY2hlX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKik7 CiBpbnQga21lbV9jYWNoZV9zaHJpbmsoc3RydWN0IGttZW1fY2FjaGUgKik7CiB2b2lkIGttZW1f Y2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqLCB2b2lkICopOwogdW5zaWduZWQgaW50IGtt ZW1fY2FjaGVfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqKTsKIGNvbnN0IGNoYXIgKmttZW1fY2Fj aGVfbmFtZShzdHJ1Y3Qga21lbV9jYWNoZSAqKTsKIGludCBrbWVtX3B0cl92YWxpZGF0ZShzdHJ1 Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBjb25zdCB2b2lkICpwdHIpOwordm9pZCBrbWVtX2NvbXB1 dGVfc3RhdHMoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKKwkJCXVuc2lnbmVkIGxvbmcgKmZ1 bGxfc2xhYnMsCisJCQl1bnNpZ25lZCBsb25nICpwYXJ0aWFsX3NsYWJzLAorCQkJdW5zaWduZWQg bG9uZyAqcGFydGlhbF9vYmpzLAorCQkJdW5zaWduZWQgbG9uZyAqZnJlZV9zbGFicywKKwkJCWNo YXIgKiplcnJvcik7Cit2b2lkICprbWVtX2NhY2hlX2dldF9tZXRhZGF0YShjb25zdCBzdHJ1Y3Qg a21lbV9jYWNoZSAqLCB2b2lkICopOworCisjZGVmaW5lIFJFTE9DQVRFX1NVQ0NFU1NfUkNVIDEK KyNkZWZpbmUgUkVMT0NBVEVfU1VDQ0VTUyAwCisjZGVmaW5lIFJFTE9DQVRFX0ZBSUxVUkUgLTEK IAogLyoKICAqIFBsZWFzZSB1c2UgdGhpcyBtYWNybyB0byBjcmVhdGUgc2xhYiBjYWNoZXMuIFNp bXBseSBzcGVjaWZ5IHRoZQpkaWZmIC0tdW5pZGlyZWN0aW9uYWwtbmV3LWZpbGUgLXgnKn4nIC14 Jy4qJyAtdXIgbGludXgtMi42LjIzL21tL01ha2VmaWxlIGxzcmMvcHJvZGtlcm5lbC8yLjYuMjMv bW0vTWFrZWZpbGUKLS0tIGxpbnV4LTIuNi4yMy9tbS9NYWtlZmlsZQkyMDA3LTEwLTA5IDEzOjMx OjM4LjAwMDAwMDAwMCAtMDcwMAorKysgbHNyYy9wcm9ka2VybmVsLzIuNi4yMy9tbS9NYWtlZmls ZQkyMDA3LTEwLTI0IDA3OjA4OjUyLjAwMDAwMDAwMCAtMDcwMApAQCAtOSw3ICs5LDcgQEAKIAog b2JqLXkJCQk6PSBib290bWVtLm8gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZp c2UubyBcCiAJCQkgICBwYWdlX2FsbG9jLm8gcGFnZS13cml0ZWJhY2subyBwZGZsdXNoLm8gXAot CQkJICAgcmVhZGFoZWFkLm8gc3dhcC5vIHRydW5jYXRlLm8gdm1zY2FuLm8gXAorCQkJICAgcmVh ZGFoZWFkLm8gc3dhcC5vIHRydW5jYXRlLm8gdm1zY2FuLm8gaGFuZGxlLm8gXAogCQkJICAgcHJp b190cmVlLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXAogCQkJICAg JChtbXUteSkKIApAQCAtMjksNCArMjksNCBAQAogb2JqLSQoQ09ORklHX01JR1JBVElPTikgKz0g bWlncmF0ZS5vCiBvYmotJChDT05GSUdfU01QKSArPSBhbGxvY3BlcmNwdS5vCiBvYmotJChDT05G SUdfUVVJQ0tMSVNUKSArPSBxdWlja2xpc3QubwotCitvYmotbSArPSBoYW5kbGVfdGVzdC5vCmRp ZmYgLS11bmlkaXJlY3Rpb25hbC1uZXctZmlsZSAteCcqficgLXgnLionIC11ciBsaW51eC0yLjYu MjMvbW0vaGFuZGxlLmMgbHNyYy9wcm9ka2VybmVsLzIuNi4yMy9tbS9oYW5kbGUuYwotLS0gbGlu dXgtMi42LjIzL21tL2hhbmRsZS5jCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAw CisrKyBsc3JjL3Byb2RrZXJuZWwvMi42LjIzL21tL2hhbmRsZS5jCTIwMDctMTAtMjQgMDc6MzQ6 NDMuMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMTI5IEBACisvKiBtbS9oYW5kbGUuYworICog V3JpdHRlbiBieSBSb3NzIEJpcm8sIDIwMDcgKHJvc3NiQGdvb2dsZS5jb20pCisgKgorICogQ29w eXJpZ2h0IChDKSAyMDA3IEdvb2dsZSBJbmMuCisgKiBTZWUgQ29weWluZyBGaWxlLgorICoKKyAq LworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaGFuZGxlLmg+ CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK3N0cnVjdCBrbWVtX2NhY2hlICpoYW5kbGVf Y2FjaGU7CisKK0VYUE9SVF9TWU1CT0xfR1BMKGhhbmRsZV9jYWNoZSk7CisKKy8qCisgKiBUaGlz IGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHJlbG9jYXRpb24uICBHdWFyZW50ZWUgd2UgaGF2ZSBpcyB0 aGF0CisgKiB0aGUgc291cmNlIGFuZCB0YXJnZXQgb2JqZWN0cyB3aWxsIG5vdCB2YW5pc2ggdW5k ZXJuZWF0aCB1cy4KKyAqIEhvd2V2ZXIsIHRoZXkgbWlnaHQgZ2V0IHJlY3ljbGVkLiAgU28gd2Ug aGF2ZSB0byBiZSBjYXJlZnVsIHRvIGdldAorICogdGhlIGhhbmRsZSBwb2ludGVyLiAgVGhlIGNh bGxlciBoYXMgYXBwcm9wcmlhdGUgbG9ja3MgdG8gbWFrZSBzdXJlCisgKiB0aGF0IHR3byBkaWZm ZXJlbnQgdGhyZWFkcyBkb24ndCB0cnkgdG8gcmVsb2NhdGUgdGhlIHNhbWUgb2JqZWN0IGF0Cisg KiB0aGUgc2FtZSB0aW1lLgorICovCitpbnQgcmVsb2NhdGVfaGFuZGxlKHZvaWQgKnNvdXJjZV9v YmosIHZvaWQgKnRhcmdldF9vYmosCisJCSAgICBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLAor CQkgICAgdW5zaWduZWQgbG9uZyBoYW5kbGVfdGFyZ2V0X29mZnNldCwKKwkJICAgIHVuc2lnbmVk IGxvbmcgb2JqZWN0X3NpemUpIHsKKwlzdHJ1Y3Qga2hhbmRsZV90YXJnZXQgKmhhbmRsZV90YXJn ZXQgPSBzb3VyY2Vfb2JqICsKKwkJCWhhbmRsZV90YXJnZXRfb2Zmc2V0OworCisJc3RydWN0IGto YW5kbGUgKmhhbmRsZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBnZW5lcmF0aW9uID0g YXRvbWljX3JlYWQoJmhhbmRsZV90YXJnZXQtPmdlbmVyYXRpb25fY291bnQpOzsKKworCisJaWYg KGF0b21pY19yZWFkKCZoYW5kbGVfdGFyZ2V0LT5kZXJlZl9jb3VudCkpIHsKKwkJcHJpbnRrIChL RVJOX0RFQlVHICJyZWxvY2F0ZV9oYW5kbGU6IGhhbmRsZSBpbiB1c2UgKCVkKS5cbiIsCisJCQlh dG9taWNfcmVhZCgmaGFuZGxlX3RhcmdldC0+ZGVyZWZfY291bnQpKTsKKwkJcHJpbnRrIChLRVJO X0RFQlVHICJoYW5kbGVfdGFyZ2V0X29mZnNldCA9ICVkXG4iLAorCQkJaGFuZGxlX3RhcmdldF9v ZmZzZXQpOworCQlyZXR1cm4gMTsKKwl9CisKKwlhdG9taWNfaW5jKCZoYW5kbGVfdGFyZ2V0LT5o YW5kbGVfcmVmX2NvdW50KTsKKwloYW5kbGUgPSBoYW5kbGVfdGFyZ2V0LT5oYW5kbGU7CisKKwkv KiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBhdG9taWNfaW5jIGNvbXBsZXRlZCwKKwkg ICBhbmQgdGhlIGF0b21pYyByZWFkIGlzIG5vdCB1c2luZyBhIGNhY2hlZCAoZXZlbiBieSB0aGUK KwkgICBjb21waWxlcikgdmFsdWUuICovCisJbWIoKTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgaGFu ZGxlIGRpZG4ndCB2YW5pc2ggdW5kZXJuZWF0aCB1cyB3aGlsZQorCSAgIHdlIHdlcmUgZ3JhYmJp bmcgaXQuICovCisJaWYgKGhhbmRsZSA9PSBOVUxMIHx8IGF0b21pY19yZWFkKCZoYW5kbGVfdGFy Z2V0LT5kZXJlZl9jb3VudCkpIHsKKwkJYXRvbWljX2RlYygmaGFuZGxlX3RhcmdldC0+aGFuZGxl X3JlZl9jb3VudCk7CisJCXByaW50ayAoS0VSTl9ERUJVRyAicmVsb2NhdGVfaGFuZGxlOiBoYW5k bGUgaW4gdXNlIGFmdGVyIGdyYWJiaW5nLlxuIik7CisJCXJldHVybiAxOworCX0KKworCisJLyoK KwkgKiBBdCB0aGlzIHBvaW50LCB3ZSBrbm93IHRoYXQgdGhlIGhhbmRsZSBpcyB2YWxpZCBhbmQg dGhlCisJICogb2JqZWN0IGNhbm5vdCBiZSByZWN5Y2xlZCB3aGlsZSB3ZSBhcmUgbG9va2luZyBh dCBpdC4KKwkgKiBXZSBrbm93IHRoaXMgYmVjYXVzZSB0aGUgcmVjeWNsaW5nIGNvZGUgaW5jcmVt ZW50cyB0aGUgcmVmCisJICogY291bnQsIGFuZCB3ZSBoYXZlIGEgcmVmIGNvdW50IG9mIDAuICBQ bHVzIHdlIGluY3JlbWVudGVkCisJICogdGhlIHJlZiBjb3VudCBvZiB0aGUgaGFuZGxlLCBzbyBp dCBjYW5ub3QgZHJvcCB0byAwIGVpdGhlci4KKwkgKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKCZo YW5kbGUtPnJlbG9jYXRpb25fbG9jaywgZmxhZ3MpOworCisJLyogTm93IGNoZWNrIHRoZSBkZXJl ZiBjb3VudCBvbmUgbGFzdCB0aW1lLiAgSWYgaXQncyBzdGlsbCAwLAorCSAgIHRoZW4gd2UgaGF2 ZSBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBvYmplY3QuCisJKi8KKworCWlmIChhdG9taWNfcmVh ZCgmaGFuZGxlX3RhcmdldC0+ZGVyZWZfY291bnQpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmhhbmRsZS0+cmVsb2NhdGlvbl9sb2NrLCBmbGFncyk7CisJCWF0b21pY19kZWMoJmhhbmRs ZV90YXJnZXQtPmhhbmRsZV9yZWZfY291bnQpOworCQlwcmludGsgKEtFUk5fREVCVUcgInJlbG9j YXRlX2hhbmRsZTogaGFuZGxlIGluIHVzZSBhZnRlciBsb2NrLlxuIik7CisJCXJldHVybiAxOwor CX0KKworCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IGhhbmRsZS4gKi8KKwlpZiAo Z2VuZXJhdGlvbiAhPSBhdG9taWNfcmVhZCgmaGFuZGxlX3RhcmdldC0+Z2VuZXJhdGlvbl9jb3Vu dCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGFuZGxlLT5yZWxvY2F0aW9uX2xvY2ss IGZsYWdzKTsKKwkJYXRvbWljX2RlYygmaGFuZGxlLT50YXJnZXQtPmhhbmRsZV9yZWZfY291bnQp OworCQlwcmludGsgKEtFUk5fREVCVUcKKwkJCSJyZWxvY2F0ZV9oYW5kbGU6IGhhbmRsZSBnZW5l cmF0aW9uIGNoYW5nZWQuXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogTm93IHdlJ3ZlIGdv dCB0aGUgb2JqZWN0LiAgRG8gYSBzaGFsbG93IGNvcHkuICovCisJbWVtY3B5ICh0YXJnZXRfb2Jq LCBzb3VyY2Vfb2JqLCBvYmplY3Rfc2l6ZSk7CisKKwkvKiBXZSBhZGp1c3QgdGhlIGhhbmRsZSAq LworCWhhbmRsZS0+dGFyZ2V0ID0gdGFyZ2V0X29iaiArIGhhbmRsZV90YXJnZXRfb2Zmc2V0Owor CisJLyogUmVsZWFzZSB0aGUgbG9ja3MuICBUaGUgb2JqZWN0IGhhcyBiZWVuIG1vdmVkLiAqLwor CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhbmRsZS0+cmVsb2NhdGlvbl9sb2NrLCBmbGFncyk7 CisJYXRvbWljX2RlYygmaGFuZGxlLT50YXJnZXQtPmhhbmRsZV9yZWZfY291bnQpOworCisJcmV0 dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHJlbG9jYXRlX2hhbmRsZSk7CisKK3ZvaWQg Z2VuZXJpY19oYW5kbGVfY3Rvcih2b2lkICpvYmosIHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAs CisJCQkgdW5zaWduZWQgbG9uZyB1bnVzZWQpIHsKKwlzdHJ1Y3Qga2hhbmRsZV90YXJnZXQgKnRh cmdldCA9IG9iaiArCisJCQlrbWVtX2NhY2hlcF9yZWxvY2F0b3JfcHJpdmF0ZShjYWNoZXApOwor CWF0b21pY19zZXQoJnRhcmdldC0+Z2VuZXJhdGlvbl9jb3VudCwgMCk7CisJLyogV2UgaGF2ZSBh IHBvaW50ZXIgcmlnaHQgbm93LCBzbyB0aGUgaGFuZGxlIGhhcyBiZWVuCisJICogZGVyZWZlcmVu Y2VkIGV2ZW4gdGhvdWdoIGl0IGRvZXNuJ3QgcmVhbGx5IGV4aXN0IHlldC4KKwkgKi8KKwlhdG9t aWNfc2V0KCZ0YXJnZXQtPmRlcmVmX2NvdW50LCAxKTsKKwlhdG9taWNfc2V0KCZ0YXJnZXQtPmhh bmRsZV9yZWZfY291bnQsIDApOworCit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfaGFu ZGxlX2N0b3IpOworCitzdGF0aWMgaW50IF9faW5pdCBoYW5kbGVfaW5pdCh2b2lkKSB7CisJaGFu ZGxlX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImhhbmRsZV9jYWNoZSIsCisJCQkJCSBzaXpl b2Yoc3RydWN0IGtoYW5kbGUpLAorCQkJCQkgMCwgMCwgTlVMTCk7CisJcmV0dXJuIDA7Cit9CisK K21vZHVsZV9pbml0KGhhbmRsZV9pbml0KTsKZGlmZiAtLXVuaWRpcmVjdGlvbmFsLW5ldy1maWxl IC14Jyp+JyAteCcuKicgLXVyIGxpbnV4LTIuNi4yMy9tbS9oYW5kbGVfdGVzdC5jIGxzcmMvcHJv ZGtlcm5lbC8yLjYuMjMvbW0vaGFuZGxlX3Rlc3QuYwotLS0gbGludXgtMi42LjIzL21tL2hhbmRs ZV90ZXN0LmMJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrIGxzcmMvcHJv ZGtlcm5lbC8yLjYuMjMvbW0vaGFuZGxlX3Rlc3QuYwkyMDA3LTEwLTI0IDA3OjA4OjUyLjAwMDAw MDAwMCAtMDcwMApAQCAtMCwwICsxLDE0MCBAQAorLyogbW0vaGFuZGxlX3Rlc3QuYworICogV3Jp dHRlbiBieSBSb3NzIEJpcm8sIDIwMDcgKHJvc3NiQGdvb2dsZS5jb20pCisgKgorICogQ29weXJp Z2h0IChDKSAyMDA3IEdvb2dsZSBJbmMuCisgKiBTZWUgQ29weWluZyBGaWxlLgorICoKKyAqIFRo aXMgZmlsZSBpcyBmb3IgYSBtb2R1bGUgdGhhdCBleGVyY2lzZXMgdGhlIGhhbmRsZSBzeXN0ZW1z CisgKiBhbmQgcnVucyBhIGJ1bmNoIG9mIHVuaXQgdGVzdHMuCisgKgorICogTG9hZGluZyB0aGUg bW9kdWxlIHNob3VsZCBleGVjdXRlIGFsbCB0aGUgdGVzdHMuICBJZiBhbGwgZ29lcworICogcmVz b25hYmx5IHdlbGwsIHRoZSBtb2R1bGUgc2hvdWxkIGp1c3QgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxm IGFuZAorICogYmUgcmVhZHkgdG8gdW5sb2FkLiAgSWYgbm90LCBhbnl0aGluZyBjb3VsZCBnbyB3 cm9uZywgYWZ0ZXIgYWxsIGl0J3MKKyAqIGEga2VybmVsIG1vZHVsZS4KKyAqLworCisjaW5jbHVk ZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaGFuZGxlLmg+CisjaW5jbHVkZSA8 bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworTU9EVUxFX0xJQ0VO U0UoIkdQTCB2MiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBIHRlc3QgbW9kdWxlIGZvciB0aGUg aGFuZGxlIGNvZGUuIik7CisKK3N0cnVjdCBoYW5kbGVfdGVzdDEgeworCWNoYXIgZmlsbGVyMFsx MV07CisJc3RydWN0IGtoYW5kbGVfdGFyZ2V0IHRhcmdldDsKKwljaGFyIGZpbGxlcjFbMTFdOwor fTsKKworI2RlZmluZSBURVNUMV9TSVpFIFBBR0VfU0laRSAqIDQKKworc3RydWN0IGtoYW5kbGUg KnRlc3QxX2hhbmRsZXNbVEVTVDFfU0laRV07CitzdHJ1Y3QgaGFuZGxlX3Rlc3QxICp0ZXN0MV9w dHJzW0FSUkFZX1NJWkUodGVzdDFfaGFuZGxlcyldOworCitzdGF0aWMgaW50IF9faW5pdCBoYW5k bGVfdGVzdCh2b2lkKSB7CisJaW50IGk7CisJc3RydWN0IGttZW1fY2FjaGUgKnRlc3QxX2NhY2hl ID0gTlVMTDsKKwljaGFyICplcnJvciA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmdWxsX3NsYWJz X2JlZm9yZTsKKwl1bnNpZ25lZCBsb25nIHBhcnRpYWxfc2xhYnNfYmVmb3JlOworCXVuc2lnbmVk IGxvbmcgcGFydGlhbF9vYmpzX2JlZm9yZTsKKwl1bnNpZ25lZCBsb25nIGZyZWVfc2xhYnNfYmVm b3JlOworCXVuc2lnbmVkIGxvbmcgZnVsbF9zbGFic19hZnRlcjsKKwl1bnNpZ25lZCBsb25nIHBh cnRpYWxfc2xhYnNfYWZ0ZXI7CisJdW5zaWduZWQgbG9uZyBwYXJ0aWFsX29ianNfYWZ0ZXI7CisJ dW5zaWduZWQgbG9uZyBmcmVlX3NsYWJzX2FmdGVyOworCisJdGVzdDFfY2FjaGUgPSBoYW5kbGVf Y2FjaGVfY3JlYXRlKCJoYW5kbGVfdGVzdDEiLCAwLAorCQkJCQkgIHN0cnVjdCBoYW5kbGVfdGVz dDEsIHRhcmdldCwKKwkJCQkJICBzaXplb2Yoc3RydWN0IGhhbmRsZV90ZXN0MSksCisJCQkJCSAg MCwgTlVMTCk7CisKKwlpZiAodGVzdDFfY2FjaGUgPT0gTlVMTCkgeworCQlwcmludGsgKEtFUk5f REVCVUcgImhhbmRsZV90ZXN0OiBVbmFibGUgdG8gYWxsb2NhdGUgY2FjaGVfdGVzdDEiKTsKKwkJ Z290byB0ZXN0X2ZhaWxlZDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0ZXN0 MV9oYW5kbGVzKTsgaSsrKSB7CisJCXRlc3QxX2hhbmRsZXNbaV0gPSBhbGxvY19oYW5kbGUodGVz dDFfY2FjaGUsIEdGUF9LRVJORUwpOworCX0KKworCWttZW1fY29tcHV0ZV9zdGF0cyh0ZXN0MV9j YWNoZSwgJmZ1bGxfc2xhYnNfYmVmb3JlLAorCQkJICAgJnBhcnRpYWxfc2xhYnNfYmVmb3JlLCAm cGFydGlhbF9vYmpzX2JlZm9yZSwKKwkJCSAgICZmcmVlX3NsYWJzX2JlZm9yZSwgJmVycm9yKTsK KworCisJcHJpbnRrIChLRVJOX0RFQlVHICJiZWZvcmU6IGZyZWUgJWQgcGFydGlhbCAlZCBmdWxs ICVkXG4iLAorCQlmcmVlX3NsYWJzX2JlZm9yZSwgcGFydGlhbF9zbGFic19iZWZvcmUsCisJCWZ1 bGxfc2xhYnNfYmVmb3JlKTsKKworCS8qIE5vdyBmcmFnbWVudCB0aGUgY3JhcCBvdXQgb2YgdGhl IHRoaW5nLiAqLworCWZvciAoaSA9IEFSUkFZX1NJWkUodGVzdDFfaGFuZGxlcykgLSAxIDsgaSA+ PSAwOyBpLS0pIHsKKwkJaWYgKGkgJiA3KSB7CisJCQlwdXRfaGFuZGxlKHRlc3QxX2hhbmRsZXNb aV0sCisJCQkJICAgc3RydWN0IGhhbmRsZV90ZXN0MSwKKwkJCQkgICB0YXJnZXQsIHRlc3QxX2Nh Y2hlKTsKKwkJCXRlc3QxX3B0cnNbaV0gPSBOVUxMOworCQkJdGVzdDFfaGFuZGxlc1tpXSA9IE5V TEw7CisJCX0KKwl9CisKKwlrbWVtX2NvbXB1dGVfc3RhdHModGVzdDFfY2FjaGUsICZmdWxsX3Ns YWJzX2JlZm9yZSwKKwkJCSAgICZwYXJ0aWFsX3NsYWJzX2JlZm9yZSwgJnBhcnRpYWxfb2Jqc19i ZWZvcmUsCisJCQkgICAmZnJlZV9zbGFic19iZWZvcmUsICZlcnJvcik7CisKKwkvKiBGb3JjZSBz b21lIGRlZnJhZy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgcGFydGlhbF9zbGFic19iZWZvcmU7IGkr KykgeworCQl0ZXN0X2RlZnJhZyh0ZXN0MV9jYWNoZSk7CisJfQorCisJaWYgKHNpZ25hbF9wZW5k aW5nKGN1cnJlbnQpKSB7CisJCXByaW50ayAoS0VSTl9ERUJVRyAiaGFuZGxlX3Rlc3Q6IEFiYmFu ZG9ubmluZyB0ZXN0IGR1ZSB0byBzaWduYWwuXG4iKTsKKwkJZ290byB0ZXN0X2ZhaWxlZDsKKwl9 CisKKwlrbWVtX2NvbXB1dGVfc3RhdHModGVzdDFfY2FjaGUsICZmdWxsX3NsYWJzX2FmdGVyLAor CQkJICAgJnBhcnRpYWxfc2xhYnNfYWZ0ZXIsICZwYXJ0aWFsX29ianNfYWZ0ZXIsCisJCQkgICAm ZnJlZV9zbGFic19hZnRlciwgJmVycm9yKTsKKworCS8qIFdlIHNob3VsZCBlaXRoZXIgaGF2ZSBt b3JlIGZyZWUgc2xhYnMsIG9yIGZld2VyIHRvdGFsIHNsYWJzLiAqLworCWlmIChmcmVlX3NsYWJz X2FmdGVyIDw9IGZyZWVfc2xhYnNfYmVmb3JlICYmCisJICAgIGZyZWVfc2xhYnNfYWZ0ZXIgKyBw YXJ0aWFsX3NsYWJzX2FmdGVyICsgZnVsbF9zbGFic19hZnRlciA+PQorCSAgICBmcmVlX3NsYWJz X2JlZm9yZSArIHBhcnRpYWxfc2xhYnNfYmVmb3JlICsgZnVsbF9zbGFic19iZWZvcmUpIHsKKwkJ cHJpbnRrIChLRVJOX0RFQlVHICJoYW5kbGVfdGVzdDogdGVzdCAxIGZhaWxlZC4gIgorCQkJIk1l bW9yeSB3YXMgbm90IGZyZWVkXG4iKTsKKwkJcHJpbnRrIChLRVJOX0RFQlVHICJiZWZvcmU6IGZy ZWUgJWQgcGFydGlhbCAlZCBmdWxsICVkXG4iLAorCQkJZnJlZV9zbGFic19iZWZvcmUsIHBhcnRp YWxfc2xhYnNfYmVmb3JlLAorCQkJZnVsbF9zbGFic19iZWZvcmUpOworCQlwcmludGsgKEtFUk5f REVCVUcgImFmdGVyOiBmcmVlICVkIHBhcnRpYWwgJWQgZnVsbCAlZFxuIiwKKwkJCWZyZWVfc2xh YnNfYWZ0ZXIsIHBhcnRpYWxfc2xhYnNfYWZ0ZXIsCisJCQlmdWxsX3NsYWJzX2FmdGVyKTsKKwkJ Z290byB0ZXN0X2ZhaWxlZDsKKwl9CisKKworCisgdGVzdF9mYWlsZWQ6CisJZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUodGVzdDFfaGFuZGxlcyk7IGkrKykgeworCQlpZiAodGVzdDFfcHRyc1tp XSkKKwkJCXB1dF9oYW5kbGVfcmVmKHRlc3QxX2hhbmRsZXNbaV0pOworCQlpZiAodGVzdDFfaGFu ZGxlc1tpXSkKKwkJCXB1dF9oYW5kbGUodGVzdDFfaGFuZGxlc1tpXSwgc3RydWN0IGhhbmRsZV90 ZXN0MSwKKwkJCQkgICB0YXJnZXQsIHRlc3QxX2NhY2hlKTsKKwl9CisKKwlrbWVtX2NhY2hlX2Rl c3Ryb3kodGVzdDFfY2FjaGUpOworCisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIHZvaWQgX19l eGl0CitoYW5kbGVfdGVzdF9leGl0KHZvaWQpCit7CisJcmV0dXJuOworfQorCisKK21vZHVsZV9p bml0KGhhbmRsZV90ZXN0KTsKK21vZHVsZV9leGl0KGhhbmRsZV90ZXN0X2V4aXQpOwpkaWZmIC0t dW5pZGlyZWN0aW9uYWwtbmV3LWZpbGUgLXgnKn4nIC14Jy4qJyAtdXIgbGludXgtMi42LjIzL21t L2h1Z2V0bGIuYyBsc3JjL3Byb2RrZXJuZWwvMi42LjIzL21tL2h1Z2V0bGIuYwotLS0gbGludXgt Mi42LjIzL21tL2h1Z2V0bGIuYwkyMDA3LTEwLTA5IDEzOjMxOjM4LjAwMDAwMDAwMCAtMDcwMAor KysgbHNyYy9wcm9ka2VybmVsLzIuNi4yMy9tbS9odWdldGxiLmMJMjAwNy0xMC0yNCAwNzoxNToy OC4wMDAwMDAwMDAgLTA3MDAKQEAgLTM3OCw3ICszNzgsMTIgQEAKIAkJaWYgKCFkc3RfcHRlKQog CQkJZ290byBub21lbTsKIAkJc3Bpbl9sb2NrKCZkc3QtPnBhZ2VfdGFibGVfbG9jayk7CisJCWRz dF9wdGUgPSB3YWxrX3BhZ2VfdGFibGVfaHVnZV9wdGUoZHN0LCBhZGRyKTsKKwkJQlVHX09OKCFk c3RfcHRlKTsKIAkJc3Bpbl9sb2NrKCZzcmMtPnBhZ2VfdGFibGVfbG9jayk7CisJCXNyY19wdGUg PSB3YWxrX3BhZ2VfdGFibGVfaHVnZV9wdGUoc3JjLCBhZGRyKTsKKwkJQlVHX09OKCFzcmNfcHRl KTsKKwogCQlpZiAoIXB0ZV9ub25lKCpzcmNfcHRlKSkgewogCQkJaWYgKGNvdykKIAkJCQlwdGVw X3NldF93cnByb3RlY3Qoc3JjLCBhZGRyLCBzcmNfcHRlKTsKQEAgLTU2MSw2ICs1NjYsOSBAQAog CiAJbmV3X3B0ZSA9IG1ha2VfaHVnZV9wdGUodm1hLCBwYWdlLCAoKHZtYS0+dm1fZmxhZ3MgJiBW TV9XUklURSkKIAkJCQkmJiAodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkpKTsKKworIAlwdGVw ID0gd2Fsa19wYWdlX3RhYmxlX2h1Z2VfcHRlKG1tLCBhZGRyZXNzKTsKKwogCXNldF9odWdlX3B0 ZV9hdChtbSwgYWRkcmVzcywgcHRlcCwgbmV3X3B0ZSk7CiAKIAlpZiAod3JpdGVfYWNjZXNzICYm ICEodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkpIHsKQEAgLTYwOSw2ICs2MTcsOSBAQAogCXJl dCA9IDA7CiAKIAlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCXB0ZXAgPSB3YWxr X3BhZ2VfdGFibGVfaHVnZV9wdGUobW0sIGFkZHJlc3MpOworCUJVR19PTighcHRlcCk7CisKIAkv KiBDaGVjayBmb3IgYSByYWNpbmcgdXBkYXRlIGJlZm9yZSBjYWxsaW5nIGh1Z2V0bGJfY293ICov CiAJaWYgKGxpa2VseShwdGVfc2FtZShlbnRyeSwgKnB0ZXApKSkKIAkJaWYgKHdyaXRlX2FjY2Vz cyAmJiAhcHRlX3dyaXRlKGVudHJ5KSkKZGlmZiAtLXVuaWRpcmVjdGlvbmFsLW5ldy1maWxlIC14 Jyp+JyAteCcuKicgLXVyIGxpbnV4LTIuNi4yMy9tbS9tZW1vcnkuYyBsc3JjL3Byb2RrZXJuZWwv Mi42LjIzL21tL21lbW9yeS5jCi0tLSBsaW51eC0yLjYuMjMvbW0vbWVtb3J5LmMJMjAwNy0xMC0w OSAxMzozMTozOC4wMDAwMDAwMDAgLTA3MDAKKysrIGxzcmMvcHJvZGtlcm5lbC8yLjYuMjMvbW0v bWVtb3J5LmMJMjAwNy0xMC0yNCAwNzo0NDo1My4wMDAwMDAwMDAgLTA3MDAKQEAgLTY5LDYgKzY5 LDggQEAKIEVYUE9SVF9TWU1CT0wobWVtX21hcCk7CiAjZW5kaWYKIAorc3RydWN0IGttZW1fY2Fj aGUgKnB0ZV9jYWNoZTsKKwogdW5zaWduZWQgbG9uZyBudW1fcGh5c3BhZ2VzOwogLyoKICAqIEEg bnVtYmVyIG9mIGtleSBzeXN0ZW1zIGluIHg4NiBpbmNsdWRpbmcgaW9yZW1hcCgpIHJlbHkgb24g dGhlIGFzc3VtcHRpb24KQEAgLTMwNiw2ICszMDgsOCBAQAogCiAJcHRlX2xvY2tfaW5pdChuZXcp OwogCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJcG1kID0gd2Fsa19wYWdlX3Rh YmxlX3BtZChtbSwgYWRkcmVzcyk7CisJQlVHX09OKCFwbWQpOwogCWlmIChwbWRfcHJlc2VudCgq cG1kKSkgewkvKiBBbm90aGVyIGhhcyBwb3B1bGF0ZWQgaXQgKi8KIAkJcHRlX2xvY2tfZGVpbml0 KG5ldyk7CiAJCXB0ZV9mcmVlKG5ldyk7CkBAIC0zMjUsNiArMzI5LDggQEAKIAkJcmV0dXJuIC1F Tk9NRU07CiAKIAlzcGluX2xvY2soJmluaXRfbW0ucGFnZV90YWJsZV9sb2NrKTsKKwlwbWQgPSB3 YWxrX3BhZ2VfdGFibGVfa2VybmVsX3BtZChhZGRyZXNzKTsKKwlCVUdfT04oIXBtZCk7CiAJaWYg KHBtZF9wcmVzZW50KCpwbWQpKQkJLyogQW5vdGhlciBoYXMgcG9wdWxhdGVkIGl0ICovCiAJCXB0 ZV9mcmVlX2tlcm5lbChuZXcpOwogCWVsc2UKQEAgLTUwNiw2ICs1MTIsMTEgQEAKIAlzcGluX2xv Y2tfbmVzdGVkKHNyY19wdGwsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAlhcmNoX2VudGVyX2xh enlfbW11X21vZGUoKTsKIAorCXNyY19wdGUgPSB3YWxrX3BhZ2VfdGFibGVfcHRlKHNyY19tbSwg YWRkcik7CisJQlVHX09OKCFzcmNfcHRlKTsKKwlkc3RfcHRlID0gd2Fsa19wYWdlX3RhYmxlX3B0 ZShkc3RfbW0sIGFkZHIpOworCUJVR19PTighZHN0X3B0ZSk7CisKIAlkbyB7CiAJCS8qCiAJCSAq IFdlIGFyZSBob2xkaW5nIHR3byBsb2NrcyBhdCB0aGlzIHBvaW50IC0gZWl0aGVyIG9mIHRoZW0K QEAgLTI0ODMsNyArMjQ5NCw4IEBACiAgKiBhIHN0cnVjdF9wYWdlIGJhY2tpbmcgaXQKICAqCiAg KiBBcyB0aGlzIGlzIGNhbGxlZCBvbmx5IGZvciBwYWdlcyB0aGF0IGRvIG5vdCBjdXJyZW50bHkg ZXhpc3QsIHdlCi0gKiBkbyBub3QgbmVlZCB0byBmbHVzaCBvbGQgdmlydHVhbCBjYWNoZXMgb3Ig dGhlIFRMQi4KKyAqIGRvIG5vdCBuZWVkIHRvIGZsdXNoIG9sZCB2aXJ0dWFsIGNhY2hlcyBvciB0 aGUgVExCLCB1bmxlc3Mgc29tZW9uZQorICogZWxzZSBoYXMgbGVmdCB0aGUgcGFnZSB0YWJsZSBj YWNoZSBpbiBhbiB1bmtub3duIHN0YXRlLgogICoKICAqIFdlIGVudGVyIHdpdGggbm9uLWV4Y2x1 c2l2ZSBtbWFwX3NlbSAodG8gZXhjbHVkZSB2bWEgY2hhbmdlcywKICAqIGJ1dCBhbGxvdyBjb25j dXJyZW50IGZhdWx0cyksIGFuZCBwdGUgbWFwcGVkIGJ1dCBub3QgeWV0IGxvY2tlZC4KQEAgLTI2 MDMsNiArMjYxNSw4IEBACiAKIAlwdGwgPSBwdGVfbG9ja3B0cihtbSwgcG1kKTsKIAlzcGluX2xv Y2socHRsKTsKKwlwdGUgPSB3YWxrX3BhZ2VfdGFibGVfcHRlKG1tLCBhZGRyZXNzKTsKKwogCWlm ICh1bmxpa2VseSghcHRlX3NhbWUoKnB0ZSwgZW50cnkpKSkKIAkJZ290byB1bmxvY2s7CiAJaWYg KHdyaXRlX2FjY2VzcykgewpAQCAtMjYyNSw2ICsyNjM5LDcgQEAKIAkJaWYgKHdyaXRlX2FjY2Vz cykKIAkJCWZsdXNoX3RsYl9wYWdlKHZtYSwgYWRkcmVzcyk7CiAJfQorCW1heWJlX2ZsdXNoX3Rs Yl9tbShtbSk7CiB1bmxvY2s6CiAJcHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7CiAJcmV0dXJu IDA7CkBAIC0yNjc0LDYgKzI2ODksOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXNwaW5fbG9j aygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJcGdkID0gd2Fsa19wYWdlX3RhYmxlX3BnZChtbSwg YWRkcmVzcyk7CisJQlVHX09OKCFwZ2QpOwogCWlmIChwZ2RfcHJlc2VudCgqcGdkKSkJCS8qIEFu b3RoZXIgaGFzIHBvcHVsYXRlZCBpdCAqLwogCQlwdWRfZnJlZShuZXcpOwogCWVsc2UKQEAgLTI2 OTUsNiArMjcxMiw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJc3Bpbl9sb2NrKCZtbS0+cGFn ZV90YWJsZV9sb2NrKTsKKwlwdWQgPSB3YWxrX3BhZ2VfdGFibGVfcHVkKG1tLCBhZGRyZXNzKTsK KwlCVUdfT04oIXB1ZCk7CiAjaWZuZGVmIF9fQVJDSF9IQVNfNExFVkVMX0hBQ0sKIAlpZiAocHVk X3ByZXNlbnQoKnB1ZCkpCQkvKiBBbm90aGVyIGhhcyBwb3B1bGF0ZWQgaXQgKi8KIAkJcG1kX2Zy ZWUobmV3KTsKQEAgLTI4NjcsMyArMjg4NiwyMTggQEAKIAlyZXR1cm4gYnVmIC0gb2xkX2J1ZjsK IH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTsKKworLyogV2UgbmVlZCB0 byB1c2UgUkNVIHRvIGNsZWFuIHVwIHRoZSBwYWdlIHRhYmxlcyBiZWNhdXNlIG1hbnkgcmVhZAor ICAgYWNjZXNzZXMgZG8gbm90IGdyYWIgdGhlIGxvY2sgYW5kIHRoZXkgYXJlIGluIHRoZSBwYWdl IGZhdWx0IGZhc3QKKyAgIHBhdGgsIHNvIHdlIGRvbid0IHdhbnQgdG8gdG91Y2ggdGhlbS4gV2Ug Zmx1c2ggdGhlIHBhZ2UgdGFibGVzCisgICByaWdodCBhd2F5LCBidXQgd2UgZG9uJ3QgZmx1c2gg dGhlIHBhZ2VzIHVudGlsIHRoZSByY3UgY2FsbGJhY2suCisgICBXZSBjYW4gZ2V0IGF3YXkgd2l0 aCB0aGlzIHNpbmNlIHRoZSBvbGQgcGFnZSBpcyBzdGlsbCB2YWxpZCBhbmQKKyAgIGFueWJvZHkg dGhhdCBtb2RpZmllcyB0aGUgbmV3IG9uZSB3aWxsIGhhdmUgdG8gZmx1c2ggdGhlIHBhZ2VzCisg ICBhbnl3YXkuIFdlIGNhbid0IHdhaXQgdG8gZmx1c2ggdGhlIHBhZ2UgdGFibGVzIHRoZW1zZWx2 ZXMgc2luY2UKKyAgIGlmIHdlIGZhdWx0IGluIGEgcGFnZSwgdGhlIGZhdWx0IGNvZGUgd2lsbCBv bmx5IG1vZGlmeSB0aGUgbmV3CisgICBwYWdlIHRhYmxlcywgYnV0IGlmIHRoZSBjcHUgaXMgbG9v a2luZyBhdCB0aGUgb2xkIG9uZXMsIGl0IHdpbGwKKyAgIGNvbnRpbnVlIHRvIGZhdWx0IG9uIHRo ZSBvbGQgcGFnZSB0YWJsZSB3aGlsZSB0aGUgZmF1bHQgaGFuZGxlciB3aWxsCisgICBzZWUgdGhl IG5ldyBwYWdlIHRhYmxlcyBhbmQgbm90IGtub3cgd2hhdCBpcyBnb2luZyBvbi4gIEl0IGFwcGVh cnMgdGhhdAorICAgdGhlcmUgaXMgb25seSBvbmUgYXJjaGl0ZWN0dXJlIHdoZXJlIGZsdXNoX3Rs Yl9wZ3RhYmxlcyBpcyBub3QgYSBuby1vcCwKKyAgIHNvIGl0IGRvZXNuJ3QgaHVydCBtdWNoIHRv IGRvIGl0IGhlcmUuICBXZSBtaWdodCBsb3NlIHNvbWUgYWNjZXNzZWQgYml0CisgICB1cGRhdGVz LCBidXQgd2UgY2FuIGxpdmUgd2l0aCB0aGF0LgorICovCisKK2ludCByZWxvY2F0ZV9wZ2Qodm9p ZCAqc291cmNlX29iaiwgdm9pZCAqdGFyZ2V0X29iaiwKKwkJCSBzdHJ1Y3Qga21lbV9jYWNoZSAq Y2FjaGVwLAorCQkJIHVuc2lnbmVkIGxvbmcgdW51c2VkLAorIAkJCSB1bnNpZ25lZCBsb25nIG9i amVjdF9zaXplKSB7CisJc3RydWN0IG1tX3N0cnVjdCAqbW07CisJc3RydWN0IHBhZ2VfdGFibGVf bWV0YWRhdGEgKm1kOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCS8qIGdldCB0aGUgbW0gc28g d2UgY2FuIGxvY2sgaXQgYW5kIHRoZSBlbnRyeSBwb2ludGluZyB0byB0aGlzCisJICAgcGFnZSB0 YWJsZS4gKi8KKwltZCA9IChzdHJ1Y3QgcGFnZV90YWJsZV9tZXRhZGF0YSAqKWttZW1fY2FjaGVf Z2V0X21ldGFkYXRhKGNhY2hlcCwKKwkJCQkJCQkJICAgc291cmNlX29iaik7CisJaWYgKCFtZCkK KwkJcmV0dXJuIFJFTE9DQVRFX0ZBSUxVUkU7CisKKwltbSA9IG1kLT5tbTsKKwlhZGRyID0gbWQt PmFkZHI7CisKKwkvKiBpcnFzIGFyZSBvZmYgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4g Ki8KKwlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCW1lbWNweSh0YXJnZXRfb2Jq LCBzb3VyY2Vfb2JqLCBvYmplY3Rfc2l6ZSk7CisJcGdkX3BvcHVsYXRlKG1tLCBwZ2Rfb2Zmc2V0 KG1tLCBhZGRyKSwgdGFyZ2V0X29iaik7CisJZmx1c2hfdGxiX3BndGFibGVzKG1tLCBtZC0+YWRk ciwgbWQtPmFkZHIgKyAoMVVMIDw8IFBHRElSX1NISUZUKSAtIDEpOworCW1tLT5uZWVkX2ZsdXNo ID0gMTsKKyAJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCXJldHVybiBSRUxP Q0FURV9TVUNDRVNTX1JDVTsKK30KKworaW50IHJlbG9jYXRlX3B1ZCh2b2lkICpzb3VyY2Vfb2Jq LCB2b2lkICp0YXJnZXRfb2JqLAorCQkgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKKwkJIHVu c2lnbmVkIGxvbmcgdW51c2VkLAorCQkgdW5zaWduZWQgbG9uZyBvYmplY3Rfc2l6ZSkgeworCXN0 cnVjdCBtbV9zdHJ1Y3QgKm1tOworCXN0cnVjdCBwYWdlX3RhYmxlX21ldGFkYXRhICptZDsKKwl1 bnNpZ25lZCBsb25nIGFkZHI7CisJcGdkX3QgKnBnZDsKKwlwdWRfdCAqcHVkOworCisJLyogZ2V0 IHRoZSBtbSBzbyB3ZSBjYW4gbG9jayBpdCBhbmQgdGhlIGVudHJ5IHBvaW50aW5nIHRvIHRoaXMK KwkgICBwYWdlIHRhYmxlLiAqLworCW1kID0gKHN0cnVjdCBwYWdlX3RhYmxlX21ldGFkYXRhICop CisJCQlrbWVtX2NhY2hlX2dldF9tZXRhZGF0YShjYWNoZXAsIHNvdXJjZV9vYmopOworCisJaWYg KCFtZCkKKwkJcmV0dXJuIFJFTE9DQVRFX0ZBSUxVUkU7CisKKwltbSA9IG1kLT5tbTsKKwlhZGRy ID0gbWQtPmFkZHI7CisKKwkvKiBpcnFzIGFyZSBvZmYgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNh bGxlZC4gKi8KKwlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCisJcGdkID0gcGdk X29mZnNldChtbSwgYWRkcik7CisKKwlpZiAoIXBnZF9ub25lKCpwZ2QpICYmIHBnZF9wcmVzZW50 KCpwZ2QpKSB7CisJCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKKwkJaWYgKCFwdWRfbm9u ZSgqcHVkKSAmJiBwdWRfcHJlc2VudCgqcHVkKSkgeworCQkJbWVtY3B5KHRhcmdldF9vYmosIHNv dXJjZV9vYmosIG9iamVjdF9zaXplKTsKKwkJCXB1ZF9wb3B1bGF0ZShtbSwgcHVkLCB0YXJnZXRf b2JqKTsKKwkJCWZsdXNoX3RsYl9wZ3RhYmxlcyhtbSwgYWRkciwKKwkJCQkJICAgYWRkciArICgx IDw8IFBVRF9TSElGVCkgLSAxKTsKKwkJCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2Nr KTsKKwkJCXJldHVybiBSRUxPQ0FURV9TVUNDRVNTX1JDVTsKKwkJfQorCX0KKworCW1tLT5uZWVk X2ZsdXNoID0gMTsKKwlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJcmV0dXJu IFJFTE9DQVRFX0ZBSUxVUkU7Cit9CisKK3N0YXRpYyB2b2lkIHJjdV9mcmVlX3BtZChzdHJ1Y3Qg cmN1X2hlYWQgKmhlYWQpIHsKKwlzdHJ1Y3QgcGFnZV90YWJsZV9tZXRhZGF0YSAqbWQgPSAKKwkJ CShzdHJ1Y3QgcGFnZV90YWJsZV9tZXRhZGF0YSAqKWhlYWQ7CisJQlVHX09OKCFtZC0+bW0pOwor CUJVR19PTihtZC0+YWRkcik7CisJQlVHX09OKCFtZC0+Y2FjaGVwKTsKKwlCVUdfT04oIW1kLT5v YmopOworCisJLyogbWF5YmVfZmx1c2hfdGxiX21tKG1kLT5tbSk7CisJICAgbW1kcm9wKG1kLT5t bSk7ICovCisJa21lbV9jYWNoZV9mcmVlKG1kLT5jYWNoZXAsIG1kLT5vYmopOworfQorCitzdGF0 aWMgaW50IHJlbG9jYXRlX3BtZCh2b2lkICpzb3VyY2Vfb2JqLCB2b2lkICp0YXJnZXRfb2JqLAor CQkJc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKKwkJCXVuc2lnbmVkIGxvbmcgdW51c2VkLAor CQkJdW5zaWduZWQgbG9uZyBvYmplY3Rfc2l6ZSkgeworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwor CXN0cnVjdCBwYWdlX3RhYmxlX21ldGFkYXRhICptZDsKKwl1bnNpZ25lZCBsb25nIGFkZHI7Cisg CXBtZF90ICpwbWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKyNpZiBOUl9DUFVTID49IENPTkZJ R19TUExJVF9QVExPQ0tfQ1BVUworCXN0cnVjdCBwYWdlICp0YXJnZXRfcGFnZSA9IHZpcnRfdG9f cGFnZSh0YXJnZXRfb2JqKTsKKwlzdHJ1Y3QgcGFnZSAqc291cmNlX3BhZ2UgPSB2aXJ0X3RvX3Bh Z2Uoc291cmNlX29iaik7CisjZW5kaWYKKworCS8qIGdldCB0aGUgbW0gc28gd2UgY2FuIGxvY2sg aXQgYW5kIHRoZSBlbnRyeSBwb2ludGluZyB0byB0aGlzCisgCSAgIHBhZ2UgdGFibGUuICovCisJ bWQgPSAoc3RydWN0IHBhZ2VfdGFibGVfbWV0YWRhdGEgKikKKwkJCWttZW1fY2FjaGVfZ2V0X21l dGFkYXRhKGNhY2hlcCwgc291cmNlX29iaik7CisKKwkvKgorCXByaW50ayAoS0VSTl9ERUJVRyAi cmVsb2NhdGVfcG1kIHNvdXJjZT0lcCBtbT0lcCBhZGRyPTB4JWx4IG9iamVjdF9zaXplPSVkXG4i LAorCQlzb3VyY2Vfb2JqLCBtbSwgYWRkciwgb2JqZWN0X3NpemUpOworICAgICAgICBwcmludGsg KEtFUk5fREVCVUcgIm1kPSVwIG1tPSVwIGFkZHI9MHglbHggY3N1bT0weCVseFxuIiwKKwltZCwg bW0sIGFkZHIsIG1kLT5jc3VtKTsKKwkqLworCUJVR19PTihtZC0+Y3N1bSAhPSAoKHVuc2lnbmVk IGxvbmcpKG1kLT5tbSkgXiAobWQtPmFkZHIpKSk7CisKKwlpZiAoIW1kLT5tbSB8fCAhbWQtPmFk ZHIgfHwgbWQtPm1tID09ICZpbml0X21tKSB7CisJCXJldHVybiBSRUxPQ0FURV9GQUlMVVJFOwor CX0KKworCWlmIChtZC0+YWRkciA+PSBQQUdFX09GRlNFVCkgeworCQlwcmludGsgKEtFUk5fSU5G TyAiYXR0ZW1wdGVkIHRvIHJlbG9jYXRlIGtlcm5lbCBwYWdlLlxuIik7CisJCXJldHVybiBSRUxP Q0FURV9GQUlMVVJFOworCX0KKyAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWQtPm1kX2xvY2ssIGZs YWdzKTsKKworCW1tID0gbWQtPm1tOworCWFkZHIgPSBtZC0+YWRkcjsKKworCS8qIE1ha2Ugc3Vy ZSB0aGUgbW0gZG9lcyBub3QgZ28gYXdheS4gKi8KKwlpZiAobW0gJiYgYWRkcikKKwkJYXRvbWlj X2luYygmbW0tPm1tX2NvdW50KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kLT5tZF9s b2NrLCBmbGFncyk7CisKKwlpZiAoIW1tIHx8ICFhZGRyKQorCQlyZXR1cm4gUkVMT0NBVEVfRkFJ TFVSRTsKKworCS8qIGlycXMgYXJlIG9mZiB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiAq LworCXNwaW5fbG9ja19pcnFzYXZlKCZtbS0+cGFnZV90YWJsZV9sb2NrLCBmbGFncyk7CisKKwlw bWQgPSB3YWxrX3BhZ2VfdGFibGVfcG1kKG1tLCBhZGRyKTsKKwlpZiAocG1kICYmICF2aXJ0X2Fk ZHJfdmFsaWQocG1kKSkgeworCQlwcmludGsgKEtFUk5fV0FSTklORyAid2Fsa19wYWdlX3RhYmxl X3BtZCByZXR1cm5lZCAlcCB3aGljaCBpcyBub3QgdmFsaWQuXG4iLCBwbWQpOworCX0KKworCWlm IChwbWQgJiYgCisJICAgIHBtZF9wYWdlX3ZhZGRyKCpwbWQpID09ICh1bnNpZ25lZCBsb25nKXNv dXJjZV9vYmopIHsKKwkJbWVtY3B5IChrbWVtX2NhY2hlX2dldF9tZXRhZGF0YShjYWNoZXAsCisJ CQkJCQl0YXJnZXRfb2JqKSwKKwkJCW1kLCBzaXplb2YoKm1kKSk7CisjaWYgTlJfQ1BVUyA+PSBD T05GSUdfU1BMSVRfUFRMT0NLX0NQVVMKKwkJc3Bpbl9sb2NrX2luaXQoJnRhcmdldF9wYWdlLT5w dGwpOworCQlzcGluX2xvY2soJnNvdXJjZV9wYWdlLT5wdGwpOworI2VuZGlmCisKKwkJbWVtY3B5 KHRhcmdldF9vYmosIHNvdXJjZV9vYmosIG9iamVjdF9zaXplKTsKKwkJcG1kX3BvcHVsYXRlKE5V TEwsIHBtZCwgdmlydF90b19wYWdlKHRhcmdldF9vYmopKTsKKyNpZiBOUl9DUFVTID49IENPTkZJ R19TUExJVF9QVExPQ0tfQ1BVUworCQlzcGluX3VubG9jaygmc291cmNlX3BhZ2UtPnB0bCk7Cisj ZW5kaWYKKwlmbHVzaF90bGJfcGd0YWJsZXMobW0sIGFkZHIsCisJCQkgICBhZGRyICsgKDEgPDwg UE1EX1NISUZUKQorCQkJCSAgIC0gMSk7CisKKwkJbW0tPm5lZWRfZmx1c2ggPSAxOworCQltZC0+ YWRkciA9IDA7CisJCW1kLT5jc3VtID0gKHVuc2lnbmVkIGxvbmcpbW07CisJCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJm1tLT5wYWdlX3RhYmxlX2xvY2ssIGZsYWdzKTsKKworCisJCS8vcHJpbnRr IChLRVJOX0RFQlVHICJyZWxvY2F0ZV9wbWQ6IHN1Y2Nlc2Z1bGx5IHJlbG9jYXRlZCBwdGUgKCVw KVxuIiwgc291cmNlX29iaik7CisJCS8qIERvbid0IGRyb3AgdGhlIE1NLCB3ZSBoYXZlIGFuIGV4 dHJhIGNvcHkgb2YgaXQgc28gCisJICAgd2Uga25vdyB3aGF0IG1tIHRvIGZsdXNoIHdoZW4gd2Ug ZHJvcCB0aGUgcGFnZS4gKi8KKwkJbWQtPm9iaiA9IHNvdXJjZV9vYmo7CisJCW1kLT5jYWNoZXAg PSBjYWNoZXA7CisJCWNhbGxfcmN1KCZtZC0+aGVhZCwgcmN1X2ZyZWVfcG1kKTsKKwkJbWF5YmVf Zmx1c2hfdGxiX21tKG1tKTsKKwkJbW1kcm9wKG1tKTsKKworCQlyZXR1cm4gUkVMT0NBVEVfU1VD Q0VTU19SQ1U7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW0tPnBhZ2VfdGFibGVf bG9jaywgZmxhZ3MpOworCW1tZHJvcChtbSk7CisJcmV0dXJuIFJFTE9DQVRFX0ZBSUxVUkU7Cit9 CisKK3N0YXRpYyBpbnQgX19pbml0IHBhZ2VfdGFibGVfY2FjaGVfaW5pdCh2b2lkKQoreworCXB0 ZV9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlX3JlbG9jYXRhYmxlKCJwdGUiLCBQQUdFX1NJWkUs CisJCQkJCQkgIFBBR0VfU0laRSwgU0xBQl9IVUdFX1BBR0UsCisJCQkJCQkgIE5VTEwsCisJCQkJ CQkgIHJlbG9jYXRlX3BtZCwgMCwKKwkJCQkJCSAgc2l6ZW9mKHN0cnVjdCBwYWdlX3RhYmxlX21l dGFkYXRhKSk7CisJQlVHX09OKCFwdGVfY2FjaGUpOworCXJldHVybiAwOworfQorCittb2R1bGVf aW5pdChwYWdlX3RhYmxlX2NhY2hlX2luaXQpOworCisKZGlmZiAtLXVuaWRpcmVjdGlvbmFsLW5l dy1maWxlIC14Jyp+JyAteCcuKicgLXVyIGxpbnV4LTIuNi4yMy9tbS9ybWFwLmMgbHNyYy9wcm9k a2VybmVsLzIuNi4yMy9tbS9ybWFwLmMKLS0tIGxpbnV4LTIuNi4yMy9tbS9ybWFwLmMJMjAwNy0x MC0wOSAxMzozMTozOC4wMDAwMDAwMDAgLTA3MDAKKysrIGxzcmMvcHJvZGtlcm5lbC8yLjYuMjMv bW0vcm1hcC5jCTIwMDctMTAtMjQgMDc6MDg6NTIuMDAwMDAwMDAwIC0wNzAwCkBAIC0yNTQsNiAr MjU0LDggQEAKIAogCXB0bCA9IHB0ZV9sb2NrcHRyKG1tLCBwbWQpOwogCXNwaW5fbG9jayhwdGwp OworCisJcHRlID0gd2Fsa19wYWdlX3RhYmxlX3B0ZShtbSwgYWRkcmVzcyk7CiAJaWYgKHB0ZV9w cmVzZW50KCpwdGUpICYmIHBhZ2VfdG9fcGZuKHBhZ2UpID09IHB0ZV9wZm4oKnB0ZSkpIHsKIAkJ KnB0bHAgPSBwdGw7CiAJCXJldHVybiBwdGU7CmRpZmYgLS11bmlkaXJlY3Rpb25hbC1uZXctZmls ZSAteCcqficgLXgnLionIC11ciBsaW51eC0yLjYuMjMvbW0vc2xhYi5jIGxzcmMvcHJvZGtlcm5l bC8yLjYuMjMvbW0vc2xhYi5jCi0tLSBsaW51eC0yLjYuMjMvbW0vc2xhYi5jCTIwMDctMTAtMDkg MTM6MzE6MzguMDAwMDAwMDAwIC0wNzAwCisrKyBsc3JjL3Byb2RrZXJuZWwvMi42LjIzL21tL3Ns YWIuYwkyMDA3LTEwLTI0IDA3OjU0OjE0LjAwMDAwMDAwMCAtMDcwMApAQCAtMTQwLDcgKzE0MCw3 IEBACiAjZGVmaW5lCVJFRFpPTkVfQUxJR04JCW1heChCWVRFU19QRVJfV09SRCwgX19hbGlnbm9m X18odW5zaWduZWQgbG9uZyBsb25nKSkKIAogI2lmbmRlZiBjYWNoZV9saW5lX3NpemUKLSNkZWZp bmUgY2FjaGVfbGluZV9zaXplKCkJTDFfQ0FDSEVfQllURVMKKyNEZWZpbmUgY2FjaGVfbGluZV9z aXplKCkJTDFfQ0FDSEVfQllURVMKICNlbmRpZgogCiAjaWZuZGVmIEFSQ0hfS01BTExPQ19NSU5B TElHTgpAQCAtMTc4LDEyICsxNzgsMTQgQEAKIAkJCSBTTEFCX0NBQ0hFX0RNQSB8IFwKIAkJCSBT TEFCX1NUT1JFX1VTRVIgfCBcCiAJCQkgU0xBQl9SRUNMQUlNX0FDQ09VTlQgfCBTTEFCX1BBTklD IHwgXAotCQkJIFNMQUJfREVTVFJPWV9CWV9SQ1UgfCBTTEFCX01FTV9TUFJFQUQpCisJCQkgU0xB Ql9ERVNUUk9ZX0JZX1JDVSB8IFNMQUJfTUVNX1NQUkVBRCB8IFwKKwkJCSBTTEFCX0hVR0VfUEFH RSkKICNlbHNlCiAjIGRlZmluZSBDUkVBVEVfTUFTSwkoU0xBQl9IV0NBQ0hFX0FMSUdOIHwgXAog CQkJIFNMQUJfQ0FDSEVfRE1BIHwgXAogCQkJIFNMQUJfUkVDTEFJTV9BQ0NPVU5UIHwgU0xBQl9Q QU5JQyB8IFwKLQkJCSBTTEFCX0RFU1RST1lfQllfUkNVIHwgU0xBQl9NRU1fU1BSRUFEKQorCQkJ IFNMQUJfREVTVFJPWV9CWV9SQ1UgfCBTTEFCX01FTV9TUFJFQUQgfCBcCisgICAgICAgICAgICAg ICAgICAgICAgICAgU0xBQl9IVUdFX1BBR0UpCiAjZW5kaWYKIAogLyoKQEAgLTIyNSw2ICsyMjcs OCBAQAogCXVuc2lnbmVkIGludCBpbnVzZTsJLyogbnVtIG9mIG9ianMgYWN0aXZlIGluIHNsYWIg Ki8KIAlrbWVtX2J1ZmN0bF90IGZyZWU7CiAJdW5zaWduZWQgc2hvcnQgbm9kZWlkOworCXVuc2ln bmVkIGxvbmcgbWV0YV9kYXRhX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgbWV0YV9kYXRhX2VuZDsK IH07CiAKIC8qCkBAIC00MTAsNiArNDE0LDExIEBACiAJLyogY29uc3RydWN0b3IgZnVuYyAqLwog CXZvaWQgKCpjdG9yKSAodm9pZCAqLCBzdHJ1Y3Qga21lbV9jYWNoZSAqLCB1bnNpZ25lZCBsb25n KTsKIAorCS8qIHJlbG9hY3RvciBmdW5jdGlvbiAqLworCWludCAoKnJlbG9jYXRvcikgKHZvaWQg Kiwgdm9pZCAqLCBzdHJ1Y3Qga21lbV9jYWNoZSAqLAorCQkJICB1bnNpZ25lZCBsb25nLCB1bnNp Z25lZCBsb25nKTsKKwl1bnNpZ25lZCBsb25nIHJlbG9jYXRvcl9wcml2YXRlOworCiAvKiA1KSBj YWNoZSBjcmVhdGlvbi9yZW1vdmFsICovCiAJY29uc3QgY2hhciAqbmFtZTsKIAlzdHJ1Y3QgbGlz dF9oZWFkIG5leHQ7CkBAIC00MzEsNiArNDQwLDkgQEAKIAlhdG9taWNfdCBmcmVlaGl0OwogCWF0 b21pY190IGZyZWVtaXNzOwogI2VuZGlmCisKKwlzaXplX3QgbWV0YV9kYXRhX3NpemU7CisKICNp ZiBERUJVRwogCS8qCiAJICogSWYgZGVidWdnaW5nIGlzIGVuYWJsZWQsIHRoZW4gdGhlIGFsbG9j YXRvciBjYW4gYWRkIGFkZGl0aW9uYWwKQEAgLTY3Myw2ICs2ODUsMTUgQEAKIAkubmFtZSA9ICJr bWVtX2NhY2hlIiwKIH07CiAKKy8qIGFsbG9jYXRvcnMgbWlnaHQgbmVlZCB0aGlzLiAgSW4gcGFy dGljdWxhciwgdGhlIGhhbmRsZSBhbGxvY2F0b3IKKyAqIHVzZXMgdGhpcyB0byBsb2NhdGUgdGhl IGhhbmRsZV90YXJnZXQuCisgKi8KK3Vuc2lnbmVkIGxvbmcga21lbV9jYWNoZXBfcmVsb2NhdG9y X3ByaXZhdGUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCkgeworCXJldHVybiBjYWNoZXAtPnJl bG9jYXRvcl9wcml2YXRlOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChrbWVtX2NhY2hlcF9yZWxv Y2F0b3JfcHJpdmF0ZSk7CisKICNkZWZpbmUgQkFEX0FMSUVOX01BR0lDIDB4MDEwMjAzMDR1bAog CiAjaWZkZWYgQ09ORklHX0xPQ0tERVAKQEAgLTc5OCw5ICs4MTksMTQgQEAKIAlyZXR1cm4gX19m aW5kX2dlbmVyYWxfY2FjaGVwKHNpemUsIGdmcGZsYWdzKTsKIH0KIAotc3RhdGljIHNpemVfdCBz bGFiX21nbXRfc2l6ZShzaXplX3QgbnJfb2Jqcywgc2l6ZV90IGFsaWduKQorc3RhdGljIHNpemVf dCBzbGFiX21nbXRfc2l6ZShzaXplX3QgbnJfb2Jqcywgc2l6ZV90IGFsaWduLAorCQkJICAgICBz aXplX3QgbWV0YV9kYXRhX3NpemUpCiB7Ci0JcmV0dXJuIEFMSUdOKHNpemVvZihzdHJ1Y3Qgc2xh YikrbnJfb2JqcypzaXplb2Yoa21lbV9idWZjdGxfdCksIGFsaWduKTsKKwlzaXplX3QgcmVzMSwg cmVzMjsKKwlyZXMxID0gc2l6ZW9mKHN0cnVjdCBzbGFiKStucl9vYmpzKnNpemVvZihrbWVtX2J1 ZmN0bF90KSsKKwkJCW5yX29ianMqbWV0YV9kYXRhX3NpemU7CisJcmVzMiA9IEFMSUdOKHJlczEs IGFsaWduKTsKKwlyZXR1cm4gcmVzMjsKIH0KIAogLyoKQEAgLTgwOCw3ICs4MzQsNyBAQAogICov CiBzdGF0aWMgdm9pZCBjYWNoZV9lc3RpbWF0ZSh1bnNpZ25lZCBsb25nIGdmcG9yZGVyLCBzaXpl X3QgYnVmZmVyX3NpemUsCiAJCQkgICBzaXplX3QgYWxpZ24sIGludCBmbGFncywgc2l6ZV90ICps ZWZ0X292ZXIsCi0JCQkgICB1bnNpZ25lZCBpbnQgKm51bSkKKwkJCSAgIHVuc2lnbmVkIGludCAq bnVtLCBzaXplX3QgbWV0YV9kYXRhX3NpemUpCiB7CiAJaW50IG5yX29ianM7CiAJc2l6ZV90IG1n bXRfc2l6ZTsKQEAgLTg0NSwyMSArODcxLDMxIEBACiAJCSAqIGludG8gYWNjb3VudC4KIAkJICov CiAJCW5yX29ianMgPSAoc2xhYl9zaXplIC0gc2l6ZW9mKHN0cnVjdCBzbGFiKSkgLwotCQkJICAo YnVmZmVyX3NpemUgKyBzaXplb2Yoa21lbV9idWZjdGxfdCkpOworCQkJICAoYnVmZmVyX3NpemUg KyBzaXplb2Yoa21lbV9idWZjdGxfdCkgKworCQkJICAgbWV0YV9kYXRhX3NpemUpOwogCiAJCS8q CiAJCSAqIFRoaXMgY2FsY3VsYXRlZCBudW1iZXIgd2lsbCBiZSBlaXRoZXIgdGhlIHJpZ2h0CiAJ CSAqIGFtb3VudCwgb3Igb25lIGdyZWF0ZXIgdGhhbiB3aGF0IHdlIHdhbnQuCiAJCSAqLwotCQlp ZiAoc2xhYl9tZ210X3NpemUobnJfb2JqcywgYWxpZ24pICsgbnJfb2JqcypidWZmZXJfc2l6ZQor CQlpZiAoc2xhYl9tZ210X3NpemUobnJfb2JqcywgYWxpZ24sIG1ldGFfZGF0YV9zaXplKSArCisJ CSAgICBucl9vYmpzKmJ1ZmZlcl9zaXplCiAJCSAgICAgICA+IHNsYWJfc2l6ZSkKIAkJCW5yX29i anMtLTsKIAogCQlpZiAobnJfb2JqcyA+IFNMQUJfTElNSVQpCiAJCQlucl9vYmpzID0gU0xBQl9M SU1JVDsKIAotCQltZ210X3NpemUgPSBzbGFiX21nbXRfc2l6ZShucl9vYmpzLCBhbGlnbik7CisJ CW1nbXRfc2l6ZSA9IHNsYWJfbWdtdF9zaXplKG5yX29ianMsIGFsaWduLAorCQkJCQkgICBtZXRh X2RhdGFfc2l6ZSk7CiAJfQorCisJaWYgKG1ldGFfZGF0YV9zaXplICE9IDApIHsKKwkJcHJpbnRr IChLRVJOX0lORk8gImNhY2hlX2VzdGltYXRlOiBtZ210X3NpemUgPSAlZCwgIgorCQkJIm5yX29i anM9JWQsIG1ldGFfZGF0YV9zaXplPSVkXG4iLCBtZ210X3NpemUsCisJCQlucl9vYmpzLCBtZXRh X2RhdGFfc2l6ZSk7CisJfQorCiAJKm51bSA9IG5yX29ianM7CiAJKmxlZnRfb3ZlciA9IHNsYWJf c2l6ZSAtIG5yX29ianMqYnVmZmVyX3NpemUgLSBtZ210X3NpemU7CiB9CkBAIC0xNDYzLDE1ICsx NDk5LDE3IEBACiAKIAlmb3IgKG9yZGVyID0gMDsgb3JkZXIgPCBNQVhfT1JERVI7IG9yZGVyKysp IHsKIAkJY2FjaGVfZXN0aW1hdGUob3JkZXIsIGNhY2hlX2NhY2hlLmJ1ZmZlcl9zaXplLAotCQkJ Y2FjaGVfbGluZV9zaXplKCksIDAsICZsZWZ0X292ZXIsICZjYWNoZV9jYWNoZS5udW0pOworCQkJ Y2FjaGVfbGluZV9zaXplKCksIDAsICZsZWZ0X292ZXIsICZjYWNoZV9jYWNoZS5udW0sCisJCQkg ICAgICAgMCk7CiAJCWlmIChjYWNoZV9jYWNoZS5udW0pCiAJCQlicmVhazsKIAl9CiAJQlVHX09O KCFjYWNoZV9jYWNoZS5udW0pOwogCWNhY2hlX2NhY2hlLmdmcG9yZGVyID0gb3JkZXI7CiAJY2Fj aGVfY2FjaGUuY29sb3VyID0gbGVmdF9vdmVyIC8gY2FjaGVfY2FjaGUuY29sb3VyX29mZjsKLQlj YWNoZV9jYWNoZS5zbGFiX3NpemUgPSBBTElHTihjYWNoZV9jYWNoZS5udW0gKiBzaXplb2Yoa21l bV9idWZjdGxfdCkgKwotCQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc2xhYiksIGNhY2hlX2xpbmVf c2l6ZSgpKTsKKwljYWNoZV9jYWNoZS5zbGFiX3NpemUgPSBzbGFiX21nbXRfc2l6ZShjYWNoZV9j YWNoZS5udW0sCisJCQkJCSAgICAgICBjYWNoZV9saW5lX3NpemUoKSwKKwkJCQkJICAgICAgIGNh Y2hlX2NhY2hlLm1ldGFfZGF0YV9zaXplKTsKIAogCS8qIDIrMykgY3JlYXRlIHRoZSBrbWFsbG9j IGNhY2hlcyAqLwogCXNpemVzID0gbWFsbG9jX3NpemVzOwpAQCAtMTk5MywyMiArMjAzMSwyNSBA QAogCXNpemVfdCBsZWZ0X292ZXIgPSAwOwogCWludCBnZnBvcmRlcjsKIAotCWZvciAoZ2Zwb3Jk ZXIgPSAwOyBnZnBvcmRlciA8PSBLTUFMTE9DX01BWF9PUkRFUjsgZ2Zwb3JkZXIrKykgeworCWZv ciAoZ2Zwb3JkZXIgPSAoZmxhZ3MgJiBTTEFCX0hVR0VfUEFHRSk/SFVHRVRMQl9QQUdFX09SREVS OjA7CisJICAgICBnZnBvcmRlciA8PSBLTUFMTE9DX01BWF9PUkRFUjsgZ2Zwb3JkZXIrKykgewog CQl1bnNpZ25lZCBpbnQgbnVtOwogCQlzaXplX3QgcmVtYWluZGVyOwogCi0JCWNhY2hlX2VzdGlt YXRlKGdmcG9yZGVyLCBzaXplLCBhbGlnbiwgZmxhZ3MsICZyZW1haW5kZXIsICZudW0pOworCQlj YWNoZV9lc3RpbWF0ZShnZnBvcmRlciwgc2l6ZSwgYWxpZ24sIGZsYWdzLCAmcmVtYWluZGVyLCAm bnVtLAorCQkJICAgICAgIGNhY2hlcC0+bWV0YV9kYXRhX3NpemUpOwogCQlpZiAoIW51bSkKIAkJ CWNvbnRpbnVlOwogCi0JCWlmIChmbGFncyAmIENGTEdTX09GRl9TTEFCKSB7CisJCWlmIChmbGFn cyAmIENGTEdTX09GRl9TTEFCICYmIGNhY2hlcC0+bnVtKSB7CiAJCQkvKgogCQkJICogTWF4IG51 bWJlciBvZiBvYmpzLXBlci1zbGFiIGZvciBjYWNoZXMgd2hpY2gKIAkJCSAqIHVzZSBvZmYtc2xh YiBzbGFicy4gTmVlZGVkIHRvIGF2b2lkIGEgcG9zc2libGUKIAkJCSAqIGxvb3BpbmcgY29uZGl0 aW9uIGluIGNhY2hlX2dyb3coKS4KIAkJCSAqLwogCQkJb2Zmc2xhYl9saW1pdCA9IHNpemUgLSBz aXplb2Yoc3RydWN0IHNsYWIpOwotCQkJb2Zmc2xhYl9saW1pdCAvPSBzaXplb2Yoa21lbV9idWZj dGxfdCk7CisJCQlvZmZzbGFiX2xpbWl0IC89IChzaXplb2Yoa21lbV9idWZjdGxfdCkgKworCQkJ CQkgIGNhY2hlcC0+bWV0YV9kYXRhX3NpemUpOwogCiAgCQkJaWYgKG51bSA+IG9mZnNsYWJfbGlt aXQpCiAJCQkJYnJlYWs7CkBAIC0yMTI1LDkgKzIxNjYsMTMgQEAKICAqIGFzIGRhdmVtLgogICov CiBzdHJ1Y3Qga21lbV9jYWNoZSAqCi1rbWVtX2NhY2hlX2NyZWF0ZSAoY29uc3QgY2hhciAqbmFt ZSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwKLQl1bnNpZ25lZCBsb25nIGZsYWdzLAotCXZv aWQgKCpjdG9yKSh2b2lkKiwgc3RydWN0IGttZW1fY2FjaGUgKiwgdW5zaWduZWQgbG9uZykpCitr bWVtX2NhY2hlX2NyZWF0ZV9yZWxvY2F0YWJsZSAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNp emUsIHNpemVfdCBhbGlnbiwKKyAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLAorICAgICAgIHZv aWQgKCpjdG9yKSh2b2lkKiwgc3RydWN0IGttZW1fY2FjaGUgKiwgdW5zaWduZWQgbG9uZyksCisg ICAgICAgaW50ICgqcmVsb2NhdG9yKSh2b2lkKiwgdm9pZCosIHN0cnVjdCBrbWVtX2NhY2hlICos CisJCQl1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKSwKKyAgICAgICB1bnNpZ25lZCBsb25n IHJlbG9jYXRvcl9wcml2YXRlLAorICAgICAgIHNpemVfdCAgbWV0YV9kYXRhX3NpemUpCiB7CiAJ c2l6ZV90IGxlZnRfb3Zlciwgc2xhYl9zaXplLCByYWxpZ247CiAJc3RydWN0IGttZW1fY2FjaGUg KmNhY2hlcCA9IE5VTEwsICpwYzsKQEAgLTIyNjAsNiArMjMwNSwxNCBAQAogCWlmICghY2FjaGVw KQogCQlnb3RvIG9vcHM7CiAKKwkvKiBOZWVkIHRoaXMgZWFybHkgdG8gY29tcHV0ZSBzbGFiIHNp emUgcHJvcGVybHkuICovCisJY2FjaGVwLT5tZXRhX2RhdGFfc2l6ZSA9IG1ldGFfZGF0YV9zaXpl OworCisJaWYgKG1ldGFfZGF0YV9zaXplKSB7CisJCXByaW50ayAoS0VSTl9JTkZPICJrbWVtX2Nh Y2hlX2NyZWF0ZSBtZXRhX2RhdGFfc2l6ZT0lZFxuIiwKKwkJCW1ldGFfZGF0YV9zaXplKTsKKwl9 CisKICNpZiBERUJVRwogCWNhY2hlcC0+b2JqX3NpemUgPSBzaXplOwogCkBAIC0yMzE0LDkgKzIz NjcsMTAgQEAKIAkJY2FjaGVwID0gTlVMTDsKIAkJZ290byBvb3BzOwogCX0KLQlzbGFiX3NpemUg PSBBTElHTihjYWNoZXAtPm51bSAqIHNpemVvZihrbWVtX2J1ZmN0bF90KQotCQkJICArIHNpemVv ZihzdHJ1Y3Qgc2xhYiksIGFsaWduKTsKIAorCXNsYWJfc2l6ZSA9IHNsYWJfbWdtdF9zaXplKGNh Y2hlcC0+bnVtLAorCQkJCSAgIGFsaWduLAorCQkJCSAgIGNhY2hlcC0+bWV0YV9kYXRhX3NpemUp OwogCS8qCiAJICogSWYgdGhlIHNsYWIgaGFzIGJlZW4gcGxhY2VkIG9mZi1zbGFiLCBhbmQgd2Ug aGF2ZSBlbm91Z2ggc3BhY2UgdGhlbgogCSAqIG1vdmUgaXQgb24tc2xhYi4gVGhpcyBpcyBhdCB0 aGUgZXhwZW5zZSBvZiBhbnkgZXh0cmEgY29sb3VyaW5nLgpAQCAtMjMyOCw4ICsyMzgyLDggQEAK IAogCWlmIChmbGFncyAmIENGTEdTX09GRl9TTEFCKSB7CiAJCS8qIHJlYWxseSBvZmYgc2xhYi4g Tm8gbmVlZCBmb3IgbWFudWFsIGFsaWdubWVudCAqLwotCQlzbGFiX3NpemUgPQotCQkgICAgY2Fj aGVwLT5udW0gKiBzaXplb2Yoa21lbV9idWZjdGxfdCkgKyBzaXplb2Yoc3RydWN0IHNsYWIpOwor CQlzbGFiX3NpemUgPSBzbGFiX21nbXRfc2l6ZShjYWNoZXAtPm51bSwgMSwKKwkJCQkJICAgY2Fj aGVwLT5tZXRhX2RhdGFfc2l6ZSk7CiAJfQogCiAJY2FjaGVwLT5jb2xvdXJfb2ZmID0gY2FjaGVf bGluZV9zaXplKCk7CkBAIC0yMzU4LDYgKzI0MTIsOCBAQAogCX0KIAljYWNoZXAtPmN0b3IgPSBj dG9yOwogCWNhY2hlcC0+bmFtZSA9IG5hbWU7CisJY2FjaGVwLT5yZWxvY2F0b3IgPSByZWxvY2F0 b3I7CisJY2FjaGVwLT5yZWxvY2F0b3JfcHJpdmF0ZSA9IHJlbG9jYXRvcl9wcml2YXRlOwogCiAJ aWYgKHNldHVwX2NwdV9jYWNoZShjYWNoZXApKSB7CiAJCV9fa21lbV9jYWNoZV9kZXN0cm95KGNh Y2hlcCk7CkBAIC0yMzc0LDcgKzI0MzAsNyBAQAogCW11dGV4X3VubG9jaygmY2FjaGVfY2hhaW5f bXV0ZXgpOwogCXJldHVybiBjYWNoZXA7CiB9Ci1FWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfY3Jl YXRlKTsKK0VYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9jcmVhdGVfcmVsb2NhdGFibGUpOwogCiAj aWYgREVCVUcKIHN0YXRpYyB2b2lkIGNoZWNrX2lycV9vZmYodm9pZCkKQEAgLTI1ODIsNiArMjYz OCwxMiBAQAogICoga21lbV9maW5kX2dlbmVyYWxfY2FjaGVwIHRpbGwgdGhlIGluaXRpYWxpemF0 aW9uIGlzIGNvbXBsZXRlLgogICogSGVuY2Ugd2UgY2Fubm90IGhhdmUgc2xhYnBfY2FjaGUgc2Ft ZSBhcyB0aGUgb3JpZ2luYWwgY2FjaGUuCiAgKi8KKworc3RhdGljIGlubGluZSBrbWVtX2J1ZmN0 bF90ICpzbGFiX2J1ZmN0bChzdHJ1Y3Qgc2xhYiAqc2xhYnApCit7CisJcmV0dXJuIChrbWVtX2J1 ZmN0bF90ICopIChzbGFicCArIDEpOworfQorCiBzdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jX3Ns YWJtZ210KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHZvaWQgKm9ianAsCiAJCQkJICAgaW50 IGNvbG91cl9vZmYsIGdmcF90IGxvY2FsX2ZsYWdzLAogCQkJCSAgIGludCBub2RlaWQpCkBAIC0y NTk4LDE4ICsyNjYwLDUxIEBACiAJCXNsYWJwID0gb2JqcCArIGNvbG91cl9vZmY7CiAJCWNvbG91 cl9vZmYgKz0gY2FjaGVwLT5zbGFiX3NpemU7CiAJfQorCisJbWVtc2V0KHNsYWJwLCAwLCBjYWNo ZXAtPnNsYWJfc2l6ZSk7CisKIAlzbGFicC0+aW51c2UgPSAwOwogCXNsYWJwLT5jb2xvdXJvZmYg PSBjb2xvdXJfb2ZmOwogCXNsYWJwLT5zX21lbSA9IG9ianAgKyBjb2xvdXJfb2ZmOwogCXNsYWJw LT5ub2RlaWQgPSBub2RlaWQ7CisJc2xhYnAtPm1ldGFfZGF0YV9zdGFydCA9ICh1bnNpZ25lZCBs b25nKXNsYWJfYnVmY3RsKHNsYWJwKSArCisJCQlzaXplb2Yoa21lbV9idWZjdGxfdCkqY2FjaGVw LT5udW07CisJc2xhYnAtPm1ldGFfZGF0YV9lbmQgPSBzbGFicC0+bWV0YV9kYXRhX3N0YXJ0ICsg Y2FjaGVwLT5tZXRhX2RhdGFfc2l6ZSAqIGNhY2hlcC0+bnVtOwogCXJldHVybiBzbGFicDsKIH0K IAotc3RhdGljIGlubGluZSBrbWVtX2J1ZmN0bF90ICpzbGFiX2J1ZmN0bChzdHJ1Y3Qgc2xhYiAq c2xhYnApCi17Ci0JcmV0dXJuIChrbWVtX2J1ZmN0bF90ICopIChzbGFicCArIDEpOworc3RhdGlj IGlubGluZSB2b2lkICpzbGFiX21ldGFfZGF0YShjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2Fj aGVwLAorCQkJCSAgIHN0cnVjdCBzbGFiICpzbGFicCkgeworCXJldHVybiAodm9pZCAqKXNsYWJf YnVmY3RsKHNsYWJwKSArCisJCQljYWNoZXAtPm51bSAqIHNpemVvZihrbWVtX2J1ZmN0bF90KTsK IH0KIAordm9pZCAqa21lbV9jYWNoZV9nZXRfbWV0YWRhdGEoY29uc3Qgc3RydWN0IGttZW1fY2Fj aGUgKmNhY2hlLAorCQkJICAgICAgdm9pZCAqb2JqKSB7CisJaWYgKGNhY2hlLT5tZXRhX2RhdGFf c2l6ZSA9PSAwKSB7CisJCXJldHVybiBOVUxMOworCX0gZWxzZSB7CisJCXN0cnVjdCBzbGFiICpz bGFiID0gdmlydF90b19zbGFiKG9iaik7CisJCWludCBpbmQgPSBvYmpfdG9faW5kZXgoY2FjaGUs IHNsYWIsIG9iaik7CisJCXZvaWQgKnJldDsKKworCQlyZXQgPSBzbGFiX21ldGFfZGF0YShjYWNo ZSwgc2xhYikgKworCQkJCWluZCAqIGNhY2hlLT5tZXRhX2RhdGFfc2l6ZTsKKwkJCisJCWlmICgo dW5zaWduZWQgbG9uZylyZXQgPCBzbGFiLT5tZXRhX2RhdGFfc3RhcnQgfHwKKwkJICAgICh1bnNp Z25lZCBsb25nKXJldCA+PSBzbGFiLT5tZXRhX2RhdGFfZW5kKSB7CisJCQlwcmludGsgKEtFUk5f RVJSICJrbWVtX2NhY2hlX2dldF9tZXRhZGF0YTogQmFkIHJldCBpbmQ9JWQgcmV0PSVwIHNsYWI9 JXBcbiIsIGluZCwgcmV0LCBzbGFiKTsKKwkJfQorCisJCUJVR19PTigodW5zaWduZWQgbG9uZyly ZXQgPCBzbGFiLT5tZXRhX2RhdGFfc3RhcnQpOworCQlCVUdfT04oKHVuc2lnbmVkIGxvbmcpcmV0 ID49IHNsYWItPm1ldGFfZGF0YV9lbmQpOworCisJCXJldHVybiByZXQ7CisJfQorfQorCisKKwog c3RhdGljIHZvaWQgY2FjaGVfaW5pdF9vYmpzKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsCiAJ CQkgICAgc3RydWN0IHNsYWIgKnNsYWJwKQogewpAQCAtMjY4MSw4ICsyNzc2LDEwIEBACiAJc2xh Yl9idWZjdGwoc2xhYnApW3NsYWJwLT5mcmVlXSA9IEJVRkNUTF9GUkVFOwogCVdBUk5fT04oc2xh YnAtPm5vZGVpZCAhPSBub2RlaWQpOwogI2VuZGlmCisJc2xhYl9idWZjdGwoc2xhYnApW3NsYWJw LT5mcmVlXSA9IEJVRkNUTF9BQ1RJVkU7CiAJc2xhYnAtPmZyZWUgPSBuZXh0OwogCisKIAlyZXR1 cm4gb2JqcDsKIH0KIApAQCAtNDAxMyw2ICs0MTEwLDE0MyBAQAogCX0KIH0KIAorLyoKKyAqIEF0 dGVtcHQgdG8gdGFrZSB0aGUgbmV4dCB0byBiZSByZXVzZWQgc2xhYiBhbmQgZnJlZSBpdCB1cC4K KyAqLwordm9pZCBkZWZyYWdfY2FjaGVfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBp bnQgbm9kZSkgeworCXN0cnVjdCBrbWVtX2xpc3QzICpsMyA9IGNhY2hlcC0+bm9kZWxpc3RzW25v ZGVdOworCXN0cnVjdCBzbGFiICpzbGFicDsKKwlrbWVtX2J1ZmN0bF90ICpjdGxwOworCWludCBp OworCXZvaWQgKnRhcmdldHAgPSBOVUxMOworCisJc2xhYnAgPSBsaXN0X2VudHJ5KGwzLT5zbGFi c19wYXJ0aWFsLm5leHQsCisJCQkgICBzdHJ1Y3Qgc2xhYiwgbGlzdCk7CisKKwkvKiBtYXliZSB0 aGlzIHdpbGwgYmUgY2xlYXIgYnkgdGhlIG5leHQgdGltZSBhcnJvdW5kLiAqLworCWxpc3RfZGVs KCZzbGFicC0+bGlzdCk7CisJbGlzdF9hZGRfdGFpbCgmc2xhYnAtPmxpc3QsICZsMy0+c2xhYnNf cGFydGlhbCk7CisKKworCWZvciAoaSA9IDA7IGkgPCBjYWNoZXAtPm51bTsgaSsrKSB7CisJCS8q IFRoaXMgcmlza3MgdXNpbmcgdXAgdGhlIGhvdCBjcHUgcGFnZXMgb24gdGhpbmdzCisJCSAqIHRo YXQgYXJlIG9sZCBhbmQgc3RhbGUuCisJCSAqLworCQlpZiAodGFyZ2V0cCA9PSBOVUxMKSB7CisJ CQkvKgorCQkJICogV2UgcmlzayB0aHJhc2hpbmcgb24gdGhlIHNwaW4gbG9jaywgYnV0IHdoYXQK KwkJCSAqIGVsc2UgY2FuIHdlIGRvPyAgV2UgbmVlZCB0byBiZSBhYmxlIHRvIGFsbG9jYXRlCisJ CQkgKiBuZXcgb2JqZWN0cy4KKwkJCSAqLworCQkJc3Bpbl91bmxvY2soJmwzLT5saXN0X2xvY2sp OworCQkJdGFyZ2V0cCA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZShjYWNoZXAsCisJCQkJCQlHRlBf QVRPTUlDICYgfkdGUF9USElTTk9ERSwKKwkJCQkJCW5vZGUpOworCQkJc3Bpbl9sb2NrKCZsMy0+ bGlzdF9sb2NrKTsKKwkJCWlmICh0YXJnZXRwID09IE5VTEwpIHsKKwkJCQlwcmludGsgKEtFUk5f REVCVUcKKwkJCQkJImRlZnJhZ2VfY2FjaGVfbm9kZTogQ291bGRuJ3QgYWxsb2NhdGUgdGFyZ2V0 LlxuIik7CisJCQkJLyogV1RGPyBDb3VsZG4ndCBnZXQgbWVtb3J5LiAqLworCQkJCWJyZWFrOwor CQkJfQorCisJCX0KKworCQlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmbDMtPnNsYWJzX3BhcnRp YWwpKSkgeworCQkJcHJpbnRrIChLRVJOX0RFQlVHICJkZWZyYWdfY2FjaGVfbm9kZTogcGFydGlh bCBsaXN0IGVtcHR5LlxuIik7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFRoaXMgbWF5 IG5vdCBiZSB0aGUgc2FtZSBzbGFiIGFzIHdlIHNhdyBsYXN0IHRpbWUsCisJCSAqIGJ1dCB0aGF0 IGlzIGEgcmlzayB3ZSB3aWxsIGp1c3QgaGF2ZSB0byB0YWtlLgorCQkgKiBUaGluZ3Mgc2hvdWxk IHN0aWxsIGJlIGNvbnNvbGlkYXRlZCwgYnV0IHdlIGxpa2VseQorCQkgKiB3b24ndCBmcmVlIGFu eXRoaW5nIGluIHRoaXMgcGFzcy4KKwkJICovCisJCXNsYWJwID0gbGlzdF9lbnRyeShsMy0+c2xh YnNfcGFydGlhbC5wcmV2LAorCQkJCSAgIHN0cnVjdCBzbGFiLCBsaXN0KTsKKworCQljdGxwID0g c2xhYl9idWZjdGwoc2xhYnApOworCisJCWlmIChjdGxwW2ldID09IEJVRkNUTF9BQ1RJVkUpIHsK KwkJCXZvaWQgKm9ianAgPSBpbmRleF90b19vYmooY2FjaGVwLCBzbGFicCwgaSk7CisKKwkJCS8q IFRoZSByZWxvY2F0b3IgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlCisJCQkgKiB0aGUg b2JqZWN0IGRvZXNuJ3QgZGlzYXBlZXIgZnJvbSBvdXQgZnJvbQorCQkJICogdW5kZXIgaXQuICBU aGUgbWVtb3J5IGl0c2VsZiB3b24ndCBiZSBmcmVlZCwKKwkJCSAqIGJ1dCB0aGUgb2JqZWN0IG1p Z2h0IGJlIG9uIHRoZSBjcHUgaG90IGxpc3QgYW5kCisJCQkgKiBtaWdodCBiZSByZXVzZWQuCisJ CQkgKi8KKwkJCWludCByZWwgPSBjYWNoZXAtPnJlbG9jYXRvcihvYmpwLCB0YXJnZXRwLCBjYWNo ZXAsCisJCQkJCQkgICAgY2FjaGVwLT5yZWxvY2F0b3JfcHJpdmF0ZSwKKwkJCQkJCSAgICBvYmpf c2l6ZShjYWNoZXApKTsKKwkJCXN3aXRjaCAocmVsKSB7CisJCQkJY2FzZSBSRUxPQ0FURV9TVUND RVNTX1JDVToKKwkJCQkJLyogV2UndmUgbW92ZWQgdGhlIGNvcHksIGJ1dCB3ZQorCQkJCQkgKiBj YW4ndCBmcmVlIHRoZSBvbGQgb25lIHJpZ2h0IGF3YXkKKwkJCQkJICogYmVjYXVzZSBpdCBtaWdo dCBzdGlsbCBiZSBpbiB1c2UuCisJCQkJCSAqLworCQkJCQkvKnByaW50ayAoS0VSTl9ERUJVRwor CQkJCQkJImRlZnJhZ19jYWNoZV9ub2RlOiAiCisJCQkJCQkiUkNVIHN1Y2Nlc3NcbiIpOyAqLwor CQkJCQl0YXJnZXRwID0gTlVMTDsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIFJFTE9DQVRFX1NV Q0NFU1M6CisJCQkJCS8qIHJlbG9jYXRpb24gc3VjY2VlZGVkLiBvYmpwIGlzIG5vdworCQkJCQkg KiBmcmVlLiAgdHJhZ2V0cCBpcyB1c2VkLgorCQkJCQkgKi8KKwkJCQkJLypwcmludGsgKEtFUk5f REVCVUcgImRlZnJhZ19jYWNoZV9ub2RlOiAiCisJCQkJCSAgInJlbG9jYXRlZCBvYmplY3QgJWQu XG4iLCBpKTsgKi8KKwkJCQkJdGFyZ2V0cCA9IE5VTEw7CisJCQkJCWN0bHBbaV0gPSBzbGFicC0+ ZnJlZTsKKwkJCQkJc2xhYnAtPmZyZWUgPSBpOworCQkJCQlsMy0+ZnJlZV9vYmplY3RzKys7CisJ CQkJCXNsYWJwLT5pbnVzZS0tOworCQkJCQlpZiAoc2xhYnAtPmludXNlID09IDApIHsKKwkJCQkJ CWxpc3RfZGVsKCZzbGFicC0+bGlzdCk7CisJCQkJCQlpZiAobDMtPmZyZWVfb2JqZWN0cyA+IGwz LT5mcmVlX2xpbWl0KXsKKwkJCQkJCQlsMy0+ZnJlZV9vYmplY3RzIC09CisJCQkJCQkJCQljYWNo ZXAtPm51bTsKKwkJCQkJCQlzbGFiX2Rlc3Ryb3koY2FjaGVwLCBzbGFicCk7CisJCQkJCQl9IGVs c2UgeworCQkJCQkJCWxpc3RfYWRkKCZzbGFicC0+bGlzdCwKKwkJCQkJCQkJICZsMy0+c2xhYnNf ZnJlZSk7CisJCQkJCQl9CisJCQkJCQlnb3RvIGRvbmU7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisK KwkJCQljYXNlIFJFTE9DQVRFX0ZBSUxVUkU6CisJCQkJCS8qcHJpbnRrIChLRVJOX0RFQlVHCisJ CQkJCQkiZGVmcmFnX2NhY2hlX25vZGU6ICIKKwkJCQkJCSJmYWxlZCB0byByZWxvY2F0ZWQgIgor CQkJCQkJIm9iamVjdCAlZC5cbiIsIGkpOyAqLworCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6 CisJCQkJCXByaW50ayAoS0VSTl9ERUJVRworCQkJCQkJImRlZnJhZ19jYWNoZV9ub2RlOiAiCisJ CQkJCQkidW5rbm93biByZXN1bHQgJWRcbiIsCisJCQkJCQlyZWwpOworCQkJCQlicmVhazsKKwkJ CX0KKwkJfSBlbHNlIHsKKwkJCS8qcHJpbnRrIChLRVJOX0RFQlVHICJkZWZyYWdfY2FjaGVfbm9k ZTogIgorCQkJICAib2JqZWN0ICVkIG5vdCBhY3RpdmUuXG4iLCBpKTsgKi8KKworCQl9CisKKwl9 CisKKyBkb25lOgorCWlmICh0YXJnZXRwKSB7CisJCXNwaW5fdW5sb2NrKCZsMy0+bGlzdF9sb2Nr KTsKKwkJa21lbV9jYWNoZV9mcmVlKGNhY2hlcCwgdGFyZ2V0cCk7CisJCXNwaW5fbG9jaygmbDMt Pmxpc3RfbG9jayk7CisJfQorfQorCiAvKioKICAqIGNhY2hlX3JlYXAgLSBSZWNsYWltIG1lbW9y eSBmcm9tIGNhY2hlcy4KICAqIEB3OiB3b3JrIGRlc2NyaXB0b3IKQEAgLTQwMzcsNiArNDI3MSw3 IEBACiAJCS8qIEdpdmUgdXAuIFNldHVwIHRoZSBuZXh0IGl0ZXJhdGlvbi4gKi8KIAkJZ290byBv dXQ7CiAKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2VhcmNocCwgJmNhY2hlX2NoYWluLCBuZXh0 KSB7CiAJCWNoZWNrX2lycV9vbigpOwogCkBAIC00MDQ3LDYgKzQyODIsMjggQEAKIAkJICovCiAJ CWwzID0gc2VhcmNocC0+bm9kZWxpc3RzW25vZGVdOwogCisJCS8qIFNlZSBpZiBpdCdzIHdvcnRo IHRyeWluZyB0byBmcmVlIHVwIGEgc2xhYiBieSBtb3ZpbmcgYWxsIG9mCisJCSAqIGl0J3MgZW50 cmllcyB0byBvdGhlciBzbGFicy4gVGhlcmUgaXMgYSBwcmV0dHkgZ29vZAorCQkgKiBjaGFuY2Ug dGhhdCBpZiB0aGUgb2xkZXN0IHBhcnRpYWwgc2xhYiBoYXMgbGVzcyB0aGFuCisJCSAqIDEvNCBv ZiB0aGUgdG90YWwgZnJlZSBvYmplY3RzIHRoZW4gd2UgY2FuIHJlYWxsb2NhdGUgdGhlbS4KKwkJ ICogSG93ZXZlciwgZG9uJ3QgdHJ5IGlmIHRoZSBzbGFiIGlzIG1vcmUgdGhhbiA1MCUgZnVsbC4K KwkJICovCisJCWlmICh1bmxpa2VseShzZWFyY2hwLT5yZWxvY2F0b3IpKSB7CisJCQlzcGluX2xv Y2tfaXJxKCZsMy0+bGlzdF9sb2NrKTsKKwkJCWlmICghbGlzdF9lbXB0eSgmbDMtPnNsYWJzX3Bh cnRpYWwpKSB7CisJCQkJc3RydWN0IHNsYWIgKnNsYWJwID0KKwkJCQkgICAgbGlzdF9lbnRyeShs My0+c2xhYnNfcGFydGlhbC5uZXh0LAorCQkJCQkgICAgICAgc3RydWN0IHNsYWIsIGxpc3QpOwor CQkJCWlmIChzbGFicC0+aW51c2UgPAorCQkJCSAgICBsMy0+ZnJlZV9vYmplY3RzIC8gNCAmJgor CQkJCSAgICBzbGFicC0+aW51c2UgPAorCQkJCSAgICBzZWFyY2hwLT5udW0gLyAyKSB7CisJCQkJ CWRlZnJhZ19jYWNoZV9ub2RlKHNlYXJjaHAsIG5vZGUpOworCQkJCX0KKwkJCX0KKwkJCXNwaW5f dW5sb2NrX2lycSgmbDMtPmxpc3RfbG9jayk7CisJCX0KKwogCQlyZWFwX2FsaWVuKHNlYXJjaHAs IGwzKTsKIAogCQlkcmFpbl9hcnJheShzZWFyY2hwLCBsMywgY3B1X2NhY2hlX2dldChzZWFyY2hw KSwgMCwgbm9kZSk7CkBAIC00MDgyLDYgKzQzMzksMjUgQEAKIAlzY2hlZHVsZV9kZWxheWVkX3dv cmsod29yaywgcm91bmRfamlmZmllc19yZWxhdGl2ZShSRUFQVElNRU9VVF9DUFVDKSk7CiB9CiAK Kwordm9pZCB0ZXN0X2RlZnJhZyhzdHJ1Y3Qga21lbV9jYWNoZSAqc2VhcmNocCkgeworCXN0cnVj dCBrbWVtX2xpc3QzICpsMzsKKwlpbnQgbm9kZSA9IG51bWFfbm9kZV9pZCgpOworCUJVR19PTigh c2VhcmNocC0+cmVsb2NhdG9yKTsKKworCWwzID0gc2VhcmNocC0+bm9kZWxpc3RzW25vZGVdOwor CisJc3Bpbl9sb2NrX2lycSgmbDMtPmxpc3RfbG9jayk7CisJaWYgKHVubGlrZWx5KGxpc3RfZW1w dHkoJmwzLT5zbGFic19wYXJ0aWFsKSkpIHsKKwkJcHJpbnRrIChLRVJOX0RFQlVHICJ0ZXN0X2Rl ZnJhZzogbm8gcGFydGlhbCBzbGFicy5cbiIpOworCX0gZWxzZSB7CisJCWRlZnJhZ19jYWNoZV9u b2RlKHNlYXJjaHAsIG5vZGUpOworCX0KKwlzcGluX3VubG9ja19pcnEoJmwzLT5saXN0X2xvY2sp OworfQorCitFWFBPUlRfU1lNQk9MX0dQTCh0ZXN0X2RlZnJhZyk7CisKICNpZmRlZiBDT05GSUdf UFJPQ19GUwogCiBzdGF0aWMgdm9pZCBwcmludF9zbGFiaW5mb19oZWFkZXIoc3RydWN0IHNlcV9m aWxlICptKQpAQCAtNDEyOCwxOSArNDQwNCwyNiBAQAogCW11dGV4X3VubG9jaygmY2FjaGVfY2hh aW5fbXV0ZXgpOwogfQogCi1zdGF0aWMgaW50IHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZv aWQgKnApCi17Ci0Jc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCA9IGxpc3RfZW50cnkocCwgc3Ry dWN0IGttZW1fY2FjaGUsIG5leHQpOwordm9pZCBrbWVtX2NvbXB1dGVfc3RhdHMoc3RydWN0IGtt ZW1fY2FjaGUgKmNhY2hlcCwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmZ1bGxfc2xhYnMsCisJ CSAgICAgICB1bnNpZ25lZCBsb25nICpwYXJ0aWFsX3NsYWJzLAorCQkgICAgICAgdW5zaWduZWQg bG9uZyAqcGFydGlhbF9vYmpzLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyAqZnJlZV9zbGFicywK KwkJICAgICAgIGNoYXIgKiplcnJvcikgewogCXN0cnVjdCBzbGFiICpzbGFicDsKIAl1bnNpZ25l ZCBsb25nIGFjdGl2ZV9vYmpzOwogCXVuc2lnbmVkIGxvbmcgbnVtX29ianM7CiAJdW5zaWduZWQg bG9uZyBhY3RpdmVfc2xhYnMgPSAwOwogCXVuc2lnbmVkIGxvbmcgbnVtX3NsYWJzLCBmcmVlX29i amVjdHMgPSAwLCBzaGFyZWRfYXZhaWwgPSAwOwogCWNvbnN0IGNoYXIgKm5hbWU7Ci0JY2hhciAq ZXJyb3IgPSBOVUxMOwogCWludCBub2RlOwogCXN0cnVjdCBrbWVtX2xpc3QzICpsMzsKIAorCSpm dWxsX3NsYWJzID0gMDsKKwkqcGFydGlhbF9zbGFicyA9IDA7CisJKnBhcnRpYWxfb2JqcyA9IDA7 CisJKmZyZWVfc2xhYnMgPSAwOworCiAJYWN0aXZlX29ianMgPSAwOwogCW51bV9zbGFicyA9IDA7 CiAJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgewpAQCAtNDE1MywzMCArNDQzNiw1NSBAQAog CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoc2xhYnAsICZsMy0+c2xhYnNfZnVsbCwgbGlzdCkgewog CQkJaWYgKHNsYWJwLT5pbnVzZSAhPSBjYWNoZXAtPm51bSAmJiAhZXJyb3IpCi0JCQkJZXJyb3Ig PSAic2xhYnNfZnVsbCBhY2NvdW50aW5nIGVycm9yIjsKLQkJCWFjdGl2ZV9vYmpzICs9IGNhY2hl cC0+bnVtOwotCQkJYWN0aXZlX3NsYWJzKys7CisJCQkJKmVycm9yID0gInNsYWJzX2Z1bGwgYWNj b3VudGluZyBlcnJvciI7CisJCQkoKmZ1bGxfc2xhYnMpKys7CiAJCX0KIAkJbGlzdF9mb3JfZWFj aF9lbnRyeShzbGFicCwgJmwzLT5zbGFic19wYXJ0aWFsLCBsaXN0KSB7CiAJCQlpZiAoc2xhYnAt PmludXNlID09IGNhY2hlcC0+bnVtICYmICFlcnJvcikKLQkJCQllcnJvciA9ICJzbGFic19wYXJ0 aWFsIGludXNlIGFjY291bnRpbmcgZXJyb3IiOworCQkJCSplcnJvciA9CisJCQkJICAgICJzbGFi c19wYXJ0aWFsIGludXNlIGFjY291bnRpbmcgZXJyb3IiOwogCQkJaWYgKCFzbGFicC0+aW51c2Ug JiYgIWVycm9yKQotCQkJCWVycm9yID0gInNsYWJzX3BhcnRpYWwvaW51c2UgYWNjb3VudGluZyBl cnJvciI7Ci0JCQlhY3RpdmVfb2JqcyArPSBzbGFicC0+aW51c2U7Ci0JCQlhY3RpdmVfc2xhYnMr KzsKKwkJCQkqZXJyb3IgPQorCQkJCSAgICAic2xhYnNfcGFydGlhbC9pbnVzZSBhY2NvdW50aW5n IGVycm9yIjsKKwkJCSpwYXJ0aWFsX29ianMgKz0gc2xhYnAtPmludXNlOworCQkJKCpwYXJ0aWFs X3NsYWJzKSsrOwogCQl9CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoc2xhYnAsICZsMy0+c2xhYnNf ZnJlZSwgbGlzdCkgewogCQkJaWYgKHNsYWJwLT5pbnVzZSAmJiAhZXJyb3IpCi0JCQkJZXJyb3Ig PSAic2xhYnNfZnJlZS9pbnVzZSBhY2NvdW50aW5nIGVycm9yIjsKLQkJCW51bV9zbGFicysrOwor CQkJCSplcnJvciA9ICJzbGFic19mcmVlL2ludXNlIGFjY291bnRpbmcgZXJyb3IiOworCQkJKCpm cmVlX3NsYWJzKSsrOwogCQl9Ci0JCWZyZWVfb2JqZWN0cyArPSBsMy0+ZnJlZV9vYmplY3RzOwot CQlpZiAobDMtPnNoYXJlZCkKLQkJCXNoYXJlZF9hdmFpbCArPSBsMy0+c2hhcmVkLT5hdmFpbDsK IAogCQlzcGluX3VubG9ja19pcnEoJmwzLT5saXN0X2xvY2spOwogCX0KLQludW1fc2xhYnMgKz0g YWN0aXZlX3NsYWJzOworfQorCisvKiBVc2VmdWwgZm9yIHRlc3RzLiAqLworRVhQT1JUX1NZTUJP TF9HUEwoa21lbV9jb21wdXRlX3N0YXRzKTsKKworc3RhdGljIGludCBzX3Nob3coc3RydWN0IHNl cV9maWxlICptLCB2b2lkICpwKQoreworCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAgPSBwOwor CXVuc2lnbmVkIGxvbmcgYWN0aXZlX29ianM7CisJdW5zaWduZWQgbG9uZyBudW1fb2JqczsKKwl1 bnNpZ25lZCBsb25nIGFjdGl2ZV9zbGFiczsKKwl1bnNpZ25lZCBsb25nIG51bV9zbGFicywgZnJl ZV9vYmplY3RzLCBzaGFyZWRfYXZhaWw7CisJY29uc3QgY2hhciAqbmFtZTsKKwljaGFyICplcnJv ciA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmdWxsX3NsYWJzOworCXVuc2lnbmVkIGxvbmcgcGFy dGlhbF9zbGFiczsKKwl1bnNpZ25lZCBsb25nIHBhcnRpYWxfb2JqczsKKwl1bnNpZ25lZCBsb25n IGZyZWVfc2xhYnM7CisKKwlrbWVtX2NvbXB1dGVfc3RhdHMoY2FjaGVwLCAgJmZ1bGxfc2xhYnMs ICZwYXJ0aWFsX3NsYWJzLCAmcGFydGlhbF9vYmpzLAorCQkJICAgJmZyZWVfc2xhYnMsICZlcnJv cik7CisKKwlhY3RpdmVfb2JqcyA9IGZ1bGxfc2xhYnMgKiBjYWNoZXAtPm51bSArIHBhcnRpYWxf b2JqczsKKwludW1fc2xhYnMgPSBmdWxsX3NsYWJzICsgcGFydGlhbF9zbGFicyArIGZyZWVfc2xh YnM7CisJYWN0aXZlX3NsYWJzID0gZnVsbF9zbGFicyArIHBhcnRpYWxfc2xhYnM7CisJc2hhcmVk X2F2YWlsID0gcGFydGlhbF9zbGFicyAqIGNhY2hlcC0+bnVtIC0gcGFydGlhbF9vYmpzOworCWZy ZWVfb2JqZWN0cyA9IGZyZWVfc2xhYnMgKiBjYWNoZXAtPm51bSArIHNoYXJlZF9hdmFpbDsKKwog CW51bV9vYmpzID0gbnVtX3NsYWJzICogY2FjaGVwLT5udW07CiAJaWYgKG51bV9vYmpzIC0gYWN0 aXZlX29ianMgIT0gZnJlZV9vYmplY3RzICYmICFlcnJvcikKIAkJZXJyb3IgPSAiZnJlZV9vYmpl Y3RzIGFjY291bnRpbmcgZXJyb3IiOwo= ------=_Part_4834_31567726.1193325379283-- -- 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