From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chunming Zhou Subject: [PATCH] drm/ttm: fix busy memory to fail other user v5 Date: Fri, 26 Apr 2019 18:20:44 +0800 Message-ID: <20190426102044.369-1-david1.zhou@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from NAM04-BN3-obe.outbound.protection.outlook.com (mail-eopbgr680066.outbound.protection.outlook.com [40.107.68.66]) by gabe.freedesktop.org (Postfix) with ESMTPS id DF29189191 for ; Fri, 26 Apr 2019 10:20:52 +0000 (UTC) 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: prike.liang@amd.com, Christian.Koenig@amd.com List-Id: dri-devel@lists.freedesktop.org aGVhdnkgZ3B1IGpvYiBjb3VsZCBvY2N1cHkgbWVtb3J5IGxvbmcgdGltZSwgd2hpY2ggbGVhZCBv dGhlciB1c2VyIGZhaWwgdG8gZ2V0IG1lbW9yeS4KCmJhc2ljYWxseSBwaWNrIHVwIENocmlzdGlh biBpZGVhOgoKMS4gUmVzZXJ2ZSB0aGUgQk8gaW4gREMgdXNpbmcgYSB3d19tdXRleCB0aWNrZXQg KHRyaXZpYWwpLgoyLiBJZiB3ZSB0aGVuIHJ1biBpbnRvIHRoaXMgRUJVU1kgY29uZGl0aW9uIGlu IFRUTSBjaGVjayBpZiB0aGUgQk8gd2UgbmVlZCBtZW1vcnkgZm9yIChvciByYXRoZXIgdGhlIHd3 X211dGV4IG9mIGl0cyByZXNlcnZhdGlvbiBvYmplY3QpIGhhcyBhIHRpY2tldCBhc3NpZ25lZC4K My4gSWYgd2UgaGF2ZSBhIHRpY2tldCB3ZSBncmFiIGEgcmVmZXJlbmNlIHRvIHRoZSBmaXJzdCBC TyBvbiB0aGUgTFJVLCBkcm9wIHRoZSBMUlUgbG9jayBhbmQgdHJ5IHRvIGdyYWIgdGhlIHJlc2Vy dmF0aW9uIGxvY2sgd2l0aCB0aGUgdGlja2V0Lgo0LiBJZiBnZXR0aW5nIHRoZSByZXNlcnZhdGlv biBsb2NrIHdpdGggdGhlIHRpY2tldCBzdWNjZWVkZWQgd2UgY2hlY2sgaWYgdGhlIEJPIGlzIHN0 aWxsIHRoZSBmaXJzdCBvbmUgb24gdGhlIExSVSBpbiBxdWVzdGlvbiAodGhlIEJPIGNvdWxkIGhh dmUgbW92ZWQpLgo1LiBJZiB0aGUgQk8gaXMgc3RpbGwgdGhlIGZpcnN0IG9uZSBvbiB0aGUgTFJV IGluIHF1ZXN0aW9uIHdlIHRyeSB0byBldmljdCBpdCBhcyB3ZSB3b3VsZCBldmljdCBhbnkgb3Ro ZXIgQk8uCjYuIElmIGFueSBvZiB0aGUgIklmJ3MiIGFib3ZlIGZhaWwgd2UganVzdCBiYWNrIG9m ZiBhbmQgcmV0dXJuIC1FQlVTWS4KCnYyOiBmaXggc29tZSBtaW5vciBjaGVjawp2MzogYWRkcmVz cyBDaHJpc3RpYW4gdjIgY29tbWVudHMuCnY0OiBmaXggc29tZSBtaXNzaW5nCnY1OiBoYW5kbGUg Zmlyc3RfYm8gdW5sb2NrIGFuZCBib19nZXQvcHV0CgpDaGFuZ2UtSWQ6IEkyMTQyM2ZiOTIyZjg4 NTQ2NWYxMzgzM2M0MWRmMWUxMzQzNjRhOGU3ClNpZ25lZC1vZmYtYnk6IENodW5taW5nIFpob3Ug PGRhdmlkMS56aG91QGFtZC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X29iamVjdC5jICAgIHwgIDYgKy0KIC4uLi9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9k bS9hbWRncHVfZG0uYyB8IDIxICsrKystCiBkcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jICAg ICAgICAgICAgICAgICAgfCA4MSArKysrKysrKysrKysrKysrKy0tCiAzIGZpbGVzIGNoYW5nZWQs IDk5IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X29iamVjdC5jCmluZGV4IGFmZmRlNzJiNDRkYi4uMDMyZWRmNDc3ODI3IDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5jCkBAIC04MTEsNyAr ODExLDExIEBAIGludCBhbWRncHVfYm9fcGluX3Jlc3RyaWN0ZWQoc3RydWN0IGFtZGdwdV9ibyAq Ym8sIHUzMiBkb21haW4sCiAJCQkgICAgIHU2NCBtaW5fb2Zmc2V0LCB1NjQgbWF4X29mZnNldCkK IHsKIAlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGFtZGdwdV90dG1fYWRldihiby0+dGJv LmJkZXYpOwotCXN0cnVjdCB0dG1fb3BlcmF0aW9uX2N0eCBjdHggPSB7IGZhbHNlLCBmYWxzZSB9 OworCXN0cnVjdCB0dG1fb3BlcmF0aW9uX2N0eCBjdHggPSB7CisJCS5pbnRlcnJ1cHRpYmxlID0g ZmFsc2UsCisJCS5ub193YWl0X2dwdSA9IGZhbHNlLAorCQkucmVzdiA9IGJvLT50Ym8ucmVzdiwK Kwl9OwogCWludCByLCBpOwogCiAJaWYgKGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJtbShiby0+dGJv LnR0bSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2Rt L2FtZGdwdV9kbS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRn cHVfZG0uYwppbmRleCBhNWNhY2Y4NDZlMWIuLjI5NTdhYzM4ZGNiMCAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbS5jCkBAIC00MTAxLDYg KzQxMDEsOSBAQCBzdGF0aWMgaW50IGRtX3BsYW5lX2hlbHBlcl9wcmVwYXJlX2ZiKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAogCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2OwogCXN0cnVjdCBh bWRncHVfYm8gKnJibzsKIAlzdHJ1Y3QgZG1fcGxhbmVfc3RhdGUgKmRtX3BsYW5lX3N0YXRlX25l dywgKmRtX3BsYW5lX3N0YXRlX29sZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3QsIGR1cGxpY2F0 ZXM7CisJc3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIgdHY7CisJc3RydWN0IHd3X2FjcXVpcmVf Y3R4IHRpY2tldDsKIAl1aW50NjRfdCB0aWxpbmdfZmxhZ3M7CiAJdWludDMyX3QgZG9tYWluOwog CWludCByOwpAQCAtNDEyMCw2ICs0MTIzLDE4IEBAIHN0YXRpYyBpbnQgZG1fcGxhbmVfaGVscGVy X3ByZXBhcmVfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJciA9IGFtZGdwdV9ib19yZXNl cnZlKHJibywgZmFsc2UpOwogCWlmICh1bmxpa2VseShyICE9IDApKQogCQlyZXR1cm4gcjsKKwlJ TklUX0xJU1RfSEVBRCgmbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmR1cGxpY2F0ZXMpOworCisJ dHYuYm8gPSAmcmJvLT50Ym87CisJdHYubnVtX3NoYXJlZCA9IDE7CisJbGlzdF9hZGQoJnR2Lmhl YWQsICZsaXN0KTsKKworCXIgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKCZ0aWNrZXQsICZsaXN0 LCBmYWxzZSwgJmR1cGxpY2F0ZXMpOworCWlmIChyKSB7CisJCWRldl9lcnIoYWRldi0+ZGV2LCAi ZmFpbCB0byByZXNlcnZlIGJvICglZClcbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CiAKIAlpZiAo cGxhbmUtPnR5cGUgIT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKQogCQlkb21haW4gPSBhbWRncHVf ZGlzcGxheV9zdXBwb3J0ZWRfZG9tYWlucyhhZGV2KTsKQEAgLTQxMzAsMjEgKzQxNDUsMjEgQEAg c3RhdGljIGludCBkbV9wbGFuZV9oZWxwZXJfcHJlcGFyZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKIAlpZiAodW5saWtlbHkociAhPSAwKSkgewogCQlpZiAociAhPSAtRVJFU1RBUlRTWVMp CiAJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBwaW4gZnJhbWVidWZmZXIgd2l0aCBlcnJvciAlZFxu Iiwgcik7Ci0JCWFtZGdwdV9ib191bnJlc2VydmUocmJvKTsKKwkJdHRtX2V1X2JhY2tvZmZfcmVz ZXJ2YXRpb24oJnRpY2tldCwgJmxpc3QpOwogCQlyZXR1cm4gcjsKIAl9CiAKIAlyID0gYW1kZ3B1 X3R0bV9hbGxvY19nYXJ0KCZyYm8tPnRibyk7CiAJaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsKIAkJ YW1kZ3B1X2JvX3VucGluKHJibyk7Ci0JCWFtZGdwdV9ib191bnJlc2VydmUocmJvKTsKKwkJdHRt X2V1X2JhY2tvZmZfcmVzZXJ2YXRpb24oJnRpY2tldCwgJmxpc3QpOwogCQlEUk1fRVJST1IoIiVw IGJpbmQgZmFpbGVkXG4iLCByYm8pOwogCQlyZXR1cm4gcjsKIAl9CiAKIAlhbWRncHVfYm9fZ2V0 X3RpbGluZ19mbGFncyhyYm8sICZ0aWxpbmdfZmxhZ3MpOwogCi0JYW1kZ3B1X2JvX3VucmVzZXJ2 ZShyYm8pOworCXR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uKCZ0aWNrZXQsICZsaXN0KTsKIAog CWFmYi0+YWRkcmVzcyA9IGFtZGdwdV9ib19ncHVfb2Zmc2V0KHJibyk7CiAKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9i by5jCmluZGV4IDg1MDJiM2VkMmQ4OC4uMmM0OTYzZTEwNWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vdHRtL3R0bV9iby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMK QEAgLTc2NiwxMSArNzY2LDEzIEBAIEVYUE9SVF9TWU1CT0wodHRtX2JvX2V2aWN0aW9uX3ZhbHVh YmxlKTsKICAqIGIuIE90aGVyd2lzZSwgdHJ5bG9jayBpdC4KICAqLwogc3RhdGljIGJvb2wgdHRt X2JvX2V2aWN0X3N3YXBvdXRfYWxsb3dhYmxlKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8s Ci0JCQlzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggKmN0eCwgYm9vbCAqbG9ja2VkKQorCQkJc3Ry dWN0IHR0bV9vcGVyYXRpb25fY3R4ICpjdHgsIGJvb2wgKmxvY2tlZCwgYm9vbCAqYnVzeSkKIHsK IAlib29sIHJldCA9IGZhbHNlOwogCiAJKmxvY2tlZCA9IGZhbHNlOworCWlmIChidXN5KQorCQkq YnVzeSA9IGZhbHNlOwogCWlmIChiby0+cmVzdiA9PSBjdHgtPnJlc3YpIHsKIAkJcmVzZXJ2YXRp b25fb2JqZWN0X2Fzc2VydF9oZWxkKGJvLT5yZXN2KTsKIAkJaWYgKGN0eC0+ZmxhZ3MgJiBUVE1f T1BUX0ZMQUdfQUxMT1dfUkVTX0VWSUNUCkBAIC03NzksNiArNzgxLDggQEAgc3RhdGljIGJvb2wg dHRtX2JvX2V2aWN0X3N3YXBvdXRfYWxsb3dhYmxlKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAq Ym8sCiAJfSBlbHNlIHsKIAkJKmxvY2tlZCA9IHJlc2VydmF0aW9uX29iamVjdF90cnlsb2NrKGJv LT5yZXN2KTsKIAkJcmV0ID0gKmxvY2tlZDsKKwkJaWYgKCFyZXQgJiYgYnVzeSkKKwkJCSpidXN5 ID0gdHJ1ZTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtNzkxLDcgKzc5NSw3IEBAIHN0YXRpYyBp bnQgdHRtX21lbV9ldmljdF9maXJzdChzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwKIHsKIAlz dHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiA9IGJkZXYtPmdsb2I7CiAJc3RydWN0IHR0bV9tZW1f dHlwZV9tYW5hZ2VyICptYW4gPSAmYmRldi0+bWFuW21lbV90eXBlXTsKLQlzdHJ1Y3QgdHRtX2J1 ZmZlcl9vYmplY3QgKmJvID0gTlVMTDsKKwlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvID0g TlVMTCwgKmZpcnN0X2JvID0gTlVMTDsKIAlib29sIGxvY2tlZCA9IGZhbHNlOwogCXVuc2lnbmVk IGk7CiAJaW50IHJldDsKQEAgLTc5OSw4ICs4MDMsMTUgQEAgc3RhdGljIGludCB0dG1fbWVtX2V2 aWN0X2ZpcnN0KHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LAogCXNwaW5fbG9jaygmZ2xvYi0+ bHJ1X2xvY2spOwogCWZvciAoaSA9IDA7IGkgPCBUVE1fTUFYX0JPX1BSSU9SSVRZOyArK2kpIHsK IAkJbGlzdF9mb3JfZWFjaF9lbnRyeShibywgJm1hbi0+bHJ1W2ldLCBscnUpIHsKLQkJCWlmICgh dHRtX2JvX2V2aWN0X3N3YXBvdXRfYWxsb3dhYmxlKGJvLCBjdHgsICZsb2NrZWQpKQorCQkJYm9v bCBidXN5ID0gZmFsc2U7CisJCQlpZiAoIXR0bV9ib19ldmljdF9zd2Fwb3V0X2FsbG93YWJsZShi bywgY3R4LCAmbG9ja2VkLAorCQkJCQkJCSAgICAmYnVzeSkpIHsKKwkJCQlpZiAoIWZpcnN0X2Jv ICYmIGJ1c3kpIHsKKwkJCQkJdHRtX2JvX2dldChibyk7CisJCQkJCWZpcnN0X2JvID0gYm87CisJ CQkJfQogCQkJCWNvbnRpbnVlOworCQkJfQogCiAJCQlpZiAocGxhY2UgJiYgIWJkZXYtPmRyaXZl ci0+ZXZpY3Rpb25fdmFsdWFibGUoYm8sCiAJCQkJCQkJCSAgICAgIHBsYWNlKSkgewpAQCAtODA4 LDYgKzgxOSw3IEBAIHN0YXRpYyBpbnQgdHRtX21lbV9ldmljdF9maXJzdChzdHJ1Y3QgdHRtX2Jv X2RldmljZSAqYmRldiwKIAkJCQkJcmVzZXJ2YXRpb25fb2JqZWN0X3VubG9jayhiby0+cmVzdik7 CiAJCQkJY29udGludWU7CiAJCQl9CisKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTgyMCw3ICs4MzIs NjUgQEAgc3RhdGljIGludCB0dG1fbWVtX2V2aWN0X2ZpcnN0KHN0cnVjdCB0dG1fYm9fZGV2aWNl ICpiZGV2LAogCiAJaWYgKCFibykgewogCQlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwot CQlyZXR1cm4gLUVCVVNZOworCQkvKiBjaGVjayBpZiBvdGhlciB1c2VyIG9jY3VweSBtZW1vcnkg dG9vIGxvbmcgdGltZSAqLworCQlpZiAoIWZpcnN0X2JvIHx8ICFjdHggfHwgIWN0eC0+cmVzdiB8 fCAhY3R4LT5yZXN2LT5sb2NrLmN0eCkgeworCQkJaWYgKGZpcnN0X2JvKQorCQkJCXR0bV9ib19w dXQoZmlyc3RfYm8pOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlpZiAoY3R4LT5pbnRlcnJ1 cHRpYmxlKQorCQkJcmV0ID0gd3dfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZmaXJzdF9iby0+ cmVzdi0+bG9jaywKKwkJCQkJCQkgIGN0eC0+cmVzdi0+bG9jay5jdHgpOworCQllbHNlCisJCQly ZXQgPSB3d19tdXRleF9sb2NrKCZmaXJzdF9iby0+cmVzdi0+bG9jaywgY3R4LT5yZXN2LT5sb2Nr LmN0eCk7CisJCWlmIChyZXQpIHsKKwkJCXR0bV9ib19wdXQoZmlyc3RfYm8pOworCQkJcmV0dXJu IHJldDsKKwkJfQorCQlzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKKwkJZm9yIChpID0gMDsg aSA8IFRUTV9NQVhfQk9fUFJJT1JJVFk7ICsraSkgeworCQkJLyogcHJldmlvdXMgYnVzeSByZXN2 IGxvY2sgaXMgaGVsZCBieSBhYm92ZSwgaWRsZSBub3csCisJCQkgKiBzbyBsZXQgdGhlbSBldmlj dGFibGUuCisJCQkgKi8KKwkJCXN0cnVjdCB0dG1fb3BlcmF0aW9uX2N0eCBidXN5X2N0eCA9IHsK KwkJCQkuaW50ZXJydXB0aWJsZSA9IGN0eC0+aW50ZXJydXB0aWJsZSwKKwkJCQkubm9fd2FpdF9n cHUgICA9IGN0eC0+bm9fd2FpdF9ncHUsCisJCQkJLnJlc3YJICAgICAgID0gZmlyc3RfYm8tPnJl c3YsCisJCQkJLmZsYWdzCSAgICAgICA9IFRUTV9PUFRfRkxBR19BTExPV19SRVNfRVZJQ1QKKwkJ CX07CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJvLCAmbWFuLT5scnVbaV0sIGxydSkgeworCQkJ CWlmICghdHRtX2JvX2V2aWN0X3N3YXBvdXRfYWxsb3dhYmxlKGJvLAorCQkJCQkJCQkgICAgJmJ1 c3lfY3R4LAorCQkJCQkJCQkgICAgJmxvY2tlZCwKKwkJCQkJCQkJICAgIE5VTEwpKQorCQkJCQlj b250aW51ZTsKKworCQkJCWlmIChwbGFjZSAmJiAhYmRldi0+ZHJpdmVyLT5ldmljdGlvbl92YWx1 YWJsZShibywKKwkJCQkJCQkJICAgICAgcGxhY2UpKSB7CisJCQkJCWlmIChsb2NrZWQpCisJCQkJ CQlyZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKGJvLT5yZXN2KTsKKwkJCQkJY29udGludWU7CisJ CQkJfQorCQkJCWJyZWFrOworCQkJfQorCQkJLyogSWYgdGhlIGlubmVyIGxvb3AgdGVybWluYXRl ZCBlYXJseSwgd2UgaGF2ZSBvdXIgY2FuZGlkYXRlICovCisJCQlpZiAoJmJvLT5scnUgIT0gJm1h bi0+bHJ1W2ldKQorCQkJCWJyZWFrOworCQkJYm8gPSBOVUxMOworCQl9CisJCWlmIChibyAmJiAo Ym8tPnJlc3YgPT0gZmlyc3RfYm8tPnJlc3YpKQorCQkJbG9ja2VkID0gdHJ1ZTsKKwkJZWxzZSBp ZiAoYm8pCisJCQl3d19tdXRleF91bmxvY2soJmZpcnN0X2JvLT5yZXN2LT5sb2NrKTsKKwkJdHRt X2JvX3B1dChmaXJzdF9ibyk7CisJCWZpcnN0X2JvID0gTlVMTDsKKwkJaWYgKCFibykgeworCQkJ c3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9 IGVsc2UgeworCQlpZiAoZmlyc3RfYm8pCisJCQl0dG1fYm9fcHV0KGZpcnN0X2JvKTsKIAl9CiAK IAlrcmVmX2dldCgmYm8tPmxpc3Rfa3JlZik7CkBAIC0xNzg0LDcgKzE4NTQsOCBAQCBpbnQgdHRt X2JvX3N3YXBvdXQoc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IsIHN0cnVjdCB0dG1fb3BlcmF0 aW9uX2N0eCAqY3R4KQogCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwogCWZvciAoaSA9IDA7 IGkgPCBUVE1fTUFYX0JPX1BSSU9SSVRZOyArK2kpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShi bywgJmdsb2ItPnN3YXBfbHJ1W2ldLCBzd2FwKSB7Ci0JCQlpZiAodHRtX2JvX2V2aWN0X3N3YXBv dXRfYWxsb3dhYmxlKGJvLCBjdHgsICZsb2NrZWQpKSB7CisJCQlpZiAodHRtX2JvX2V2aWN0X3N3 YXBvdXRfYWxsb3dhYmxlKGJvLCBjdHgsICZsb2NrZWQsCisJCQkJCQkJICAgTlVMTCkpIHsKIAkJ CQlyZXQgPSAwOwogCQkJCWJyZWFrOwogCQkJfQotLSAKMi4xNy4xCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=