From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Zimmermann Subject: [PATCH 03/11] drm/fbdevdrm: Add memory management Date: Tue, 26 Mar 2019 10:17:36 +0100 Message-ID: <20190326091744.11542-4-tzimmermann@suse.de> References: <20190326091744.11542-1-tzimmermann@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 04F916E7B2 for ; Tue, 26 Mar 2019 09:17:55 +0000 (UTC) In-Reply-To: <20190326091744.11542-1-tzimmermann@suse.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: airlied@linux.ie, daniel@ffwll.ch, b.zolnierkie@samsung.com Cc: linux-fbdev@vger.kernel.org, Thomas Zimmermann , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org TWVtb3J5IG1hbmFnZW1lbnQgaW4gZmJkZXZkcm0gaXMgcHJvdmlkZWQgYnkgVFRNLiBGYmRldiBp bXBsZW1lbnRzIHBhZ2UKZmxpcHBpbmcgdmlhIGRpc3BsYXkgcGFuIG9wZXJhdGlvbnMsIHdoaWNo IHJlcXVpcmUgc2Nhbm91dCBidWZmZXJzIHRvIGJlCmFsaWduZWQgYXQgc2NhbmxpbmUgYm91bmRh cmllcy4gQXQgdGhlIHNhbWUgdGltZSBtZW1vcnktbWFwcGluZyBvcGVyYXRpb25zCm9mIGluZGl2 aWR1YWwgYnVmZmVycyByZXF1aXJlcyBwYWdlIGFsaWdubWVudCBvZiBlYWNoIGJ1ZmZlci4gRmJk ZXZkcm0KZW5zdXJlcyB0aGF0IGJvdGggcmVxdWlyZW1lbnRzIGFyZSBtZXQuCgpTaWduZWQtb2Zm LWJ5OiBUaG9tYXMgWmltbWVybWFubiA8dHppbW1lcm1hbm5Ac3VzZS5kZT4KLS0tCiBkcml2ZXJz L2dwdS9kcm0vZmJkZXZkcm0vTWFrZWZpbGUgICAgICAgICAgfCAgIDYgKy0KIGRyaXZlcnMvZ3B1 L2RybS9mYmRldmRybS9mYmRldmRybV9iby5jICAgICB8IDI3NiArKysrKysrKysrKysrKysrKysr KysKIGRyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV9iby5oICAgICB8ICA1OCArKysr KwogZHJpdmVycy9ncHUvZHJtL2ZiZGV2ZHJtL2ZiZGV2ZHJtX2RldmljZS5jIHwgIDEwICsKIGRy aXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV9kZXZpY2UuaCB8ICAgOSArCiBkcml2ZXJz L2dwdS9kcm0vZmJkZXZkcm0vZmJkZXZkcm1fdHRtLmMgICAgfCAyMDIgKysrKysrKysrKysrKysr CiBkcml2ZXJzL2dwdS9kcm0vZmJkZXZkcm0vZmJkZXZkcm1fdHRtLmggICAgfCAgMzUgKysrCiA3 IGZpbGVzIGNoYW5nZWQsIDU5NCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV9iby5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2ZiZGV2ZHJtL2ZiZGV2ZHJtX2JvLmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZmJkZXZkcm0vZmJkZXZkcm1fdHRtLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZmJkZXZkcm0vZmJkZXZkcm1fdHRt LmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZmJkZXZkcm0vTWFrZWZpbGUgYi9kcml2 ZXJzL2dwdS9kcm0vZmJkZXZkcm0vTWFrZWZpbGUKaW5kZXggNzUwOTQwZDM4NTA5Li5mZGZkYjUy MzM4MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9NYWtlZmlsZQorKysg Yi9kcml2ZXJzL2dwdS9kcm0vZmJkZXZkcm0vTWFrZWZpbGUKQEAgLTEsNSArMSw3IEBACiBjY2Zs YWdzLXkgPSAtSWluY2x1ZGUvZHJtCi1mYmRldmRybS15IDo9IGZiZGV2ZHJtX2RldmljZS5vIFwK LQkgICAgICBmYmRldmRybV9kcnYubworZmJkZXZkcm0teSA6PSBmYmRldmRybV9iby5vIFwKKwkg ICAgICBmYmRldmRybV9kZXZpY2UubyBcCisJICAgICAgZmJkZXZkcm1fZHJ2Lm8gXAorCSAgICAg IGZiZGV2ZHJtX3R0bS5vCiAKIG9iai0kKENPTkZJR19EUk1fRkJERVZEUk0pICs9IGZiZGV2ZHJt Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV9iby5jIGIv ZHJpdmVycy9ncHUvZHJtL2ZiZGV2ZHJtL2ZiZGV2ZHJtX2JvLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43ODM3MGRiNmM1MDQKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vZmJkZXZkcm0vZmJkZXZkcm1fYm8uYwpAQCAtMCwwICsxLDI3NiBAQAor LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKKyAqCisgKiBPbmUg cHVycG9zZSBvZiB0aGlzIGRyaXZlciBpcyB0byBhbGxvdyBmb3IgZWFzeSBjb252ZXJzaW9uIG9m IGZyYW1lYnVmZmVyCisgKiBkcml2ZXJzIHRvIERSTS4gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0 byB0aGUgR05VIEdQTCwgeW91IGFyZSBhbGxvd2VkIHRvCisgKiByZWxpY2Vuc2UgdGhpcyBmaWxl IHVuZGVyIHRoZSB0ZXJtcyBvZiBhIGxpY2Vuc2Ugb2YgeW91ciBjaG9pY2UgaWYgeW91J3JlCisg KiBwb3J0aW5nIGEgZnJhbWVidWZmZXIgZHJpdmVyLiBJbiBvcmRlciB0byBkbyBzbywgdXBkYXRl IHRoZSBTUERYIGxpY2Vuc2UKKyAqIGlkZW50aWZpZXIgdG8gdGhlIG5ldyBsaWNlbnNlIGFuZCBy ZW1vdmUgdGhpcyBleGNlcHRpb24uCisgKgorICogSWYgeW91IGFkZCBjb2RlIHRvIHRoaXMgZmls ZSwgcGxlYXNlIGVuc3VyZSB0aGF0IGl0J3MgY29tcGF0aWJsZSB3aXRoIHRoZQorICogc3RhdGVk IGV4Y2VwdGlvbi4KKyAqLworCisjaW5jbHVkZSAiZmJkZXZkcm1fYm8uaCIKKyNpbmNsdWRlICJm YmRldmRybV9kZXZpY2UuaCIKKworc3RhdGljIHZvaWQgZmJkZXZkcm1fYm9fY2xlYW51cChzdHJ1 Y3QgZmJkZXZkcm1fYm8gKmZibykKK3sKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKCZmYm8tPmdl bSk7Cit9CisKK3N0YXRpYyB2b2lkIGZiZGV2ZHJtX2JvX2Rlc3Ryb3koc3RydWN0IGZiZGV2ZHJt X2JvICpmYm8pCit7CisJLyogV2UgZ290IGhlcmUgdmlhIHR0bV9ib19wdXQoKSwgd2hpY2ggbWVh bnMgdGhhdCB0aGUKKwkgKiBUVE0gYnVmZmVyIG9iamVjdCBpbiAnYm8nIGhhcyBhbHJlYWR5IGJl ZW4gY2xlYW5lZAorCSAqIHVwLiAqLworCisJZmJkZXZkcm1fYm9fY2xlYW51cChmYm8pOworCWtm cmVlKGZibyk7Cit9CisKK3N0YXRpYyB2b2lkIGZiZGV2ZHJtX2JvX3R0bV9kZXN0cm95KHN0cnVj dCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCit7CisJc3RydWN0IGZiZGV2ZHJtX2JvICpmYm8gPSBm YmRldmRybV9ib19vZl9ibyhibyk7CisJZmJkZXZkcm1fYm9fZGVzdHJveShmYm8pOworfQorCitz dGF0aWMgdm9pZCBmYmRldmRybV9ib190dG1fcGxhY2VtZW50KHN0cnVjdCBmYmRldmRybV9ibyAq Ym8sIGludCBwbF9mbGFnKQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBjID0g MDsKKworCWJvLT5wbGFjZW1lbnQucGxhY2VtZW50ID0gYm8tPnBsYWNlbWVudHM7CisJYm8tPnBs YWNlbWVudC5idXN5X3BsYWNlbWVudCA9IGJvLT5wbGFjZW1lbnRzOworCisJaWYgKHBsX2ZsYWcg JiBUVE1fUExfRkxBR19WUkFNKQorCQliby0+cGxhY2VtZW50c1tjKytdLmZsYWdzID0gVFRNX1BM X0ZMQUdfV0MgfCBUVE1fUExfRkxBR19VTkNBQ0hFRCB8IFRUTV9QTF9GTEFHX1ZSQU07CisKKwlp ZiAocGxfZmxhZyAmIFRUTV9QTF9GTEFHX1NZU1RFTSkKKwkJYm8tPnBsYWNlbWVudHNbYysrXS5m bGFncyA9IFRUTV9QTF9NQVNLX0NBQ0hJTkcgfCBUVE1fUExfRkxBR19TWVNURU07CisKKwlpZiAo IWMpCisJCWJvLT5wbGFjZW1lbnRzW2MrK10uZmxhZ3MgPSBUVE1fUExfTUFTS19DQUNISU5HIHwg VFRNX1BMX0ZMQUdfU1lTVEVNOworCisJYm8tPnBsYWNlbWVudC5udW1fcGxhY2VtZW50ID0gYzsK Kwliby0+cGxhY2VtZW50Lm51bV9idXN5X3BsYWNlbWVudCA9IGM7CisKKwlmb3IgKGkgPSAwOyBp IDwgYzsgKytpKSB7CisJCWJvLT5wbGFjZW1lbnRzW2ldLmZwZm4gPSAwOworCQliby0+cGxhY2Vt ZW50c1tpXS5scGZuID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZmJkZXZkcm1fYm9faW5pdChz dHJ1Y3QgZmJkZXZkcm1fYm8gKmZibywgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICBp bnQgc2l6ZSwgaW50IGFsaWduLCB1aW50MzJfdCBmbGFncykKK3sKKwlzdHJ1Y3QgZmJkZXZkcm1f ZGV2aWNlICpmZGV2OworCWludCByZXQ7CisJc2l6ZV90IGFjY19zaXplOworCisJZmRldiA9IGZi ZGV2ZHJtX2RldmljZV9vZl9kZXYoZGV2KTsKKworCXJldCA9IGRybV9nZW1fb2JqZWN0X2luaXQo ZGV2LCAmZmJvLT5nZW0sIHNpemUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJ ZmJvLT5iby5iZGV2ID0gJmZkZXYtPnR0bS5iZGV2OworCisJZmJkZXZkcm1fYm9fdHRtX3BsYWNl bWVudChmYm8sIFRUTV9QTF9GTEFHX1ZSQU0gfCBUVE1fUExfRkxBR19TWVNURU0pOworCisJYWNj X3NpemUgPSB0dG1fYm9fZG1hX2FjY19zaXplKCZmZGV2LT50dG0uYmRldiwgc2l6ZSwgc2l6ZW9m KCpmYm8pKTsKKworCXJldCA9IHR0bV9ib19pbml0KCZmZGV2LT50dG0uYmRldiwgJmZiby0+Ym8s IHNpemUsCisJCQkgIHR0bV9ib190eXBlX2RldmljZSwgJmZiby0+cGxhY2VtZW50LAorCQkJICBh bGlnbiA+PiBQQUdFX1NISUZULCBmYWxzZSwgYWNjX3NpemUsCisJCQkgIE5VTEwsIE5VTEwsIGZi ZGV2ZHJtX2JvX3R0bV9kZXN0cm95KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZHJtX2dl bV9vYmplY3RfcmVsZWFzZTsKKworCXJldHVybiAwOworCitlcnJfZHJtX2dlbV9vYmplY3RfcmVs ZWFzZToKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKCZmYm8tPmdlbSk7CisJcmV0dXJuIHJldDsK K30KKworLyogUmV0dXJucyB0aGUgbGVhc3QgY29tbW9uIG11bHRpcGxlIG9mIGEgdmFsdWUgYW5k IHRoZSBwYWdlIHNpemUKKyAqLworc3RhdGljIHUzMiBsY21fd2l0aF9wYWdlX3NpemUodTMyIHNp emUpCit7CisJaWYgKCFzaXplKQorCQlyZXR1cm4gc2l6ZTsgLyogMCBpcyBhbHdheXMgY29ycmVj dCAqLworCXdoaWxlIChzaXplICYmIChzaXplICYgflBBR0VfTUFTSykpCisJCXNpemUgPDw9IDE7 CisJaWYgKCFzaXplKQorCQlyZXR1cm4gKHUzMiktRUlOVkFMOyAvKiBubyBjb21tb24gbXVsdGlw bGUgZm91bmQgKi8KKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIGludCBmYmRldmRybV9ib19p bml0X3dpdGhfcGl0Y2goc3RydWN0IGZiZGV2ZHJtX2JvICpmYm8sCisJCQkJICAgICAgIHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIGludCBzaXplLAorCQkJCSAgICAgICBpbnQgcGl0Y2gsIHVpbnQz Ml90IGZsYWdzKQoreworCXUzMiBhbGlnbiA9IGxjbV93aXRoX3BhZ2Vfc2l6ZShwaXRjaCk7CisJ aWYgKGFsaWduID09ICh1MzIpLUVJTlZBTCkgeworCQlEUk1fRVJST1IoImZiZGV2ZHJtOiBidWZm ZXIgcGl0Y2ggb2YgJWQgYnl0ZXMgaGFzIG5vICIKKwkJCSAgImNvbW1vbiBtdWx0aXBsZSB3aXRo IHBhZ2Ugc2l6ZS5cbiIsIHBpdGNoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJu IGZiZGV2ZHJtX2JvX2luaXQoZmJvLCBkZXYsIHNpemUsIGFsaWduLCBmbGFncyk7Cit9CisKKy8q CisgKiBQdWJsaWMgaW50ZXJmYWNlCisgKi8KKworc3RydWN0IGZiZGV2ZHJtX2JvKiBmYmRldmRy bV9ib19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHNpemUsCisJCQkJICAgICAg IGludCBhbGlnbiwgdWludDMyX3QgZmxhZ3MpCit7CisJc3RydWN0IGZiZGV2ZHJtX2JvICpmYm87 CisJaW50IHJldDsKKworCWZibyA9IGt6YWxsb2Moc2l6ZW9mKCpmYm8pLCBHRlBfS0VSTkVMKTsK KwlpZiAoIWZibykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlyZXQgPSBmYmRldmRy bV9ib19pbml0KGZibywgZGV2LCBzaXplLCBhbGlnbiwgZmxhZ3MpOworCWlmIChyZXQgPCAwKQor CQlnb3RvIGVycl9rZnJlZTsKKworCXJldHVybiBmYm87CisKK2Vycl9rZnJlZToKKwlrZnJlZShm Ym8pOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKK3N0cnVjdCBmYmRldmRybV9ibyogZmJk ZXZkcm1fYm9fY3JlYXRlX3dpdGhfcGl0Y2goc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJ CSAgaW50IHNpemUsIGludCBwaXRjaCwKKwkJCQkJCSAgdWludDMyX3QgZmxhZ3MpCit7CisJc3Ry dWN0IGZiZGV2ZHJtX2JvICpmYm87CisJaW50IHJldDsKKworCWZibyA9IGt6YWxsb2Moc2l6ZW9m KCpmYm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZibykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7CisKKwlyZXQgPSBmYmRldmRybV9ib19pbml0X3dpdGhfcGl0Y2goZmJvLCBkZXYsIHNpemUs IHBpdGNoLCBmbGFncyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2tmcmVlOworCisJcmV0 dXJuIGZibzsKKworZXJyX2tmcmVlOgorCWtmcmVlKGZibyk7CisJcmV0dXJuIEVSUl9QVFIocmV0 KTsKK30KKwordm9pZCBmYmRldmRybV9ib19wdXQoc3RydWN0IGZiZGV2ZHJtX2JvICpmYm8pCit7 CisJdHRtX2JvX3B1dCgmZmJvLT5ibyk7Cit9CisKK2ludCBmYmRldmRybV9ib19yZXNlcnZlKHN0 cnVjdCBmYmRldmRybV9ibyAqZmJvLCBib29sIG5vX3dhaXQpCit7CisJaW50IHJldDsKKworCXJl dCA9IHR0bV9ib19yZXNlcnZlKCZmYm8tPmJvLCB0cnVlLCBub193YWl0LCBOVUxMKTsKKwlpZiAo cmV0IDwgMCkgeworCQlpZiAocmV0ICE9IC1FUkVTVEFSVFNZUyAmJiByZXQgIT0gLUVCVVNZKQor CQkJRFJNX0VSUk9SKCJmYmRldmRybTogdHRtX2JvX3Jlc2VydmUoJXApIGZhaWxlZCwiCisJCQkJ ICAiIGVycm9yICVkXG4iLCBmYm8sIC1yZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4g MDsKK30KKwordm9pZCBmYmRldmRybV9ib191bnJlc2VydmUoc3RydWN0IGZiZGV2ZHJtX2JvICpm Ym8pCit7CisJdHRtX2JvX3VucmVzZXJ2ZSgmZmJvLT5ibyk7Cit9CisKK3U2NCBmYmRldmRybV9i b19tbWFwX29mZnNldChzdHJ1Y3QgZmJkZXZkcm1fYm8gKmZibykKK3sKKwlyZXR1cm4gZHJtX3Zt YV9ub2RlX29mZnNldF9hZGRyKCZmYm8tPmJvLnZtYV9ub2RlKTsKK30KKworaW50IGZiZGV2ZHJt X2JvX3BpbihzdHJ1Y3QgZmJkZXZkcm1fYm8gKmZibywgdTMyIHBsX2ZsYWcpCit7CisJaW50IGks IHJldDsKKwlzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggY3R4ID0geyBmYWxzZSwgZmFsc2UgfTsK KworCWlmIChmYm8tPnBpbl9jb3VudCkgeworCQkrK2Ziby0+cGluX2NvdW50OworCQlyZXR1cm4g MDsKKwl9CisKKwlmYmRldmRybV9ib190dG1fcGxhY2VtZW50KGZibywgcGxfZmxhZyk7CisJZm9y IChpID0gMDsgaSA8IGZiby0+cGxhY2VtZW50Lm51bV9wbGFjZW1lbnQ7ICsraSkKKwkJZmJvLT5w bGFjZW1lbnRzW2ldLmZsYWdzIHw9IFRUTV9QTF9GTEFHX05PX0VWSUNUOworCisJcmV0ID0gdHRt X2JvX3ZhbGlkYXRlKCZmYm8tPmJvLCAmZmJvLT5wbGFjZW1lbnQsICZjdHgpOworCWlmIChyZXQg PCAwKSB7CisJCURSTV9FUlJPUigiZmJkZXZkcm06IHR0bV9ib192YWxpZGF0ZSBmYWlsZWQsIGVy cm9yICVkXG4iLCAtcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlmYm8tPnBpbl9jb3VudCA9 IDE7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGZiZGV2ZHJtX2JvX3VucGluKHN0cnVjdCBmYmRl dmRybV9ibyAqZmJvKQoreworCWludCBpLCByZXQ7CisJc3RydWN0IHR0bV9vcGVyYXRpb25fY3R4 IGN0eCA9IHsgZmFsc2UsIGZhbHNlIH07CisKKwlpZiAoIWZiby0+cGluX2NvdW50KSB7CisJCURS TV9FUlJPUigiZmJkZXZkcm06IEJPICVwIGlzIG5vdCBwaW5uZWQgXG4iLCBmYm8pOworCQlyZXR1 cm4gMDsKKwl9CisJLS1mYm8tPnBpbl9jb3VudDsKKwlpZiAoZmJvLT5waW5fY291bnQpCisJCXJl dHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGZiby0+cGxhY2VtZW50Lm51bV9wbGFjZW1lbnQg OyArK2kpCisJCWZiby0+cGxhY2VtZW50c1tpXS5mbGFncyAmPSB+VFRNX1BMX0ZMQUdfTk9fRVZJ Q1Q7CisKKwlyZXQgPSB0dG1fYm9fdmFsaWRhdGUoJmZiby0+Ym8sICZmYm8tPnBsYWNlbWVudCwg JmN0eCk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJmYmRldmRybTogdHRtX2JvX3Zh bGlkYXRlIGZhaWxlZCwgZXJyb3IgJWRcbiIsIC1yZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwor CXJldHVybiAwOworfQorCitpbnQgZmJkZXZkcm1fYm9fcHVzaF90b19zeXN0ZW0oc3RydWN0IGZi ZGV2ZHJtX2JvICpmYm8pCit7CisJaW50IGksIHJldDsKKwlzdHJ1Y3QgdHRtX29wZXJhdGlvbl9j dHggY3R4ID0geyBmYWxzZSwgZmFsc2UgfTsKKworCWlmICghZmJvLT5waW5fY291bnQpIHsKKwkJ RFJNX0VSUk9SKCJmYmRldmRybTogQk8gJXAgaXMgbm90IHBpbm5lZCBcbiIsIGZibyk7CisJCXJl dHVybiAwOworCX0KKwktLWZiby0+cGluX2NvdW50OworCWlmIChmYm8tPnBpbl9jb3VudCkKKwkJ cmV0dXJuIDA7CisKKwlpZiAoZmJvLT5rbWFwLnZpcnR1YWwpCisJCXR0bV9ib19rdW5tYXAoJmZi by0+a21hcCk7CisKKwlmYmRldmRybV9ib190dG1fcGxhY2VtZW50KGZibywgVFRNX1BMX0ZMQUdf U1lTVEVNKTsKKwlmb3IgKGkgPSAwOyBpIDwgZmJvLT5wbGFjZW1lbnQubnVtX3BsYWNlbWVudCA7 ICsraSkKKwkJZmJvLT5wbGFjZW1lbnRzW2ldLmZsYWdzIHw9IFRUTV9QTF9GTEFHX05PX0VWSUNU OworCisJcmV0ID0gdHRtX2JvX3ZhbGlkYXRlKCZmYm8tPmJvLCAmZmJvLT5wbGFjZW1lbnQsICZj dHgpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYmRldmRybTogdHRtX2JvX3ZhbGlkYXRl IGZhaWxlZCwgZXJyb3IgJWRcbiIsIC1yZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVy biAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2ZiZGV2ZHJtL2ZiZGV2ZHJtX2Jv LmggYi9kcml2ZXJzL2dwdS9kcm0vZmJkZXZkcm0vZmJkZXZkcm1fYm8uaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjc2MDJhMGZiZDZhNQotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV9iby5oCkBAIC0wLDAgKzEsNTgg QEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCisgKgorICog T25lIHB1cnBvc2Ugb2YgdGhpcyBkcml2ZXIgaXMgdG8gYWxsb3cgZm9yIGVhc3kgY29udmVyc2lv biBvZiBmcmFtZWJ1ZmZlcgorICogZHJpdmVycyB0byBEUk0uIEFzIGEgc3BlY2lhbCBleGNlcHRp b24gdG8gdGhlIEdOVSBHUEwsIHlvdSBhcmUgYWxsb3dlZCB0bworICogcmVsaWNlbnNlIHRoaXMg ZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgYSBsaWNlbnNlIG9mIHlvdXIgY2hvaWNlIGlmIHlvdSdy ZQorICogcG9ydGluZyBhIGZyYW1lYnVmZmVyIGRyaXZlci4gSW4gb3JkZXIgdG8gZG8gc28sIHVw ZGF0ZSB0aGUgU1BEWCBsaWNlbnNlCisgKiBpZGVudGlmaWVyIHRvIHRoZSBuZXcgbGljZW5zZSBh bmQgcmVtb3ZlIHRoaXMgZXhjZXB0aW9uLgorICoKKyAqIElmIHlvdSBhZGQgY29kZSB0byB0aGlz IGZpbGUsIHBsZWFzZSBlbnN1cmUgdGhhdCBpdCdzIGNvbXBhdGlibGUgd2l0aCB0aGUKKyAqIHN0 YXRlZCBleGNlcHRpb24uCisgKi8KKworI2lmbmRlZiBGQkRFVkRSTV9CT19ICisjZGVmaW5lIEZC REVWRFJNX0JPX0gKKworI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8ZHJtL3R0 bS90dG1fYm9fYXBpLmg+CisjaW5jbHVkZSA8ZHJtL3R0bS90dG1fcGxhY2VtZW50Lmg+CisjaW5j bHVkZSA8bGludXgva2VybmVsLmg+IC8qIGZvciBjb250YWluZXJfb2YoKSAqLworCitzdHJ1Y3Qg ZmJkZXZkcm1fYm8geworICAgICAgICBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgYm87CisgICAg ICAgIHN0cnVjdCB0dG1fcGxhY2VtZW50IHBsYWNlbWVudDsKKyAgICAgICAgc3RydWN0IHR0bV9i b19rbWFwX29iaiBrbWFwOworICAgICAgICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgZ2VtOworCisg ICAgICAgIC8qIFN1cHBvcnRlZCBwbGFjZW1lbnRzIGFyZSBWUkFNIGFuZCBTWVNURU0gKi8KKyAg ICAgICAgc3RydWN0IHR0bV9wbGFjZSBwbGFjZW1lbnRzWzNdOworICAgICAgICBpbnQgcGluX2Nv dW50OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZmJkZXZkcm1fYm8qIGZiZGV2ZHJtX2Jv X29mX2JvKAorCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCit7CisJcmV0dXJuIGNvbnRh aW5lcl9vZihibywgc3RydWN0IGZiZGV2ZHJtX2JvLCBibyk7Cit9CisKK3N0YXRpYyBpbmxpbmUg c3RydWN0IGZiZGV2ZHJtX2JvKiBmYmRldmRybV9ib19vZl9nZW0oCisJc3RydWN0IGRybV9nZW1f b2JqZWN0ICpnZW0pCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihnZW0sIHN0cnVjdCBmYmRldmRy bV9ibywgZ2VtKTsKK30KKworc3RydWN0IGZiZGV2ZHJtX2JvKiBmYmRldmRybV9ib19jcmVhdGUo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHNpemUsCisJCQkJICAgICAgIGludCBhbGlnbiwg dWludDMyX3QgZmxhZ3MpOworc3RydWN0IGZiZGV2ZHJtX2JvKiBmYmRldmRybV9ib19jcmVhdGVf d2l0aF9waXRjaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJICBpbnQgc2l6ZSwgaW50 IHBpdGNoLAorCQkJCQkJICB1aW50MzJfdCBmbGFncyk7Cit2b2lkIGZiZGV2ZHJtX2JvX3B1dChz dHJ1Y3QgZmJkZXZkcm1fYm8gKmZibyk7CisKK2ludCBmYmRldmRybV9ib19yZXNlcnZlKHN0cnVj dCBmYmRldmRybV9ibyAqZmJvLCBib29sIG5vX3dhaXQpOwordm9pZCBmYmRldmRybV9ib191bnJl c2VydmUoc3RydWN0IGZiZGV2ZHJtX2JvICpmYm8pOwordTY0IGZiZGV2ZHJtX2JvX21tYXBfb2Zm c2V0KHN0cnVjdCBmYmRldmRybV9ibyAqZmJvKTsKK2ludCBmYmRldmRybV9ib19waW4oc3RydWN0 IGZiZGV2ZHJtX2JvICpmYm8sIHUzMiBwbF9mbGFnKTsKK2ludCBmYmRldmRybV9ib191bnBpbihz dHJ1Y3QgZmJkZXZkcm1fYm8gKmZibyk7CitpbnQgZmJkZXZkcm1fYm9fcHVzaF90b19zeXN0ZW0o c3RydWN0IGZiZGV2ZHJtX2JvICpmYm8pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9mYmRldmRybS9mYmRldmRybV9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9mYmRl dmRybS9mYmRldmRybV9kZXZpY2UuYwppbmRleCAwYWJmNDFjZjA1YmIuLmM4MDU0ZWFjMjcxZCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2ZiZGV2ZHJtL2ZiZGV2ZHJtX2RldmljZS5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV9kZXZpY2UuYwpAQCAtMzMsOSAr MzMsMTcgQEAgaW50IGZiZGV2ZHJtX2RldmljZV9pbml0KHN0cnVjdCBmYmRldmRybV9kZXZpY2Ug KmZkZXYsIHN0cnVjdCBkcm1fZHJpdmVyICpkcnYsCiAJZmRldi0+ZGV2LnBkZXYgPSBjb250YWlu ZXJfb2YoZmJfaW5mby0+ZGV2aWNlLCBzdHJ1Y3QgcGNpX2RldiwgZGV2KTsKIAlmZGV2LT5mYl9p bmZvID0gZmJfaW5mbzsKIAorCXJldCA9IGZiZGV2ZHJtX3R0bV9pbml0KCZmZGV2LT50dG0sICZm ZGV2LT5kZXYsIGZiX2luZm8pOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2RybV9kZXZfZmluaTsK KwogCUlOSVRfTElTVF9IRUFEKCZmZGV2LT5kZXZpY2VfbGlzdCk7CiAKIAlyZXR1cm4gMDsKKwor ZXJyX2RybV9kZXZfZmluaToKKwlkcm1fZGV2X2ZpbmkoJmZkZXYtPmRldik7CisJcmV0dXJuIHJl dDsKIH0KIAogdm9pZCBmYmRldmRybV9kZXZpY2VfY2xlYW51cChzdHJ1Y3QgZmJkZXZkcm1fZGV2 aWNlICpmZGV2KQpAQCAtNDcsNiArNTUsOCBAQCB2b2lkIGZiZGV2ZHJtX2RldmljZV9jbGVhbnVw KHN0cnVjdCBmYmRldmRybV9kZXZpY2UgKmZkZXYpCiAJCQkgICJpbiBkZXZpY2UgbGlzdFxuIik7 CiAJfQogCisJZmJkZXZkcm1fdHRtX2NsZWFudXAoJmZkZXYtPnR0bSk7CisKIAlkcm1fZGV2X2Zp bmkoZGV2KTsKIAlkZXYtPmRldl9wcml2YXRlID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV9kZXZpY2UuaCBiL2RyaXZlcnMvZ3B1L2RybS9m YmRldmRybS9mYmRldmRybV9kZXZpY2UuaAppbmRleCA4NTg3OGY2MGJiYTQuLjM4MWQ5Y2ZiMTQ1 MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2ZiZGV2ZHJtL2ZiZGV2ZHJtX2RldmljZS5o CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV9kZXZpY2UuaApAQCAtMTYs NiArMTYsNyBAQAogI2luY2x1ZGUgPGRybS9kcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgv a2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgImZiZGV2ZHJtX3R0 bS5oIgogCiBzdHJ1Y3QgZHJtX2RyaXZlcjsKIHN0cnVjdCBmYl9pbmZvOwpAQCAtMjQsNiArMjUs OCBAQCBzdHJ1Y3QgZmJkZXZkcm1fZGV2aWNlIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSBkZXY7CiAJ c3RydWN0IGZiX2luZm8gKmZiX2luZm87CiAKKwlzdHJ1Y3QgZmJkZXZkcm1fdHRtIHR0bTsKKwog CXN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlX2xpc3Q7IC8qIGVudHJ5IGluIGdsb2JhbCBkZXZpY2Ug bGlzdCAqLwogfTsKIApAQCAtMzMsNiArMzYsMTIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZmJk ZXZkcm1fZGV2aWNlKiBmYmRldmRybV9kZXZpY2Vfb2ZfZGV2aWNlX2xpc3QoCiAJcmV0dXJuIGxp c3RfZW50cnkoZGV2aWNlX2xpc3QsIHN0cnVjdCBmYmRldmRybV9kZXZpY2UsIGRldmljZV9saXN0 KTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZmJkZXZkcm1fZGV2aWNlKiBmYmRldmRybV9k ZXZpY2Vfb2ZfZGV2KAorCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGNvbnRh aW5lcl9vZihkZXYsIHN0cnVjdCBmYmRldmRybV9kZXZpY2UsIGRldik7Cit9CisKIGludCBmYmRl dmRybV9kZXZpY2VfaW5pdChzdHJ1Y3QgZmJkZXZkcm1fZGV2aWNlICpmZGV2LCBzdHJ1Y3QgZHJt X2RyaXZlciAqZHJ2LAogCQkJIHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKTsKIHZvaWQgZmJkZXZk cm1fZGV2aWNlX2NsZWFudXAoc3RydWN0IGZiZGV2ZHJtX2RldmljZSAqZmRldik7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vZmJkZXZkcm0vZmJkZXZkcm1fdHRtLmMgYi9kcml2ZXJzL2dw dS9kcm0vZmJkZXZkcm0vZmJkZXZkcm1fdHRtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi5mN2FlZmY3NTVjMzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vZmJkZXZkcm0vZmJkZXZkcm1fdHRtLmMKQEAgLTAsMCArMSwyMDIgQEAKKy8qIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCisgKgorICogT25lIHB1cnBvc2Ug b2YgdGhpcyBkcml2ZXIgaXMgdG8gYWxsb3cgZm9yIGVhc3kgY29udmVyc2lvbiBvZiBmcmFtZWJ1 ZmZlcgorICogZHJpdmVycyB0byBEUk0uIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdO VSBHUEwsIHlvdSBhcmUgYWxsb3dlZCB0bworICogcmVsaWNlbnNlIHRoaXMgZmlsZSB1bmRlciB0 aGUgdGVybXMgb2YgYSBsaWNlbnNlIG9mIHlvdXIgY2hvaWNlIGlmIHlvdSdyZQorICogcG9ydGlu ZyBhIGZyYW1lYnVmZmVyIGRyaXZlci4gSW4gb3JkZXIgdG8gZG8gc28sIHVwZGF0ZSB0aGUgU1BE WCBsaWNlbnNlCisgKiBpZGVudGlmaWVyIHRvIHRoZSBuZXcgbGljZW5zZSBhbmQgcmVtb3ZlIHRo aXMgZXhjZXB0aW9uLgorICoKKyAqIElmIHlvdSBhZGQgY29kZSB0byB0aGlzIGZpbGUsIHBsZWFz ZSBlbnN1cmUgdGhhdCBpdCdzIGNvbXBhdGlibGUgd2l0aCB0aGUKKyAqIHN0YXRlZCBleGNlcHRp b24uCisgKi8KKworI2luY2x1ZGUgImZiZGV2ZHJtX3R0bS5oIgorI2luY2x1ZGUgPGRybS9kcm1Q Lmg+CisjaW5jbHVkZSA8ZHJtL3R0bS90dG1fcGFnZV9hbGxvYy5oPgorI2luY2x1ZGUgImZiZGV2 ZHJtX2JvLmgiCisKK3N0YXRpYyBzdHJ1Y3QgZmJkZXZkcm1fdHRtKiBmYmRldmRybV90dG1fb2Zf YmRldigKKwlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldikKK3sKKwlyZXR1cm4gY29udGFpbmVy X29mKGJkZXYsIHN0cnVjdCBmYmRldmRybV90dG0sIGJkZXYpOworfQorCisvKgorICogVFRNIEJP IGRldmljZQorICovCisKK3N0YXRpYyB2b2lkIGZiZGV2ZHJtX3R0bV9iYWNrZW5kX2Rlc3Ryb3ko c3RydWN0IHR0bV90dCAqdHQpCit7CisJdHRtX3R0X2ZpbmkodHQpOworCWtmcmVlKHR0KTsKK30K Kworc3RhdGljIHN0cnVjdCB0dG1fYmFja2VuZF9mdW5jIGZiZGV2ZHJtX3R0bV9iYWNrZW5kX2Z1 bmMgPSB7CisJLmRlc3Ryb3kgPSBmYmRldmRybV90dG1fYmFja2VuZF9kZXN0cm95Cit9OworCitz dGF0aWMgc3RydWN0IHR0bV90dCAqZmJkZXZkcm1fdHRtX3R0X2NyZWF0ZShzdHJ1Y3QgdHRtX2J1 ZmZlcl9vYmplY3QgKmJvLAorCQkJCQkgICAgIHVpbnQzMl90IHBhZ2VfZmxhZ3MpCit7CisJc3Ry dWN0IHR0bV90dCAqdHQ7CisJaW50IHJldDsKKworCXR0ID0ga3phbGxvYyhzaXplb2YoKnR0KSwg R0ZQX0tFUk5FTCk7CisJaWYgKCF0dCkKKwkJcmV0dXJuIE5VTEw7CisKKwl0dC0+ZnVuYyA9ICZm YmRldmRybV90dG1fYmFja2VuZF9mdW5jOworCisJcmV0ID0gdHRtX3R0X2luaXQodHQsIGJvLCBw YWdlX2ZsYWdzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfdHRtX3R0X2luaXQ7CisKKwly ZXR1cm4gdHQ7CisKK2Vycl90dG1fdHRfaW5pdDoKKwlrZnJlZSh0dCk7CisJcmV0dXJuIE5VTEw7 Cit9CisKK3N0YXRpYyBpbnQgZmJkZXZkcm1fYm9faW5pdF9tZW1fdHlwZShzdHJ1Y3QgdHRtX2Jv X2RldmljZSAqYmRldiwgdWludDMyX3QgdHlwZSwKKwkJCQkgICAgIHN0cnVjdCB0dG1fbWVtX3R5 cGVfbWFuYWdlciAqbWFuKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgVFRNX1BMX1NZU1RF TToKKwkJbWFuLT5mbGFncyA9IFRUTV9NRU1UWVBFX0ZMQUdfTUFQUEFCTEU7CisJCW1hbi0+YXZh aWxhYmxlX2NhY2hpbmcgPSBUVE1fUExfTUFTS19DQUNISU5HOworCQltYW4tPmRlZmF1bHRfY2Fj aGluZyA9IFRUTV9QTF9GTEFHX0NBQ0hFRDsKKwkJYnJlYWs7CisJY2FzZSBUVE1fUExfVlJBTToK KwkJbWFuLT5mdW5jID0gJnR0bV9ib19tYW5hZ2VyX2Z1bmM7CisJCW1hbi0+ZmxhZ3MgPSBUVE1f TUVNVFlQRV9GTEFHX0ZJWEVEIHwKKwkJCSAgICAgVFRNX01FTVRZUEVfRkxBR19NQVBQQUJMRTsK KwkJbWFuLT5hdmFpbGFibGVfY2FjaGluZyA9IFRUTV9QTF9GTEFHX1VOQ0FDSEVEIHwKKwkJCQkJ IFRUTV9QTF9GTEFHX1dDOworCQltYW4tPmRlZmF1bHRfY2FjaGluZyA9IFRUTV9QTF9GTEFHX1dD OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoImZiZGV2ZHJtOiBVbnN1cHBvcnRl ZCBtZW1vcnkgdHlwZSAldVxuIiwgKHVuc2lnbmVkKXR5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZiZGV2ZHJtX2JvX2V2aWN0X2ZsYWdz KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCisJCQkJICAgIHN0cnVjdCB0dG1fcGxhY2Vt ZW50ICpwbCkKK3sgfQorCitzdGF0aWMgaW50IGZiZGV2ZHJtX2JvX3ZlcmlmeV9hY2Nlc3Moc3Ry dWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKKwkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxwKQor eworCXN0cnVjdCBmYmRldmRybV9ibyAqZmJvID0gZmJkZXZkcm1fYm9fb2ZfYm8oYm8pOworCisJ cmV0dXJuIGRybV92bWFfbm9kZV92ZXJpZnlfYWNjZXNzKCZmYm8tPmdlbS52bWFfbm9kZSwKKwkJ CQkJICBmaWxwLT5wcml2YXRlX2RhdGEpOworfQorCitzdGF0aWMgaW50IGZiZGV2ZHJtX3R0bV9p b19tZW1fcmVzZXJ2ZShzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwKKwkJCQkgICAgICAgc3Ry dWN0IHR0bV9tZW1fcmVnICptZW0pCit7CisJc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICpt YW4gPSBiZGV2LT5tYW4gKyBtZW0tPm1lbV90eXBlOworCXN0cnVjdCBmYmRldmRybV90dG0gKnR0 bSA9IGZiZGV2ZHJtX3R0bV9vZl9iZGV2KGJkZXYpOworCisJaWYgKCEobWFuLT5mbGFncyAmIFRU TV9NRU1UWVBFX0ZMQUdfTUFQUEFCTEUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbS0+YnVz LmFkZHIgPSBOVUxMOworCW1lbS0+YnVzLnNpemUgPSBtZW0tPm51bV9wYWdlcyA8PCBQQUdFX1NI SUZUOworCisJc3dpdGNoIChtZW0tPm1lbV90eXBlKSB7CisJY2FzZSBUVE1fUExfU1lTVEVNOgkv KiBub3RoaW5nIHRvIGRvICovCisJCW1lbS0+YnVzLm9mZnNldCA9IDA7CisJCW1lbS0+YnVzLmJh c2UgPSAwOworCQltZW0tPmJ1cy5pc19pb21lbSA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIFRU TV9QTF9WUkFNOgorCQltZW0tPmJ1cy5vZmZzZXQgPSBtZW0tPnN0YXJ0IDw8IFBBR0VfU0hJRlQ7 CisJCW1lbS0+YnVzLmJhc2UgPSB0dG0tPmZiX2luZm8tPmZpeC5zbWVtX3N0YXJ0OworCQltZW0t PmJ1cy5pc19pb21lbSA9IHRydWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmYmRldmRybV90dG1faW9f bWVtX2ZyZWUoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCisJCQkJICAgc3RydWN0IHR0bV9t ZW1fcmVnICptZW0pCit7IH0KKworc3RhdGljIHN0cnVjdCB0dG1fYm9fZHJpdmVyIGZiZGV2ZHJt X2JvX2RyaXZlciA9IHsKKwkudHRtX3R0X2NyZWF0ZSA9IGZiZGV2ZHJtX3R0bV90dF9jcmVhdGUs CisJLnR0bV90dF9wb3B1bGF0ZSA9IHR0bV9wb29sX3BvcHVsYXRlLAorCS50dG1fdHRfdW5wb3B1 bGF0ZSA9IHR0bV9wb29sX3VucG9wdWxhdGUsCisJLmluaXRfbWVtX3R5cGUgPSBmYmRldmRybV9i b19pbml0X21lbV90eXBlLAorCS5ldmljdGlvbl92YWx1YWJsZSA9IHR0bV9ib19ldmljdGlvbl92 YWx1YWJsZSwKKwkuZXZpY3RfZmxhZ3MgPSBmYmRldmRybV9ib19ldmljdF9mbGFncywKKwkudmVy aWZ5X2FjY2VzcyA9IGZiZGV2ZHJtX2JvX3ZlcmlmeV9hY2Nlc3MsCisJLmlvX21lbV9yZXNlcnZl ID0gZmJkZXZkcm1fdHRtX2lvX21lbV9yZXNlcnZlLAorCS5pb19tZW1fZnJlZSA9IGZiZGV2ZHJt X3R0bV9pb19tZW1fZnJlZSwKK307CisKK3N0YXRpYyBpbnQgZmJkZXZkcm1faW5pdF90dG1fYm9f ZGV2aWNlKHN0cnVjdCBmYmRldmRybV90dG0gKnR0bSwKKwkJCQkgICAgICAgc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBwX3NpemUpCit7CisJaW50IHJl dDsKKworCXJldCA9IHR0bV9ib19kZXZpY2VfaW5pdCgmdHRtLT5iZGV2LAorCQkJCSAmZmJkZXZk cm1fYm9fZHJpdmVyLAorCQkJCSBkZXYtPmFub25faW5vZGUtPmlfbWFwcGluZywKKwkJCQkgRFJN X0ZJTEVfUEFHRV9PRkZTRVQsCisJCQkJIHRydWUpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9S KCJmYmRldmRybTogdHRtX2JvX2RldmljZV9pbml0IGZhaWxlZDsgJWRcbiIsIHJldCk7CisJCXJl dHVybiByZXQ7CisJfQorCisJcmV0ID0gdHRtX2JvX2luaXRfbW0oJnR0bS0+YmRldiwgVFRNX1BM X1ZSQU0sIHBfc2l6ZSk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZiZGV2ZHJtOiB0dG1f Ym9faW5pdF9tbSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJl dHVybiAwOworfQorCisvKgorICogc3RydWN0IGZiZGV2ZHJtX3R0bQorICovCisKK2ludCBmYmRl dmRybV90dG1faW5pdChzdHJ1Y3QgZmJkZXZkcm1fdHRtICp0dG0sIHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCisJCSAgICAgIHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKQoreworCWludCByZXQ7CisK Kwl0dG0tPmRldiA9IGRldjsKKwl0dG0tPmZiX2luZm8gPSBmYl9pbmZvOworCisJLyogRFJNIHBv cnRpbmcgbm90ZXM6IHByb2dyYW1taW5nIHRoZSBsaW5lYXIgc2Nhbm91dCBidWZmZXIgaXMKKwkg KiBpbXBsZW1lbnRlZCB2aWEgZGlzcGxheSBwYW5uaW5nLiBUbyBtYWtlIHRoaXMgd29yaywgYWxs IEJPcworCSAqIGhhdmUgdG8gZW5kIGF0IHNjYW5saW5lIGJvdW5kYXJpZXMuIFRoZSBmaW5hbCBC TyBjb3VsZCBiZSBwbGFjZWQKKwkgKiBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIGRpc3BsYXkgbWVt b3J5LCB3aGljaCBtaWdodCBub3QgYWxpZ24KKwkgKiB3aXRoIHRoZSBlbmQgb2YgdGhlIGZpbmFs IHNjYW5saW5lLiBGYmRldiB3b3VsZCByZWplY3Qgc3VjaCBhCisJICogY29vcmRpbmF0ZSBmb3Ig ZGlzcGxheSBwYW5uaW5nLiBUbyBhdm9pZCB0aGlzLCB3ZSBkb24ndCB1c2UgdGhlCisJICogZGlz cGxheSBtZW1vcnkncyBmaW5hbCA0IHBhZ2VzLiBJZiB5b3UgY29udmVydCBhbiBmYmRldiBkcml2 ZXIKKwkgKiB0byBEUk0sIHJlbW92ZSB0aGlzIHdvcmthcm91bmQgYW5kIGhhbmQtb3ZlciBhbGwg bWVtb3J5IHRvIFRUTS4KKwkgKi8KKwl0dG0tPnZyYW1fc2l6ZSA9IGZiX2luZm8tPmZpeC5zbWVt X2xlbiAtIDQgKiBQQUdFX1NJWkU7CisKKwlyZXQgPSBmYmRldmRybV9pbml0X3R0bV9ib19kZXZp Y2UodHRtLCBkZXYsIHR0bS0+dnJhbV9zaXplID4+IFBBR0VfU0hJRlQpOworCWlmIChyZXQgPCAw KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZmJkZXZkcm1fdHRtX2Ns ZWFudXAoc3RydWN0IGZiZGV2ZHJtX3R0bSAqdHRtKQoreworCXR0bV9ib19kZXZpY2VfcmVsZWFz ZSgmdHRtLT5iZGV2KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9m YmRldmRybV90dG0uaCBiL2RyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV90dG0uaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmQzZTk2NGNkODIxNQotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV90dG0uaApA QCAtMCwwICsxLDM1IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1s YXRlcgorICoKKyAqIE9uZSBwdXJwb3NlIG9mIHRoaXMgZHJpdmVyIGlzIHRvIGFsbG93IGZvciBl YXN5IGNvbnZlcnNpb24gb2YgZnJhbWVidWZmZXIKKyAqIGRyaXZlcnMgdG8gRFJNLiBBcyBhIHNw ZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR1BMLCB5b3UgYXJlIGFsbG93ZWQgdG8KKyAqIHJl bGljZW5zZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIGEgbGljZW5zZSBvZiB5b3VyIGNo b2ljZSBpZiB5b3UncmUKKyAqIHBvcnRpbmcgYSBmcmFtZWJ1ZmZlciBkcml2ZXIuIEluIG9yZGVy IHRvIGRvIHNvLCB1cGRhdGUgdGhlIFNQRFggbGljZW5zZQorICogaWRlbnRpZmllciB0byB0aGUg bmV3IGxpY2Vuc2UgYW5kIHJlbW92ZSB0aGlzIGV4Y2VwdGlvbi4KKyAqCisgKiBJZiB5b3UgYWRk IGNvZGUgdG8gdGhpcyBmaWxlLCBwbGVhc2UgZW5zdXJlIHRoYXQgaXQncyBjb21wYXRpYmxlIHdp dGggdGhlCisgKiBzdGF0ZWQgZXhjZXB0aW9uLgorICovCisKKyNpZm5kZWYgRkJERVZEUk1fVFRN X0gKKyNkZWZpbmUgRkJERVZEUk1fVFRNX0gKKworI2luY2x1ZGUgPGRybS90dG0vdHRtX2JvX2Ry aXZlci5oPgorCisjZGVmaW5lIERSTV9GSUxFX1BBR0VfT0ZGU0VUICgweDEwMDAwMDAwMFVMTCA+ PiBQQUdFX1NISUZUKQorCitzdHJ1Y3QgZHJtX2RldmljZTsKK3N0cnVjdCBmYl9pbmZvOworCitz dHJ1Y3QgZmJkZXZkcm1fdHRtIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCXN0cnVjdCBm Yl9pbmZvICpmYl9pbmZvOworCisJc2l6ZV90IHZyYW1fc2l6ZTsKKwlzdHJ1Y3QgdHRtX2JvX2Rl dmljZSBiZGV2OworfTsKKworaW50IGZiZGV2ZHJtX3R0bV9pbml0KHN0cnVjdCBmYmRldmRybV90 dG0gKnR0bSwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgICAgc3RydWN0IGZiX2luZm8g KmZiX2luZm8pOwordm9pZCBmYmRldmRybV90dG1fY2xlYW51cChzdHJ1Y3QgZmJkZXZkcm1fdHRt ICp0dG0pOworCisjZW5kaWYKLS0gCjIuMjEuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVs