From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id A9BF16E142 for ; Tue, 5 Nov 2019 21:44:01 +0000 (UTC) From: Imre Deak Date: Tue, 5 Nov 2019 23:42:20 +0200 Message-Id: <20191105214220.6394-1-imre.deak@intel.com> In-Reply-To: <20191105193454.4611-1-imre.deak@intel.com> References: <20191105193454.4611-1-imre.deak@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH v3 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 c2luY2UgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgSW50ZWwKICBzcGVjaWZpYy4gKENocmlzKQp2MzoK LSBNYWtlIHN1cmUgYWxsIG9iamVjdHMgd2l0aCBhbiBBVVggc3VyZmFjZSBhcmUgcGlubmVkLgoK Q2M6IE1pa2EgS2Fob2xhIDxtaWthLmthaG9sYUBpbnRlbC5jb20+CkNjOiBCcmlhbiBXZWx0eSA8 YnJpYW4ud2VsdHlAaW50ZWwuY29tPgpDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxz b24uY28udWs+CkNjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwu Y29tPgpTaWduZWQtb2ZmLWJ5OiBJbXJlIERlYWsgPGltcmUuZGVha0BpbnRlbC5jb20+Ci0tLQog bGliL01ha2VmaWxlLnNvdXJjZXMgICAgICAgICB8ICAgMSArCiBsaWIvaW50ZWxfYXV4X3BndGFi bGUuYyAgICAgIHwgMzc5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWIv aW50ZWxfYXV4X3BndGFibGUuaCAgICAgIHwgIDEyICsrCiBsaWIvaW50ZWxfcmVnLmggICAgICAg ICAgICAgIHwgICAyICsKIGxpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgfCAgIDEgKwogbGli L3JlbmRlcmNvcHlfZ2VuOS5jICAgICAgICB8IDIzNCArKysrKysrKysrKysrKysrKysrKy0KIGxp Yi9zdHVicy9kcm0vaW50ZWxfYnVmbWdyLmMgfCAgIDYgKwogNyBmaWxlcyBjaGFuZ2VkLCA2Mjkg aW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaW50 ZWxfYXV4X3BndGFibGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pbnRlbF9hdXhfcGd0YWJs ZS5oCgpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnNvdXJjZXMgYi9saWIvTWFrZWZpbGUuc291 cmNlcwppbmRleCBjZjA5NGFiOC4uMWQwZjQ1ZjcgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5z b3VyY2VzCisrKyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCkBAIC0xMDAsNiArMTAwLDcgQEAgbGli X3NvdXJjZV9saXN0ID0JIAlcCiAJc3VyZmFjZWZvcm1hdC5oCQlcCiAJc3dfc3luYy5jCQlcCiAJ c3dfc3luYy5oCQlcCisJaW50ZWxfYXV4X3BndGFibGUuYwlcCiAJaW50ZWxfcmVnX21hcC5jCQlc CiAJaW50ZWxfaW9zZi5jCQlcCiAJaWd0X2ttcy5jCQlcCmRpZmYgLS1naXQgYS9saWIvaW50ZWxf YXV4X3BndGFibGUuYyBiL2xpYi9pbnRlbF9hdXhfcGd0YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwLi43OTQwMjgxMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pbnRl bF9hdXhfcGd0YWJsZS5jCkBAIC0wLDAgKzEsMzc5IEBACisjaW5jbHVkZSA8c3RkaW50Lmg+Cisj aW5jbHVkZSA8c3RkYm9vbC5oPgorCisjaW5jbHVkZSAiZHJtdGVzdC5oIgorI2luY2x1ZGUgImlu dGVsX2F1eF9wZ3RhYmxlLmgiCisjaW5jbHVkZSAiaW50ZWxfYnVmbWdyLmgiCisjaW5jbHVkZSAi aW50ZWxfYmF0Y2hidWZmZXIuaCIKKyNpbmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgorCisjaW5j bHVkZSAiaTkxNS9nZW1fbW1hbi5oIgorCisjZGVmaW5lIEJJVFNfUEVSX0xPTkcJCShzaXplb2Yo bG9uZykgKiA4KQorI2RlZmluZSBCSVRNQVNLKGUsIHMpCQkoKH4wVUwgPDwgKHMpKSAmIFwKKwkJ CQkgKH4wVUwgPj4gKEJJVFNfUEVSX0xPTkcgLSAxIC0gKGUpKSkpCisKKyNkZWZpbmUgQUxJR05f RE9XTih4LCBhKQlBTElHTigoeCkgLSAoKGEpIC0gMSksIChhKSkKKworLyogVGhlIHVuaXQgc2l6 ZSB0byB3aGljaCB0aGUgQVVYIENDUyBzdXJmYWNlIGlzIGFsaWduZWQgdG8uICovCisjZGVmaW5l IEFVWF9DQ1NfVU5JVF9TSVpFCTY0CisvKgorICogVGhlIGJsb2NrIHNpemUgb24gdGhlIEFVWCBD Q1Mgc3VyZmFjZSB3aGljaCBpcyBtYXBwZWQgYnkgb25lIEwxIEFVWAorICogcGFnZXRhYmxlIGVu dHJ5LgorICovCisjZGVmaW5lIEFVWF9DQ1NfQkxPQ0tfU0laRQkoNCAqIEFVWF9DQ1NfVU5JVF9T SVpFKQorLyoKKyAqIFRoZSBibG9jayBzaXplIG9uIHRoZSBtYWluIHN1cmZhY2UgbWFwcGVkIGJ5 IG9uZSBBVVggQ0NTIGJsb2NrOgorICogICAyNTYgYnl0ZXMgcGVyIENDUyBibG9jayAqCisgKiAg IDggICBiaXRzIHBlciBieXRlIC8KKyAqICAgMiAgIGJpdHMgcGVyIG1haW4gc3VyZmFjZSBDTCAq CisgKiAgIDY0ICBieXRlcyBwZXIgbWFpbiBzdXJmYWNlIENMCisgKi8KKyNkZWZpbmUgTUFJTl9T VVJGQUNFX0JMT0NLX1NJWkUJKEFVWF9DQ1NfQkxPQ0tfU0laRSAqIDggLyAyICogNjQpCisKKyNk ZWZpbmUgR0ZYX0FERFJFU1NfQklUUwk0OAorCisjZGVmaW5lIG1heChhLCBiKQkJKChhKSA+IChi KSA/IChhKSA6IChiKSkKKworc3RydWN0IHBndGFibGVfbGV2ZWxfZGVzYyB7CisJaW50IGlkeF9z aGlmdDsKKwlpbnQgaWR4X2JpdHM7CisJaW50IGVudHJ5X3B0cl9zaGlmdDsKKwlpbnQgdGFibGVf c2l6ZTsKK307CisKK3N0cnVjdCBwZ3RhYmxlX2xldmVsX2luZm8geworCWNvbnN0IHN0cnVjdCBw Z3RhYmxlX2xldmVsX2Rlc2MgKmRlc2M7CisJaW50IHRhYmxlX2NvdW50OworCWludCBhbGxvY19i YXNlOworCWludCBhbGxvY19wdHI7Cit9OworCitzdHJ1Y3QgcGd0YWJsZSB7CisJaW50IGxldmVs czsKKwlzdHJ1Y3QgcGd0YWJsZV9sZXZlbF9pbmZvICpsZXZlbF9pbmZvOworCWludCBzaXplOwor CWludCBtYXhfYWxpZ247CisJZHJtX2ludGVsX2JvICpibzsKK307CisKK3N0YXRpYyBpbnQKK3Bn dF90YWJsZV9jb3VudChpbnQgYWRkcmVzc19iaXRzLCBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqKmJ1 ZnMsIGludCBidWZfY291bnQpCit7CisJdWludDY0X3QgZW5kOworCWludCBjb3VudDsKKwlpbnQg aTsKKworCWNvdW50ID0gMDsKKwllbmQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBidWZfY291bnQ7 IGkrKykgeworCQljb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmID0gYnVmc1tpXTsKKwkJdWludDY0 X3Qgc3RhcnQ7CisKKwkJLyogV2UgcmVxdWlyZSBidWZzIHRvIGJlIHNvcnRlZC4gKi8KKwkJaWd0 X2Fzc2VydChpID09IDAgfHwKKwkJCSAgIGJ1Zi0+Ym8tPm9mZnNldDY0ID49IGJ1ZnNbaSAtIDFd LT5iby0+b2Zmc2V0NjQgKworCQkJCQkJYnVmc1tpIC0gMV0tPmJvLT5zaXplKTsKKworCQlzdGFy dCA9IEFMSUdOX0RPV04oYnVmLT5iby0+b2Zmc2V0NjQsIDFVTCA8PCBhZGRyZXNzX2JpdHMpOwor CQkvKiBBdm9pZCBkb3VibGUgY291bnRpbmcgZm9yIG92ZXJsYXBwaW5nIGFsaWduZWQgYnVmcy4g Ki8KKwkJc3RhcnQgPSBtYXgoc3RhcnQsIGVuZCk7CisKKwkJZW5kID0gQUxJR04oYnVmLT5iby0+ b2Zmc2V0NjQgKyBidWYtPnNpemUsIDFVTCA8PCBhZGRyZXNzX2JpdHMpOworCQlpZ3RfYXNzZXJ0 KGVuZCA+PSBzdGFydCk7CisKKwkJY291bnQgKz0gKGVuZCAtIHN0YXJ0KSA+PiBhZGRyZXNzX2Jp dHM7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZAorcGd0X2NhbGNfc2l6 ZShzdHJ1Y3QgcGd0YWJsZSAqcGd0LCBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqKmJ1ZnMsIGludCBi dWZfY291bnQpCit7CisJaW50IGxldmVsOworCisJcGd0LT5zaXplID0gMDsKKworCWZvciAobGV2 ZWwgPSBwZ3QtPmxldmVscyAtIDE7IGxldmVsID49IDA7IGxldmVsLS0pIHsKKwkJc3RydWN0IHBn dGFibGVfbGV2ZWxfaW5mbyAqbGkgPSAmcGd0LT5sZXZlbF9pbmZvW2xldmVsXTsKKworCQlsaS0+ YWxsb2NfYmFzZSA9IEFMSUdOKHBndC0+c2l6ZSwgbGktPmRlc2MtPnRhYmxlX3NpemUpOworCQls aS0+YWxsb2NfcHRyID0gbGktPmFsbG9jX2Jhc2U7CisKKwkJbGktPnRhYmxlX2NvdW50ID0gcGd0 X3RhYmxlX2NvdW50KGxpLT5kZXNjLT5pZHhfc2hpZnQgKworCQkJCQkJICBsaS0+ZGVzYy0+aWR4 X2JpdHMsCisJCQkJCQkgIGJ1ZnMsIGJ1Zl9jb3VudCk7CisKKwkJcGd0LT5zaXplID0gbGktPmFs bG9jX2Jhc2UgKworCQkJICAgIGxpLT50YWJsZV9jb3VudCAqIGxpLT5kZXNjLT50YWJsZV9zaXpl OworCX0KK30KKworc3RhdGljIHVpbnQ2NF90IHBndF9hbGxvY190YWJsZShzdHJ1Y3QgcGd0YWJs ZSAqcGd0LCBpbnQgbGV2ZWwpCit7CisJc3RydWN0IHBndGFibGVfbGV2ZWxfaW5mbyAqbGkgPSAm cGd0LT5sZXZlbF9pbmZvW2xldmVsXTsKKwl1aW50NjRfdCB0YWJsZTsKKworCXRhYmxlID0gbGkt PmFsbG9jX3B0cjsKKwlsaS0+YWxsb2NfcHRyICs9IGxpLT5kZXNjLT50YWJsZV9zaXplOworCisJ aWd0X2Fzc2VydChsaS0+YWxsb2NfcHRyIDw9CisJCSAgIGxpLT5hbGxvY19iYXNlICsgbGktPnRh YmxlX2NvdW50ICogbGktPmRlc2MtPnRhYmxlX3NpemUpOworCisJcmV0dXJuIHRhYmxlOworfQor CitzdGF0aWMgaW50IHBndF9hZGRyZXNzX2luZGV4KHN0cnVjdCBwZ3RhYmxlICpwZ3QsIGludCBs ZXZlbCwgdWludDY0X3QgYWRkcmVzcykKK3sKKwljb25zdCBzdHJ1Y3QgcGd0YWJsZV9sZXZlbF9k ZXNjICpsZCA9IHBndC0+bGV2ZWxfaW5mb1tsZXZlbF0uZGVzYzsKKwl1aW50NjRfdCBtYXNrID0g QklUTUFTSyhsZC0+aWR4X3NoaWZ0ICsgbGQtPmlkeF9iaXRzIC0gMSwKKwkJCQlsZC0+aWR4X3No aWZ0KTsKKworCXJldHVybiAoYWRkcmVzcyAmIG1hc2spID4+IGxkLT5pZHhfc2hpZnQ7Cit9CisK K3N0YXRpYyB1aW50NjRfdCBwdHJfbWFzayhzdHJ1Y3QgcGd0YWJsZSAqcGd0LCBpbnQgbGV2ZWwp Cit7CisJY29uc3Qgc3RydWN0IHBndGFibGVfbGV2ZWxfZGVzYyAqbGQgPSBwZ3QtPmxldmVsX2lu Zm9bbGV2ZWxdLmRlc2M7CisKKwlyZXR1cm4gQklUTUFTSyhHRlhfQUREUkVTU19CSVRTIC0gMSwg bGQtPmVudHJ5X3B0cl9zaGlmdCk7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBwZ3RfZW50cnlfcHRy KHN0cnVjdCBwZ3RhYmxlICpwZ3QsIGludCBsZXZlbCwgdWludDY0X3QgZW50cnkpCit7CisJdWlu dDY0X3QgcHRyID0gZW50cnkgJiBwdHJfbWFzayhwZ3QsIGxldmVsKTsKKworCWlmIChsZXZlbCkK KwkJcHRyIC09IHBndC0+Ym8tPm9mZnNldDY0OworCWlndF9hc3NlcnQoIShwdHIgJiB+cHRyX21h c2socGd0LCBsZXZlbCkpKTsKKworCXJldHVybiBwdHI7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBw Z3RfbWtlbnRyeShzdHJ1Y3QgcGd0YWJsZSAqcGd0LCBpbnQgbGV2ZWwsIHVpbnQ2NF90IHB0ciwK KwkJCSAgICB1aW50NjRfdCBmbGFncykKK3sKKwlpZiAobGV2ZWwpCisJCXB0ciArPSBwZ3QtPmJv LT5vZmZzZXQ2NDsKKwlpZ3RfYXNzZXJ0KCEocHRyICYgfnB0cl9tYXNrKHBndCwgbGV2ZWwpKSk7 CisKKwlyZXR1cm4gcHRyIHwgZmxhZ3M7Cit9CisKK3N0YXRpYyB1aW50NjRfdAorcGd0X2dldF90 YWJsZShzdHJ1Y3QgcGd0YWJsZSAqcGd0LCB1aW50NjRfdCBwYXJlbnRfdGFibGUsCisJICAgICAg aW50IGxldmVsLCB1aW50NjRfdCBhZGRyZXNzLCB1aW50NjRfdCBmbGFncykKK3sKKwl1aW50NjRf dCAqdGFibGVfcHRyID0gcGd0LT5iby0+dmlydHVhbCArIHBhcmVudF90YWJsZTsKKwlpbnQgZW50 cnlfaWR4ID0gcGd0X2FkZHJlc3NfaW5kZXgocGd0LCBsZXZlbCwgYWRkcmVzcyk7CisJdWludDY0 X3QgKmVudHJ5X3B0cjsKKworCWVudHJ5X3B0ciA9ICZ0YWJsZV9wdHJbZW50cnlfaWR4XTsKKwlp ZiAoISplbnRyeV9wdHIpIHsKKwkJdWludDY0X3QgY2hpbGRfdGFibGUgPSBwZ3RfYWxsb2NfdGFi bGUocGd0LCBsZXZlbCAtIDEpOworCisJCSplbnRyeV9wdHIgPSBwZ3RfbWtlbnRyeShwZ3QsIGxl dmVsLCBjaGlsZF90YWJsZSwgZmxhZ3MpOworCisJCWRybV9pbnRlbF9ib19lbWl0X3JlbG9jKHBn dC0+Ym8sCisJCQkJCXBhcmVudF90YWJsZSArIGVudHJ5X2lkeCAqIHNpemVvZih1aW50NjRfdCks CisJCQkJCXBndC0+Ym8sICplbnRyeV9wdHIsIDAsIDApOworCX0KKworCXJldHVybiBwZ3RfZW50 cnlfcHRyKHBndCwgbGV2ZWwsICplbnRyeV9wdHIpOworfQorCitzdGF0aWMgdm9pZAorcGd0X3Nl dF9sMV9lbnRyeShzdHJ1Y3QgcGd0YWJsZSAqcGd0LCB1aW50NjRfdCBsMV90YWJsZSwKKwkJIHVp bnQ2NF90IGFkZHJlc3MsIHVpbnQ2NF90IHB0ciwgdWludDY0X3QgZmxhZ3MpCit7CisJdWludDY0 X3QgKmwxX3RhYmxlX3B0cjsKKwl1aW50NjRfdCAqbDFfZW50cnlfcHRyOworCisJbDFfdGFibGVf cHRyID0gcGd0LT5iby0+dmlydHVhbCArIGwxX3RhYmxlOworCWwxX2VudHJ5X3B0ciA9ICZsMV90 YWJsZV9wdHJbcGd0X2FkZHJlc3NfaW5kZXgocGd0LCAwLCBhZGRyZXNzKV07CisJKmwxX2VudHJ5 X3B0ciA9IHBndF9ta2VudHJ5KHBndCwgMCwgcHRyLCBmbGFncyk7Cit9CisKK3N0YXRpYyB1aW50 NjRfdCBwZ3RfZ2V0X2wxX2ZsYWdzKGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpidWYpCit7CisJLyoK KwkgKiBUaGUgb2Zmc2V0IG9mIC50aWxlX21vZGUgaXNuJ3Qgc3BlY2lmZWQgYnkgYnNwZWMsIGl0 J3Mgd2hhdCBNZXNhCisJICogdXNlcy4KKwkgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1 aW50NjRfdAl2YWxpZDoxOworCQkJdWludDY0X3QJY29tcHJlc3Npb25fbW9kOjI7CisJCQl1aW50 NjRfdAlsb3NzeV9jb21wcmVzc2lvbjoxOworCQkJdWludDY0X3QJcGFkOjQ7CisJCQl1aW50NjRf dAlhZGRyOjQwOworCQkJdWludDY0X3QJcGFkMjo0OworCQkJdWludDY0X3QJdGlsZV9tb2RlOjI7 CisJCQl1aW50NjRfdAlkZXB0aDozOworCQkJdWludDY0X3QJeWNyOjE7CisJCQl1aW50NjRfdAlm b3JtYXQ6NjsKKwkJfSBlOworCQl1aW50NjRfdCBsOworCX0gZW50cnkgPSB7CisJCS5lID0gewor CQkJLnZhbGlkID0gMSwKKwkJCS50aWxlX21vZGUgPSBidWYtPnRpbGluZyA9PSBJOTE1X1RJTElO R19ZID8gMSA6IDAsCisJCQkuZGVwdGggPSA1LAkJLyogMzJicHAgKi8KKwkJCS5mb3JtYXQgPSAw eEEsCQkvKiBCOEc4UjhBOF9VTk9STSAqLworCQl9CisJfTsKKworCS8qCisJICogVE9ETzogQ2xh cmlmeSBpZiBZZiBpcyBzdXBwb3J0ZWQgYW5kIGlmIHdlIG5lZWQgdG8gZGlmZmVyZW50aWF0ZQor CSAqICAgICAgIFlzIGFuZCBZZi4KKwkgKiAgICAgICBBZGQgc3VwcG9ydCBmb3IgbW9yZSBmb3Jt YXRzLgorCSAqLworCWlndF9hc3NlcnQoYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWSB8fAor CQkgICBidWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19ZZiB8fAorCQkgICBidWYtPnRpbGluZyA9 PSBJOTE1X1RJTElOR19Zcyk7CisKKwlpZ3RfYXNzZXJ0KGJ1Zi0+YnBwID09IDMyKTsKKworCXJl dHVybiBlbnRyeS5sOworfQorCitzdGF0aWMgdWludDY0X3QgcGd0X2dldF9seF9mbGFncyh2b2lk KQoreworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQ2NF90ICAgICAgICB2YWxpZDoxOwor CQkJdWludDY0X3QgICAgICAgIGFkZHI6NDc7CisJCQl1aW50NjRfdCAgICAgICAgcGFkOjE2Owor CQl9IGU7CisJCXVpbnQ2NF90IGw7CisJfSBlbnRyeSA9IHsKKwkJLmUgPSB7CisJCQkudmFsaWQg PSAxLAorCQl9CisJfTsKKworCXJldHVybiBlbnRyeS5sOworfQorCitzdGF0aWMgdm9pZAorcGd0 X3BvcHVsYXRlX2VudHJpZXNfZm9yX2J1ZihzdHJ1Y3QgcGd0YWJsZSAqcGd0LAorCQkJICAgICAg IGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpidWYsCisJCQkgICAgICAgdWludDY0X3QgdG9wX3RhYmxl KQoreworCXVpbnQ2NF90IHN1cmZhY2VfYWRkciA9IGJ1Zi0+Ym8tPm9mZnNldDY0OworCXVpbnQ2 NF90IHN1cmZhY2VfZW5kID0gc3VyZmFjZV9hZGRyICsgYnVmLT5zaXplOworCXVpbnQ2NF90IGF1 eF9hZGRyID0gYnVmLT5iby0+b2Zmc2V0NjQgKyBidWYtPmF1eC5vZmZzZXQ7CisJdWludDY0X3Qg bDFfZmxhZ3MgPSBwZ3RfZ2V0X2wxX2ZsYWdzKGJ1Zik7CisJdWludDY0X3QgbHhfZmxhZ3MgPSBw Z3RfZ2V0X2x4X2ZsYWdzKCk7CisKKwlmb3IgKDsgc3VyZmFjZV9hZGRyIDwgc3VyZmFjZV9lbmQ7 CisJICAgICBzdXJmYWNlX2FkZHIgKz0gTUFJTl9TVVJGQUNFX0JMT0NLX1NJWkUsCisJICAgICBh dXhfYWRkciArPSBBVVhfQ0NTX0JMT0NLX1NJWkUpIHsKKwkJdWludDY0X3QgdGFibGUgPSB0b3Bf dGFibGU7CisJCWludCBsZXZlbDsKKworCQlmb3IgKGxldmVsID0gcGd0LT5sZXZlbHMgLSAxOyBs ZXZlbCA+PSAxOyBsZXZlbC0tKQorCQkJdGFibGUgPSBwZ3RfZ2V0X3RhYmxlKHBndCwgdGFibGUs IGxldmVsLAorCQkJCQkgICAgICBzdXJmYWNlX2FkZHIsIGx4X2ZsYWdzKTsKKworCQlwZ3Rfc2V0 X2wxX2VudHJ5KHBndCwgdGFibGUsIHN1cmZhY2VfYWRkciwgYXV4X2FkZHIsIGwxX2ZsYWdzKTsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIHBndF9wb3B1bGF0ZV9lbnRyaWVzKHN0cnVjdCBwZ3RhYmxl ICpwZ3QsCisJCQkJIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICoqYnVmcywKKwkJCQkgaW50IGJ1Zl9j b3VudCwKKwkJCQkgZHJtX2ludGVsX2JvICpwZ3RfYm8pCit7CisJdWludDY0X3QgdG9wX3RhYmxl OworCWludCBpOworCisJcGd0LT5ibyA9IHBndF9ibzsKKworCWlndF9hc3NlcnQocGd0X2JvLT5z aXplID49IHBndC0+c2l6ZSk7CisJbWVtc2V0KHBndF9iby0+dmlydHVhbCwgMCwgcGd0LT5zaXpl KTsKKworCXRvcF90YWJsZSA9IHBndF9hbGxvY190YWJsZShwZ3QsIHBndC0+bGV2ZWxzIC0gMSk7 CisJLyogVG9wIGxldmVsIHRhYmxlIG11c3QgYmUgYXQgb2Zmc2V0IDAuICovCisJaWd0X2Fzc2Vy dCh0b3BfdGFibGUgPT0gMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmX2NvdW50OyBpKyspCisJ CXBndF9wb3B1bGF0ZV9lbnRyaWVzX2Zvcl9idWYocGd0LCBidWZzW2ldLCB0b3BfdGFibGUpOwor fQorCitzdGF0aWMgc3RydWN0IHBndGFibGUgKgorcGd0X2NyZWF0ZShjb25zdCBzdHJ1Y3QgcGd0 YWJsZV9sZXZlbF9kZXNjICpsZXZlbF9kZXNjcywgaW50IGxldmVscywKKwkgICBjb25zdCBzdHJ1 Y3QgaWd0X2J1ZiAqKmJ1ZnMsIGludCBidWZfY291bnQpCit7CisJc3RydWN0IHBndGFibGUgKnBn dDsKKwlpbnQgbGV2ZWw7CisKKwlwZ3QgPSBjYWxsb2MoMSwgc2l6ZW9mKCpwZ3QpKTsKKwlpZ3Rf YXNzZXJ0KHBndCk7CisKKwlwZ3QtPmxldmVscyA9IGxldmVsczsKKworCXBndC0+bGV2ZWxfaW5m byA9IGNhbGxvYyhsZXZlbHMsIHNpemVvZigqcGd0LT5sZXZlbF9pbmZvKSk7CisJaWd0X2Fzc2Vy dChwZ3QtPmxldmVsX2luZm8pOworCisJZm9yIChsZXZlbCA9IDA7IGxldmVsIDwgcGd0LT5sZXZl bHM7IGxldmVsKyspIHsKKwkJc3RydWN0IHBndGFibGVfbGV2ZWxfaW5mbyAqbGkgPSAmcGd0LT5s ZXZlbF9pbmZvW2xldmVsXTsKKworCQlsaS0+ZGVzYyA9ICZsZXZlbF9kZXNjc1tsZXZlbF07CisJ CWlmIChsaS0+ZGVzYy0+dGFibGVfc2l6ZSA+IHBndC0+bWF4X2FsaWduKQorCQkJcGd0LT5tYXhf YWxpZ24gPSBsaS0+ZGVzYy0+dGFibGVfc2l6ZTsKKwl9CisKKwlwZ3RfY2FsY19zaXplKHBndCwg YnVmcywgYnVmX2NvdW50KTsKKworCXJldHVybiBwZ3Q7Cit9CisKK3N0YXRpYyB2b2lkIHBndF9k ZXN0cm95KHN0cnVjdCBwZ3RhYmxlICpwZ3QpCit7CisJZnJlZShwZ3QtPmxldmVsX2luZm8pOwor CWZyZWUocGd0KTsKK30KKworZHJtX2ludGVsX2JvICoKK2ludGVsX2F1eF9wZ3RhYmxlX2NyZWF0 ZShkcm1faW50ZWxfYnVmbWdyICpidWZtZ3IsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWd0X2J1 ZiAqKmJ1ZnMsIGludCBidWZfY291bnQpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBwZ3RhYmxl X2xldmVsX2Rlc2MgbGV2ZWxfZGVzY1tdID0geworCQl7CisJCQkuaWR4X3NoaWZ0ID0gMTYsCisJ CQkuaWR4X2JpdHMgPSA4LAorCQkJLmVudHJ5X3B0cl9zaGlmdCA9IDgsCisJCQkudGFibGVfc2l6 ZSA9IDggKiAxMDI0LAorCQl9LAorCQl7CisJCQkuaWR4X3NoaWZ0ID0gMjQsCisJCQkuaWR4X2Jp dHMgPSAxMiwKKwkJCS5lbnRyeV9wdHJfc2hpZnQgPSAxMywKKwkJCS50YWJsZV9zaXplID0gMzIg KiAxMDI0LAorCQl9LAorCQl7CisJCQkuaWR4X3NoaWZ0ID0gMzYsCisJCQkuaWR4X2JpdHMgPSAx MiwKKwkJCS5lbnRyeV9wdHJfc2hpZnQgPSAxNSwKKwkJCS50YWJsZV9zaXplID0gMzIgKiAxMDI0 LAorCQl9LAorCX07CisJc3RydWN0IHBndGFibGUgKnBndDsKKwlkcm1faW50ZWxfYm8gKnBndF9i bzsKKworCXBndCA9IHBndF9jcmVhdGUobGV2ZWxfZGVzYywgQVJSQVlfU0laRShsZXZlbF9kZXNj KSwgYnVmcywgYnVmX2NvdW50KTsKKworCXBndF9ibyA9IGRybV9pbnRlbF9ib19hbGxvY19mb3Jf cmVuZGVyKGJ1Zm1nciwgImF1eCBwZ3QiLAorCQkJCQkgICAgICAgcGd0LT5zaXplLCBwZ3QtPm1h eF9hbGlnbik7CisJaWd0X2Fzc2VydChwZ3RfYm8pOworCisJaWd0X2Fzc2VydChkcm1faW50ZWxf Ym9fbWFwKHBndF9ibywgdHJ1ZSkgPT0gMCk7CisJcGd0X3BvcHVsYXRlX2VudHJpZXMocGd0LCBi dWZzLCBidWZfY291bnQsIHBndF9ibyk7CisJaWd0X2Fzc2VydChkcm1faW50ZWxfYm9fdW5tYXAo cGd0X2JvKSA9PSAwKTsKKworCXBndF9kZXN0cm95KHBndCk7CisKKwlyZXR1cm4gcGd0X2JvOwor fQpkaWZmIC0tZ2l0IGEvbGliL2ludGVsX2F1eF9wZ3RhYmxlLmggYi9saWIvaW50ZWxfYXV4X3Bn dGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNTMzZDQ0OTEKLS0t IC9kZXYvbnVsbAorKysgYi9saWIvaW50ZWxfYXV4X3BndGFibGUuaApAQCAtMCwwICsxLDEyIEBA CisjaWZuZGVmIF9JR1RfQVVYX1BHVEFCTEVfSF8KKyNkZWZpbmUgX0lHVF9BVVhfUEdUQUJMRV9I XworCisjaW5jbHVkZSAiaW50ZWxfYnVmbWdyLmgiCisKK3N0cnVjdCBpZ3RfYnVmOworCitkcm1f aW50ZWxfYm8gKgoraW50ZWxfYXV4X3BndGFibGVfY3JlYXRlKGRybV9pbnRlbF9idWZtZ3IgKmJ1 Zm1nciwKKwkJCSBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqKmJ1ZnMsIGludCBidWZfY291bnQpOwor CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9pbnRlbF9yZWcuaCBiL2xpYi9pbnRlbF9yZWcuaApp bmRleCAwNjk0NDBjYi4uNzU1YTc4ZTYgMTAwNjQ0Ci0tLSBhL2xpYi9pbnRlbF9yZWcuaAorKysg Yi9saWIvaW50ZWxfcmVnLmgKQEAgLTY3Myw2ICs2NzMsNyBAQCBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICNkZWZpbmUgUklOR19WQUxJRCAg ICAgICAgICAweDAwMDAwMDAxCiAjZGVmaW5lIFJJTkdfSU5WQUxJRCAgICAgICAgMHgwMDAwMDAw MAogCisjZGVmaW5lIEdFTjEyX0dGWF9BVVhfVEFCTEVfQkFTRV9BRERSCTB4NDIwMAogCiAKIC8q IEJpdEJsdCBJbnN0cnVjdGlvbnMKQEAgLTI1NzAsNiArMjU3MSw3IEBAIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogCiAjZGVmaW5lIE1JX0xP QURfU0NBTl9MSU5FU19JTkNMCQkoMHgxMjw8MjMpCiAjZGVmaW5lIE1JX0xPQURfUkVHSVNURVJf SU1NCQkoKDB4MjIgPDwgMjMpIHwgMSkKKyNkZWZpbmUgTUlfTE9BRF9SRUdJU1RFUl9NRU0JCSgo MHgyOSA8PCAyMykgfCAoNCAtIDIpKQogCiAvKiBGbHVzaCAqLwogI2RlZmluZSBNSV9GTFVTSAkJ CSgweDA0PDwyMykKZGlmZiAtLWdpdCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5idWls ZAppbmRleCAyMjFhZTI4Yy4uMzNmZWY0ODYgMTAwNjQ0Ci0tLSBhL2xpYi9tZXNvbi5idWlsZAor KysgYi9saWIvbWVzb24uYnVpbGQKQEAgLTQ0LDYgKzQ0LDcgQEAgbGliX3NvdXJjZXMgPSBbCiAJ J3JlbmRlcmNvcHlfZ2VuOC5jJywKIAkncmVuZGVyY29weV9nZW45LmMnLAogCSdzd19zeW5jLmMn LAorCSdpbnRlbF9hdXhfcGd0YWJsZS5jJywKIAknaW50ZWxfcmVnX21hcC5jJywKIAknaW50ZWxf aW9zZi5jJywKIAknaWd0X2ttcy5jJywKZGlmZiAtLWdpdCBhL2xpYi9yZW5kZXJjb3B5X2dlbjku YyBiL2xpYi9yZW5kZXJjb3B5X2dlbjkuYwppbmRleCA2OTRlYjNjZi4uNDQ3ZDZjZTkgMTAwNjQ0 Ci0tLSBhL2xpYi9yZW5kZXJjb3B5X2dlbjkuYworKysgYi9saWIvcmVuZGVyY29weV9nZW45LmMK QEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxpOTE1X2RybS5oPgogCiAjaW5jbHVkZSAiZHJt dGVzdC5oIgorI2luY2x1ZGUgImludGVsX2F1eF9wZ3RhYmxlLmgiCiAjaW5jbHVkZSAiaW50ZWxf YnVmbWdyLmgiCiAjaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZmZXIuaCIKICNpbmNsdWRlICJpbnRl bF9pby5oIgpAQCAtOTcyLDE5ICs5NzMsMjI2IEBAIHN0YXRpYyB2b2lkIGdlbjhfZW1pdF9wcmlt aXRpdmUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qgb2Zmc2V0CiAK ICNkZWZpbmUgQkFUQ0hfU1RBVEVfU1BMSVQgMjA0OAogCitzdGF0aWMgdm9pZAorZ2VuMTJfZW1p dF9hdXhfcGd0YWJsZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50 MzJfdCBzdGF0ZSkKK3sKKwlpZiAoIXN0YXRlKQorCQlyZXR1cm47CisKKwlPVVRfQkFUQ0goTUlf TE9BRF9SRUdJU1RFUl9NRU0pOworCU9VVF9CQVRDSChHRU4xMl9HRlhfQVVYX1RBQkxFX0JBU0Vf QUREUik7CisJT1VUX1JFTE9DKGJhdGNoLT5ibywgMCwgMCwgc3RhdGUpOworCisJT1VUX0JBVENI KE1JX0xPQURfUkVHSVNURVJfTUVNKTsKKwlPVVRfQkFUQ0goR0VOMTJfR0ZYX0FVWF9UQUJMRV9C QVNFX0FERFIgKyA0KTsKKwlPVVRfUkVMT0MoYmF0Y2gtPmJvLCAwLCAwLCBzdGF0ZSArIDQpOwor fQorCitzdGF0aWMgdm9pZAorYXV4X3BndGFibGVfZmluZF9tYXhfZnJlZV9yYW5nZShjb25zdCBz dHJ1Y3QgaWd0X2J1ZiAqKmJ1ZnMsIGludCBidWZfY291bnQsCisJCQkJdWludDY0X3QgKnJhbmdl X3N0YXJ0LCB1aW50NjRfdCAqcmFuZ2Vfc2l6ZSkKK3sKKwkvKgorCSAqIEtlZXAgdGhlIGZpcnN0 IHBhZ2UgcmVzZXJ2ZWQsIHNvIHdlIGNhbiBkaWZmZXJlbnRpYXRlIHBpbm5lZAorCSAqIG9iamVj dHMgYmFzZWQgb24gYSBub24tTlVMTCBvZmZzZXQuCisJICovCisJdWludDY0X3Qgc3RhcnQgPSAw eDEwMDA7CisJLyogRm9yIG5vdyBhbGxvYyBvbmx5IGZyb20gdGhlIGZpcnN0IDRHQiBhZGRyZXNz IHNwYWNlLiAqLworCWNvbnN0IHVpbnQ2NF90IGVuZCA9IDFVTEwgPDwgMzI7CisJdWludDY0X3Qg bWF4X3JhbmdlX3N0YXJ0ID0gMDsKKwl1aW50NjRfdCBtYXhfcmFuZ2Vfc2l6ZSA9IDA7CisJaW50 IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmX2NvdW50OyBpKyspIHsKKwkJaWYgKGJ1ZnNbaV0t PmJvLT5vZmZzZXQ2NCA+PSBlbmQpCisJCQlicmVhazsKKworCQlpZiAoYnVmc1tpXS0+Ym8tPm9m ZnNldDY0IC0gc3RhcnQgPiBtYXhfcmFuZ2Vfc2l6ZSkgeworCQkJbWF4X3JhbmdlX3N0YXJ0ID0g c3RhcnQ7CisJCQltYXhfcmFuZ2Vfc2l6ZSA9IGJ1ZnNbaV0tPmJvLT5vZmZzZXQ2NCAtIHN0YXJ0 OworCQl9CisJCXN0YXJ0ID0gYnVmc1tpXS0+Ym8tPm9mZnNldDY0ICsgYnVmc1tpXS0+c2l6ZTsK Kwl9CisKKwlpZiAoc3RhcnQgPCBlbmQgJiYgZW5kIC0gc3RhcnQgPiBtYXhfcmFuZ2Vfc2l6ZSkg eworCQltYXhfcmFuZ2Vfc3RhcnQgPSBzdGFydDsKKwkJbWF4X3JhbmdlX3NpemUgPSBlbmQgLSBz dGFydDsKKwl9CisKKwkqcmFuZ2Vfc3RhcnQgPSBtYXhfcmFuZ2Vfc3RhcnQ7CisJKnJhbmdlX3Np emUgPSBtYXhfcmFuZ2Vfc2l6ZTsKK30KKworc3RhdGljIHVpbnQ2NF90CithdXhfcGd0YWJsZV9m aW5kX2ZyZWVfcmFuZ2UoY29uc3Qgc3RydWN0IGlndF9idWYgKipidWZzLCBpbnQgYnVmX2NvdW50 LAorCQkJICAgIHVpbnQzMl90IHNpemUpCit7CisJdWludDY0X3QgcmFuZ2Vfc3RhcnQ7CisJdWlu dDY0X3QgcmFuZ2Vfc2l6ZTsKKwkvKiBBIGNvbXByZXNzZWQgc3VyZmFjZSBtdXN0IGJlIDY0a0Ig YWxpZ25lZC4gKi8KKwljb25zdCB1aW50MzJfdCBhbGlnbiA9IDB4MTAwMDA7CisJaW50IHBhZDsK KworCWF1eF9wZ3RhYmxlX2ZpbmRfbWF4X2ZyZWVfcmFuZ2UoYnVmcywgYnVmX2NvdW50LAorCQkJ CQkmcmFuZ2Vfc3RhcnQsICZyYW5nZV9zaXplKTsKKworCXBhZCA9IEFMSUdOKHJhbmdlX3N0YXJ0 LCBhbGlnbikgLSByYW5nZV9zdGFydDsKKwlyYW5nZV9zdGFydCArPSBwYWQ7CisJcmFuZ2Vfc2l6 ZSAtPSBwYWQ7CisJaWd0X2Fzc2VydChyYW5nZV9zaXplID49IHNpemUpOworCisJcmV0dXJuIHJh bmdlX3N0YXJ0ICsgQUxJR04ocmFuZCgpICUgKHJhbmdlX3NpemUgLSBzaXplKSwgYWxpZ24pOwor fQorCitzdGF0aWMgdm9pZAorYXV4X3BndGFibGVfcmVzZXJ2ZV9yYW5nZShjb25zdCBzdHJ1Y3Qg aWd0X2J1ZiAqKmJ1ZnMsIGludCBidWZfY291bnQsCisJCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVm ICpuZXdfYnVmKQoreworCWludCBpOworCisJaWYgKG5ld19idWYtPmF1eC5zdHJpZGUpIHsKKwkJ dWludDY0X3QgcGluX29mZnNldCA9IG5ld19idWYtPmJvLT5vZmZzZXQ2NDsKKworCQlpZiAoIXBp bl9vZmZzZXQpCisJCQlwaW5fb2Zmc2V0ID0gYXV4X3BndGFibGVfZmluZF9mcmVlX3JhbmdlKGJ1 ZnMsCisJCQkJCQkJCSBidWZfY291bnQsCisJCQkJCQkJCSBuZXdfYnVmLT5iby0+c2l6ZSk7CisJ CWRybV9pbnRlbF9ib19zZXRfc29mdHBpbl9vZmZzZXQobmV3X2J1Zi0+Ym8sIHBpbl9vZmZzZXQp OworCQlpZ3RfYXNzZXJ0KG5ld19idWYtPmJvLT5vZmZzZXQ2NCA9PSBwaW5fb2Zmc2V0KTsKKwl9 CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmX2NvdW50OyBpKyspCisJCWlmIChidWZzW2ldLT5iby0+ b2Zmc2V0NjQgPiBuZXdfYnVmLT5iby0+b2Zmc2V0NjQpCisJCQlicmVhazsKKworCW1lbW1vdmUo JmJ1ZnNbaSArIDFdLCAmYnVmc1tpXSwgc2l6ZW9mKGJ1ZnNbMF0pICogKGJ1Zl9jb3VudCAtIGkp KTsKKworCWJ1ZnNbaV0gPSBuZXdfYnVmOworfQorCitzdHJ1Y3QgYXV4X3BndGFibGVfaW5mbyB7 CisJaW50IGJ1Zl9jb3VudDsKKwljb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmc1syXTsKKwl1aW50 NjRfdCBidWZfcGluX29mZnNldHNbMl07CisJZHJtX2ludGVsX2JvICpwZ3RhYmxlX2JvOworfTsK Kworc3RhdGljIHZvaWQKK2dlbjEyX2F1eF9wZ3RhYmxlX2luaXQoc3RydWN0IGF1eF9wZ3RhYmxl X2luZm8gKmluZm8sCisJCSAgICAgICBkcm1faW50ZWxfYnVmbWdyICpidWZtZ3IsCisJCSAgICAg ICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqc3JjX2J1ZiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBp Z3RfYnVmICpkc3RfYnVmKQoreworCWNvbnN0IHN0cnVjdCBpZ3RfYnVmICpidWZzWzJdOworCWNv bnN0IHN0cnVjdCBpZ3RfYnVmICpyZXNlcnZlZF9idWZzWzJdOworCWludCByZXNlcnZlZF9idWZf Y291bnQ7CisJaW50IGk7CisKKwlpZiAoIXNyY19idWYtPmF1eC5zdHJpZGUgJiYgIWRzdF9idWYt PmF1eC5zdHJpZGUpCisJCXJldHVybjsKKworCWJ1ZnNbMF0gPSBzcmNfYnVmOworCWJ1ZnNbMV0g PSBkc3RfYnVmOworCisJLyoKKwkgKiBJZGVhbGx5IHdlJ2QgbmVlZCBhIGFuIElHVC13aWRlIEdG WCBhZGRyZXNzIHNwYWNlIGFsbG9jYXRvciwgd2hpY2gKKwkgKiB3b3VsZCBjb25zaWRlciBhbGwg YWxsb2NhdGlvbnMgYW5kIHRodXMgYXZvaWQgZXZpY3Rpb25zLiBGb3Igbm93IHVzZQorCSAqIGEg c2ltcGxlciBzY2hlbWUgaGVyZSwgd2hpY2ggb25seSBjb25zaWRlcnMgdGhlIGJ1ZmZlcnMgaW52 b2x2ZWQgaW4KKwkgKiB0aGUgYmxpdCwgd2hpY2ggc2hvdWxkIGF0IGxlYXN0IG1pbmltaXplIHRo ZSBjaGFuY2UgZm9yIGV2aWN0aW9ucworCSAqIGluIHRoZSBjYXNlIG9mIHN1YnNlcXVlbnQgYmxp dHM6CisJICogICAxLiBJZiB0aGV5IHdlcmUgYWxyZWFkeSBib3VuZCAoYm8tPm9mZnNldDY0ICE9 IDApLCB1c2UgdGhpcworCSAqICAgICAgYWRkcmVzcy4KKwkgKiAgIDIuIFBpY2sgYSByYW5nZSBy YW5kb21seSBmcm9tIHRoZSA0R0IgYWRkcmVzcyBzcGFjZSwgdGhhdCBpcyBub3QKKwkgKiAgICAg IGFscmVhZHkgb2NjdXBpZWQgYnkgYSBib3VuZCBvYmplY3QsIG9yIGFuIG9iamVjdCB3ZSBwaW5u ZWQuCisJICovCisJcmVzZXJ2ZWRfYnVmX2NvdW50ID0gMDsKKwkvKiBGaXJzdCByZXNlcnZlIHNw YWNlIGZvciBhbnkgYnVmcyB0aGF0IGFyZSBib3VuZCBhbHJlYWR5LiAqLworCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKGJ1ZnMpOyBpKyspCisJCWlmIChidWZzW2ldLT5iby0+b2Zmc2V0NjQp CisJCQlhdXhfcGd0YWJsZV9yZXNlcnZlX3JhbmdlKHJlc2VydmVkX2J1ZnMsCisJCQkJCQkgIHJl c2VydmVkX2J1Zl9jb3VudCsrLAorCQkJCQkJICBidWZzW2ldKTsKKworCS8qIE5leHQsIHJlc2Vy dmUgc3BhY2UgZm9yIHVuYm91bmQgYnVmcyB3aXRoIGFuIEFVWCBzdXJmYWNlLiAqLworCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJ1ZnMpOyBpKyspCisJCWlmICghYnVmc1tpXS0+Ym8tPm9m ZnNldDY0ICYmIGJ1ZnNbaV0tPmF1eC5zdHJpZGUpCisJCQlhdXhfcGd0YWJsZV9yZXNlcnZlX3Jh bmdlKHJlc2VydmVkX2J1ZnMsCisJCQkJCQkgIHJlc2VydmVkX2J1Zl9jb3VudCsrLAorCQkJCQkJ ICBidWZzW2ldKTsKKworCS8qIENyZWF0ZSBBVVggcGd0YWJsZSBlbnRyaWVzIG9ubHkgZm9yIGJ1 ZnMgd2l0aCBhbiBBVVggc3VyZmFjZSAqLworCWluZm8tPmJ1Zl9jb3VudCA9IDA7CisJZm9yIChp ID0gMDsgaSA8IHJlc2VydmVkX2J1Zl9jb3VudDsgaSsrKSB7CisJCWlmICghcmVzZXJ2ZWRfYnVm c1tpXS0+YXV4LnN0cmlkZSkKKwkJCWNvbnRpbnVlOworCisJCWluZm8tPmJ1ZnNbaW5mby0+YnVm X2NvdW50XSA9IHJlc2VydmVkX2J1ZnNbaV07CisJCWluZm8tPmJ1Zl9waW5fb2Zmc2V0c1tpbmZv LT5idWZfY291bnRdID0KKwkJCXJlc2VydmVkX2J1ZnNbaV0tPmJvLT5vZmZzZXQ2NDsKKwkJaW5m by0+YnVmX2NvdW50Kys7CisJfQorCisJaW5mby0+cGd0YWJsZV9ibyA9IGludGVsX2F1eF9wZ3Rh YmxlX2NyZWF0ZShidWZtZ3IsCisJCQkJCQkgICAgaW5mby0+YnVmcywKKwkJCQkJCSAgICBpbmZv LT5idWZfY291bnQpOworCWlndF9hc3NlcnQoaW5mby0+cGd0YWJsZV9ibyk7Cit9CisKK3N0YXRp YyB2b2lkCitnZW4xMl9hdXhfcGd0YWJsZV9jbGVhbnVwKHN0cnVjdCBhdXhfcGd0YWJsZV9pbmZv ICppbmZvKQoreworCWludCBpOworCisJLyogQ2hlY2sgdGhhdCB0aGUgcGlubmVkIGJ1ZnMga2Vw dCB0aGVpciBvZmZzZXQgYWZ0ZXIgdGhlIGV4ZWMuICovCisJZm9yIChpID0gMDsgaSA8IGluZm8t PmJ1Zl9jb3VudDsgaSsrKQorCQlpZ3RfYXNzZXJ0X2VxX3U2NChpbmZvLT5idWZzW2ldLT5iby0+ b2Zmc2V0NjQsCisJCQkJICBpbmZvLT5idWZfcGluX29mZnNldHNbaV0pOworCisJZHJtX2ludGVs X2JvX3VucmVmZXJlbmNlKGluZm8tPnBndGFibGVfYm8pOworfQorCitzdGF0aWMgdWludDMyX3QK K2dlbjEyX2NyZWF0ZV9hdXhfcGd0YWJsZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLAorCQkJICAgICAgIGRybV9pbnRlbF9ibyAqYXV4X3BndGFibGVfYm8pCit7CisJdWlu dDY0X3QgKnBndGFibGVfcHRyOworCXVpbnQzMl90IHBndGFibGVfcHRyX29mZnNldDsKKwlpbnQg cmV0OworCisJaWYgKCFhdXhfcGd0YWJsZV9ibykKKwkJcmV0dXJuIDA7CisKKwlwZ3RhYmxlX3B0 ciA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsCisJCQkJCQkgICAgICBz aXplb2YoKnBndGFibGVfcHRyKSwKKwkJCQkJCSAgICAgIHNpemVvZigqcGd0YWJsZV9wdHIpKTsK KwlwZ3RhYmxlX3B0cl9vZmZzZXQgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChi YXRjaCwKKwkJCQkJCQkgICAgICBwZ3RhYmxlX3B0cik7CisKKwkqcGd0YWJsZV9wdHIgPSBhdXhf cGd0YWJsZV9iby0+b2Zmc2V0NjQ7CisJcmV0ID0gZHJtX2ludGVsX2JvX2VtaXRfcmVsb2MoYmF0 Y2gtPmJvLCBwZ3RhYmxlX3B0cl9vZmZzZXQsCisJCQkJICAgICAgYXV4X3BndGFibGVfYm8sIDAs CisJCQkJICAgICAgMCwgMCk7CisJYXNzZXJ0KHJldCA9PSAwKTsKKworCXJldHVybiBwZ3RhYmxl X3B0cl9vZmZzZXQ7Cit9CisKIHN0YXRpYwogdm9pZCBfZ2VuOV9yZW5kZXJfY29weWZ1bmMoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAkJCSAgZHJtX2ludGVsX2NvbnRleHQgKmNv bnRleHQsCiAJCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNyY194LAog CQkJICB1bnNpZ25lZCBzcmNfeSwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKIAkJ CSAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCwgdW5zaWduZWQgZHN0X3gsCi0JCQkgIHVuc2ln bmVkIGRzdF95LCBjb25zdCB1aW50MzJfdCBwc19rZXJuZWxbXVs0XSwKKwkJCSAgdW5zaWduZWQg ZHN0X3ksCisJCQkgIGRybV9pbnRlbF9ibyAqYXV4X3BndGFibGVfYm8sCisJCQkgIGNvbnN0IHVp bnQzMl90IHBzX2tlcm5lbFtdWzRdLAogCQkJICB1aW50MzJfdCBwc19rZXJuZWxfc2l6ZSkKIHsK IAl1aW50MzJfdCBwc19zYW1wbGVyX3N0YXRlLCBwc19rZXJuZWxfb2ZmLCBwc19iaW5kaW5nX3Rh YmxlOwogCXVpbnQzMl90IHNjaXNzb3Jfc3RhdGU7CiAJdWludDMyX3QgdmVydGV4X2J1ZmZlcjsK IAl1aW50MzJfdCBiYXRjaF9lbmQ7CisJdWludDMyX3QgYXV4X3BndGFibGVfc3RhdGU7CiAKIAlp Z3RfYXNzZXJ0KHNyYy0+YnBwID09IGRzdC0+YnBwKTsKIAlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVz aF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQpOwpAQCAtMTAwNyw2ICsxMjE1LDEwIEBAIHZv aWQgX2dlbjlfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gs CiAJdmlld3BvcnQuY2Nfc3RhdGUgPSBnZW42X2NyZWF0ZV9jY192aWV3cG9ydChiYXRjaCk7CiAJ dmlld3BvcnQuc2ZfY2xpcF9zdGF0ZSA9IGdlbjdfY3JlYXRlX3NmX2NsaXBfdmlld3BvcnQoYmF0 Y2gpOwogCXNjaXNzb3Jfc3RhdGUgPSBnZW42X2NyZWF0ZV9zY2lzc29yX3JlY3QoYmF0Y2gpOwor CisJYXV4X3BndGFibGVfc3RhdGUgPSBnZW4xMl9jcmVhdGVfYXV4X3BndGFibGVfc3RhdGUoYmF0 Y2gsCisJCQkJCQkJICAgYXV4X3BndGFibGVfYm8pOworCiAJLyogVE9ETzogdGhlcmVlIGlzIG90 aGVyIHN0YXRlIHdoaWNoIGlzbid0IHNldHVwICovCiAKIAlhc3NlcnQoYmF0Y2gtPnB0ciA8ICZi YXRjaC0+YnVmZmVyWzQwOTVdKTsKQEAgLTEwMTgsNiArMTIzMCw4IEBAIHZvaWQgX2dlbjlfcmVu ZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJT1VUX0JBVENI KEc0WF9QSVBFTElORV9TRUxFQ1QgfCBQSVBFTElORV9TRUxFQ1RfM0QgfAogCQkJCUdFTjlfUElQ RUxJTkVfU0VMRUNUSU9OX01BU0spOwogCisJZ2VuMTJfZW1pdF9hdXhfcGd0YWJsZV9zdGF0ZShi YXRjaCwgYXV4X3BndGFibGVfc3RhdGUpOworCiAJZ2VuOF9lbWl0X3NpcChiYXRjaCk7CiAKIAln ZW43X2VtaXRfcHVzaF9jb25zdGFudHMoYmF0Y2gpOwpAQCAtMTA5Miw4ICsxMzA2LDggQEAgdm9p ZCBnZW45X3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAog CiB7CiAJX2dlbjlfcmVuZGVyX2NvcHlmdW5jKGJhdGNoLCBjb250ZXh0LCBzcmMsIHNyY194LCBz cmNfeSwKLQkJCSAgd2lkdGgsIGhlaWdodCwgZHN0LCBkc3RfeCwgZHN0X3ksIHBzX2tlcm5lbF9n ZW45LAotCQkJICBzaXplb2YocHNfa2VybmVsX2dlbjkpKTsKKwkJCSAgd2lkdGgsIGhlaWdodCwg ZHN0LCBkc3RfeCwgZHN0X3ksIE5VTEwsCisJCQkgIHBzX2tlcm5lbF9nZW45LCBzaXplb2YocHNf a2VybmVsX2dlbjkpKTsKIH0KIAogdm9pZCBnZW4xMV9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKQEAgLTExMDQsOCArMTMxOCw4IEBAIHZvaWQgZ2VuMTFf cmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAKIHsKIAlf Z2VuOV9yZW5kZXJfY29weWZ1bmMoYmF0Y2gsIGNvbnRleHQsIHNyYywgc3JjX3gsIHNyY195LAot CQkJICB3aWR0aCwgaGVpZ2h0LCBkc3QsIGRzdF94LCBkc3RfeSwgcHNfa2VybmVsX2dlbjExLAot CQkJICBzaXplb2YocHNfa2VybmVsX2dlbjExKSk7CisJCQkgIHdpZHRoLCBoZWlnaHQsIGRzdCwg ZHN0X3gsIGRzdF95LCBOVUxMLAorCQkJICBwc19rZXJuZWxfZ2VuMTEsIHNpemVvZihwc19rZXJu ZWxfZ2VuMTEpKTsKIH0KIAogdm9pZCBnZW4xMl9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwKQEAgLTExMTUsNyArMTMyOSwxNSBAQCB2b2lkIGdlbjEyX3Jl bmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogCQkJICAgY29u c3Qgc3RydWN0IGlndF9idWYgKmRzdCwgdW5zaWduZWQgZHN0X3gsIHVuc2lnbmVkIGRzdF95KQog CiB7CisJc3RydWN0IGF1eF9wZ3RhYmxlX2luZm8gcGd0YWJsZV9pbmZvID0geyB9OworCisJZ2Vu MTJfYXV4X3BndGFibGVfaW5pdCgmcGd0YWJsZV9pbmZvLCBiYXRjaC0+YnVmbWdyLCBzcmMsIGRz dCk7CisKIAlfZ2VuOV9yZW5kZXJfY29weWZ1bmMoYmF0Y2gsIGNvbnRleHQsIHNyYywgc3JjX3gs IHNyY195LAotCQkJICB3aWR0aCwgaGVpZ2h0LCBkc3QsIGRzdF94LCBkc3RfeSwgZ2VuMTJfcmVu ZGVyX2NvcHksCisJCQkgIHdpZHRoLCBoZWlnaHQsIGRzdCwgZHN0X3gsIGRzdF95LAorCQkJICBw Z3RhYmxlX2luZm8ucGd0YWJsZV9ibywKKwkJCSAgZ2VuMTJfcmVuZGVyX2NvcHksCiAJCQkgIHNp emVvZihnZW4xMl9yZW5kZXJfY29weSkpOworCisJZ2VuMTJfYXV4X3BndGFibGVfY2xlYW51cCgm cGd0YWJsZV9pbmZvKTsKIH0KZGlmZiAtLWdpdCBhL2xpYi9zdHVicy9kcm0vaW50ZWxfYnVmbWdy LmMgYi9saWIvc3R1YnMvZHJtL2ludGVsX2J1Zm1nci5jCmluZGV4IGY4NzQ1MmFjLi5jYmFiMjQ4 NCAxMDA2NDQKLS0tIGEvbGliL3N0dWJzL2RybS9pbnRlbF9idWZtZ3IuYworKysgYi9saWIvc3R1 YnMvZHJtL2ludGVsX2J1Zm1nci5jCkBAIC0yMzMsNiArMjMzLDEyIEBAIGludCBkcm1faW50ZWxf Ym9fc2V0X3RpbGluZyhkcm1faW50ZWxfYm8gKmJvLCB1aW50MzJfdCAqIHRpbGluZ19tb2RlLAog CXJldHVybiAtRU5PREVWOwogfQogCitpbnQgZHJtX2ludGVsX2JvX3NldF9zb2Z0cGluX29mZnNl dChkcm1faW50ZWxfYm8gKmJvLCB1aW50NjRfdCBvZmZzZXQpCit7CisJaWd0X3JlcXVpcmVfZihm YWxzZSwgbWlzc2luZ19zdXBwb3J0X3N0cik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKIGludCBk cm1faW50ZWxfYm9fZGlzYWJsZV9yZXVzZShkcm1faW50ZWxfYm8gKmJvKQogewogCWlndF9yZXF1 aXJlX2YoZmFsc2UsIG1pc3Npbmdfc3VwcG9ydF9zdHIpOwotLSAKMi4xNy4xCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlz dAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=