From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lucas Stach Subject: [PATCH v2 08/14] drm/etnaviv: add GPU MMU handling functionality Date: Wed, 9 Dec 2015 12:48:21 +0100 Message-ID: <1449661707-30532-8-git-send-email-l.stach@pengutronix.de> References: <1449661707-30532-1-git-send-email-l.stach@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1449661707-30532-1-git-send-email-l.stach@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: David Airlie , Rob Herring , Shawn Guo , Andrew Lunn Cc: devicetree@vger.kernel.org, Jason Cooper , dri-devel@lists.freedesktop.org, patchwork-lst@pengutronix.de, kernel@pengutronix.de, Gregory Clement , Russell King , linux-arm-kernel@lists.infradead.org, Sebastian Hesselbarth List-Id: devicetree@vger.kernel.org RnJvbTogVGhlIGV0bmF2aXYgYXV0aG9ycyA8ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y Zz4KClRoaXMgYWRkcyB0aGUgR1BVIE1NVSBoYW5kbGluZyBmdW5jdGlvbmFsaXR5LCB1c2VkIHRv IGRyaXZlIHRoZSBNTVVzCmF0dGFjaGVkIHRvIGVhY2ggR1BVIGNvcmUuCgpTaWduZWQtb2ZmLWJ5 OiBDaHJpc3RpYW4gR21laW5lciA8Y2hyaXN0aWFuLmdtZWluZXJAZ21haWwuY29tPgpTaWduZWQt b2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtLmxpbnV4Lm9yZy51az4KU2lnbmVk LW9mZi1ieTogTHVjYXMgU3RhY2ggPGwuc3RhY2hAcGVuZ3V0cm9uaXguZGU+Ci0tLQogZHJpdmVy cy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9pb21tdS5jICAgIHwgMjQwICsrKysrKysrKysrKysr KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2lvbW11LmggICAgfCAg MjggKysrCiBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2lvbW11X3YyLmMgfCAgMzMg KysrKwogZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9pb21tdV92Mi5oIHwgIDI1ICsr KwogZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9tbXUuYyAgICAgIHwgMjk5ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2 X21tdS5oICAgICAgfCAgNzEgKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCA2OTYgaW5zZXJ0aW9u cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZf aW9tbXUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2 aXZfaW9tbXUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0 bmF2aXZfaW9tbXVfdjIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9ldG5h dml2L2V0bmF2aXZfaW9tbXVfdjIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9ldG5hdml2L2V0bmF2aXZfbW11LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vZXRuYXZpdi9ldG5hdml2X21tdS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0 bmF2aXYvZXRuYXZpdl9pb21tdS5jIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9p b21tdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTIyY2ZkNDQ3 ODkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9p b21tdS5jCkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IENocmlz dGlhbiBHbWVpbmVyIDxjaHJpc3RpYW4uZ21laW5lckBnbWFpbC5jb20+CisgKgorICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25n IHdpdGgKKyAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW9tbXUuaD4KKyNpbmNsdWRlIDxs aW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zaXplcy5oPgorI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1 ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisjaW5jbHVkZSAiZXRuYXZpdl9ncHUuaCIKKyNpbmNsdWRl ICJldG5hdml2X21tdS5oIgorI2luY2x1ZGUgImV0bmF2aXZfaW9tbXUuaCIKKyNpbmNsdWRlICJz dGF0ZV9oaS54bWwuaCIKKworI2RlZmluZSBQVF9TSVpFCQlTWl8yTQorI2RlZmluZSBQVF9FTlRS SUVTCShQVF9TSVpFIC8gc2l6ZW9mKHUzMikpCisKKyNkZWZpbmUgR1BVX01FTV9TVEFSVAkweDgw MDAwMDAwCisKK3N0cnVjdCBldG5hdml2X2lvbW11X2RvbWFpbl9wZ3RhYmxlIHsKKwl1MzIgKnBn dGFibGU7CisJZG1hX2FkZHJfdCBwYWRkcjsKK307CisKK3N0cnVjdCBldG5hdml2X2lvbW11X2Rv bWFpbiB7CisJc3RydWN0IGlvbW11X2RvbWFpbiBkb21haW47CisJc3RydWN0IGRldmljZSAqZGV2 OworCXZvaWQgKmJhZF9wYWdlX2NwdTsKKwlkbWFfYWRkcl90IGJhZF9wYWdlX2RtYTsKKwlzdHJ1 Y3QgZXRuYXZpdl9pb21tdV9kb21haW5fcGd0YWJsZSBwZ3RhYmxlOworCXNwaW5sb2NrX3QgbWFw X2xvY2s7Cit9OworCitzdGF0aWMgc3RydWN0IGV0bmF2aXZfaW9tbXVfZG9tYWluICp0b19ldG5h dml2X2RvbWFpbihzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pCit7CisJcmV0dXJuIGNvbnRh aW5lcl9vZihkb21haW4sIHN0cnVjdCBldG5hdml2X2lvbW11X2RvbWFpbiwgZG9tYWluKTsKK30K Kworc3RhdGljIGludCBwZ3RhYmxlX2FsbG9jKHN0cnVjdCBldG5hdml2X2lvbW11X2RvbWFpbl9w Z3RhYmxlICpwZ3RhYmxlLAorCQkJIHNpemVfdCBzaXplKQoreworCXBndGFibGUtPnBndGFibGUg PSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgc2l6ZSwgJnBndGFibGUtPnBhZGRyLCBHRlBfS0VS TkVMKTsKKwlpZiAoIXBndGFibGUtPnBndGFibGUpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBndGFibGVfZnJlZShzdHJ1Y3QgZXRuYXZpdl9pb21t dV9kb21haW5fcGd0YWJsZSAqcGd0YWJsZSwKKwkJCSBzaXplX3Qgc2l6ZSkKK3sKKwlkbWFfZnJl ZV9jb2hlcmVudChOVUxMLCBzaXplLCBwZ3RhYmxlLT5wZ3RhYmxlLCBwZ3RhYmxlLT5wYWRkcik7 Cit9CisKK3N0YXRpYyB1MzIgcGd0YWJsZV9yZWFkKHN0cnVjdCBldG5hdml2X2lvbW11X2RvbWFp bl9wZ3RhYmxlICpwZ3RhYmxlLAorCQkJICAgdW5zaWduZWQgbG9uZyBpb3ZhKQoreworCS8qIGNh bGN1YXRlIGluZGV4IGludG8gcGFnZSB0YWJsZSAqLworCXVuc2lnbmVkIGludCBpbmRleCA9IChp b3ZhIC0gR1BVX01FTV9TVEFSVCkgLyBTWl80SzsKKwlwaHlzX2FkZHJfdCBwYWRkcjsKKworCXBh ZGRyID0gcGd0YWJsZS0+cGd0YWJsZVtpbmRleF07CisKKwlyZXR1cm4gcGFkZHI7Cit9CisKK3N0 YXRpYyB2b2lkIHBndGFibGVfd3JpdGUoc3RydWN0IGV0bmF2aXZfaW9tbXVfZG9tYWluX3BndGFi bGUgKnBndGFibGUsCisJCQkgIHVuc2lnbmVkIGxvbmcgaW92YSwgcGh5c19hZGRyX3QgcGFkZHIp Cit7CisJLyogY2FsY3VhdGUgaW5kZXggaW50byBwYWdlIHRhYmxlICovCisJdW5zaWduZWQgaW50 IGluZGV4ID0gKGlvdmEgLSBHUFVfTUVNX1NUQVJUKSAvIFNaXzRLOworCisJcGd0YWJsZS0+cGd0 YWJsZVtpbmRleF0gPSBwYWRkcjsKK30KKworc3RhdGljIGludCBfX2V0bmF2aXZfaW9tbXVfaW5p dChzdHJ1Y3QgZXRuYXZpdl9pb21tdV9kb21haW4gKmV0bmF2aXZfZG9tYWluKQoreworCXUzMiAq cDsKKwlpbnQgcmV0LCBpOworCisJZXRuYXZpdl9kb21haW4tPmJhZF9wYWdlX2NwdSA9IGRtYV9h bGxvY19jb2hlcmVudChldG5hdml2X2RvbWFpbi0+ZGV2LAorCQkJCQkJICBTWl80SywKKwkJCQkJ CSAgJmV0bmF2aXZfZG9tYWluLT5iYWRfcGFnZV9kbWEsCisJCQkJCQkgIEdGUF9LRVJORUwpOwor CWlmICghZXRuYXZpdl9kb21haW4tPmJhZF9wYWdlX2NwdSkKKwkJcmV0dXJuIC1FTk9NRU07CisK KwlwID0gZXRuYXZpdl9kb21haW4tPmJhZF9wYWdlX2NwdTsKKwlmb3IgKGkgPSAwOyBpIDwgU1pf NEsgLyA0OyBpKyspCisJCSpwKysgPSAweGRlYWQ1NWFhOworCisJcmV0ID0gcGd0YWJsZV9hbGxv YygmZXRuYXZpdl9kb21haW4tPnBndGFibGUsIFBUX1NJWkUpOworCWlmIChyZXQgPCAwKSB7CisJ CWRtYV9mcmVlX2NvaGVyZW50KGV0bmF2aXZfZG9tYWluLT5kZXYsIFNaXzRLLAorCQkJCSAgZXRu YXZpdl9kb21haW4tPmJhZF9wYWdlX2NwdSwKKwkJCQkgIGV0bmF2aXZfZG9tYWluLT5iYWRfcGFn ZV9kbWEpOworCQlyZXR1cm4gcmV0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBQVF9FTlRSSUVT OyBpKyspCisJCWV0bmF2aXZfZG9tYWluLT5wZ3RhYmxlLnBndGFibGVbaV0gPQorCQkJZXRuYXZp dl9kb21haW4tPmJhZF9wYWdlX2RtYTsKKworCXNwaW5fbG9ja19pbml0KCZldG5hdml2X2RvbWFp bi0+bWFwX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGV0bmF2aXZfZG9t YWluX2ZyZWUoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluKQoreworCXN0cnVjdCBldG5hdml2 X2lvbW11X2RvbWFpbiAqZXRuYXZpdl9kb21haW4gPSB0b19ldG5hdml2X2RvbWFpbihkb21haW4p OworCisJcGd0YWJsZV9mcmVlKCZldG5hdml2X2RvbWFpbi0+cGd0YWJsZSwgUFRfU0laRSk7CisK KwlkbWFfZnJlZV9jb2hlcmVudChldG5hdml2X2RvbWFpbi0+ZGV2LCBTWl80SywKKwkJCSAgZXRu YXZpdl9kb21haW4tPmJhZF9wYWdlX2NwdSwKKwkJCSAgZXRuYXZpdl9kb21haW4tPmJhZF9wYWdl X2RtYSk7CisKKwlrZnJlZShldG5hdml2X2RvbWFpbik7Cit9CisKK3N0YXRpYyBpbnQgZXRuYXZp dl9pb21tdXYxX21hcChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGxvbmcg aW92YSwKKwkgICBwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUsIGludCBwcm90KQorewor CXN0cnVjdCBldG5hdml2X2lvbW11X2RvbWFpbiAqZXRuYXZpdl9kb21haW4gPSB0b19ldG5hdml2 X2RvbWFpbihkb21haW4pOworCisJaWYgKHNpemUgIT0gU1pfNEspCisJCXJldHVybiAtRUlOVkFM OworCisJc3Bpbl9sb2NrKCZldG5hdml2X2RvbWFpbi0+bWFwX2xvY2spOworCXBndGFibGVfd3Jp dGUoJmV0bmF2aXZfZG9tYWluLT5wZ3RhYmxlLCBpb3ZhLCBwYWRkcik7CisJc3Bpbl91bmxvY2so JmV0bmF2aXZfZG9tYWluLT5tYXBfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNp emVfdCBldG5hdml2X2lvbW11djFfdW5tYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAor CXVuc2lnbmVkIGxvbmcgaW92YSwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGV0bmF2aXZfaW9t bXVfZG9tYWluICpldG5hdml2X2RvbWFpbiA9IHRvX2V0bmF2aXZfZG9tYWluKGRvbWFpbik7CisK KwlpZiAoc2l6ZSAhPSBTWl80SykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2soJmV0 bmF2aXZfZG9tYWluLT5tYXBfbG9jayk7CisJcGd0YWJsZV93cml0ZSgmZXRuYXZpdl9kb21haW4t PnBndGFibGUsIGlvdmEsCisJCSAgICAgIGV0bmF2aXZfZG9tYWluLT5iYWRfcGFnZV9kbWEpOwor CXNwaW5fdW5sb2NrKCZldG5hdml2X2RvbWFpbi0+bWFwX2xvY2spOworCisJcmV0dXJuIFNaXzRL OworfQorCitzdGF0aWMgcGh5c19hZGRyX3QgZXRuYXZpdl9pb21tdV9pb3ZhX3RvX3BoeXMoc3Ry dWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAorCWRtYV9hZGRyX3QgaW92YSkKK3sKKwlzdHJ1Y3Qg ZXRuYXZpdl9pb21tdV9kb21haW4gKmV0bmF2aXZfZG9tYWluID0gdG9fZXRuYXZpdl9kb21haW4o ZG9tYWluKTsKKworCXJldHVybiBwZ3RhYmxlX3JlYWQoJmV0bmF2aXZfZG9tYWluLT5wZ3RhYmxl LCBpb3ZhKTsKK30KKworc3RhdGljIHNpemVfdCBldG5hdml2X2lvbW11djFfZHVtcF9zaXplKHN0 cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbikKK3sKKwlyZXR1cm4gUFRfU0laRTsKK30KKworc3Rh dGljIHZvaWQgZXRuYXZpdl9pb21tdXYxX2R1bXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWlu LCB2b2lkICpidWYpCit7CisJc3RydWN0IGV0bmF2aXZfaW9tbXVfZG9tYWluICpldG5hdml2X2Rv bWFpbiA9IHRvX2V0bmF2aXZfZG9tYWluKGRvbWFpbik7CisKKwltZW1jcHkoYnVmLCBldG5hdml2 X2RvbWFpbi0+cGd0YWJsZS5wZ3RhYmxlLCBQVF9TSVpFKTsKK30KKworc3RhdGljIHN0cnVjdCBl dG5hdml2X2lvbW11X29wcyBldG5hdml2X2lvbW11X29wcyA9IHsKKwkub3BzID0geworCQkuZG9t YWluX2ZyZWUgPSBldG5hdml2X2RvbWFpbl9mcmVlLAorCQkubWFwID0gZXRuYXZpdl9pb21tdXYx X21hcCwKKwkJLnVubWFwID0gZXRuYXZpdl9pb21tdXYxX3VubWFwLAorCQkuaW92YV90b19waHlz ID0gZXRuYXZpdl9pb21tdV9pb3ZhX3RvX3BoeXMsCisJCS5wZ3NpemVfYml0bWFwID0gU1pfNEss CisJfSwKKwkuZHVtcF9zaXplID0gZXRuYXZpdl9pb21tdXYxX2R1bXBfc2l6ZSwKKwkuZHVtcCA9 IGV0bmF2aXZfaW9tbXV2MV9kdW1wLAorfTsKKwordm9pZCBldG5hdml2X2lvbW11X2RvbWFpbl9y ZXN0b3JlKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1LAorCXN0cnVjdCBpb21tdV9kb21haW4gKmRv bWFpbikKK3sKKwlzdHJ1Y3QgZXRuYXZpdl9pb21tdV9kb21haW4gKmV0bmF2aXZfZG9tYWluID0g dG9fZXRuYXZpdl9kb21haW4oZG9tYWluKTsKKwl1MzIgcGd0YWJsZTsKKworCS8qIHNldCBwYWdl IHRhYmxlIGFkZHJlc3MgaW4gTUMgKi8KKwlwZ3RhYmxlID0gKHUzMilldG5hdml2X2RvbWFpbi0+ cGd0YWJsZS5wYWRkcjsKKworCWdwdV93cml0ZShncHUsIFZJVlNfTUNfTU1VX0ZFX1BBR0VfVEFC TEUsIHBndGFibGUpOworCWdwdV93cml0ZShncHUsIFZJVlNfTUNfTU1VX1RYX1BBR0VfVEFCTEUs IHBndGFibGUpOworCWdwdV93cml0ZShncHUsIFZJVlNfTUNfTU1VX1BFX1BBR0VfVEFCTEUsIHBn dGFibGUpOworCWdwdV93cml0ZShncHUsIFZJVlNfTUNfTU1VX1BFWl9QQUdFX1RBQkxFLCBwZ3Rh YmxlKTsKKwlncHVfd3JpdGUoZ3B1LCBWSVZTX01DX01NVV9SQV9QQUdFX1RBQkxFLCBwZ3RhYmxl KTsKK30KKworc3RydWN0IGlvbW11X2RvbWFpbiAqZXRuYXZpdl9pb21tdV9kb21haW5fYWxsb2Mo c3RydWN0IGV0bmF2aXZfZ3B1ICpncHUpCit7CisJc3RydWN0IGV0bmF2aXZfaW9tbXVfZG9tYWlu ICpldG5hdml2X2RvbWFpbjsKKwlpbnQgcmV0OworCisJZXRuYXZpdl9kb21haW4gPSBremFsbG9j KHNpemVvZigqZXRuYXZpdl9kb21haW4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWV0bmF2aXZfZG9t YWluKQorCQlyZXR1cm4gTlVMTDsKKworCWV0bmF2aXZfZG9tYWluLT5kZXYgPSBncHUtPmRldjsK KworCWV0bmF2aXZfZG9tYWluLT5kb21haW4udHlwZSA9IF9fSU9NTVVfRE9NQUlOX1BBR0lORzsK KwlldG5hdml2X2RvbWFpbi0+ZG9tYWluLm9wcyA9ICZldG5hdml2X2lvbW11X29wcy5vcHM7CisJ ZXRuYXZpdl9kb21haW4tPmRvbWFpbi5nZW9tZXRyeS5hcGVydHVyZV9zdGFydCA9IEdQVV9NRU1f U1RBUlQ7CisJZXRuYXZpdl9kb21haW4tPmRvbWFpbi5nZW9tZXRyeS5hcGVydHVyZV9lbmQgPSBH UFVfTUVNX1NUQVJUICsgUFRfRU5UUklFUyAqIFNaXzRLIC0gMTsKKworCXJldCA9IF9fZXRuYXZp dl9pb21tdV9pbml0KGV0bmF2aXZfZG9tYWluKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVl OworCisJcmV0dXJuICZldG5hdml2X2RvbWFpbi0+ZG9tYWluOworCitvdXRfZnJlZToKKwlrZnJl ZShldG5hdml2X2RvbWFpbik7CisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2lvbW11LmggYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZp di9ldG5hdml2X2lvbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li5jZjQ1NTAzZjZiNmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZp di9ldG5hdml2X2lvbW11LmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg MjAxNCBDaHJpc3RpYW4gR21laW5lciA8Y2hyaXN0aWFuLmdtZWluZXJAZ21haWwuY29tPgorICAq CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklM SVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgX19FVE5BVklWX0lPTU1VX0hf XworI2RlZmluZSBfX0VUTkFWSVZfSU9NTVVfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9pb21tdS5o Pgorc3RydWN0IGV0bmF2aXZfZ3B1OworCitzdHJ1Y3QgaW9tbXVfZG9tYWluICpldG5hdml2X2lv bW11X2RvbWFpbl9hbGxvYyhzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSk7Cit2b2lkIGV0bmF2aXZf aW9tbXVfZG9tYWluX3Jlc3RvcmUoc3RydWN0IGV0bmF2aXZfZ3B1ICpncHUsCisJc3RydWN0IGlv bW11X2RvbWFpbiAqZG9tYWluKTsKK3N0cnVjdCBpb21tdV9kb21haW4gKmV0bmF2aXZfaW9tbXVf djJfZG9tYWluX2FsbG9jKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1KTsKKworI2VuZGlmIC8qIF9f RVROQVZJVl9JT01NVV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2 L2V0bmF2aXZfaW9tbXVfdjIuYyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfaW9t bXVfdjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmZiYjRhZWQz ZGM4MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZf aW9tbXVfdjIuYwpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IENo cmlzdGlhbiBHbWVpbmVyIDxjaHJpc3RpYW4uZ21laW5lckBnbWFpbC5jb20+CisgICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IK KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh bG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+CisjaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2l6ZXMuaD4KKyNp bmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNp bmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2luY2x1ZGUgImV0bmF2aXZfZ3B1LmgiCisjaW5j bHVkZSAiZXRuYXZpdl9pb21tdS5oIgorI2luY2x1ZGUgInN0YXRlX2hpLnhtbC5oIgorCisKK3N0 cnVjdCBpb21tdV9kb21haW4gKmV0bmF2aXZfaW9tbXVfdjJfZG9tYWluX2FsbG9jKHN0cnVjdCBl dG5hdml2X2dwdSAqZ3B1KQoreworCS8qIFRPRE8gKi8KKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfaW9tbXVfdjIuaCBiL2RyaXZl cnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfaW9tbXVfdjIuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLjYwM2VhNDFjNTM4OQotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfaW9tbXVfdjIuaApAQCAtMCwwICsxLDI1IEBA CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IENocmlzdGlhbiBHbWVpbmVyIDxjaHJpc3RpYW4u Z21laW5lckBnbWFpbC5jb20+CisgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJs aXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws IGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1v cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0u ICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lm bmRlZiBfX0VUTkFWSVZfSU9NTVVfVjJfSF9fCisjZGVmaW5lIF9fRVROQVZJVl9JT01NVV9WMl9I X18KKworI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+CitzdHJ1Y3QgZXRuYXZpdl9ncHU7CisKK3N0 cnVjdCBpb21tdV9kb21haW4gKmV0bmF2aXZfaW9tbXVfdjJfZG9tYWluX2FsbG9jKHN0cnVjdCBl dG5hdml2X2dwdSAqZ3B1KTsKKworI2VuZGlmIC8qIF9fRVROQVZJVl9JT01NVV9WMl9IX18gKi8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfbW11LmMgYi9kcml2 ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X21tdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uNjc0M2JjNjQ4ZGM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9tbXUuYwpAQCAtMCwwICsxLDI5OSBAQAorLyoKKyAq IENvcHlyaWdodCAoQykgMjAxNSBFdG5hdml2IFByb2plY3QKKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBp dAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAor ICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LgorICovCisKKyNpbmNsdWRlICJldG5hdml2X2Rydi5oIgorI2luY2x1ZGUgImV0bmF2aXZf Z2VtLmgiCisjaW5jbHVkZSAiZXRuYXZpdl9ncHUuaCIKKyNpbmNsdWRlICJldG5hdml2X21tdS5o IgorCitzdGF0aWMgaW50IGV0bmF2aXZfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgaW9tbXVfZG9tYWlu ICppb21tdSwgc3RydWN0IGRldmljZSAqZGV2LAorCQl1bnNpZ25lZCBsb25nIGlvdmEsIGludCBm bGFncywgdm9pZCAqYXJnKQoreworCURCRygiKioqIGZhdWx0OiBpb3ZhPSUwOGx4LCBmbGFncz0l ZCIsIGlvdmEsIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGV0bmF2aXZfaW9tbXVfbWFw KHN0cnVjdCBldG5hdml2X2lvbW11ICppb21tdSwgdTMyIGlvdmEsCisJCXN0cnVjdCBzZ190YWJs ZSAqc2d0LCB1bnNpZ25lZCBsZW4sIGludCBwcm90KQoreworCXN0cnVjdCBpb21tdV9kb21haW4g KmRvbWFpbiA9IGlvbW11LT5kb21haW47CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl1bnNp Z25lZCBpbnQgZGEgPSBpb3ZhOworCXVuc2lnbmVkIGludCBpLCBqOworCWludCByZXQ7CisKKwlp ZiAoIWRvbWFpbiB8fCAhc2d0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvcl9lYWNoX3NnKHNn dC0+c2dsLCBzZywgc2d0LT5uZW50cywgaSkgeworCQl1MzIgcGEgPSBzZ19kbWFfYWRkcmVzcyhz ZykgLSBzZy0+b2Zmc2V0OworCQlzaXplX3QgYnl0ZXMgPSBzZ19kbWFfbGVuKHNnKSArIHNnLT5v ZmZzZXQ7CisKKwkJVkVSQigibWFwWyVkXTogJTA4eCAlMDh4KCV6eCkiLCBpLCBpb3ZhLCBwYSwg Ynl0ZXMpOworCisJCXJldCA9IGlvbW11X21hcChkb21haW4sIGRhLCBwYSwgYnl0ZXMsIHByb3Qp OworCQlpZiAocmV0KQorCQkJZ290byBmYWlsOworCisJCWRhICs9IGJ5dGVzOworCX0KKworCXJl dHVybiAwOworCitmYWlsOgorCWRhID0gaW92YTsKKworCWZvcl9lYWNoX3NnKHNndC0+c2dsLCBz ZywgaSwgaikgeworCQlzaXplX3QgYnl0ZXMgPSBzZ19kbWFfbGVuKHNnKSArIHNnLT5vZmZzZXQ7 CisKKwkJaW9tbXVfdW5tYXAoZG9tYWluLCBkYSwgYnl0ZXMpOworCQlkYSArPSBieXRlczsKKwl9 CisJcmV0dXJuIHJldDsKK30KKworaW50IGV0bmF2aXZfaW9tbXVfdW5tYXAoc3RydWN0IGV0bmF2 aXZfaW9tbXUgKmlvbW11LCB1MzIgaW92YSwKKwkJc3RydWN0IHNnX3RhYmxlICpzZ3QsIHVuc2ln bmVkIGxlbikKK3sKKwlzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4gPSBpb21tdS0+ZG9tYWlu OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWduZWQgaW50IGRhID0gaW92YTsKKwlp bnQgaTsKKworCWZvcl9lYWNoX3NnKHNndC0+c2dsLCBzZywgc2d0LT5uZW50cywgaSkgeworCQlz aXplX3QgYnl0ZXMgPSBzZ19kbWFfbGVuKHNnKSArIHNnLT5vZmZzZXQ7CisJCXNpemVfdCB1bm1h cHBlZDsKKworCQl1bm1hcHBlZCA9IGlvbW11X3VubWFwKGRvbWFpbiwgZGEsIGJ5dGVzKTsKKwkJ aWYgKHVubWFwcGVkIDwgYnl0ZXMpCisJCQlyZXR1cm4gdW5tYXBwZWQ7CisKKwkJVkVSQigidW5t YXBbJWRdOiAlMDh4KCV6eCkiLCBpLCBpb3ZhLCBieXRlcyk7CisKKwkJQlVHX09OKCFQQUdFX0FM SUdORUQoYnl0ZXMpKTsKKworCQlkYSArPSBieXRlczsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHZvaWQgZXRuYXZpdl9pb21tdV9yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgZXRuYXZpdl9p b21tdSAqbW11LAorCXN0cnVjdCBldG5hdml2X3ZyYW1fbWFwcGluZyAqbWFwcGluZykKK3sKKwlz dHJ1Y3QgZXRuYXZpdl9nZW1fb2JqZWN0ICpldG5hdml2X29iaiA9IG1hcHBpbmctPm9iamVjdDsK KworCWV0bmF2aXZfaW9tbXVfdW5tYXAobW11LCBtYXBwaW5nLT52cmFtX25vZGUuc3RhcnQsCisJ CQkgICAgZXRuYXZpdl9vYmotPnNndCwgZXRuYXZpdl9vYmotPmJhc2Uuc2l6ZSk7CisJZHJtX21t X3JlbW92ZV9ub2RlKCZtYXBwaW5nLT52cmFtX25vZGUpOworfQorCitpbnQgZXRuYXZpdl9pb21t dV9tYXBfZ2VtKHN0cnVjdCBldG5hdml2X2lvbW11ICptbXUsCisJc3RydWN0IGV0bmF2aXZfZ2Vt X29iamVjdCAqZXRuYXZpdl9vYmosIHUzMiBtZW1vcnlfYmFzZSwKKwlzdHJ1Y3QgZXRuYXZpdl92 cmFtX21hcHBpbmcgKm1hcHBpbmcpCit7CisJc3RydWN0IGV0bmF2aXZfdnJhbV9tYXBwaW5nICpm cmVlID0gTlVMTDsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndCA9IGV0bmF2aXZfb2JqLT5zZ3Q7CisJ c3RydWN0IGRybV9tbV9ub2RlICpub2RlOworCWludCByZXQ7CisKKwlsb2NrZGVwX2Fzc2VydF9o ZWxkKCZldG5hdml2X29iai0+bG9jayk7CisKKwltdXRleF9sb2NrKCZtbXUtPmxvY2spOworCisJ LyogdjEgTU1VIGNhbiBvcHRpbWl6ZSBzaW5nbGUgZW50cnkgKGNvbnRpZ3VvdXMpIHNjYXR0ZXJs aXN0cyAqLworCWlmIChzZ3QtPm5lbnRzID09IDEgJiYgIShldG5hdml2X29iai0+ZmxhZ3MgJiBF VE5BX0JPX0ZPUkNFX01NVSkpIHsKKwkJdTMyIGlvdmE7CisKKwkJaW92YSA9IHNnX2RtYV9hZGRy ZXNzKHNndC0+c2dsKSAtIG1lbW9yeV9iYXNlOworCQlpZiAoaW92YSA8IDB4ODAwMDAwMDAgLSBz Z19kbWFfbGVuKHNndC0+c2dsKSkgeworCQkJbWFwcGluZy0+aW92YSA9IGlvdmE7CisJCQlsaXN0 X2FkZF90YWlsKCZtYXBwaW5nLT5tbXVfbm9kZSwgJm1tdS0+bWFwcGluZ3MpOworCQkJbXV0ZXhf dW5sb2NrKCZtbXUtPmxvY2spOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlub2RlID0gJm1h cHBpbmctPnZyYW1fbm9kZTsKKwl3aGlsZSAoMSkgeworCQlzdHJ1Y3QgZXRuYXZpdl92cmFtX21h cHBpbmcgKm0sICpuOworCQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJCWJvb2wgZm91bmQ7CisK KwkJcmV0ID0gZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKCZtbXUtPm1tLCBub2RlLAorCQkJ ZXRuYXZpdl9vYmotPmJhc2Uuc2l6ZSwgMCwgbW11LT5sYXN0X2lvdmEsIH4wVUwsCisJCQlEUk1f TU1fU0VBUkNIX0RFRkFVTFQpOworCisJCWlmIChyZXQgIT0gLUVOT1NQQykKKwkJCWJyZWFrOwor CisJCS8qCisJCSAqIElmIHdlIGRpZCBub3Qgc2VhcmNoIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBN TVUgcmVnaW9uLAorCQkgKiB0cnkgYWdhaW4gaW4gY2FzZSB0aGVyZSBhcmUgZnJlZSBzbG90cy4K KwkJICovCisJCWlmIChtbXUtPmxhc3RfaW92YSkgeworCQkJbW11LT5sYXN0X2lvdmEgPSAwOwor CQkJbW11LT5uZWVkX2ZsdXNoID0gdHJ1ZTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogVHJ5 IHRvIHJldGlyZSBzb21lIGVudHJpZXMgKi8KKwkJZHJtX21tX2luaXRfc2NhbigmbW11LT5tbSwg ZXRuYXZpdl9vYmotPmJhc2Uuc2l6ZSwgMCwgMCk7CisKKwkJZm91bmQgPSAwOworCQlJTklUX0xJ U1RfSEVBRCgmbGlzdCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZnJlZSwgJm1tdS0+bWFwcGlu Z3MsIG1tdV9ub2RlKSB7CisJCQkvKiBJZiB0aGlzIHZyYW0gbm9kZSBoYXMgbm90IGJlZW4gdXNl ZCwgc2tpcCB0aGlzLiAqLworCQkJaWYgKCFmcmVlLT52cmFtX25vZGUubW0pCisJCQkJY29udGlu dWU7CisKKwkJCS8qCisJCQkgKiBJZiB0aGUgaW92YSBpcyBwaW5uZWQsIHRoZW4gaXQncyBpbi11 c2UsCisJCQkgKiBzbyB3ZSBtdXN0IGtlZXAgaXRzIG1hcHBpbmcuCisJCQkgKi8KKwkJCWlmIChm cmVlLT51c2UpCisJCQkJY29udGludWU7CisKKwkJCWxpc3RfYWRkKCZmcmVlLT5zY2FuX25vZGUs ICZsaXN0KTsKKwkJCWlmIChkcm1fbW1fc2Nhbl9hZGRfYmxvY2soJmZyZWUtPnZyYW1fbm9kZSkp IHsKKwkJCQlmb3VuZCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoIWZv dW5kKSB7CisJCQkvKiBOb3RoaW5nIGZvdW5kLCBjbGVhbiB1cCBhbmQgZmFpbCAqLworCQkJbGlz dF9mb3JfZWFjaF9lbnRyeV9zYWZlKG0sIG4sICZsaXN0LCBzY2FuX25vZGUpCisJCQkJQlVHX09O KGRybV9tbV9zY2FuX3JlbW92ZV9ibG9jaygmbS0+dnJhbV9ub2RlKSk7CisJCQlicmVhazsKKwkJ fQorCisJCS8qCisJCSAqIGRybV9tbSBkb2VzIG5vdCBhbGxvdyBhbnkgb3RoZXIgb3BlcmF0aW9u cyB3aGlsZQorCQkgKiBzY2FubmluZywgc28gd2UgaGF2ZSB0byByZW1vdmUgYWxsIGJsb2NrcyBm aXJzdC4KKwkJICogSWYgZHJtX21tX3NjYW5fcmVtb3ZlX2Jsb2NrKCkgcmV0dXJucyBmYWxzZSwg d2UKKwkJICogY2FuIGxlYXZlIHRoZSBibG9jayBwaW5uZWQuCisJCSAqLworCQlsaXN0X2Zvcl9l YWNoX2VudHJ5X3NhZmUobSwgbiwgJmxpc3QsIHNjYW5fbm9kZSkKKwkJCWlmICghZHJtX21tX3Nj YW5fcmVtb3ZlX2Jsb2NrKCZtLT52cmFtX25vZGUpKQorCQkJCWxpc3RfZGVsX2luaXQoJm0tPnNj YW5fbm9kZSk7CisKKwkJLyoKKwkJICogVW5tYXAgdGhlIGJsb2NrcyB3aGljaCBuZWVkIHRvIGJl IHJlYXBlZCBmcm9tIHRoZSBNTVUuCisJCSAqIENsZWFyIHRoZSBtbXUgcG9pbnRlciB0byBwcmV2 ZW50IHRoZSBnZXRfaW92YSBmaW5kaW5nCisJCSAqIHRoaXMgbWFwcGluZy4KKwkJICovCisJCWxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZShtLCBuLCAmbGlzdCwgc2Nhbl9ub2RlKSB7CisJCQlldG5h dml2X2lvbW11X3JlbW92ZV9tYXBwaW5nKG1tdSwgbSk7CisJCQltLT5tbXUgPSBOVUxMOworCQkJ bGlzdF9kZWxfaW5pdCgmbS0+bW11X25vZGUpOworCQkJbGlzdF9kZWxfaW5pdCgmbS0+c2Nhbl9u b2RlKTsKKwkJfQorCisJCS8qCisJCSAqIFdlIHJlbW92ZWQgZW5vdWdoIG1hcHBpbmdzIHNvIHRo YXQgdGhlIG5ldyBhbGxvY2F0aW9uIHdpbGwKKwkJICogc3VjY2VlZC4gIEVuc3VyZSB0aGF0IHRo ZSBNTVUgd2lsbCBiZSBmbHVzaGVkIGJlZm9yZSB0aGUKKwkJICogYXNzb2NpYXRlZCBjb21taXQg cmVxdWVzdGluZyB0aGlzIG1hcHBpbmcsIGFuZCByZXRyeSB0aGUKKwkJICogYWxsb2NhdGlvbiBv bmUgbW9yZSB0aW1lLgorCQkgKi8KKwkJbW11LT5uZWVkX2ZsdXNoID0gdHJ1ZTsKKwl9CisKKwlp ZiAocmV0IDwgMCkgeworCQltdXRleF91bmxvY2soJm1tdS0+bG9jayk7CisJCXJldHVybiByZXQ7 CisJfQorCisJbW11LT5sYXN0X2lvdmEgPSBub2RlLT5zdGFydCArIGV0bmF2aXZfb2JqLT5iYXNl LnNpemU7CisJbWFwcGluZy0+aW92YSA9IG5vZGUtPnN0YXJ0OworCXJldCA9IGV0bmF2aXZfaW9t bXVfbWFwKG1tdSwgbm9kZS0+c3RhcnQsIHNndCwgZXRuYXZpdl9vYmotPmJhc2Uuc2l6ZSwKKwkJ CQlJT01NVV9SRUFEIHwgSU9NTVVfV1JJVEUpOworCisJaWYgKHJldCA8IDApIHsKKwkJZHJtX21t X3JlbW92ZV9ub2RlKG5vZGUpOworCQltdXRleF91bmxvY2soJm1tdS0+bG9jayk7CisJCXJldHVy biByZXQ7CisJfQorCisJbGlzdF9hZGRfdGFpbCgmbWFwcGluZy0+bW11X25vZGUsICZtbXUtPm1h cHBpbmdzKTsKKwltdXRleF91bmxvY2soJm1tdS0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQor Cit2b2lkIGV0bmF2aXZfaW9tbXVfdW5tYXBfZ2VtKHN0cnVjdCBldG5hdml2X2lvbW11ICptbXUs CisJc3RydWN0IGV0bmF2aXZfdnJhbV9tYXBwaW5nICptYXBwaW5nKQoreworCVdBUk5fT04obWFw cGluZy0+dXNlKTsKKworCW11dGV4X2xvY2soJm1tdS0+bG9jayk7CisKKwkvKiBJZiB0aGUgdnJh bSBub2RlIGlzIG9uIHRoZSBtbSwgdW5tYXAgYW5kIHJlbW92ZSB0aGUgbm9kZSAqLworCWlmICht YXBwaW5nLT52cmFtX25vZGUubW0gPT0gJm1tdS0+bW0pCisJCWV0bmF2aXZfaW9tbXVfcmVtb3Zl X21hcHBpbmcobW11LCBtYXBwaW5nKTsKKworCWxpc3RfZGVsKCZtYXBwaW5nLT5tbXVfbm9kZSk7 CisJbXV0ZXhfdW5sb2NrKCZtbXUtPmxvY2spOworfQorCit2b2lkIGV0bmF2aXZfaW9tbXVfZGVz dHJveShzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11KQoreworCWRybV9tbV90YWtlZG93bigmbW11 LT5tbSk7CisJaW9tbXVfZG9tYWluX2ZyZWUobW11LT5kb21haW4pOworCWtmcmVlKG1tdSk7Cit9 CisKK3N0cnVjdCBldG5hdml2X2lvbW11ICpldG5hdml2X2lvbW11X25ldyhzdHJ1Y3QgZXRuYXZp dl9ncHUgKmdwdSwKKwlzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIGVudW0gZXRuYXZpdl9p b21tdV92ZXJzaW9uIHZlcnNpb24pCit7CisJc3RydWN0IGV0bmF2aXZfaW9tbXUgKm1tdTsKKwor CW1tdSA9IGt6YWxsb2Moc2l6ZW9mKCptbXUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1tdSkKKwkJ cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwltbXUtPmRvbWFpbiA9IGRvbWFpbjsKKwltbXUt PmdwdSA9IGdwdTsKKwltbXUtPnZlcnNpb24gPSB2ZXJzaW9uOworCW11dGV4X2luaXQoJm1tdS0+ bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJm1tdS0+bWFwcGluZ3MpOworCisJZHJtX21tX2luaXQo Jm1tdS0+bW0sIGRvbWFpbi0+Z2VvbWV0cnkuYXBlcnR1cmVfc3RhcnQsCisJCSAgICBkb21haW4t Pmdlb21ldHJ5LmFwZXJ0dXJlX2VuZCAtCisJCSAgICAgIGRvbWFpbi0+Z2VvbWV0cnkuYXBlcnR1 cmVfc3RhcnQgKyAxKTsKKworCWlvbW11X3NldF9mYXVsdF9oYW5kbGVyKGRvbWFpbiwgZXRuYXZp dl9mYXVsdF9oYW5kbGVyLCBncHUtPmRldik7CisKKwlyZXR1cm4gbW11OworfQorCitzaXplX3Qg ZXRuYXZpdl9pb21tdV9kdW1wX3NpemUoc3RydWN0IGV0bmF2aXZfaW9tbXUgKmlvbW11KQorewor CXN0cnVjdCBldG5hdml2X2lvbW11X29wcyAqb3BzOworCisJb3BzID0gY29udGFpbmVyX29mKGlv bW11LT5kb21haW4tPm9wcywgc3RydWN0IGV0bmF2aXZfaW9tbXVfb3BzLCBvcHMpOworCisJcmV0 dXJuIG9wcy0+ZHVtcF9zaXplKGlvbW11LT5kb21haW4pOworfQorCit2b2lkIGV0bmF2aXZfaW9t bXVfZHVtcChzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqaW9tbXUsIHZvaWQgKmJ1ZikKK3sKKwlzdHJ1 Y3QgZXRuYXZpdl9pb21tdV9vcHMgKm9wczsKKworCW9wcyA9IGNvbnRhaW5lcl9vZihpb21tdS0+ ZG9tYWluLT5vcHMsIHN0cnVjdCBldG5hdml2X2lvbW11X29wcywgb3BzKTsKKworCW9wcy0+ZHVt cChpb21tdS0+ZG9tYWluLCBidWYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0 bmF2aXYvZXRuYXZpdl9tbXUuaCBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfbW11 LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mZmYyMTVhNDc2MzAK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X21tdS5o CkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXRuYXZpdiBQcm9q ZWN0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAq IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNI QU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoK KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIF9fRVROQVZJVl9N TVVfSF9fCisjZGVmaW5lIF9fRVROQVZJVl9NTVVfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9pb21t dS5oPgorCitlbnVtIGV0bmF2aXZfaW9tbXVfdmVyc2lvbiB7CisJRVROQVZJVl9JT01NVV9WMSA9 IDAsCisJRVROQVZJVl9JT01NVV9WMiwKK307CisKK3N0cnVjdCBldG5hdml2X2dwdTsKK3N0cnVj dCBldG5hdml2X3ZyYW1fbWFwcGluZzsKKworc3RydWN0IGV0bmF2aXZfaW9tbXVfb3BzIHsKKwlz dHJ1Y3QgaW9tbXVfb3BzIG9wczsKKwlzaXplX3QgKCpkdW1wX3NpemUpKHN0cnVjdCBpb21tdV9k b21haW4gKik7CisJdm9pZCAoKmR1bXApKHN0cnVjdCBpb21tdV9kb21haW4gKiwgdm9pZCAqKTsK K307CisKK3N0cnVjdCBldG5hdml2X2lvbW11IHsKKwlzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdTsK KwlzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW47CisKKwllbnVtIGV0bmF2aXZfaW9tbXVfdmVy c2lvbiB2ZXJzaW9uOworCisJLyogbWVtb3J5IG1hbmFnZXIgZm9yIEdQVSBhZGRyZXNzIGFyZWEg Ki8KKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG1hcHBpbmdzOworCXN0 cnVjdCBkcm1fbW0gbW07CisJdTMyIGxhc3RfaW92YTsKKwlib29sIG5lZWRfZmx1c2g7Cit9Owor CitzdHJ1Y3QgZXRuYXZpdl9nZW1fb2JqZWN0OworCitpbnQgZXRuYXZpdl9pb21tdV9hdHRhY2go c3RydWN0IGV0bmF2aXZfaW9tbXUgKmlvbW11LCBjb25zdCBjaGFyICoqbmFtZXMsCisJaW50IGNu dCk7CitpbnQgZXRuYXZpdl9pb21tdV9tYXAoc3RydWN0IGV0bmF2aXZfaW9tbXUgKmlvbW11LCB1 MzIgaW92YSwKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndCwgdW5zaWduZWQgbGVuLCBpbnQgcHJvdCk7 CitpbnQgZXRuYXZpdl9pb21tdV91bm1hcChzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqaW9tbXUsIHUz MiBpb3ZhLAorCXN0cnVjdCBzZ190YWJsZSAqc2d0LCB1bnNpZ25lZCBsZW4pOworaW50IGV0bmF2 aXZfaW9tbXVfbWFwX2dlbShzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11LAorCXN0cnVjdCBldG5h dml2X2dlbV9vYmplY3QgKmV0bmF2aXZfb2JqLCB1MzIgbWVtb3J5X2Jhc2UsCisJc3RydWN0IGV0 bmF2aXZfdnJhbV9tYXBwaW5nICptYXBwaW5nKTsKK3ZvaWQgZXRuYXZpdl9pb21tdV91bm1hcF9n ZW0oc3RydWN0IGV0bmF2aXZfaW9tbXUgKm1tdSwKKwlzdHJ1Y3QgZXRuYXZpdl92cmFtX21hcHBp bmcgKm1hcHBpbmcpOwordm9pZCBldG5hdml2X2lvbW11X2Rlc3Ryb3koc3RydWN0IGV0bmF2aXZf aW9tbXUgKmlvbW11KTsKKworc2l6ZV90IGV0bmF2aXZfaW9tbXVfZHVtcF9zaXplKHN0cnVjdCBl dG5hdml2X2lvbW11ICppb21tdSk7Cit2b2lkIGV0bmF2aXZfaW9tbXVfZHVtcChzdHJ1Y3QgZXRu YXZpdl9pb21tdSAqaW9tbXUsIHZvaWQgKmJ1Zik7CisKK3N0cnVjdCBldG5hdml2X2lvbW11ICpl dG5hdml2X2lvbW11X25ldyhzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSwKKwlzdHJ1Y3QgaW9tbXVf ZG9tYWluICpkb21haW4sIGVudW0gZXRuYXZpdl9pb21tdV92ZXJzaW9uIHZlcnNpb24pOworCisj ZW5kaWYgLyogX19FVE5BVklWX01NVV9IX18gKi8KLS0gCjIuNi4yCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=