From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750916AbbB1HNE (ORCPT ); Sat, 28 Feb 2015 02:13:04 -0500 Received: from gate.crashing.org ([63.228.1.57]:49186 "EHLO gate.crashing.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750738AbbB1HNB (ORCPT ); Sat, 28 Feb 2015 02:13:01 -0500 Message-ID: <1425107567.4645.108.camel@kernel.crashing.org> Subject: Generic page fault (Was: libsigsegv ....) From: Benjamin Herrenschmidt To: Linus Torvalds Cc: "linux-arch@vger.kernel.org" , "linux-kernel@vger.kernel.org" , linux-mm@kvack.org Date: Sat, 28 Feb 2015 18:12:47 +1100 In-Reply-To: References: <1422361485.6648.71.camel@opensuse.org> <54C78756.9090605@suse.cz> <1422364084.6648.82.camel@opensuse.org> <1422836637.17302.9.camel@au1.ibm.com> Content-Type: multipart/mixed; boundary="=-CTy4YdLdezRALMlzlcgc" X-Mailer: Evolution 3.12.10-0ubuntu1~14.10.1 Mime-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --=-CTy4YdLdezRALMlzlcgc Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit On Sun, 2015-02-01 at 17:09 -0800, Linus Torvalds wrote: > > Of course, what I *really* want would be to make a new > "generic_mm_fault()" helper that would do all the normal stuff: > > - find_vma() > - check permissions and ranges > - call 'handle_mm_fault()' > - do the proper error, retry and minor/major fault handling > > and then most architectures could just call that. So I spent a bit of time today while the kids were playing quietly (it does happen !), and came up with this (very) draft pair of patches for x86 and powerpc. It's by no mean a finished product as you can see, but it shows how "messy" things get. Basically a bit more messy than I originally thought but it's not *too* bad either. Let me know what you think of the approach. It's boot tested on x86_64 in qemu and . Next I think I'll tackle ARM, test a bit more, clean a few things up and submit, but by all means, please provide feedback on the approach before that :) I'm attaching the patches for now (there are two and I don't feel like posting two emails on that subject. The final stuff will be broken down in smaller bits). Cheers, Ben. --=-CTy4YdLdezRALMlzlcgc Content-Disposition: attachment; filename*0=0001-Move-bulk-of-x86-__do_page_fault-to-a-generic_page_f.pat; filename*1=ch Content-Type: text/x-patch; name="0001-Move-bulk-of-x86-__do_page_fault-to-a-generic_page_f.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAxZTMwNjBlY2RiNDc5YTNkZmQ1ODdhNTg3MGUwMzUxZTBiMWI1ZGRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCZW5qYW1pbiBIZXJyZW5zY2htaWR0IDxiZW5oQGtlcm5lbC5j cmFzaGluZy5vcmc+CkRhdGU6IFNhdCwgMjggRmViIDIwMTUgMTc6Mzg6MTcgKzExMDAKU3ViamVj dDogW1BBVENIIDEvMl0gTW92ZSBidWxrIG9mIHg4NiBfX2RvX3BhZ2VfZmF1bHQoKSB0byBhCiBn ZW5lcmljX3BhZ2VfZmF1bHQoKQoKKEFkZCBhZGQgdmFyaW91cyBob29rcyB0aGF0IG90aGVyIGFy Y2hzIHdpbGwgbmVlZCBldGMuLi4pCgpTaWduZWQtb2ZmLWJ5OiBCZW5qYW1pbiBIZXJyZW5zY2ht aWR0IDxiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc+Ci0tLQogYXJjaC94ODYvaW5jbHVkZS9hc20v ZmF1bHQuaCB8ICA5OSArKysrKysrKysrKysrKysrKwogYXJjaC94ODYvbW0vZmF1bHQuYyAgICAg ICAgICB8IDI1MyArKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBp bmNsdWRlL2xpbnV4L2ZhdWx0LmggICAgICAgIHwgIDExICsrCiBtbS9NYWtlZmlsZSAgICAgICAg ICAgICAgICAgIHwgICAyICstCiBtbS9mYXVsdC5jICAgICAgICAgICAgICAgICAgIHwgMTcxICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDI5NiBpbnNlcnRp b25zKCspLCAyNDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC94ODYvaW5j bHVkZS9hc20vZmF1bHQuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvZmF1bHQu aAogY3JlYXRlIG1vZGUgMTAwNjQ0IG1tL2ZhdWx0LmMKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9p bmNsdWRlL2FzbS9mYXVsdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZmF1bHQuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzE3MTJlMQotLS0gL2Rldi9udWxsCisrKyBi L2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZhdWx0LmgKQEAgLTAsMCArMSw5OSBAQAorI2lmbmRlZiBf QVNNX1g4Nl9GQVVMVF9ICisjZGVmaW5lIF9BU01fWDg2X0ZBVUxUX0gKKworI2luY2x1ZGUgPGxp bnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCisvKgorICogUGFnZSBmYXVs dCBlcnJvciBjb2RlIGJpdHM6CisgKgorICogICBiaXQgMCA9PQkgMDogbm8gcGFnZSBmb3VuZAkx OiBwcm90ZWN0aW9uIGZhdWx0CisgKiAgIGJpdCAxID09CSAwOiByZWFkIGFjY2VzcwkJMTogd3Jp dGUgYWNjZXNzCisgKiAgIGJpdCAyID09CSAwOiBrZXJuZWwtbW9kZSBhY2Nlc3MJMTogdXNlci1t b2RlIGFjY2VzcworICogICBiaXQgMyA9PQkJCQkxOiB1c2Ugb2YgcmVzZXJ2ZWQgYml0IGRldGVj dGVkCisgKiAgIGJpdCA0ID09CQkJCTE6IGZhdWx0IHdhcyBhbiBpbnN0cnVjdGlvbiBmZXRjaAor ICovCitlbnVtIHg4Nl9wZl9lcnJvcl9jb2RlIHsKKworCVBGX1BST1QJCT0JCTEgPDwgMCwKKwlQ Rl9XUklURQk9CQkxIDw8IDEsCisJUEZfVVNFUgkJPQkJMSA8PCAyLAorCVBGX1JTVkQJCT0JCTEg PDwgMywKKwlQRl9JTlNUUgk9CQkxIDw8IDQsCit9OworCitzdGF0aWMgaW5saW5lIGJvb2wgZmF1 bHRfaXNfdXNlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJfY29kZSkK K3sKKwlyZXR1cm4gZXJyX2NvZGUgJiBQRl9VU0VSOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wg ZmF1bHRfaXNfd3JpdGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyX2Nv ZGUpCit7CisJcmV0dXJuIGVycl9jb2RlICYgUEZfV1JJVEU7Cit9CisKKy8qIFJldHVybiB0eXBl IGZvciBkb19wYWdlX2ZhdWx0ICovCit0eXBlZGVmIHZvaWQgZ3BmX3JldF90OworCisjZGVmaW5l IEZBVUxUX05PX0VSUgorCisvKiBDaGVjayBpZiB0aGUgc3RhY2sgaXMgYWxsb3dlZCB0byBncm93 IGR1cmluZyBhIHVzZXIgcGFnZSBmYXVsdCAqLworc3RhdGljIGlubGluZSBib29sIHN0YWNrX2Nh bl9ncm93KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycl9jb2RlLAorCQkJ CSAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJCSAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEpCit7CisJLyoKKwkgKiBBY2Nlc3NpbmcgdGhlIHN0YWNrIGJlbG93ICVzcCBpcyBhbHdheXMg YSBidWcuCisJICogVGhlIGxhcmdlIGN1c2hpb24gYWxsb3dzIGluc3RydWN0aW9ucyBsaWtlIGVu dGVyCisJICogYW5kIHB1c2hhIHRvIHdvcmsuICgiZW50ZXIgJDY1NTM1LCAkMzEiIHB1c2hlcwor CSAqIDMyIHBvaW50ZXJzIGFuZCB0aGVuIGRlY3JlbWVudHMgJXNwIGJ5IDY1NTM1LikKKwkgKi8K KwlyZXR1cm4gYWRkcmVzcyArIDY1NTM2ICsgMzIgKiBzaXplb2YodW5zaWduZWQgbG9uZykgPj0g cmVncy0+c3A7Cit9CisKKy8qIEFjY2VzcyB2YWxpZGl0eSBjaGVjayAqLworc3RhdGljIGlubGlu ZSBib29sIGFjY2Vzc19lcnJvcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBl cnJfY29kZSwKKwkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpZiAoZXJyX2Nv ZGUgJiBQRl9XUklURSkgeworCQkvKiB3cml0ZSwgcHJlc2VudCBhbmQgd3JpdGUsIG5vdCBwcmVz ZW50OiAqLworCQlpZiAodW5saWtlbHkoISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKSkKKwkJ CXJldHVybiB0cnVlOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogcmVhZCwgcHJlc2VudDog Ki8KKwlpZiAodW5saWtlbHkoZXJyX2NvZGUgJiBQRl9QUk9UKSkKKwkJcmV0dXJuIHRydWU7CisK KwkvKiByZWFkLCBub3QgcHJlc2VudDogKi8KKwlpZiAodW5saWtlbHkoISh2bWEtPnZtX2ZsYWdz ICYgKFZNX1JFQUQgfCBWTV9FWEVDIHwgVk1fV1JJVEUpKSkpCisJCXJldHVybiB0cnVlOworCisJ cmV0dXJuIGZhbHNlOworfQorCisvKiBFcnJvciBoYW5kbGVycyAqLworCitncGZfcmV0X3QgaGFu ZGxlX2JhZF9hcmVhKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2Nv ZGUsCisJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IHNpX2NvZGUpOworCisKK3ZvaWQg bm9fY29udGV4dChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2Rl LAorCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBzaWduYWwsIGludCBzaV9jb2RlKTsKKwor c3RhdGljIGlubGluZSBncGZfcmV0X3QgaGFuZGxlX2tlcm5lbF9mYXVsdChzdHJ1Y3QgcHRfcmVn cyAqcmVncywKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwKKwkJCQkJICAgIHVu c2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IHNpZywKKwkJCQkJICAgIGludCBzaV9jb2RlKQorewor CW5vX2NvbnRleHQocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcywgc2lnLCBzaV9jb2RlKTsKK30K KworZ3BmX3JldF90IGRvX3NpZ2J1cyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9u ZyBlcnJvcl9jb2RlLAorCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBpbnQg ZmF1bHQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9hY2NvdW50X21ham9yX2ZhdWx0KHZv aWQpIHsgfQorCisKKyNlbmRpZiAvKiAgX0FTTV9YODZfRkFVTFRfSCAqLwpkaWZmIC0tZ2l0IGEv YXJjaC94ODYvbW0vZmF1bHQuYyBiL2FyY2gveDg2L21tL2ZhdWx0LmMKaW5kZXggZWRlMDI1Zi4u YjdjYTYwYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vZmF1bHQuYworKysgYi9hcmNoL3g4Ni9t bS9mYXVsdC5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgkJ LyogaHN0YXRlX2luZGV4X3RvX3NoaWZ0CSovCiAjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4J CS8qIHByZWZldGNodwkJCSovCiAjaW5jbHVkZSA8bGludXgvY29udGV4dF90cmFja2luZy5oPgkv KiBleGNlcHRpb25fZW50ZXIoKSwgLi4uCSovCisjaW5jbHVkZSA8bGludXgvZmF1bHQuaD4KIAog I2luY2x1ZGUgPGFzbS90cmFwcy5oPgkJCS8qIGRvdHJhcGxpbmthZ2UsIC4uLgkJKi8KICNpbmNs dWRlIDxhc20vcGdhbGxvYy5oPgkJLyogcGdkXyooKSwgLi4uCQkJKi8KQEAgLTI0LDI0ICsyNSw2 IEBACiAjaW5jbHVkZSA8YXNtL3RyYWNlL2V4Y2VwdGlvbnMuaD4KIAogLyoKLSAqIFBhZ2UgZmF1 bHQgZXJyb3IgY29kZSBiaXRzOgotICoKLSAqICAgYml0IDAgPT0JIDA6IG5vIHBhZ2UgZm91bmQJ MTogcHJvdGVjdGlvbiBmYXVsdAotICogICBiaXQgMSA9PQkgMDogcmVhZCBhY2Nlc3MJCTE6IHdy aXRlIGFjY2VzcwotICogICBiaXQgMiA9PQkgMDoga2VybmVsLW1vZGUgYWNjZXNzCTE6IHVzZXIt bW9kZSBhY2Nlc3MKLSAqICAgYml0IDMgPT0JCQkJMTogdXNlIG9mIHJlc2VydmVkIGJpdCBkZXRl Y3RlZAotICogICBiaXQgNCA9PQkJCQkxOiBmYXVsdCB3YXMgYW4gaW5zdHJ1Y3Rpb24gZmV0Y2gK LSAqLwotZW51bSB4ODZfcGZfZXJyb3JfY29kZSB7Ci0KLQlQRl9QUk9UCQk9CQkxIDw8IDAsCi0J UEZfV1JJVEUJPQkJMSA8PCAxLAotCVBGX1VTRVIJCT0JCTEgPDwgMiwKLQlQRl9SU1ZECQk9CQkx IDw8IDMsCi0JUEZfSU5TVFIJPQkJMSA8PCA0LAotfTsKLQotLyoKICAqIFJldHVybnMgMCBpZiBt bWlvdHJhY2UgaXMgZGlzYWJsZWQsIG9yIGlmIHRoZSBmYXVsdCBpcyBub3QKICAqIGhhbmRsZWQg YnkgbW1pb3RyYWNlOgogICovCkBAIC02NDMsNyArNjI2LDcgQEAgcGd0YWJsZV9iYWQoc3RydWN0 IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwKIAlvb3BzX2VuZChmbGFn cywgcmVncywgc2lnKTsKIH0KIAotc3RhdGljIG5vaW5saW5lIHZvaWQKK25vaW5saW5lIHZvaWQK IG5vX2NvbnRleHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29k ZSwKIAkgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBzaWduYWwsIGludCBzaV9jb2RlKQog ewpAQCAtNzQ4LDggKzczMSw3IEBAIHNob3dfc2lnbmFsX21zZyhzdHJ1Y3QgcHRfcmVncyAqcmVn cywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLAogCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CiB9 CiAKLXN0YXRpYyB2b2lkCi1fX2JhZF9hcmVhX25vc2VtYXBob3JlKHN0cnVjdCBwdF9yZWdzICpy ZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCitzdGF0aWMgdm9pZCBfX2JhZF9hcmVhKHN0 cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCiAJCSAgICAgICB1 bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBzaV9jb2RlKQogewogCXN0cnVjdCB0YXNrX3N0cnVj dCAqdHNrID0gY3VycmVudDsKQEAgLTgwNCw0NCArNzg2LDIwIEBAIF9fYmFkX2FyZWFfbm9zZW1h cGhvcmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwKIAlu b19jb250ZXh0KHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MsIFNJR1NFR1YsIHNpX2NvZGUpOwog fQogCi1zdGF0aWMgbm9pbmxpbmUgdm9pZAotYmFkX2FyZWFfbm9zZW1hcGhvcmUoc3RydWN0IHB0 X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwKLQkJICAgICB1bnNpZ25lZCBs b25nIGFkZHJlc3MpCi17Ci0JX19iYWRfYXJlYV9ub3NlbWFwaG9yZShyZWdzLCBlcnJvcl9jb2Rl LCBhZGRyZXNzLCBTRUdWX01BUEVSUik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fX2JhZF9hcmVhKHN0 cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCi0JICAgdW5zaWdu ZWQgbG9uZyBhZGRyZXNzLCBpbnQgc2lfY29kZSkKLXsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9 IGN1cnJlbnQtPm1tOwotCi0JLyoKLQkgKiBTb21ldGhpbmcgdHJpZWQgdG8gYWNjZXNzIG1lbW9y eSB0aGF0IGlzbid0IGluIG91ciBtZW1vcnkgbWFwLi4KLQkgKiBGaXggaXQsIGJ1dCBjaGVjayBp ZiBpdCdzIGtlcm5lbCBvciB1c2VyIGZpcnN0Li4KLQkgKi8KLQl1cF9yZWFkKCZtbS0+bW1hcF9z ZW0pOwotCi0JX19iYWRfYXJlYV9ub3NlbWFwaG9yZShyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNz LCBzaV9jb2RlKTsKLX0KLQotc3RhdGljIG5vaW5saW5lIHZvaWQKLWJhZF9hcmVhKHN0cnVjdCBw dF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsIHVuc2lnbmVkIGxvbmcgYWRk cmVzcykKK3N0YXRpYyBpbmxpbmUgdm9pZCBiYWRfYXJlYShzdHJ1Y3QgcHRfcmVncyAqcmVncywg dW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNz KQogewogCV9fYmFkX2FyZWEocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcywgU0VHVl9NQVBFUlIp OwogfQogCi1zdGF0aWMgbm9pbmxpbmUgdm9pZAotYmFkX2FyZWFfYWNjZXNzX2Vycm9yKHN0cnVj dCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCi0JCSAgICAgIHVuc2ln bmVkIGxvbmcgYWRkcmVzcykKK2dwZl9yZXRfdCBoYW5kbGVfYmFkX2FyZWEoc3RydWN0IHB0X3Jl Z3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwKKwkJCSAgdW5zaWduZWQgbG9uZyBh ZGRyZXNzLCBpbnQgc2lfY29kZSkKIHsKLQlfX2JhZF9hcmVhKHJlZ3MsIGVycm9yX2NvZGUsIGFk ZHJlc3MsIFNFR1ZfQUNDRVJSKTsKKwlfX2JhZF9hcmVhKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJl c3MsIHNpX2NvZGUpOwogfQogCi1zdGF0aWMgdm9pZAotZG9fc2lnYnVzKHN0cnVjdCBwdF9yZWdz ICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywK LQkgIHVuc2lnbmVkIGludCBmYXVsdCkKK2dwZl9yZXRfdCBkb19zaWdidXMoc3RydWN0IHB0X3Jl Z3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwKKwkJICAgIHVuc2lnbmVkIGxvbmcg YWRkcmVzcywgdW5zaWduZWQgaW50IGZhdWx0KQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNr ID0gY3VycmVudDsKIAlpbnQgY29kZSA9IEJVU19BRFJFUlI7CkBAIC04NzEsNDAgKzgyOSw2IEBA IGRvX3NpZ2J1cyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2Rl LCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJZm9yY2Vfc2lnX2luZm9fZmF1bHQoU0lHQlVTLCBj b2RlLCBhZGRyZXNzLCB0c2ssIGZhdWx0KTsKIH0KIAotc3RhdGljIG5vaW5saW5lIHZvaWQKLW1t X2ZhdWx0X2Vycm9yKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2Nv ZGUsCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgaW50IGZhdWx0KQot ewotCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSAmJiAhKGVycm9yX2NvZGUgJiBQ Rl9VU0VSKSkgewotCQlub19jb250ZXh0KHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MsIDAsIDAp OwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKSB7Ci0JCS8qIEtl cm5lbCBtb2RlPyBIYW5kbGUgZXhjZXB0aW9ucyBvciBkaWU6ICovCi0JCWlmICghKGVycm9yX2Nv ZGUgJiBQRl9VU0VSKSkgewotCQkJbm9fY29udGV4dChyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNz LAotCQkJCSAgIFNJR1NFR1YsIFNFR1ZfTUFQRVJSKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCS8q Ci0JCSAqIFdlIHJhbiBvdXQgb2YgbWVtb3J5LCBjYWxsIHRoZSBPT00ga2lsbGVyLCBhbmQgcmV0 dXJuIHRoZQotCQkgKiB1c2Vyc3BhY2UgKHdoaWNoIHdpbGwgcmV0cnkgdGhlIGZhdWx0LCBvciBr aWxsIHVzIGlmIHdlIGdvdAotCQkgKiBvb20ta2lsbGVkKToKLQkJICovCi0JCXBhZ2VmYXVsdF9v dXRfb2ZfbWVtb3J5KCk7Ci0JfSBlbHNlIHsKLQkJaWYgKGZhdWx0ICYgKFZNX0ZBVUxUX1NJR0JV U3xWTV9GQVVMVF9IV1BPSVNPTnwKLQkJCSAgICAgVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UpKQot CQkJZG9fc2lnYnVzKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MsIGZhdWx0KTsKLQkJZWxzZSBp ZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKQotCQkJYmFkX2FyZWFfbm9zZW1hcGhvcmUocmVn cywgZXJyb3JfY29kZSwgYWRkcmVzcyk7Ci0JCWVsc2UKLQkJCUJVRygpOwotCX0KLX0KLQogc3Rh dGljIGludCBzcHVyaW91c19mYXVsdF9jaGVjayh1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsIHB0 ZV90ICpwdGUpCiB7CiAJaWYgKChlcnJvcl9jb2RlICYgUEZfV1JJVEUpICYmICFwdGVfd3JpdGUo KnB0ZSkpCkBAIC05OTgsMjcgKzkyMiw2IEBAIE5PS1BST0JFX1NZTUJPTChzcHVyaW91c19mYXVs dCk7CiAKIGludCBzaG93X3VuaGFuZGxlZF9zaWduYWxzID0gMTsKIAotc3RhdGljIGlubGluZSBp bnQKLWFjY2Vzc19lcnJvcih1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKQotewotCWlmIChlcnJvcl9jb2RlICYgUEZfV1JJVEUpIHsKLQkJLyogd3Jp dGUsIHByZXNlbnQgYW5kIHdyaXRlLCBub3QgcHJlc2VudDogKi8KLQkJaWYgKHVubGlrZWx5KCEo dm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkpCi0JCQlyZXR1cm4gMTsKLQkJcmV0dXJuIDA7Ci0J fQotCi0JLyogcmVhZCwgcHJlc2VudDogKi8KLQlpZiAodW5saWtlbHkoZXJyb3JfY29kZSAmIFBG X1BST1QpKQotCQlyZXR1cm4gMTsKLQotCS8qIHJlYWQsIG5vdCBwcmVzZW50OiAqLwotCWlmICh1 bmxpa2VseSghKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX0VYRUMgfCBWTV9XUklURSkp KSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBmYXVsdF9pbl9r ZXJuZWxfc3BhY2UodW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogCXJldHVybiBhZGRyZXNzID49 IFRBU0tfU0laRV9NQVg7CkBAIC0xMDU0LDExICs5NTcsOCBAQCBzdGF0aWMgbm9pbmxpbmUgdm9p ZAogX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVy cm9yX2NvZGUsCiAJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKnZtYTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKIAlzdHJ1Y3QgbW1fc3RydWN0 ICptbTsKLQlpbnQgZmF1bHQsIG1ham9yID0gMDsKLQl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBGQVVM VF9GTEFHX0FMTE9XX1JFVFJZIHwgRkFVTFRfRkxBR19LSUxMQUJMRTsKIAogCXRzayA9IGN1cnJl bnQ7CiAJbW0gPSB0c2stPm1tOwpAQCAtMTEwNyw3ICsxMDA3LDcgQEAgX19kb19wYWdlX2ZhdWx0 KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCiAJCSAqIERv bid0IHRha2UgdGhlIG1tIHNlbWFwaG9yZSBoZXJlLiBJZiB3ZSBmaXh1cCBhIHByZWZldGNoCiAJ CSAqIGZhdWx0IHdlIGNvdWxkIG90aGVyd2lzZSBkZWFkbG9jazoKIAkJICovCi0JCWJhZF9hcmVh X25vc2VtYXBob3JlKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpOworCQliYWRfYXJlYShyZWdz LCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKIAogCQlyZXR1cm47CiAJfQpAQCAtMTEyMCw3ICsxMDIw LDcgQEAgX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25n IGVycm9yX2NvZGUsCiAJCXBndGFibGVfYmFkKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpOwog CiAJaWYgKHVubGlrZWx5KHNtYXBfdmlvbGF0aW9uKGVycm9yX2NvZGUsIHJlZ3MpKSkgewotCQli YWRfYXJlYV9ub3NlbWFwaG9yZShyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKKwkJYmFkX2Fy ZWEocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTExMjks NyArMTAyOSw3IEBAIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWdu ZWQgbG9uZyBlcnJvcl9jb2RlLAogCSAqIGluIGFuIGF0b21pYyByZWdpb24gdGhlbiB3ZSBtdXN0 IG5vdCB0YWtlIHRoZSBmYXVsdDoKIAkgKi8KIAlpZiAodW5saWtlbHkoaW5fYXRvbWljKCkgfHwg IW1tKSkgewotCQliYWRfYXJlYV9ub3NlbWFwaG9yZShyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNz KTsKKwkJYmFkX2FyZWEocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7CiAJCXJldHVybjsKIAl9 CiAKQEAgLTExNDMsMTM3ICsxMDQzLDEyIEBAIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVn cyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLAogCWlmICh1c2VyX21vZGVfdm0ocmVn cykpIHsKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCQllcnJvcl9jb2RlIHw9IFBGX1VTRVI7Ci0J CWZsYWdzIHw9IEZBVUxUX0ZMQUdfVVNFUjsKIAl9IGVsc2UgewogCQlpZiAocmVncy0+ZmxhZ3Mg JiBYODZfRUZMQUdTX0lGKQogCQkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCX0KIAotCXBlcmZfc3df ZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUUywgMSwgcmVncywgYWRkcmVzcyk7Ci0KLQlp ZiAoZXJyb3JfY29kZSAmIFBGX1dSSVRFKQotCQlmbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFOwot Ci0JLyoKLQkgKiBXaGVuIHJ1bm5pbmcgaW4gdGhlIGtlcm5lbCB3ZSBleHBlY3QgZmF1bHRzIHRv IG9jY3VyIG9ubHkgdG8KLQkgKiBhZGRyZXNzZXMgaW4gdXNlciBzcGFjZS4gIEFsbCBvdGhlciBm YXVsdHMgcmVwcmVzZW50IGVycm9ycyBpbgotCSAqIHRoZSBrZXJuZWwgYW5kIHNob3VsZCBnZW5l cmF0ZSBhbiBPT1BTLiAgVW5mb3J0dW5hdGVseSwgaW4gdGhlCi0JICogY2FzZSBvZiBhbiBlcnJv bmVvdXMgZmF1bHQgb2NjdXJyaW5nIGluIGEgY29kZSBwYXRoIHdoaWNoIGFscmVhZHkKLQkgKiBo b2xkcyBtbWFwX3NlbSB3ZSB3aWxsIGRlYWRsb2NrIGF0dGVtcHRpbmcgdG8gdmFsaWRhdGUgdGhl IGZhdWx0Ci0JICogYWdhaW5zdCB0aGUgYWRkcmVzcyBzcGFjZS4gIEx1Y2tpbHkgdGhlIGtlcm5l bCBvbmx5IHZhbGlkbHkKLQkgKiByZWZlcmVuY2VzIHVzZXIgc3BhY2UgZnJvbSB3ZWxsIGRlZmlu ZWQgYXJlYXMgb2YgY29kZSwgd2hpY2ggYXJlCi0JICogbGlzdGVkIGluIHRoZSBleGNlcHRpb25z IHRhYmxlLgotCSAqCi0JICogQXMgdGhlIHZhc3QgbWFqb3JpdHkgb2YgZmF1bHRzIHdpbGwgYmUg dmFsaWQgd2Ugd2lsbCBvbmx5IHBlcmZvcm0KLQkgKiB0aGUgc291cmNlIHJlZmVyZW5jZSBjaGVj ayB3aGVuIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgb2YgYQotCSAqIGRlYWRsb2NrLiBBdHRlbXB0 IHRvIGxvY2sgdGhlIGFkZHJlc3Mgc3BhY2UsIGlmIHdlIGNhbm5vdCB3ZSB0aGVuCi0JICogdmFs aWRhdGUgdGhlIHNvdXJjZS4gSWYgdGhpcyBpcyBpbnZhbGlkIHdlIGNhbiBza2lwIHRoZSBhZGRy ZXNzCi0JICogc3BhY2UgY2hlY2ssIHRodXMgYXZvaWRpbmcgdGhlIGRlYWRsb2NrOgotCSAqLwot CWlmICh1bmxpa2VseSghZG93bl9yZWFkX3RyeWxvY2soJm1tLT5tbWFwX3NlbSkpKSB7Ci0JCWlm ICgoZXJyb3JfY29kZSAmIFBGX1VTRVIpID09IDAgJiYKLQkJICAgICFzZWFyY2hfZXhjZXB0aW9u X3RhYmxlcyhyZWdzLT5pcCkpIHsKLQkJCWJhZF9hcmVhX25vc2VtYXBob3JlKHJlZ3MsIGVycm9y X2NvZGUsIGFkZHJlc3MpOwotCQkJcmV0dXJuOwotCQl9Ci1yZXRyeToKLQkJZG93bl9yZWFkKCZt bS0+bW1hcF9zZW0pOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIFRoZSBhYm92ZSBkb3duX3JlYWRf dHJ5bG9jaygpIG1pZ2h0IGhhdmUgc3VjY2VlZGVkIGluCi0JCSAqIHdoaWNoIGNhc2Ugd2UnbGwg aGF2ZSBtaXNzZWQgdGhlIG1pZ2h0X3NsZWVwKCkgZnJvbQotCQkgKiBkb3duX3JlYWQoKToKLQkJ ICovCi0JCW1pZ2h0X3NsZWVwKCk7Ci0JfQotCi0Jdm1hID0gZmluZF92bWEobW0sIGFkZHJlc3Mp OwotCWlmICh1bmxpa2VseSghdm1hKSkgewotCQliYWRfYXJlYShyZWdzLCBlcnJvcl9jb2RlLCBh ZGRyZXNzKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAobGlrZWx5KHZtYS0+dm1fc3RhcnQgPD0gYWRk cmVzcykpCi0JCWdvdG8gZ29vZF9hcmVhOwotCWlmICh1bmxpa2VseSghKHZtYS0+dm1fZmxhZ3Mg JiBWTV9HUk9XU0RPV04pKSkgewotCQliYWRfYXJlYShyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNz KTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoZXJyb3JfY29kZSAmIFBGX1VTRVIpIHsKLQkJLyoKLQkJ ICogQWNjZXNzaW5nIHRoZSBzdGFjayBiZWxvdyAlc3AgaXMgYWx3YXlzIGEgYnVnLgotCQkgKiBU aGUgbGFyZ2UgY3VzaGlvbiBhbGxvd3MgaW5zdHJ1Y3Rpb25zIGxpa2UgZW50ZXIKLQkJICogYW5k IHB1c2hhIHRvIHdvcmsuICgiZW50ZXIgJDY1NTM1LCAkMzEiIHB1c2hlcwotCQkgKiAzMiBwb2lu dGVycyBhbmQgdGhlbiBkZWNyZW1lbnRzICVzcCBieSA2NTUzNS4pCi0JCSAqLwotCQlpZiAodW5s aWtlbHkoYWRkcmVzcyArIDY1NTM2ICsgMzIgKiBzaXplb2YodW5zaWduZWQgbG9uZykgPCByZWdz LT5zcCkpIHsKLQkJCWJhZF9hcmVhKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpOwotCQkJcmV0 dXJuOwotCQl9Ci0JfQotCWlmICh1bmxpa2VseShleHBhbmRfc3RhY2sodm1hLCBhZGRyZXNzKSkp IHsKLQkJYmFkX2FyZWEocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7Ci0JCXJldHVybjsKLQl9 Ci0KLQkvKgotCSAqIE9rLCB3ZSBoYXZlIGEgZ29vZCB2bV9hcmVhIGZvciB0aGlzIG1lbW9yeSBh Y2Nlc3MsIHNvCi0JICogd2UgY2FuIGhhbmRsZSBpdC4uCi0JICovCi1nb29kX2FyZWE6Ci0JaWYg KHVubGlrZWx5KGFjY2Vzc19lcnJvcihlcnJvcl9jb2RlLCB2bWEpKSkgewotCQliYWRfYXJlYV9h Y2Nlc3NfZXJyb3IocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7Ci0JCXJldHVybjsKLQl9Ci0K LQkvKgotCSAqIElmIGZvciBhbnkgcmVhc29uIGF0IGFsbCB3ZSBjb3VsZG4ndCBoYW5kbGUgdGhl IGZhdWx0LAotCSAqIG1ha2Ugc3VyZSB3ZSBleGl0IGdyYWNlZnVsbHkgcmF0aGVyIHRoYW4gZW5k bGVzc2x5IHJlZG8KLQkgKiB0aGUgZmF1bHQuICBTaW5jZSB3ZSBuZXZlciBzZXQgRkFVTFRfRkxB R19SRVRSWV9OT1dBSVQsIGlmCi0JICogd2UgZ2V0IFZNX0ZBVUxUX1JFVFJZIGJhY2ssIHRoZSBt bWFwX3NlbSBoYXMgYmVlbiB1bmxvY2tlZC4KLQkgKi8KLQlmYXVsdCA9IGhhbmRsZV9tbV9mYXVs dChtbSwgdm1hLCBhZGRyZXNzLCBmbGFncyk7Ci0JbWFqb3IgfD0gZmF1bHQgJiBWTV9GQVVMVF9N QUpPUjsKLQotCS8qCi0JICogSWYgd2UgbmVlZCB0byByZXRyeSB0aGUgbW1hcF9zZW0gaGFzIGFs cmVhZHkgYmVlbiByZWxlYXNlZCwKLQkgKiBhbmQgaWYgdGhlcmUgaXMgYSBmYXRhbCBzaWduYWwg cGVuZGluZyB0aGVyZSBpcyBubyBndWFyYW50ZWUKLQkgKiB0aGF0IHdlIG1hZGUgYW55IHByb2dy ZXNzLiBIYW5kbGUgdGhpcyBjYXNlIGZpcnN0LgotCSAqLwotCWlmICh1bmxpa2VseShmYXVsdCAm IFZNX0ZBVUxUX1JFVFJZKSkgewotCQkvKiBSZXRyeSBhdCBtb3N0IG9uY2UgKi8KLQkJaWYgKGZs YWdzICYgRkFVTFRfRkxBR19BTExPV19SRVRSWSkgewotCQkJZmxhZ3MgJj0gfkZBVUxUX0ZMQUdf QUxMT1dfUkVUUlk7Ci0JCQlmbGFncyB8PSBGQVVMVF9GTEFHX1RSSUVEOwotCQkJaWYgKCFmYXRh bF9zaWduYWxfcGVuZGluZyh0c2spKQotCQkJCWdvdG8gcmV0cnk7Ci0JCX0KLQotCQkvKiBVc2Vy IG1vZGU/IEp1c3QgcmV0dXJuIHRvIGhhbmRsZSB0aGUgZmF0YWwgZXhjZXB0aW9uICovCi0JCWlm IChmbGFncyAmIEZBVUxUX0ZMQUdfVVNFUikKLQkJCXJldHVybjsKLQotCQkvKiBOb3QgcmV0dXJu aW5nIHRvIHVzZXIgbW9kZT8gSGFuZGxlIGV4Y2VwdGlvbnMgb3IgZGllOiAqLwotCQlub19jb250 ZXh0KHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MsIFNJR0JVUywgQlVTX0FEUkVSUik7Ci0JCXJl dHVybjsKLQl9Ci0KLQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCWlmICh1bmxpa2VseShmYXVs dCAmIFZNX0ZBVUxUX0VSUk9SKSkgewotCQltbV9mYXVsdF9lcnJvcihyZWdzLCBlcnJvcl9jb2Rl LCBhZGRyZXNzLCBmYXVsdCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIE1ham9yL21pbm9y IHBhZ2UgZmF1bHQgYWNjb3VudGluZy4gSWYgYW55IG9mIHRoZSBldmVudHMKLQkgKiByZXR1cm5l ZCBWTV9GQVVMVF9NQUpPUiwgd2UgYWNjb3VudCBpdCBhcyBhIG1ham9yIGZhdWx0LgotCSAqLwot CWlmIChtYWpvcikgewotCQl0c2stPm1hal9mbHQrKzsKLQkJcGVyZl9zd19ldmVudChQRVJGX0NP VU5UX1NXX1BBR0VfRkFVTFRTX01BSiwgMSwgcmVncywgYWRkcmVzcyk7Ci0JfSBlbHNlIHsKLQkJ dHNrLT5taW5fZmx0Kys7Ci0JCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxU U19NSU4sIDEsIHJlZ3MsIGFkZHJlc3MpOwotCX0KKwlnZW5lcmljX3BhZ2VfZmF1bHQocmVncywg dHNrLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKIAogCWNoZWNrX3Y4MDg2X21vZGUocmVncywgYWRk cmVzcywgdHNrKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmF1bHQuaCBiL2luY2x1 ZGUvbGludXgvZmF1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTBk OTA5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9mYXVsdC5oCkBAIC0wLDAgKzEs MTEgQEAKKyNpZm5kZWYgX19GQVVMVF9ICisjZGVmaW5lIF9fRkFVTFRfSAorCisvKiBHZW5lcmlj IHBhZ2UgZmF1bHQgc3R1ZmYgKi8KKworI2luY2x1ZGUgPGFzbS9mYXVsdC5oPgorCitncGZfcmV0 X3QgZ2VuZXJpY19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19z dHJ1Y3QgKnRzaywKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLCB1bnNpZ25lZCBs b25nIGFkZHJlc3MpOworCisjZW5kaWYgLyogX19GQVVMVF9IICovCmRpZmYgLS1naXQgYS9tbS9N YWtlZmlsZSBiL21tL01ha2VmaWxlCmluZGV4IDNjMWNhYTIuLmY2NDdmZjEgMTAwNjQ0Ci0tLSBh L21tL01ha2VmaWxlCisrKyBiL21tL01ha2VmaWxlCkBAIC04LDcgKzgsNyBAQCBLQVNBTl9TQU5J VElaRV9zbHViLm8gOj0gbgogbW11LXkJCQk6PSBub21tdS5vCiBtbXUtJChDT05GSUdfTU1VKQk6 PSBndXAubyBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFwKIAkJCSAgIG1sb2NrLm8gbW1h cC5vIG1wcm90ZWN0Lm8gbXJlbWFwLm8gbXN5bmMubyBybWFwLm8gXAotCQkJICAgdm1hbGxvYy5v IHBhZ2V3YWxrLm8gcGd0YWJsZS1nZW5lcmljLm8KKwkJCSAgIHZtYWxsb2MubyBwYWdld2Fsay5v IHBndGFibGUtZ2VuZXJpYy5vIGZhdWx0Lm8KIAogaWZkZWYgQ09ORklHX0NST1NTX01FTU9SWV9B VFRBQ0gKIG1tdS0kKENPTkZJR19NTVUpCSs9IHByb2Nlc3Nfdm1fYWNjZXNzLm8KZGlmZiAtLWdp dCBhL21tL2ZhdWx0LmMgYi9tbS9mYXVsdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmJmZWVlMGIKLS0tIC9kZXYvbnVsbAorKysgYi9tbS9mYXVsdC5jCkBAIC0wLDAgKzEs MTcxIEBACisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgor I2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K KworI2luY2x1ZGUgPGFzbS9mYXVsdC5oPgorCitzdGF0aWMgbm9pbmxpbmUgZ3BmX3JldF90IG1t X2ZhdWx0X2Vycm9yKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgdW5zaWduZWQgbG9uZyBl cnJvcl9jb2RlLAorCQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJCQkgdW5zaWduZWQg aW50IGZhdWx0KQoreworCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSAmJiAhZmF1 bHRfaXNfdXNlcihyZWdzLCBlcnJvcl9jb2RlKSkKKwkJcmV0dXJuIGhhbmRsZV9rZXJuZWxfZmF1 bHQocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcywgMCwgMCk7CisKKwlpZiAoZmF1bHQgJiBWTV9G QVVMVF9PT00pIHsKKwkJLyogS2VybmVsIG1vZGU/IEhhbmRsZSBleGNlcHRpb25zIG9yIGRpZTog Ki8KKwkJaWYgKCFmYXVsdF9pc191c2VyKHJlZ3MsIGVycm9yX2NvZGUpKQorCQkJcmV0dXJuIGhh bmRsZV9rZXJuZWxfZmF1bHQocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcywKKwkJCQkJCSAgIFNJ R1NFR1YsIFNFR1ZfTUFQRVJSKTsKKworCQkvKgorCQkgKiBXZSByYW4gb3V0IG9mIG1lbW9yeSwg Y2FsbCB0aGUgT09NIGtpbGxlciwgYW5kIHJldHVybiB0aGUKKwkJICogdXNlcnNwYWNlICh3aGlj aCB3aWxsIHJldHJ5IHRoZSBmYXVsdCwgb3Iga2lsbCB1cyBpZiB3ZSBnb3QKKwkJICogb29tLWtp bGxlZCk6CisJCSAqLworCQlwYWdlZmF1bHRfb3V0X29mX21lbW9yeSgpOworCX0gZWxzZSB7CisJ CWlmIChmYXVsdCAmIChWTV9GQVVMVF9TSUdCVVN8Vk1fRkFVTFRfSFdQT0lTT058CisJCQkgICAg IFZNX0ZBVUxUX0hXUE9JU09OX0xBUkdFKSkKKwkJCXJldHVybiBkb19zaWdidXMocmVncywgZXJy b3JfY29kZSwgYWRkcmVzcywgZmF1bHQpOworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJ R1NFR1YpCisJCQlyZXR1cm4gaGFuZGxlX2JhZF9hcmVhKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJl c3MsCisJCQkJCSAgICAgICBTRUdWX01BUEVSUik7CisJCWVsc2UKKwkJCUJVRygpOworCX0KKwly ZXR1cm4gRkFVTFRfTk9fRVJSOworfQorCitncGZfcmV0X3QgZ2VuZXJpY19wYWdlX2ZhdWx0KHN0 cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCSAgICAgdW5z aWduZWQgbG9uZyBlcnJvcl9jb2RlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJc3RydWN0IG1tX3N0cnVjdCAqbW07CisJaW50IGZhdWx0 LCBtYWpvciA9IDA7CisJdW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19BTExPV19SRVRS WSB8IEZBVUxUX0ZMQUdfS0lMTEFCTEU7CisKKwltbSA9IHRzay0+bW07CisKKwlpZiAoZmF1bHRf aXNfdXNlcihyZWdzLCBlcnJvcl9jb2RlKSkKKwkJZmxhZ3MgfD0gRkFVTFRfRkxBR19VU0VSOwor CisJaWYgKGZhdWx0X2lzX3dyaXRlKHJlZ3MsIGVycm9yX2NvZGUpKQorCQlmbGFncyB8PSBGQVVM VF9GTEFHX1dSSVRFOworCisJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRT LCAxLCByZWdzLCBhZGRyZXNzKTsKKworCS8qCisJICogV2hlbiBydW5uaW5nIGluIHRoZSBrZXJu ZWwgd2UgZXhwZWN0IGZhdWx0cyB0byBvY2N1ciBvbmx5IHRvCisJICogYWRkcmVzc2VzIGluIHVz ZXIgc3BhY2UuICBBbGwgb3RoZXIgZmF1bHRzIHJlcHJlc2VudCBlcnJvcnMgaW4KKwkgKiB0aGUg a2VybmVsIGFuZCBzaG91bGQgZ2VuZXJhdGUgYW4gT09QUy4gIFVuZm9ydHVuYXRlbHksIGluIHRo ZQorCSAqIGNhc2Ugb2YgYW4gZXJyb25lb3VzIGZhdWx0IG9jY3VycmluZyBpbiBhIGNvZGUgcGF0 aCB3aGljaCBhbHJlYWR5CisJICogaG9sZHMgbW1hcF9zZW0gd2Ugd2lsbCBkZWFkbG9jayBhdHRl bXB0aW5nIHRvIHZhbGlkYXRlIHRoZSBmYXVsdAorCSAqIGFnYWluc3QgdGhlIGFkZHJlc3Mgc3Bh Y2UuICBMdWNraWx5IHRoZSBrZXJuZWwgb25seSB2YWxpZGx5CisJICogcmVmZXJlbmNlcyB1c2Vy IHNwYWNlIGZyb20gd2VsbCBkZWZpbmVkIGFyZWFzIG9mIGNvZGUsIHdoaWNoIGFyZQorCSAqIGxp c3RlZCBpbiB0aGUgZXhjZXB0aW9ucyB0YWJsZS4KKwkgKgorCSAqIEFzIHRoZSB2YXN0IG1ham9y aXR5IG9mIGZhdWx0cyB3aWxsIGJlIHZhbGlkIHdlIHdpbGwgb25seSBwZXJmb3JtCisJICogdGhl IHNvdXJjZSByZWZlcmVuY2UgY2hlY2sgd2hlbiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IG9mIGEK KwkgKiBkZWFkbG9jay4gQXR0ZW1wdCB0byBsb2NrIHRoZSBhZGRyZXNzIHNwYWNlLCBpZiB3ZSBj YW5ub3Qgd2UgdGhlbgorCSAqIHZhbGlkYXRlIHRoZSBzb3VyY2UuIElmIHRoaXMgaXMgaW52YWxp ZCB3ZSBjYW4gc2tpcCB0aGUgYWRkcmVzcworCSAqIHNwYWNlIGNoZWNrLCB0aHVzIGF2b2lkaW5n IHRoZSBkZWFkbG9jazoKKwkgKi8KKwlpZiAodW5saWtlbHkoIWRvd25fcmVhZF90cnlsb2NrKCZt bS0+bW1hcF9zZW0pKSkgeworCQlpZiAoIWZhdWx0X2lzX3VzZXIocmVncywgZXJyb3JfY29kZSkg JiYKKwkJICAgICFzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhHRVRfSVAocmVncykpKSB7CisJCQly ZXR1cm4gaGFuZGxlX2JhZF9hcmVhKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MsCisJCQkJCSAg ICAgICBTRUdWX01BUEVSUik7CisJCX0KK3JldHJ5OgorCQlkb3duX3JlYWQoJm1tLT5tbWFwX3Nl bSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhlIGFib3ZlIGRvd25fcmVhZF90cnlsb2NrKCkg bWlnaHQgaGF2ZSBzdWNjZWVkZWQgaW4KKwkJICogd2hpY2ggY2FzZSB3ZSdsbCBoYXZlIG1pc3Nl ZCB0aGUgbWlnaHRfc2xlZXAoKSBmcm9tCisJCSAqIGRvd25fcmVhZCgpOgorCQkgKi8KKwkJbWln aHRfc2xlZXAoKTsKKwl9CisKKwl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcmVzcyk7CisJaWYgKHVu bGlrZWx5KCF2bWEpKQorCQlnb3RvIGJhZF9hcmVhOworCWlmIChsaWtlbHkodm1hLT52bV9zdGFy dCA8PSBhZGRyZXNzKSkKKwkJZ290byBnb29kX2FyZWE7CisJaWYgKHVubGlrZWx5KCEodm1hLT52 bV9mbGFncyAmIFZNX0dST1dTRE9XTikpKQorCQlnb3RvIGJhZF9hcmVhOworCWlmICh1bmxpa2Vs eShmYXVsdF9pc191c2VyKHJlZ3MsIGVycm9yX2NvZGUpICYmCisJCSAgICAgIXN0YWNrX2Nhbl9n cm93KHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MsIHZtYSkpKQorCQlnb3RvIGJhZF9hcmVhOwor CWlmICh1bmxpa2VseShleHBhbmRfc3RhY2sodm1hLCBhZGRyZXNzKSkpCisJCWdvdG8gYmFkX2Fy ZWE7CisKKwkvKgorCSAqIE9rLCB3ZSBoYXZlIGEgZ29vZCB2bV9hcmVhIGZvciB0aGlzIG1lbW9y eSBhY2Nlc3MsIHNvCisJICogd2UgY2FuIGhhbmRsZSBpdC4uCisJICovCitnb29kX2FyZWE6CisJ aWYgKHVubGlrZWx5KGFjY2Vzc19lcnJvcihyZWdzLCBlcnJvcl9jb2RlLCB2bWEpKSkKKwkJZ290 byBiYWRfYWNjZXNzOworCisJLyoKKwkgKiBJZiBmb3IgYW55IHJlYXNvbiBhdCBhbGwgd2UgY291 bGRuJ3QgaGFuZGxlIHRoZSBmYXVsdCwKKwkgKiBtYWtlIHN1cmUgd2UgZXhpdCBncmFjZWZ1bGx5 IHJhdGhlciB0aGFuIGVuZGxlc3NseSByZWRvCisJICogdGhlIGZhdWx0LiAgU2luY2Ugd2UgbmV2 ZXIgc2V0IEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlULCBpZgorCSAqIHdlIGdldCBWTV9GQVVMVF9S RVRSWSBiYWNrLCB0aGUgbW1hcF9zZW0gaGFzIGJlZW4gdW5sb2NrZWQuCisJICovCisJZmF1bHQg PSBoYW5kbGVfbW1fZmF1bHQobW0sIHZtYSwgYWRkcmVzcywgZmxhZ3MpOworCW1ham9yIHw9IGZh dWx0ICYgVk1fRkFVTFRfTUFKT1I7CisKKwkvKgorCSAqIElmIHdlIG5lZWQgdG8gcmV0cnkgdGhl IG1tYXBfc2VtIGhhcyBhbHJlYWR5IGJlZW4gcmVsZWFzZWQsCisJICogYW5kIGlmIHRoZXJlIGlz IGEgZmF0YWwgc2lnbmFsIHBlbmRpbmcgdGhlcmUgaXMgbm8gZ3VhcmFudGVlCisJICogdGhhdCB3 ZSBtYWRlIGFueSBwcm9ncmVzcy4gSGFuZGxlIHRoaXMgY2FzZSBmaXJzdC4KKwkgKi8KKwlpZiAo dW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9SRVRSWSkpIHsKKwkJLyogUmV0cnkgYXQgbW9zdCBv bmNlICovCisJCWlmIChmbGFncyAmIEZBVUxUX0ZMQUdfQUxMT1dfUkVUUlkpIHsKKwkJCWZsYWdz ICY9IH5GQVVMVF9GTEFHX0FMTE9XX1JFVFJZOworCQkJZmxhZ3MgfD0gRkFVTFRfRkxBR19UUklF RDsKKwkJCWlmICghZmF0YWxfc2lnbmFsX3BlbmRpbmcodHNrKSkKKwkJCQlnb3RvIHJldHJ5Owor CQl9CisKKwkJLyogVXNlciBtb2RlPyBKdXN0IHJldHVybiB0byBoYW5kbGUgdGhlIGZhdGFsIGV4 Y2VwdGlvbiAqLworCQlpZiAoZmxhZ3MgJiBGQVVMVF9GTEFHX1VTRVIpCisJCQlyZXR1cm4gRkFV TFRfTk9fRVJSOworCisJCS8qIE5vdCByZXR1cm5pbmcgdG8gdXNlciBtb2RlPyBIYW5kbGUgZXhj ZXB0aW9ucyBvciBkaWU6ICovCisJCXJldHVybiBoYW5kbGVfa2VybmVsX2ZhdWx0KHJlZ3MsIGVy cm9yX2NvZGUsIGFkZHJlc3MsCisJCQkJCSAgIFNJR0JVUywgQlVTX0FEUkVSUik7CisJfQorCisJ dXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9F UlJPUikpCisJCXJldHVybiBtbV9mYXVsdF9lcnJvcihyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNz LCBmYXVsdCk7CisKKwkvKgorCSAqIE1ham9yL21pbm9yIHBhZ2UgZmF1bHQgYWNjb3VudGluZy4g SWYgYW55IG9mIHRoZSBldmVudHMKKwkgKiByZXR1cm5lZCBWTV9GQVVMVF9NQUpPUiwgd2UgYWNj b3VudCBpdCBhcyBhIG1ham9yIGZhdWx0LgorCSAqLworCWlmIChtYWpvcikgeworCQl0c2stPm1h al9mbHQrKzsKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiwg MSwgcmVncywgYWRkcmVzcyk7CisKKwkJLyogU29tZSBhcmNocyB3YW50IGV4dHJhIGNvdW50aW5n IGhlcmUgKi8KKwkJYXJjaF9hY2NvdW50X21ham9yX2ZhdWx0KCk7CisJfSBlbHNlIHsKKwkJdHNr LT5taW5fZmx0Kys7CisJCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19N SU4sIDEsIHJlZ3MsIGFkZHJlc3MpOworCX0KKwlyZXR1cm4gRkFVTFRfTk9fRVJSOworCisgYmFk X2FyZWE6CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlyZXR1cm4gaGFuZGxlX2JhZF9hcmVh KHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MsIFNFR1ZfTUFQRVJSKTsJCisgYmFkX2FjY2VzczoK Kwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXJldHVybiBoYW5kbGVfYmFkX2FyZWEocmVncywg ZXJyb3JfY29kZSwgYWRkcmVzcywgU0VHVl9BQ0NFUlIpOwkKK30KLS0gCjIuMS4wCgo= --=-CTy4YdLdezRALMlzlcgc Content-Disposition: attachment; filename="0002-powerpc-Use-generic_page_fault.patch" Content-Type: text/x-patch; name="0002-powerpc-Use-generic_page_fault.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAxYzhlN2UyZWYyOTVkNjMyNTc5NmZjZjNjZTZmODgyNWZmYTdmNThiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCZW5qYW1pbiBIZXJyZW5zY2htaWR0IDxiZW5oQGtlcm5lbC5j cmFzaGluZy5vcmc+CkRhdGU6IFNhdCwgMjggRmViIDIwMTUgMTc6Mzg6NDggKzExMDAKU3ViamVj dDogW1BBVENIIDIvMl0gcG93ZXJwYzogVXNlIGdlbmVyaWNfcGFnZV9mYXVsdCgpCgpTaWduZWQt b2ZmLWJ5OiBCZW5qYW1pbiBIZXJyZW5zY2htaWR0IDxiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc+ Ci0tLQogYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZhdWx0LmggfCAxNjUgKysrKysrKysrKysr KysrKysrKysKIGFyY2gvcG93ZXJwYy9tbS9mYXVsdC5jICAgICAgICAgIHwgMzI4ICsrKysrKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAyMTUgaW5z ZXJ0aW9ucygrKSwgMjc4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvcG93 ZXJwYy9pbmNsdWRlL2FzbS9mYXVsdC5oCgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1 ZGUvYXNtL2ZhdWx0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmF1bHQuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmI0NmI5Ci0tLSAvZGV2L251bGwKKysrIGIv YXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZhdWx0LmgKQEAgLTAsMCArMSwxNjUgQEAKKyNpZm5k ZWYgX0FTTV9QT1dFUlBDX0ZBVUxUX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX0ZBVUxUX0gKKwor I2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisKKyNpbmNs dWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3JlZy5oPgorI2luY2x1ZGUgPGFzbS9m aXJtd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9wYWNhLmg+CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBm YXVsdF9pc191c2VyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycl9jb2Rl KQoreworCXJldHVybiB1c2VyX21vZGUocmVncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBm YXVsdF9pc193cml0ZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJfY29k ZSkKK3sKKyNpZiAhKGRlZmluZWQoQ09ORklHXzR4eCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0Up KQorCXJldHVybiAhIShlcnJfY29kZSAmIERTSVNSX0lTU1RPUkUpOworI2Vsc2UKKwlyZXR1cm4g ISEoZXJyX2NvZGUgJiBFU1JfRFNUKTsKKyNlbmRpZiAvKiBDT05GSUdfNHh4IHx8IENPTkZJR19C T09LRSAqLworfQorCisvKiBXZSBuZWVkIHRvIHBhc3MgYSBjb3VwbGUgb2YgZmxhZ3MgdGhyb3Vn IHRoZSBnZW5lcmljIHBhZ2UgZmF1bHQKKyAqIGNvZGUgdmlhICJlcnJvcl9jb2RlIiB3aGljaCBj b250YWlucyBlaXRoZXIgdGhlIERTSVNSIG9yIHRoZSBFU1IKKyAqIGNvbnRlbnQgZGVwZW5kaW5n IG9uIHRoZSBDUFUgZmFtaWx5LgorICoKKyAqIFdlIGhpamFjayBiaXRzIHRoYXQgd2UgZG9uJ3Qg dXNlIGluIGVpdGhlcgorICovCisjZGVmaW5lIFBGX0NBTl9HUk9XX1NUQUNLCTB4MDAwMDAwMDF1 bAorI2RlZmluZSBQRl9FWEVDCQkJMHgwMDAwMDAwMnVsCisKKy8qIFJldHVybiB0eXBlIGZvciBk b19wYWdlX2ZhdWx0ICovCit0eXBlZGVmIGludCBncGZfcmV0X3Q7CisKKyNkZWZpbmUgRkFVTFRf Tk9fRVJSCTAKKworLyogQ2hlY2sgaWYgdGhlIHN0YWNrIGlzIGFsbG93ZWQgdG8gZ3JvdyBkdXJp bmcgYSB1c2VyIHBhZ2UgZmF1bHQgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBzdGFja19jYW5fZ3Jv dyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJfY29kZSwKKwkJCQkgIHVu c2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCQkgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQor eworCS8qCisJICogTi5CLiBUaGUgUE9XRVIvT3BlbiBBQkkgYWxsb3dzIHByb2dyYW1zIHRvIGFj Y2VzcyB1cCB0bworCSAqIDI4OCBieXRlcyBiZWxvdyB0aGUgc3RhY2sgcG9pbnRlci4KKwkgKiBU aGUga2VybmVsIHNpZ25hbCBkZWxpdmVyeSBjb2RlIHdyaXRlcyB1cCB0byBhYm91dCAxLjVrQgor CSAqIGJlbG93IHRoZSBzdGFjayBwb2ludGVyIChyMSkgYmVmb3JlIGRlY3JlbWVudGluZyBpdC4K KwkgKiBUaGUgZXhlYyBjb2RlIGNhbiB3cml0ZSBzbGlnaHRseSBvdmVyIDY0MGtCIHRvIHRoZSBz dGFjaworCSAqIGJlZm9yZSBzZXR0aW5nIHRoZSB1c2VyIHIxLiAgVGh1cyB3ZSBhbGxvdyB0aGUg c3RhY2sgdG8KKwkgKiBleHBhbmQgdG8gMU1CIHdpdGhvdXQgZnVydGhlciBjaGVja3MuCisJICov CisJaWYgKGFkZHJlc3MgKyAweDEwMDAwMCA8IHZtYS0+dm1fZW5kKSB7CisJCS8qIGdldCB1c2Vy IHJlZ3MgZXZlbiBpZiB0aGlzIGZhdWx0IGlzIGluIGtlcm5lbCBtb2RlICovCisJCXN0cnVjdCBw dF9yZWdzICp1cmVncyA9IGN1cnJlbnQtPnRocmVhZC5yZWdzOworCQlpZiAodXJlZ3MgPT0gTlVM TCkKKwkJCXJldHVybiBmYWxzZTsKKworCQkvKgorCQkgKiBBIHVzZXItbW9kZSBhY2Nlc3MgdG8g YW4gYWRkcmVzcyBhIGxvbmcgd2F5IGJlbG93CisJCSAqIHRoZSBzdGFjayBwb2ludGVyIGlzIG9u bHkgdmFsaWQgaWYgdGhlIGluc3RydWN0aW9uCisJCSAqIGlzIG9uZSB3aGljaCB3b3VsZCB1cGRh dGUgdGhlIHN0YWNrIHBvaW50ZXIgdG8gdGhlCisJCSAqIGFkZHJlc3MgYWNjZXNzZWQgaWYgdGhl IGluc3RydWN0aW9uIGNvbXBsZXRlZCwKKwkJICogaS5lLiBlaXRoZXIgc3R3dSBycyxuKHIxKSBv ciBzdHd1eCBycyxyMSxyYgorCQkgKiAob3IgdGhlIGJ5dGUsIGhhbGZ3b3JkLCBmbG9hdCBvciBk b3VibGUgZm9ybXMpLgorCQkgKgorCQkgKiBJZiB3ZSBkb24ndCBjaGVjayB0aGlzIHRoZW4gYW55 IHdyaXRlIHRvIHRoZSBhcmVhCisJCSAqIGJldHdlZW4gdGhlIGxhc3QgbWFwcGVkIHJlZ2lvbiBh bmQgdGhlIHN0YWNrIHdpbGwKKwkJICogZXhwYW5kIHRoZSBzdGFjayByYXRoZXIgdGhhbiBzZWdm YXVsdGluZy4KKwkJICovCisJCWlmIChhZGRyZXNzICsgMjA0OCA8IHVyZWdzLT5ncHJbMV0gJiYK KwkJICAgICEoZXJyX2NvZGUgJiBQRl9DQU5fR1JPV19TVEFDSykpCisJCQlyZXR1cm4gZmFsc2U7 CisJfQorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYWNjZXNzX2Vycm9y KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycl9jb2RlLAorCQkJCXN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworI2lmIGRlZmluZWQoQ09ORklHXzZ4eCkKKwkvKiBh biBlcnJvciBzdWNoIGFzIGx3YXJ4IHRvIEkvTyBjb250cm9sbGVyIHNwYWNlLAorCSAgIGFkZHJl c3MgbWF0Y2hpbmcgREFCUiwgZWNpd3gsIGV0Yy4gKi8KKwlpZiAoZXJyX2NvZGUgJiAweDk1NzAw MDAwKQorCQlyZXR1cm4gdHJ1ZTsKKyNlbmRpZiAvKiBDT05GSUdfNnh4ICovCisjaWYgZGVmaW5l ZChDT05GSUdfOHh4KQorICAgICAgICAvKiBUaGUgTVBDOHh4IHNlZW1zIHRvIGFsd2F5cyBzZXQg MHg4MDAwMDAwMCwgd2hpY2ggaXMKKyAgICAgICAgICogInVuZGVmaW5lZCIuICBPZiB0aG9zZSB0 aGF0IGNhbiBiZSBzZXQsIHRoaXMgaXMgdGhlIG9ubHkKKyAgICAgICAgICogb25lIHdoaWNoIHNl ZW1zIGJhZC4KKyAgICAgICAgICovCisJaWYgKGVycl9jb2RlICYgMHgxMDAwMDAwMCkKKyAgICAg ICAgICAgICAgICAvKiBHdWFyZGVkIHN0b3JhZ2UgZXJyb3IuICovCisJCXJldHVybiB0cnVlOwor I2VuZGlmIC8qIENPTkZJR184eHggKi8KKworCWlmIChlcnJfY29kZSAmIFBGX0VYRUMpIHsKKwkJ LyoKKwkJICogQWxsb3cgZXhlY3V0aW9uIGZyb20gcmVhZGFibGUgYXJlYXMgaWYgdGhlIE1NVSBk b2VzIG5vdAorCQkgKiBwcm92aWRlIHNlcGFyYXRlIGNvbnRyb2xzIG92ZXIgcmVhZGluZyBhbmQg ZXhlY3V0aW5nLgorCQkgKgorCQkgKiBOb3RlOiBUaGF0IGNvZGUgdXNlZCB0byBub3QgYmUgZW5h YmxlZCBmb3IgNHh4L0Jvb2tFLgorCQkgKiBJdCBpcyBub3cgYXMgSS9EIGNhY2hlIGNvaGVyZW5j eSBmb3IgdGhlc2UgaXMgZG9uZSBhdAorCQkgKiBzZXRfcHRlX2F0KCkgdGltZSBhbmQgSSBzZWUg bm8gcmVhc29uIHdoeSB0aGUgdGVzdAorCQkgKiBiZWxvdyB3b3VsZG4ndCBiZSB2YWxpZCBvbiB0 aG9zZSBwcm9jZXNzb3JzLiBUaGlzIC1tYXktCisJCSAqIGJyZWFrIHByb2dyYW1zIGNvbXBpbGVk IHdpdGggYSByZWFsbHkgb2xkIEFCSSB0aG91Z2guCisJCSAqLworCQlpZiAoISh2bWEtPnZtX2Zs YWdzICYgVk1fRVhFQykgJiYKKwkJICAgIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9OT0VYRUNV VEUpIHx8CisJCSAgICAgISh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9XUklURSkpKSkK KwkJCXJldHVybiB0cnVlOworI2lmZGVmIENPTkZJR19QUENfU1REX01NVQorCQkvKgorCQkgKiBw cm90ZmF1bHQgc2hvdWxkIG9ubHkgaGFwcGVuIGR1ZSB0byB1cworCQkgKiBtYXBwaW5nIGEgcmVn aW9uIHJlYWRvbmx5IHRlbXBvcmFyaWx5LiBQUk9UX05PTkUKKwkJICogaXMgYWxzbyBjb3ZlcmVk IGJ5IHRoZSBWTUEgY2hlY2sgYWJvdmUuCisJCSAqLworCQlXQVJOX09OX09OQ0UoZXJyX2NvZGUg JiBEU0lTUl9QUk9URkFVTFQpOworI2VuZGlmIC8qIENPTkZJR19QUENfU1REX01NVSAqLworCS8q IGEgd3JpdGUgKi8KKwl9IGVsc2UgaWYgKGZhdWx0X2lzX3dyaXRlKHJlZ3MsIGVycl9jb2RlKSkg eworCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKQorCQkJcmV0dXJuIHRydWU7CisJ LyogYSByZWFkICovCisJfSBlbHNlIHsKKwkJaWYgKCEodm1hLT52bV9mbGFncyAmIChWTV9SRUFE IHwgVk1fRVhFQyB8IFZNX1dSSVRFKSkpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJV0FSTl9PTl9PTkNF KGVycl9jb2RlICYgRFNJU1JfUFJPVEZBVUxUKTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisv KiBFcnJvciBoYW5kbGVycyAqLworCitncGZfcmV0X3QgaGFuZGxlX2JhZF9hcmVhKHN0cnVjdCBw dF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCisJCQkgIHVuc2lnbmVkIGxv bmcgYWRkcmVzcywgaW50IHNpX2NvZGUpOworCitzdGF0aWMgaW5saW5lIGdwZl9yZXRfdCBoYW5k bGVfa2VybmVsX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgICAgdW5zaWduZWQg bG9uZyBlcnJvcl9jb2RlLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgc2ln LAorCQkJCQkgICAgaW50IHNpX2NvZGUpCit7CisJcmV0dXJuIHNpZzsKK30KKworZ3BmX3JldF90 IGRvX3NpZ2J1cyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2Rl LAorCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBpbnQgZmF1bHQpOworCitz dGF0aWMgaW5saW5lIHZvaWQgYXJjaF9hY2NvdW50X21ham9yX2ZhdWx0KHZvaWQpCit7CisjaWZk ZWYgQ09ORklHX1BQQ19TTUxQQVIKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVS RV9DTU8pKSB7CisJCXUzMiBwYWdlX2luczsKKworCQlwcmVlbXB0X2Rpc2FibGUoKTsKKwkJcGFn ZV9pbnMgPSBiZTMyX3RvX2NwdShnZXRfbHBwYWNhKCktPnBhZ2VfaW5zKTsKKwkJcGFnZV9pbnMg Kz0gMSA8PCBQQUdFX0ZBQ1RPUjsKKwkJZ2V0X2xwcGFjYSgpLT5wYWdlX2lucyA9IGNwdV90b19i ZTMyKHBhZ2VfaW5zKTsKKwkJcHJlZW1wdF9lbmFibGUoKTsKKwl9CisjZW5kaWYgLyogQ09ORklH X1BQQ19TTUxQQVIgKi8KK30KKworI2VuZGlmIC8qICBfQVNNX1g4Nl9GQVVMVF9IICovCmRpZmYg LS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYyBiL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5j CmluZGV4IGIzOTY4NjguLmM1MWMxNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9mYXVs dC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j bHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvY29udGV4dF90cmFja2lu Zy5oPgogI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KKyNpbmNsdWRlIDxsaW51eC9mYXVsdC5o PgogCiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAg LTcyLDE1ICs3MywxNSBAQCBzdGF0aWMgaW5saW5lIGludCBub3RpZnlfcGFnZV9mYXVsdChzdHJ1 Y3QgcHRfcmVncyAqcmVncykKICAqIENoZWNrIHdoZXRoZXIgdGhlIGluc3RydWN0aW9uIGF0IHJl Z3MtPm5pcCBpcyBhIHN0b3JlIHVzaW5nCiAgKiBhbiB1cGRhdGUgYWRkcmVzc2luZyBmb3JtIHdo aWNoIHdpbGwgdXBkYXRlIHIxLgogICovCi1zdGF0aWMgaW50IHN0b3JlX3VwZGF0ZXNfc3Aoc3Ry dWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgYm9vbCBzdG9yZV91cGRhdGVzX3NwKHN0cnVjdCBw dF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGludCBpbnN0OwogCiAJaWYgKGdldF91c2VyKGlu c3QsICh1bnNpZ25lZCBpbnQgX191c2VyICopcmVncy0+bmlwKSkKLQkJcmV0dXJuIDA7CisJCXJl dHVybiBmYWxzZTsKIAkvKiBjaGVjayBmb3IgMSBpbiB0aGUgckEgZmllbGQgKi8KIAlpZiAoKChp bnN0ID4+IDE2KSAmIDB4MWYpICE9IDEpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAJ LyogY2hlY2sgbWFqb3Igb3Bjb2RlICovCiAJc3dpdGNoIChpbnN0ID4+IDI2KSB7CiAJY2FzZSAz NzoJLyogc3R3dSAqLwpAQCAtODgsNyArODksNyBAQCBzdGF0aWMgaW50IHN0b3JlX3VwZGF0ZXNf c3Aoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJY2FzZSA0NToJLyogc3RodSAqLwogCWNhc2UgNTM6 CS8qIHN0ZnN1ICovCiAJY2FzZSA1NToJLyogc3RmZHUgKi8KLQkJcmV0dXJuIDE7CisJCXJldHVy biB0cnVlOwogCWNhc2UgNjI6CS8qIHN0ZCBvciBzdGR1ICovCiAJCXJldHVybiAoaW5zdCAmIDMp ID09IDE7CiAJY2FzZSAzMToKQEAgLTEwMCwxMCArMTAxLDEwIEBAIHN0YXRpYyBpbnQgc3RvcmVf dXBkYXRlc19zcChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIAkJY2FzZSA0Mzk6CS8qIHN0aHV4ICov CiAJCWNhc2UgNjk1OgkvKiBzdGZzdXggKi8KIAkJY2FzZSA3NTk6CS8qIHN0ZmR1eCAqLwotCQkJ cmV0dXJuIDE7CisJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4g ZmFsc2U7CiB9CiAvKgogICogZG9fcGFnZV9mYXVsdCBlcnJvciBoYW5kbGluZyBoZWxwZXJzCkBA IC0xMTMsMTYgKzExNCwxNCBAQCBzdGF0aWMgaW50IHN0b3JlX3VwZGF0ZXNfc3Aoc3RydWN0IHB0 X3JlZ3MgKnJlZ3MpCiAjZGVmaW5lIE1NX0ZBVUxUX0NPTlRJTlVFCS0xCiAjZGVmaW5lIE1NX0ZB VUxUX0VSUihzaWcpCShzaWcpCiAKLXN0YXRpYyBpbnQgZG9fc2lnYnVzKHN0cnVjdCBwdF9yZWdz ICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCSAgICAgdW5zaWduZWQgaW50IGZhdWx0 KQorZ3BmX3JldF90IGRvX3NpZ2J1cyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9u ZyBlcnJvcl9jb2RlLAorCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBpbnQg ZmF1bHQpCiB7CiAJc2lnaW5mb190IGluZm87CiAJdW5zaWduZWQgaW50IGxzYiA9IDA7CiAKLQl1 cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCiAJaWYgKCF1c2VyX21vZGUocmVncykp Ci0JCXJldHVybiBNTV9GQVVMVF9FUlIoU0lHQlVTKTsKKwkJcmV0dXJuIFNJR0JVUzsKIAogCWN1 cnJlbnQtPnRocmVhZC50cmFwX25yID0gQlVTX0FEUkVSUjsKIAlpbmZvLnNpX3NpZ25vID0gU0lH QlVTOwpAQCAtMTQzLDUzICsxNDIsMjUgQEAgc3RhdGljIGludCBkb19zaWdidXMoc3RydWN0IHB0 X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKICNlbmRpZgogCWluZm8uc2lfYWRk cl9sc2IgPSBsc2I7CiAJZm9yY2Vfc2lnX2luZm8oU0lHQlVTLCAmaW5mbywgY3VycmVudCk7Ci0J cmV0dXJuIE1NX0ZBVUxUX1JFVFVSTjsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtbV9m YXVsdF9lcnJvcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQg ZmF1bHQpCitncGZfcmV0X3QgaGFuZGxlX2JhZF9hcmVhKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1 bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCisJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50 IHNpX2NvZGUpCiB7Ci0JLyoKLQkgKiBQYWdlZmF1bHQgd2FzIGludGVycnVwdGVkIGJ5IFNJR0tJ TEwuIFdlIGhhdmUgbm8gcmVhc29uIHRvCi0JICogY29udGludWUgdGhlIHBhZ2VmYXVsdC4KLQkg Ki8KLQlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJLyoKLQkJICogSWYg d2UgaGF2ZSByZXRyeSBzZXQsIHRoZSBtbWFwIHNlbWFwaG9yZSB3aWxsIGhhdmUKLQkJICogYWxy YWR5IGJlZW4gcmVsZWFzZWQgaW4gX19sb2NrX3BhZ2Vfb3JfcmV0cnkoKS4gRWxzZQotCQkgKiB3 ZSByZWxlYXNlIGl0IG5vdy4KLQkJICovCi0JCWlmICghKGZhdWx0ICYgVk1fRkFVTFRfUkVUUlkp KQotCQkJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQkJLyogQ29taW5nIGZyb20g a2VybmVsLCB3ZSBuZWVkIHRvIGRlYWwgd2l0aCB1YWNjZXNzIGZpeHVwcyAqLwotCQlpZiAodXNl cl9tb2RlKHJlZ3MpKQotCQkJcmV0dXJuIE1NX0ZBVUxUX1JFVFVSTjsKLQkJcmV0dXJuIE1NX0ZB VUxUX0VSUihTSUdLSUxMKTsKLQl9CiAKLQkvKiBObyBmYXVsdDogYmUgaGFwcHkgKi8KLQlpZiAo IShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkKLQkJcmV0dXJuIE1NX0ZBVUxUX0NPTlRJTlVFOwot Ci0JLyogT3V0IG9mIG1lbW9yeSAqLwotCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkgewotCQl1 cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCi0JCS8qCi0JCSAqIFdlIHJhbiBvdXQg b2YgbWVtb3J5LCBvciBzb21lIG90aGVyIHRoaW5nIGhhcHBlbmVkIHRvIHVzIHRoYXQKLQkJICog bWFkZSB1cyB1bmFibGUgdG8gaGFuZGxlIHRoZSBwYWdlIGZhdWx0IGdyYWNlZnVsbHkuCi0JCSAq LwotCQlpZiAoIXVzZXJfbW9kZShyZWdzKSkKLQkJCXJldHVybiBNTV9GQVVMVF9FUlIoU0lHS0lM TCk7Ci0JCXBhZ2VmYXVsdF9vdXRfb2ZfbWVtb3J5KCk7Ci0JCXJldHVybiBNTV9GQVVMVF9SRVRV Uk47CisJLyogVXNlciBtb2RlIGFjY2Vzc2VzIGNhdXNlIGEgU0lHU0VHViAqLworCWlmICh1c2Vy X21vZGUocmVncykpIHsKKwkJX2V4Y2VwdGlvbihTSUdTRUdWLCByZWdzLCBzaV9jb2RlLCBhZGRy ZXNzKTsKKwkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKGZhdWx0ICYgKFZNX0ZBVUxUX1NJR0JVU3xW TV9GQVVMVF9IV1BPSVNPTnxWTV9GQVVMVF9IV1BPSVNPTl9MQVJHRSkpCi0JCXJldHVybiBkb19z aWdidXMocmVncywgYWRkciwgZmF1bHQpOworCWlmICgoZXJyb3JfY29kZSAmIFBGX0VYRUMpICYm IChlcnJvcl9jb2RlICYgRFNJU1JfUFJPVEZBVUxUKSkKKwkJcHJpbnRrX3JhdGVsaW1pdGVkKEtF Uk5fQ1JJVCAia2VybmVsIHRyaWVkIHRvIGV4ZWN1dGUgTlgtcHJvdGVjdGVkIgorCQkJCSAgICIg cGFnZSAoJWx4KSAtIGV4cGxvaXQgYXR0ZW1wdD8gKHVpZDogJWQpXG4iLAorCQkJCSAgIGFkZHJl c3MsIGZyb21fa3VpZCgmaW5pdF91c2VyX25zLCBjdXJyZW50X3VpZCgpKSk7CiAKLQkvKiBXZSBk b24ndCB1bmRlcnN0YW5kIHRoZSBmYXVsdCBjb2RlLCB0aGlzIGlzIGZhdGFsICovCi0JQlVHKCk7 Ci0JcmV0dXJuIE1NX0ZBVUxUX0NPTlRJTlVFOworCXJldHVybiBTSUdTRUdWOwogfQogCiAvKgpA QCAtMjA1LDE5ICsxNzYsMTEgQEAgc3RhdGljIGludCBtbV9mYXVsdF9lcnJvcihzdHJ1Y3QgcHRf cmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgZmF1bHQpCiAgKiBUaGUgcmV0dXJu IHZhbHVlIGlzIDAgaWYgdGhlIGZhdWx0IHdhcyBoYW5kbGVkLCBvciB0aGUgc2lnbmFsCiAgKiBu dW1iZXIgaWYgdGhpcyBpcyBhIGtlcm5lbCBmYXVsdCB0aGF0IGNhbid0IGJlIGhhbmRsZWQgaGVy ZS4KICAqLwotaW50IF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdz LCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2Rl KQorc3RhdGljIGludCBfX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2ln bmVkIGxvbmcgYWRkcmVzcywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSkKIHsKLQll bnVtIGN0eF9zdGF0ZSBwcmV2X3N0YXRlID0gZXhjZXB0aW9uX2VudGVyKCk7Ci0Jc3RydWN0IHZt X2FyZWFfc3RydWN0ICogdm1hOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07 Ci0JdW5zaWduZWQgaW50IGZsYWdzID0gRkFVTFRfRkxBR19BTExPV19SRVRSWSB8IEZBVUxUX0ZM QUdfS0lMTEFCTEU7Ci0JaW50IGNvZGUgPSBTRUdWX01BUEVSUjsKLQlpbnQgaXNfd3JpdGUgPSAw OwogCWludCB0cmFwID0gVFJBUChyZWdzKTsKLSAJaW50IGlzX2V4ZWMgPSB0cmFwID09IDB4NDAw OwotCWludCBmYXVsdDsKLQlpbnQgcmMgPSAwLCBzdG9yZV91cGRhdGVfc3AgPSAwOwogCiAjaWYg IShkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKSkKIAkvKgpAQCAt MjI4LDEwICsxOTEsNiBAQCBpbnQgX19rcHJvYmVzIGRvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3Jl Z3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAkgKi8KIAlpZiAodHJhcCA9PSAweDQw MCkKIAkJZXJyb3JfY29kZSAmPSAweDQ4MjAwMDAwOwotCWVsc2UKLQkJaXNfd3JpdGUgPSBlcnJv cl9jb2RlICYgRFNJU1JfSVNTVE9SRTsKLSNlbHNlCi0JaXNfd3JpdGUgPSBlcnJvcl9jb2RlICYg RVNSX0RTVDsKICNlbmRpZiAvKiBDT05GSUdfNHh4IHx8IENPTkZJR19CT09LRSAqLwogCiAjaWZk ZWYgQ09ORklHX1BQQ19JQ1NXWApAQCAtMjQxLDMwICsyMDAsMjggQEAgaW50IF9fa3Byb2JlcyBk b19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3Ms CiAJICogbG9vayBhdCBpdAogCSAqLwogCWlmIChlcnJvcl9jb2RlICYgSUNTV1hfRFNJX1VDVCkg ewotCQlyYyA9IGFjb3BfaGFuZGxlX2ZhdWx0KHJlZ3MsIGFkZHJlc3MsIGVycm9yX2NvZGUpOwor CQlnZnBfcmV0X3QgcmMgPSBhY29wX2hhbmRsZV9mYXVsdChyZWdzLCBhZGRyZXNzLCBlcnJvcl9j b2RlKTsKIAkJaWYgKHJjKQotCQkJZ290byBiYWlsOworCQkJcmV0dXJuIHJjOwogCX0KICNlbmRp ZiAvKiBDT05GSUdfUFBDX0lDU1dYICovCiAKIAlpZiAobm90aWZ5X3BhZ2VfZmF1bHQocmVncykp Ci0JCWdvdG8gYmFpbDsKKwkJcmV0dXJuIDA7CiAKIAlpZiAodW5saWtlbHkoZGVidWdnZXJfZmF1 bHRfaGFuZGxlcihyZWdzKSkpCi0JCWdvdG8gYmFpbDsKKwkJcmV0dXJuIDA7CiAKIAkvKiBPbiBh IGtlcm5lbCBTTEIgbWlzcyB3ZSBjYW4gb25seSBjaGVjayBmb3IgYSB2YWxpZCBleGNlcHRpb24g ZW50cnkgKi8KLQlpZiAoIXVzZXJfbW9kZShyZWdzKSAmJiAoYWRkcmVzcyA+PSBUQVNLX1NJWkUp KSB7Ci0JCXJjID0gU0lHU0VHVjsKLQkJZ290byBiYWlsOwotCX0KKwlpZiAoIXVzZXJfbW9kZShy ZWdzKSAmJiAoYWRkcmVzcyA+PSBUQVNLX1NJWkUpKQorCQlyZXR1cm4gU0lHU0VHVjsKIAogI2lm ICEoZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkgfHwgXAogCQkJ ICAgICBkZWZpbmVkKENPTkZJR19QUENfQk9PSzNTXzY0KSkKICAgCWlmIChlcnJvcl9jb2RlICYg RFNJU1JfREFCUk1BVENIKSB7CiAJCS8qIGJyZWFrcG9pbnQgbWF0Y2ggKi8KIAkJZG9fYnJlYWso cmVncywgYWRkcmVzcywgZXJyb3JfY29kZSk7Ci0JCWdvdG8gYmFpbDsKKwkJcmV0dXJuIDA7CiAJ fQogI2VuZGlmCiAKQEAgLTI3MywxMCArMjMwLDkgQEAgaW50IF9fa3Byb2JlcyBkb19wYWdlX2Zh dWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJCWxvY2Fs X2lycV9lbmFibGUoKTsKIAogCWlmIChpbl9hdG9taWMoKSB8fCBtbSA9PSBOVUxMKSB7Ci0JCWlm ICghdXNlcl9tb2RlKHJlZ3MpKSB7Ci0JCQlyYyA9IFNJR1NFR1Y7Ci0JCQlnb3RvIGJhaWw7Ci0J CX0KKwkJaWYgKCF1c2VyX21vZGUocmVncykpCisJCQlyZXR1cm4gU0lHU0VHVjsKKwogCQkvKiBp bl9hdG9taWMoKSBpbiB1c2VyIG1vZGUgaXMgcmVhbGx5IGJhZCwKIAkJICAgYXMgaXMgY3VycmVu dC0+bW0gPT0gTlVMTC4gKi8KIAkJcHJpbnRrKEtFUk5fRU1FUkcgIlBhZ2UgZmF1bHQgaW4gdXNl ciBtb2RlIHdpdGggIgpAQCAtMjg2LDIyMCArMjQyLDM2IEBAIGludCBfX2twcm9iZXMgZG9fcGFn ZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQlk aWUoIldlaXJkIHBhZ2UgZmF1bHQiLCByZWdzLCBTSUdTRUdWKTsKIAl9CiAKLQlwZXJmX3N3X2V2 ZW50KFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMsIDEsIHJlZ3MsIGFkZHJlc3MpOworCWVycm9y X2NvZGUgJj0gfihQRl9DQU5fR1JPV19TVEFDSyB8IFBGX0VYRUMpOwogCiAJLyoKIAkgKiBXZSB3 YW50IHRvIGRvIHRoaXMgb3V0c2lkZSBtbWFwX3NlbSwgYmVjYXVzZSByZWFkaW5nIGNvZGUgYXJv dW5kIG5pcAogCSAqIGNhbiByZXN1bHQgaW4gZmF1bHQsIHdoaWNoIHdpbGwgY2F1c2UgYSBkZWFk bG9jayB3aGVuIGNhbGxlZCB3aXRoCiAJICogbW1hcF9zZW0gaGVsZAogCSAqLwotCWlmICh1c2Vy X21vZGUocmVncykpCi0JCXN0b3JlX3VwZGF0ZV9zcCA9IHN0b3JlX3VwZGF0ZXNfc3AocmVncyk7 Ci0KLQlpZiAodXNlcl9tb2RlKHJlZ3MpKQotCQlmbGFncyB8PSBGQVVMVF9GTEFHX1VTRVI7Ci0K LQkvKiBXaGVuIHJ1bm5pbmcgaW4gdGhlIGtlcm5lbCB3ZSBleHBlY3QgZmF1bHRzIHRvIG9jY3Vy IG9ubHkgdG8KLQkgKiBhZGRyZXNzZXMgaW4gdXNlciBzcGFjZS4gIEFsbCBvdGhlciBmYXVsdHMg cmVwcmVzZW50IGVycm9ycyBpbiB0aGUKLQkgKiBrZXJuZWwgYW5kIHNob3VsZCBnZW5lcmF0ZSBh biBPT1BTLiAgVW5mb3J0dW5hdGVseSwgaW4gdGhlIGNhc2Ugb2YgYW4KLQkgKiBlcnJvbmVvdXMg ZmF1bHQgb2NjdXJyaW5nIGluIGEgY29kZSBwYXRoIHdoaWNoIGFscmVhZHkgaG9sZHMgbW1hcF9z ZW0KLQkgKiB3ZSB3aWxsIGRlYWRsb2NrIGF0dGVtcHRpbmcgdG8gdmFsaWRhdGUgdGhlIGZhdWx0 IGFnYWluc3QgdGhlCi0JICogYWRkcmVzcyBzcGFjZS4gIEx1Y2tpbHkgdGhlIGtlcm5lbCBvbmx5 IHZhbGlkbHkgcmVmZXJlbmNlcyB1c2VyCi0JICogc3BhY2UgZnJvbSB3ZWxsIGRlZmluZWQgYXJl YXMgb2YgY29kZSwgd2hpY2ggYXJlIGxpc3RlZCBpbiB0aGUKLQkgKiBleGNlcHRpb25zIHRhYmxl LgotCSAqCi0JICogQXMgdGhlIHZhc3QgbWFqb3JpdHkgb2YgZmF1bHRzIHdpbGwgYmUgdmFsaWQg d2Ugd2lsbCBvbmx5IHBlcmZvcm0KLQkgKiB0aGUgc291cmNlIHJlZmVyZW5jZSBjaGVjayB3aGVu IHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgb2YgYSBkZWFkbG9jay4KLQkgKiBBdHRlbXB0IHRvIGxv Y2sgdGhlIGFkZHJlc3Mgc3BhY2UsIGlmIHdlIGNhbm5vdCB3ZSB0aGVuIHZhbGlkYXRlIHRoZQot CSAqIHNvdXJjZS4gIElmIHRoaXMgaXMgaW52YWxpZCB3ZSBjYW4gc2tpcCB0aGUgYWRkcmVzcyBz cGFjZSBjaGVjaywKLQkgKiB0aHVzIGF2b2lkaW5nIHRoZSBkZWFkbG9jay4KLQkgKi8KLQlpZiAo IWRvd25fcmVhZF90cnlsb2NrKCZtbS0+bW1hcF9zZW0pKSB7Ci0JCWlmICghdXNlcl9tb2RlKHJl Z3MpICYmICFzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhyZWdzLT5uaXApKQotCQkJZ290byBiYWRf YXJlYV9ub3NlbWFwaG9yZTsKLQotcmV0cnk6Ci0JCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsK LQl9IGVsc2UgewotCQkvKgotCQkgKiBUaGUgYWJvdmUgZG93bl9yZWFkX3RyeWxvY2soKSBtaWdo dCBoYXZlIHN1Y2NlZWRlZCBpbgotCQkgKiB3aGljaCBjYXNlIHdlJ2xsIGhhdmUgbWlzc2VkIHRo ZSBtaWdodF9zbGVlcCgpIGZyb20KLQkJICogZG93bl9yZWFkKCk6Ci0JCSAqLwotCQltaWdodF9z bGVlcCgpOwotCX0KLQotCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyZXNzKTsKLQlpZiAoIXZtYSkK LQkJZ290byBiYWRfYXJlYTsKLQlpZiAodm1hLT52bV9zdGFydCA8PSBhZGRyZXNzKQotCQlnb3Rv IGdvb2RfYXJlYTsKLQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fR1JPV1NET1dOKSkKLQkJZ290 byBiYWRfYXJlYTsKLQotCS8qCi0JICogTi5CLiBUaGUgUE9XRVIvT3BlbiBBQkkgYWxsb3dzIHBy b2dyYW1zIHRvIGFjY2VzcyB1cCB0bwotCSAqIDI4OCBieXRlcyBiZWxvdyB0aGUgc3RhY2sgcG9p bnRlci4KLQkgKiBUaGUga2VybmVsIHNpZ25hbCBkZWxpdmVyeSBjb2RlIHdyaXRlcyB1cCB0byBh Ym91dCAxLjVrQgotCSAqIGJlbG93IHRoZSBzdGFjayBwb2ludGVyIChyMSkgYmVmb3JlIGRlY3Jl bWVudGluZyBpdC4KLQkgKiBUaGUgZXhlYyBjb2RlIGNhbiB3cml0ZSBzbGlnaHRseSBvdmVyIDY0 MGtCIHRvIHRoZSBzdGFjawotCSAqIGJlZm9yZSBzZXR0aW5nIHRoZSB1c2VyIHIxLiAgVGh1cyB3 ZSBhbGxvdyB0aGUgc3RhY2sgdG8KLQkgKiBleHBhbmQgdG8gMU1CIHdpdGhvdXQgZnVydGhlciBj aGVja3MuCi0JICovCi0JaWYgKGFkZHJlc3MgKyAweDEwMDAwMCA8IHZtYS0+dm1fZW5kKSB7Ci0J CS8qIGdldCB1c2VyIHJlZ3MgZXZlbiBpZiB0aGlzIGZhdWx0IGlzIGluIGtlcm5lbCBtb2RlICov Ci0JCXN0cnVjdCBwdF9yZWdzICp1cmVncyA9IGN1cnJlbnQtPnRocmVhZC5yZWdzOwotCQlpZiAo dXJlZ3MgPT0gTlVMTCkKLQkJCWdvdG8gYmFkX2FyZWE7Ci0KLQkJLyoKLQkJICogQSB1c2VyLW1v ZGUgYWNjZXNzIHRvIGFuIGFkZHJlc3MgYSBsb25nIHdheSBiZWxvdwotCQkgKiB0aGUgc3RhY2sg cG9pbnRlciBpcyBvbmx5IHZhbGlkIGlmIHRoZSBpbnN0cnVjdGlvbgotCQkgKiBpcyBvbmUgd2hp Y2ggd291bGQgdXBkYXRlIHRoZSBzdGFjayBwb2ludGVyIHRvIHRoZQotCQkgKiBhZGRyZXNzIGFj Y2Vzc2VkIGlmIHRoZSBpbnN0cnVjdGlvbiBjb21wbGV0ZWQsCi0JCSAqIGkuZS4gZWl0aGVyIHN0 d3UgcnMsbihyMSkgb3Igc3R3dXggcnMscjEscmIKLQkJICogKG9yIHRoZSBieXRlLCBoYWxmd29y ZCwgZmxvYXQgb3IgZG91YmxlIGZvcm1zKS4KLQkJICoKLQkJICogSWYgd2UgZG9uJ3QgY2hlY2sg dGhpcyB0aGVuIGFueSB3cml0ZSB0byB0aGUgYXJlYQotCQkgKiBiZXR3ZWVuIHRoZSBsYXN0IG1h cHBlZCByZWdpb24gYW5kIHRoZSBzdGFjayB3aWxsCi0JCSAqIGV4cGFuZCB0aGUgc3RhY2sgcmF0 aGVyIHRoYW4gc2VnZmF1bHRpbmcuCi0JCSAqLwotCQlpZiAoYWRkcmVzcyArIDIwNDggPCB1cmVn cy0+Z3ByWzFdICYmICFzdG9yZV91cGRhdGVfc3ApCi0JCQlnb3RvIGJhZF9hcmVhOwotCX0KLQlp ZiAoZXhwYW5kX3N0YWNrKHZtYSwgYWRkcmVzcykpCi0JCWdvdG8gYmFkX2FyZWE7Ci0KLWdvb2Rf YXJlYToKLQljb2RlID0gU0VHVl9BQ0NFUlI7Ci0jaWYgZGVmaW5lZChDT05GSUdfNnh4KQotCWlm IChlcnJvcl9jb2RlICYgMHg5NTcwMDAwMCkKLQkJLyogYW4gZXJyb3Igc3VjaCBhcyBsd2FyeCB0 byBJL08gY29udHJvbGxlciBzcGFjZSwKLQkJICAgYWRkcmVzcyBtYXRjaGluZyBEQUJSLCBlY2l3 eCwgZXRjLiAqLwotCQlnb3RvIGJhZF9hcmVhOwotI2VuZGlmIC8qIENPTkZJR182eHggKi8KLSNp ZiBkZWZpbmVkKENPTkZJR184eHgpCi0gICAgICAgIC8qIFRoZSBNUEM4eHggc2VlbXMgdG8gYWx3 YXlzIHNldCAweDgwMDAwMDAwLCB3aGljaCBpcwotICAgICAgICAgKiAidW5kZWZpbmVkIi4gIE9m IHRob3NlIHRoYXQgY2FuIGJlIHNldCwgdGhpcyBpcyB0aGUgb25seQotICAgICAgICAgKiBvbmUg d2hpY2ggc2VlbXMgYmFkLgotICAgICAgICAgKi8KLQlpZiAoZXJyb3JfY29kZSAmIDB4MTAwMDAw MDApCi0gICAgICAgICAgICAgICAgLyogR3VhcmRlZCBzdG9yYWdlIGVycm9yLiAqLwotCQlnb3Rv IGJhZF9hcmVhOwotI2VuZGlmIC8qIENPTkZJR184eHggKi8KLQotCWlmIChpc19leGVjKSB7Ci0J CS8qCi0JCSAqIEFsbG93IGV4ZWN1dGlvbiBmcm9tIHJlYWRhYmxlIGFyZWFzIGlmIHRoZSBNTVUg ZG9lcyBub3QKLQkJICogcHJvdmlkZSBzZXBhcmF0ZSBjb250cm9scyBvdmVyIHJlYWRpbmcgYW5k IGV4ZWN1dGluZy4KLQkJICoKLQkJICogTm90ZTogVGhhdCBjb2RlIHVzZWQgdG8gbm90IGJlIGVu YWJsZWQgZm9yIDR4eC9Cb29rRS4KLQkJICogSXQgaXMgbm93IGFzIEkvRCBjYWNoZSBjb2hlcmVu Y3kgZm9yIHRoZXNlIGlzIGRvbmUgYXQKLQkJICogc2V0X3B0ZV9hdCgpIHRpbWUgYW5kIEkgc2Vl IG5vIHJlYXNvbiB3aHkgdGhlIHRlc3QKLQkJICogYmVsb3cgd291bGRuJ3QgYmUgdmFsaWQgb24g dGhvc2UgcHJvY2Vzc29ycy4gVGhpcyAtbWF5LQotCQkgKiBicmVhayBwcm9ncmFtcyBjb21waWxl ZCB3aXRoIGEgcmVhbGx5IG9sZCBBQkkgdGhvdWdoLgotCQkgKi8KLQkJaWYgKCEodm1hLT52bV9m bGFncyAmIFZNX0VYRUMpICYmCi0JCSAgICAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfTk9FWEVD VVRFKSB8fAotCQkgICAgICEodm1hLT52bV9mbGFncyAmIChWTV9SRUFEIHwgVk1fV1JJVEUpKSkp Ci0JCQlnb3RvIGJhZF9hcmVhOwotI2lmZGVmIENPTkZJR19QUENfU1REX01NVQotCQkvKgotCQkg KiBwcm90ZmF1bHQgc2hvdWxkIG9ubHkgaGFwcGVuIGR1ZSB0byB1cwotCQkgKiBtYXBwaW5nIGEg cmVnaW9uIHJlYWRvbmx5IHRlbXBvcmFyaWx5LiBQUk9UX05PTkUKLQkJICogaXMgYWxzbyBjb3Zl cmVkIGJ5IHRoZSBWTUEgY2hlY2sgYWJvdmUuCi0JCSAqLwotCQlXQVJOX09OX09OQ0UoZXJyb3Jf Y29kZSAmIERTSVNSX1BST1RGQVVMVCk7Ci0jZW5kaWYgLyogQ09ORklHX1BQQ19TVERfTU1VICov Ci0JLyogYSB3cml0ZSAqLwotCX0gZWxzZSBpZiAoaXNfd3JpdGUpIHsKLQkJaWYgKCEodm1hLT52 bV9mbGFncyAmIFZNX1dSSVRFKSkKLQkJCWdvdG8gYmFkX2FyZWE7Ci0JCWZsYWdzIHw9IEZBVUxU X0ZMQUdfV1JJVEU7Ci0JLyogYSByZWFkICovCi0JfSBlbHNlIHsKLQkJaWYgKCEodm1hLT52bV9m bGFncyAmIChWTV9SRUFEIHwgVk1fRVhFQyB8IFZNX1dSSVRFKSkpCi0JCQlnb3RvIGJhZF9hcmVh OwotCQlXQVJOX09OX09OQ0UoZXJyb3JfY29kZSAmIERTSVNSX1BST1RGQVVMVCk7Ci0JfQotCi0J LyoKLQkgKiBJZiBmb3IgYW55IHJlYXNvbiBhdCBhbGwgd2UgY291bGRuJ3QgaGFuZGxlIHRoZSBm YXVsdCwKLQkgKiBtYWtlIHN1cmUgd2UgZXhpdCBncmFjZWZ1bGx5IHJhdGhlciB0aGFuIGVuZGxl c3NseSByZWRvCi0JICogdGhlIGZhdWx0LgotCSAqLwotCWZhdWx0ID0gaGFuZGxlX21tX2ZhdWx0 KG1tLCB2bWEsIGFkZHJlc3MsIGZsYWdzKTsKLQlpZiAodW5saWtlbHkoZmF1bHQgJiAoVk1fRkFV TFRfUkVUUll8Vk1fRkFVTFRfRVJST1IpKSkgewotCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdT RUdWKQotCQkJZ290byBiYWRfYXJlYTsKLQkJcmMgPSBtbV9mYXVsdF9lcnJvcihyZWdzLCBhZGRy ZXNzLCBmYXVsdCk7Ci0JCWlmIChyYyA+PSBNTV9GQVVMVF9SRVRVUk4pCi0JCQlnb3RvIGJhaWw7 Ci0JCWVsc2UKLQkJCXJjID0gMDsKLQl9Ci0KLQkvKgotCSAqIE1ham9yL21pbm9yIHBhZ2UgZmF1 bHQgYWNjb3VudGluZyBpcyBvbmx5IGRvbmUgb24gdGhlCi0JICogaW5pdGlhbCBhdHRlbXB0LiBJ ZiB3ZSBnbyB0aHJvdWdoIGEgcmV0cnksIGl0IGlzIGV4dHJlbWVseQotCSAqIGxpa2VseSB0aGF0 IHRoZSBwYWdlIHdpbGwgYmUgZm91bmQgaW4gcGFnZSBjYWNoZSBhdCB0aGF0IHBvaW50LgotCSAq LwotCWlmIChmbGFncyAmIEZBVUxUX0ZMQUdfQUxMT1dfUkVUUlkpIHsKLQkJaWYgKGZhdWx0ICYg Vk1fRkFVTFRfTUFKT1IpIHsKLQkJCWN1cnJlbnQtPm1hal9mbHQrKzsKLQkJCXBlcmZfc3dfZXZl bnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NQUosIDEsCi0JCQkJICAgICAgcmVncywgYWRk cmVzcyk7Ci0jaWZkZWYgQ09ORklHX1BQQ19TTUxQQVIKLQkJCWlmIChmaXJtd2FyZV9oYXNfZmVh dHVyZShGV19GRUFUVVJFX0NNTykpIHsKLQkJCQl1MzIgcGFnZV9pbnM7Ci0KLQkJCQlwcmVlbXB0 X2Rpc2FibGUoKTsKLQkJCQlwYWdlX2lucyA9IGJlMzJfdG9fY3B1KGdldF9scHBhY2EoKS0+cGFn ZV9pbnMpOwotCQkJCXBhZ2VfaW5zICs9IDEgPDwgUEFHRV9GQUNUT1I7Ci0JCQkJZ2V0X2xwcGFj YSgpLT5wYWdlX2lucyA9IGNwdV90b19iZTMyKHBhZ2VfaW5zKTsKLQkJCQlwcmVlbXB0X2VuYWJs ZSgpOwotCQkJfQotI2VuZGlmIC8qIENPTkZJR19QUENfU01MUEFSICovCi0JCX0gZWxzZSB7Ci0J CQljdXJyZW50LT5taW5fZmx0Kys7Ci0JCQlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfUEFH RV9GQVVMVFNfTUlOLCAxLAotCQkJCSAgICAgIHJlZ3MsIGFkZHJlc3MpOwotCQl9Ci0JCWlmIChm YXVsdCAmIFZNX0ZBVUxUX1JFVFJZKSB7Ci0JCQkvKiBDbGVhciBGQVVMVF9GTEFHX0FMTE9XX1JF VFJZIHRvIGF2b2lkIGFueSByaXNrCi0JCQkgKiBvZiBzdGFydmF0aW9uLiAqLwotCQkJZmxhZ3Mg Jj0gfkZBVUxUX0ZMQUdfQUxMT1dfUkVUUlk7Ci0JCQlmbGFncyB8PSBGQVVMVF9GTEFHX1RSSUVE OwotCQkJZ290byByZXRyeTsKLQkJfQotCX0KLQotCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0J Z290byBiYWlsOworCWlmICh1c2VyX21vZGUocmVncykgJiYgc3RvcmVfdXBkYXRlc19zcChyZWdz KSkKKwkJZXJyb3JfY29kZSB8PSBQRl9DQU5fR1JPV19TVEFDSzsKIAotYmFkX2FyZWE6Ci0JdXBf cmVhZCgmbW0tPm1tYXBfc2VtKTsKLQotYmFkX2FyZWFfbm9zZW1hcGhvcmU6Ci0JLyogVXNlciBt b2RlIGFjY2Vzc2VzIGNhdXNlIGEgU0lHU0VHViAqLwotCWlmICh1c2VyX21vZGUocmVncykpIHsK LQkJX2V4Y2VwdGlvbihTSUdTRUdWLCByZWdzLCBjb2RlLCBhZGRyZXNzKTsKLQkJZ290byBiYWls OwotCX0KKwkvKiBTZXQgZmxhZyBpZiBleGVjIGZhdWx0IGZvciB1c2UgYnkgYWNjZXNzX2Vycm9y ICovCisJaWYgKHRyYXAgPT0gMHg0MDApCisJCWVycm9yX2NvZGUgfD0gUEZfRVhFQzsKIAotCWlm IChpc19leGVjICYmIChlcnJvcl9jb2RlICYgRFNJU1JfUFJPVEZBVUxUKSkKLQkJcHJpbnRrX3Jh dGVsaW1pdGVkKEtFUk5fQ1JJVCAia2VybmVsIHRyaWVkIHRvIGV4ZWN1dGUgTlgtcHJvdGVjdGVk IgotCQkJCSAgICIgcGFnZSAoJWx4KSAtIGV4cGxvaXQgYXR0ZW1wdD8gKHVpZDogJWQpXG4iLAot CQkJCSAgIGFkZHJlc3MsIGZyb21fa3VpZCgmaW5pdF91c2VyX25zLCBjdXJyZW50X3VpZCgpKSk7 CisJLyogR2VuZXJpYyBwYWdlIGZhdWx0ICovCisJcmV0dXJuIGdlbmVyaWNfcGFnZV9mYXVsdChy ZWdzLCBjdXJyZW50LCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKK30KIAotCXJjID0gU0lHU0VHVjsK K2ludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWdu ZWQgbG9uZyBhZGRyZXNzLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSkKK3sKKwll bnVtIGN0eF9zdGF0ZSBwcmV2X3N0YXRlID0gZXhjZXB0aW9uX2VudGVyKCk7CisJaW50IHJjOwog Ci1iYWlsOgorCXJjID0gX19kb19wYWdlX2ZhdWx0KHJlZ3MsIGFkZHJlc3MsIGVycm9yX2NvZGUp OwogCWV4Y2VwdGlvbl9leGl0KHByZXZfc3RhdGUpOwogCXJldHVybiByYzsKLQogfQogCisKIC8q CiAgKiBiYWRfcGFnZV9mYXVsdCBpcyBjYWxsZWQgd2hlbiB3ZSBoYXZlIGEgYmFkIGFjY2VzcyBm cm9tIHRoZSBrZXJuZWwuCiAgKiBJdCBpcyBjYWxsZWQgZnJvbSB0aGUgRFNJIGFuZCBJU0kgaGFu ZGxlcnMgaW4gaGVhZC5TIGFuZCBmcm9tIHNvbWUKLS0gCjIuMS4wCgo= --=-CTy4YdLdezRALMlzlcgc--