From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Subject: [PATCH 3/3] drm/ttm: add transparent huge page support for DMA allocations Date: Thu, 13 Jul 2017 15:56:09 +0200 Message-ID: <1499954169-3209-3-git-send-email-deathsimple@vodafone.de> References: <1499954169-3209-1-git-send-email-deathsimple@vodafone.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from vsmx012.vodafonemail.xion.oxcs.net (vsmx012.vodafonemail.xion.oxcs.net [153.92.174.90]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7CE866E60D for ; Thu, 13 Jul 2017 14:05:29 +0000 (UTC) Received: from vsmx004.vodafonemail.xion.oxcs.net (unknown [192.168.75.198]) by mta-8-out.mta.xion.oxcs.net (Postfix) with ESMTP id 6AB768CDF99 for ; Thu, 13 Jul 2017 13:56:19 +0000 (UTC) Received: from localhost.localdomain (unknown [109.91.38.109]) by mta-8-out.mta.xion.oxcs.net (Postfix) with ESMTPA id 292C4CD6B6 for ; Thu, 13 Jul 2017 13:56:16 +0000 (UTC) In-Reply-To: <1499954169-3209-1-git-send-email-deathsimple@vodafone.de> 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 List-Id: dri-devel@lists.freedesktop.org RnJvbTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgoKVHJ5IHRv IGFsbG9jYXRlIGh1Z2UgcGFnZXMgd2hlbiBpdCBtYWtlcyBzZW5zZS4KClNpZ25lZC1vZmYtYnk6 IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KLS0tCiBkcml2ZXJz L2dwdS9kcm0vdHRtL3R0bV9wYWdlX2FsbG9jX2RtYS5jIHwgMjE3ICsrKysrKysrKysrKysrKysr KysrKysrKy0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxNjkgaW5zZXJ0aW9ucygrKSwgNDggZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fcGFnZV9hbGxv Y19kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3BhZ2VfYWxsb2NfZG1hLmMKaW5kZXgg MjA4MWUyMC4uZTUxZDNmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fcGFn ZV9hbGxvY19kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9wYWdlX2FsbG9jX2Rt YS5jCkBAIC01NywyMSArNTcsMjUgQEAKICNkZWZpbmUgTlVNX1BBR0VTX1RPX0FMTE9DCQkoUEFH RV9TSVpFL3NpemVvZihzdHJ1Y3QgcGFnZSAqKSkKICNkZWZpbmUgU01BTExfQUxMT0NBVElPTgkJ NAogI2RlZmluZSBGUkVFX0FMTF9QQUdFUwkJCSh+MFUpCisjZGVmaW5lIFZBRERSX0ZMQUdfSFVH RV9QT09MCQkxVUwKIAogZW51bSBwb29sX3R5cGUgewogCUlTX1VOREVGSU5FRAk9IDAsCiAJSVNf V0MJCT0gMSA8PCAxLAogCUlTX1VDCQk9IDEgPDwgMiwKIAlJU19DQUNIRUQJPSAxIDw8IDMsCi0J SVNfRE1BMzIJPSAxIDw8IDQKKwlJU19ETUEzMgk9IDEgPDwgNCwKKwlJU19IVUdFCQk9IDEgPDwg NQogfTsKIAogLyoKLSAqIFRoZSBwb29sIHN0cnVjdHVyZS4gVGhlcmUgYXJlIHVzdWFsbHkgc2l4 IHBvb2xzOgorICogVGhlIHBvb2wgc3RydWN0dXJlLiBUaGVyZSBhcmUgdXAgdG8gc2V2ZW4gcG9v bHM6CiAgKiAgLSBnZW5lcmljIChub3QgcmVzdHJpY3RlZCB0byBETUEzMik6CiAgKiAgICAgIC0g d3JpdGUgY29tYmluZWQsIHVuY2FjaGVkLCBjYWNoZWQuCiAgKiAgLSBkbWEzMiAodXAgdG8gMl4z MiAtIHNvIHVwIDRHQik6CiAgKiAgICAgIC0gd3JpdGUgY29tYmluZWQsIHVuY2FjaGVkLCBjYWNo ZWQuCisgKiAgLSBodWdlIChub3QgcmVzdHJpY3RlZCB0byBETUEzMik6CisgKiAgICAgIC0gY2Fj aGVkLgogICogZm9yIGVhY2ggJ3N0cnVjdCBkZXZpY2UnLiBUaGUgJ2NhY2hlZCcgaXMgZm9yIHBh Z2VzIHRoYXQgYXJlIGFjdGl2ZWx5IHVzZWQuCiAgKiBUaGUgb3RoZXIgb25lcyBjYW4gYmUgc2hy dW5rIGJ5IHRoZSBzaHJpbmtlciBBUEkgaWYgbmVjY2Vzc2FyeS4KICAqIEBwb29sczogVGhlICdz dHJ1Y3QgZGV2aWNlLT5kbWFfcG9vbHMnIGxpbmsuCkBAIC0xMTEsMTMgKzExNSwxNCBAQCBzdHJ1 Y3QgZG1hX3Bvb2wgewogICogVGhlIGFjY291bnRpbmcgcGFnZSBrZWVwaW5nIHRyYWNrIG9mIHRo ZSBhbGxvY2F0ZWQgcGFnZSBhbG9uZyB3aXRoCiAgKiB0aGUgRE1BIGFkZHJlc3MuCiAgKiBAcGFn ZV9saXN0OiBUaGUgbGluayB0byB0aGUgJ3BhZ2VfbGlzdCcgaW4gJ3N0cnVjdCBkbWFfcG9vbCcu Ci0gKiBAdmFkZHI6IFRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIHBhZ2UKKyAqIEB2YWRkcjog VGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgcGFnZSBhbmQgYSBmbGFnIGlmIHRoZSBwYWdlIGJl bG9uZ3MgdG8gYQorICogaHVnZSBwb29sCiAgKiBAZG1hOiBUaGUgYnVzIGFkZHJlc3Mgb2YgdGhl IHBhZ2UuIElmIHRoZSBwYWdlIGlzIG5vdCBhbGxvY2F0ZWQKICAqICAgdmlhIHRoZSBETUEgQVBJ LCBpdCB3aWxsIGJlIC0xLgogICovCiBzdHJ1Y3QgZG1hX3BhZ2UgewogCXN0cnVjdCBsaXN0X2hl YWQgcGFnZV9saXN0OwotCXZvaWQgKnZhZGRyOworCXVuc2lnbmVkIGxvbmcgdmFkZHI7CiAJc3Ry dWN0IHBhZ2UgKnA7CiAJZG1hX2FkZHJfdCBkbWE7CiB9OwpAQCAtMzE2LDcgKzMyMSw4IEBAIHN0 YXRpYyBpbnQgdHRtX3NldF9wYWdlc19jYWNoaW5nKHN0cnVjdCBkbWFfcG9vbCAqcG9vbCwKIHN0 YXRpYyB2b2lkIF9fdHRtX2RtYV9mcmVlX3BhZ2Uoc3RydWN0IGRtYV9wb29sICpwb29sLCBzdHJ1 Y3QgZG1hX3BhZ2UgKmRfcGFnZSkKIHsKIAlkbWFfYWRkcl90IGRtYSA9IGRfcGFnZS0+ZG1hOwot CWRtYV9mcmVlX2NvaGVyZW50KHBvb2wtPmRldiwgcG9vbC0+c2l6ZSwgZF9wYWdlLT52YWRkciwg ZG1hKTsKKwlkX3BhZ2UtPnZhZGRyICY9IH5WQUREUl9GTEFHX0hVR0VfUE9PTDsKKwlkbWFfZnJl ZV9jb2hlcmVudChwb29sLT5kZXYsIHBvb2wtPnNpemUsICh2b2lkICopZF9wYWdlLT52YWRkciwg ZG1hKTsKIAogCWtmcmVlKGRfcGFnZSk7CiAJZF9wYWdlID0gTlVMTDsKQEAgLTMyNCwxOSArMzMw LDIyIEBAIHN0YXRpYyB2b2lkIF9fdHRtX2RtYV9mcmVlX3BhZ2Uoc3RydWN0IGRtYV9wb29sICpw b29sLCBzdHJ1Y3QgZG1hX3BhZ2UgKmRfcGFnZSkKIHN0YXRpYyBzdHJ1Y3QgZG1hX3BhZ2UgKl9f dHRtX2RtYV9hbGxvY19wYWdlKHN0cnVjdCBkbWFfcG9vbCAqcG9vbCkKIHsKIAlzdHJ1Y3QgZG1h X3BhZ2UgKmRfcGFnZTsKKwl2b2lkICp2YWRkcjsKIAogCWRfcGFnZSA9IGttYWxsb2Moc2l6ZW9m KHN0cnVjdCBkbWFfcGFnZSksIEdGUF9LRVJORUwpOwogCWlmICghZF9wYWdlKQogCQlyZXR1cm4g TlVMTDsKIAotCWRfcGFnZS0+dmFkZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQocG9vbC0+ZGV2LCBw b29sLT5zaXplLAotCQkJCQkgICAmZF9wYWdlLT5kbWEsCi0JCQkJCSAgIHBvb2wtPmdmcF9mbGFn cyk7Ci0JaWYgKGRfcGFnZS0+dmFkZHIpIHsKLQkJaWYgKGlzX3ZtYWxsb2NfYWRkcihkX3BhZ2Ut PnZhZGRyKSkKLQkJCWRfcGFnZS0+cCA9IHZtYWxsb2NfdG9fcGFnZShkX3BhZ2UtPnZhZGRyKTsK Kwl2YWRkciA9IGRtYV9hbGxvY19jb2hlcmVudChwb29sLT5kZXYsIHBvb2wtPnNpemUsICZkX3Bh Z2UtPmRtYSwKKwkJCQkgICBwb29sLT5nZnBfZmxhZ3MpOworCWlmICh2YWRkcikgeworCQlpZiAo aXNfdm1hbGxvY19hZGRyKHZhZGRyKSkKKwkJCWRfcGFnZS0+cCA9IHZtYWxsb2NfdG9fcGFnZSh2 YWRkcik7CiAJCWVsc2UKLQkJCWRfcGFnZS0+cCA9IHZpcnRfdG9fcGFnZShkX3BhZ2UtPnZhZGRy KTsKKwkJCWRfcGFnZS0+cCA9IHZpcnRfdG9fcGFnZSh2YWRkcik7CisJCWRfcGFnZS0+dmFkZHIg PSAodW5zaWduZWQgbG9uZyl2YWRkcjsKKwkJaWYgKHBvb2wtPnR5cGUgJiBJU19IVUdFKQorCQkJ ZF9wYWdlLT52YWRkciB8PSBWQUREUl9GTEFHX0hVR0VfUE9PTDsKIAl9IGVsc2UgewogCQlrZnJl ZShkX3BhZ2UpOwogCQlkX3BhZ2UgPSBOVUxMOwpAQCAtMzY4LDExICszNzcsNDAgQEAgc3RhdGlj IHZvaWQgdHRtX3Bvb2xfdXBkYXRlX2ZyZWVfbG9ja2VkKHN0cnVjdCBkbWFfcG9vbCAqcG9vbCwK IH0KIAogLyogc2V0IG1lbW9yeSBiYWNrIHRvIHdiIGFuZCBmcmVlIHRoZSBwYWdlcy4gKi8KK3N0 YXRpYyB2b2lkIHR0bV9kbWFfcGFnZV9wdXQoc3RydWN0IGRtYV9wb29sICpwb29sLCBzdHJ1Y3Qg ZG1hX3BhZ2UgKmRfcGFnZSkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGRfcGFnZS0+cDsKKwl1 bnNpZ25lZCBpLCBudW1fcGFnZXM7CisJaW50IHJldDsKKworCS8qIERvbid0IHNldCBXQiBvbiBX QiBwYWdlIHBvb2wuICovCisJaWYgKCEocG9vbC0+dHlwZSAmIElTX0NBQ0hFRCkpIHsKKwkJbnVt X3BhZ2VzID0gcG9vbC0+c2l6ZSAvIFBBR0VfU0laRTsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9w YWdlczsgKytpLCArK3BhZ2UpIHsKKwkJCXJldCA9IHNldF9wYWdlc19hcnJheV93YigmcGFnZSwg MSk7CisJCQlpZiAocmV0KSB7CisJCQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIHNldCAlZCBwYWdl cyB0byB3YiFcbiIsCisJCQkJICAgICAgIHBvb2wtPmRldl9uYW1lLCAxKTsKKwkJCX0KKwkJfQor CX0KKworCWxpc3RfZGVsKCZkX3BhZ2UtPnBhZ2VfbGlzdCk7CisJX190dG1fZG1hX2ZyZWVfcGFn ZShwb29sLCBkX3BhZ2UpOworfQorCiBzdGF0aWMgdm9pZCB0dG1fZG1hX3BhZ2VzX3B1dChzdHJ1 Y3QgZG1hX3Bvb2wgKnBvb2wsIHN0cnVjdCBsaXN0X2hlYWQgKmRfcGFnZXMsCiAJCQkgICAgICBz dHJ1Y3QgcGFnZSAqcGFnZXNbXSwgdW5zaWduZWQgbnBhZ2VzKQogewogCXN0cnVjdCBkbWFfcGFn ZSAqZF9wYWdlLCAqdG1wOwogCisJaWYgKHBvb2wtPnR5cGUgJiBJU19IVUdFKSB7CisJCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShkX3BhZ2UsIHRtcCwgZF9wYWdlcywgcGFnZV9saXN0KQorCQkJ dHRtX2RtYV9wYWdlX3B1dChwb29sLCBkX3BhZ2UpOworCisJCXJldHVybjsKKwl9CisKIAkvKiBE b24ndCBzZXQgV0Igb24gV0IgcGFnZSBwb29sLiAqLwogCWlmIChucGFnZXMgJiYgIShwb29sLT50 eXBlICYgSVNfQ0FDSEVEKSAmJgogCSAgICBzZXRfcGFnZXNfYXJyYXlfd2IocGFnZXMsIG5wYWdl cykpCkBAIC0zODUsMTcgKzQyMyw2IEBAIHN0YXRpYyB2b2lkIHR0bV9kbWFfcGFnZXNfcHV0KHN0 cnVjdCBkbWFfcG9vbCAqcG9vbCwgc3RydWN0IGxpc3RfaGVhZCAqZF9wYWdlcywKIAl9CiB9CiAK LXN0YXRpYyB2b2lkIHR0bV9kbWFfcGFnZV9wdXQoc3RydWN0IGRtYV9wb29sICpwb29sLCBzdHJ1 Y3QgZG1hX3BhZ2UgKmRfcGFnZSkKLXsKLQkvKiBEb24ndCBzZXQgV0Igb24gV0IgcGFnZSBwb29s LiAqLwotCWlmICghKHBvb2wtPnR5cGUgJiBJU19DQUNIRUQpICYmIHNldF9wYWdlc19hcnJheV93 YigmZF9wYWdlLT5wLCAxKSkKLQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIHNldCAlZCBwYWdlcyB0 byB3YiFcbiIsCi0JCSAgICAgICBwb29sLT5kZXZfbmFtZSwgMSk7Ci0KLQlsaXN0X2RlbCgmZF9w YWdlLT5wYWdlX2xpc3QpOwotCV9fdHRtX2RtYV9mcmVlX3BhZ2UocG9vbCwgZF9wYWdlKTsKLX0K LQogLyoKICAqIEZyZWUgcGFnZXMgZnJvbSBwb29sLgogICoKQEAgLTU2NCw4ICs1OTEsOCBAQCBz dGF0aWMgaW50IHR0bV9kbWFfcG9vbF9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJl cywgdm9pZCAqbWF0Y2hfZGF0YSkKIHN0YXRpYyBzdHJ1Y3QgZG1hX3Bvb2wgKnR0bV9kbWFfcG9v bF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgZ2ZwX3QgZmxhZ3MsCiAJCQkJCSAgZW51bSBwb29s X3R5cGUgdHlwZSkKIHsKLQljaGFyICpuW10gPSB7IndjIiwgInVjIiwgImNhY2hlZCIsICIgZG1h MzIiLCAidW5rbm93biIsfTsKLQllbnVtIHBvb2xfdHlwZSB0W10gPSB7SVNfV0MsIElTX1VDLCBJ U19DQUNIRUQsIElTX0RNQTMyLCBJU19VTkRFRklORUR9OworCWNvbnN0IGNoYXIgKm5bXSA9IHsi d2MiLCAidWMiLCAiY2FjaGVkIiwgIiBkbWEzMiIsICJodWdlIn07CisJZW51bSBwb29sX3R5cGUg dFtdID0ge0lTX1dDLCBJU19VQywgSVNfQ0FDSEVELCBJU19ETUEzMiwgSVNfSFVHRX07CiAJc3Ry dWN0IGRldmljZV9wb29scyAqc2VjX3Bvb2wgPSBOVUxMOwogCXN0cnVjdCBkbWFfcG9vbCAqcG9v bCA9IE5VTEwsICoqcHRyOwogCXVuc2lnbmVkIGk7CkBAIC02MDIsMTEgKzYyOSwxOCBAQCBzdGF0 aWMgc3RydWN0IGRtYV9wb29sICp0dG1fZG1hX3Bvb2xfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYs IGdmcF90IGZsYWdzLAogCXBvb2wtPm5wYWdlc19mcmVlID0gcG9vbC0+bnBhZ2VzX2luX3VzZSA9 IDA7CiAJcG9vbC0+bmZyZWVzID0gMDsKIAlwb29sLT5nZnBfZmxhZ3MgPSBmbGFnczsKLQlwb29s LT5zaXplID0gUEFHRV9TSVpFOworCWlmICh0eXBlICYgSVNfSFVHRSkKKyNpZiBDT05GSUdfVFJB TlNQQVJFTlRfSFVHRVBBR0UKKwkJcG9vbC0+c2l6ZSA9IEhQQUdFX1BNRF9TSVpFOworI2Vsc2UK KwkJQlVHKCk7CisjZW5kaWYKKwllbHNlCisJCXBvb2wtPnNpemUgPSBQQUdFX1NJWkU7CiAJcG9v bC0+dHlwZSA9IHR5cGU7CiAJcG9vbC0+bnJlZmlsbHMgPSAwOwogCXAgPSBwb29sLT5uYW1lOwot CWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0 KTsgaSsrKSB7CiAJCWlmICh0eXBlICYgdFtpXSkgewogCQkJcCArPSBzbnByaW50ZihwLCBzaXpl b2YocG9vbC0+bmFtZSkgLSAocCAtIHBvb2wtPm5hbWUpLAogCQkJCSAgICAgICIlcyIsIG5baV0p OwpAQCAtNzEwLDcgKzc0NCw3IEBAIHN0YXRpYyBpbnQgdHRtX2RtYV9wb29sX2FsbG9jX25ld19w YWdlcyhzdHJ1Y3QgZG1hX3Bvb2wgKnBvb2wsCiAJc3RydWN0IGRtYV9wYWdlICpkbWFfcDsKIAlz dHJ1Y3QgcGFnZSAqcDsKIAlpbnQgciA9IDA7Ci0JdW5zaWduZWQgaSwgY3BhZ2VzOworCXVuc2ln bmVkIGksIGosIG5wYWdlcywgY3BhZ2VzOwogCXVuc2lnbmVkIG1heF9jcGFnZXMgPSBtaW4oY291 bnQsCiAJCQkodW5zaWduZWQpKFBBR0VfU0laRS9zaXplb2Yoc3RydWN0IHBhZ2UgKikpKTsKIApA QCAtNzQ4LDI4ICs3ODIsMzIgQEAgc3RhdGljIGludCB0dG1fZG1hX3Bvb2xfYWxsb2NfbmV3X3Bh Z2VzKHN0cnVjdCBkbWFfcG9vbCAqcG9vbCwKIAkJCWdvdG8gb3V0OwogCQl9CiAJCXAgPSBkbWFf cC0+cDsKKwkJbGlzdF9hZGQoJmRtYV9wLT5wYWdlX2xpc3QsIGRfcGFnZXMpOworCiAjaWZkZWYg Q09ORklHX0hJR0hNRU0KIAkJLyogZ2ZwIGZsYWdzIG9mIGhpZ2htZW0gcGFnZSBzaG91bGQgbmV2 ZXIgYmUgZG1hMzIgc28gd2UKIAkJICogd2Ugc2hvdWxkIGJlIGZpbmUgaW4gc3VjaCBjYXNlCiAJ CSAqLwotCQlpZiAoIVBhZ2VIaWdoTWVtKHApKQorCQlpZiAoUGFnZUhpZ2hNZW0ocCkpCisJCQlj b250aW51ZTsKICNlbmRpZgotCQl7Ci0JCQljYWNoaW5nX2FycmF5W2NwYWdlcysrXSA9IHA7CisK KwkJbnBhZ2VzID0gcG9vbC0+c2l6ZSAvIFBBR0VfU0laRTsKKwkJZm9yIChqID0gMDsgaiA8IG5w YWdlczsgKytqKSB7CisJCQljYWNoaW5nX2FycmF5W2NwYWdlcysrXSA9IHAgKyBqOwogCQkJaWYg KGNwYWdlcyA9PSBtYXhfY3BhZ2VzKSB7CiAJCQkJLyogTm90ZTogQ2Fubm90IGhvbGQgdGhlIHNw aW5sb2NrICovCiAJCQkJciA9IHR0bV9zZXRfcGFnZXNfY2FjaGluZyhwb29sLCBjYWNoaW5nX2Fy cmF5LAotCQkJCQkJIGNwYWdlcyk7CisJCQkJCQkJICBjcGFnZXMpOwogCQkJCWlmIChyKSB7CiAJ CQkJCXR0bV9kbWFfaGFuZGxlX2NhY2hpbmdfc3RhdGVfZmFpbHVyZSgKLQkJCQkJCXBvb2wsIGRf cGFnZXMsIGNhY2hpbmdfYXJyYXksCi0JCQkJCQljcGFnZXMpOworCQkJCQkgICAgIHBvb2wsIGRf cGFnZXMsIGNhY2hpbmdfYXJyYXksCisJCQkJCSAgICAgY3BhZ2VzKTsKIAkJCQkJZ290byBvdXQ7 CiAJCQkJfQogCQkJCWNwYWdlcyA9IDA7CiAJCQl9CiAJCX0KLQkJbGlzdF9hZGQoJmRtYV9wLT5w YWdlX2xpc3QsIGRfcGFnZXMpOwogCX0KIAogCWlmIChjcGFnZXMpIHsKQEAgLTg1Nyw2ICs4OTUs MjYgQEAgc3RhdGljIGludCB0dG1fZG1hX3Bvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBkbWFfcG9vbCAq cG9vbCwKIAlyZXR1cm4gcjsKIH0KIAorc3RhdGljIGdmcF90IHR0bV9kbWFfcG9vbF9nZnBfZmxh Z3Moc3RydWN0IHR0bV9kbWFfdHQgKnR0bV9kbWEsIGJvb2wgaHVnZSkKK3sKKwlzdHJ1Y3QgdHRt X3R0ICp0dG0gPSAmdHRtX2RtYS0+dHRtOworCWdmcF90IGdmcF9mbGFnczsKKworCWlmICh0dG0t PnBhZ2VfZmxhZ3MgJiBUVE1fUEFHRV9GTEFHX0RNQTMyKQorCQlnZnBfZmxhZ3MgPSBHRlBfVVNF UiB8IEdGUF9ETUEzMjsKKwllbHNlCisJCWdmcF9mbGFncyA9IEdGUF9ISUdIVVNFUjsKKwlpZiAo dHRtLT5wYWdlX2ZsYWdzICYgVFRNX1BBR0VfRkxBR19aRVJPX0FMTE9DKQorCQlnZnBfZmxhZ3Mg fD0gX19HRlBfWkVSTzsKKworCWlmIChodWdlKSB7CisJCWdmcF9mbGFncyB8PSBHRlBfVFJBTlNI VUdFOworCQlnZnBfZmxhZ3MgJj0gfl9fR0ZQX01PVkFCTEU7CisJfQorCisJcmV0dXJuIGdmcF9m bGFnczsKK30KKwogLyoKICAqIE9uIHN1Y2Nlc3MgcGFnZXMgbGlzdCB3aWxsIGhvbGQgY291bnQg bnVtYmVyIG9mIGNvcnJlY3RseQogICogY2FjaGVkIHBhZ2VzLiBPbiBmYWlsdXJlIHdpbGwgaG9s ZCB0aGUgbmVnYXRpdmUgcmV0dXJuIHZhbHVlICgtRU5PTUVNLCBldGMpLgpAQCAtODY1LDYgKzky Myw3IEBAIGludCB0dG1fZG1hX3BvcHVsYXRlKHN0cnVjdCB0dG1fZG1hX3R0ICp0dG1fZG1hLCBz dHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHR0bV90dCAqdHRtID0gJnR0bV9kbWEtPnR0 bTsKIAlzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKm1lbV9nbG9iID0gdHRtLT5nbG9iLT5tZW1fZ2xv YjsKKwl1bnNpZ25lZCBsb25nIG51bV9wYWdlcyA9IHR0bS0+bnVtX3BhZ2VzOwogCXN0cnVjdCBk bWFfcG9vbCAqcG9vbDsKIAllbnVtIHBvb2xfdHlwZSB0eXBlOwogCXVuc2lnbmVkIGk7CkBAIC04 NzMsMjYgKzkzMiw2MSBAQCBpbnQgdHRtX2RtYV9wb3B1bGF0ZShzdHJ1Y3QgdHRtX2RtYV90dCAq dHRtX2RtYSwgc3RydWN0IGRldmljZSAqZGV2KQogCWlmICh0dG0tPnN0YXRlICE9IHR0X3VucG9w dWxhdGVkKQogCQlyZXR1cm4gMDsKIAorCUlOSVRfTElTVF9IRUFEKCZ0dG1fZG1hLT5wYWdlc19s aXN0KTsKKwlpID0gMDsKKwogCXR5cGUgPSB0dG1fdG9fdHlwZSh0dG0tPnBhZ2VfZmxhZ3MsIHR0 bS0+Y2FjaGluZ19zdGF0ZSk7Ci0JcG9vbCA9IHR0bV9kbWFfZmluZF9wb29sKGRldiwgdHlwZSk7 CisKKyNpZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UKKwlpZiAodHRtLT5wYWdlX2ZsYWdz ICYgVFRNX1BBR0VfRkxBR19ETUEzMikKKwkJZ290byBza2lwX2h1Z2U7CisKKwlwb29sID0gdHRt X2RtYV9maW5kX3Bvb2woZGV2LCB0eXBlIHwgSVNfSFVHRSk7CiAJaWYgKCFwb29sKSB7Ci0JCWdm cF90IGdmcF9mbGFnczsKKwkJZ2ZwX3QgZ2ZwX2ZsYWdzID0gdHRtX2RtYV9wb29sX2dmcF9mbGFn cyh0dG1fZG1hLCB0cnVlKTsKIAotCQlpZiAodHRtLT5wYWdlX2ZsYWdzICYgVFRNX1BBR0VfRkxB R19ETUEzMikKLQkJCWdmcF9mbGFncyA9IEdGUF9VU0VSIHwgR0ZQX0RNQTMyOwotCQllbHNlCi0J CQlnZnBfZmxhZ3MgPSBHRlBfSElHSFVTRVI7Ci0JCWlmICh0dG0tPnBhZ2VfZmxhZ3MgJiBUVE1f UEFHRV9GTEFHX1pFUk9fQUxMT0MpCi0JCQlnZnBfZmxhZ3MgfD0gX19HRlBfWkVSTzsKKwkJcG9v bCA9IHR0bV9kbWFfcG9vbF9pbml0KGRldiwgZ2ZwX2ZsYWdzLCB0eXBlIHwgSVNfSFVHRSk7CisJ CWlmIChJU19FUlJfT1JfTlVMTChwb29sKSkKKwkJCWdvdG8gc2tpcF9odWdlOworCX0KIAotCQlw b29sID0gdHRtX2RtYV9wb29sX2luaXQoZGV2LCBnZnBfZmxhZ3MsIHR5cGUpOwotCQlpZiAoSVNf RVJSX09SX05VTEwocG9vbCkpIHsKKwl3aGlsZSAobnVtX3BhZ2VzID49IEhQQUdFX1BNRF9OUikg eworCQl1bnNpZ25lZCBqOworCisJCXJldCA9IHR0bV9kbWFfcG9vbF9nZXRfcGFnZXMocG9vbCwg dHRtX2RtYSwgaSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWJyZWFrOworCisJCXJldCA9IHR0bV9t ZW1fZ2xvYmFsX2FsbG9jX3BhZ2UobWVtX2dsb2IsIHR0bS0+cGFnZXNbaV0sCisJCQkJCQlwb29s LT5zaXplKTsKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCQkJdHRtX2RtYV91bnBvcHVs YXRlKHR0bV9kbWEsIGRldik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQorCisJCWZvciAoaiA9 IGkgKyAxOyBqIDwgKGkgKyBIUEFHRV9QTURfTlIpOyArK2opIHsKKwkJCXR0bS0+cGFnZXNbal0g PSB0dG0tPnBhZ2VzW2ogLSAxXSArIDE7CisJCQl0dG1fZG1hLT5kbWFfYWRkcmVzc1tqXSA9IHR0 bV9kbWEtPmRtYV9hZGRyZXNzW2ogLSAxXSArCisJCQkJUEFHRV9TSVpFOworCQl9CisKKwkJaSAr PSBIUEFHRV9QTURfTlI7CisJCW51bV9wYWdlcyAtPSBIUEFHRV9QTURfTlI7CiAJfQogCi0JSU5J VF9MSVNUX0hFQUQoJnR0bV9kbWEtPnBhZ2VzX2xpc3QpOwotCWZvciAoaSA9IDA7IGkgPCB0dG0t Pm51bV9wYWdlczsgKytpKSB7Citza2lwX2h1Z2U6CisjZW5kaWYKKworCXBvb2wgPSB0dG1fZG1h X2ZpbmRfcG9vbChkZXYsIHR5cGUpOworCWlmICghcG9vbCkgeworCQlnZnBfdCBnZnBfZmxhZ3Mg PSB0dG1fZG1hX3Bvb2xfZ2ZwX2ZsYWdzKHR0bV9kbWEsIGZhbHNlKTsKKworCQlwb29sID0gdHRt X2RtYV9wb29sX2luaXQoZGV2LCBnZnBfZmxhZ3MsIHR5cGUpOworCQlpZiAoSVNfRVJSX09SX05V TEwocG9vbCkpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl3aGlsZSAobnVtX3BhZ2VzKSB7 CiAJCXJldCA9IHR0bV9kbWFfcG9vbF9nZXRfcGFnZXMocG9vbCwgdHRtX2RtYSwgaSk7CiAJCWlm IChyZXQgIT0gMCkgewogCQkJdHRtX2RtYV91bnBvcHVsYXRlKHR0bV9kbWEsIGRldik7CkBAIC05 MDUsNiArOTk5LDkgQEAgaW50IHR0bV9kbWFfcG9wdWxhdGUoc3RydWN0IHR0bV9kbWFfdHQgKnR0 bV9kbWEsIHN0cnVjdCBkZXZpY2UgKmRldikKIAkJCXR0bV9kbWFfdW5wb3B1bGF0ZSh0dG1fZG1h LCBkZXYpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KKworCQkrK2k7CisJCS0tbnVtX3BhZ2Vz OwogCX0KIAogCWlmICh1bmxpa2VseSh0dG0tPnBhZ2VfZmxhZ3MgJiBUVE1fUEFHRV9GTEFHX1NX QVBQRUQpKSB7CkBAIC05MjgsMTAgKzEwMjUsMzMgQEAgdm9pZCB0dG1fZG1hX3VucG9wdWxhdGUo c3RydWN0IHR0bV9kbWFfdHQgKnR0bV9kbWEsIHN0cnVjdCBkZXZpY2UgKmRldikKIAlzdHJ1Y3Qg ZG1hX3BhZ2UgKmRfcGFnZSwgKm5leHQ7CiAJZW51bSBwb29sX3R5cGUgdHlwZTsKIAlib29sIGlz X2NhY2hlZCA9IGZhbHNlOwotCXVuc2lnbmVkIGNvdW50ID0gMCwgaSwgbnBhZ2VzID0gMDsKKwl1 bnNpZ25lZCBjb3VudCwgaSwgbnBhZ2VzID0gMDsKIAl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsK IAogCXR5cGUgPSB0dG1fdG9fdHlwZSh0dG0tPnBhZ2VfZmxhZ3MsIHR0bS0+Y2FjaGluZ19zdGF0 ZSk7CisKKyNpZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UKKwlwb29sID0gdHRtX2RtYV9m aW5kX3Bvb2woZGV2LCB0eXBlIHwgSVNfSFVHRSk7CisJaWYgKHBvb2wpIHsKKwkJY291bnQgPSAw OworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZF9wYWdlLCBuZXh0LCAmdHRtX2RtYS0+cGFn ZXNfbGlzdCwKKwkJCQkJIHBhZ2VfbGlzdCkgeworCQkJaWYgKCEoZF9wYWdlLT52YWRkciAmIFZB RERSX0ZMQUdfSFVHRV9QT09MKSkKKwkJCQljb250aW51ZTsKKworCQkJY291bnQrKzsKKwkJCXR0 bV9tZW1fZ2xvYmFsX2ZyZWVfcGFnZSh0dG0tPmdsb2ItPm1lbV9nbG9iLAorCQkJCQkJIGRfcGFn ZS0+cCwgcG9vbC0+c2l6ZSk7CisJCQl0dG1fZG1hX3BhZ2VfcHV0KHBvb2wsIGRfcGFnZSk7CisJ CX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bG9jaywgaXJxX2ZsYWdzKTsKKwkJcG9v bC0+bnBhZ2VzX2luX3VzZSAtPSBjb3VudDsKKwkJcG9vbC0+bmZyZWVzICs9IGNvdW50OworCQlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5sb2NrLCBpcnFfZmxhZ3MpOworCX0KKyNlbmRp ZgorCiAJcG9vbCA9IHR0bV9kbWFfZmluZF9wb29sKGRldiwgdHlwZSk7CiAJaWYgKCFwb29sKQog CQlyZXR1cm47CkBAIC05NDAsNiArMTA2MCw3IEBAIHZvaWQgdHRtX2RtYV91bnBvcHVsYXRlKHN0 cnVjdCB0dG1fZG1hX3R0ICp0dG1fZG1hLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJCSAgICAgdHRt X3RvX3R5cGUodHRtLT5wYWdlX2ZsYWdzLCB0dF9jYWNoZWQpKSA9PSBwb29sKTsKIAogCS8qIG1h a2Ugc3VyZSBwYWdlcyBhcnJheSBtYXRjaCBsaXN0IGFuZCBjb3VudCBudW1iZXIgb2YgcGFnZXMg Ki8KKwljb3VudCA9IDA7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkX3BhZ2UsICZ0dG1fZG1hLT5w YWdlc19saXN0LCBwYWdlX2xpc3QpIHsKIAkJdHRtLT5wYWdlc1tjb3VudF0gPSBkX3BhZ2UtPnA7 CiAJCWNvdW50Kys7Ci0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vZHJpLWRldmVsCg==