From mboxrd@z Thu Jan 1 00:00:00 1970 From: "=?UTF-8?q?Christian=20K=C3=B6nig?=" Subject: [PATCH 6/8] drm/amdgpu: meld together VM fragment and huge page handling Date: Wed, 12 Sep 2018 10:54:43 +0200 Message-ID: <20180912085445.3245-6-christian.koenig@amd.com> References: <20180912085445.3245-1-christian.koenig@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180912085445.3245-1-christian.koenig-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org VGhpcyBvcHRpbWl6ZXMgdGhlIGdlbmVyYXRpbmcgb2YgUFRFcyBieSB3YWxraW5nIHRoZSBoaWVy YXJjaHkgb25seSBvbmNlCmZvciBhIHJhbmdlIGFuZCBtYWtpbmcgY2hhbmdlcyBhcyBuZWNlc3Nh cnkuCgpJdCBhbGxvd3MgZm9yIGJvdGggaHVnZSAoMk1CKSBhcyB3ZWxsIGdpYW50ICgxR0IpIHBh Z2VzIHRvIGJlIHVzZWQgb24KVmVnYSBhbmQgUmF2ZW4uCgpTaWduZWQtb2ZmLWJ5OiBDaHJpc3Rp YW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+ClJldmlld2VkLWJ5OiBGZWxpeCBL dWVobGluZyA8RmVsaXguS3VlaGxpbmdAYW1kLmNvbT4KQWNrZWQtYnk6IEp1bndlaSBaaGFuZyA8 SmVycnkuWmhhbmdAYW1kLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRn cHVfdm0uYyB8IDI2NyArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBj aGFuZ2VkLCAxNDcgaW5zZXJ0aW9ucygrKSwgMTIwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMKaW5kZXggNzQ3YjZmZjZmZWE3Li4zMjgzMjUzMjRhMWQg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jCkBAIC0xNDg4LDQ2ICsxNDg4 LDc2IEBAIGludCBhbWRncHVfdm1fdXBkYXRlX2RpcmVjdG9yaWVzKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2LAogfQogCiAvKioKLSAqIGFtZGdwdV92bV9oYW5kbGVfaHVnZV9wYWdlcyAtIGhh bmRsZSB1cGRhdGluZyB0aGUgUEQgd2l0aCBodWdlIHBhZ2VzCisgKiBhbWRncHVfdm1fdXBkYXRl X2h1Z2UgLSBmaWd1cmUgb3V0IHBhcmFtZXRlcnMgZm9yIFBURSB1cGRhdGVzCiAgKgotICogQHA6 IHNlZSBhbWRncHVfcHRlX3VwZGF0ZV9wYXJhbXMgZGVmaW5pdGlvbgotICogQGVudHJ5OiB2bV9w dCBlbnRyeSB0byBjaGVjawotICogQHBhcmVudDogcGFyZW50IGVudHJ5Ci0gKiBAbnB0ZXM6IG51 bWJlciBvZiBQVEVzIHVwZGF0ZWQgd2l0aCB0aGlzIG9wZXJhdGlvbgotICogQGRzdDogZGVzdGlu YXRpb24gYWRkcmVzcyB3aGVyZSB0aGUgUFRFcyBzaG91bGQgcG9pbnQgdG8KLSAqIEBmbGFnczog YWNjZXNzIGZsYWdzIGZybyB0aGUgUFRFcwotICoKLSAqIENoZWNrIGlmIHdlIGNhbiB1cGRhdGUg dGhlIFBEIHdpdGggYSBodWdlIHBhZ2UuCisgKiBNYWtlIHN1cmUgdG8gc2V0IHRoZSByaWdodCBm bGFncyBmb3IgdGhlIFBURXMgYXQgdGhlIGRlc2lyZWQgbGV2ZWwuCiAgKi8KLXN0YXRpYyB2b2lk IGFtZGdwdV92bV9oYW5kbGVfaHVnZV9wYWdlcyhzdHJ1Y3QgYW1kZ3B1X3B0ZV91cGRhdGVfcGFy YW1zICpwLAotCQkJCQlzdHJ1Y3QgYW1kZ3B1X3ZtX3B0ICplbnRyeSwKLQkJCQkJc3RydWN0IGFt ZGdwdV92bV9wdCAqcGFyZW50LAotCQkJCQl1bnNpZ25lZCBucHRlcywgdWludDY0X3QgZHN0LAot CQkJCQl1aW50NjRfdCBmbGFncykKLXsKLQl1aW50NjRfdCBwZGU7CitzdGF0aWMgdm9pZCBhbWRn cHVfdm1fdXBkYXRlX2h1Z2Uoc3RydWN0IGFtZGdwdV9wdGVfdXBkYXRlX3BhcmFtcyAqcGFyYW1z LAorCQkJCSAgc3RydWN0IGFtZGdwdV9ibyAqYm8sIHVuc2lnbmVkIGxldmVsLAorCQkJCSAgdWlu dDY0X3QgcGUsIHVpbnQ2NF90IGFkZHIsCisJCQkJICB1bnNpZ25lZCBjb3VudCwgdWludDMyX3Qg aW5jciwKKwkJCQkgIHVpbnQ2NF90IGZsYWdzKQogCi0JLyogSW4gdGhlIGNhc2Ugb2YgYSBtaXhl ZCBQVCB0aGUgUERFIG11c3QgcG9pbnQgdG8gaXQqLwotCWlmIChwLT5hZGV2LT5hc2ljX3R5cGUg Pj0gQ0hJUF9WRUdBMTAgJiYgIXAtPnNyYyAmJgotCSAgICBucHRlcyA9PSBBTURHUFVfVk1fUFRF X0NPVU5UKHAtPmFkZXYpKSB7Ci0JCS8qIFNldCB0aGUgaHVnZSBwYWdlIGZsYWcgdG8gc3RvcCBz Y2FubmluZyBhdCB0aGlzIFBERSAqLworeworCWlmIChsZXZlbCAhPSBBTURHUFVfVk1fUFRCKSB7 CiAJCWZsYWdzIHw9IEFNREdQVV9QREVfUFRFOworCQlhbWRncHVfZ21jX2dldF92bV9wZGUocGFy YW1zLT5hZGV2LCBsZXZlbCwgJmFkZHIsICZmbGFncyk7CiAJfQogCi0JaWYgKCEoZmxhZ3MgJiBB TURHUFVfUERFX1BURSkpIHsKLQkJaWYgKGVudHJ5LT5odWdlKSB7Ci0JCQkvKiBBZGQgdGhlIGVu dHJ5IHRvIHRoZSByZWxvY2F0ZWQgbGlzdCB0byB1cGRhdGUgaXQuICovCi0JCQllbnRyeS0+aHVn ZSA9IGZhbHNlOwotCQkJYW1kZ3B1X3ZtX2JvX3JlbG9jYXRlZCgmZW50cnktPmJhc2UpOwotCQl9 CisJYW1kZ3B1X3ZtX3VwZGF0ZV9mdW5jKHBhcmFtcywgYm8sIHBlLCBhZGRyLCBjb3VudCwgaW5j ciwgZmxhZ3MpOworfQorCisvKioKKyAqIGFtZGdwdV92bV9mcmFnbWVudCAtIGdldCBmcmFnbWVu dCBmb3IgUFRFcworICoKKyAqIEBwYXJhbXM6IHNlZSBhbWRncHVfcHRlX3VwZGF0ZV9wYXJhbXMg ZGVmaW5pdGlvbgorICogQHN0YXJ0OiBmaXJzdCBQVEUgdG8gaGFuZGxlCisgKiBAZW5kOiBsYXN0 IFBURSB0byBoYW5kbGUKKyAqIEBmbGFnczogaHcgbWFwcGluZyBmbGFncworICogQGZyYWc6IHJl c3VsdGluZyBmcmFnbWVudCBzaXplCisgKiBAZnJhZ19lbmQ6IGVuZCBvZiB0aGlzIGZyYWdtZW50 CisgKgorICogUmV0dXJucyB0aGUgZmlyc3QgcG9zc2libGUgZnJhZ21lbnQgZm9yIHRoZSBzdGFy dCBhbmQgZW5kIGFkZHJlc3MuCisgKi8KK3N0YXRpYyB2b2lkIGFtZGdwdV92bV9mcmFnbWVudChz dHJ1Y3QgYW1kZ3B1X3B0ZV91cGRhdGVfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgICAgdWludDY0 X3Qgc3RhcnQsIHVpbnQ2NF90IGVuZCwgdWludDY0X3QgZmxhZ3MsCisJCQkgICAgICAgdW5zaWdu ZWQgaW50ICpmcmFnLCB1aW50NjRfdCAqZnJhZ19lbmQpCit7CisJLyoqCisJICogVGhlIE1DIEwx IFRMQiBzdXBwb3J0cyB2YXJpYWJsZSBzaXplZCBwYWdlcywgYmFzZWQgb24gYSBmcmFnbWVudAor CSAqIGZpZWxkIGluIHRoZSBQVEUuIFdoZW4gdGhpcyBmaWVsZCBpcyBzZXQgdG8gYSBub24temVy byB2YWx1ZSwgcGFnZQorCSAqIGdyYW51bGFyaXR5IGlzIGluY3JlYXNlZCBmcm9tIDRLQiB0byAo MSA8PCAoMTIgKyBmcmFnKSkuIFRoZSBQVEUKKwkgKiBmbGFncyBhcmUgY29uc2lkZXJlZCB2YWxp ZCBmb3IgYWxsIFBURXMgd2l0aGluIHRoZSBmcmFnbWVudCByYW5nZQorCSAqIGFuZCBjb3JyZXNw b25kaW5nIG1hcHBpbmdzIGFyZSBhc3N1bWVkIHRvIGJlIHBoeXNpY2FsbHkgY29udGlndW91cy4K KwkgKgorCSAqIFRoZSBMMSBUTEIgY2FuIHN0b3JlIGEgc2luZ2xlIFBURSBmb3IgdGhlIHdob2xl IGZyYWdtZW50LAorCSAqIHNpZ25pZmljYW50bHkgaW5jcmVhc2luZyB0aGUgc3BhY2UgYXZhaWxh YmxlIGZvciB0cmFuc2xhdGlvbgorCSAqIGNhY2hpbmcuIFRoaXMgbGVhZHMgdG8gbGFyZ2UgaW1w cm92ZW1lbnRzIGluIHRocm91Z2hwdXQgd2hlbiB0aGUKKwkgKiBUTEIgaXMgdW5kZXIgcHJlc3N1 cmUuCisJICoKKwkgKiBUaGUgTDIgVExCIGRpc3RyaWJ1dGVzIHNtYWxsIGFuZCBsYXJnZSBmcmFn bWVudHMgaW50byB0d28KKwkgKiBhc3ltbWV0cmljIHBhcnRpdGlvbnMuIFRoZSBsYXJnZSBmcmFn bWVudCBjYWNoZSBpcyBzaWduaWZpY2FudGx5CisJICogbGFyZ2VyLiBUaHVzLCB3ZSB0cnkgdG8g dXNlIGxhcmdlIGZyYWdtZW50cyB3aGVyZXZlciBwb3NzaWJsZS4KKwkgKiBVc2Vyc3BhY2UgY2Fu IHN1cHBvcnQgdGhpcyBieSBhbGlnbmluZyB2aXJ0dWFsIGJhc2UgYWRkcmVzcyBhbmQKKwkgKiBh bGxvY2F0aW9uIHNpemUgdG8gdGhlIGZyYWdtZW50IHNpemUuCisJICovCisJdW5zaWduZWQgbWF4 X2ZyYWcgPSBwYXJhbXMtPmFkZXYtPnZtX21hbmFnZXIuZnJhZ21lbnRfc2l6ZTsKKworCS8qIHN5 c3RlbSBwYWdlcyBhcmUgbm9uIGNvbnRpbnVvdXNseSAqLworCWlmIChwYXJhbXMtPnNyYyB8fCAh KGZsYWdzICYgQU1ER1BVX1BURV9WQUxJRCkpIHsKKwkJKmZyYWcgPSAwOworCQkqZnJhZ19lbmQg PSBlbmQ7CiAJCXJldHVybjsKIAl9CiAKLQllbnRyeS0+aHVnZSA9IHRydWU7Ci0JYW1kZ3B1X2dt Y19nZXRfdm1fcGRlKHAtPmFkZXYsIEFNREdQVV9WTV9QREIwLCAmZHN0LCAmZmxhZ3MpOwotCi0J cGRlID0gKGVudHJ5IC0gcGFyZW50LT5lbnRyaWVzKSAqIDg7Ci0JYW1kZ3B1X3ZtX3VwZGF0ZV9m dW5jKHAsIHBhcmVudC0+YmFzZS5ibywgcGRlLCBkc3QsIDEsIDAsIGZsYWdzKTsKKwkvKiBUaGlz IGludGVudGlvbmFsbHkgd3JhcHMgYXJvdW5kIGlmIG5vIGJpdCBpcyBzZXQgKi8KKwkqZnJhZyA9 IG1pbigodW5zaWduZWQpZmZzKHN0YXJ0KSAtIDEsICh1bnNpZ25lZClmbHM2NChlbmQgLSBzdGFy dCkgLSAxKTsKKwlpZiAoKmZyYWcgPj0gbWF4X2ZyYWcpIHsKKwkJKmZyYWcgPSBtYXhfZnJhZzsK KwkJKmZyYWdfZW5kID0gZW5kICYgfigoMVVMTCA8PCBtYXhfZnJhZykgLSAxKTsKKwl9IGVsc2Ug eworCQkqZnJhZ19lbmQgPSBzdGFydCArICgxIDw8ICpmcmFnKTsKKwl9CiB9CiAKIC8qKgpAQCAt MTU0NSwxMDggKzE1NzUsMTA1IEBAIHN0YXRpYyB2b2lkIGFtZGdwdV92bV9oYW5kbGVfaHVnZV9w YWdlcyhzdHJ1Y3QgYW1kZ3B1X3B0ZV91cGRhdGVfcGFyYW1zICpwLAogICogMCBmb3Igc3VjY2Vz cywgLUVJTlZBTCBmb3IgZmFpbHVyZS4KICAqLwogc3RhdGljIGludCBhbWRncHVfdm1fdXBkYXRl X3B0ZXMoc3RydWN0IGFtZGdwdV9wdGVfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLAotCQkJCSAgdWlu dDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGVuZCwKLQkJCQkgIHVpbnQ2NF90IGRzdCwgdWludDY0X3Qg ZmxhZ3MpCisJCQkJIHVpbnQ2NF90IHN0YXJ0LCB1aW50NjRfdCBlbmQsCisJCQkJIHVpbnQ2NF90 IGRzdCwgdWludDY0X3QgZmxhZ3MpCiB7CiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBw YXJhbXMtPmFkZXY7Ci0JY29uc3QgdWludDY0X3QgbWFzayA9IEFNREdQVV9WTV9QVEVfQ09VTlQo YWRldikgLSAxOwogCXN0cnVjdCBhbWRncHVfdm1fcHRfY3Vyc29yIGN1cnNvcjsKKwl1aW50NjRf dCBmcmFnX3N0YXJ0ID0gc3RhcnQsIGZyYWdfZW5kOworCXVuc2lnbmVkIGludCBmcmFnOwogCi0J Lyogd2FsayBvdmVyIHRoZSBhZGRyZXNzIHNwYWNlIGFuZCB1cGRhdGUgdGhlIHBhZ2UgdGFibGVz ICovCi0JZm9yX2VhY2hfYW1kZ3B1X3ZtX3B0X2xlYWYoYWRldiwgcGFyYW1zLT52bSwgc3RhcnQs IGVuZCAtIDEsIGN1cnNvcikgeworCS8qIGZpZ3VyZSBvdXQgdGhlIGluaXRpYWwgZnJhZ21lbnQg Ki8KKwlhbWRncHVfdm1fZnJhZ21lbnQocGFyYW1zLCBmcmFnX3N0YXJ0LCBlbmQsIGZsYWdzLCAm ZnJhZywgJmZyYWdfZW5kKTsKKworCS8qIHdhbGsgb3ZlciB0aGUgYWRkcmVzcyBzcGFjZSBhbmQg dXBkYXRlIHRoZSBQVHMgKi8KKwlhbWRncHVfdm1fcHRfc3RhcnQoYWRldiwgcGFyYW1zLT52bSwg c3RhcnQsICZjdXJzb3IpOworCXdoaWxlIChjdXJzb3IucGZuIDwgZW5kKSB7CiAJCXN0cnVjdCBh bWRncHVfYm8gKnB0ID0gY3Vyc29yLmVudHJ5LT5iYXNlLmJvOwotCQl1aW50NjRfdCBwZV9zdGFy dDsKLQkJdW5zaWduZWQgbnB0ZXM7CisJCXVuc2lnbmVkIHNoaWZ0LCBwYXJlbnRfc2hpZnQsIG51 bV9lbnRyaWVzOworCQl1aW50NjRfdCBpbmNyLCBlbnRyeV9lbmQsIHBlX3N0YXJ0OwogCi0JCWlm ICghcHQgfHwgY3Vyc29yLmxldmVsICE9IEFNREdQVV9WTV9QVEIpCisJCWlmICghcHQpCiAJCQly ZXR1cm4gLUVOT0VOVDsKIAotCQlpZiAoKGN1cnNvci5wZm4gJiB+bWFzaykgPT0gKGVuZCAmIH5t YXNrKSkKLQkJCW5wdGVzID0gZW5kIC0gY3Vyc29yLnBmbjsKLQkJZWxzZQotCQkJbnB0ZXMgPSBB TURHUFVfVk1fUFRFX0NPVU5UKGFkZXYpIC0gKGN1cnNvci5wZm4gJiBtYXNrKTsKLQotCQlhbWRn cHVfdm1faGFuZGxlX2h1Z2VfcGFnZXMocGFyYW1zLCBjdXJzb3IuZW50cnksIGN1cnNvci5wYXJl bnQsCi0JCQkJCSAgICBucHRlcywgZHN0LCBmbGFncyk7Ci0JCS8qIFdlIGRvbid0IG5lZWQgdG8g dXBkYXRlIFBURXMgZm9yIGh1Z2UgcGFnZXMgKi8KLQkJaWYgKGN1cnNvci5lbnRyeS0+aHVnZSkg ewotCQkJZHN0ICs9IG5wdGVzICogQU1ER1BVX0dQVV9QQUdFX1NJWkU7CisJCS8qIFRoZSByb290 IGxldmVsIGNhbid0IGJlIGEgaHVnZSBwYWdlICovCisJCWlmIChjdXJzb3IubGV2ZWwgPT0gYWRl di0+dm1fbWFuYWdlci5yb290X2xldmVsKSB7CisJCQlpZiAoIWFtZGdwdV92bV9wdF9kZXNjZW5k YW50KGFkZXYsICZjdXJzb3IpKQorCQkJCXJldHVybiAtRU5PRU5UOwogCQkJY29udGludWU7CiAJ CX0KIAotCQlwZV9zdGFydCA9IChjdXJzb3IucGZuICYgbWFzaykgKiA4OwotCQlhbWRncHVfdm1f dXBkYXRlX2Z1bmMocGFyYW1zLCBwdCwgcGVfc3RhcnQsIGRzdCwgbnB0ZXMsCi0JCQkJICAgICAg QU1ER1BVX0dQVV9QQUdFX1NJWkUsIGZsYWdzKTsKLQkJZHN0ICs9IG5wdGVzICogQU1ER1BVX0dQ VV9QQUdFX1NJWkU7Ci0JfQotCi0JcmV0dXJuIDA7Ci19CisJCS8qIEZpcnN0IGNoZWNrIGlmIHRo ZSBlbnRyeSBpcyBhbHJlYWR5IGhhbmRsZWQgKi8KKwkJaWYgKGN1cnNvci5wZm4gPCBmcmFnX3N0 YXJ0KSB7CisJCQljdXJzb3IuZW50cnktPmh1Z2UgPSB0cnVlOworCQkJYW1kZ3B1X3ZtX3B0X25l eHQoYWRldiwgJmN1cnNvcik7CisJCQljb250aW51ZTsKKwkJfQogCi0vKgotICogYW1kZ3B1X3Zt X2ZyYWdfcHRlcyAtIGFkZCBmcmFnbWVudCBpbmZvcm1hdGlvbiB0byBQVEVzCi0gKgotICogQHBh cmFtczogc2VlIGFtZGdwdV9wdGVfdXBkYXRlX3BhcmFtcyBkZWZpbml0aW9uCi0gKiBAdm06IHJl cXVlc3RlZCB2bQotICogQHN0YXJ0OiBmaXJzdCBQVEUgdG8gaGFuZGxlCi0gKiBAZW5kOiBsYXN0 IFBURSB0byBoYW5kbGUKLSAqIEBkc3Q6IGFkZHIgdGhvc2UgUFRFcyBzaG91bGQgcG9pbnQgdG8K LSAqIEBmbGFnczogaHcgbWFwcGluZyBmbGFncwotICoKLSAqIFJldHVybnM6Ci0gKiAwIGZvciBz dWNjZXNzLCAtRUlOVkFMIGZvciBmYWlsdXJlLgotICovCi1zdGF0aWMgaW50IGFtZGdwdV92bV9m cmFnX3B0ZXMoc3RydWN0IGFtZGdwdV9wdGVfdXBkYXRlX3BhcmFtcwkqcGFyYW1zLAotCQkJCXVp bnQ2NF90IHN0YXJ0LCB1aW50NjRfdCBlbmQsCi0JCQkJdWludDY0X3QgZHN0LCB1aW50NjRfdCBm bGFncykKLXsKLQkvKioKLQkgKiBUaGUgTUMgTDEgVExCIHN1cHBvcnRzIHZhcmlhYmxlIHNpemVk IHBhZ2VzLCBiYXNlZCBvbiBhIGZyYWdtZW50Ci0JICogZmllbGQgaW4gdGhlIFBURS4gV2hlbiB0 aGlzIGZpZWxkIGlzIHNldCB0byBhIG5vbi16ZXJvIHZhbHVlLCBwYWdlCi0JICogZ3JhbnVsYXJp dHkgaXMgaW5jcmVhc2VkIGZyb20gNEtCIHRvICgxIDw8ICgxMiArIGZyYWcpKS4gVGhlIFBURQot CSAqIGZsYWdzIGFyZSBjb25zaWRlcmVkIHZhbGlkIGZvciBhbGwgUFRFcyB3aXRoaW4gdGhlIGZy YWdtZW50IHJhbmdlCi0JICogYW5kIGNvcnJlc3BvbmRpbmcgbWFwcGluZ3MgYXJlIGFzc3VtZWQg dG8gYmUgcGh5c2ljYWxseSBjb250aWd1b3VzLgotCSAqCi0JICogVGhlIEwxIFRMQiBjYW4gc3Rv cmUgYSBzaW5nbGUgUFRFIGZvciB0aGUgd2hvbGUgZnJhZ21lbnQsCi0JICogc2lnbmlmaWNhbnRs eSBpbmNyZWFzaW5nIHRoZSBzcGFjZSBhdmFpbGFibGUgZm9yIHRyYW5zbGF0aW9uCi0JICogY2Fj aGluZy4gVGhpcyBsZWFkcyB0byBsYXJnZSBpbXByb3ZlbWVudHMgaW4gdGhyb3VnaHB1dCB3aGVu IHRoZQotCSAqIFRMQiBpcyB1bmRlciBwcmVzc3VyZS4KLQkgKgotCSAqIFRoZSBMMiBUTEIgZGlz dHJpYnV0ZXMgc21hbGwgYW5kIGxhcmdlIGZyYWdtZW50cyBpbnRvIHR3bwotCSAqIGFzeW1tZXRy aWMgcGFydGl0aW9ucy4gVGhlIGxhcmdlIGZyYWdtZW50IGNhY2hlIGlzIHNpZ25pZmljYW50bHkK LQkgKiBsYXJnZXIuIFRodXMsIHdlIHRyeSB0byB1c2UgbGFyZ2UgZnJhZ21lbnRzIHdoZXJldmVy IHBvc3NpYmxlLgotCSAqIFVzZXJzcGFjZSBjYW4gc3VwcG9ydCB0aGlzIGJ5IGFsaWduaW5nIHZp cnR1YWwgYmFzZSBhZGRyZXNzIGFuZAotCSAqIGFsbG9jYXRpb24gc2l6ZSB0byB0aGUgZnJhZ21l bnQgc2l6ZS4KLQkgKi8KLQl1bnNpZ25lZCBtYXhfZnJhZyA9IHBhcmFtcy0+YWRldi0+dm1fbWFu YWdlci5mcmFnbWVudF9zaXplOwotCWludCByOworCQkvKiBJZiBpdCBpc24ndCBhbHJlYWR5IGhh bmRsZWQgaXQgY2FuJ3QgYmUgYSBodWdlIHBhZ2UgKi8KKwkJaWYgKGN1cnNvci5lbnRyeS0+aHVn ZSkgeworCQkJLyogQWRkIHRoZSBlbnRyeSB0byB0aGUgcmVsb2NhdGVkIGxpc3QgdG8gdXBkYXRl IGl0LiAqLworCQkJY3Vyc29yLmVudHJ5LT5odWdlID0gZmFsc2U7CisJCQlhbWRncHVfdm1fYm9f cmVsb2NhdGVkKCZjdXJzb3IuZW50cnktPmJhc2UpOworCQl9CiAKLQkvKiBzeXN0ZW0gcGFnZXMg YXJlIG5vbiBjb250aW51b3VzbHkgKi8KLQlpZiAocGFyYW1zLT5zcmMgfHwgIShmbGFncyAmIEFN REdQVV9QVEVfVkFMSUQpKQotCQlyZXR1cm4gYW1kZ3B1X3ZtX3VwZGF0ZV9wdGVzKHBhcmFtcywg c3RhcnQsIGVuZCwgZHN0LCBmbGFncyk7Ci0KLQl3aGlsZSAoc3RhcnQgIT0gZW5kKSB7Ci0JCXVp bnQ2NF90IGZyYWdfZmxhZ3MsIGZyYWdfZW5kOwotCQl1bnNpZ25lZCBmcmFnOwotCi0JCS8qIFRo aXMgaW50ZW50aW9uYWxseSB3cmFwcyBhcm91bmQgaWYgbm8gYml0IGlzIHNldCAqLwotCQlmcmFn ID0gbWluKCh1bnNpZ25lZClmZnMoc3RhcnQpIC0gMSwKLQkJCSAgICh1bnNpZ25lZClmbHM2NChl bmQgLSBzdGFydCkgLSAxKTsKLQkJaWYgKGZyYWcgPj0gbWF4X2ZyYWcpIHsKLQkJCWZyYWdfZmxh Z3MgPSBBTURHUFVfUFRFX0ZSQUcobWF4X2ZyYWcpOwotCQkJZnJhZ19lbmQgPSBlbmQgJiB+KCgx VUxMIDw8IG1heF9mcmFnKSAtIDEpOwotCQl9IGVsc2UgewotCQkJZnJhZ19mbGFncyA9IEFNREdQ VV9QVEVfRlJBRyhmcmFnKTsKLQkJCWZyYWdfZW5kID0gc3RhcnQgKyAoMSA8PCBmcmFnKTsKKwkJ c2hpZnQgPSBhbWRncHVfdm1fbGV2ZWxfc2hpZnQoYWRldiwgY3Vyc29yLmxldmVsKTsKKwkJcGFy ZW50X3NoaWZ0ID0gYW1kZ3B1X3ZtX2xldmVsX3NoaWZ0KGFkZXYsIGN1cnNvci5sZXZlbCAtIDEp OworCQlpZiAoYWRldi0+YXNpY190eXBlIDwgQ0hJUF9WRUdBMTApIHsKKwkJCS8qIE5vIGh1Z2Ug cGFnZSBzdXBwb3J0IGJlZm9yZSBHTUMgdjkgKi8KKwkJCWlmIChjdXJzb3IubGV2ZWwgIT0gQU1E R1BVX1ZNX1BUQikgeworCQkJCWlmICghYW1kZ3B1X3ZtX3B0X2Rlc2NlbmRhbnQoYWRldiwgJmN1 cnNvcikpCisJCQkJCXJldHVybiAtRU5PRU5UOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9IGVs c2UgaWYgKGZyYWcgPCBzaGlmdCkgeworCQkJLyogV2UgY2FuJ3QgdXNlIHRoaXMgbGV2ZWwgd2hl biB0aGUgZnJhZ21lbnQgc2l6ZSBpcworCQkJICogc21hbGxlciB0aGFuIHRoZSBhZGRyZXNzIHNo aWZ0LiBHbyB0byB0aGUgbmV4dAorCQkJICogY2hpbGQgZW50cnkgYW5kIHRyeSBhZ2Fpbi4KKwkJ CSAqLworCQkJaWYgKCFhbWRncHVfdm1fcHRfZGVzY2VuZGFudChhZGV2LCAmY3Vyc29yKSkKKwkJ CQlyZXR1cm4gLUVOT0VOVDsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKGZyYWcgPj0gcGFy ZW50X3NoaWZ0KSB7CisJCQkvKiBJZiB0aGUgZnJhZ21lbnQgc2l6ZSBpcyBldmVuIGxhcmdlciB0 aGFuIHRoZSBwYXJlbnQKKwkJCSAqIHNoaWZ0IHdlIHNob3VsZCBnbyB1cCBvbmUgbGV2ZWwgYW5k IGNoZWNrIGl0IGFnYWluLgorCQkJICovCisJCQlpZiAoIWFtZGdwdV92bV9wdF9hbmNlc3Rvcigm Y3Vyc29yKSkKKwkJCQlyZXR1cm4gLUVOT0VOVDsKKwkJCWNvbnRpbnVlOwogCQl9CiAKLQkJciA9 IGFtZGdwdV92bV91cGRhdGVfcHRlcyhwYXJhbXMsIHN0YXJ0LCBmcmFnX2VuZCwgZHN0LAotCQkJ CQkgIGZsYWdzIHwgZnJhZ19mbGFncyk7Ci0JCWlmIChyKQotCQkJcmV0dXJuIHI7CisJCS8qIExv b2tzIGdvb2Qgc28gZmFyLCBjYWxjdWxhdGUgcGFyYW1ldGVycyBmb3IgdGhlIHVwZGF0ZSAqLwor CQlpbmNyID0gQU1ER1BVX0dQVV9QQUdFX1NJWkUgPDwgc2hpZnQ7CisJCW51bV9lbnRyaWVzID0g YW1kZ3B1X3ZtX251bV9lbnRyaWVzKGFkZXYsIGN1cnNvci5sZXZlbCk7CisJCXBlX3N0YXJ0ID0g KChjdXJzb3IucGZuID4+IHNoaWZ0KSAmIChudW1fZW50cmllcyAtIDEpKSAqIDg7CisJCWVudHJ5 X2VuZCA9IG51bV9lbnRyaWVzIDw8IHNoaWZ0OworCQllbnRyeV9lbmQgKz0gY3Vyc29yLnBmbiAm IH4oZW50cnlfZW5kIC0gMSk7CisJCWVudHJ5X2VuZCA9IG1pbihlbnRyeV9lbmQsIGVuZCk7CisK KwkJZG8geworCQkJdWludDY0X3QgdXBkX2VuZCA9IG1pbihlbnRyeV9lbmQsIGZyYWdfZW5kKTsK KwkJCXVuc2lnbmVkIG5wdGVzID0gKHVwZF9lbmQgLSBmcmFnX3N0YXJ0KSA+PiBzaGlmdDsKKwor CQkJYW1kZ3B1X3ZtX3VwZGF0ZV9odWdlKHBhcmFtcywgcHQsIGN1cnNvci5sZXZlbCwKKwkJCQkJ ICAgICAgcGVfc3RhcnQsIGRzdCwgbnB0ZXMsIGluY3IsCisJCQkJCSAgICAgIGZsYWdzIHwgQU1E R1BVX1BURV9GUkFHKGZyYWcpKTsKKworCQkJcGVfc3RhcnQgKz0gbnB0ZXMgKiA4OworCQkJZHN0 ICs9IG5wdGVzICogQU1ER1BVX0dQVV9QQUdFX1NJWkUgPDwgc2hpZnQ7CisKKwkJCWZyYWdfc3Rh cnQgPSB1cGRfZW5kOworCQkJaWYgKGZyYWdfc3RhcnQgPj0gZnJhZ19lbmQpIHsKKwkJCQkvKiBm aWd1cmUgb3V0IHRoZSBuZXh0IGZyYWdtZW50ICovCisJCQkJYW1kZ3B1X3ZtX2ZyYWdtZW50KHBh cmFtcywgZnJhZ19zdGFydCwgZW5kLAorCQkJCQkJICAgZmxhZ3MsICZmcmFnLCAmZnJhZ19lbmQp OworCQkJCWlmIChmcmFnIDwgc2hpZnQpCisJCQkJCWJyZWFrOworCQkJfQorCQl9IHdoaWxlIChm cmFnX3N0YXJ0IDwgZW50cnlfZW5kKTsKIAotCQlkc3QgKz0gKGZyYWdfZW5kIC0gc3RhcnQpICog QU1ER1BVX0dQVV9QQUdFX1NJWkU7Ci0JCXN0YXJ0ID0gZnJhZ19lbmQ7CisJCWlmIChmcmFnID49 IHNoaWZ0KQorCQkJYW1kZ3B1X3ZtX3B0X25leHQoYWRldiwgJmN1cnNvcik7CiAJfQogCiAJcmV0 dXJuIDA7CkBAIC0xNzA4LDggKzE3MzUsOCBAQCBzdGF0aWMgaW50IGFtZGdwdV92bV9ib191cGRh dGVfbWFwcGluZyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKIAogCQlwYXJhbXMuZnVuYyA9 IGFtZGdwdV92bV9jcHVfc2V0X3B0ZXM7CiAJCXBhcmFtcy5wYWdlc19hZGRyID0gcGFnZXNfYWRk cjsKLQkJcmV0dXJuIGFtZGdwdV92bV9mcmFnX3B0ZXMoJnBhcmFtcywgc3RhcnQsIGxhc3QgKyAx LAotCQkJCQkgICBhZGRyLCBmbGFncyk7CisJCXJldHVybiBhbWRncHVfdm1fdXBkYXRlX3B0ZXMo JnBhcmFtcywgc3RhcnQsIGxhc3QgKyAxLAorCQkJCQkgICAgIGFkZHIsIGZsYWdzKTsKIAl9CiAK IAlyaW5nID0gY29udGFpbmVyX29mKHZtLT5lbnRpdHkucnEtPnNjaGVkLCBzdHJ1Y3QgYW1kZ3B1 X3JpbmcsIHNjaGVkKTsKQEAgLTE3ODgsNyArMTgxNSw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X3Zt X2JvX3VwZGF0ZV9tYXBwaW5nKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAogCWlmIChyKQog CQlnb3RvIGVycm9yX2ZyZWU7CiAKLQlyID0gYW1kZ3B1X3ZtX2ZyYWdfcHRlcygmcGFyYW1zLCBz dGFydCwgbGFzdCArIDEsIGFkZHIsIGZsYWdzKTsKKwlyID0gYW1kZ3B1X3ZtX3VwZGF0ZV9wdGVz KCZwYXJhbXMsIHN0YXJ0LCBsYXN0ICsgMSwgYWRkciwgZmxhZ3MpOwogCWlmIChyKQogCQlnb3Rv IGVycm9yX2ZyZWU7CiAKLS0gCjIuMTQuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9hbWQtZ2Z4Cg==