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 5A2B16E517 for ; Thu, 7 Nov 2019 18:38:01 +0000 (UTC) From: Imre Deak Date: Thu, 7 Nov 2019 20:36:18 +0200 Message-Id: <20191107183618.16032-1-imre.deak@intel.com> In-Reply-To: <20191106065308.25833-1-imre.deak@intel.com> References: <20191106065308.25833-1-imre.deak@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH v5 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 LSBNYWtlIHN1cmUgYWxsIG9iamVjdHMgd2l0aCBhbiBBVVggc3VyZmFjZSBhcmUgcGlubmVkLgp2 NDoKLSBzL01JX0xPQURfUkVHSVNURVJfTUVNL01JX0xPQURfUkVHSVNURVJfTUVNX0dFTjgvIChD aHJpcykKLSBGaXggdXNpbmcgYnVmLT5iby0+c2l6ZSBpbnN0ZWFkIG9mIGJ1Zi0+c2l6ZSB3aGVu IGZpbmRpbmcgYSBmcmVlCiAgcmFuZ2UgZm9yIGEgcGlubmVkIG9iai4KLSBGaXggYWxpZ25tZW50 IG9mIHRoZSByZXNlcnZlZCBzcGFjZSBzdGFydCBmb3IgYSBwaW5uZWQgb2JqLgotIE1vdmUgZ2Vu MTJfZW1pdF9hdXhfcGd0YWJsZV9zdGF0ZSgpIHRvIGl0cyBsb2dpY2FsIHNwb3QuCnY1OgotIEZp eCByZWxvYyBlbWl0IGNhbGwsIHBhc3NpbmcgYSByZWxhdGl2ZSBpbnN0ZWFkIG9mIGFic29sdXRl IHRhcmdldAogIG9mZnNldC4gKENocmlzKQotIEZpeCBvZmYtYnktb25lIGVycm9yIHdoZW4gZ2Vu ZXJhdGluZyBhIHJhbmRvbSBvZmZzZXQgZm9yIHBpbm5lZCBvYmpzLgoKQ2M6IE1pa2EgS2Fob2xh IDxtaWthLmthaG9sYUBpbnRlbC5jb20+CkNjOiBCcmlhbiBXZWx0eSA8YnJpYW4ud2VsdHlAaW50 ZWwuY29tPgpDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNjOiBW aWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgpTaWduZWQtb2Zm LWJ5OiBJbXJlIERlYWsgPGltcmUuZGVha0BpbnRlbC5jb20+ClJldmlld2VkLWJ5OiBDaHJpcyBX aWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KLS0tCiBsaWIvTWFrZWZpbGUuc291cmNl cyAgICAgICAgIHwgICAxICsKIGxpYi9kcm10ZXN0LmggICAgICAgICAgICAgICAgfCAgIDkgKwog bGliL2ludGVsX2F1eF9wZ3RhYmxlLmMgICAgICB8IDM3MiArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogbGliL2ludGVsX2F1eF9wZ3RhYmxlLmggICAgICB8ICAxMiArKwogbGli L2ludGVsX3JlZy5oICAgICAgICAgICAgICB8ICAgMiArCiBsaWIvbWVzb24uYnVpbGQgICAgICAg ICAgICAgIHwgICAxICsKIGxpYi9yZW5kZXJjb3B5X2dlbjkuYyAgICAgICAgfCAyMzUgKysrKysr KysrKysrKysrKysrKysrLQogbGliL3N0dWJzL2RybS9pbnRlbF9idWZtZ3IuYyB8ICAgNiArCiA4 IGZpbGVzIGNoYW5nZWQsIDYzMiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGxpYi9pbnRlbF9hdXhfcGd0YWJsZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliL2ludGVsX2F1eF9wZ3RhYmxlLmgKCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuc291cmNl cyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IDM0ZTBjMDEyLi5lNTQ0YzI3YiAxMDA2NDQK LS0tIGEvbGliL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvbGliL01ha2VmaWxlLnNvdXJjZXMKQEAg LTEwMCw2ICsxMDAsNyBAQCBsaWJfc291cmNlX2xpc3QgPQkgCVwKIAlzdXJmYWNlZm9ybWF0LmgJ CVwKIAlzd19zeW5jLmMJCVwKIAlzd19zeW5jLmgJCVwKKwlpbnRlbF9hdXhfcGd0YWJsZS5jCVwK IAlpbnRlbF9yZWdfbWFwLmMJCVwKIAlpbnRlbF9pb3NmLmMJCVwKIAlpZ3Rfa21zLmMJCVwKZGlm ZiAtLWdpdCBhL2xpYi9kcm10ZXN0LmggYi9saWIvZHJtdGVzdC5oCmluZGV4IDYxNGY1N2U2Li4w NWViMDg2MCAxMDA2NDQKLS0tIGEvbGliL2RybXRlc3QuaAorKysgYi9saWIvZHJtdGVzdC5oCkBA IC03Nyw2ICs3NywxNSBAQCB2b2lkIF9fc2V0X2ZvcmNlZF9kcml2ZXIoY29uc3QgY2hhciAqbmFt ZSk7CiAgKi8KICNkZWZpbmUgQUxJR04odiwgYSkgKCgodikgKyAoYSktMSkgJiB+KChhKS0xKSkK IAorLyoqCisgKiBBTElHTl9ET1dOOgorICogQHY6IHZhbHVlIHRvIGJlIGFsaWduZWQgZG93bgor ICogQGE6IGFsaWdubWVudCB1bml0IGluIGJ5dGVzCisgKgorICogTWFjcm8gdG8gYWxpZ24gZG93 biBhIHZhbHVlIEB2IHRvIGEgc3BlY2lmaWVkIHVuaXQgQGEuCisgKi8KKyNkZWZpbmUgQUxJR05f RE9XTih4LCBhKQlBTElHTigoeCkgLSAoKGEpIC0gMSksIChhKSkKKwogaW50IGRybV9vcGVuX2Ry aXZlcihpbnQgY2hpcHNldCk7CiBpbnQgZHJtX29wZW5fZHJpdmVyX21hc3RlcihpbnQgY2hpcHNl dCk7CiBpbnQgZHJtX29wZW5fZHJpdmVyX3JlbmRlcihpbnQgY2hpcHNldCk7CmRpZmYgLS1naXQg YS9saWIvaW50ZWxfYXV4X3BndGFibGUuYyBiL2xpYi9pbnRlbF9hdXhfcGd0YWJsZS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5lYTkwOWVjMAotLS0gL2Rldi9udWxsCisr KyBiL2xpYi9pbnRlbF9hdXhfcGd0YWJsZS5jCkBAIC0wLDAgKzEsMzcyIEBACisjaW5jbHVkZSA8 c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSAiZHJtdGVzdC5oIgor I2luY2x1ZGUgImludGVsX2F1eF9wZ3RhYmxlLmgiCisjaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZm ZXIuaCIKKyNpbmNsdWRlICJpbnRlbF9idWZtZ3IuaCIKKyNpbmNsdWRlICJpb2N0bF93cmFwcGVy cy5oIgorCisjaW5jbHVkZSAiaTkxNS9nZW1fbW1hbi5oIgorCisjZGVmaW5lIEJJVFNfUEVSX0xP TkcJCShzaXplb2YobG9uZykgKiA4KQorI2RlZmluZSBCSVRNQVNLKGUsIHMpCQkoKH4wVUwgPDwg KHMpKSAmIFwKKwkJCQkgKH4wVUwgPj4gKEJJVFNfUEVSX0xPTkcgLSAxIC0gKGUpKSkpCisKKy8q IFRoZSB1bml0IHNpemUgdG8gd2hpY2ggdGhlIEFVWCBDQ1Mgc3VyZmFjZSBpcyBhbGlnbmVkIHRv LiAqLworI2RlZmluZSBBVVhfQ0NTX1VOSVRfU0laRQk2NAorLyoKKyAqIFRoZSBibG9jayBzaXpl IG9uIHRoZSBBVVggQ0NTIHN1cmZhY2Ugd2hpY2ggaXMgbWFwcGVkIGJ5IG9uZSBMMSBBVVgKKyAq IHBhZ2V0YWJsZSBlbnRyeS4KKyAqLworI2RlZmluZSBBVVhfQ0NTX0JMT0NLX1NJWkUJKDQgKiBB VVhfQ0NTX1VOSVRfU0laRSkKKy8qCisgKiBUaGUgYmxvY2sgc2l6ZSBvbiB0aGUgbWFpbiBzdXJm YWNlIG1hcHBlZCBieSBvbmUgQVVYIENDUyBibG9jazoKKyAqICAgMjU2IGJ5dGVzIHBlciBDQ1Mg YmxvY2sgKgorICogICA4ICAgYml0cyBwZXIgYnl0ZSAvCisgKiAgIDIgICBiaXRzIHBlciBtYWlu IHN1cmZhY2UgQ0wgKgorICogICA2NCAgYnl0ZXMgcGVyIG1haW4gc3VyZmFjZSBDTAorICovCisj ZGVmaW5lIE1BSU5fU1VSRkFDRV9CTE9DS19TSVpFCShBVVhfQ0NTX0JMT0NLX1NJWkUgKiA4IC8g MiAqIDY0KQorCisjZGVmaW5lIEdGWF9BRERSRVNTX0JJVFMJNDgKKworI2RlZmluZSBtYXgoYSwg YikJCSgoYSkgPiAoYikgPyAoYSkgOiAoYikpCisKK3N0cnVjdCBwZ3RhYmxlX2xldmVsX2Rlc2Mg eworCWludCBpZHhfc2hpZnQ7CisJaW50IGlkeF9iaXRzOworCWludCBlbnRyeV9wdHJfc2hpZnQ7 CisJaW50IHRhYmxlX3NpemU7Cit9OworCitzdHJ1Y3QgcGd0YWJsZV9sZXZlbF9pbmZvIHsKKwlj b25zdCBzdHJ1Y3QgcGd0YWJsZV9sZXZlbF9kZXNjICpkZXNjOworCWludCB0YWJsZV9jb3VudDsK KwlpbnQgYWxsb2NfYmFzZTsKKwlpbnQgYWxsb2NfcHRyOworfTsKKworc3RydWN0IHBndGFibGUg eworCWludCBsZXZlbHM7CisJc3RydWN0IHBndGFibGVfbGV2ZWxfaW5mbyAqbGV2ZWxfaW5mbzsK KwlpbnQgc2l6ZTsKKwlpbnQgbWF4X2FsaWduOworCWRybV9pbnRlbF9ibyAqYm87Cit9OworCitz dGF0aWMgaW50CitwZ3RfdGFibGVfY291bnQoaW50IGFkZHJlc3NfYml0cywgY29uc3Qgc3RydWN0 IGlndF9idWYgKipidWZzLCBpbnQgYnVmX2NvdW50KQoreworCXVpbnQ2NF90IGVuZDsKKwlpbnQg Y291bnQ7CisJaW50IGk7CisKKwljb3VudCA9IDA7CisJZW5kID0gMDsKKwlmb3IgKGkgPSAwOyBp IDwgYnVmX2NvdW50OyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZiA9IGJ1ZnNb aV07CisJCXVpbnQ2NF90IHN0YXJ0OworCisJCS8qIFdlIHJlcXVpcmUgYnVmcyB0byBiZSBzb3J0 ZWQuICovCisJCWlndF9hc3NlcnQoaSA9PSAwIHx8CisJCQkgICBidWYtPmJvLT5vZmZzZXQ2NCA+ PSBidWZzW2kgLSAxXS0+Ym8tPm9mZnNldDY0ICsKKwkJCQkJCWJ1ZnNbaSAtIDFdLT5iby0+c2l6 ZSk7CisKKwkJc3RhcnQgPSBBTElHTl9ET1dOKGJ1Zi0+Ym8tPm9mZnNldDY0LCAxVUwgPDwgYWRk cmVzc19iaXRzKTsKKwkJLyogQXZvaWQgZG91YmxlIGNvdW50aW5nIGZvciBvdmVybGFwcGluZyBh bGlnbmVkIGJ1ZnMuICovCisJCXN0YXJ0ID0gbWF4KHN0YXJ0LCBlbmQpOworCisJCWVuZCA9IEFM SUdOKGJ1Zi0+Ym8tPm9mZnNldDY0ICsgYnVmLT5zaXplLCAxVUwgPDwgYWRkcmVzc19iaXRzKTsK KwkJaWd0X2Fzc2VydChlbmQgPj0gc3RhcnQpOworCisJCWNvdW50ICs9IChlbmQgLSBzdGFydCkg Pj4gYWRkcmVzc19iaXRzOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHZvaWQK K3BndF9jYWxjX3NpemUoc3RydWN0IHBndGFibGUgKnBndCwgY29uc3Qgc3RydWN0IGlndF9idWYg KipidWZzLCBpbnQgYnVmX2NvdW50KQoreworCWludCBsZXZlbDsKKworCXBndC0+c2l6ZSA9IDA7 CisKKwlmb3IgKGxldmVsID0gcGd0LT5sZXZlbHMgLSAxOyBsZXZlbCA+PSAwOyBsZXZlbC0tKSB7 CisJCXN0cnVjdCBwZ3RhYmxlX2xldmVsX2luZm8gKmxpID0gJnBndC0+bGV2ZWxfaW5mb1tsZXZl bF07CisKKwkJbGktPmFsbG9jX2Jhc2UgPSBBTElHTihwZ3QtPnNpemUsIGxpLT5kZXNjLT50YWJs ZV9zaXplKTsKKwkJbGktPmFsbG9jX3B0ciA9IGxpLT5hbGxvY19iYXNlOworCisJCWxpLT50YWJs ZV9jb3VudCA9IHBndF90YWJsZV9jb3VudChsaS0+ZGVzYy0+aWR4X3NoaWZ0ICsKKwkJCQkJCSAg bGktPmRlc2MtPmlkeF9iaXRzLAorCQkJCQkJICBidWZzLCBidWZfY291bnQpOworCisJCXBndC0+ c2l6ZSA9IGxpLT5hbGxvY19iYXNlICsKKwkJCSAgICBsaS0+dGFibGVfY291bnQgKiBsaS0+ZGVz Yy0+dGFibGVfc2l6ZTsKKwl9Cit9CisKK3N0YXRpYyB1aW50NjRfdCBwZ3RfYWxsb2NfdGFibGUo c3RydWN0IHBndGFibGUgKnBndCwgaW50IGxldmVsKQoreworCXN0cnVjdCBwZ3RhYmxlX2xldmVs X2luZm8gKmxpID0gJnBndC0+bGV2ZWxfaW5mb1tsZXZlbF07CisJdWludDY0X3QgdGFibGU7CisK Kwl0YWJsZSA9IGxpLT5hbGxvY19wdHI7CisJbGktPmFsbG9jX3B0ciArPSBsaS0+ZGVzYy0+dGFi bGVfc2l6ZTsKKworCWlndF9hc3NlcnQobGktPmFsbG9jX3B0ciA8PQorCQkgICBsaS0+YWxsb2Nf YmFzZSArIGxpLT50YWJsZV9jb3VudCAqIGxpLT5kZXNjLT50YWJsZV9zaXplKTsKKworCXJldHVy biB0YWJsZTsKK30KKworc3RhdGljIGludCBwZ3RfZW50cnlfaW5kZXgoc3RydWN0IHBndGFibGUg KnBndCwgaW50IGxldmVsLCB1aW50NjRfdCBhZGRyZXNzKQoreworCWNvbnN0IHN0cnVjdCBwZ3Rh YmxlX2xldmVsX2Rlc2MgKmxkID0gcGd0LT5sZXZlbF9pbmZvW2xldmVsXS5kZXNjOworCXVpbnQ2 NF90IG1hc2sgPSBCSVRNQVNLKGxkLT5pZHhfc2hpZnQgKyBsZC0+aWR4X2JpdHMgLSAxLAorCQkJ CWxkLT5pZHhfc2hpZnQpOworCisJcmV0dXJuIChhZGRyZXNzICYgbWFzaykgPj4gbGQtPmlkeF9z aGlmdDsKK30KKworc3RhdGljIHVpbnQ2NF90IHB0cl9tYXNrKHN0cnVjdCBwZ3RhYmxlICpwZ3Qs IGludCBsZXZlbCkKK3sKKwljb25zdCBzdHJ1Y3QgcGd0YWJsZV9sZXZlbF9kZXNjICpsZCA9IHBn dC0+bGV2ZWxfaW5mb1tsZXZlbF0uZGVzYzsKKworCXJldHVybiBCSVRNQVNLKEdGWF9BRERSRVNT X0JJVFMgLSAxLCBsZC0+ZW50cnlfcHRyX3NoaWZ0KTsKK30KKworc3RhdGljIHVpbnQ2NF90Citw Z3RfZ2V0X2NoaWxkX3RhYmxlKHN0cnVjdCBwZ3RhYmxlICpwZ3QsIHVpbnQ2NF90IHBhcmVudF90 YWJsZSwKKwkJICAgIGludCBsZXZlbCwgdWludDY0X3QgYWRkcmVzcywgdWludDY0X3QgZmxhZ3Mp Cit7CisJdWludDY0X3QgKnBhcmVudF90YWJsZV9wdHI7CisJaW50IGNoaWxkX2VudHJ5X2lkeDsK Kwl1aW50NjRfdCAqY2hpbGRfZW50cnlfcHRyOworCXVpbnQ2NF90IGNoaWxkX3RhYmxlOworCisJ cGFyZW50X3RhYmxlX3B0ciA9IHBndC0+Ym8tPnZpcnR1YWwgKyBwYXJlbnRfdGFibGU7CisJY2hp bGRfZW50cnlfaWR4ID0gcGd0X2VudHJ5X2luZGV4KHBndCwgbGV2ZWwsIGFkZHJlc3MpOworCWNo aWxkX2VudHJ5X3B0ciA9ICZwYXJlbnRfdGFibGVfcHRyW2NoaWxkX2VudHJ5X2lkeF07CisKKwlp ZiAoISpjaGlsZF9lbnRyeV9wdHIpIHsKKwkJdWludDY0X3QgcHRlOworCisJCWNoaWxkX3RhYmxl ID0gcGd0X2FsbG9jX3RhYmxlKHBndCwgbGV2ZWwgLSAxKTsKKwkJaWd0X2Fzc2VydCghKChjaGls ZF90YWJsZSArIHBndC0+Ym8tPm9mZnNldDY0KSAmCisJCQkgICAgIH5wdHJfbWFzayhwZ3QsIGxl dmVsKSkpOworCisJCXB0ZSA9IGNoaWxkX3RhYmxlIHwgZmxhZ3M7CisJCSpjaGlsZF9lbnRyeV9w dHIgPSBwZ3QtPmJvLT5vZmZzZXQ2NCArIHB0ZTsKKworCQlpZ3RfYXNzZXJ0KHB0ZSA8PSBJTlQz Ml9NQVgpOworCQlkcm1faW50ZWxfYm9fZW1pdF9yZWxvYyhwZ3QtPmJvLAorCQkJCQlwYXJlbnRf dGFibGUgKworCQkJCQkJY2hpbGRfZW50cnlfaWR4ICogc2l6ZW9mKHVpbnQ2NF90KSwKKwkJCQkJ cGd0LT5ibywgcHRlLCAwLCAwKTsKKwl9IGVsc2UgeworCQljaGlsZF90YWJsZSA9ICgqY2hpbGRf ZW50cnlfcHRyICYgcHRyX21hc2socGd0LCBsZXZlbCkpIC0KKwkJCSAgICAgIHBndC0+Ym8tPm9m ZnNldDY0OworCX0KKworCXJldHVybiBjaGlsZF90YWJsZTsKK30KKworc3RhdGljIHZvaWQKK3Bn dF9zZXRfbDFfZW50cnkoc3RydWN0IHBndGFibGUgKnBndCwgdWludDY0X3QgbDFfdGFibGUsCisJ CSB1aW50NjRfdCBhZGRyZXNzLCB1aW50NjRfdCBwdHIsIHVpbnQ2NF90IGZsYWdzKQoreworCXVp bnQ2NF90ICpsMV90YWJsZV9wdHI7CisJdWludDY0X3QgKmwxX2VudHJ5X3B0cjsKKworCWwxX3Rh YmxlX3B0ciA9IHBndC0+Ym8tPnZpcnR1YWwgKyBsMV90YWJsZTsKKwlsMV9lbnRyeV9wdHIgPSAm bDFfdGFibGVfcHRyW3BndF9lbnRyeV9pbmRleChwZ3QsIDAsIGFkZHJlc3MpXTsKKworCWlndF9h c3NlcnQoIShwdHIgJiB+cHRyX21hc2socGd0LCAwKSkpOworCSpsMV9lbnRyeV9wdHIgPSBwdHIg fCBmbGFnczsKK30KKworc3RhdGljIHVpbnQ2NF90IHBndF9nZXRfbDFfZmxhZ3MoY29uc3Qgc3Ry dWN0IGlndF9idWYgKmJ1ZikKK3sKKwkvKgorCSAqIFRoZSBvZmZzZXQgb2YgLnRpbGVfbW9kZSBp c24ndCBzcGVjaWZlZCBieSBic3BlYywgaXQncyB3aGF0IE1lc2EKKwkgKiB1c2VzLgorCSAqLwor CXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQ2NF90CXZhbGlkOjE7CisJCQl1aW50NjRfdAlj b21wcmVzc2lvbl9tb2Q6MjsKKwkJCXVpbnQ2NF90CWxvc3N5X2NvbXByZXNzaW9uOjE7CisJCQl1 aW50NjRfdAlwYWQ6NDsKKwkJCXVpbnQ2NF90CWFkZHI6NDA7CisJCQl1aW50NjRfdAlwYWQyOjQ7 CisJCQl1aW50NjRfdAl0aWxlX21vZGU6MjsKKwkJCXVpbnQ2NF90CWRlcHRoOjM7CisJCQl1aW50 NjRfdAl5Y3I6MTsKKwkJCXVpbnQ2NF90CWZvcm1hdDo2OworCQl9IGU7CisJCXVpbnQ2NF90IGw7 CisJfSBlbnRyeSA9IHsKKwkJLmUgPSB7CisJCQkudmFsaWQgPSAxLAorCQkJLnRpbGVfbW9kZSA9 IGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1kgPyAxIDogMCwKKwkJCS5kZXB0aCA9IDUsCQkv KiAzMmJwcCAqLworCQkJLmZvcm1hdCA9IDB4QSwJCS8qIEI4RzhSOEE4X1VOT1JNICovCisJCX0K Kwl9OworCisJLyoKKwkgKiBUT0RPOiBDbGFyaWZ5IGlmIFlmIGlzIHN1cHBvcnRlZCBhbmQgaWYg d2UgbmVlZCB0byBkaWZmZXJlbnRpYXRlCisJICogICAgICAgWXMgYW5kIFlmLgorCSAqICAgICAg IEFkZCBzdXBwb3J0IGZvciBtb3JlIGZvcm1hdHMuCisJICovCisJaWd0X2Fzc2VydChidWYtPnRp bGluZyA9PSBJOTE1X1RJTElOR19ZIHx8CisJCSAgIGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5H X1lmIHx8CisJCSAgIGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1lzKTsKKworCWlndF9hc3Nl cnQoYnVmLT5icHAgPT0gMzIpOworCisJcmV0dXJuIGVudHJ5Lmw7Cit9CisKK3N0YXRpYyB1aW50 NjRfdCBwZ3RfZ2V0X2x4X2ZsYWdzKHZvaWQpCit7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJ dWludDY0X3QgICAgICAgIHZhbGlkOjE7CisJCQl1aW50NjRfdCAgICAgICAgYWRkcjo0NzsKKwkJ CXVpbnQ2NF90ICAgICAgICBwYWQ6MTY7CisJCX0gZTsKKwkJdWludDY0X3QgbDsKKwl9IGVudHJ5 ID0geworCQkuZSA9IHsKKwkJCS52YWxpZCA9IDEsCisJCX0KKwl9OworCisJcmV0dXJuIGVudHJ5 Lmw7Cit9CisKK3N0YXRpYyB2b2lkCitwZ3RfcG9wdWxhdGVfZW50cmllc19mb3JfYnVmKHN0cnVj dCBwZ3RhYmxlICpwZ3QsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZiwKKwkJ CSAgICAgICB1aW50NjRfdCB0b3BfdGFibGUpCit7CisJdWludDY0X3Qgc3VyZmFjZV9hZGRyID0g YnVmLT5iby0+b2Zmc2V0NjQ7CisJdWludDY0X3Qgc3VyZmFjZV9lbmQgPSBzdXJmYWNlX2FkZHIg KyBidWYtPnNpemU7CisJdWludDY0X3QgYXV4X2FkZHIgPSBidWYtPmJvLT5vZmZzZXQ2NCArIGJ1 Zi0+YXV4Lm9mZnNldDsKKwl1aW50NjRfdCBsMV9mbGFncyA9IHBndF9nZXRfbDFfZmxhZ3MoYnVm KTsKKwl1aW50NjRfdCBseF9mbGFncyA9IHBndF9nZXRfbHhfZmxhZ3MoKTsKKworCWZvciAoOyBz dXJmYWNlX2FkZHIgPCBzdXJmYWNlX2VuZDsKKwkgICAgIHN1cmZhY2VfYWRkciArPSBNQUlOX1NV UkZBQ0VfQkxPQ0tfU0laRSwKKwkgICAgIGF1eF9hZGRyICs9IEFVWF9DQ1NfQkxPQ0tfU0laRSkg eworCQl1aW50NjRfdCB0YWJsZSA9IHRvcF90YWJsZTsKKwkJaW50IGxldmVsOworCisJCWZvciAo bGV2ZWwgPSBwZ3QtPmxldmVscyAtIDE7IGxldmVsID49IDE7IGxldmVsLS0pCisJCQl0YWJsZSA9 IHBndF9nZXRfY2hpbGRfdGFibGUocGd0LCB0YWJsZSwgbGV2ZWwsCisJCQkJCQkgICAgc3VyZmFj ZV9hZGRyLCBseF9mbGFncyk7CisKKwkJcGd0X3NldF9sMV9lbnRyeShwZ3QsIHRhYmxlLCBzdXJm YWNlX2FkZHIsIGF1eF9hZGRyLCBsMV9mbGFncyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwZ3Rf cG9wdWxhdGVfZW50cmllcyhzdHJ1Y3QgcGd0YWJsZSAqcGd0LAorCQkJCSBjb25zdCBzdHJ1Y3Qg aWd0X2J1ZiAqKmJ1ZnMsCisJCQkJIGludCBidWZfY291bnQsCisJCQkJIGRybV9pbnRlbF9ibyAq cGd0X2JvKQoreworCXVpbnQ2NF90IHRvcF90YWJsZTsKKwlpbnQgaTsKKworCXBndC0+Ym8gPSBw Z3RfYm87CisKKwlpZ3RfYXNzZXJ0KHBndF9iby0+c2l6ZSA+PSBwZ3QtPnNpemUpOworCW1lbXNl dChwZ3RfYm8tPnZpcnR1YWwsIDAsIHBndC0+c2l6ZSk7CisKKwl0b3BfdGFibGUgPSBwZ3RfYWxs b2NfdGFibGUocGd0LCBwZ3QtPmxldmVscyAtIDEpOworCS8qIFRvcCBsZXZlbCB0YWJsZSBtdXN0 IGJlIGF0IG9mZnNldCAwLiAqLworCWlndF9hc3NlcnQodG9wX3RhYmxlID09IDApOworCisJZm9y IChpID0gMDsgaSA8IGJ1Zl9jb3VudDsgaSsrKQorCQlwZ3RfcG9wdWxhdGVfZW50cmllc19mb3Jf YnVmKHBndCwgYnVmc1tpXSwgdG9wX3RhYmxlKTsKK30KKworc3RhdGljIHN0cnVjdCBwZ3RhYmxl ICoKK3BndF9jcmVhdGUoY29uc3Qgc3RydWN0IHBndGFibGVfbGV2ZWxfZGVzYyAqbGV2ZWxfZGVz Y3MsIGludCBsZXZlbHMsCisJICAgY29uc3Qgc3RydWN0IGlndF9idWYgKipidWZzLCBpbnQgYnVm X2NvdW50KQoreworCXN0cnVjdCBwZ3RhYmxlICpwZ3Q7CisJaW50IGxldmVsOworCisJcGd0ID0g Y2FsbG9jKDEsIHNpemVvZigqcGd0KSk7CisJaWd0X2Fzc2VydChwZ3QpOworCisJcGd0LT5sZXZl bHMgPSBsZXZlbHM7CisKKwlwZ3QtPmxldmVsX2luZm8gPSBjYWxsb2MobGV2ZWxzLCBzaXplb2Yo KnBndC0+bGV2ZWxfaW5mbykpOworCWlndF9hc3NlcnQocGd0LT5sZXZlbF9pbmZvKTsKKworCWZv ciAobGV2ZWwgPSAwOyBsZXZlbCA8IHBndC0+bGV2ZWxzOyBsZXZlbCsrKSB7CisJCXN0cnVjdCBw Z3RhYmxlX2xldmVsX2luZm8gKmxpID0gJnBndC0+bGV2ZWxfaW5mb1tsZXZlbF07CisKKwkJbGkt PmRlc2MgPSAmbGV2ZWxfZGVzY3NbbGV2ZWxdOworCQlpZiAobGktPmRlc2MtPnRhYmxlX3NpemUg PiBwZ3QtPm1heF9hbGlnbikKKwkJCXBndC0+bWF4X2FsaWduID0gbGktPmRlc2MtPnRhYmxlX3Np emU7CisJfQorCisJcGd0X2NhbGNfc2l6ZShwZ3QsIGJ1ZnMsIGJ1Zl9jb3VudCk7CisKKwlyZXR1 cm4gcGd0OworfQorCitzdGF0aWMgdm9pZCBwZ3RfZGVzdHJveShzdHJ1Y3QgcGd0YWJsZSAqcGd0 KQoreworCWZyZWUocGd0LT5sZXZlbF9pbmZvKTsKKwlmcmVlKHBndCk7Cit9CisKK2RybV9pbnRl bF9ibyAqCitpbnRlbF9hdXhfcGd0YWJsZV9jcmVhdGUoZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdy LAorCQkgICAgICAgY29uc3Qgc3RydWN0IGlndF9idWYgKipidWZzLCBpbnQgYnVmX2NvdW50KQor eworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGd0YWJsZV9sZXZlbF9kZXNjIGxldmVsX2Rlc2NbXSA9 IHsKKwkJeworCQkJLmlkeF9zaGlmdCA9IDE2LAorCQkJLmlkeF9iaXRzID0gOCwKKwkJCS5lbnRy eV9wdHJfc2hpZnQgPSA4LAorCQkJLnRhYmxlX3NpemUgPSA4ICogMTAyNCwKKwkJfSwKKwkJewor CQkJLmlkeF9zaGlmdCA9IDI0LAorCQkJLmlkeF9iaXRzID0gMTIsCisJCQkuZW50cnlfcHRyX3No aWZ0ID0gMTMsCisJCQkudGFibGVfc2l6ZSA9IDMyICogMTAyNCwKKwkJfSwKKwkJeworCQkJLmlk eF9zaGlmdCA9IDM2LAorCQkJLmlkeF9iaXRzID0gMTIsCisJCQkuZW50cnlfcHRyX3NoaWZ0ID0g MTUsCisJCQkudGFibGVfc2l6ZSA9IDMyICogMTAyNCwKKwkJfSwKKwl9OworCXN0cnVjdCBwZ3Rh YmxlICpwZ3Q7CisJZHJtX2ludGVsX2JvICpwZ3RfYm87CisKKwlwZ3QgPSBwZ3RfY3JlYXRlKGxl dmVsX2Rlc2MsIEFSUkFZX1NJWkUobGV2ZWxfZGVzYyksIGJ1ZnMsIGJ1Zl9jb3VudCk7CisKKwlw Z3RfYm8gPSBkcm1faW50ZWxfYm9fYWxsb2NfZm9yX3JlbmRlcihidWZtZ3IsICJhdXggcGd0IiwK KwkJCQkJICAgICAgIHBndC0+c2l6ZSwgcGd0LT5tYXhfYWxpZ24pOworCWlndF9hc3NlcnQocGd0 X2JvKTsKKworCWlndF9hc3NlcnQoZHJtX2ludGVsX2JvX21hcChwZ3RfYm8sIHRydWUpID09IDAp OworCXBndF9wb3B1bGF0ZV9lbnRyaWVzKHBndCwgYnVmcywgYnVmX2NvdW50LCBwZ3RfYm8pOwor CWlndF9hc3NlcnQoZHJtX2ludGVsX2JvX3VubWFwKHBndF9ibykgPT0gMCk7CisKKwlwZ3RfZGVz dHJveShwZ3QpOworCisJcmV0dXJuIHBndF9ibzsKK30KZGlmZiAtLWdpdCBhL2xpYi9pbnRlbF9h dXhfcGd0YWJsZS5oIGIvbGliL2ludGVsX2F1eF9wZ3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAuLmMwZjAwMWI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2ludGVs X2F1eF9wZ3RhYmxlLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfX0lOVEVMX0FVWF9QR1RB QkxFX0hfXworI2RlZmluZSBfX0lOVEVMX0FVWF9QR1RBQkxFX0hfXworCisjaW5jbHVkZSAiaW50 ZWxfYnVmbWdyLmgiCisKK3N0cnVjdCBpZ3RfYnVmOworCitkcm1faW50ZWxfYm8gKgoraW50ZWxf YXV4X3BndGFibGVfY3JlYXRlKGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwKKwkJCSBjb25zdCBz dHJ1Y3QgaWd0X2J1ZiAqKmJ1ZnMsIGludCBidWZfY291bnQpOworCisjZW5kaWYKZGlmZiAtLWdp dCBhL2xpYi9pbnRlbF9yZWcuaCBiL2xpYi9pbnRlbF9yZWcuaAppbmRleCAwNjk0NDBjYi4uODRm NzQ2YTYgMTAwNjQ0Ci0tLSBhL2xpYi9pbnRlbF9yZWcuaAorKysgYi9saWIvaW50ZWxfcmVnLmgK QEAgLTY3Myw2ICs2NzMsNyBAQCBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT IElOIFRIRSBTT0ZUV0FSRS4KICNkZWZpbmUgUklOR19WQUxJRCAgICAgICAgICAweDAwMDAwMDAx CiAjZGVmaW5lIFJJTkdfSU5WQUxJRCAgICAgICAgMHgwMDAwMDAwMAogCisjZGVmaW5lIEdFTjEy X0dGWF9BVVhfVEFCTEVfQkFTRV9BRERSCTB4NDIwMAogCiAKIC8qIEJpdEJsdCBJbnN0cnVjdGlv bnMKQEAgLTI1NzAsNiArMjU3MSw3IEBAIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVB TElOR1MgSU4gVEhFIFNPRlRXQVJFLgogCiAjZGVmaW5lIE1JX0xPQURfU0NBTl9MSU5FU19JTkNM CQkoMHgxMjw8MjMpCiAjZGVmaW5lIE1JX0xPQURfUkVHSVNURVJfSU1NCQkoKDB4MjIgPDwgMjMp IHwgMSkKKyNkZWZpbmUgTUlfTE9BRF9SRUdJU1RFUl9NRU1fR0VOOAkoKDB4MjkgPDwgMjMpIHwg KDQgLSAyKSkKIAogLyogRmx1c2ggKi8KICNkZWZpbmUgTUlfRkxVU0gJCQkoMHgwNDw8MjMpCmRp ZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIvbWVzb24uYnVpbGQKaW5kZXggZmJjMGM4 ZDEuLmVkYWNhMDkxIDEwMDY0NAotLS0gYS9saWIvbWVzb24uYnVpbGQKKysrIGIvbGliL21lc29u LmJ1aWxkCkBAIC00NCw2ICs0NCw3IEBAIGxpYl9zb3VyY2VzID0gWwogCSdyZW5kZXJjb3B5X2dl bjguYycsCiAJJ3JlbmRlcmNvcHlfZ2VuOS5jJywKIAknc3dfc3luYy5jJywKKwknaW50ZWxfYXV4 X3BndGFibGUuYycsCiAJJ2ludGVsX3JlZ19tYXAuYycsCiAJJ2ludGVsX2lvc2YuYycsCiAJJ2ln dF9rbXMuYycsCmRpZmYgLS1naXQgYS9saWIvcmVuZGVyY29weV9nZW45LmMgYi9saWIvcmVuZGVy Y29weV9nZW45LmMKaW5kZXggNjk0ZWIzY2YuLjMxODk1OTRmIDEwMDY0NAotLS0gYS9saWIvcmVu ZGVyY29weV9nZW45LmMKKysrIGIvbGliL3JlbmRlcmNvcHlfZ2VuOS5jCkBAIC0xNSw2ICsxNSw3 IEBACiAjaW5jbHVkZSA8aTkxNV9kcm0uaD4KIAogI2luY2x1ZGUgImRybXRlc3QuaCIKKyNpbmNs dWRlICJpbnRlbF9hdXhfcGd0YWJsZS5oIgogI2luY2x1ZGUgImludGVsX2J1Zm1nci5oIgogI2lu Y2x1ZGUgImludGVsX2JhdGNoYnVmZmVyLmgiCiAjaW5jbHVkZSAiaW50ZWxfaW8uaCIKQEAgLTk3 MiwxOSArOTczLDIyNyBAQCBzdGF0aWMgdm9pZCBnZW44X2VtaXRfcHJpbWl0aXZlKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IG9mZnNldAogCiAjZGVmaW5lIEJBVENI X1NUQVRFX1NQTElUIDIwNDgKIAorc3RhdGljIHZvaWQKK2F1eF9wZ3RhYmxlX2ZpbmRfbWF4X2Zy ZWVfcmFuZ2UoY29uc3Qgc3RydWN0IGlndF9idWYgKipidWZzLCBpbnQgYnVmX2NvdW50LAorCQkJ CXVpbnQ2NF90ICpyYW5nZV9zdGFydCwgdWludDY0X3QgKnJhbmdlX3NpemUpCit7CisJLyoKKwkg KiBLZWVwIHRoZSBmaXJzdCBwYWdlIHJlc2VydmVkLCBzbyB3ZSBjYW4gZGlmZmVyZW50aWF0ZSBw aW5uZWQKKwkgKiBvYmplY3RzIGJhc2VkIG9uIGEgbm9uLU5VTEwgb2Zmc2V0LgorCSAqLworCXVp bnQ2NF90IHN0YXJ0ID0gMHgxMDAwOworCS8qIEZvciBub3cgYWxsb2Mgb25seSBmcm9tIHRoZSBm aXJzdCA0R0IgYWRkcmVzcyBzcGFjZS4gKi8KKwljb25zdCB1aW50NjRfdCBlbmQgPSAxVUxMIDw8 IDMyOworCXVpbnQ2NF90IG1heF9yYW5nZV9zdGFydCA9IDA7CisJdWludDY0X3QgbWF4X3Jhbmdl X3NpemUgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGJ1Zl9jb3VudDsgaSsrKSB7 CisJCWlmIChidWZzW2ldLT5iby0+b2Zmc2V0NjQgPj0gZW5kKQorCQkJYnJlYWs7CisKKwkJaWYg KGJ1ZnNbaV0tPmJvLT5vZmZzZXQ2NCAtIHN0YXJ0ID4gbWF4X3JhbmdlX3NpemUpIHsKKwkJCW1h eF9yYW5nZV9zdGFydCA9IHN0YXJ0OworCQkJbWF4X3JhbmdlX3NpemUgPSBidWZzW2ldLT5iby0+ b2Zmc2V0NjQgLSBzdGFydDsKKwkJfQorCQlzdGFydCA9IGJ1ZnNbaV0tPmJvLT5vZmZzZXQ2NCAr IGJ1ZnNbaV0tPmJvLT5zaXplOworCX0KKworCWlmIChzdGFydCA8IGVuZCAmJiBlbmQgLSBzdGFy dCA+IG1heF9yYW5nZV9zaXplKSB7CisJCW1heF9yYW5nZV9zdGFydCA9IHN0YXJ0OworCQltYXhf cmFuZ2Vfc2l6ZSA9IGVuZCAtIHN0YXJ0OworCX0KKworCSpyYW5nZV9zdGFydCA9IG1heF9yYW5n ZV9zdGFydDsKKwkqcmFuZ2Vfc2l6ZSA9IG1heF9yYW5nZV9zaXplOworfQorCitzdGF0aWMgdWlu dDY0X3QKK2F1eF9wZ3RhYmxlX2ZpbmRfZnJlZV9yYW5nZShjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAq KmJ1ZnMsIGludCBidWZfY291bnQsCisJCQkgICAgdWludDMyX3Qgc2l6ZSkKK3sKKwl1aW50NjRf dCByYW5nZV9zdGFydDsKKwl1aW50NjRfdCByYW5nZV9zaXplOworCS8qIEEgY29tcHJlc3NlZCBz dXJmYWNlIG11c3QgYmUgNjRrQiBhbGlnbmVkLiAqLworCWNvbnN0IHVpbnQzMl90IGFsaWduID0g MHgxMDAwMDsKKwlpbnQgcGFkOworCisJYXV4X3BndGFibGVfZmluZF9tYXhfZnJlZV9yYW5nZShi dWZzLCBidWZfY291bnQsCisJCQkJCSZyYW5nZV9zdGFydCwgJnJhbmdlX3NpemUpOworCisJcGFk ID0gQUxJR04ocmFuZ2Vfc3RhcnQsIGFsaWduKSAtIHJhbmdlX3N0YXJ0OworCXJhbmdlX3N0YXJ0 ICs9IHBhZDsKKwlyYW5nZV9zaXplIC09IHBhZDsKKwlpZ3RfYXNzZXJ0KHJhbmdlX3NpemUgPj0g c2l6ZSk7CisKKwlyZXR1cm4gcmFuZ2Vfc3RhcnQgKworCSAgICAgICBBTElHTl9ET1dOKHJhbmQo KSAlICgocmFuZ2Vfc2l6ZSAtIHNpemUpICsgMSksIGFsaWduKTsKK30KKworc3RhdGljIHZvaWQK K2F1eF9wZ3RhYmxlX3Jlc2VydmVfcmFuZ2UoY29uc3Qgc3RydWN0IGlndF9idWYgKipidWZzLCBp bnQgYnVmX2NvdW50LAorCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqbmV3X2J1ZikKK3sKKwlp bnQgaTsKKworCWlmIChuZXdfYnVmLT5hdXguc3RyaWRlKSB7CisJCXVpbnQ2NF90IHBpbl9vZmZz ZXQgPSBuZXdfYnVmLT5iby0+b2Zmc2V0NjQ7CisKKwkJaWYgKCFwaW5fb2Zmc2V0KQorCQkJcGlu X29mZnNldCA9IGF1eF9wZ3RhYmxlX2ZpbmRfZnJlZV9yYW5nZShidWZzLAorCQkJCQkJCQkgYnVm X2NvdW50LAorCQkJCQkJCQkgbmV3X2J1Zi0+Ym8tPnNpemUpOworCQlkcm1faW50ZWxfYm9fc2V0 X3NvZnRwaW5fb2Zmc2V0KG5ld19idWYtPmJvLCBwaW5fb2Zmc2V0KTsKKwkJaWd0X2Fzc2VydChu ZXdfYnVmLT5iby0+b2Zmc2V0NjQgPT0gcGluX29mZnNldCk7CisJfQorCisJZm9yIChpID0gMDsg aSA8IGJ1Zl9jb3VudDsgaSsrKQorCQlpZiAoYnVmc1tpXS0+Ym8tPm9mZnNldDY0ID4gbmV3X2J1 Zi0+Ym8tPm9mZnNldDY0KQorCQkJYnJlYWs7CisKKwltZW1tb3ZlKCZidWZzW2kgKyAxXSwgJmJ1 ZnNbaV0sIHNpemVvZihidWZzWzBdKSAqIChidWZfY291bnQgLSBpKSk7CisKKwlidWZzW2ldID0g bmV3X2J1ZjsKK30KKworc3RydWN0IGF1eF9wZ3RhYmxlX2luZm8geworCWludCBidWZfY291bnQ7 CisJY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZnNbMl07CisJdWludDY0X3QgYnVmX3Bpbl9vZmZz ZXRzWzJdOworCWRybV9pbnRlbF9ibyAqcGd0YWJsZV9ibzsKK307CisKK3N0YXRpYyB2b2lkCitn ZW4xMl9hdXhfcGd0YWJsZV9pbml0KHN0cnVjdCBhdXhfcGd0YWJsZV9pbmZvICppbmZvLAorCQkg ICAgICAgZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGln dF9idWYgKnNyY19idWYsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0X2J1ZikK K3sKKwljb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmc1syXTsKKwljb25zdCBzdHJ1Y3QgaWd0X2J1 ZiAqcmVzZXJ2ZWRfYnVmc1syXTsKKwlpbnQgcmVzZXJ2ZWRfYnVmX2NvdW50OworCWludCBpOwor CisJaWYgKCFzcmNfYnVmLT5hdXguc3RyaWRlICYmICFkc3RfYnVmLT5hdXguc3RyaWRlKQorCQly ZXR1cm47CisKKwlidWZzWzBdID0gc3JjX2J1ZjsKKwlidWZzWzFdID0gZHN0X2J1ZjsKKworCS8q CisJICogSWRlYWxseSB3ZSdkIG5lZWQgYW4gSUdULXdpZGUgR0ZYIGFkZHJlc3Mgc3BhY2UgYWxs b2NhdG9yLCB3aGljaAorCSAqIHdvdWxkIGNvbnNpZGVyIGFsbCBhbGxvY2F0aW9ucyBhbmQgdGh1 cyBhdm9pZCBldmljdGlvbnMuIEZvciBub3cgdXNlCisJICogYSBzaW1wbGVyIHNjaGVtZSBoZXJl LCB3aGljaCBvbmx5IGNvbnNpZGVycyB0aGUgYnVmZmVycyBpbnZvbHZlZCBpbgorCSAqIHRoZSBi bGl0LCB3aGljaCBzaG91bGQgYXQgbGVhc3QgbWluaW1pemUgdGhlIGNoYW5jZSBmb3IgZXZpY3Rp b25zCisJICogaW4gdGhlIGNhc2Ugb2Ygc3Vic2VxdWVudCBibGl0czoKKwkgKiAgIDEuIElmIHRo ZXkgd2VyZSBhbHJlYWR5IGJvdW5kIChiby0+b2Zmc2V0NjQgIT0gMCksIHVzZSB0aGlzCisJICog ICAgICBhZGRyZXNzLgorCSAqICAgMi4gUGljayBhIHJhbmdlIHJhbmRvbWx5IGZyb20gdGhlIDRH QiBhZGRyZXNzIHNwYWNlLCB0aGF0IGlzIG5vdAorCSAqICAgICAgYWxyZWFkeSBvY2N1cGllZCBi eSBhIGJvdW5kIG9iamVjdCwgb3IgYW4gb2JqZWN0IHdlIHBpbm5lZC4KKwkgKi8KKwlyZXNlcnZl ZF9idWZfY291bnQgPSAwOworCS8qIEZpcnN0IHJlc2VydmUgc3BhY2UgZm9yIGFueSBidWZzIHRo YXQgYXJlIGJvdW5kIGFscmVhZHkuICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnVm cyk7IGkrKykKKwkJaWYgKGJ1ZnNbaV0tPmJvLT5vZmZzZXQ2NCkKKwkJCWF1eF9wZ3RhYmxlX3Jl c2VydmVfcmFuZ2UocmVzZXJ2ZWRfYnVmcywKKwkJCQkJCSAgcmVzZXJ2ZWRfYnVmX2NvdW50Kyss CisJCQkJCQkgIGJ1ZnNbaV0pOworCisJLyogTmV4dCwgcmVzZXJ2ZSBzcGFjZSBmb3IgdW5ib3Vu ZCBidWZzIHdpdGggYW4gQVVYIHN1cmZhY2UuICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoYnVmcyk7IGkrKykKKwkJaWYgKCFidWZzW2ldLT5iby0+b2Zmc2V0NjQgJiYgYnVmc1tpXS0+ YXV4LnN0cmlkZSkKKwkJCWF1eF9wZ3RhYmxlX3Jlc2VydmVfcmFuZ2UocmVzZXJ2ZWRfYnVmcywK KwkJCQkJCSAgcmVzZXJ2ZWRfYnVmX2NvdW50KyssCisJCQkJCQkgIGJ1ZnNbaV0pOworCisJLyog Q3JlYXRlIEFVWCBwZ3RhYmxlIGVudHJpZXMgb25seSBmb3IgYnVmcyB3aXRoIGFuIEFVWCBzdXJm YWNlICovCisJaW5mby0+YnVmX2NvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgcmVzZXJ2ZWRf YnVmX2NvdW50OyBpKyspIHsKKwkJaWYgKCFyZXNlcnZlZF9idWZzW2ldLT5hdXguc3RyaWRlKQor CQkJY29udGludWU7CisKKwkJaW5mby0+YnVmc1tpbmZvLT5idWZfY291bnRdID0gcmVzZXJ2ZWRf YnVmc1tpXTsKKwkJaW5mby0+YnVmX3Bpbl9vZmZzZXRzW2luZm8tPmJ1Zl9jb3VudF0gPQorCQkJ cmVzZXJ2ZWRfYnVmc1tpXS0+Ym8tPm9mZnNldDY0OworCQlpbmZvLT5idWZfY291bnQrKzsKKwl9 CisKKwlpbmZvLT5wZ3RhYmxlX2JvID0gaW50ZWxfYXV4X3BndGFibGVfY3JlYXRlKGJ1Zm1nciwK KwkJCQkJCSAgICBpbmZvLT5idWZzLAorCQkJCQkJICAgIGluZm8tPmJ1Zl9jb3VudCk7CisJaWd0 X2Fzc2VydChpbmZvLT5wZ3RhYmxlX2JvKTsKK30KKworc3RhdGljIHZvaWQKK2dlbjEyX2F1eF9w Z3RhYmxlX2NsZWFudXAoc3RydWN0IGF1eF9wZ3RhYmxlX2luZm8gKmluZm8pCit7CisJaW50IGk7 CisKKwkvKiBDaGVjayB0aGF0IHRoZSBwaW5uZWQgYnVmcyBrZXB0IHRoZWlyIG9mZnNldCBhZnRl ciB0aGUgZXhlYy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+YnVmX2NvdW50OyBpKyspCisJ CWlndF9hc3NlcnRfZXFfdTY0KGluZm8tPmJ1ZnNbaV0tPmJvLT5vZmZzZXQ2NCwKKwkJCQkgIGlu Zm8tPmJ1Zl9waW5fb2Zmc2V0c1tpXSk7CisKKwlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UoaW5m by0+cGd0YWJsZV9ibyk7Cit9CisKK3N0YXRpYyB1aW50MzJfdAorZ2VuMTJfY3JlYXRlX2F1eF9w Z3RhYmxlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCisJCQkgICAgICAg ZHJtX2ludGVsX2JvICphdXhfcGd0YWJsZV9ibykKK3sKKwl1aW50NjRfdCAqcGd0YWJsZV9wdHI7 CisJdWludDMyX3QgcGd0YWJsZV9wdHJfb2Zmc2V0OworCWludCByZXQ7CisKKwlpZiAoIWF1eF9w Z3RhYmxlX2JvKQorCQlyZXR1cm4gMDsKKworCXBndGFibGVfcHRyID0gaW50ZWxfYmF0Y2hidWZm ZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwKKwkJCQkJCSAgICAgIHNpemVvZigqcGd0YWJsZV9wdHIp LAorCQkJCQkJICAgICAgc2l6ZW9mKCpwZ3RhYmxlX3B0cikpOworCXBndGFibGVfcHRyX29mZnNl dCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLAorCQkJCQkJCSAgICAg IHBndGFibGVfcHRyKTsKKworCSpwZ3RhYmxlX3B0ciA9IGF1eF9wZ3RhYmxlX2JvLT5vZmZzZXQ2 NDsKKwlyZXQgPSBkcm1faW50ZWxfYm9fZW1pdF9yZWxvYyhiYXRjaC0+Ym8sIHBndGFibGVfcHRy X29mZnNldCwKKwkJCQkgICAgICBhdXhfcGd0YWJsZV9ibywgMCwKKwkJCQkgICAgICAwLCAwKTsK Kwlhc3NlcnQocmV0ID09IDApOworCisJcmV0dXJuIHBndGFibGVfcHRyX29mZnNldDsKK30KKwor c3RhdGljIHZvaWQKK2dlbjEyX2VtaXRfYXV4X3BndGFibGVfc3RhdGUoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qgc3RhdGUpCit7CisJaWYgKCFzdGF0ZSkKKwkJcmV0 dXJuOworCisJT1VUX0JBVENIKE1JX0xPQURfUkVHSVNURVJfTUVNX0dFTjgpOworCU9VVF9CQVRD SChHRU4xMl9HRlhfQVVYX1RBQkxFX0JBU0VfQUREUik7CisJT1VUX1JFTE9DKGJhdGNoLT5ibywg MCwgMCwgc3RhdGUpOworCisJT1VUX0JBVENIKE1JX0xPQURfUkVHSVNURVJfTUVNX0dFTjgpOwor CU9VVF9CQVRDSChHRU4xMl9HRlhfQVVYX1RBQkxFX0JBU0VfQUREUiArIDQpOworCU9VVF9SRUxP QyhiYXRjaC0+Ym8sIDAsIDAsIHN0YXRlICsgNCk7Cit9CisKIHN0YXRpYwogdm9pZCBfZ2VuOV9y ZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAkJCSAgZHJt X2ludGVsX2NvbnRleHQgKmNvbnRleHQsCiAJCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMs IHVuc2lnbmVkIHNyY194LAogCQkJICB1bnNpZ25lZCBzcmNfeSwgdW5zaWduZWQgd2lkdGgsIHVu c2lnbmVkIGhlaWdodCwKIAkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCwgdW5zaWduZWQg ZHN0X3gsCi0JCQkgIHVuc2lnbmVkIGRzdF95LCBjb25zdCB1aW50MzJfdCBwc19rZXJuZWxbXVs0 XSwKKwkJCSAgdW5zaWduZWQgZHN0X3ksCisJCQkgIGRybV9pbnRlbF9ibyAqYXV4X3BndGFibGVf Ym8sCisJCQkgIGNvbnN0IHVpbnQzMl90IHBzX2tlcm5lbFtdWzRdLAogCQkJICB1aW50MzJfdCBw c19rZXJuZWxfc2l6ZSkKIHsKIAl1aW50MzJfdCBwc19zYW1wbGVyX3N0YXRlLCBwc19rZXJuZWxf b2ZmLCBwc19iaW5kaW5nX3RhYmxlOwogCXVpbnQzMl90IHNjaXNzb3Jfc3RhdGU7CiAJdWludDMy X3QgdmVydGV4X2J1ZmZlcjsKIAl1aW50MzJfdCBiYXRjaF9lbmQ7CisJdWludDMyX3QgYXV4X3Bn dGFibGVfc3RhdGU7CiAKIAlpZ3RfYXNzZXJ0KHNyYy0+YnBwID09IGRzdC0+YnBwKTsKIAlpbnRl bF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQpOwpAQCAtMTAw Nyw2ICsxMjE2LDEwIEBAIHZvaWQgX2dlbjlfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsCiAJdmlld3BvcnQuY2Nfc3RhdGUgPSBnZW42X2NyZWF0ZV9jY192 aWV3cG9ydChiYXRjaCk7CiAJdmlld3BvcnQuc2ZfY2xpcF9zdGF0ZSA9IGdlbjdfY3JlYXRlX3Nm X2NsaXBfdmlld3BvcnQoYmF0Y2gpOwogCXNjaXNzb3Jfc3RhdGUgPSBnZW42X2NyZWF0ZV9zY2lz c29yX3JlY3QoYmF0Y2gpOworCisJYXV4X3BndGFibGVfc3RhdGUgPSBnZW4xMl9jcmVhdGVfYXV4 X3BndGFibGVfc3RhdGUoYmF0Y2gsCisJCQkJCQkJICAgYXV4X3BndGFibGVfYm8pOworCiAJLyog VE9ETzogdGhlcmVlIGlzIG90aGVyIHN0YXRlIHdoaWNoIGlzbid0IHNldHVwICovCiAKIAlhc3Nl cnQoYmF0Y2gtPnB0ciA8ICZiYXRjaC0+YnVmZmVyWzQwOTVdKTsKQEAgLTEwMTgsNiArMTIzMSw4 IEBAIHZvaWQgX2dlbjlfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsCiAJT1VUX0JBVENIKEc0WF9QSVBFTElORV9TRUxFQ1QgfCBQSVBFTElORV9TRUxFQ1Rf M0QgfAogCQkJCUdFTjlfUElQRUxJTkVfU0VMRUNUSU9OX01BU0spOwogCisJZ2VuMTJfZW1pdF9h dXhfcGd0YWJsZV9zdGF0ZShiYXRjaCwgYXV4X3BndGFibGVfc3RhdGUpOworCiAJZ2VuOF9lbWl0 X3NpcChiYXRjaCk7CiAKIAlnZW43X2VtaXRfcHVzaF9jb25zdGFudHMoYmF0Y2gpOwpAQCAtMTA5 Miw4ICsxMzA3LDggQEAgdm9pZCBnZW45X3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLAogCiB7CiAJX2dlbjlfcmVuZGVyX2NvcHlmdW5jKGJhdGNoLCBjb250 ZXh0LCBzcmMsIHNyY194LCBzcmNfeSwKLQkJCSAgd2lkdGgsIGhlaWdodCwgZHN0LCBkc3RfeCwg ZHN0X3ksIHBzX2tlcm5lbF9nZW45LAotCQkJICBzaXplb2YocHNfa2VybmVsX2dlbjkpKTsKKwkJ CSAgd2lkdGgsIGhlaWdodCwgZHN0LCBkc3RfeCwgZHN0X3ksIE5VTEwsCisJCQkgIHBzX2tlcm5l bF9nZW45LCBzaXplb2YocHNfa2VybmVsX2dlbjkpKTsKIH0KIAogdm9pZCBnZW4xMV9yZW5kZXJf Y29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKQEAgLTExMDQsOCArMTMx OSw4IEBAIHZvaWQgZ2VuMTFfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gsCiAKIHsKIAlfZ2VuOV9yZW5kZXJfY29weWZ1bmMoYmF0Y2gsIGNvbnRleHQsIHNy Yywgc3JjX3gsIHNyY195LAotCQkJICB3aWR0aCwgaGVpZ2h0LCBkc3QsIGRzdF94LCBkc3RfeSwg cHNfa2VybmVsX2dlbjExLAotCQkJICBzaXplb2YocHNfa2VybmVsX2dlbjExKSk7CisJCQkgIHdp ZHRoLCBoZWlnaHQsIGRzdCwgZHN0X3gsIGRzdF95LCBOVUxMLAorCQkJICBwc19rZXJuZWxfZ2Vu MTEsIHNpemVvZihwc19rZXJuZWxfZ2VuMTEpKTsKIH0KIAogdm9pZCBnZW4xMl9yZW5kZXJfY29w eWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKQEAgLTExMTUsNyArMTMzMCwx NSBAQCB2b2lkIGdlbjEyX3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLAogCQkJICAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCwgdW5zaWduZWQgZHN0X3gs IHVuc2lnbmVkIGRzdF95KQogCiB7CisJc3RydWN0IGF1eF9wZ3RhYmxlX2luZm8gcGd0YWJsZV9p bmZvID0geyB9OworCisJZ2VuMTJfYXV4X3BndGFibGVfaW5pdCgmcGd0YWJsZV9pbmZvLCBiYXRj aC0+YnVmbWdyLCBzcmMsIGRzdCk7CisKIAlfZ2VuOV9yZW5kZXJfY29weWZ1bmMoYmF0Y2gsIGNv bnRleHQsIHNyYywgc3JjX3gsIHNyY195LAotCQkJICB3aWR0aCwgaGVpZ2h0LCBkc3QsIGRzdF94 LCBkc3RfeSwgZ2VuMTJfcmVuZGVyX2NvcHksCisJCQkgIHdpZHRoLCBoZWlnaHQsIGRzdCwgZHN0 X3gsIGRzdF95LAorCQkJICBwZ3RhYmxlX2luZm8ucGd0YWJsZV9ibywKKwkJCSAgZ2VuMTJfcmVu ZGVyX2NvcHksCiAJCQkgIHNpemVvZihnZW4xMl9yZW5kZXJfY29weSkpOworCisJZ2VuMTJfYXV4 X3BndGFibGVfY2xlYW51cCgmcGd0YWJsZV9pbmZvKTsKIH0KZGlmZiAtLWdpdCBhL2xpYi9zdHVi cy9kcm0vaW50ZWxfYnVmbWdyLmMgYi9saWIvc3R1YnMvZHJtL2ludGVsX2J1Zm1nci5jCmluZGV4 IGY4NzQ1MmFjLi5jYmFiMjQ4NCAxMDA2NDQKLS0tIGEvbGliL3N0dWJzL2RybS9pbnRlbF9idWZt Z3IuYworKysgYi9saWIvc3R1YnMvZHJtL2ludGVsX2J1Zm1nci5jCkBAIC0yMzMsNiArMjMzLDEy IEBAIGludCBkcm1faW50ZWxfYm9fc2V0X3RpbGluZyhkcm1faW50ZWxfYm8gKmJvLCB1aW50MzJf dCAqIHRpbGluZ19tb2RlLAogCXJldHVybiAtRU5PREVWOwogfQogCitpbnQgZHJtX2ludGVsX2Jv X3NldF9zb2Z0cGluX29mZnNldChkcm1faW50ZWxfYm8gKmJvLCB1aW50NjRfdCBvZmZzZXQpCit7 CisJaWd0X3JlcXVpcmVfZihmYWxzZSwgbWlzc2luZ19zdXBwb3J0X3N0cik7CisJcmV0dXJuIC1F Tk9ERVY7Cit9CisKIGludCBkcm1faW50ZWxfYm9fZGlzYWJsZV9yZXVzZShkcm1faW50ZWxfYm8g KmJvKQogewogCWlndF9yZXF1aXJlX2YoZmFsc2UsIG1pc3Npbmdfc3VwcG9ydF9zdHIpOwotLSAK Mi4xNy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpp Z3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=