From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id A47596F9AE for ; Fri, 8 Nov 2019 14:21:57 +0000 (UTC) From: Mika Kahola Date: Fri, 8 Nov 2019 16:21:45 +0200 Message-Id: <20191108142150.24712-2-mika.kahola@intel.com> In-Reply-To: <20191108142150.24712-1-mika.kahola@intel.com> References: <20191108142150.24712-1-mika.kahola@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t CI_ONLY v2 1/6] 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: RnJvbTogSW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPgoKT24gR0VOMTIrIHRoZSBBVVgg Q0NTIHN1cmZhY2VzIHJlcXVpcmVkIGJ5IHRoZSByZW5kZXIgYW5kIG1lZGlhCmNvbXByZXNzaW9u IG11c3QgYmUgc3BlY2lmaWVkIGJ5IGEgMyBsZXZlbCBwYWdlIHRhYmxlIGRpcmVjdG9yeSwgd2hp Y2gKdHJhbnNsYXRlcyB0aGUgbWFpbiBzdXJmYWNlIGdyYXBoaWNzIGFkZHJlc3MgdG8gdGhlIEFV WCBDQ1Mgc3VyZmFjZQpncmFwaGljcyBhZGRyZXNzLiBGb3IgdGhpcyBwdXJwb3NlIGFkZCBzdXBw b3J0IGZvciBjcmVhdGluZyBhIEdFTSBidWZmZXIKdG8gdHJhbnNsYXRlIHRoZSBsaW5lYXIgc3Vy ZmFjZSBhZGRyZXNzIHJhbmdlIHRvIHRoZSBsaW5lYXIgQVVYIHN1cmZhY2UKYWRkcmVzcyByYW5n ZS4KClRoZSBidWZmZXJzIGNvbnRhaW5pbmcgdGhlIG1haW4gc3VyZmFjZSBtdXN0IGJlIHBpbm5l ZCBkb3duLCBzaW5jZSB0aGUKZGlyZWN0b3J5IHRhYmxlIGVudHJ5IGluZGljZXMgZGVwZW5kIG9u IHRoZSBzdXJmYWNlIGFkZHJlc3MsIGFuZCB0aGV5Cm11c3QgYmUgNjRrQiBhbGlnbmVkLiBUaGUg cGFnZSB0YWJsZSBjYW4gYmUgcmVsb2NhdGVkIE9UT0gsIHNvIGFsbG93CnRoYXQgYW5kIGVtaXQg dGhlIHJlcXVpcmVkIHJlbG9jYXRpb24gZW50cmllcy4KCnYyOgotIE1ha2UgbGV2ZWwgdmFyaWFi bGVzIHRvIGJlIDAgYmFzZWQgKGwxLi5sMyAtPiBsZXZlbD0wLi4yKS4KLSBBZGQgbWlzc2luZyBk cm1faW50ZWxfYm9fc2V0X3NvZnRwaW5fb2Zmc2V0KCkgc3R1YiB0byBmaXggYnVpbGQgb24KICBu b24tSW50ZWwgYXJjaHMuCi0gRml4IG1pc3Npbmcgb2Zmc2V0cyBpbiByZWxvYyBlbnRyaWVzIG9m IGFscmVhZHkgYm91bmQgb2JqZWN0cy4gKENocmlzKQotIFJhbmRvbWl6ZSBwaW4gb2Zmc2V0cywg dG8gdHJ5IHRvIGF2b2lkIGV2aWN0aW9uLiAoQ2hyaXMpCi0gUmVtb3ZlIHJlZHVuZGFudCBNSV9O T09QUyBhcm91bmQgTUlfTE9BRF9SRUdJU1RFUl9NRU0KLSBTdG9wIHVzaW5nIGV4cGxpY2l0IHJl bG9jIGNhY2hlIGRvbWFpbnMsIGFzIHRoZXNlIGRvbid0IG1ha2Ugc2Vuc2Ugb24KICBHRU4xMiBh bnl3YXkuIChDaHJpcykKLSBGaXggbWlzc2luZyBhdXRvdG9vbHMgc3VwcG9ydC4gKENocmlzKQot IHMvaWd0X2F1eF9wZ3RhYmxlL2ludGVsX2F1eF9wZ3RhYmxlLywgc2luY2UgdGhlIGZ1bmN0aW9u YWxpdHkgaXMgSW50ZWwKICBzcGVjaWZpYy4gKENocmlzKQp2MzoKLSBNYWtlIHN1cmUgYWxsIG9i amVjdHMgd2l0aCBhbiBBVVggc3VyZmFjZSBhcmUgcGlubmVkLgp2NDoKLSBzL01JX0xPQURfUkVH SVNURVJfTUVNL01JX0xPQURfUkVHSVNURVJfTUVNX0dFTjgvIChDaHJpcykKLSBGaXggdXNpbmcg YnVmLT5iby0+c2l6ZSBpbnN0ZWFkIG9mIGJ1Zi0+c2l6ZSB3aGVuIGZpbmRpbmcgYSBmcmVlCiAg cmFuZ2UgZm9yIGEgcGlubmVkIG9iai4KLSBGaXggYWxpZ25tZW50IG9mIHRoZSByZXNlcnZlZCBz cGFjZSBzdGFydCBmb3IgYSBwaW5uZWQgb2JqLgotIE1vdmUgZ2VuMTJfZW1pdF9hdXhfcGd0YWJs ZV9zdGF0ZSgpIHRvIGl0cyBsb2dpY2FsIHNwb3QuCgpDYzogTWlrYSBLYWhvbGEgPG1pa2Eua2Fo b2xhQGludGVsLmNvbT4KQ2M6IEJyaWFuIFdlbHR5IDxicmlhbi53ZWx0eUBpbnRlbC5jb20+CkNj OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6IFZpbGxlIFN5cmrD pGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IEltcmUg RGVhayA8aW1yZS5kZWFrQGludGVsLmNvbT4KLS0tCiBsaWIvTWFrZWZpbGUuc291cmNlcyAgICAg ICAgIHwgICAxICsKIGxpYi9kcm10ZXN0LmggICAgICAgICAgICAgICAgfCAgIDkgKwogbGliL2lu dGVsX2F1eF9wZ3RhYmxlLmMgICAgICB8IDM3NyArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogbGliL2ludGVsX2F1eF9wZ3RhYmxlLmggICAgICB8ICAxMiArKwogbGliL2ludGVs X3JlZy5oICAgICAgICAgICAgICB8ICAgMiArCiBsaWIvbWVzb24uYnVpbGQgICAgICAgICAgICAg IHwgICAxICsKIGxpYi9yZW5kZXJjb3B5X2dlbjkuYyAgICAgICAgfCAyMzQgKysrKysrKysrKysr KysrKysrKysrLQogbGliL3N0dWJzL2RybS9pbnRlbF9idWZtZ3IuYyB8ICAgNiArCiA4IGZpbGVz IGNoYW5nZWQsIDYzNiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGxpYi9pbnRlbF9hdXhfcGd0YWJsZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2lu dGVsX2F1eF9wZ3RhYmxlLmgKCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuc291cmNlcyBiL2xp Yi9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IDM0ZTBjMDEyLi5lNTQ0YzI3YiAxMDA2NDQKLS0tIGEv bGliL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvbGliL01ha2VmaWxlLnNvdXJjZXMKQEAgLTEwMCw2 ICsxMDAsNyBAQCBsaWJfc291cmNlX2xpc3QgPQkgCVwKIAlzdXJmYWNlZm9ybWF0LmgJCVwKIAlz d19zeW5jLmMJCVwKIAlzd19zeW5jLmgJCVwKKwlpbnRlbF9hdXhfcGd0YWJsZS5jCVwKIAlpbnRl bF9yZWdfbWFwLmMJCVwKIAlpbnRlbF9pb3NmLmMJCVwKIAlpZ3Rfa21zLmMJCVwKZGlmZiAtLWdp dCBhL2xpYi9kcm10ZXN0LmggYi9saWIvZHJtdGVzdC5oCmluZGV4IDYxNGY1N2U2Li4wNWViMDg2 MCAxMDA2NDQKLS0tIGEvbGliL2RybXRlc3QuaAorKysgYi9saWIvZHJtdGVzdC5oCkBAIC03Nyw2 ICs3NywxNSBAQCB2b2lkIF9fc2V0X2ZvcmNlZF9kcml2ZXIoY29uc3QgY2hhciAqbmFtZSk7CiAg Ki8KICNkZWZpbmUgQUxJR04odiwgYSkgKCgodikgKyAoYSktMSkgJiB+KChhKS0xKSkKIAorLyoq CisgKiBBTElHTl9ET1dOOgorICogQHY6IHZhbHVlIHRvIGJlIGFsaWduZWQgZG93bgorICogQGE6 IGFsaWdubWVudCB1bml0IGluIGJ5dGVzCisgKgorICogTWFjcm8gdG8gYWxpZ24gZG93biBhIHZh bHVlIEB2IHRvIGEgc3BlY2lmaWVkIHVuaXQgQGEuCisgKi8KKyNkZWZpbmUgQUxJR05fRE9XTih4 LCBhKQlBTElHTigoeCkgLSAoKGEpIC0gMSksIChhKSkKKwogaW50IGRybV9vcGVuX2RyaXZlcihp bnQgY2hpcHNldCk7CiBpbnQgZHJtX29wZW5fZHJpdmVyX21hc3RlcihpbnQgY2hpcHNldCk7CiBp bnQgZHJtX29wZW5fZHJpdmVyX3JlbmRlcihpbnQgY2hpcHNldCk7CmRpZmYgLS1naXQgYS9saWIv aW50ZWxfYXV4X3BndGFibGUuYyBiL2xpYi9pbnRlbF9hdXhfcGd0YWJsZS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5lMTI0OWRlZQotLS0gL2Rldi9udWxsCisrKyBiL2xp Yi9pbnRlbF9hdXhfcGd0YWJsZS5jCkBAIC0wLDAgKzEsMzc3IEBACisjaW5jbHVkZSA8c3RkYm9v bC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSAiZHJtdGVzdC5oIgorI2luY2x1 ZGUgImludGVsX2F1eF9wZ3RhYmxlLmgiCisjaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZmZXIuaCIK KyNpbmNsdWRlICJpbnRlbF9idWZtZ3IuaCIKKyNpbmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgor CisjaW5jbHVkZSAiaTkxNS9nZW1fbW1hbi5oIgorCisjZGVmaW5lIEJJVFNfUEVSX0xPTkcJCShz aXplb2YobG9uZykgKiA4KQorI2RlZmluZSBCSVRNQVNLKGUsIHMpCQkoKH4wVUwgPDwgKHMpKSAm IFwKKwkJCQkgKH4wVUwgPj4gKEJJVFNfUEVSX0xPTkcgLSAxIC0gKGUpKSkpCisKKy8qIFRoZSB1 bml0IHNpemUgdG8gd2hpY2ggdGhlIEFVWCBDQ1Mgc3VyZmFjZSBpcyBhbGlnbmVkIHRvLiAqLwor I2RlZmluZSBBVVhfQ0NTX1VOSVRfU0laRQk2NAorLyoKKyAqIFRoZSBibG9jayBzaXplIG9uIHRo ZSBBVVggQ0NTIHN1cmZhY2Ugd2hpY2ggaXMgbWFwcGVkIGJ5IG9uZSBMMSBBVVgKKyAqIHBhZ2V0 YWJsZSBlbnRyeS4KKyAqLworI2RlZmluZSBBVVhfQ0NTX0JMT0NLX1NJWkUJKDQgKiBBVVhfQ0NT X1VOSVRfU0laRSkKKy8qCisgKiBUaGUgYmxvY2sgc2l6ZSBvbiB0aGUgbWFpbiBzdXJmYWNlIG1h cHBlZCBieSBvbmUgQVVYIENDUyBibG9jazoKKyAqICAgMjU2IGJ5dGVzIHBlciBDQ1MgYmxvY2sg KgorICogICA4ICAgYml0cyBwZXIgYnl0ZSAvCisgKiAgIDIgICBiaXRzIHBlciBtYWluIHN1cmZh Y2UgQ0wgKgorICogICA2NCAgYnl0ZXMgcGVyIG1haW4gc3VyZmFjZSBDTAorICovCisjZGVmaW5l IE1BSU5fU1VSRkFDRV9CTE9DS19TSVpFCShBVVhfQ0NTX0JMT0NLX1NJWkUgKiA4IC8gMiAqIDY0 KQorCisjZGVmaW5lIEdGWF9BRERSRVNTX0JJVFMJNDgKKworI2RlZmluZSBtYXgoYSwgYikJCSgo YSkgPiAoYikgPyAoYSkgOiAoYikpCisKK3N0cnVjdCBwZ3RhYmxlX2xldmVsX2Rlc2MgeworCWlu dCBpZHhfc2hpZnQ7CisJaW50IGlkeF9iaXRzOworCWludCBlbnRyeV9wdHJfc2hpZnQ7CisJaW50 IHRhYmxlX3NpemU7Cit9OworCitzdHJ1Y3QgcGd0YWJsZV9sZXZlbF9pbmZvIHsKKwljb25zdCBz dHJ1Y3QgcGd0YWJsZV9sZXZlbF9kZXNjICpkZXNjOworCWludCB0YWJsZV9jb3VudDsKKwlpbnQg YWxsb2NfYmFzZTsKKwlpbnQgYWxsb2NfcHRyOworfTsKKworc3RydWN0IHBndGFibGUgeworCWlu dCBsZXZlbHM7CisJc3RydWN0IHBndGFibGVfbGV2ZWxfaW5mbyAqbGV2ZWxfaW5mbzsKKwlpbnQg c2l6ZTsKKwlpbnQgbWF4X2FsaWduOworCWRybV9pbnRlbF9ibyAqYm87Cit9OworCitzdGF0aWMg aW50CitwZ3RfdGFibGVfY291bnQoaW50IGFkZHJlc3NfYml0cywgY29uc3Qgc3RydWN0IGlndF9i dWYgKipidWZzLCBpbnQgYnVmX2NvdW50KQoreworCXVpbnQ2NF90IGVuZDsKKwlpbnQgY291bnQ7 CisJaW50IGk7CisKKwljb3VudCA9IDA7CisJZW5kID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgYnVm X2NvdW50OyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZiA9IGJ1ZnNbaV07CisJ CXVpbnQ2NF90IHN0YXJ0OworCisJCS8qIFdlIHJlcXVpcmUgYnVmcyB0byBiZSBzb3J0ZWQuICov CisJCWlndF9hc3NlcnQoaSA9PSAwIHx8CisJCQkgICBidWYtPmJvLT5vZmZzZXQ2NCA+PSBidWZz W2kgLSAxXS0+Ym8tPm9mZnNldDY0ICsKKwkJCQkJCWJ1ZnNbaSAtIDFdLT5iby0+c2l6ZSk7CisK KwkJc3RhcnQgPSBBTElHTl9ET1dOKGJ1Zi0+Ym8tPm9mZnNldDY0LCAxVUwgPDwgYWRkcmVzc19i aXRzKTsKKwkJLyogQXZvaWQgZG91YmxlIGNvdW50aW5nIGZvciBvdmVybGFwcGluZyBhbGlnbmVk IGJ1ZnMuICovCisJCXN0YXJ0ID0gbWF4KHN0YXJ0LCBlbmQpOworCisJCWVuZCA9IEFMSUdOKGJ1 Zi0+Ym8tPm9mZnNldDY0ICsgYnVmLT5zaXplLCAxVUwgPDwgYWRkcmVzc19iaXRzKTsKKwkJaWd0 X2Fzc2VydChlbmQgPj0gc3RhcnQpOworCisJCWNvdW50ICs9IChlbmQgLSBzdGFydCkgPj4gYWRk cmVzc19iaXRzOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHZvaWQKK3BndF9j YWxjX3NpemUoc3RydWN0IHBndGFibGUgKnBndCwgY29uc3Qgc3RydWN0IGlndF9idWYgKipidWZz LCBpbnQgYnVmX2NvdW50KQoreworCWludCBsZXZlbDsKKworCXBndC0+c2l6ZSA9IDA7CisKKwlm b3IgKGxldmVsID0gcGd0LT5sZXZlbHMgLSAxOyBsZXZlbCA+PSAwOyBsZXZlbC0tKSB7CisJCXN0 cnVjdCBwZ3RhYmxlX2xldmVsX2luZm8gKmxpID0gJnBndC0+bGV2ZWxfaW5mb1tsZXZlbF07CisK KwkJbGktPmFsbG9jX2Jhc2UgPSBBTElHTihwZ3QtPnNpemUsIGxpLT5kZXNjLT50YWJsZV9zaXpl KTsKKwkJbGktPmFsbG9jX3B0ciA9IGxpLT5hbGxvY19iYXNlOworCisJCWxpLT50YWJsZV9jb3Vu dCA9IHBndF90YWJsZV9jb3VudChsaS0+ZGVzYy0+aWR4X3NoaWZ0ICsKKwkJCQkJCSAgbGktPmRl c2MtPmlkeF9iaXRzLAorCQkJCQkJICBidWZzLCBidWZfY291bnQpOworCisJCXBndC0+c2l6ZSA9 IGxpLT5hbGxvY19iYXNlICsKKwkJCSAgICBsaS0+dGFibGVfY291bnQgKiBsaS0+ZGVzYy0+dGFi bGVfc2l6ZTsKKwl9Cit9CisKK3N0YXRpYyB1aW50NjRfdCBwZ3RfYWxsb2NfdGFibGUoc3RydWN0 IHBndGFibGUgKnBndCwgaW50IGxldmVsKQoreworCXN0cnVjdCBwZ3RhYmxlX2xldmVsX2luZm8g KmxpID0gJnBndC0+bGV2ZWxfaW5mb1tsZXZlbF07CisJdWludDY0X3QgdGFibGU7CisKKwl0YWJs ZSA9IGxpLT5hbGxvY19wdHI7CisJbGktPmFsbG9jX3B0ciArPSBsaS0+ZGVzYy0+dGFibGVfc2l6 ZTsKKworCWlndF9hc3NlcnQobGktPmFsbG9jX3B0ciA8PQorCQkgICBsaS0+YWxsb2NfYmFzZSAr IGxpLT50YWJsZV9jb3VudCAqIGxpLT5kZXNjLT50YWJsZV9zaXplKTsKKworCXJldHVybiB0YWJs ZTsKK30KKworc3RhdGljIGludCBwZ3RfYWRkcmVzc19pbmRleChzdHJ1Y3QgcGd0YWJsZSAqcGd0 LCBpbnQgbGV2ZWwsIHVpbnQ2NF90IGFkZHJlc3MpCit7CisJY29uc3Qgc3RydWN0IHBndGFibGVf bGV2ZWxfZGVzYyAqbGQgPSBwZ3QtPmxldmVsX2luZm9bbGV2ZWxdLmRlc2M7CisJdWludDY0X3Qg bWFzayA9IEJJVE1BU0sobGQtPmlkeF9zaGlmdCArIGxkLT5pZHhfYml0cyAtIDEsCisJCQkJbGQt PmlkeF9zaGlmdCk7CisKKwlyZXR1cm4gKGFkZHJlc3MgJiBtYXNrKSA+PiBsZC0+aWR4X3NoaWZ0 OworfQorCitzdGF0aWMgdWludDY0X3QgcHRyX21hc2soc3RydWN0IHBndGFibGUgKnBndCwgaW50 IGxldmVsKQoreworCWNvbnN0IHN0cnVjdCBwZ3RhYmxlX2xldmVsX2Rlc2MgKmxkID0gcGd0LT5s ZXZlbF9pbmZvW2xldmVsXS5kZXNjOworCisJcmV0dXJuIEJJVE1BU0soR0ZYX0FERFJFU1NfQklU UyAtIDEsIGxkLT5lbnRyeV9wdHJfc2hpZnQpOworfQorCitzdGF0aWMgdWludDY0X3QgcGd0X2Vu dHJ5X3B0cihzdHJ1Y3QgcGd0YWJsZSAqcGd0LCBpbnQgbGV2ZWwsIHVpbnQ2NF90IGVudHJ5KQor eworCXVpbnQ2NF90IHB0ciA9IGVudHJ5ICYgcHRyX21hc2socGd0LCBsZXZlbCk7CisKKwlpZiAo bGV2ZWwpCisJCXB0ciAtPSBwZ3QtPmJvLT5vZmZzZXQ2NDsKKwlpZ3RfYXNzZXJ0KCEocHRyICYg fnB0cl9tYXNrKHBndCwgbGV2ZWwpKSk7CisKKwlyZXR1cm4gcHRyOworfQorCitzdGF0aWMgdWlu dDY0X3QgcGd0X21rZW50cnkoc3RydWN0IHBndGFibGUgKnBndCwgaW50IGxldmVsLCB1aW50NjRf dCBwdHIsCisJCQkgICAgdWludDY0X3QgZmxhZ3MpCit7CisJaWYgKGxldmVsKQorCQlwdHIgKz0g cGd0LT5iby0+b2Zmc2V0NjQ7CisJaWd0X2Fzc2VydCghKHB0ciAmIH5wdHJfbWFzayhwZ3QsIGxl dmVsKSkpOworCisJcmV0dXJuIHB0ciB8IGZsYWdzOworfQorCitzdGF0aWMgdWludDY0X3QKK3Bn dF9nZXRfdGFibGUoc3RydWN0IHBndGFibGUgKnBndCwgdWludDY0X3QgcGFyZW50X3RhYmxlLAor CSAgICAgIGludCBsZXZlbCwgdWludDY0X3QgYWRkcmVzcywgdWludDY0X3QgZmxhZ3MpCit7CisJ dWludDY0X3QgKnRhYmxlX3B0ciA9IHBndC0+Ym8tPnZpcnR1YWwgKyBwYXJlbnRfdGFibGU7CisJ aW50IGVudHJ5X2lkeCA9IHBndF9hZGRyZXNzX2luZGV4KHBndCwgbGV2ZWwsIGFkZHJlc3MpOwor CXVpbnQ2NF90ICplbnRyeV9wdHI7CisKKwllbnRyeV9wdHIgPSAmdGFibGVfcHRyW2VudHJ5X2lk eF07CisJaWYgKCEqZW50cnlfcHRyKSB7CisJCXVpbnQ2NF90IGNoaWxkX3RhYmxlID0gcGd0X2Fs bG9jX3RhYmxlKHBndCwgbGV2ZWwgLSAxKTsKKworCQkqZW50cnlfcHRyID0gcGd0X21rZW50cnko cGd0LCBsZXZlbCwgY2hpbGRfdGFibGUsIGZsYWdzKTsKKworCQlkcm1faW50ZWxfYm9fZW1pdF9y ZWxvYyhwZ3QtPmJvLAorCQkJCQlwYXJlbnRfdGFibGUgKyBlbnRyeV9pZHggKiBzaXplb2YodWlu dDY0X3QpLAorCQkJCQlwZ3QtPmJvLCAqZW50cnlfcHRyLCAwLCAwKTsKKwl9CisKKwlyZXR1cm4g cGd0X2VudHJ5X3B0cihwZ3QsIGxldmVsLCAqZW50cnlfcHRyKTsKK30KKworc3RhdGljIHZvaWQK K3BndF9zZXRfbDFfZW50cnkoc3RydWN0IHBndGFibGUgKnBndCwgdWludDY0X3QgbDFfdGFibGUs CisJCSB1aW50NjRfdCBhZGRyZXNzLCB1aW50NjRfdCBwdHIsIHVpbnQ2NF90IGZsYWdzKQorewor CXVpbnQ2NF90ICpsMV90YWJsZV9wdHI7CisJdWludDY0X3QgKmwxX2VudHJ5X3B0cjsKKworCWwx X3RhYmxlX3B0ciA9IHBndC0+Ym8tPnZpcnR1YWwgKyBsMV90YWJsZTsKKwlsMV9lbnRyeV9wdHIg PSAmbDFfdGFibGVfcHRyW3BndF9hZGRyZXNzX2luZGV4KHBndCwgMCwgYWRkcmVzcyldOworCSps MV9lbnRyeV9wdHIgPSBwZ3RfbWtlbnRyeShwZ3QsIDAsIHB0ciwgZmxhZ3MpOworfQorCitzdGF0 aWMgdWludDY0X3QgcGd0X2dldF9sMV9mbGFncyhjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmKQor eworCS8qCisJICogVGhlIG9mZnNldCBvZiAudGlsZV9tb2RlIGlzbid0IHNwZWNpZmVkIGJ5IGJz cGVjLCBpdCdzIHdoYXQgTWVzYQorCSAqIHVzZXMuCisJICovCisJdW5pb24geworCQlzdHJ1Y3Qg eworCQkJdWludDY0X3QJdmFsaWQ6MTsKKwkJCXVpbnQ2NF90CWNvbXByZXNzaW9uX21vZDoyOwor CQkJdWludDY0X3QJbG9zc3lfY29tcHJlc3Npb246MTsKKwkJCXVpbnQ2NF90CXBhZDo0OworCQkJ dWludDY0X3QJYWRkcjo0MDsKKwkJCXVpbnQ2NF90CXBhZDI6NDsKKwkJCXVpbnQ2NF90CXRpbGVf bW9kZToyOworCQkJdWludDY0X3QJZGVwdGg6MzsKKwkJCXVpbnQ2NF90CXljcjoxOworCQkJdWlu dDY0X3QJZm9ybWF0OjY7CisJCX0gZTsKKwkJdWludDY0X3QgbDsKKwl9IGVudHJ5ID0geworCQku ZSA9IHsKKwkJCS52YWxpZCA9IDEsCisJCQkudGlsZV9tb2RlID0gYnVmLT50aWxpbmcgPT0gSTkx NV9USUxJTkdfWSA/IDEgOiAwLAorCQkJLmRlcHRoID0gNSwJCS8qIDMyYnBwICovCisJCQkuZm9y bWF0ID0gMHhBLAkJLyogQjhHOFI4QThfVU5PUk0gKi8KKwkJfQorCX07CisKKwkvKgorCSAqIFRP RE86IENsYXJpZnkgaWYgWWYgaXMgc3VwcG9ydGVkIGFuZCBpZiB3ZSBuZWVkIHRvIGRpZmZlcmVu dGlhdGUKKwkgKiAgICAgICBZcyBhbmQgWWYuCisJICogICAgICAgQWRkIHN1cHBvcnQgZm9yIG1v cmUgZm9ybWF0cy4KKwkgKi8KKwlpZ3RfYXNzZXJ0KGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5H X1kgfHwKKwkJICAgYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWWYgfHwKKwkJICAgYnVmLT50 aWxpbmcgPT0gSTkxNV9USUxJTkdfWXMpOworCisJaWd0X2Fzc2VydChidWYtPmJwcCA9PSAzMik7 CisKKwlyZXR1cm4gZW50cnkubDsKK30KKworc3RhdGljIHVpbnQ2NF90IHBndF9nZXRfbHhfZmxh Z3Modm9pZCkKK3sKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1aW50NjRfdCAgICAgICAgdmFs aWQ6MTsKKwkJCXVpbnQ2NF90ICAgICAgICBhZGRyOjQ3OworCQkJdWludDY0X3QgICAgICAgIHBh ZDoxNjsKKwkJfSBlOworCQl1aW50NjRfdCBsOworCX0gZW50cnkgPSB7CisJCS5lID0geworCQkJ LnZhbGlkID0gMSwKKwkJfQorCX07CisKKwlyZXR1cm4gZW50cnkubDsKK30KKworc3RhdGljIHZv aWQKK3BndF9wb3B1bGF0ZV9lbnRyaWVzX2Zvcl9idWYoc3RydWN0IHBndGFibGUgKnBndCwKKwkJ CSAgICAgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAorCQkJICAgICAgIHVpbnQ2NF90IHRv cF90YWJsZSkKK3sKKwl1aW50NjRfdCBzdXJmYWNlX2FkZHIgPSBidWYtPmJvLT5vZmZzZXQ2NDsK Kwl1aW50NjRfdCBzdXJmYWNlX2VuZCA9IHN1cmZhY2VfYWRkciArIGJ1Zi0+c2l6ZTsKKwl1aW50 NjRfdCBhdXhfYWRkciA9IGJ1Zi0+Ym8tPm9mZnNldDY0ICsgYnVmLT5hdXgub2Zmc2V0OworCXVp bnQ2NF90IGwxX2ZsYWdzID0gcGd0X2dldF9sMV9mbGFncyhidWYpOworCXVpbnQ2NF90IGx4X2Zs YWdzID0gcGd0X2dldF9seF9mbGFncygpOworCisJZm9yICg7IHN1cmZhY2VfYWRkciA8IHN1cmZh Y2VfZW5kOworCSAgICAgc3VyZmFjZV9hZGRyICs9IE1BSU5fU1VSRkFDRV9CTE9DS19TSVpFLAor CSAgICAgYXV4X2FkZHIgKz0gQVVYX0NDU19CTE9DS19TSVpFKSB7CisJCXVpbnQ2NF90IHRhYmxl ID0gdG9wX3RhYmxlOworCQlpbnQgbGV2ZWw7CisKKwkJZm9yIChsZXZlbCA9IHBndC0+bGV2ZWxz IC0gMTsgbGV2ZWwgPj0gMTsgbGV2ZWwtLSkKKwkJCXRhYmxlID0gcGd0X2dldF90YWJsZShwZ3Qs IHRhYmxlLCBsZXZlbCwKKwkJCQkJICAgICAgc3VyZmFjZV9hZGRyLCBseF9mbGFncyk7CisKKwkJ cGd0X3NldF9sMV9lbnRyeShwZ3QsIHRhYmxlLCBzdXJmYWNlX2FkZHIsIGF1eF9hZGRyLCBsMV9m bGFncyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwZ3RfcG9wdWxhdGVfZW50cmllcyhzdHJ1Y3Qg cGd0YWJsZSAqcGd0LAorCQkJCSBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqKmJ1ZnMsCisJCQkJIGlu dCBidWZfY291bnQsCisJCQkJIGRybV9pbnRlbF9ibyAqcGd0X2JvKQoreworCXVpbnQ2NF90IHRv cF90YWJsZTsKKwlpbnQgaTsKKworCXBndC0+Ym8gPSBwZ3RfYm87CisKKwlpZ3RfYXNzZXJ0KHBn dF9iby0+c2l6ZSA+PSBwZ3QtPnNpemUpOworCW1lbXNldChwZ3RfYm8tPnZpcnR1YWwsIDAsIHBn dC0+c2l6ZSk7CisKKwl0b3BfdGFibGUgPSBwZ3RfYWxsb2NfdGFibGUocGd0LCBwZ3QtPmxldmVs cyAtIDEpOworCS8qIFRvcCBsZXZlbCB0YWJsZSBtdXN0IGJlIGF0IG9mZnNldCAwLiAqLworCWln dF9hc3NlcnQodG9wX3RhYmxlID09IDApOworCisJZm9yIChpID0gMDsgaSA8IGJ1Zl9jb3VudDsg aSsrKQorCQlwZ3RfcG9wdWxhdGVfZW50cmllc19mb3JfYnVmKHBndCwgYnVmc1tpXSwgdG9wX3Rh YmxlKTsKK30KKworc3RhdGljIHN0cnVjdCBwZ3RhYmxlICoKK3BndF9jcmVhdGUoY29uc3Qgc3Ry dWN0IHBndGFibGVfbGV2ZWxfZGVzYyAqbGV2ZWxfZGVzY3MsIGludCBsZXZlbHMsCisJICAgY29u c3Qgc3RydWN0IGlndF9idWYgKipidWZzLCBpbnQgYnVmX2NvdW50KQoreworCXN0cnVjdCBwZ3Rh YmxlICpwZ3Q7CisJaW50IGxldmVsOworCisJcGd0ID0gY2FsbG9jKDEsIHNpemVvZigqcGd0KSk7 CisJaWd0X2Fzc2VydChwZ3QpOworCisJcGd0LT5sZXZlbHMgPSBsZXZlbHM7CisKKwlwZ3QtPmxl dmVsX2luZm8gPSBjYWxsb2MobGV2ZWxzLCBzaXplb2YoKnBndC0+bGV2ZWxfaW5mbykpOworCWln dF9hc3NlcnQocGd0LT5sZXZlbF9pbmZvKTsKKworCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IHBn dC0+bGV2ZWxzOyBsZXZlbCsrKSB7CisJCXN0cnVjdCBwZ3RhYmxlX2xldmVsX2luZm8gKmxpID0g JnBndC0+bGV2ZWxfaW5mb1tsZXZlbF07CisKKwkJbGktPmRlc2MgPSAmbGV2ZWxfZGVzY3NbbGV2 ZWxdOworCQlpZiAobGktPmRlc2MtPnRhYmxlX3NpemUgPiBwZ3QtPm1heF9hbGlnbikKKwkJCXBn dC0+bWF4X2FsaWduID0gbGktPmRlc2MtPnRhYmxlX3NpemU7CisJfQorCisJcGd0X2NhbGNfc2l6 ZShwZ3QsIGJ1ZnMsIGJ1Zl9jb3VudCk7CisKKwlyZXR1cm4gcGd0OworfQorCitzdGF0aWMgdm9p ZCBwZ3RfZGVzdHJveShzdHJ1Y3QgcGd0YWJsZSAqcGd0KQoreworCWZyZWUocGd0LT5sZXZlbF9p bmZvKTsKKwlmcmVlKHBndCk7Cit9CisKK2RybV9pbnRlbF9ibyAqCitpbnRlbF9hdXhfcGd0YWJs ZV9jcmVhdGUoZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLAorCQkgICAgICAgY29uc3Qgc3RydWN0 IGlndF9idWYgKipidWZzLCBpbnQgYnVmX2NvdW50KQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qg cGd0YWJsZV9sZXZlbF9kZXNjIGxldmVsX2Rlc2NbXSA9IHsKKwkJeworCQkJLmlkeF9zaGlmdCA9 IDE2LAorCQkJLmlkeF9iaXRzID0gOCwKKwkJCS5lbnRyeV9wdHJfc2hpZnQgPSA4LAorCQkJLnRh YmxlX3NpemUgPSA4ICogMTAyNCwKKwkJfSwKKwkJeworCQkJLmlkeF9zaGlmdCA9IDI0LAorCQkJ LmlkeF9iaXRzID0gMTIsCisJCQkuZW50cnlfcHRyX3NoaWZ0ID0gMTMsCisJCQkudGFibGVfc2l6 ZSA9IDMyICogMTAyNCwKKwkJfSwKKwkJeworCQkJLmlkeF9zaGlmdCA9IDM2LAorCQkJLmlkeF9i aXRzID0gMTIsCisJCQkuZW50cnlfcHRyX3NoaWZ0ID0gMTUsCisJCQkudGFibGVfc2l6ZSA9IDMy ICogMTAyNCwKKwkJfSwKKwl9OworCXN0cnVjdCBwZ3RhYmxlICpwZ3Q7CisJZHJtX2ludGVsX2Jv ICpwZ3RfYm87CisKKwlwZ3QgPSBwZ3RfY3JlYXRlKGxldmVsX2Rlc2MsIEFSUkFZX1NJWkUobGV2 ZWxfZGVzYyksIGJ1ZnMsIGJ1Zl9jb3VudCk7CisKKwlwZ3RfYm8gPSBkcm1faW50ZWxfYm9fYWxs b2NfZm9yX3JlbmRlcihidWZtZ3IsICJhdXggcGd0IiwKKwkJCQkJICAgICAgIHBndC0+c2l6ZSwg cGd0LT5tYXhfYWxpZ24pOworCWlndF9hc3NlcnQocGd0X2JvKTsKKworCWlndF9hc3NlcnQoZHJt X2ludGVsX2JvX21hcChwZ3RfYm8sIHRydWUpID09IDApOworCXBndF9wb3B1bGF0ZV9lbnRyaWVz KHBndCwgYnVmcywgYnVmX2NvdW50LCBwZ3RfYm8pOworCWlndF9hc3NlcnQoZHJtX2ludGVsX2Jv X3VubWFwKHBndF9ibykgPT0gMCk7CisKKwlwZ3RfZGVzdHJveShwZ3QpOworCisJcmV0dXJuIHBn dF9ibzsKK30KZGlmZiAtLWdpdCBhL2xpYi9pbnRlbF9hdXhfcGd0YWJsZS5oIGIvbGliL2ludGVs X2F1eF9wZ3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmMwZjAw MWI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2ludGVsX2F1eF9wZ3RhYmxlLmgKQEAgLTAsMCAr MSwxMiBAQAorI2lmbmRlZiBfX0lOVEVMX0FVWF9QR1RBQkxFX0hfXworI2RlZmluZSBfX0lOVEVM X0FVWF9QR1RBQkxFX0hfXworCisjaW5jbHVkZSAiaW50ZWxfYnVmbWdyLmgiCisKK3N0cnVjdCBp Z3RfYnVmOworCitkcm1faW50ZWxfYm8gKgoraW50ZWxfYXV4X3BndGFibGVfY3JlYXRlKGRybV9p bnRlbF9idWZtZ3IgKmJ1Zm1nciwKKwkJCSBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqKmJ1ZnMsIGlu dCBidWZfY291bnQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9pbnRlbF9yZWcuaCBiL2xp Yi9pbnRlbF9yZWcuaAppbmRleCAwNjk0NDBjYi4uODRmNzQ2YTYgMTAwNjQ0Ci0tLSBhL2xpYi9p bnRlbF9yZWcuaAorKysgYi9saWIvaW50ZWxfcmVnLmgKQEAgLTY3Myw2ICs2NzMsNyBAQCBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICNkZWZp bmUgUklOR19WQUxJRCAgICAgICAgICAweDAwMDAwMDAxCiAjZGVmaW5lIFJJTkdfSU5WQUxJRCAg ICAgICAgMHgwMDAwMDAwMAogCisjZGVmaW5lIEdFTjEyX0dGWF9BVVhfVEFCTEVfQkFTRV9BRERS CTB4NDIwMAogCiAKIC8qIEJpdEJsdCBJbnN0cnVjdGlvbnMKQEAgLTI1NzAsNiArMjU3MSw3IEBA IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgog CiAjZGVmaW5lIE1JX0xPQURfU0NBTl9MSU5FU19JTkNMCQkoMHgxMjw8MjMpCiAjZGVmaW5lIE1J X0xPQURfUkVHSVNURVJfSU1NCQkoKDB4MjIgPDwgMjMpIHwgMSkKKyNkZWZpbmUgTUlfTE9BRF9S RUdJU1RFUl9NRU1fR0VOOAkoKDB4MjkgPDwgMjMpIHwgKDQgLSAyKSkKIAogLyogRmx1c2ggKi8K ICNkZWZpbmUgTUlfRkxVU0gJCQkoMHgwNDw8MjMpCmRpZmYgLS1naXQgYS9saWIvbWVzb24uYnVp bGQgYi9saWIvbWVzb24uYnVpbGQKaW5kZXggZmJjMGM4ZDEuLmVkYWNhMDkxIDEwMDY0NAotLS0g YS9saWIvbWVzb24uYnVpbGQKKysrIGIvbGliL21lc29uLmJ1aWxkCkBAIC00NCw2ICs0NCw3IEBA IGxpYl9zb3VyY2VzID0gWwogCSdyZW5kZXJjb3B5X2dlbjguYycsCiAJJ3JlbmRlcmNvcHlfZ2Vu OS5jJywKIAknc3dfc3luYy5jJywKKwknaW50ZWxfYXV4X3BndGFibGUuYycsCiAJJ2ludGVsX3Jl Z19tYXAuYycsCiAJJ2ludGVsX2lvc2YuYycsCiAJJ2lndF9rbXMuYycsCmRpZmYgLS1naXQgYS9s aWIvcmVuZGVyY29weV9nZW45LmMgYi9saWIvcmVuZGVyY29weV9nZW45LmMKaW5kZXggNjk0ZWIz Y2YuLmUzZjJhZjI1IDEwMDY0NAotLS0gYS9saWIvcmVuZGVyY29weV9nZW45LmMKKysrIGIvbGli L3JlbmRlcmNvcHlfZ2VuOS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8aTkxNV9kcm0u aD4KIAogI2luY2x1ZGUgImRybXRlc3QuaCIKKyNpbmNsdWRlICJpbnRlbF9hdXhfcGd0YWJsZS5o IgogI2luY2x1ZGUgImludGVsX2J1Zm1nci5oIgogI2luY2x1ZGUgImludGVsX2JhdGNoYnVmZmVy LmgiCiAjaW5jbHVkZSAiaW50ZWxfaW8uaCIKQEAgLTk3MiwxOSArOTczLDIyNiBAQCBzdGF0aWMg dm9pZCBnZW44X2VtaXRfcHJpbWl0aXZlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gs IHVpbnQzMl90IG9mZnNldAogCiAjZGVmaW5lIEJBVENIX1NUQVRFX1NQTElUIDIwNDgKIAorc3Rh dGljIHZvaWQKK2F1eF9wZ3RhYmxlX2ZpbmRfbWF4X2ZyZWVfcmFuZ2UoY29uc3Qgc3RydWN0IGln dF9idWYgKipidWZzLCBpbnQgYnVmX2NvdW50LAorCQkJCXVpbnQ2NF90ICpyYW5nZV9zdGFydCwg dWludDY0X3QgKnJhbmdlX3NpemUpCit7CisJLyoKKwkgKiBLZWVwIHRoZSBmaXJzdCBwYWdlIHJl c2VydmVkLCBzbyB3ZSBjYW4gZGlmZmVyZW50aWF0ZSBwaW5uZWQKKwkgKiBvYmplY3RzIGJhc2Vk IG9uIGEgbm9uLU5VTEwgb2Zmc2V0LgorCSAqLworCXVpbnQ2NF90IHN0YXJ0ID0gMHgxMDAwOwor CS8qIEZvciBub3cgYWxsb2Mgb25seSBmcm9tIHRoZSBmaXJzdCA0R0IgYWRkcmVzcyBzcGFjZS4g Ki8KKwljb25zdCB1aW50NjRfdCBlbmQgPSAxVUxMIDw8IDMyOworCXVpbnQ2NF90IG1heF9yYW5n ZV9zdGFydCA9IDA7CisJdWludDY0X3QgbWF4X3JhbmdlX3NpemUgPSAwOworCWludCBpOworCisJ Zm9yIChpID0gMDsgaSA8IGJ1Zl9jb3VudDsgaSsrKSB7CisJCWlmIChidWZzW2ldLT5iby0+b2Zm c2V0NjQgPj0gZW5kKQorCQkJYnJlYWs7CisKKwkJaWYgKGJ1ZnNbaV0tPmJvLT5vZmZzZXQ2NCAt IHN0YXJ0ID4gbWF4X3JhbmdlX3NpemUpIHsKKwkJCW1heF9yYW5nZV9zdGFydCA9IHN0YXJ0Owor CQkJbWF4X3JhbmdlX3NpemUgPSBidWZzW2ldLT5iby0+b2Zmc2V0NjQgLSBzdGFydDsKKwkJfQor CQlzdGFydCA9IGJ1ZnNbaV0tPmJvLT5vZmZzZXQ2NCArIGJ1ZnNbaV0tPmJvLT5zaXplOworCX0K KworCWlmIChzdGFydCA8IGVuZCAmJiBlbmQgLSBzdGFydCA+IG1heF9yYW5nZV9zaXplKSB7CisJ CW1heF9yYW5nZV9zdGFydCA9IHN0YXJ0OworCQltYXhfcmFuZ2Vfc2l6ZSA9IGVuZCAtIHN0YXJ0 OworCX0KKworCSpyYW5nZV9zdGFydCA9IG1heF9yYW5nZV9zdGFydDsKKwkqcmFuZ2Vfc2l6ZSA9 IG1heF9yYW5nZV9zaXplOworfQorCitzdGF0aWMgdWludDY0X3QKK2F1eF9wZ3RhYmxlX2ZpbmRf ZnJlZV9yYW5nZShjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqKmJ1ZnMsIGludCBidWZfY291bnQsCisJ CQkgICAgdWludDMyX3Qgc2l6ZSkKK3sKKwl1aW50NjRfdCByYW5nZV9zdGFydDsKKwl1aW50NjRf dCByYW5nZV9zaXplOworCS8qIEEgY29tcHJlc3NlZCBzdXJmYWNlIG11c3QgYmUgNjRrQiBhbGln bmVkLiAqLworCWNvbnN0IHVpbnQzMl90IGFsaWduID0gMHgxMDAwMDsKKwlpbnQgcGFkOworCisJ YXV4X3BndGFibGVfZmluZF9tYXhfZnJlZV9yYW5nZShidWZzLCBidWZfY291bnQsCisJCQkJCSZy YW5nZV9zdGFydCwgJnJhbmdlX3NpemUpOworCisJcGFkID0gQUxJR04ocmFuZ2Vfc3RhcnQsIGFs aWduKSAtIHJhbmdlX3N0YXJ0OworCXJhbmdlX3N0YXJ0ICs9IHBhZDsKKwlyYW5nZV9zaXplIC09 IHBhZDsKKwlpZ3RfYXNzZXJ0KHJhbmdlX3NpemUgPj0gc2l6ZSk7CisKKwlyZXR1cm4gcmFuZ2Vf c3RhcnQgKyBBTElHTl9ET1dOKHJhbmQoKSAlIChyYW5nZV9zaXplIC0gc2l6ZSksIGFsaWduKTsK K30KKworc3RhdGljIHZvaWQKK2F1eF9wZ3RhYmxlX3Jlc2VydmVfcmFuZ2UoY29uc3Qgc3RydWN0 IGlndF9idWYgKipidWZzLCBpbnQgYnVmX2NvdW50LAorCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1 ZiAqbmV3X2J1ZikKK3sKKwlpbnQgaTsKKworCWlmIChuZXdfYnVmLT5hdXguc3RyaWRlKSB7CisJ CXVpbnQ2NF90IHBpbl9vZmZzZXQgPSBuZXdfYnVmLT5iby0+b2Zmc2V0NjQ7CisKKwkJaWYgKCFw aW5fb2Zmc2V0KQorCQkJcGluX29mZnNldCA9IGF1eF9wZ3RhYmxlX2ZpbmRfZnJlZV9yYW5nZShi dWZzLAorCQkJCQkJCQkgYnVmX2NvdW50LAorCQkJCQkJCQkgbmV3X2J1Zi0+Ym8tPnNpemUpOwor CQlkcm1faW50ZWxfYm9fc2V0X3NvZnRwaW5fb2Zmc2V0KG5ld19idWYtPmJvLCBwaW5fb2Zmc2V0 KTsKKwkJaWd0X2Fzc2VydChuZXdfYnVmLT5iby0+b2Zmc2V0NjQgPT0gcGluX29mZnNldCk7CisJ fQorCisJZm9yIChpID0gMDsgaSA8IGJ1Zl9jb3VudDsgaSsrKQorCQlpZiAoYnVmc1tpXS0+Ym8t Pm9mZnNldDY0ID4gbmV3X2J1Zi0+Ym8tPm9mZnNldDY0KQorCQkJYnJlYWs7CisKKwltZW1tb3Zl KCZidWZzW2kgKyAxXSwgJmJ1ZnNbaV0sIHNpemVvZihidWZzWzBdKSAqIChidWZfY291bnQgLSBp KSk7CisKKwlidWZzW2ldID0gbmV3X2J1ZjsKK30KKworc3RydWN0IGF1eF9wZ3RhYmxlX2luZm8g eworCWludCBidWZfY291bnQ7CisJY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZnNbMl07CisJdWlu dDY0X3QgYnVmX3Bpbl9vZmZzZXRzWzJdOworCWRybV9pbnRlbF9ibyAqcGd0YWJsZV9ibzsKK307 CisKK3N0YXRpYyB2b2lkCitnZW4xMl9hdXhfcGd0YWJsZV9pbml0KHN0cnVjdCBhdXhfcGd0YWJs ZV9pbmZvICppbmZvLAorCQkgICAgICAgZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLAorCQkgICAg ICAgY29uc3Qgc3RydWN0IGlndF9idWYgKnNyY19idWYsCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qg aWd0X2J1ZiAqZHN0X2J1ZikKK3sKKwljb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmc1syXTsKKwlj b25zdCBzdHJ1Y3QgaWd0X2J1ZiAqcmVzZXJ2ZWRfYnVmc1syXTsKKwlpbnQgcmVzZXJ2ZWRfYnVm X2NvdW50OworCWludCBpOworCisJaWYgKCFzcmNfYnVmLT5hdXguc3RyaWRlICYmICFkc3RfYnVm LT5hdXguc3RyaWRlKQorCQlyZXR1cm47CisKKwlidWZzWzBdID0gc3JjX2J1ZjsKKwlidWZzWzFd ID0gZHN0X2J1ZjsKKworCS8qCisJICogSWRlYWxseSB3ZSdkIG5lZWQgYW4gSUdULXdpZGUgR0ZY IGFkZHJlc3Mgc3BhY2UgYWxsb2NhdG9yLCB3aGljaAorCSAqIHdvdWxkIGNvbnNpZGVyIGFsbCBh bGxvY2F0aW9ucyBhbmQgdGh1cyBhdm9pZCBldmljdGlvbnMuIEZvciBub3cgdXNlCisJICogYSBz aW1wbGVyIHNjaGVtZSBoZXJlLCB3aGljaCBvbmx5IGNvbnNpZGVycyB0aGUgYnVmZmVycyBpbnZv bHZlZCBpbgorCSAqIHRoZSBibGl0LCB3aGljaCBzaG91bGQgYXQgbGVhc3QgbWluaW1pemUgdGhl IGNoYW5jZSBmb3IgZXZpY3Rpb25zCisJICogaW4gdGhlIGNhc2Ugb2Ygc3Vic2VxdWVudCBibGl0 czoKKwkgKiAgIDEuIElmIHRoZXkgd2VyZSBhbHJlYWR5IGJvdW5kIChiby0+b2Zmc2V0NjQgIT0g MCksIHVzZSB0aGlzCisJICogICAgICBhZGRyZXNzLgorCSAqICAgMi4gUGljayBhIHJhbmdlIHJh bmRvbWx5IGZyb20gdGhlIDRHQiBhZGRyZXNzIHNwYWNlLCB0aGF0IGlzIG5vdAorCSAqICAgICAg YWxyZWFkeSBvY2N1cGllZCBieSBhIGJvdW5kIG9iamVjdCwgb3IgYW4gb2JqZWN0IHdlIHBpbm5l ZC4KKwkgKi8KKwlyZXNlcnZlZF9idWZfY291bnQgPSAwOworCS8qIEZpcnN0IHJlc2VydmUgc3Bh Y2UgZm9yIGFueSBidWZzIHRoYXQgYXJlIGJvdW5kIGFscmVhZHkuICovCisJZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUoYnVmcyk7IGkrKykKKwkJaWYgKGJ1ZnNbaV0tPmJvLT5vZmZzZXQ2NCkK KwkJCWF1eF9wZ3RhYmxlX3Jlc2VydmVfcmFuZ2UocmVzZXJ2ZWRfYnVmcywKKwkJCQkJCSAgcmVz ZXJ2ZWRfYnVmX2NvdW50KyssCisJCQkJCQkgIGJ1ZnNbaV0pOworCisJLyogTmV4dCwgcmVzZXJ2 ZSBzcGFjZSBmb3IgdW5ib3VuZCBidWZzIHdpdGggYW4gQVVYIHN1cmZhY2UuICovCisJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUoYnVmcyk7IGkrKykKKwkJaWYgKCFidWZzW2ldLT5iby0+b2Zm c2V0NjQgJiYgYnVmc1tpXS0+YXV4LnN0cmlkZSkKKwkJCWF1eF9wZ3RhYmxlX3Jlc2VydmVfcmFu Z2UocmVzZXJ2ZWRfYnVmcywKKwkJCQkJCSAgcmVzZXJ2ZWRfYnVmX2NvdW50KyssCisJCQkJCQkg IGJ1ZnNbaV0pOworCisJLyogQ3JlYXRlIEFVWCBwZ3RhYmxlIGVudHJpZXMgb25seSBmb3IgYnVm cyB3aXRoIGFuIEFVWCBzdXJmYWNlICovCisJaW5mby0+YnVmX2NvdW50ID0gMDsKKwlmb3IgKGkg PSAwOyBpIDwgcmVzZXJ2ZWRfYnVmX2NvdW50OyBpKyspIHsKKwkJaWYgKCFyZXNlcnZlZF9idWZz W2ldLT5hdXguc3RyaWRlKQorCQkJY29udGludWU7CisKKwkJaW5mby0+YnVmc1tpbmZvLT5idWZf Y291bnRdID0gcmVzZXJ2ZWRfYnVmc1tpXTsKKwkJaW5mby0+YnVmX3Bpbl9vZmZzZXRzW2luZm8t PmJ1Zl9jb3VudF0gPQorCQkJcmVzZXJ2ZWRfYnVmc1tpXS0+Ym8tPm9mZnNldDY0OworCQlpbmZv LT5idWZfY291bnQrKzsKKwl9CisKKwlpbmZvLT5wZ3RhYmxlX2JvID0gaW50ZWxfYXV4X3BndGFi bGVfY3JlYXRlKGJ1Zm1nciwKKwkJCQkJCSAgICBpbmZvLT5idWZzLAorCQkJCQkJICAgIGluZm8t PmJ1Zl9jb3VudCk7CisJaWd0X2Fzc2VydChpbmZvLT5wZ3RhYmxlX2JvKTsKK30KKworc3RhdGlj IHZvaWQKK2dlbjEyX2F1eF9wZ3RhYmxlX2NsZWFudXAoc3RydWN0IGF1eF9wZ3RhYmxlX2luZm8g KmluZm8pCit7CisJaW50IGk7CisKKwkvKiBDaGVjayB0aGF0IHRoZSBwaW5uZWQgYnVmcyBrZXB0 IHRoZWlyIG9mZnNldCBhZnRlciB0aGUgZXhlYy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+ YnVmX2NvdW50OyBpKyspCisJCWlndF9hc3NlcnRfZXFfdTY0KGluZm8tPmJ1ZnNbaV0tPmJvLT5v ZmZzZXQ2NCwKKwkJCQkgIGluZm8tPmJ1Zl9waW5fb2Zmc2V0c1tpXSk7CisKKwlkcm1faW50ZWxf Ym9fdW5yZWZlcmVuY2UoaW5mby0+cGd0YWJsZV9ibyk7Cit9CisKK3N0YXRpYyB1aW50MzJfdAor Z2VuMTJfY3JlYXRlX2F1eF9wZ3RhYmxlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsCisJCQkgICAgICAgZHJtX2ludGVsX2JvICphdXhfcGd0YWJsZV9ibykKK3sKKwl1aW50 NjRfdCAqcGd0YWJsZV9wdHI7CisJdWludDMyX3QgcGd0YWJsZV9wdHJfb2Zmc2V0OworCWludCBy ZXQ7CisKKwlpZiAoIWF1eF9wZ3RhYmxlX2JvKQorCQlyZXR1cm4gMDsKKworCXBndGFibGVfcHRy ID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwKKwkJCQkJCSAgICAgIHNp emVvZigqcGd0YWJsZV9wdHIpLAorCQkJCQkJICAgICAgc2l6ZW9mKCpwZ3RhYmxlX3B0cikpOwor CXBndGFibGVfcHRyX29mZnNldCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJh dGNoLAorCQkJCQkJCSAgICAgIHBndGFibGVfcHRyKTsKKworCSpwZ3RhYmxlX3B0ciA9IGF1eF9w Z3RhYmxlX2JvLT5vZmZzZXQ2NDsKKwlyZXQgPSBkcm1faW50ZWxfYm9fZW1pdF9yZWxvYyhiYXRj aC0+Ym8sIHBndGFibGVfcHRyX29mZnNldCwKKwkJCQkgICAgICBhdXhfcGd0YWJsZV9ibywgMCwK KwkJCQkgICAgICAwLCAwKTsKKwlhc3NlcnQocmV0ID09IDApOworCisJcmV0dXJuIHBndGFibGVf cHRyX29mZnNldDsKK30KKworc3RhdGljIHZvaWQKK2dlbjEyX2VtaXRfYXV4X3BndGFibGVfc3Rh dGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qgc3RhdGUpCit7CisJ aWYgKCFzdGF0ZSkKKwkJcmV0dXJuOworCisJT1VUX0JBVENIKE1JX0xPQURfUkVHSVNURVJfTUVN X0dFTjgpOworCU9VVF9CQVRDSChHRU4xMl9HRlhfQVVYX1RBQkxFX0JBU0VfQUREUik7CisJT1VU X1JFTE9DKGJhdGNoLT5ibywgMCwgMCwgc3RhdGUpOworCisJT1VUX0JBVENIKE1JX0xPQURfUkVH SVNURVJfTUVNX0dFTjgpOworCU9VVF9CQVRDSChHRU4xMl9HRlhfQVVYX1RBQkxFX0JBU0VfQURE UiArIDQpOworCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIDAsIDAsIHN0YXRlICsgNCk7Cit9CisKIHN0 YXRpYwogdm9pZCBfZ2VuOV9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCwKIAkJCSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsCiAJCQkgIGNvbnN0IHN0 cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNyY194LAogCQkJICB1bnNpZ25lZCBzcmNfeSwg dW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKIAkJCSAgY29uc3Qgc3RydWN0IGlndF9i dWYgKmRzdCwgdW5zaWduZWQgZHN0X3gsCi0JCQkgIHVuc2lnbmVkIGRzdF95LCBjb25zdCB1aW50 MzJfdCBwc19rZXJuZWxbXVs0XSwKKwkJCSAgdW5zaWduZWQgZHN0X3ksCisJCQkgIGRybV9pbnRl bF9ibyAqYXV4X3BndGFibGVfYm8sCisJCQkgIGNvbnN0IHVpbnQzMl90IHBzX2tlcm5lbFtdWzRd LAogCQkJICB1aW50MzJfdCBwc19rZXJuZWxfc2l6ZSkKIHsKIAl1aW50MzJfdCBwc19zYW1wbGVy X3N0YXRlLCBwc19rZXJuZWxfb2ZmLCBwc19iaW5kaW5nX3RhYmxlOwogCXVpbnQzMl90IHNjaXNz b3Jfc3RhdGU7CiAJdWludDMyX3QgdmVydGV4X2J1ZmZlcjsKIAl1aW50MzJfdCBiYXRjaF9lbmQ7 CisJdWludDMyX3QgYXV4X3BndGFibGVfc3RhdGU7CiAKIAlpZ3RfYXNzZXJ0KHNyYy0+YnBwID09 IGRzdC0+YnBwKTsKIAlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gs IGNvbnRleHQpOwpAQCAtMTAwNyw2ICsxMjE1LDEwIEBAIHZvaWQgX2dlbjlfcmVuZGVyX2NvcHlm dW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJdmlld3BvcnQuY2Nfc3RhdGUg PSBnZW42X2NyZWF0ZV9jY192aWV3cG9ydChiYXRjaCk7CiAJdmlld3BvcnQuc2ZfY2xpcF9zdGF0 ZSA9IGdlbjdfY3JlYXRlX3NmX2NsaXBfdmlld3BvcnQoYmF0Y2gpOwogCXNjaXNzb3Jfc3RhdGUg PSBnZW42X2NyZWF0ZV9zY2lzc29yX3JlY3QoYmF0Y2gpOworCisJYXV4X3BndGFibGVfc3RhdGUg PSBnZW4xMl9jcmVhdGVfYXV4X3BndGFibGVfc3RhdGUoYmF0Y2gsCisJCQkJCQkJICAgYXV4X3Bn dGFibGVfYm8pOworCiAJLyogVE9ETzogdGhlcmVlIGlzIG90aGVyIHN0YXRlIHdoaWNoIGlzbid0 IHNldHVwICovCiAKIAlhc3NlcnQoYmF0Y2gtPnB0ciA8ICZiYXRjaC0+YnVmZmVyWzQwOTVdKTsK QEAgLTEwMTgsNiArMTIzMCw4IEBAIHZvaWQgX2dlbjlfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJT1VUX0JBVENIKEc0WF9QSVBFTElORV9TRUxFQ1Qg fCBQSVBFTElORV9TRUxFQ1RfM0QgfAogCQkJCUdFTjlfUElQRUxJTkVfU0VMRUNUSU9OX01BU0sp OwogCisJZ2VuMTJfZW1pdF9hdXhfcGd0YWJsZV9zdGF0ZShiYXRjaCwgYXV4X3BndGFibGVfc3Rh dGUpOworCiAJZ2VuOF9lbWl0X3NpcChiYXRjaCk7CiAKIAlnZW43X2VtaXRfcHVzaF9jb25zdGFu dHMoYmF0Y2gpOwpAQCAtMTA5Miw4ICsxMzA2LDggQEAgdm9pZCBnZW45X3JlbmRlcl9jb3B5ZnVu YyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogCiB7CiAJX2dlbjlfcmVuZGVyX2Nv cHlmdW5jKGJhdGNoLCBjb250ZXh0LCBzcmMsIHNyY194LCBzcmNfeSwKLQkJCSAgd2lkdGgsIGhl aWdodCwgZHN0LCBkc3RfeCwgZHN0X3ksIHBzX2tlcm5lbF9nZW45LAotCQkJICBzaXplb2YocHNf a2VybmVsX2dlbjkpKTsKKwkJCSAgd2lkdGgsIGhlaWdodCwgZHN0LCBkc3RfeCwgZHN0X3ksIE5V TEwsCisJCQkgIHBzX2tlcm5lbF9nZW45LCBzaXplb2YocHNfa2VybmVsX2dlbjkpKTsKIH0KIAog dm9pZCBnZW4xMV9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCwKQEAgLTExMDQsOCArMTMxOCw4IEBAIHZvaWQgZ2VuMTFfcmVuZGVyX2NvcHlmdW5jKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAKIHsKIAlfZ2VuOV9yZW5kZXJfY29weWZ1bmMo YmF0Y2gsIGNvbnRleHQsIHNyYywgc3JjX3gsIHNyY195LAotCQkJICB3aWR0aCwgaGVpZ2h0LCBk c3QsIGRzdF94LCBkc3RfeSwgcHNfa2VybmVsX2dlbjExLAotCQkJICBzaXplb2YocHNfa2VybmVs X2dlbjExKSk7CisJCQkgIHdpZHRoLCBoZWlnaHQsIGRzdCwgZHN0X3gsIGRzdF95LCBOVUxMLAor CQkJICBwc19rZXJuZWxfZ2VuMTEsIHNpemVvZihwc19rZXJuZWxfZ2VuMTEpKTsKIH0KIAogdm9p ZCBnZW4xMl9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwK QEAgLTExMTUsNyArMTMyOSwxNSBAQCB2b2lkIGdlbjEyX3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogCQkJICAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRz dCwgdW5zaWduZWQgZHN0X3gsIHVuc2lnbmVkIGRzdF95KQogCiB7CisJc3RydWN0IGF1eF9wZ3Rh YmxlX2luZm8gcGd0YWJsZV9pbmZvID0geyB9OworCisJZ2VuMTJfYXV4X3BndGFibGVfaW5pdCgm cGd0YWJsZV9pbmZvLCBiYXRjaC0+YnVmbWdyLCBzcmMsIGRzdCk7CisKIAlfZ2VuOV9yZW5kZXJf Y29weWZ1bmMoYmF0Y2gsIGNvbnRleHQsIHNyYywgc3JjX3gsIHNyY195LAotCQkJICB3aWR0aCwg aGVpZ2h0LCBkc3QsIGRzdF94LCBkc3RfeSwgZ2VuMTJfcmVuZGVyX2NvcHksCisJCQkgIHdpZHRo LCBoZWlnaHQsIGRzdCwgZHN0X3gsIGRzdF95LAorCQkJICBwZ3RhYmxlX2luZm8ucGd0YWJsZV9i bywKKwkJCSAgZ2VuMTJfcmVuZGVyX2NvcHksCiAJCQkgIHNpemVvZihnZW4xMl9yZW5kZXJfY29w eSkpOworCisJZ2VuMTJfYXV4X3BndGFibGVfY2xlYW51cCgmcGd0YWJsZV9pbmZvKTsKIH0KZGlm ZiAtLWdpdCBhL2xpYi9zdHVicy9kcm0vaW50ZWxfYnVmbWdyLmMgYi9saWIvc3R1YnMvZHJtL2lu dGVsX2J1Zm1nci5jCmluZGV4IGY4NzQ1MmFjLi5jYmFiMjQ4NCAxMDA2NDQKLS0tIGEvbGliL3N0 dWJzL2RybS9pbnRlbF9idWZtZ3IuYworKysgYi9saWIvc3R1YnMvZHJtL2ludGVsX2J1Zm1nci5j CkBAIC0yMzMsNiArMjMzLDEyIEBAIGludCBkcm1faW50ZWxfYm9fc2V0X3RpbGluZyhkcm1faW50 ZWxfYm8gKmJvLCB1aW50MzJfdCAqIHRpbGluZ19tb2RlLAogCXJldHVybiAtRU5PREVWOwogfQog CitpbnQgZHJtX2ludGVsX2JvX3NldF9zb2Z0cGluX29mZnNldChkcm1faW50ZWxfYm8gKmJvLCB1 aW50NjRfdCBvZmZzZXQpCit7CisJaWd0X3JlcXVpcmVfZihmYWxzZSwgbWlzc2luZ19zdXBwb3J0 X3N0cik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKIGludCBkcm1faW50ZWxfYm9fZGlzYWJsZV9y ZXVzZShkcm1faW50ZWxfYm8gKmJvKQogewogCWlndF9yZXF1aXJlX2YoZmFsc2UsIG1pc3Npbmdf c3VwcG9ydF9zdHIpOwotLSAKMi4xNy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2lndC1kZXY=