From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0BED56EA1D for ; Tue, 5 Nov 2019 19:36:34 +0000 (UTC) From: Imre Deak Date: Tue, 5 Nov 2019 21:34:52 +0200 Message-Id: <20191105193454.4611-1-imre.deak@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH v2 1/3] lib/rendercopy: Add AUX page table support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Brian Welty List-ID: T24gR0VOMTIrIHRoZSBBVVggQ0NTIHN1cmZhY2VzIHJlcXVpcmVkIGJ5IHRoZSByZW5kZXIgYW5k IG1lZGlhCmNvbXByZXNzaW9uIG11c3QgYmUgc3BlY2lmaWVkIGJ5IGEgMyBsZXZlbCBwYWdlIHRh YmxlIGRpcmVjdG9yeSwgd2hpY2gKdHJhbnNsYXRlcyB0aGUgbWFpbiBzdXJmYWNlIGdyYXBoaWNz IGFkZHJlc3MgdG8gdGhlIEFVWCBDQ1Mgc3VyZmFjZQpncmFwaGljcyBhZGRyZXNzLiBGb3IgdGhp cyBwdXJwb3NlIGFkZCBzdXBwb3J0IGZvciBjcmVhdGluZyBhIEdFTSBidWZmZXIKdG8gdHJhbnNs YXRlIHRoZSBsaW5lYXIgc3VyZmFjZSBhZGRyZXNzIHJhbmdlIHRvIHRoZSBsaW5lYXIgQVVYIHN1 cmZhY2UKYWRkcmVzcyByYW5nZS4KClRoZSBidWZmZXJzIGNvbnRhaW5pbmcgdGhlIG1haW4gc3Vy ZmFjZSBtdXN0IGJlIHBpbm5lZCBkb3duLCBzaW5jZSB0aGUKZGlyZWN0b3J5IHRhYmxlIGVudHJ5 IGluZGljZXMgZGVwZW5kIG9uIHRoZSBzdXJmYWNlIGFkZHJlc3MsIGFuZCB0aGV5Cm11c3QgYmUg NjRrQiBhbGlnbmVkLiBUaGUgcGFnZSB0YWJsZSBjYW4gYmUgcmVsb2NhdGVkIE9UT0gsIHNvIGFs bG93CnRoYXQgYW5kIGVtaXQgdGhlIHJlcXVpcmVkIHJlbG9jYXRpb24gZW50cmllcy4KCnYyOgot IE1ha2UgbGV2ZWwgdmFyaWFibGVzIHRvIGJlIDAgYmFzZWQgKGwxLi5sMyAtPiBsZXZlbD0wLi4y KS4KLSBBZGQgbWlzc2luZyBkcm1faW50ZWxfYm9fc2V0X3NvZnRwaW5fb2Zmc2V0KCkgc3R1YiB0 byBmaXggYnVpbGQgb24KICBub24tSW50ZWwgYXJjaHMuCi0gRml4IG1pc3Npbmcgb2Zmc2V0cyBp biByZWxvYyBlbnRyaWVzIG9mIGFscmVhZHkgYm91bmQgb2JqZWN0cy4gKENocmlzKQotIFJhbmRv bWl6ZSBwaW4gb2Zmc2V0cywgdG8gdHJ5IHRvIGF2b2lkIGV2aWN0aW9uLiAoQ2hyaXMpCi0gUmVt b3ZlIHJlZHVuZGFudCBNSV9OT09QUyBhcm91bmQgTUlfTE9BRF9SRUdJU1RFUl9NRU0KLSBTdG9w IHVzaW5nIGV4cGxpY2l0IHJlbG9jIGNhY2hlIGRvbWFpbnMsIGFzIHRoZXNlIGRvbid0IG1ha2Ug c2Vuc2Ugb24KICBHRU4xMiBhbnl3YXkuIChDaHJpcykKLSBGaXggbWlzc2luZyBhdXRvdG9vbHMg c3VwcG9ydC4gKENocmlzKQotIHMvaWd0X2F1eF9wZ3RhYmxlL2ludGVsX2F1eF9wZ3RhYmxlLywg c2luY2UgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgSW50ZWwKICBzcGVjaWZpYy4gKENocmlzKQoKQ2M6 IE1pa2EgS2Fob2xhIDxtaWthLmthaG9sYUBpbnRlbC5jb20+CkNjOiBCcmlhbiBXZWx0eSA8YnJp YW4ud2VsdHlAaW50ZWwuY29tPgpDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24u Y28udWs+CkNjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29t PgpTaWduZWQtb2ZmLWJ5OiBJbXJlIERlYWsgPGltcmUuZGVha0BpbnRlbC5jb20+Ci0tLQogbGli L01ha2VmaWxlLnNvdXJjZXMgICAgICAgICB8ICAgMSArCiBsaWIvaW50ZWxfYXV4X3BndGFibGUu YyAgICAgIHwgMzc5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWIvaW50 ZWxfYXV4X3BndGFibGUuaCAgICAgIHwgIDEyICsrCiBsaWIvaW50ZWxfcmVnLmggICAgICAgICAg ICAgIHwgICAyICsKIGxpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgfCAgIDEgKwogbGliL3Jl bmRlcmNvcHlfZ2VuOS5jICAgICAgICB8IDIzMiArKysrKysrKysrKysrKysrKysrKy0KIGxpYi9z dHVicy9kcm0vaW50ZWxfYnVmbWdyLmMgfCAgIDYgKwogNyBmaWxlcyBjaGFuZ2VkLCA2MjcgaW5z ZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaW50ZWxf YXV4X3BndGFibGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pbnRlbF9hdXhfcGd0YWJsZS5o CgpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnNvdXJjZXMgYi9saWIvTWFrZWZpbGUuc291cmNl cwppbmRleCBjZjA5NGFiOC4uMWQwZjQ1ZjcgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5zb3Vy Y2VzCisrKyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCkBAIC0xMDAsNiArMTAwLDcgQEAgbGliX3Nv dXJjZV9saXN0ID0JIAlcCiAJc3VyZmFjZWZvcm1hdC5oCQlcCiAJc3dfc3luYy5jCQlcCiAJc3df c3luYy5oCQlcCisJaW50ZWxfYXV4X3BndGFibGUuYwlcCiAJaW50ZWxfcmVnX21hcC5jCQlcCiAJ aW50ZWxfaW9zZi5jCQlcCiAJaWd0X2ttcy5jCQlcCmRpZmYgLS1naXQgYS9saWIvaW50ZWxfYXV4 X3BndGFibGUuYyBiL2xpYi9pbnRlbF9hdXhfcGd0YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwLi43OTQwMjgxMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pbnRlbF9h dXhfcGd0YWJsZS5jCkBAIC0wLDAgKzEsMzc5IEBACisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5j bHVkZSA8c3RkYm9vbC5oPgorCisjaW5jbHVkZSAiZHJtdGVzdC5oIgorI2luY2x1ZGUgImludGVs X2F1eF9wZ3RhYmxlLmgiCisjaW5jbHVkZSAiaW50ZWxfYnVmbWdyLmgiCisjaW5jbHVkZSAiaW50 ZWxfYmF0Y2hidWZmZXIuaCIKKyNpbmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgorCisjaW5jbHVk ZSAiaTkxNS9nZW1fbW1hbi5oIgorCisjZGVmaW5lIEJJVFNfUEVSX0xPTkcJCShzaXplb2YobG9u ZykgKiA4KQorI2RlZmluZSBCSVRNQVNLKGUsIHMpCQkoKH4wVUwgPDwgKHMpKSAmIFwKKwkJCQkg KH4wVUwgPj4gKEJJVFNfUEVSX0xPTkcgLSAxIC0gKGUpKSkpCisKKyNkZWZpbmUgQUxJR05fRE9X Tih4LCBhKQlBTElHTigoeCkgLSAoKGEpIC0gMSksIChhKSkKKworLyogVGhlIHVuaXQgc2l6ZSB0 byB3aGljaCB0aGUgQVVYIENDUyBzdXJmYWNlIGlzIGFsaWduZWQgdG8uICovCisjZGVmaW5lIEFV WF9DQ1NfVU5JVF9TSVpFCTY0CisvKgorICogVGhlIGJsb2NrIHNpemUgb24gdGhlIEFVWCBDQ1Mg c3VyZmFjZSB3aGljaCBpcyBtYXBwZWQgYnkgb25lIEwxIEFVWAorICogcGFnZXRhYmxlIGVudHJ5 LgorICovCisjZGVmaW5lIEFVWF9DQ1NfQkxPQ0tfU0laRQkoNCAqIEFVWF9DQ1NfVU5JVF9TSVpF KQorLyoKKyAqIFRoZSBibG9jayBzaXplIG9uIHRoZSBtYWluIHN1cmZhY2UgbWFwcGVkIGJ5IG9u ZSBBVVggQ0NTIGJsb2NrOgorICogICAyNTYgYnl0ZXMgcGVyIENDUyBibG9jayAqCisgKiAgIDgg ICBiaXRzIHBlciBieXRlIC8KKyAqICAgMiAgIGJpdHMgcGVyIG1haW4gc3VyZmFjZSBDTCAqCisg KiAgIDY0ICBieXRlcyBwZXIgbWFpbiBzdXJmYWNlIENMCisgKi8KKyNkZWZpbmUgTUFJTl9TVVJG QUNFX0JMT0NLX1NJWkUJKEFVWF9DQ1NfQkxPQ0tfU0laRSAqIDggLyAyICogNjQpCisKKyNkZWZp bmUgR0ZYX0FERFJFU1NfQklUUwk0OAorCisjZGVmaW5lIG1heChhLCBiKQkJKChhKSA+IChiKSA/ IChhKSA6IChiKSkKKworc3RydWN0IHBndGFibGVfbGV2ZWxfZGVzYyB7CisJaW50IGlkeF9zaGlm dDsKKwlpbnQgaWR4X2JpdHM7CisJaW50IGVudHJ5X3B0cl9zaGlmdDsKKwlpbnQgdGFibGVfc2l6 ZTsKK307CisKK3N0cnVjdCBwZ3RhYmxlX2xldmVsX2luZm8geworCWNvbnN0IHN0cnVjdCBwZ3Rh YmxlX2xldmVsX2Rlc2MgKmRlc2M7CisJaW50IHRhYmxlX2NvdW50OworCWludCBhbGxvY19iYXNl OworCWludCBhbGxvY19wdHI7Cit9OworCitzdHJ1Y3QgcGd0YWJsZSB7CisJaW50IGxldmVsczsK KwlzdHJ1Y3QgcGd0YWJsZV9sZXZlbF9pbmZvICpsZXZlbF9pbmZvOworCWludCBzaXplOworCWlu dCBtYXhfYWxpZ247CisJZHJtX2ludGVsX2JvICpibzsKK307CisKK3N0YXRpYyBpbnQKK3BndF90 YWJsZV9jb3VudChpbnQgYWRkcmVzc19iaXRzLCBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqKmJ1ZnMs IGludCBidWZfY291bnQpCit7CisJdWludDY0X3QgZW5kOworCWludCBjb3VudDsKKwlpbnQgaTsK KworCWNvdW50ID0gMDsKKwllbmQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBidWZfY291bnQ7IGkr KykgeworCQljb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmID0gYnVmc1tpXTsKKwkJdWludDY0X3Qg c3RhcnQ7CisKKwkJLyogV2UgcmVxdWlyZSBidWZzIHRvIGJlIHNvcnRlZC4gKi8KKwkJaWd0X2Fz c2VydChpID09IDAgfHwKKwkJCSAgIGJ1Zi0+Ym8tPm9mZnNldDY0ID49IGJ1ZnNbaSAtIDFdLT5i by0+b2Zmc2V0NjQgKworCQkJCQkJYnVmc1tpIC0gMV0tPmJvLT5zaXplKTsKKworCQlzdGFydCA9 IEFMSUdOX0RPV04oYnVmLT5iby0+b2Zmc2V0NjQsIDFVTCA8PCBhZGRyZXNzX2JpdHMpOworCQkv KiBBdm9pZCBkb3VibGUgY291bnRpbmcgZm9yIG92ZXJsYXBwaW5nIGFsaWduZWQgYnVmcy4gKi8K KwkJc3RhcnQgPSBtYXgoc3RhcnQsIGVuZCk7CisKKwkJZW5kID0gQUxJR04oYnVmLT5iby0+b2Zm c2V0NjQgKyBidWYtPnNpemUsIDFVTCA8PCBhZGRyZXNzX2JpdHMpOworCQlpZ3RfYXNzZXJ0KGVu ZCA+PSBzdGFydCk7CisKKwkJY291bnQgKz0gKGVuZCAtIHN0YXJ0KSA+PiBhZGRyZXNzX2JpdHM7 CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZAorcGd0X2NhbGNfc2l6ZShz dHJ1Y3QgcGd0YWJsZSAqcGd0LCBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqKmJ1ZnMsIGludCBidWZf Y291bnQpCit7CisJaW50IGxldmVsOworCisJcGd0LT5zaXplID0gMDsKKworCWZvciAobGV2ZWwg PSBwZ3QtPmxldmVscyAtIDE7IGxldmVsID49IDA7IGxldmVsLS0pIHsKKwkJc3RydWN0IHBndGFi bGVfbGV2ZWxfaW5mbyAqbGkgPSAmcGd0LT5sZXZlbF9pbmZvW2xldmVsXTsKKworCQlsaS0+YWxs b2NfYmFzZSA9IEFMSUdOKHBndC0+c2l6ZSwgbGktPmRlc2MtPnRhYmxlX3NpemUpOworCQlsaS0+ YWxsb2NfcHRyID0gbGktPmFsbG9jX2Jhc2U7CisKKwkJbGktPnRhYmxlX2NvdW50ID0gcGd0X3Rh YmxlX2NvdW50KGxpLT5kZXNjLT5pZHhfc2hpZnQgKworCQkJCQkJICBsaS0+ZGVzYy0+aWR4X2Jp dHMsCisJCQkJCQkgIGJ1ZnMsIGJ1Zl9jb3VudCk7CisKKwkJcGd0LT5zaXplID0gbGktPmFsbG9j X2Jhc2UgKworCQkJICAgIGxpLT50YWJsZV9jb3VudCAqIGxpLT5kZXNjLT50YWJsZV9zaXplOwor CX0KK30KKworc3RhdGljIHVpbnQ2NF90IHBndF9hbGxvY190YWJsZShzdHJ1Y3QgcGd0YWJsZSAq cGd0LCBpbnQgbGV2ZWwpCit7CisJc3RydWN0IHBndGFibGVfbGV2ZWxfaW5mbyAqbGkgPSAmcGd0 LT5sZXZlbF9pbmZvW2xldmVsXTsKKwl1aW50NjRfdCB0YWJsZTsKKworCXRhYmxlID0gbGktPmFs bG9jX3B0cjsKKwlsaS0+YWxsb2NfcHRyICs9IGxpLT5kZXNjLT50YWJsZV9zaXplOworCisJaWd0 X2Fzc2VydChsaS0+YWxsb2NfcHRyIDw9CisJCSAgIGxpLT5hbGxvY19iYXNlICsgbGktPnRhYmxl X2NvdW50ICogbGktPmRlc2MtPnRhYmxlX3NpemUpOworCisJcmV0dXJuIHRhYmxlOworfQorCitz dGF0aWMgaW50IHBndF9hZGRyZXNzX2luZGV4KHN0cnVjdCBwZ3RhYmxlICpwZ3QsIGludCBsZXZl bCwgdWludDY0X3QgYWRkcmVzcykKK3sKKwljb25zdCBzdHJ1Y3QgcGd0YWJsZV9sZXZlbF9kZXNj ICpsZCA9IHBndC0+bGV2ZWxfaW5mb1tsZXZlbF0uZGVzYzsKKwl1aW50NjRfdCBtYXNrID0gQklU TUFTSyhsZC0+aWR4X3NoaWZ0ICsgbGQtPmlkeF9iaXRzIC0gMSwKKwkJCQlsZC0+aWR4X3NoaWZ0 KTsKKworCXJldHVybiAoYWRkcmVzcyAmIG1hc2spID4+IGxkLT5pZHhfc2hpZnQ7Cit9CisKK3N0 YXRpYyB1aW50NjRfdCBwdHJfbWFzayhzdHJ1Y3QgcGd0YWJsZSAqcGd0LCBpbnQgbGV2ZWwpCit7 CisJY29uc3Qgc3RydWN0IHBndGFibGVfbGV2ZWxfZGVzYyAqbGQgPSBwZ3QtPmxldmVsX2luZm9b bGV2ZWxdLmRlc2M7CisKKwlyZXR1cm4gQklUTUFTSyhHRlhfQUREUkVTU19CSVRTIC0gMSwgbGQt PmVudHJ5X3B0cl9zaGlmdCk7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBwZ3RfZW50cnlfcHRyKHN0 cnVjdCBwZ3RhYmxlICpwZ3QsIGludCBsZXZlbCwgdWludDY0X3QgZW50cnkpCit7CisJdWludDY0 X3QgcHRyID0gZW50cnkgJiBwdHJfbWFzayhwZ3QsIGxldmVsKTsKKworCWlmIChsZXZlbCkKKwkJ cHRyIC09IHBndC0+Ym8tPm9mZnNldDY0OworCWlndF9hc3NlcnQoIShwdHIgJiB+cHRyX21hc2so cGd0LCBsZXZlbCkpKTsKKworCXJldHVybiBwdHI7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBwZ3Rf bWtlbnRyeShzdHJ1Y3QgcGd0YWJsZSAqcGd0LCBpbnQgbGV2ZWwsIHVpbnQ2NF90IHB0ciwKKwkJ CSAgICB1aW50NjRfdCBmbGFncykKK3sKKwlpZiAobGV2ZWwpCisJCXB0ciArPSBwZ3QtPmJvLT5v ZmZzZXQ2NDsKKwlpZ3RfYXNzZXJ0KCEocHRyICYgfnB0cl9tYXNrKHBndCwgbGV2ZWwpKSk7CisK KwlyZXR1cm4gcHRyIHwgZmxhZ3M7Cit9CisKK3N0YXRpYyB1aW50NjRfdAorcGd0X2dldF90YWJs ZShzdHJ1Y3QgcGd0YWJsZSAqcGd0LCB1aW50NjRfdCBwYXJlbnRfdGFibGUsCisJICAgICAgaW50 IGxldmVsLCB1aW50NjRfdCBhZGRyZXNzLCB1aW50NjRfdCBmbGFncykKK3sKKwl1aW50NjRfdCAq dGFibGVfcHRyID0gcGd0LT5iby0+dmlydHVhbCArIHBhcmVudF90YWJsZTsKKwlpbnQgZW50cnlf aWR4ID0gcGd0X2FkZHJlc3NfaW5kZXgocGd0LCBsZXZlbCwgYWRkcmVzcyk7CisJdWludDY0X3Qg KmVudHJ5X3B0cjsKKworCWVudHJ5X3B0ciA9ICZ0YWJsZV9wdHJbZW50cnlfaWR4XTsKKwlpZiAo ISplbnRyeV9wdHIpIHsKKwkJdWludDY0X3QgY2hpbGRfdGFibGUgPSBwZ3RfYWxsb2NfdGFibGUo cGd0LCBsZXZlbCAtIDEpOworCisJCSplbnRyeV9wdHIgPSBwZ3RfbWtlbnRyeShwZ3QsIGxldmVs LCBjaGlsZF90YWJsZSwgZmxhZ3MpOworCisJCWRybV9pbnRlbF9ib19lbWl0X3JlbG9jKHBndC0+ Ym8sCisJCQkJCXBhcmVudF90YWJsZSArIGVudHJ5X2lkeCAqIHNpemVvZih1aW50NjRfdCksCisJ CQkJCXBndC0+Ym8sICplbnRyeV9wdHIsIDAsIDApOworCX0KKworCXJldHVybiBwZ3RfZW50cnlf cHRyKHBndCwgbGV2ZWwsICplbnRyeV9wdHIpOworfQorCitzdGF0aWMgdm9pZAorcGd0X3NldF9s MV9lbnRyeShzdHJ1Y3QgcGd0YWJsZSAqcGd0LCB1aW50NjRfdCBsMV90YWJsZSwKKwkJIHVpbnQ2 NF90IGFkZHJlc3MsIHVpbnQ2NF90IHB0ciwgdWludDY0X3QgZmxhZ3MpCit7CisJdWludDY0X3Qg KmwxX3RhYmxlX3B0cjsKKwl1aW50NjRfdCAqbDFfZW50cnlfcHRyOworCisJbDFfdGFibGVfcHRy ID0gcGd0LT5iby0+dmlydHVhbCArIGwxX3RhYmxlOworCWwxX2VudHJ5X3B0ciA9ICZsMV90YWJs ZV9wdHJbcGd0X2FkZHJlc3NfaW5kZXgocGd0LCAwLCBhZGRyZXNzKV07CisJKmwxX2VudHJ5X3B0 ciA9IHBndF9ta2VudHJ5KHBndCwgMCwgcHRyLCBmbGFncyk7Cit9CisKK3N0YXRpYyB1aW50NjRf dCBwZ3RfZ2V0X2wxX2ZsYWdzKGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpidWYpCit7CisJLyoKKwkg KiBUaGUgb2Zmc2V0IG9mIC50aWxlX21vZGUgaXNuJ3Qgc3BlY2lmZWQgYnkgYnNwZWMsIGl0J3Mg d2hhdCBNZXNhCisJICogdXNlcy4KKwkgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1aW50 NjRfdAl2YWxpZDoxOworCQkJdWludDY0X3QJY29tcHJlc3Npb25fbW9kOjI7CisJCQl1aW50NjRf dAlsb3NzeV9jb21wcmVzc2lvbjoxOworCQkJdWludDY0X3QJcGFkOjQ7CisJCQl1aW50NjRfdAlh ZGRyOjQwOworCQkJdWludDY0X3QJcGFkMjo0OworCQkJdWludDY0X3QJdGlsZV9tb2RlOjI7CisJ CQl1aW50NjRfdAlkZXB0aDozOworCQkJdWludDY0X3QJeWNyOjE7CisJCQl1aW50NjRfdAlmb3Jt YXQ6NjsKKwkJfSBlOworCQl1aW50NjRfdCBsOworCX0gZW50cnkgPSB7CisJCS5lID0geworCQkJ LnZhbGlkID0gMSwKKwkJCS50aWxlX21vZGUgPSBidWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19Z ID8gMSA6IDAsCisJCQkuZGVwdGggPSA1LAkJLyogMzJicHAgKi8KKwkJCS5mb3JtYXQgPSAweEEs CQkvKiBCOEc4UjhBOF9VTk9STSAqLworCQl9CisJfTsKKworCS8qCisJICogVE9ETzogQ2xhcmlm eSBpZiBZZiBpcyBzdXBwb3J0ZWQgYW5kIGlmIHdlIG5lZWQgdG8gZGlmZmVyZW50aWF0ZQorCSAq ICAgICAgIFlzIGFuZCBZZi4KKwkgKiAgICAgICBBZGQgc3VwcG9ydCBmb3IgbW9yZSBmb3JtYXRz LgorCSAqLworCWlndF9hc3NlcnQoYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWSB8fAorCQkg ICBidWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19ZZiB8fAorCQkgICBidWYtPnRpbGluZyA9PSBJ OTE1X1RJTElOR19Zcyk7CisKKwlpZ3RfYXNzZXJ0KGJ1Zi0+YnBwID09IDMyKTsKKworCXJldHVy biBlbnRyeS5sOworfQorCitzdGF0aWMgdWludDY0X3QgcGd0X2dldF9seF9mbGFncyh2b2lkKQor eworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQ2NF90ICAgICAgICB2YWxpZDoxOworCQkJ dWludDY0X3QgICAgICAgIGFkZHI6NDc7CisJCQl1aW50NjRfdCAgICAgICAgcGFkOjE2OworCQl9 IGU7CisJCXVpbnQ2NF90IGw7CisJfSBlbnRyeSA9IHsKKwkJLmUgPSB7CisJCQkudmFsaWQgPSAx LAorCQl9CisJfTsKKworCXJldHVybiBlbnRyeS5sOworfQorCitzdGF0aWMgdm9pZAorcGd0X3Bv cHVsYXRlX2VudHJpZXNfZm9yX2J1ZihzdHJ1Y3QgcGd0YWJsZSAqcGd0LAorCQkJICAgICAgIGNv bnN0IHN0cnVjdCBpZ3RfYnVmICpidWYsCisJCQkgICAgICAgdWludDY0X3QgdG9wX3RhYmxlKQor eworCXVpbnQ2NF90IHN1cmZhY2VfYWRkciA9IGJ1Zi0+Ym8tPm9mZnNldDY0OworCXVpbnQ2NF90 IHN1cmZhY2VfZW5kID0gc3VyZmFjZV9hZGRyICsgYnVmLT5zaXplOworCXVpbnQ2NF90IGF1eF9h ZGRyID0gYnVmLT5iby0+b2Zmc2V0NjQgKyBidWYtPmF1eC5vZmZzZXQ7CisJdWludDY0X3QgbDFf ZmxhZ3MgPSBwZ3RfZ2V0X2wxX2ZsYWdzKGJ1Zik7CisJdWludDY0X3QgbHhfZmxhZ3MgPSBwZ3Rf Z2V0X2x4X2ZsYWdzKCk7CisKKwlmb3IgKDsgc3VyZmFjZV9hZGRyIDwgc3VyZmFjZV9lbmQ7CisJ ICAgICBzdXJmYWNlX2FkZHIgKz0gTUFJTl9TVVJGQUNFX0JMT0NLX1NJWkUsCisJICAgICBhdXhf YWRkciArPSBBVVhfQ0NTX0JMT0NLX1NJWkUpIHsKKwkJdWludDY0X3QgdGFibGUgPSB0b3BfdGFi bGU7CisJCWludCBsZXZlbDsKKworCQlmb3IgKGxldmVsID0gcGd0LT5sZXZlbHMgLSAxOyBsZXZl bCA+PSAxOyBsZXZlbC0tKQorCQkJdGFibGUgPSBwZ3RfZ2V0X3RhYmxlKHBndCwgdGFibGUsIGxl dmVsLAorCQkJCQkgICAgICBzdXJmYWNlX2FkZHIsIGx4X2ZsYWdzKTsKKworCQlwZ3Rfc2V0X2wx X2VudHJ5KHBndCwgdGFibGUsIHN1cmZhY2VfYWRkciwgYXV4X2FkZHIsIGwxX2ZsYWdzKTsKKwl9 Cit9CisKK3N0YXRpYyB2b2lkIHBndF9wb3B1bGF0ZV9lbnRyaWVzKHN0cnVjdCBwZ3RhYmxlICpw Z3QsCisJCQkJIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICoqYnVmcywKKwkJCQkgaW50IGJ1Zl9jb3Vu dCwKKwkJCQkgZHJtX2ludGVsX2JvICpwZ3RfYm8pCit7CisJdWludDY0X3QgdG9wX3RhYmxlOwor CWludCBpOworCisJcGd0LT5ibyA9IHBndF9ibzsKKworCWlndF9hc3NlcnQocGd0X2JvLT5zaXpl ID49IHBndC0+c2l6ZSk7CisJbWVtc2V0KHBndF9iby0+dmlydHVhbCwgMCwgcGd0LT5zaXplKTsK KworCXRvcF90YWJsZSA9IHBndF9hbGxvY190YWJsZShwZ3QsIHBndC0+bGV2ZWxzIC0gMSk7CisJ LyogVG9wIGxldmVsIHRhYmxlIG11c3QgYmUgYXQgb2Zmc2V0IDAuICovCisJaWd0X2Fzc2VydCh0 b3BfdGFibGUgPT0gMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmX2NvdW50OyBpKyspCisJCXBn dF9wb3B1bGF0ZV9lbnRyaWVzX2Zvcl9idWYocGd0LCBidWZzW2ldLCB0b3BfdGFibGUpOworfQor CitzdGF0aWMgc3RydWN0IHBndGFibGUgKgorcGd0X2NyZWF0ZShjb25zdCBzdHJ1Y3QgcGd0YWJs ZV9sZXZlbF9kZXNjICpsZXZlbF9kZXNjcywgaW50IGxldmVscywKKwkgICBjb25zdCBzdHJ1Y3Qg aWd0X2J1ZiAqKmJ1ZnMsIGludCBidWZfY291bnQpCit7CisJc3RydWN0IHBndGFibGUgKnBndDsK KwlpbnQgbGV2ZWw7CisKKwlwZ3QgPSBjYWxsb2MoMSwgc2l6ZW9mKCpwZ3QpKTsKKwlpZ3RfYXNz ZXJ0KHBndCk7CisKKwlwZ3QtPmxldmVscyA9IGxldmVsczsKKworCXBndC0+bGV2ZWxfaW5mbyA9 IGNhbGxvYyhsZXZlbHMsIHNpemVvZigqcGd0LT5sZXZlbF9pbmZvKSk7CisJaWd0X2Fzc2VydChw Z3QtPmxldmVsX2luZm8pOworCisJZm9yIChsZXZlbCA9IDA7IGxldmVsIDwgcGd0LT5sZXZlbHM7 IGxldmVsKyspIHsKKwkJc3RydWN0IHBndGFibGVfbGV2ZWxfaW5mbyAqbGkgPSAmcGd0LT5sZXZl bF9pbmZvW2xldmVsXTsKKworCQlsaS0+ZGVzYyA9ICZsZXZlbF9kZXNjc1tsZXZlbF07CisJCWlm IChsaS0+ZGVzYy0+dGFibGVfc2l6ZSA+IHBndC0+bWF4X2FsaWduKQorCQkJcGd0LT5tYXhfYWxp Z24gPSBsaS0+ZGVzYy0+dGFibGVfc2l6ZTsKKwl9CisKKwlwZ3RfY2FsY19zaXplKHBndCwgYnVm cywgYnVmX2NvdW50KTsKKworCXJldHVybiBwZ3Q7Cit9CisKK3N0YXRpYyB2b2lkIHBndF9kZXN0 cm95KHN0cnVjdCBwZ3RhYmxlICpwZ3QpCit7CisJZnJlZShwZ3QtPmxldmVsX2luZm8pOworCWZy ZWUocGd0KTsKK30KKworZHJtX2ludGVsX2JvICoKK2ludGVsX2F1eF9wZ3RhYmxlX2NyZWF0ZShk cm1faW50ZWxfYnVmbWdyICpidWZtZ3IsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAq KmJ1ZnMsIGludCBidWZfY291bnQpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBwZ3RhYmxlX2xl dmVsX2Rlc2MgbGV2ZWxfZGVzY1tdID0geworCQl7CisJCQkuaWR4X3NoaWZ0ID0gMTYsCisJCQku aWR4X2JpdHMgPSA4LAorCQkJLmVudHJ5X3B0cl9zaGlmdCA9IDgsCisJCQkudGFibGVfc2l6ZSA9 IDggKiAxMDI0LAorCQl9LAorCQl7CisJCQkuaWR4X3NoaWZ0ID0gMjQsCisJCQkuaWR4X2JpdHMg PSAxMiwKKwkJCS5lbnRyeV9wdHJfc2hpZnQgPSAxMywKKwkJCS50YWJsZV9zaXplID0gMzIgKiAx MDI0LAorCQl9LAorCQl7CisJCQkuaWR4X3NoaWZ0ID0gMzYsCisJCQkuaWR4X2JpdHMgPSAxMiwK KwkJCS5lbnRyeV9wdHJfc2hpZnQgPSAxNSwKKwkJCS50YWJsZV9zaXplID0gMzIgKiAxMDI0LAor CQl9LAorCX07CisJc3RydWN0IHBndGFibGUgKnBndDsKKwlkcm1faW50ZWxfYm8gKnBndF9ibzsK KworCXBndCA9IHBndF9jcmVhdGUobGV2ZWxfZGVzYywgQVJSQVlfU0laRShsZXZlbF9kZXNjKSwg YnVmcywgYnVmX2NvdW50KTsKKworCXBndF9ibyA9IGRybV9pbnRlbF9ib19hbGxvY19mb3JfcmVu ZGVyKGJ1Zm1nciwgImF1eCBwZ3QiLAorCQkJCQkgICAgICAgcGd0LT5zaXplLCBwZ3QtPm1heF9h bGlnbik7CisJaWd0X2Fzc2VydChwZ3RfYm8pOworCisJaWd0X2Fzc2VydChkcm1faW50ZWxfYm9f bWFwKHBndF9ibywgdHJ1ZSkgPT0gMCk7CisJcGd0X3BvcHVsYXRlX2VudHJpZXMocGd0LCBidWZz LCBidWZfY291bnQsIHBndF9ibyk7CisJaWd0X2Fzc2VydChkcm1faW50ZWxfYm9fdW5tYXAocGd0 X2JvKSA9PSAwKTsKKworCXBndF9kZXN0cm95KHBndCk7CisKKwlyZXR1cm4gcGd0X2JvOworfQpk aWZmIC0tZ2l0IGEvbGliL2ludGVsX2F1eF9wZ3RhYmxlLmggYi9saWIvaW50ZWxfYXV4X3BndGFi bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNTMzZDQ0OTEKLS0tIC9k ZXYvbnVsbAorKysgYi9saWIvaW50ZWxfYXV4X3BndGFibGUuaApAQCAtMCwwICsxLDEyIEBACisj aWZuZGVmIF9JR1RfQVVYX1BHVEFCTEVfSF8KKyNkZWZpbmUgX0lHVF9BVVhfUEdUQUJMRV9IXwor CisjaW5jbHVkZSAiaW50ZWxfYnVmbWdyLmgiCisKK3N0cnVjdCBpZ3RfYnVmOworCitkcm1faW50 ZWxfYm8gKgoraW50ZWxfYXV4X3BndGFibGVfY3JlYXRlKGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1n ciwKKwkJCSBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqKmJ1ZnMsIGludCBidWZfY291bnQpOworCisj ZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9pbnRlbF9yZWcuaCBiL2xpYi9pbnRlbF9yZWcuaAppbmRl eCAwNjk0NDBjYi4uNzU1YTc4ZTYgMTAwNjQ0Ci0tLSBhL2xpYi9pbnRlbF9yZWcuaAorKysgYi9s aWIvaW50ZWxfcmVnLmgKQEAgLTY3Myw2ICs2NzMsNyBAQCBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICNkZWZpbmUgUklOR19WQUxJRCAgICAg ICAgICAweDAwMDAwMDAxCiAjZGVmaW5lIFJJTkdfSU5WQUxJRCAgICAgICAgMHgwMDAwMDAwMAog CisjZGVmaW5lIEdFTjEyX0dGWF9BVVhfVEFCTEVfQkFTRV9BRERSCTB4NDIwMAogCiAKIC8qIEJp dEJsdCBJbnN0cnVjdGlvbnMKQEAgLTI1NzAsNiArMjU3MSw3IEBAIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogCiAjZGVmaW5lIE1JX0xPQURf U0NBTl9MSU5FU19JTkNMCQkoMHgxMjw8MjMpCiAjZGVmaW5lIE1JX0xPQURfUkVHSVNURVJfSU1N CQkoKDB4MjIgPDwgMjMpIHwgMSkKKyNkZWZpbmUgTUlfTE9BRF9SRUdJU1RFUl9NRU0JCSgoMHgy OSA8PCAyMykgfCAoNCAtIDIpKQogCiAvKiBGbHVzaCAqLwogI2RlZmluZSBNSV9GTFVTSAkJCSgw eDA0PDwyMykKZGlmZiAtLWdpdCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5idWlsZApp bmRleCAyMjFhZTI4Yy4uMzNmZWY0ODYgMTAwNjQ0Ci0tLSBhL2xpYi9tZXNvbi5idWlsZAorKysg Yi9saWIvbWVzb24uYnVpbGQKQEAgLTQ0LDYgKzQ0LDcgQEAgbGliX3NvdXJjZXMgPSBbCiAJJ3Jl bmRlcmNvcHlfZ2VuOC5jJywKIAkncmVuZGVyY29weV9nZW45LmMnLAogCSdzd19zeW5jLmMnLAor CSdpbnRlbF9hdXhfcGd0YWJsZS5jJywKIAknaW50ZWxfcmVnX21hcC5jJywKIAknaW50ZWxfaW9z Zi5jJywKIAknaWd0X2ttcy5jJywKZGlmZiAtLWdpdCBhL2xpYi9yZW5kZXJjb3B5X2dlbjkuYyBi L2xpYi9yZW5kZXJjb3B5X2dlbjkuYwppbmRleCA2OTRlYjNjZi4uMmE4NGJiNjQgMTAwNjQ0Ci0t LSBhL2xpYi9yZW5kZXJjb3B5X2dlbjkuYworKysgYi9saWIvcmVuZGVyY29weV9nZW45LmMKQEAg LTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxpOTE1X2RybS5oPgogCiAjaW5jbHVkZSAiZHJtdGVz dC5oIgorI2luY2x1ZGUgImludGVsX2F1eF9wZ3RhYmxlLmgiCiAjaW5jbHVkZSAiaW50ZWxfYnVm bWdyLmgiCiAjaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZmZXIuaCIKICNpbmNsdWRlICJpbnRlbF9p by5oIgpAQCAtOTcyLDE5ICs5NzMsMjI0IEBAIHN0YXRpYyB2b2lkIGdlbjhfZW1pdF9wcmltaXRp dmUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qgb2Zmc2V0CiAKICNk ZWZpbmUgQkFUQ0hfU1RBVEVfU1BMSVQgMjA0OAogCitzdGF0aWMgdm9pZAorZ2VuMTJfZW1pdF9h dXhfcGd0YWJsZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJf dCBzdGF0ZSkKK3sKKwlpZiAoIXN0YXRlKQorCQlyZXR1cm47CisKKwlPVVRfQkFUQ0goTUlfTE9B RF9SRUdJU1RFUl9NRU0pOworCU9VVF9CQVRDSChHRU4xMl9HRlhfQVVYX1RBQkxFX0JBU0VfQURE Uik7CisJT1VUX1JFTE9DKGJhdGNoLT5ibywgMCwgMCwgc3RhdGUpOworCisJT1VUX0JBVENIKE1J X0xPQURfUkVHSVNURVJfTUVNKTsKKwlPVVRfQkFUQ0goR0VOMTJfR0ZYX0FVWF9UQUJMRV9CQVNF X0FERFIgKyA0KTsKKwlPVVRfUkVMT0MoYmF0Y2gtPmJvLCAwLCAwLCBzdGF0ZSArIDQpOworfQor CitzdGF0aWMgdm9pZAorYXV4X3BndGFibGVfZmluZF9tYXhfZnJlZV9yYW5nZShjb25zdCBzdHJ1 Y3QgaWd0X2J1ZiAqKmJ1ZnMsIGludCBidWZfY291bnQsCisJCQkJdWludDY0X3QgKnJhbmdlX3N0 YXJ0LCB1aW50NjRfdCAqcmFuZ2Vfc2l6ZSkKK3sKKwkvKgorCSAqIEtlZXAgdGhlIGZpcnN0IHBh Z2UgcmVzZXJ2ZWQsIHNvIHdlIGNhbiBkaWZmZXJlbnRpYXRlIHBpbm5lZAorCSAqIG9iamVjdHMg YmFzZWQgb24gYSBub24tTlVMTCBvZmZzZXQuCisJICovCisJdWludDY0X3Qgc3RhcnQgPSAweDEw MDA7CisJLyogRm9yIG5vdyBhbGxvYyBvbmx5IGZyb20gdGhlIGZpcnN0IDRHQiBhZGRyZXNzIHNw YWNlLiAqLworCWNvbnN0IHVpbnQ2NF90IGVuZCA9IDFVTEwgPDwgMzI7CisJdWludDY0X3QgbWF4 X3JhbmdlX3N0YXJ0ID0gMDsKKwl1aW50NjRfdCBtYXhfcmFuZ2Vfc2l6ZSA9IDA7CisJaW50IGk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmX2NvdW50OyBpKyspIHsKKwkJaWYgKGJ1ZnNbaV0tPmJv LT5vZmZzZXQ2NCA+PSBlbmQpCisJCQlicmVhazsKKworCQlpZiAoYnVmc1tpXS0+Ym8tPm9mZnNl dDY0IC0gc3RhcnQgPiBtYXhfcmFuZ2Vfc2l6ZSkgeworCQkJbWF4X3JhbmdlX3N0YXJ0ID0gc3Rh cnQ7CisJCQltYXhfcmFuZ2Vfc2l6ZSA9IGJ1ZnNbaV0tPmJvLT5vZmZzZXQ2NCAtIHN0YXJ0Owor CQl9CisJCXN0YXJ0ID0gYnVmc1tpXS0+Ym8tPm9mZnNldDY0ICsgYnVmc1tpXS0+c2l6ZTsKKwl9 CisKKwlpZiAoc3RhcnQgPCBlbmQgJiYgZW5kIC0gc3RhcnQgPiBtYXhfcmFuZ2Vfc2l6ZSkgewor CQltYXhfcmFuZ2Vfc3RhcnQgPSBzdGFydDsKKwkJbWF4X3JhbmdlX3NpemUgPSBlbmQgLSBzdGFy dDsKKwl9CisKKwkqcmFuZ2Vfc3RhcnQgPSBtYXhfcmFuZ2Vfc3RhcnQ7CisJKnJhbmdlX3NpemUg PSBtYXhfcmFuZ2Vfc2l6ZTsKK30KKworc3RhdGljIHVpbnQ2NF90CithdXhfcGd0YWJsZV9maW5k X2ZyZWVfcmFuZ2UoY29uc3Qgc3RydWN0IGlndF9idWYgKipidWZzLCBpbnQgYnVmX2NvdW50LAor CQkJICAgIHVpbnQzMl90IHNpemUpCit7CisJdWludDY0X3QgcmFuZ2Vfc3RhcnQ7CisJdWludDY0 X3QgcmFuZ2Vfc2l6ZTsKKwkvKiBBIGNvbXByZXNzZWQgc3VyZmFjZSBtdXN0IGJlIDY0a0IgYWxp Z25lZC4gKi8KKwljb25zdCB1aW50MzJfdCBhbGlnbiA9IDB4MTAwMDA7CisJaW50IHBhZDsKKwor CWF1eF9wZ3RhYmxlX2ZpbmRfbWF4X2ZyZWVfcmFuZ2UoYnVmcywgYnVmX2NvdW50LAorCQkJCQkm cmFuZ2Vfc3RhcnQsICZyYW5nZV9zaXplKTsKKworCXBhZCA9IEFMSUdOKHJhbmdlX3N0YXJ0LCBh bGlnbikgLSByYW5nZV9zdGFydDsKKwlyYW5nZV9zdGFydCArPSBwYWQ7CisJcmFuZ2Vfc2l6ZSAt PSBwYWQ7CisJaWd0X2Fzc2VydChyYW5nZV9zaXplID49IHNpemUpOworCisJcmV0dXJuIHJhbmdl X3N0YXJ0ICsgQUxJR04ocmFuZCgpICUgKHJhbmdlX3NpemUgLSBzaXplKSwgYWxpZ24pOworfQor CitzdGF0aWMgdm9pZAorYXV4X3BndGFibGVfcmVzZXJ2ZV9yYW5nZShjb25zdCBzdHJ1Y3QgaWd0 X2J1ZiAqKmJ1ZnMsIGludCBidWZfY291bnQsCisJCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpu ZXdfYnVmKQoreworCWludCBpOworCisJaWYgKG5ld19idWYtPmF1eC5zdHJpZGUgJiYgIW5ld19i dWYtPmJvLT5vZmZzZXQ2NCkgeworCQl1aW50NjRfdCBwaW5fb2Zmc2V0OworCisJCXBpbl9vZmZz ZXQgPSBhdXhfcGd0YWJsZV9maW5kX2ZyZWVfcmFuZ2UoYnVmcywgYnVmX2NvdW50LAorCQkJCQkJ CSBuZXdfYnVmLT5iby0+c2l6ZSk7CisJCWRybV9pbnRlbF9ib19zZXRfc29mdHBpbl9vZmZzZXQo bmV3X2J1Zi0+Ym8sIHBpbl9vZmZzZXQpOworCQlpZ3RfYXNzZXJ0KG5ld19idWYtPmJvLT5vZmZz ZXQ2NCA9PSBwaW5fb2Zmc2V0KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmX2NvdW50OyBp KyspCisJCWlmIChidWZzW2ldLT5iby0+b2Zmc2V0NjQgPiBuZXdfYnVmLT5iby0+b2Zmc2V0NjQp CisJCQlicmVhazsKKworCW1lbW1vdmUoJmJ1ZnNbaSArIDFdLCAmYnVmc1tpXSwgc2l6ZW9mKGJ1 ZnNbMF0pICogKGJ1Zl9jb3VudCAtIGkpKTsKKworCWJ1ZnNbaV0gPSBuZXdfYnVmOworfQorCitz dHJ1Y3QgYXV4X3BndGFibGVfaW5mbyB7CisJaW50IGJ1Zl9jb3VudDsKKwljb25zdCBzdHJ1Y3Qg aWd0X2J1ZiAqYnVmc1syXTsKKwl1aW50NjRfdCBidWZfcGluX29mZnNldHNbMl07CisJZHJtX2lu dGVsX2JvICpwZ3RhYmxlX2JvOworfTsKKworc3RhdGljIHZvaWQKK2dlbjEyX2F1eF9wZ3RhYmxl X2luaXQoc3RydWN0IGF1eF9wZ3RhYmxlX2luZm8gKmluZm8sCisJCSAgICAgICBkcm1faW50ZWxf YnVmbWdyICpidWZtZ3IsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqc3JjX2J1ZiwK KwkJICAgICAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpkc3RfYnVmKQoreworCWNvbnN0IHN0cnVj dCBpZ3RfYnVmICpidWZzWzJdOworCWNvbnN0IHN0cnVjdCBpZ3RfYnVmICpyZXNlcnZlZF9idWZz WzJdOworCWludCByZXNlcnZlZF9idWZfY291bnQ7CisJaW50IGk7CisKKwlpZiAoIXNyY19idWYt PmF1eC5zdHJpZGUgJiYgIWRzdF9idWYtPmF1eC5zdHJpZGUpCisJCXJldHVybjsKKworCWJ1ZnNb MF0gPSBzcmNfYnVmOworCWJ1ZnNbMV0gPSBkc3RfYnVmOworCisJLyoKKwkgKiBJZGVhbGx5IHdl J2QgbmVlZCBhIGFuIElHVC13aWRlIEdGWCBhZGRyZXNzIHNwYWNlIGFsbG9jYXRvciwgd2hpY2gK KwkgKiB3b3VsZCBjb25zaWRlciBhbGwgYWxsb2NhdGlvbnMgYW5kIHRodXMgYXZvaWQgZXZpY3Rp b25zLiBGb3Igbm93IHVzZQorCSAqIGEgc2ltcGxlciBzY2hlbWUgaGVyZSwgd2hpY2ggb25seSBj b25zaWRlcnMgdGhlIGJ1ZmZlcnMgaW52b2x2ZWQgaW4KKwkgKiB0aGUgYmxpdCwgd2hpY2ggc2hv dWxkIGF0IGxlYXN0IG1pbmltaXplIHRoZSBjaGFuY2UgZm9yIGV2aWN0aW9ucworCSAqIGluIHRo ZSBjYXNlIG9mIHN1YnNlcXVlbnQgYmxpdHM6CisJICogICAxLiBJZiB0aGV5IHdlcmUgYWxyZWFk eSBib3VuZCAoYm8tPm9mZnNldDY0ICE9IDApLCB1c2UgdGhpcworCSAqICAgICAgYWRkcmVzcy4K KwkgKiAgIDIuIFBpY2sgYSByYW5nZSByYW5kb21seSBmcm9tIHRoZSA0R0IgYWRkcmVzcyBzcGFj ZSwgdGhhdCBpcyBub3QKKwkgKiAgICAgIGFscmVhZHkgb2NjdXBpZWQgYnkgYSBib3VuZCBvYmpl Y3QsIG9yIGFuIG9iamVjdCB3ZSBwaW5uZWQuCisJICovCisJcmVzZXJ2ZWRfYnVmX2NvdW50ID0g MDsKKwkvKiBGaXJzdCByZXNlcnZlIHNwYWNlIGZvciBhbnkgYnVmcyB0aGF0IGFyZSBib3VuZCBh bHJlYWR5LiAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJ1ZnMpOyBpKyspCisJCWlm IChidWZzW2ldLT5iby0+b2Zmc2V0NjQpCisJCQlhdXhfcGd0YWJsZV9yZXNlcnZlX3JhbmdlKHJl c2VydmVkX2J1ZnMsCisJCQkJCQkgIHJlc2VydmVkX2J1Zl9jb3VudCsrLAorCQkJCQkJICBidWZz W2ldKTsKKworCS8qIE5leHQsIHJlc2VydmUgc3BhY2UgZm9yIHVuYm91bmQgYnVmcyB3aXRoIGFu IEFVWCBzdXJmYWNlLiAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJ1ZnMpOyBpKysp CisJCWlmICghYnVmc1tpXS0+Ym8tPm9mZnNldDY0ICYmIGJ1ZnNbaV0tPmF1eC5zdHJpZGUpCisJ CQlhdXhfcGd0YWJsZV9yZXNlcnZlX3JhbmdlKHJlc2VydmVkX2J1ZnMsCisJCQkJCQkgIHJlc2Vy dmVkX2J1Zl9jb3VudCsrLAorCQkJCQkJICBidWZzW2ldKTsKKworCS8qIENyZWF0ZSBBVVggcGd0 YWJsZSBlbnRyaWVzIG9ubHkgZm9yIGJ1ZnMgd2l0aCBhbiBBVVggc3VyZmFjZSAqLworCWluZm8t PmJ1Zl9jb3VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHJlc2VydmVkX2J1Zl9jb3VudDsgaSsr KSB7CisJCWlmICghcmVzZXJ2ZWRfYnVmc1tpXS0+YXV4LnN0cmlkZSkKKwkJCWNvbnRpbnVlOwor CisJCWluZm8tPmJ1ZnNbaW5mby0+YnVmX2NvdW50XSA9IHJlc2VydmVkX2J1ZnNbaV07CisJCWlu Zm8tPmJ1Zl9waW5fb2Zmc2V0c1tpbmZvLT5idWZfY291bnRdID0KKwkJCXJlc2VydmVkX2J1ZnNb aV0tPmJvLT5vZmZzZXQ2NDsKKwkJaW5mby0+YnVmX2NvdW50Kys7CisJfQorCisJaW5mby0+cGd0 YWJsZV9ibyA9IGludGVsX2F1eF9wZ3RhYmxlX2NyZWF0ZShidWZtZ3IsCisJCQkJCQkgICAgaW5m by0+YnVmcywKKwkJCQkJCSAgICBpbmZvLT5idWZfY291bnQpOworCWlndF9hc3NlcnQoaW5mby0+ cGd0YWJsZV9ibyk7Cit9CisKK3N0YXRpYyB2b2lkCitnZW4xMl9hdXhfcGd0YWJsZV9jbGVhbnVw KHN0cnVjdCBhdXhfcGd0YWJsZV9pbmZvICppbmZvKQoreworCWludCBpOworCisJLyogQ2hlY2sg dGhhdCB0aGUgcGlubmVkIGJ1ZnMga2VwdCB0aGVpciBvZmZzZXQgYWZ0ZXIgdGhlIGV4ZWMuICov CisJZm9yIChpID0gMDsgaSA8IGluZm8tPmJ1Zl9jb3VudDsgaSsrKQorCQlpZ3RfYXNzZXJ0X2Vx X3U2NChpbmZvLT5idWZzW2ldLT5iby0+b2Zmc2V0NjQsCisJCQkJICBpbmZvLT5idWZfcGluX29m ZnNldHNbaV0pOworCisJZHJtX2ludGVsX2JvX3VucmVmZXJlbmNlKGluZm8tPnBndGFibGVfYm8p OworfQorCitzdGF0aWMgdWludDMyX3QKK2dlbjEyX2NyZWF0ZV9hdXhfcGd0YWJsZV9zdGF0ZShz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorCQkJICAgICAgIGRybV9pbnRlbF9ibyAq YXV4X3BndGFibGVfYm8pCit7CisJdWludDY0X3QgKnBndGFibGVfcHRyOworCXVpbnQzMl90IHBn dGFibGVfcHRyX29mZnNldDsKKwlpbnQgcmV0OworCisJaWYgKCFhdXhfcGd0YWJsZV9ibykKKwkJ cmV0dXJuIDA7CisKKwlwZ3RhYmxlX3B0ciA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxs b2MoYmF0Y2gsCisJCQkJCQkgICAgICBzaXplb2YoKnBndGFibGVfcHRyKSwKKwkJCQkJCSAgICAg IHNpemVvZigqcGd0YWJsZV9wdHIpKTsKKwlwZ3RhYmxlX3B0cl9vZmZzZXQgPSBpbnRlbF9iYXRj aGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwKKwkJCQkJCQkgICAgICBwZ3RhYmxlX3B0cik7 CisKKwkqcGd0YWJsZV9wdHIgPSBhdXhfcGd0YWJsZV9iby0+b2Zmc2V0NjQ7CisJcmV0ID0gZHJt X2ludGVsX2JvX2VtaXRfcmVsb2MoYmF0Y2gtPmJvLCBwZ3RhYmxlX3B0cl9vZmZzZXQsCisJCQkJ ICAgICAgYXV4X3BndGFibGVfYm8sIDAsCisJCQkJICAgICAgMCwgMCk7CisJYXNzZXJ0KHJldCA9 PSAwKTsKKworCXJldHVybiBwZ3RhYmxlX3B0cl9vZmZzZXQ7Cit9CisKIHN0YXRpYwogdm9pZCBf Z2VuOV9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAkJ CSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsCiAJCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVm ICpzcmMsIHVuc2lnbmVkIHNyY194LAogCQkJICB1bnNpZ25lZCBzcmNfeSwgdW5zaWduZWQgd2lk dGgsIHVuc2lnbmVkIGhlaWdodCwKIAkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCwgdW5z aWduZWQgZHN0X3gsCi0JCQkgIHVuc2lnbmVkIGRzdF95LCBjb25zdCB1aW50MzJfdCBwc19rZXJu ZWxbXVs0XSwKKwkJCSAgdW5zaWduZWQgZHN0X3ksCisJCQkgIGRybV9pbnRlbF9ibyAqYXV4X3Bn dGFibGVfYm8sCisJCQkgIGNvbnN0IHVpbnQzMl90IHBzX2tlcm5lbFtdWzRdLAogCQkJICB1aW50 MzJfdCBwc19rZXJuZWxfc2l6ZSkKIHsKIAl1aW50MzJfdCBwc19zYW1wbGVyX3N0YXRlLCBwc19r ZXJuZWxfb2ZmLCBwc19iaW5kaW5nX3RhYmxlOwogCXVpbnQzMl90IHNjaXNzb3Jfc3RhdGU7CiAJ dWludDMyX3QgdmVydGV4X2J1ZmZlcjsKIAl1aW50MzJfdCBiYXRjaF9lbmQ7CisJdWludDMyX3Qg YXV4X3BndGFibGVfc3RhdGU7CiAKIAlpZ3RfYXNzZXJ0KHNyYy0+YnBwID09IGRzdC0+YnBwKTsK IAlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQpOwpA QCAtMTAwNyw2ICsxMjEzLDEwIEBAIHZvaWQgX2dlbjlfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJdmlld3BvcnQuY2Nfc3RhdGUgPSBnZW42X2NyZWF0 ZV9jY192aWV3cG9ydChiYXRjaCk7CiAJdmlld3BvcnQuc2ZfY2xpcF9zdGF0ZSA9IGdlbjdfY3Jl YXRlX3NmX2NsaXBfdmlld3BvcnQoYmF0Y2gpOwogCXNjaXNzb3Jfc3RhdGUgPSBnZW42X2NyZWF0 ZV9zY2lzc29yX3JlY3QoYmF0Y2gpOworCisJYXV4X3BndGFibGVfc3RhdGUgPSBnZW4xMl9jcmVh dGVfYXV4X3BndGFibGVfc3RhdGUoYmF0Y2gsCisJCQkJCQkJICAgYXV4X3BndGFibGVfYm8pOwor CiAJLyogVE9ETzogdGhlcmVlIGlzIG90aGVyIHN0YXRlIHdoaWNoIGlzbid0IHNldHVwICovCiAK IAlhc3NlcnQoYmF0Y2gtPnB0ciA8ICZiYXRjaC0+YnVmZmVyWzQwOTVdKTsKQEAgLTEwMTgsNiAr MTIyOCw4IEBAIHZvaWQgX2dlbjlfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gsCiAJT1VUX0JBVENIKEc0WF9QSVBFTElORV9TRUxFQ1QgfCBQSVBFTElORV9T RUxFQ1RfM0QgfAogCQkJCUdFTjlfUElQRUxJTkVfU0VMRUNUSU9OX01BU0spOwogCisJZ2VuMTJf ZW1pdF9hdXhfcGd0YWJsZV9zdGF0ZShiYXRjaCwgYXV4X3BndGFibGVfc3RhdGUpOworCiAJZ2Vu OF9lbWl0X3NpcChiYXRjaCk7CiAKIAlnZW43X2VtaXRfcHVzaF9jb25zdGFudHMoYmF0Y2gpOwpA QCAtMTA5Miw4ICsxMzA0LDggQEAgdm9pZCBnZW45X3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogCiB7CiAJX2dlbjlfcmVuZGVyX2NvcHlmdW5jKGJhdGNo LCBjb250ZXh0LCBzcmMsIHNyY194LCBzcmNfeSwKLQkJCSAgd2lkdGgsIGhlaWdodCwgZHN0LCBk c3RfeCwgZHN0X3ksIHBzX2tlcm5lbF9nZW45LAotCQkJICBzaXplb2YocHNfa2VybmVsX2dlbjkp KTsKKwkJCSAgd2lkdGgsIGhlaWdodCwgZHN0LCBkc3RfeCwgZHN0X3ksIE5VTEwsCisJCQkgIHBz X2tlcm5lbF9nZW45LCBzaXplb2YocHNfa2VybmVsX2dlbjkpKTsKIH0KIAogdm9pZCBnZW4xMV9y ZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKQEAgLTExMDQs OCArMTMxNiw4IEBAIHZvaWQgZ2VuMTFfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsCiAKIHsKIAlfZ2VuOV9yZW5kZXJfY29weWZ1bmMoYmF0Y2gsIGNvbnRl eHQsIHNyYywgc3JjX3gsIHNyY195LAotCQkJICB3aWR0aCwgaGVpZ2h0LCBkc3QsIGRzdF94LCBk c3RfeSwgcHNfa2VybmVsX2dlbjExLAotCQkJICBzaXplb2YocHNfa2VybmVsX2dlbjExKSk7CisJ CQkgIHdpZHRoLCBoZWlnaHQsIGRzdCwgZHN0X3gsIGRzdF95LCBOVUxMLAorCQkJICBwc19rZXJu ZWxfZ2VuMTEsIHNpemVvZihwc19rZXJuZWxfZ2VuMTEpKTsKIH0KIAogdm9pZCBnZW4xMl9yZW5k ZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKQEAgLTExMTUsNyAr MTMyNywxNSBAQCB2b2lkIGdlbjEyX3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoLAogCQkJICAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCwgdW5zaWduZWQg ZHN0X3gsIHVuc2lnbmVkIGRzdF95KQogCiB7CisJc3RydWN0IGF1eF9wZ3RhYmxlX2luZm8gcGd0 YWJsZV9pbmZvID0geyB9OworCisJZ2VuMTJfYXV4X3BndGFibGVfaW5pdCgmcGd0YWJsZV9pbmZv LCBiYXRjaC0+YnVmbWdyLCBzcmMsIGRzdCk7CisKIAlfZ2VuOV9yZW5kZXJfY29weWZ1bmMoYmF0 Y2gsIGNvbnRleHQsIHNyYywgc3JjX3gsIHNyY195LAotCQkJICB3aWR0aCwgaGVpZ2h0LCBkc3Qs IGRzdF94LCBkc3RfeSwgZ2VuMTJfcmVuZGVyX2NvcHksCisJCQkgIHdpZHRoLCBoZWlnaHQsIGRz dCwgZHN0X3gsIGRzdF95LAorCQkJICBwZ3RhYmxlX2luZm8ucGd0YWJsZV9ibywKKwkJCSAgZ2Vu MTJfcmVuZGVyX2NvcHksCiAJCQkgIHNpemVvZihnZW4xMl9yZW5kZXJfY29weSkpOworCisJZ2Vu MTJfYXV4X3BndGFibGVfY2xlYW51cCgmcGd0YWJsZV9pbmZvKTsKIH0KZGlmZiAtLWdpdCBhL2xp Yi9zdHVicy9kcm0vaW50ZWxfYnVmbWdyLmMgYi9saWIvc3R1YnMvZHJtL2ludGVsX2J1Zm1nci5j CmluZGV4IGY4NzQ1MmFjLi5jYmFiMjQ4NCAxMDA2NDQKLS0tIGEvbGliL3N0dWJzL2RybS9pbnRl bF9idWZtZ3IuYworKysgYi9saWIvc3R1YnMvZHJtL2ludGVsX2J1Zm1nci5jCkBAIC0yMzMsNiAr MjMzLDEyIEBAIGludCBkcm1faW50ZWxfYm9fc2V0X3RpbGluZyhkcm1faW50ZWxfYm8gKmJvLCB1 aW50MzJfdCAqIHRpbGluZ19tb2RlLAogCXJldHVybiAtRU5PREVWOwogfQogCitpbnQgZHJtX2lu dGVsX2JvX3NldF9zb2Z0cGluX29mZnNldChkcm1faW50ZWxfYm8gKmJvLCB1aW50NjRfdCBvZmZz ZXQpCit7CisJaWd0X3JlcXVpcmVfZihmYWxzZSwgbWlzc2luZ19zdXBwb3J0X3N0cik7CisJcmV0 dXJuIC1FTk9ERVY7Cit9CisKIGludCBkcm1faW50ZWxfYm9fZGlzYWJsZV9yZXVzZShkcm1faW50 ZWxfYm8gKmJvKQogewogCWlndF9yZXF1aXJlX2YoZmFsc2UsIG1pc3Npbmdfc3VwcG9ydF9zdHIp OwotLSAKMi4xNy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=