From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [PATCH v3 1/2] drm: Add library for shmem backed GEM objects Date: Tue, 11 Sep 2018 14:43:59 +0200 Message-ID: <20180911124400.40588-2-noralf@tronnes.org> References: <20180911124400.40588-1-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtp.domeneshop.no (smtp.domeneshop.no [IPv6:2a01:5b40:0:3005::1]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8BCDF6E376 for ; Tue, 11 Sep 2018 12:44:14 +0000 (UTC) In-Reply-To: <20180911124400.40588-1-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: sam@ravnborg.org, david@lechnology.com List-Id: dri-devel@lists.freedesktop.org VGhpcyBhZGRzIGEgbGlicmFyeSBmb3Igc2htZW0gYmFja2VkIEdFTSBvYmplY3RzIHdpdGggdGhl IG5lY2Vzc2FyeQpkcm1fZHJpdmVyIGNhbGxiYWNrcy4KClNpZ25lZC1vZmYtYnk6IE5vcmFsZiBU csO4bm5lcyA8bm9yYWxmQHRyb25uZXMub3JnPgotLS0KCkNoYW5nZXMgc2luY2UgdmVyc2lvbiAy OgotIEdyYW1tYXIgKFNhbSBSYXZuYm9yZykKLSBzL2RybV9nZW1fc2htZW1fcHV0X3BhZ2VzX3Vu bG9ja2VkL2RybV9nZW1fc2htZW1fcHV0X3BhZ2VzX2xvY2tlZC8KICAoU2FtIFJhdm5ib3JnKQot IEFkZCBkZWJ1ZyBvdXB1dCBpbiBlcnJvciBwYXRoIChTYW0gUmF2bmJvcmcpCgpDaGFuZ2VzIHNp bmNlIHZlcnNpb24gMToKLSBGaXggbWlzc2luZyBhcmd1bWVudCBpbiBkb2NzIChrYnVpbGQgdGVz dCByb2JvdCkKLSBGaXg6IHNwYXJzZTogZXhwcmVzc2lvbiB1c2luZyBzaXplb2Yodm9pZCkgKGti dWlsZCB0ZXN0IHJvYm90KQotIFJlYmFzaW5nIGdhdmUgYSBuZXcgY2hlY2twYXRjaCB3YXJuaW5n LCBzbyBJIGNoYW5nZWQgdG8gYml0ZmllbGRzOgogIENIRUNLOiBBdm9pZCB1c2luZyBib29sIHN0 cnVjdHVyZSBtZW1iZXJzIGJlY2F1c2Ugb2YgcG9zc2libGUgYWxpZ25tZW50IGlzc3VlcyAtIHNl ZTogaHR0cHM6Ly9sa21sLm9yZy9sa21sLzIwMTcvMTEvMjEvMzg0CiAgIzgzNDogRklMRTogaW5j bHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuaDo4NDoKICArICAgICAgIGJvb2wgcGFnZXNf bWFya19kaXJ0eV9vbl9wdXQ7CiAgIzg0MTogRklMRTogaW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1l bV9oZWxwZXIuaDo5MToKICArICAgICAgIGJvb2wgcGFnZXNfbWFya19hY2Nlc3NlZF9vbl9wdXQ7 CgogRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy1oZWxwZXJzLnJzdCAgfCAgMTIgKwogZHJpdmVy cy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgICAgICAgfCAgIDYgKwogZHJpdmVycy9ncHUvZHJt L01ha2VmaWxlICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2RybV9nZW1f c2htZW1faGVscGVyLmMgfCA2NzggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBp bmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oICAgICB8IDE5OCArKysrKysrKysrCiA1 IGZpbGVzIGNoYW5nZWQsIDg5NSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBp bmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oCgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRh dGlvbi9ncHUvZHJtLWttcy1oZWxwZXJzLnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMt aGVscGVycy5yc3QKaW5kZXggZjljZmNkY2RmMDI0Li5iYzI0YjFiNTIxNmEgMTAwNjQ0Ci0tLSBh L0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMtaGVscGVycy5yc3QKKysrIGIvRG9jdW1lbnRhdGlv bi9ncHUvZHJtLWttcy1oZWxwZXJzLnJzdApAQCAtMzI2LDMgKzMyNiwxNSBAQCBMZWdhY3kgQ1JU Qy9Nb2Rlc2V0IEhlbHBlciBGdW5jdGlvbnMgUmVmZXJlbmNlCiAKIC4uIGtlcm5lbC1kb2M6OiBk cml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKICAgIDpleHBvcnQ6CisKK1NITUVNIEdF TSBIZWxwZXIgUmVmZXJlbmNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBrZXJu ZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMKKyAgIDpkb2M6 IG92ZXJ2aWV3CisKKy4uIGtlcm5lbC1kb2M6OiBpbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hl bHBlci5oCisgICA6aW50ZXJuYWw6CisKKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0v ZHJtX2dlbV9zaG1lbV9oZWxwZXIuYworICAgOmV4cG9ydDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggY2I4ODUyOGU3 YjEwLi5kYjU4OGFlNDRiY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC0xNTcsNiArMTU3LDEyIEBAIGNvbmZpZyBE Uk1fS01TX0NNQV9IRUxQRVIKIAloZWxwCiAJICBDaG9vc2UgdGhpcyBpZiB5b3UgbmVlZCB0aGUg S01TIENNQSBoZWxwZXIgZnVuY3Rpb25zCiAKK2NvbmZpZyBEUk1fR0VNX1NITUVNX0hFTFBFUgor CWJvb2wKKwlkZXBlbmRzIG9uIERSTQorCWhlbHAKKwkgIENob29zZSB0aGlzIGlmIHlvdSBuZWVk IHRoZSBHRU0gc2htZW0gaGVscGVyIGZ1bmN0aW9ucworCiBjb25maWcgRFJNX1ZNCiAJYm9vbAog CWRlcGVuZHMgb24gRFJNICYmIE1NVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2Vm aWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IGE2NzcxY2VmODVlMi4uYzY3OTg1 OTA3OTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVy cy9ncHUvZHJtL01ha2VmaWxlCkBAIC0yNCw2ICsyNCw3IEBAIGRybS0kKENPTkZJR19EUk1fTElC X1JBTkRPTSkgKz0gbGliL2RybV9yYW5kb20ubwogZHJtLSQoQ09ORklHX0RSTV9WTSkgKz0gZHJt X3ZtLm8KIGRybS0kKENPTkZJR19DT01QQVQpICs9IGRybV9pb2MzMi5vCiBkcm0tJChDT05GSUdf RFJNX0dFTV9DTUFfSEVMUEVSKSArPSBkcm1fZ2VtX2NtYV9oZWxwZXIubworZHJtLSQoQ09ORklH X0RSTV9HRU1fU0hNRU1fSEVMUEVSKSArPSBkcm1fZ2VtX3NobWVtX2hlbHBlci5vCiBkcm0tJChD T05GSUdfUENJKSArPSBhdGlfcGNpZ2FydC5vCiBkcm0tJChDT05GSUdfRFJNX1BBTkVMKSArPSBk cm1fcGFuZWwubwogZHJtLSQoQ09ORklHX09GKSArPSBkcm1fb2YubwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJt X2dlbV9zaG1lbV9oZWxwZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLjA1NjQxYzdlNTM0MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1f Z2VtX3NobWVtX2hlbHBlci5jCkBAIC0wLDAgKzEsNjc4IEBACisvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAyMDE4IE5vcmFsZiBUcsO4bm5lcwor ICovCisKKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+CisjaW5jbHVkZSA8bGludXgvZXhwb3J0 Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zaG1lbV9mcy5o PgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisK KyNpbmNsdWRlIDxkcm0vZHJtX2RldmljZS5oPgorI2luY2x1ZGUgPGRybS9kcm1fZHJ2Lmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9w cmltZS5oPgorI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4KKworLyoqCisgKiBET0M6IG92ZXJ2 aWV3CisgKgorICogVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIGhlbHBlcnMgZm9yIEdFTSBvYmplY3Rz IGJhY2tlZCBieSBzaG1lbSBidWZmZXJzCisgKiBhbGxvY2F0ZWQgdXNpbmcgYW5vbnltb3VzIHBh Z2VhYmxlIG1lbW9yeS4KKyAqLworCisvKioKKyAqIGRybV9nZW1fc2htZW1fY3JlYXRlIC0gQWxs b2NhdGUgYW4gb2JqZWN0IHdpdGggdGhlIGdpdmVuIHNpemUKKyAqIEBkZXY6IERSTSBkZXZpY2UK KyAqIEBzaXplOiBTaXplIG9mIHRoZSBvYmplY3QgdG8gYWxsb2NhdGUKKyAqCisgKiBUaGlzIGZ1 bmN0aW9uIGNyZWF0ZXMgYSBzaG1lbSBHRU0gb2JqZWN0LiBUaGUgZGVmYXVsdCBjYWNoZSBtb2Rl IGlzCisgKiBEUk1fR0VNX1NITUVNX0JPX0NBQ0hFRC4gVGhlICZkcm1fZHJpdmVyLT5nZW1fY3Jl YXRlX29iamVjdCBjYWxsYmFjayBjYW4gYmUKKyAqIHVzZWQgdG8gb3ZlcnJpZGUgdGhpcy4KKyAq CisgKiBSZXR1cm5zOgorICogQSBzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKiBvbiBzdWNj ZXNzIG9yIGFuIEVSUl9QVFIoKS1lbmNvZGVkIG5lZ2F0aXZlCisgKiBlcnJvciBjb2RlIG9uIGZh aWx1cmUuCisgKi8KK3N0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqZHJtX2dlbV9zaG1lbV9j cmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGRy bV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsK KwlpbnQgcmV0OworCisJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CisKKwlpZiAoZGV2LT5kcml2 ZXItPmdlbV9jcmVhdGVfb2JqZWN0KQorCQlvYmogPSBkZXYtPmRyaXZlci0+Z2VtX2NyZWF0ZV9v YmplY3QoZGV2LCBzaXplKTsKKwllbHNlCisJCW9iaiA9IGt6YWxsb2Moc2l6ZW9mKCpzaG1lbSks IEdGUF9LRVJORUwpOworCWlmICghb2JqKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwor CXNobWVtID0gdG9fZHJtX2dlbV9zaG1lbV9vYmoob2JqKTsKKworCWlmICghZGV2LT5kcml2ZXIt PmdlbV9jcmVhdGVfb2JqZWN0KQorCQlzaG1lbS0+Y2FjaGVfbW9kZSA9IERSTV9HRU1fU0hNRU1f Qk9fQ0FDSEVEOworCisJcmV0ID0gZHJtX2dlbV9vYmplY3RfaW5pdChkZXYsIG9iaiwgc2l6ZSk7 CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZTsKKworCXJldCA9IGRybV9nZW1fY3JlYXRlX21t YXBfb2Zmc2V0KG9iaik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcmVsZWFzZTsKKworCW11dGV4 X2luaXQoJnNobWVtLT5wYWdlc19sb2NrKTsKKwltdXRleF9pbml0KCZzaG1lbS0+dm1hcF9sb2Nr KTsKKworCXJldHVybiBzaG1lbTsKKworZXJyX3JlbGVhc2U6CisJZHJtX2dlbV9vYmplY3RfcmVs ZWFzZShvYmopOworZXJyX2ZyZWU6CisJa2ZyZWUoc2htZW0pOworCisJcmV0dXJuIEVSUl9QVFIo cmV0KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9nZW1fc2htZW1fY3JlYXRlKTsKKworLyoq CisgKiBkcm1fZ2VtX3NobWVtX2ZyZWVfb2JqZWN0IC0gRnJlZSByZXNvdXJjZXMgYXNzb2NpYXRl ZCB3aXRoIGEgc2htZW0gR0VNIG9iamVjdAorICogQG9iajogR0VNIG9iamVjdCB0byBmcmVlCisg KgorICogVGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgdGhlIEdFTSBvYmplY3Qgc3RhdGUgYW5kIGZy ZWVzIHRoZSBtZW1vcnkgdXNlZCB0bworICogc3RvcmUgdGhlIG9iamVjdCBpdHNlbGYuIERyaXZl cnMgdXNpbmcgdGhlIHNobWVtIGhlbHBlcnMgc2hvdWxkIHNldCB0aGlzIGFzCisgKiB0aGVpciAm ZHJtX2RyaXZlci5nZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQgY2FsbGJhY2suCisgKi8KK3ZvaWQg ZHJtX2dlbV9zaG1lbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sK KwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtID0gdG9fZHJtX2dlbV9zaG1lbV9v Ymoob2JqKTsKKworCVdBUk5fT04oc2htZW0tPnZtYXBfdXNlX2NvdW50KTsKKworCWlmIChvYmot PmltcG9ydF9hdHRhY2gpIHsKKwkJc2htZW0tPnBhZ2VzX3VzZV9jb3VudC0tOworCQlkcm1fcHJp bWVfZ2VtX2Rlc3Ryb3kob2JqLCBzaG1lbS0+c2d0KTsKKwkJa3ZmcmVlKHNobWVtLT5wYWdlcyk7 CisJfQorCisJV0FSTl9PTihzaG1lbS0+cGFnZXNfdXNlX2NvdW50KTsKKworCWRybV9nZW1fb2Jq ZWN0X3JlbGVhc2Uob2JqKTsKKwltdXRleF9kZXN0cm95KCZzaG1lbS0+cGFnZXNfbG9jayk7CisJ bXV0ZXhfZGVzdHJveSgmc2htZW0tPnZtYXBfbG9jayk7CisJa2ZyZWUoc2htZW0pOworfQorRVhQ T1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9mcmVlX29iamVjdCk7CisKK3N0YXRpYyBpbnQg ZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXNfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVj dCAqc2htZW0pCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmc2htZW0tPmJhc2U7 CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKworCWlmIChzaG1lbS0+cGFnZXNfdXNlX2NvdW50Kysg PiAwKQorCQlyZXR1cm4gMDsKKworCXBhZ2VzID0gZHJtX2dlbV9nZXRfcGFnZXMob2JqKTsKKwlp ZiAoSVNfRVJSKHBhZ2VzKSkgeworCQlEUk1fREVCVUdfS01TKCJGYWlsZWQgdG8gZ2V0IHBhZ2Vz ICglbGQpXG4iLCBQVFJfRVJSKHBhZ2VzKSk7CisJCXNobWVtLT5wYWdlc191c2VfY291bnQgPSAw OworCQlyZXR1cm4gUFRSX0VSUihwYWdlcyk7CisJfQorCisJc2htZW0tPnBhZ2VzID0gcGFnZXM7 CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzIC0gQWxs b2NhdGUgYmFja2luZyBwYWdlcyBmb3IgYSBzaG1lbSBHRU0gb2JqZWN0CisgKiBAc2htZW06IHNo bWVtIEdFTSBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdGhhdCBiYWNr aW5nIHBhZ2VzIGV4aXN0cyBmb3IgdGhlIHNobWVtIEdFTSBvYmplY3QKKyAqIGFuZCBpbmNyZWFz ZXMgdGhlIHVzZSBjb3VudC4KKyAqCisgKiBSZXR1cm5zOgorICogMCBvbiBzdWNjZXNzIG9yIGEg bmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgZHJtX2dlbV9zaG1lbV9n ZXRfcGFnZXMoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSkKK3sKKwlpbnQgcmV0 OworCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzaG1lbS0+cGFnZXNfbG9jayk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBkcm1fZ2VtX3NobWVtX2dldF9wYWdl c19sb2NrZWQoc2htZW0pOworCW11dGV4X3VubG9jaygmc2htZW0tPnBhZ2VzX2xvY2spOworCisJ cmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXMpOwor CitzdGF0aWMgdm9pZCBkcm1fZ2VtX3NobWVtX3B1dF9wYWdlc19sb2NrZWQoc3RydWN0IGRybV9n ZW1fc2htZW1fb2JqZWN0ICpzaG1lbSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9 ICZzaG1lbS0+YmFzZTsKKworCWlmIChXQVJOX09OX09OQ0UoIXNobWVtLT5wYWdlc191c2VfY291 bnQpKQorCQlyZXR1cm47CisKKwlpZiAoLS1zaG1lbS0+cGFnZXNfdXNlX2NvdW50ID4gMCkKKwkJ cmV0dXJuOworCisJZHJtX2dlbV9wdXRfcGFnZXMob2JqLCBzaG1lbS0+cGFnZXMsCisJCQkgIHNo bWVtLT5wYWdlc19tYXJrX2RpcnR5X29uX3B1dCwKKwkJCSAgc2htZW0tPnBhZ2VzX21hcmtfYWNj ZXNzZWRfb25fcHV0KTsKKwlzaG1lbS0+cGFnZXMgPSBOVUxMOworfQorCisvKgorICogZHJtX2dl bV9zaG1lbV9wdXRfcGFnZXMgLSBEZWNyZWFzZSB1c2UgY291bnQgb24gdGhlIGJhY2tpbmcgcGFn ZXMgZm9yIGEgc2htZW0gR0VNIG9iamVjdAorICogQHNobWVtOiBzaG1lbSBHRU0gb2JqZWN0Cisg KgorICogVGhpcyBmdW5jdGlvbiBkZWNyZWFzZXMgdGhlIHVzZSBjb3VudCBhbmQgcHV0cyB0aGUg YmFja2luZyBwYWdlcyB3aGVuIHVzZSBkcm9wcyB0byB6ZXJvLgorICovCit2b2lkIGRybV9nZW1f c2htZW1fcHV0X3BhZ2VzKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pCit7CisJ bXV0ZXhfbG9jaygmc2htZW0tPnBhZ2VzX2xvY2spOworCWRybV9nZW1fc2htZW1fcHV0X3BhZ2Vz X2xvY2tlZChzaG1lbSk7CisJbXV0ZXhfdW5sb2NrKCZzaG1lbS0+cGFnZXNfbG9jayk7Cit9CitF WFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fcHV0X3BhZ2VzKTsKKworc3RhdGljIGludCBkcm1f Z2VtX3NobWVtX3ZtYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0p Cit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmc2htZW0tPmJhc2U7CisJaW50IHJl dDsKKworCWlmIChzaG1lbS0+dm1hcF91c2VfY291bnQrKyA+IDApCisJCXJldHVybiAwOworCisJ cmV0ID0gZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXMoc2htZW0pOworCWlmIChyZXQpCisJCWdvdG8g ZXJyX3plcm9fdXNlOworCisJaWYgKG9iai0+aW1wb3J0X2F0dGFjaCkgeworCQlzaG1lbS0+dmFk ZHIgPSBkbWFfYnVmX3ZtYXAob2JqLT5pbXBvcnRfYXR0YWNoLT5kbWFidWYpOworCX0gZWxzZSB7 CisJCXBncHJvdF90IHByb3Q7CisKKwkJc3dpdGNoIChzaG1lbS0+Y2FjaGVfbW9kZSkgeworCQlj YXNlIERSTV9HRU1fU0hNRU1fQk9fVU5LTk9XTjoKKwkJCURSTV9ERUJVR19LTVMoIkNhbid0IHZt YXAgY2FjaGUgbW9kZSBpcyB1bmtub3duXG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3Rv IGVycl9wdXRfcGFnZXM7CisKKwkJY2FzZSBEUk1fR0VNX1NITUVNX0JPX1dSSVRFQ09NQklORUQ6 CisJCQlwcm90ID0gcGdwcm90X3dyaXRlY29tYmluZShQQUdFX0tFUk5FTCk7CisJCQlicmVhazsK KworCQljYXNlIERSTV9HRU1fU0hNRU1fQk9fVU5DQUNIRUQ6CisJCQlwcm90ID0gcGdwcm90X25v bmNhY2hlZChQQUdFX0tFUk5FTCk7CisJCQlicmVhazsKKworCQljYXNlIERSTV9HRU1fU0hNRU1f Qk9fQ0FDSEVEOgorCQkJcHJvdCA9IFBBR0VfS0VSTkVMOworCQkJYnJlYWs7CisJCX0KKworCQlz aG1lbS0+dmFkZHIgPSB2bWFwKHNobWVtLT5wYWdlcywgb2JqLT5zaXplID4+IFBBR0VfU0hJRlQs IFZNX01BUCwgcHJvdCk7CisJfQorCisJaWYgKCFzaG1lbS0+dmFkZHIpIHsKKwkJRFJNX0RFQlVH X0tNUygiRmFpbGVkIHRvIHZtYXAgcGFnZXNcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3Rv IGVycl9wdXRfcGFnZXM7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9wdXRfcGFnZXM6CisJZHJt X2dlbV9zaG1lbV9wdXRfcGFnZXMoc2htZW0pOworZXJyX3plcm9fdXNlOgorCXNobWVtLT52bWFw X3VzZV9jb3VudCA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZHJtX2dlbV9zaG1l bV92bWFwIC0gQ3JlYXRlIGEgdmlydHVhbCBtYXBwaW5nIGZvciBhIHNobWVtIEdFTSBvYmplY3QK KyAqIEBzaG1lbTogc2htZW0gR0VNIG9iamVjdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWFrZXMg c3VyZSB0aGF0IGEgdmlydHVhbCBhZGRyZXNzIGV4aXN0cyBmb3IgdGhlIGJ1ZmZlciBiYWNraW5n CisgKiB0aGUgc2htZW0gR0VNIG9iamVjdC4KKyAqCisgKiBSZXR1cm5zOgorICogMCBvbiBzdWNj ZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgZHJtX2dl bV9zaG1lbV92bWFwKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pCit7CisJaW50 IHJldDsKKworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmc2htZW0tPnZtYXBfbG9j ayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBkcm1fZ2VtX3NobWVtX3ZtYXBf bG9ja2VkKHNobWVtKTsKKwltdXRleF91bmxvY2soJnNobWVtLT52bWFwX2xvY2spOworCisJcmV0 dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9zaG1lbV92bWFwKTsKKworc3RhdGlj IHZvaWQgZHJtX2dlbV9zaG1lbV92dW5tYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29i amVjdCAqc2htZW0pCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmc2htZW0tPmJh c2U7CisKKwlpZiAoV0FSTl9PTl9PTkNFKCFzaG1lbS0+dm1hcF91c2VfY291bnQpKQorCQlyZXR1 cm47CisKKwlpZiAoLS1zaG1lbS0+dm1hcF91c2VfY291bnQgPiAwKQorCQlyZXR1cm47CisKKwlp ZiAob2JqLT5pbXBvcnRfYXR0YWNoKQorCQlkbWFfYnVmX3Z1bm1hcChvYmotPmltcG9ydF9hdHRh Y2gtPmRtYWJ1Ziwgc2htZW0tPnZhZGRyKTsKKwllbHNlCisJCXZ1bm1hcChzaG1lbS0+dmFkZHIp OworCisJc2htZW0tPnZhZGRyID0gTlVMTDsKKwlkcm1fZ2VtX3NobWVtX3B1dF9wYWdlcyhzaG1l bSk7Cit9CisKKy8qCisgKiBkcm1fZ2VtX3NobWVtX3Z1bm1hcCAtIFVubWFwIGEgdmlydHVhbCBt YXBwaW5nIGZvIGEgc2htZW0gR0VNIG9iamVjdAorICogQHNobWVtOiBzaG1lbSBHRU0gb2JqZWN0 CisgKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgd2hlbiB1 c2UgY291bnQgZHJvcHMgdG8gemVyby4KKyAqLwordm9pZCBkcm1fZ2VtX3NobWVtX3Z1bm1hcChz dHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQoreworCW11dGV4X2xvY2soJnNobWVt LT52bWFwX2xvY2spOworCWRybV9nZW1fc2htZW1fdnVubWFwX2xvY2tlZChzaG1lbSk7CisJbXV0 ZXhfdW5sb2NrKCZzaG1lbS0+dm1hcF9sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9z aG1lbV92dW5tYXApOworCitzdGF0aWMgc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICoKK2Ry bV9nZW1fc2htZW1fY3JlYXRlX3dpdGhfaGFuZGxlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 LAorCQkJCSBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkgdWludDMy X3QgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtOworCWlu dCByZXQ7CisKKwlzaG1lbSA9IGRybV9nZW1fc2htZW1fY3JlYXRlKGRldiwgc2l6ZSk7CisJaWYg KElTX0VSUihzaG1lbSkpCisJCXJldHVybiBzaG1lbTsKKworCS8qCisJICogQWxsb2NhdGUgYW4g aWQgb2YgaWRyIHRhYmxlIHdoZXJlIHRoZSBvYmogaXMgcmVnaXN0ZXJlZAorCSAqIGFuZCBoYW5k bGUgaGFzIHRoZSBpZCB3aGF0IHVzZXIgY2FuIHNlZS4KKwkgKi8KKwlyZXQgPSBkcm1fZ2VtX2hh bmRsZV9jcmVhdGUoZmlsZV9wcml2LCAmc2htZW0tPmJhc2UsIGhhbmRsZSk7CisJLyogZHJvcCBy ZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAtIGhhbmRsZSBob2xkcyBpdCBub3cuICovCisJZHJtX2dl bV9vYmplY3RfcHV0X3VubG9ja2VkKCZzaG1lbS0+YmFzZSk7CisJaWYgKHJldCkKKwkJcmV0dXJu IEVSUl9QVFIocmV0KTsKKworCXJldHVybiBzaG1lbTsKK30KKworLyoqCisgKiBkcm1fZ2VtX3No bWVtX2R1bWJfY3JlYXRlIC0gQ3JlYXRlIGEgZHVtYiBzaG1lbSBidWZmZXIgb2JqZWN0CisgKiBA ZmlsZTogRFJNIGZpbGUgc3RydWN0dXJlIHRvIGNyZWF0ZSB0aGUgZHVtYiBidWZmZXIgZm9yCisg KiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAYXJnczogSU9DVEwgZGF0YQorICoKKyAqIFRoaXMgZnVu Y3Rpb24gY29tcHV0ZXMgdGhlIHBpdGNoIG9mIHRoZSBkdW1iIGJ1ZmZlciBhbmQgcm91bmRzIGl0 IHVwIHRvIGFuCisgKiBpbnRlZ2VyIG51bWJlciBvZiBieXRlcyBwZXIgcGl4ZWwuIERyaXZlcnMg Zm9yIGhhcmR3YXJlIHRoYXQgZG9lc24ndCBoYXZlCisgKiBhbnkgYWRkaXRpb25hbCByZXN0cmlj dGlvbnMgb24gdGhlIHBpdGNoIGNhbiBkaXJlY3RseSB1c2UgdGhpcyBmdW5jdGlvbiBhcworICog dGhlaXIgJmRybV9kcml2ZXIuZHVtYl9jcmVhdGUgY2FsbGJhY2suCisgKgorICogRm9yIGhhcmR3 YXJlIHdpdGggYWRkaXRpb25hbCByZXN0cmljdGlvbnMsIGRyaXZlcnMgY2FuIGFkanVzdCB0aGUg ZmllbGRzCisgKiBzZXQgdXAgYnkgdXNlcnNwYWNlIGJlZm9yZSBjYWxsaW5nIGludG8gdGhpcyBm dW5jdGlvbi4KKyAqCisgKiBSZXR1cm5zOgorICogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUg ZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgZHJtX2dlbV9zaG1lbV9kdW1iX2NyZWF0 ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAg ICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpCit7CisJdTMyIG1pbl9waXRjaCA9 IERJVl9ST1VORF9VUChhcmdzLT53aWR0aCAqIGFyZ3MtPmJwcCwgOCk7CisJc3RydWN0IGRybV9n ZW1fc2htZW1fb2JqZWN0ICpzaG1lbTsKKworCWlmICghYXJncy0+cGl0Y2ggfHwgIWFyZ3MtPnNp emUpIHsKKwkJYXJncy0+cGl0Y2ggPSBtaW5fcGl0Y2g7CisJCWFyZ3MtPnNpemUgPSBhcmdzLT5w aXRjaCAqIGFyZ3MtPmhlaWdodDsKKwl9IGVsc2UgeworCQkvKiBlbnN1cmUgc2FuZSBtaW5pbXVt IHZhbHVlcyAqLworCQlpZiAoYXJncy0+cGl0Y2ggPCBtaW5fcGl0Y2gpCisJCQlhcmdzLT5waXRj aCA9IG1pbl9waXRjaDsKKwkJaWYgKGFyZ3MtPnNpemUgPCBhcmdzLT5waXRjaCAqIGFyZ3MtPmhl aWdodCkKKwkJCWFyZ3MtPnNpemUgPSBhcmdzLT5waXRjaCAqIGFyZ3MtPmhlaWdodDsKKwl9CisK KwlzaG1lbSA9IGRybV9nZW1fc2htZW1fY3JlYXRlX3dpdGhfaGFuZGxlKGZpbGUsIGRldiwgYXJn cy0+c2l6ZSwgJmFyZ3MtPmhhbmRsZSk7CisKKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKHNobWVt KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9nZW1fc2htZW1fZHVtYl9jcmVhdGUpOworCitz dGF0aWMgdm1fZmF1bHRfdCBkcm1fZ2VtX3NobWVtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1m KQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLT52bWE7CisJc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmogPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZHJtX2dl bV9zaG1lbV9vYmplY3QgKnNobWVtID0gdG9fZHJtX2dlbV9zaG1lbV9vYmoob2JqKTsKKwkvKiBX ZSBkb24ndCB1c2Ugdm1mLT5wZ29mZiBzaW5jZSB0aGF0IGhhcyB0aGUgZmFrZSBvZmZzZXQ6ICov CisJcGdvZmZfdCBwZ29mZiA9ICh2bWYtPmFkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdF X1NISUZUOworCWxvZmZfdCBudW1fcGFnZXMgPSBvYmotPnNpemUgPj4gUEFHRV9TSElGVDsKKwlz dHJ1Y3QgcGFnZSAqcGFnZTsKKworCWlmIChwZ29mZiA+IG51bV9wYWdlcyB8fCBXQVJOX09OX09O Q0UoIXNobWVtLT5wYWdlcykpCisJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CisKKwlwYWdlID0g c2htZW0tPnBhZ2VzW3Bnb2ZmXTsKKworCXJldHVybiB2bWZfaW5zZXJ0X3BhZ2Uodm1hLCB2bWYt PmFkZHJlc3MsIHBhZ2UpOworfQorCitzdGF0aWMgdm9pZCBkcm1fZ2VtX3NobWVtX3ZtX2Nsb3Nl KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAq b2JqID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0 ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7CisKKwlkcm1fZ2VtX3NobWVtX3B1 dF9wYWdlcyhzaG1lbSk7CisJZHJtX2dlbV92bV9jbG9zZSh2bWEpOworfQorCitjb25zdCBzdHJ1 Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZHJtX2dlbV9zaG1lbV92bV9vcHMgPSB7CisJLmZhdWx0 ID0gZHJtX2dlbV9zaG1lbV9mYXVsdCwKKwkub3BlbiA9IGRybV9nZW1fdm1fb3BlbiwKKwkuY2xv c2UgPSBkcm1fZ2VtX3NobWVtX3ZtX2Nsb3NlLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9n ZW1fc2htZW1fdm1fb3BzKTsKKworc3RhdGljIGludCBkcm1fZ2VtX3NobWVtX21tYXBfb2JqKHN0 cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0sCisJCQkJICBzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKnZtYSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2dlbV9zaG1lbV9nZXRfcGFn ZXMoc2htZW0pOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2Nsb3NlOworCisJLyogVk1fUEZOTUFQ IHdhcyBzZXQgYnkgZHJtX2dlbV9tbWFwKCkgKi8KKwl2bWEtPnZtX2ZsYWdzICY9IH5WTV9QRk5N QVA7CisJdm1hLT52bV9mbGFncyB8PSBWTV9NSVhFRE1BUDsKKworCXN3aXRjaCAoc2htZW0tPmNh Y2hlX21vZGUpIHsKKwljYXNlIERSTV9HRU1fU0hNRU1fQk9fVU5LTk9XTjoKKwkJRFJNX0RFQlVH X0tNUygiQ2FuJ3QgbW1hcCBjYWNoZSBtb2RlIGlzIHVua25vd25cbiIpOworCQlyZXQgPSAtRUlO VkFMOworCQlnb3RvIGVycl9wdXRfcGFnZXM7CisKKwljYXNlIERSTV9HRU1fU0hNRU1fQk9fV1JJ VEVDT01CSU5FRDoKKwkJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZt X2dldF9wYWdlX3Byb3Qodm1hLT52bV9mbGFncykpOworCQlicmVhazsKKworCWNhc2UgRFJNX0dF TV9TSE1FTV9CT19VTkNBQ0hFRDoKKwkJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2Fj aGVkKHZtX2dldF9wYWdlX3Byb3Qodm1hLT52bV9mbGFncykpOworCQlicmVhazsKKworCWNhc2Ug RFJNX0dFTV9TSE1FTV9CT19DQUNIRUQ6CisJCS8qCisJCSAqIFNodW50IG9mZiBjYWNoZWQgb2Jq cyB0byBzaG1lbSBmaWxlIHNvIHRoZXkgaGF2ZSB0aGVpciBvd24KKwkJICogYWRkcmVzc19zcGFj ZSAoc28gdW5tYXBfbWFwcGluZ19yYW5nZSBkb2VzIHdoYXQgd2Ugd2FudCwKKwkJICogaW4gcGFy dGljdWxhciBpbiB0aGUgY2FzZSBvZiBtbWFwJ2QgZG1hYnVmcykKKwkJICovCisJCWZwdXQodm1h LT52bV9maWxlKTsKKwkJZ2V0X2ZpbGUoc2htZW0tPmJhc2UuZmlscCk7CisJCXZtYS0+dm1fcGdv ZmYgPSAwOworCQl2bWEtPnZtX2ZpbGUgID0gc2htZW0tPmJhc2UuZmlscDsKKwkJdm1hLT52bV9w YWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS0+dm1fZmxhZ3MpOworCQlicmVhazsKKwl9 CisKKwlyZXR1cm4gMDsKKworZXJyX3B1dF9wYWdlczoKKwlkcm1fZ2VtX3NobWVtX3B1dF9wYWdl cyhzaG1lbSk7CitlcnJfY2xvc2U6CisJZHJtX2dlbV92bV9jbG9zZSh2bWEpOworCisJcmV0dXJu IHJldDsKK30KKworLyoqCisgKiBkcm1fZ2VtX3NobWVtX21tYXAgLSBNZW1vcnktbWFwIGEgc2ht ZW0gR0VNIG9iamVjdAorICogQGZpbHA6IEZpbGUgb2JqZWN0CisgKiBAdm1hOiBWTUEgZm9yIHRo ZSBhcmVhIHRvIGJlIG1hcHBlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyBhbiBh dWdtZW50ZWQgdmVyc2lvbiBvZiB0aGUgR0VNIERSTSBmaWxlIG1tYXAKKyAqIG9wZXJhdGlvbiBm b3Igc2htZW0gb2JqZWN0cy4gRHJpdmVycyB3aGljaCBlbXBsb3kgdGhlIHNobWVtIGhlbHBlcnMg c2hvdWxkCisgKiB1c2UgdGhpcyBmdW5jdGlvbiBhcyB0aGVpciAmZmlsZV9vcGVyYXRpb25zLm1t YXAgaGFuZGxlciBpbiB0aGUgRFJNIGRldmljZSBmaWxlJ3MKKyAqIGZpbGVfb3BlcmF0aW9ucyBz dHJ1Y3R1cmUuCisgKgorICogSW5zdGVhZCBvZiBkaXJlY3RseSByZWZlcmVuY2luZyB0aGlzIGZ1 bmN0aW9uLCBkcml2ZXJzIHNob3VsZCB1c2UgdGhlCisgKiBERUZJTkVfRFJNX0dFTV9TSE1FTV9G T1BTKCkgbWFjcm8uCisgKgorICogUmV0dXJuczoKKyAqIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0 aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50IGRybV9nZW1fc2htZW1fbW1hcChz dHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0 IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2dl bV9tbWFwKGZpbHAsIHZtYSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNobWVtID0g dG9fZHJtX2dlbV9zaG1lbV9vYmoodm1hLT52bV9wcml2YXRlX2RhdGEpOworCisJcmV0dXJuIGRy bV9nZW1fc2htZW1fbW1hcF9vYmooc2htZW0sIHZtYSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChk cm1fZ2VtX3NobWVtX21tYXApOworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNhY2hlX21v ZGVfc3RyW10gPSB7CisJW0RSTV9HRU1fU0hNRU1fQk9fVU5LTk9XTl0gPSAidW5rbm93biIsCisJ W0RSTV9HRU1fU0hNRU1fQk9fVU5DQUNIRURdID0gInVuY2FjaGVkIiwKKwlbRFJNX0dFTV9TSE1F TV9CT19DQUNIRURdID0gImNhY2hlZCIsCisJW0RSTV9HRU1fU0hNRU1fQk9fV1JJVEVDT01CSU5F RF0gPSAid3JpdGVjb21iaW5lZCIsCit9OworCisvKioKKyAqIGRybV9nZW1fc2htZW1fcHJpbnRf aW5mbygpIC0gUHJpbnQgJmRybV9nZW1fY21hX29iamVjdCBpbmZvIGZvciBkZWJ1Z2ZzCisgKiBA cDogRFJNIHByaW50ZXIKKyAqIEBpbmRlbnQ6IFRhYiBpbmRlbnRhdGlvbiBsZXZlbAorICogQG9i ajogR0VNIG9iamVjdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYXMgdGhlICZk cm1fZHJpdmVyLT5nZW1fcHJpbnRfaW5mbyBjYWxsYmFjay4KKyAqLwordm9pZCBkcm1fZ2VtX3No bWVtX3ByaW50X2luZm8oc3RydWN0IGRybV9wcmludGVyICpwLCB1bnNpZ25lZCBpbnQgaW5kZW50 LAorCQkJICAgICAgY29uc3Qgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJY29uc3Qg c3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2Jq KG9iaik7CisKKwlkcm1fcHJpbnRmX2luZGVudChwLCBpbmRlbnQsICJjYWNoZW1vZGU9JXNcbiIs IGNhY2hlX21vZGVfc3RyW3NobWVtLT5jYWNoZV9tb2RlXSk7CisJZHJtX3ByaW50Zl9pbmRlbnQo cCwgaW5kZW50LCAicGFnZXNfdXNlX2NvdW50PSV1XG4iLCBzaG1lbS0+cGFnZXNfdXNlX2NvdW50 KTsKKwlkcm1fcHJpbnRmX2luZGVudChwLCBpbmRlbnQsICJ2YWRkcj0lcFxuIiwgc2htZW0tPnZh ZGRyKTsKKwlkcm1fcHJpbnRmX2luZGVudChwLCBpbmRlbnQsICJ2bWFwX3VzZV9jb3VudD0ldVxu Iiwgc2htZW0tPnZtYXBfdXNlX2NvdW50KTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9zaG1l bV9wcmludF9pbmZvKTsKKworLyoqCisgKiBkcm1fZ2VtX3NobWVtX3ByaW1lX3BpbiAtIFBpbiBi YWNraW5nIHBhZ2VzIGZvciBhIHNobWVtIEdFTSBvYmplY3QKKyAqIEBvYmo6IEdFTSBvYmplY3QK KyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdGhlIGJhY2tpbmcgcGFnZXMgYXJlIHBp bm5lZCBpbiBtZW1vcnkgd2hpbGUgdGhlCisgKiBidWZmZXIgaXMgZXhwb3J0ZWQuIERyaXZlcnMg dXNpbmcgdGhlIHNobWVtIGhlbHBlcnMgc2hvdWxkIHNldCB0aGlzIGFzIHRoZWlyCisgKiBEUk0g ZHJpdmVyJ3MgJmRybV9kcml2ZXIuZ2VtX3ByaW1lX3BpbiBjYWxsYmFjay4KKyAqCisgKiBSZXR1 cm5zOgorICogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJl LgorICovCitpbnQgZHJtX2dlbV9zaG1lbV9wcmltZV9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopCit7CisJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9n ZW1fc2htZW1fb2JqKG9iaik7CisKKwlyZXR1cm4gZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXMoc2ht ZW0pOworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3NobWVtX3ByaW1lX3Bpbik7CisKKy8qKgor ICogZHJtX2dlbV9zaG1lbV9wcmltZV91bnBpbiAtIFVucGluIGJhY2tpbmcgcGFnZXMgZm9yIGEg c2htZW0gR0VNIG9iamVjdAorICogQG9iajogR0VNIG9iamVjdAorICoKKyAqIFRoaXMgZnVuY3Rp b24gcmVtb3ZlcyB0aGUgcmVxdWlyZW1lbnQgdGhhdCB0aGUgYmFja2luZyBwYWdlcyBhcmUgcGlu bmVkIGluCisgKiBtZW1vcnkuIERyaXZlcnMgdXNpbmcgdGhlIHNobWVtIGhlbHBlcnMgc2hvdWxk IHNldCB0aGlzIGFzIHRoZWlyIERSTSBkcml2ZXIncworICogJmRybV9kcml2ZXIuZ2VtX3ByaW1l X3VucGluIGNhbGxiYWNrLgorICovCit2b2lkIGRybV9nZW1fc2htZW1fcHJpbWVfdW5waW4oc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0 ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7CisKKwlkcm1fZ2VtX3NobWVtX3B1 dF9wYWdlcyhzaG1lbSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fcHJpbWVfdW5w aW4pOworCisvKioKKyAqIGRybV9nZW1fc2htZW1fcHJpbWVfZ2V0X3NnX3RhYmxlIC0gUHJvdmlk ZSBhIHNjYXR0ZXIvZ2F0aGVyIHRhYmxlIG9mIHBpbm5lZAorICogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwYWdlcyBmb3IgYSBzaG1lbSBHRU0gb2JqZWN0CisgKiBAb2JqOiBH RU0gb2JqZWN0CisgKgorICogVGhpcyBmdW5jdGlvbiBleHBvcnRzIGEgc2NhdHRlci9nYXRoZXIg dGFibGUgc3VpdGFibGUgZm9yIFBSSU1FIHVzYWdlIGJ5CisgKiBjYWxsaW5nIHRoZSBzdGFuZGFy ZCBETUEgbWFwcGluZyBBUEkuIERyaXZlcnMgdXNpbmcgdGhlIHNobWVtIGhlbHBlcnMgc2hvdWxk CisgKiBzZXQgdGhpcyBhcyB0aGVpciAmZHJtX2RyaXZlci5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxl IGNhbGxiYWNrLgorICoKKyAqIFJldHVybnM6CisgKiBBIHBvaW50ZXIgdG8gdGhlIHNjYXR0ZXIv Z2F0aGVyIHRhYmxlIG9mIHBpbm5lZCBwYWdlcyBvciBOVUxMIG9uIGZhaWx1cmUuCisgKi8KK3N0 cnVjdCBzZ190YWJsZSAqZHJtX2dlbV9zaG1lbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1l bSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7CisKKwlyZXR1cm4gZHJtX3ByaW1lX3BhZ2Vz X3RvX3NnKHNobWVtLT5wYWdlcywgb2JqLT5zaXplID4+IFBBR0VfU0hJRlQpOworfQorRVhQT1JU X1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9wcmltZV9nZXRfc2dfdGFibGUpOworCisvKioKKyAq IGRybV9nZW1fc2htZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlIC0gUHJvZHVjZSBhIHNobWVtIEdF TSBvYmplY3QgZnJvbQorICogICAgICAgICAgICAgICAgIGFub3RoZXIgZHJpdmVyJ3Mgc2NhdHRl ci9nYXRoZXIgdGFibGUgb2YgcGlubmVkIHBhZ2VzCisgKiBAZGV2OiBEZXZpY2UgdG8gaW1wb3J0 IGludG8KKyAqIEBhdHRhY2g6IERNQS1CVUYgYXR0YWNobWVudAorICogQHNndDogU2NhdHRlci9n YXRoZXIgdGFibGUgb2YgcGlubmVkIHBhZ2VzCisgKgorICogVGhpcyBmdW5jdGlvbiBpbXBvcnRz IGEgc2NhdHRlci9nYXRoZXIgdGFibGUgZXhwb3J0ZWQgdmlhIERNQS1CVUYgYnkKKyAqIGFub3Ro ZXIgZHJpdmVyLiBEcml2ZXJzIHRoYXQgdXNlIHRoZSBzaG1lbSBoZWxwZXJzIHNob3VsZCBzZXQg dGhpcyBhcyB0aGVpcgorICogJmRybV9kcml2ZXIuZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSBj YWxsYmFjay4KKyAqCisgKiBSZXR1cm5zOgorICogQSBwb2ludGVyIHRvIGEgbmV3bHkgY3JlYXRl ZCBHRU0gb2JqZWN0IG9yIGFuIEVSUl9QVFItZW5jb2RlZCBuZWdhdGl2ZQorICogZXJyb3IgY29k ZSBvbiBmYWlsdXJlLgorICovCitzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKgorZHJtX2dlbV9zaG1l bV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAg c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAorCQkJCSAgICBzdHJ1Y3Qgc2dfdGFi bGUgKnNndCkKK3sKKwlzaXplX3Qgc2l6ZSA9IFBBR0VfQUxJR04oYXR0YWNoLT5kbWFidWYtPnNp emUpOworCXNpemVfdCBucGFnZXMgPSBzaXplID4+IFBBR0VfU0hJRlQ7CisJc3RydWN0IGRybV9n ZW1fc2htZW1fb2JqZWN0ICpzaG1lbTsKKwlpbnQgcmV0OworCisJc2htZW0gPSBkcm1fZ2VtX3No bWVtX2NyZWF0ZShkZXYsIHNpemUpOworCWlmIChJU19FUlIoc2htZW0pKQorCQlyZXR1cm4gRVJS X0NBU1Qoc2htZW0pOworCisJc2htZW0tPnBhZ2VzID0ga3ZtYWxsb2NfYXJyYXkobnBhZ2VzLCBz aXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCWlmICghc2htZW0tPnBhZ2VzKSB7 CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfZ2VtOworCX0KKworCXJldCA9IGRy bV9wcmltZV9zZ190b19wYWdlX2FkZHJfYXJyYXlzKHNndCwgc2htZW0tPnBhZ2VzLCBOVUxMLCBu cGFnZXMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9mcmVlX2FycmF5OworCisJc2htZW0t PnNndCA9IHNndDsKKwlzaG1lbS0+Y2FjaGVfbW9kZSA9IERSTV9HRU1fU0hNRU1fQk9fVU5LTk9X TjsKKwlzaG1lbS0+cGFnZXNfdXNlX2NvdW50ID0gMTsgLyogUGVybWFuZW50bHkgcGlubmVkIGZy b20gb3VyIHBvaW50IG9mIHZpZXcgKi8KKworCURSTV9ERUJVR19QUklNRSgic2l6ZSA9ICV6dVxu Iiwgc2l6ZSk7CisKKwlyZXR1cm4gJnNobWVtLT5iYXNlOworCitlcnJfZnJlZV9hcnJheToKKwlr dmZyZWUoc2htZW0tPnBhZ2VzKTsKK2Vycl9mcmVlX2dlbToKKwlkcm1fZ2VtX29iamVjdF9wdXRf dW5sb2NrZWQoJnNobWVtLT5iYXNlKTsKKworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CitFWFBP UlRfU1lNQk9MX0dQTChkcm1fZ2VtX3NobWVtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSk7CisKKy8q KgorICogZHJtX2dlbV9zaG1lbV9wcmltZV9tbWFwIC0gTWVtb3J5LW1hcCBhbiBleHBvcnRlZCBz aG1lbSBHRU0gb2JqZWN0CisgKiBAb2JqOiBHRU0gb2JqZWN0CisgKiBAdm1hOiBWTUEgZm9yIHRo ZSBhcmVhIHRvIGJlIG1hcHBlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWFwcyBhIGJ1ZmZlciBp bXBvcnRlZCB2aWEgRFJNIFBSSU1FIGludG8gYSB1c2Vyc3BhY2UKKyAqIHByb2Nlc3MncyBhZGRy ZXNzIHNwYWNlLiBEcml2ZXJzIHRoYXQgdXNlIHRoZSBzaG1lbSBoZWxwZXJzIHNob3VsZCBzZXQg dGhpcworICogYXMgdGhlaXIgJmRybV9kcml2ZXIuZ2VtX3ByaW1lX21tYXAgY2FsbGJhY2suCisg KgorICogUmV0dXJuczoKKyAqIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUg b24gZmFpbHVyZS4KKyAqLworaW50IGRybV9nZW1fc2htZW1fcHJpbWVfbW1hcChzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0 IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7 CisJaW50IHJldDsKKworCXJldCA9IGRybV9nZW1fbW1hcF9vYmoob2JqLCBvYmotPnNpemUsIHZt YSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBkcm1fZ2VtX3NobWVtX21t YXBfb2JqKHNobWVtLCB2bWEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9w cmltZV9tbWFwKTsKKworLyoqCisgKiBkcm1fZ2VtX3NobWVtX3ByaW1lX3ZtYXAgLSBNYXAgYSBz aG1lbSBHRU0gb2JqZWN0IGludG8gdGhlIGtlcm5lbCdzIHZpcnR1YWwKKyAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFkZHJlc3Mgc3BhY2UKKyAqIEBvYmo6IEdFTSBvYmplY3QKKyAqCisg KiBUaGlzIGZ1bmN0aW9uIG1hcHMgYSBidWZmZXIgZXhwb3J0ZWQgdmlhIERSTSBQUklNRSBpbnRv IHRoZSBrZXJuZWwncworICogdmlydHVhbCBhZGRyZXNzIHNwYWNlLiBEcml2ZXJzIHVzaW5nIHRo ZSBzaG1lbSBoZWxwZXJzIHNob3VsZCBzZXQgdGhpcyBhcworICogdGhlaXIgRFJNIGRyaXZlcidz ICZkcm1fZHJpdmVyLmdlbV9wcmltZV92bWFwIGNhbGxiYWNrLgorICoKKyAqIFJldHVybnM6Cisg KiBUaGUga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgc2htZW0gR0VNIG9iamVjdCdzIGJh Y2tpbmcgc3RvcmUgb3IgTlVMTCBvbiBlcnJvci4KKyAqLwordm9pZCAqZHJtX2dlbV9zaG1lbV9w cmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1fZ2Vt X3NobWVtX29iamVjdCAqc2htZW0gPSB0b19kcm1fZ2VtX3NobWVtX29iaihvYmopOworCisJZHJt X2dlbV9zaG1lbV92bWFwKHNobWVtKTsKKworCXJldHVybiBzaG1lbS0+dmFkZHI7Cit9CitFWFBP UlRfU1lNQk9MX0dQTChkcm1fZ2VtX3NobWVtX3ByaW1lX3ZtYXApOworCisvKioKKyAqIGRybV9n ZW1fc2htZW1fcHJpbWVfdnVubWFwIC0gVW5tYXAgYSBzaG1lbSBHRU0gb2JqZWN0IGZyb20gdGhl IGtlcm5lbCdzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgYWRkcmVz cyBzcGFjZQorICogQG9iajogR0VNIG9iamVjdAorICogQHZhZGRyOiBrZXJuZWwgdmlydHVhbCBh ZGRyZXNzIHdoZXJlIHRoZSBzaG1lbSBHRU0gb2JqZWN0IHdhcyBtYXBwZWQKKyAqCisgKiBUaGlz IGZ1bmN0aW9uIHJlbW92ZXMgYSBidWZmZXIgZXhwb3J0ZWQgdmlhIERSTSBQUklNRSBmcm9tIHRo ZSBrZXJuZWwncworICogdmlydHVhbCBhZGRyZXNzIHNwYWNlLiBEcml2ZXJzIHVzaW5nIHRoZSBz aG1lbSBoZWxwZXJzIHNob3VsZCBzZXQgdGhpcyBhcworICogdGhlaXIgJmRybV9kcml2ZXIuZ2Vt X3ByaW1lX3Z1bm1hcCBjYWxsYmFjay4KKyAqLwordm9pZCBkcm1fZ2VtX3NobWVtX3ByaW1lX3Z1 bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpCit7CisJc3RydWN0 IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7 CisKKwlkcm1fZ2VtX3NobWVtX3Z1bm1hcChzaG1lbSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChk cm1fZ2VtX3NobWVtX3ByaW1lX3Z1bm1hcCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1f Z2VtX3NobWVtX2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhkZmNiMmMzZDY2NwotLS0g L2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmgKQEAgLTAs MCArMSwxOTggQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisKKyNp Zm5kZWYgX19EUk1fR0VNX1NITUVNX0hFTFBFUl9IX18KKyNkZWZpbmUgX19EUk1fR0VNX1NITUVN X0hFTFBFUl9IX18KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW0u aD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9maWxlLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2lvY3RsLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9wcmltZS5oPgorCitzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50Owor c3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iOworc3RydWN0IGRybV9wcmludGVyOworc3RydWN0 IHNnX3RhYmxlOworCisvKioKKyAqIGVudW0gZHJtX2dlbV9zaG1lbV9jYWNoZV9tb2RlIC0gc2ht ZW0gYnVmZmVyIGNhY2hlIG1vZGUKKyAqLworZW51bSBkcm1fZ2VtX3NobWVtX2NhY2hlX21vZGUg eworCS8qKgorCSAqIEBEUk1fR0VNX1NITUVNX0JPX1VOS05PV046CisJICoKKwkgKiBDYWNoZSBt b2RlIGlzIG5vdCBrbm93bi4gVGhpcyBpcyB0aGUgY2FzZSB3aGVuIGltcG9ydGluZyBhIGJ1ZmZl ci4KKwkgKi8KKwlEUk1fR0VNX1NITUVNX0JPX1VOS05PV04gPSAwLAorCisJLyoqCisJICogQERS TV9HRU1fU0hNRU1fQk9fVU5DQUNIRUQ6IEJ1ZmZlciBpcyB1bmNhY2hlZC4KKwkgKi8KKwlEUk1f R0VNX1NITUVNX0JPX1VOQ0FDSEVELAorCisJLyoqCisJICogQERSTV9HRU1fU0hNRU1fQk9fQ0FD SEVEOiBCdWZmZXIgaXMgY2FjaGVkLgorCSAqLworCURSTV9HRU1fU0hNRU1fQk9fQ0FDSEVELAor CisJLyoqCisJICogQERSTV9HRU1fU0hNRU1fQk9fV1JJVEVDT01CSU5FRDogQnVmZmVyIGlzIHVu Y2FjaGVkIHdpdGggd3JpdGVzIGNvbWJpbmVkLgorCSAqLworCURSTV9HRU1fU0hNRU1fQk9fV1JJ VEVDT01CSU5FRCwKK307CisKKy8qKgorICogc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0IC0g R0VNIG9iamVjdCBiYWNrZWQgYnkgc2htZW0KKyAqLworc3RydWN0IGRybV9nZW1fc2htZW1fb2Jq ZWN0IHsKKwkvKioKKwkgKiBAYmFzZTogQmFzZSBHRU0gb2JqZWN0CisJICovCisJc3RydWN0IGRy bV9nZW1fb2JqZWN0IGJhc2U7CisKKwkvKioKKwkgKiBAY2FjaGVfbW9kZTogQ2FjaGUgbW9kZQor CSAqLworCWVudW0gZHJtX2dlbV9zaG1lbV9jYWNoZV9tb2RlIGNhY2hlX21vZGU7CisKKwkvKioK KwkgKiBAcGFnZXNfbG9jazogUHJvdGVjdHMgdGhlIHBhZ2UgdGFibGUgYW5kIHVzZSBjb3VudAor CSAqLworCXN0cnVjdCBtdXRleCBwYWdlc19sb2NrOworCisJLyoqCisJICogQHBhZ2VzOiBQYWdl IHRhYmxlCisJICovCisJc3RydWN0IHBhZ2UgKipwYWdlczsKKworCS8qKgorCSAqIEBwYWdlc191 c2VfY291bnQ6CisJICoKKwkgKiBSZWZlcmVuY2UgY291bnQgb24gdGhlIHBhZ2VzIHRhYmxlLgor CSAqIFRoZSBwYWdlcyBhcmUgcHV0IHdoZW4gdGhlIGNvdW50IHJlYWNoZXMgemVyby4KKwkgKi8K Kwl1bnNpZ25lZCBpbnQgcGFnZXNfdXNlX2NvdW50OworCisJLyoqCisJICogQHBhZ2VzX21hcmtf ZGlydHlfb25fcHV0OgorCSAqCisJICogTWFyayBwYWdlcyBhcyBkaXJ0eSB3aGVuIHRoZXkgYXJl IHB1dC4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgcGFnZXNfbWFya19kaXJ0eV9vbl9wdXQgICAgOiAx OworCisJLyoqCisJICogQHBhZ2VzX21hcmtfYWNjZXNzZWRfb25fcHV0OgorCSAqCisJICogTWFy ayBwYWdlcyBhcyBhY2Nlc3NlZCB3aGVuIHRoZXkgYXJlIHB1dC4KKwkgKi8KKwl1bnNpZ25lZCBp bnQgcGFnZXNfbWFya19hY2Nlc3NlZF9vbl9wdXQgOiAxOworCisJLyoqCisJICogQHNndDogU2Nh dHRlci9nYXRoZXIgdGFibGUgZm9yIGltcG9ydGVkIFBSSU1FIGJ1ZmZlcnMKKwkgKi8KKwlzdHJ1 Y3Qgc2dfdGFibGUgKnNndDsKKworCS8qKgorCSAqIEB2bWFwX2xvY2s6IFByb3RlY3RzIHRoZSB2 bWFwIGFkZHJlc3MgYW5kIHVzZSBjb3VudAorCSAqLworCXN0cnVjdCBtdXRleCB2bWFwX2xvY2s7 CisKKwkvKioKKwkgKiBAdmFkZHI6IEtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGJhY2tp bmcgbWVtb3J5CisJICovCisJdm9pZCAqdmFkZHI7CisKKwkvKioKKwkgKiBAdm1hcF91c2VfY291 bnQ6CisJICoKKwkgKiBSZWZlcmVuY2UgY291bnQgb24gdGhlIHZpcnR1YWwgYWRkcmVzcy4KKwkg KiBUaGUgYWRkcmVzcyBhcmUgdW4tbWFwcGVkIHdoZW4gdGhlIGNvdW50IHJlYWNoZXMgemVyby4K KwkgKi8KKwl1bnNpZ25lZCBpbnQgdm1hcF91c2VfY291bnQ7Cit9OworCisjZGVmaW5lIHRvX2Ry bV9nZW1fc2htZW1fb2JqKG9iaikgXAorCWNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBkcm1fZ2Vt X3NobWVtX29iamVjdCwgYmFzZSkKKworLyoqCisgKiBERUZJTkVfRFJNX0dFTV9TSE1FTV9GT1BT KCkgLSBNYWNybyB0byBnZW5lcmF0ZSBmaWxlIG9wZXJhdGlvbnMgZm9yIHNobWVtIGRyaXZlcnMK KyAqIEBuYW1lOiBuYW1lIGZvciB0aGUgZ2VuZXJhdGVkIHN0cnVjdHVyZQorICoKKyAqIFRoaXMg bWFjcm8gYXV0b2dlbmVyYXRlcyBhIHN1aXRhYmxlICZzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZv ciBzaG1lbSBiYXNlZAorICogZHJpdmVycywgd2hpY2ggY2FuIGJlIGFzc2lnbmVkIHRvICZkcm1f ZHJpdmVyLmZvcHMuIE5vdGUgdGhhdCB0aGlzIHN0cnVjdHVyZQorICogY2Fubm90IGJlIHNoYXJl ZCBiZXR3ZWVuIGRyaXZlcnMsIGJlY2F1c2UgaXQgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhl CisgKiBjdXJyZW50IG1vZHVsZSB1c2luZyBUSElTX01PRFVMRS4KKyAqCisgKiBOb3RlIHRoYXQg dGhlIGRlY2xhcmF0aW9uIGlzIGFscmVhZHkgbWFya2VkIGFzIHN0YXRpYyAtIGlmIHlvdSBuZWVk IGEKKyAqIG5vbi1zdGF0aWMgdmVyc2lvbiBvZiB0aGlzIHlvdSdyZSBwcm9iYWJseSBkb2luZyBp dCB3cm9uZyBhbmQgd2lsbCBicmVhayB0aGUKKyAqIFRISVNfTU9EVUxFIHJlZmVyZW5jZSBieSBh Y2NpZGVudC4KKyAqLworI2RlZmluZSBERUZJTkVfRFJNX0dFTV9TSE1FTV9GT1BTKG5hbWUpIFwK KwlzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuYW1lID0ge1wKKwkJLm93bmVy CQk9IFRISVNfTU9EVUxFLFwKKwkJLm9wZW4JCT0gZHJtX29wZW4sXAorCQkucmVsZWFzZQk9IGRy bV9yZWxlYXNlLFwKKwkJLnVubG9ja2VkX2lvY3RsCT0gZHJtX2lvY3RsLFwKKwkJLmNvbXBhdF9p b2N0bAk9IGRybV9jb21wYXRfaW9jdGwsXAorCQkucG9sbAkJPSBkcm1fcG9sbCxcCisJCS5yZWFk CQk9IGRybV9yZWFkLFwKKwkJLmxsc2VlawkJPSBub29wX2xsc2VlayxcCisJCS5tbWFwCQk9IGRy bV9nZW1fc2htZW1fbW1hcCwgXAorCX0KKworc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpk cm1fZ2VtX3NobWVtX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSk7 Cit2b2lkIGRybV9nZW1fc2htZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpv YmopOworCitpbnQgZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXMoc3RydWN0IGRybV9nZW1fc2htZW1f b2JqZWN0ICpzaG1lbSk7Cit2b2lkIGRybV9nZW1fc2htZW1fcHV0X3BhZ2VzKHN0cnVjdCBkcm1f Z2VtX3NobWVtX29iamVjdCAqc2htZW0pOworaW50IGRybV9nZW1fc2htZW1fdm1hcChzdHJ1Y3Qg ZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKTsKK3ZvaWQgZHJtX2dlbV9zaG1lbV92dW5tYXAo c3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSk7CisKK2ludCBkcm1fZ2VtX3NobWVt X2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgc3RydWN0IGRybV9kZXZpY2UgKmRl diwKKwkJCSAgICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncyk7CisKK2ludCBk cm1fZ2VtX3NobWVtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVj dCAqdm1hKTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1f Z2VtX3NobWVtX3ZtX29wczsKKwordm9pZCBkcm1fZ2VtX3NobWVtX3ByaW50X2luZm8oc3RydWN0 IGRybV9wcmludGVyICpwLCB1bnNpZ25lZCBpbnQgaW5kZW50LAorCQkJICAgICAgY29uc3Qgc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworCitpbnQgZHJtX2dlbV9zaG1lbV9wcmltZV9waW4o c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwordm9pZCBkcm1fZ2VtX3NobWVtX3ByaW1lX3Vu cGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3N0cnVjdCBzZ190YWJsZSAqZHJtX2dl bV9zaG1lbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwor c3RydWN0IGRybV9nZW1fb2JqZWN0ICoKK2RybV9nZW1fc2htZW1fcHJpbWVfaW1wb3J0X3NnX3Rh YmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFj aG1lbnQgKmF0dGFjaCwKKwkJCQkgICAgc3RydWN0IHNnX3RhYmxlICpzZ3QpOworaW50IGRybV9n ZW1fc2htZW1fcHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZt X2FyZWFfc3RydWN0ICp2bWEpOwordm9pZCAqZHJtX2dlbV9zaG1lbV9wcmltZV92bWFwKHN0cnVj dCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3ZvaWQgZHJtX2dlbV9zaG1lbV9wcmltZV92dW5tYXAo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHZvaWQgKnZhZGRyKTsKKworLyoqCisgKiBEUk1f R0VNX1NITUVNX0RSSVZFUl9PUFMgLSBEZWZhdWx0IHNobWVtIEdFTSBvcGVyYXRpb25zCisgKgor ICogVGhpcyBtYWNybyBwcm92aWRlcyBhIHNob3J0Y3V0IGZvciBzZXR0aW5nIHRoZSBzaG1lbSBH RU0gb3BlcmF0aW9ucyBpbgorICogdGhlICZkcm1fZHJpdmVyIHN0cnVjdHVyZS4KKyAqLworI2Rl ZmluZSBEUk1fR0VNX1NITUVNX0RSSVZFUl9PUFMgXAorCS5nZW1fZnJlZV9vYmplY3RfdW5sb2Nr ZWQgPSBkcm1fZ2VtX3NobWVtX2ZyZWVfb2JqZWN0LCBcCisJLmdlbV9wcmludF9pbmZvCQk9IGRy bV9nZW1fc2htZW1fcHJpbnRfaW5mbywgXAorCS5nZW1fdm1fb3BzCQk9ICZkcm1fZ2VtX3NobWVt X3ZtX29wcywgXAorCS5wcmltZV9oYW5kbGVfdG9fZmQJPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90 b19mZCwgXAorCS5wcmltZV9mZF90b19oYW5kbGUJPSBkcm1fZ2VtX3ByaW1lX2ZkX3RvX2hhbmRs ZSwgXAorCS5nZW1fcHJpbWVfcGluCQk9IGRybV9nZW1fc2htZW1fcHJpbWVfcGluLCBcCisJLmdl bV9wcmltZV91bnBpbgk9IGRybV9nZW1fc2htZW1fcHJpbWVfdW5waW4sIFwKKwkuZ2VtX3ByaW1l X2ltcG9ydAk9IGRybV9nZW1fcHJpbWVfaW1wb3J0LCBcCisJLmdlbV9wcmltZV9leHBvcnQJPSBk cm1fZ2VtX3ByaW1lX2V4cG9ydCwgXAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlCT0gZHJtX2dl bV9zaG1lbV9wcmltZV9nZXRfc2dfdGFibGUsIFwKKwkuZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJs ZSA9IGRybV9nZW1fc2htZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlLCBcCisJLmdlbV9wcmltZV92 bWFwCQk9IGRybV9nZW1fc2htZW1fcHJpbWVfdm1hcCwgXAorCS5nZW1fcHJpbWVfdnVubWFwCT0g ZHJtX2dlbV9zaG1lbV9wcmltZV92dW5tYXAsIFwKKwkuZ2VtX3ByaW1lX21tYXAJCT0gZHJtX2dl bV9zaG1lbV9wcmltZV9tbWFwLCBcCisJLmR1bWJfY3JlYXRlCQk9IGRybV9nZW1fc2htZW1fZHVt Yl9jcmVhdGUKKworI2VuZGlmIC8qIF9fRFJNX0dFTV9TSE1FTV9IRUxQRVJfSF9fICovCi0tIAoy LjE1LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRy aS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=