From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 17/38] drm/i915: Create/destroy VM (ppGTT) for use with contexts Date: Fri, 1 Mar 2019 14:03:43 +0000 Message-ID: <20190301140404.26690-17-chris@chris-wilson.co.uk> References: <20190301140404.26690-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8F27E6E321 for ; Fri, 1 Mar 2019 14:04:49 +0000 (UTC) In-Reply-To: <20190301140404.26690-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org SW4gcHJlcGFyYXRpb24gdG8gbWFraW5nIHRoZSBwcEdUVCBiaW5kaW5nIGZvciBhIGNvbnRleHQg ZXhwbGljaXQgKHRvCmZhY2lsaXRhdGUgcmV1c2luZyB0aGUgc2FtZSBwcEdUVCBiZXR3ZWVuIGRp ZmZlcmVudCBjb250ZXh0cyksIGFsbG93IHRoZQp1c2VyIHRvIGNyZWF0ZSBhbmQgZGVzdHJveSBu YW1lZCBwcEdUVC4KCnYyOiBSZXBsYWNlIGdsb2JhbCBiYXJyaWVyIGZvciBzd2FwcGluZyBvdmVy IHRoZSBwcGd0dCBhbmQgdGxicyB3aXRoIGEKbG9jYWwgY29udGV4dCBiYXJyaWVyIChUdnJ0a28p CnYzOiBzZXJpYWxpc2Ugd2l0aCBzdHJ1Y3RfbXV0ZXg7IGl0J3MgbGF6eSBidXQgcmVxdWlyZWQg ZGFtbWl0CgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5j by51az4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jICAgICAgICAgICAgICAg fCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgICAgICAgIHwg ICAzICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYyAgICAgICB8IDI1 NCArKysrKysrKysrKysrKysrKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRl eHQuaCAgICAgICB8ICAgNSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyAg ICAgICAgICAgfCAgMTcgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oICAg ICAgICAgICB8ICAxNiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2h1Z2VfcGFn ZXMuYyAgIHwgICAxIC0KIC4uLi9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2NvbnRl eHQuYyB8IDIzOSArKysrKysrKysrKystLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvaTkxNV9nZW1fZ3R0LmMgfCAgIDEgLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3Rz L21vY2tfY29udGV4dC5jIHwgICA4ICstCiBpbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggICAg ICAgICAgICAgICAgICAgfCAgMzYgKysrCiAxMSBmaWxlcyBjaGFuZ2VkLCA1MTEgaW5zZXJ0aW9u cygrKSwgNzEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggMjI0YmI5 NmI3ODc3Li42Yjc1ZDFiN2I4YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtMzAwOCw2 ICszMDA4LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faW9jdGxfZGVzYyBpOTE1X2lvY3Rs c1tdID0gewogCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfUEVSRl9BRERfQ09ORklHLCBpOTE1X3Bl cmZfYWRkX2NvbmZpZ19pb2N0bCwgRFJNX1VOTE9DS0VEfERSTV9SRU5ERVJfQUxMT1cpLAogCURS TV9JT0NUTF9ERUZfRFJWKEk5MTVfUEVSRl9SRU1PVkVfQ09ORklHLCBpOTE1X3BlcmZfcmVtb3Zl X2NvbmZpZ19pb2N0bCwgRFJNX1VOTE9DS0VEfERSTV9SRU5ERVJfQUxMT1cpLAogCURSTV9JT0NU TF9ERUZfRFJWKEk5MTVfUVVFUlksIGk5MTVfcXVlcnlfaW9jdGwsIERSTV9VTkxPQ0tFRHxEUk1f UkVOREVSX0FMTE9XKSwKKwlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9WTV9DUkVBVEUsIGk5 MTVfZ2VtX3ZtX2NyZWF0ZV9pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCisJRFJNX0lPQ1RMX0RF Rl9EUlYoSTkxNV9HRU1fVk1fREVTVFJPWSwgaTkxNV9nZW1fdm1fZGVzdHJveV9pb2N0bCwgRFJN X1JFTkRFUl9BTExPVyksCiB9OwogCiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0g ewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggMTk1ZTcxYmI0YTRmLi5jYmMyYjU5NzIyYWUg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMjE4LDYgKzIxOCw5IEBAIHN0cnVjdCBkcm1f aTkxNV9maWxlX3ByaXZhdGUgewogCX0gbW07CiAJc3RydWN0IGlkciBjb250ZXh0X2lkcjsKIAor CXN0cnVjdCBtdXRleCB2bV9sb2NrOworCXN0cnVjdCBpZHIgdm1faWRyOworCiAJdW5zaWduZWQg aW50IGJzZF9lbmdpbmU7CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9jb250ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0 LmMKaW5kZXggOTE5MjZhNDA3NTQ4Li44YzM1YjYwMTlmMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9jb250ZXh0LmMKQEAgLTEyNCw2ICsxMjQsOCBAQCBzdGF0aWMgdm9pZCBsdXRf Y2xvc2Uoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkKIAkJc3RydWN0IGk5MTVfdm1hICp2 bWEgPSByY3VfZGVyZWZlcmVuY2VfcmF3KCpzbG90KTsKIAogCQlyYWRpeF90cmVlX2l0ZXJfZGVs ZXRlKCZjdHgtPmhhbmRsZXNfdm1hLCAmaXRlciwgc2xvdCk7CisKKwkJdm1hLT5vcGVuX2NvdW50 LS07CiAJCV9faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfdW5sZXNzX2FjdGl2ZSh2bWEtPm9iaik7 CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtMzA4LDcgKzMxMCw3IEBAIHN0YXRpYyB2b2lk IGNvbnRleHRfY2xvc2Uoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkKIAkgKi8KIAlsdXRf Y2xvc2UoY3R4KTsKIAlpZiAoY3R4LT5wcGd0dCkKLQkJaTkxNV9wcGd0dF9jbG9zZSgmY3R4LT5w cGd0dC0+dm0pOworCQlpOTE1X3BwZ3R0X2Nsb3NlKGN0eC0+cHBndHQpOwogCiAJY3R4LT5maWxl X3ByaXYgPSBFUlJfUFRSKC1FQkFERik7CiAJaTkxNV9nZW1fY29udGV4dF9wdXQoY3R4KTsKQEAg LTQ0Nyw2ICs0NDksMzIgQEAgc3RhdGljIHZvaWQgX19kZXN0cm95X2h3X2NvbnRleHQoc3RydWN0 IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKIAljb250ZXh0X2Nsb3NlKGN0eCk7CiB9CiAKK3N0YXRp YyBzdHJ1Y3QgaTkxNV9od19wcGd0dCAqCitfX3NldF9wcGd0dChzdHJ1Y3QgaTkxNV9nZW1fY29u dGV4dCAqY3R4LCBzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCit7CisJc3RydWN0IGk5MTVf aHdfcHBndHQgKm9sZCA9IGN0eC0+cHBndHQ7CisKKwlpOTE1X3BwZ3R0X29wZW4ocHBndHQpOwor CWN0eC0+cHBndHQgPSBpOTE1X3BwZ3R0X2dldChwcGd0dCk7CisKKwljdHgtPmRlc2NfdGVtcGxh dGUgPSBkZWZhdWx0X2Rlc2NfdGVtcGxhdGUoY3R4LT5pOTE1LCBwcGd0dCk7CisKKwlyZXR1cm4g b2xkOworfQorCitzdGF0aWMgdm9pZCBfX2Fzc2lnbl9wcGd0dChzdHJ1Y3QgaTkxNV9nZW1fY29u dGV4dCAqY3R4LAorCQkJICAgc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQoreworCWlmIChw cGd0dCA9PSBjdHgtPnBwZ3R0KQorCQlyZXR1cm47CisKKwlwcGd0dCA9IF9fc2V0X3BwZ3R0KGN0 eCwgcHBndHQpOworCWlmIChwcGd0dCkgeworCQlpOTE1X3BwZ3R0X2Nsb3NlKHBwZ3R0KTsKKwkJ aTkxNV9wcGd0dF9wdXQocHBndHQpOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBpOTE1X2dlbV9j b250ZXh0ICoKIGk5MTVfZ2VtX2NyZWF0ZV9jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKIAkJCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdikK QEAgLTQ3Myw4ICs1MDEsOCBAQCBpOTE1X2dlbV9jcmVhdGVfY29udGV4dChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQlyZXR1cm4gRVJSX0NBU1QocHBndHQpOwogCQl9CiAK LQkJY3R4LT5wcGd0dCA9IHBwZ3R0OwotCQljdHgtPmRlc2NfdGVtcGxhdGUgPSBkZWZhdWx0X2Rl c2NfdGVtcGxhdGUoZGV2X3ByaXYsIHBwZ3R0KTsKKwkJX19hc3NpZ25fcHBndHQoY3R4LCBwcGd0 dCk7CisJCWk5MTVfcHBndHRfcHV0KHBwZ3R0KTsKIAl9CiAKIAl0cmFjZV9pOTE1X2NvbnRleHRf Y3JlYXRlKGN0eCk7CkBAIC02NTUsMTkgKzY4MywyOSBAQCBzdGF0aWMgaW50IGNvbnRleHRfaWRy X2NsZWFudXAoaW50IGlkLCB2b2lkICpwLCB2b2lkICpkYXRhKQogCXJldHVybiAwOwogfQogCitz dGF0aWMgaW50IHZtX2lkcl9jbGVhbnVwKGludCBpZCwgdm9pZCAqcCwgdm9pZCAqZGF0YSkKK3sK KwlpOTE1X3BwZ3R0X3B1dChwKTsKKwlyZXR1cm4gMDsKK30KKwogaW50IGk5MTVfZ2VtX2NvbnRl eHRfb3BlbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKIAkJCSAgc3RydWN0IGRybV9m aWxlICpmaWxlKQogewogCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdiA9 IGZpbGUtPmRyaXZlcl9wcml2OwogCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHg7CiAKKwlt dXRleF9pbml0KCZmaWxlX3ByaXYtPnZtX2xvY2spOworCiAJaWRyX2luaXQoJmZpbGVfcHJpdi0+ Y29udGV4dF9pZHIpOworCWlkcl9pbml0X2Jhc2UoJmZpbGVfcHJpdi0+dm1faWRyLCAxKTsKIAog CW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwogCWN0eCA9IGk5MTVfZ2VtX2Ny ZWF0ZV9jb250ZXh0KGk5MTUsIGZpbGVfcHJpdik7CiAJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0u c3RydWN0X211dGV4KTsKIAlpZiAoSVNfRVJSKGN0eCkpIHsKIAkJaWRyX2Rlc3Ryb3koJmZpbGVf cHJpdi0+Y29udGV4dF9pZHIpOworCQlpZHJfZGVzdHJveSgmZmlsZV9wcml2LT52bV9pZHIpOwog CQlyZXR1cm4gUFRSX0VSUihjdHgpOwogCX0KIApAQCAtNjg0LDYgKzcyMiw4OSBAQCB2b2lkIGk5 MTVfZ2VtX2NvbnRleHRfY2xvc2Uoc3RydWN0IGRybV9maWxlICpmaWxlKQogCiAJaWRyX2Zvcl9l YWNoKCZmaWxlX3ByaXYtPmNvbnRleHRfaWRyLCBjb250ZXh0X2lkcl9jbGVhbnVwLCBOVUxMKTsK IAlpZHJfZGVzdHJveSgmZmlsZV9wcml2LT5jb250ZXh0X2lkcik7CisKKwlpZHJfZm9yX2VhY2go JmZpbGVfcHJpdi0+dm1faWRyLCB2bV9pZHJfY2xlYW51cCwgTlVMTCk7CisJaWRyX2Rlc3Ryb3ko JmZpbGVfcHJpdi0+dm1faWRyKTsKKworCW11dGV4X2Rlc3Ryb3koJmZpbGVfcHJpdi0+dm1fbG9j ayk7Cit9CisKK2ludCBpOTE1X2dlbV92bV9jcmVhdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShkZXYpOworCXN0cnVjdCBkcm1f aTkxNV9nZW1fdm1fY29udHJvbCAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9pOTE1X2ZpbGVf cHJpdmF0ZSAqZmlsZV9wcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7CisJc3RydWN0IGk5MTVfaHdf cHBndHQgKnBwZ3R0OworCWludCBlcnI7CisKKwlpZiAoIUhBU19GVUxMX1BQR1RUKGk5MTUpKQor CQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChhcmdzLT5mbGFncykKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlpZiAoYXJncy0+ZXh0ZW5zaW9ucykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcGd0dCA9 IGk5MTVfcHBndHRfY3JlYXRlKGk5MTUsIGZpbGVfcHJpdik7CisJaWYgKElTX0VSUihwcGd0dCkp CisJCXJldHVybiBQVFJfRVJSKHBwZ3R0KTsKKworCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0 aWJsZSgmZmlsZV9wcml2LT52bV9sb2NrKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9wdXQ7CisK KwllcnIgPSBpZHJfYWxsb2MoJmZpbGVfcHJpdi0+dm1faWRyLCBwcGd0dCwgMCwgMCwgR0ZQX0tF Uk5FTCk7CisJbXV0ZXhfdW5sb2NrKCZmaWxlX3ByaXYtPnZtX2xvY2spOworCWlmIChlcnIgPCAw KQorCQlnb3RvIGVycl9wdXQ7CisKKwlHRU1fQlVHX09OKGVyciA9PSAwKTsgLyogcmVzZXJ2ZWQg Zm9yIGRlZmF1bHQvdW5hc3NpZ25lZCBwcGd0dCAqLworCXBwZ3R0LT51c2VyX2hhbmRsZSA9IGVy cjsKKwlhcmdzLT5pZCA9IGVycjsKKwlyZXR1cm4gMDsKKworZXJyX3B1dDoKKwlpOTE1X3BwZ3R0 X3B1dChwcGd0dCk7CisJcmV0dXJuIGVycjsKK30KKworaW50IGk5MTVfZ2VtX3ZtX2Rlc3Ryb3lf aW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgICAgIHN0cnVj dCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxl X3ByaXYgPSBmaWxlLT5kcml2ZXJfcHJpdjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ZtX2NvbnRy b2wgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dDsKKwlpbnQgZXJy OworCXUzMiBpZDsKKworCWlmIChhcmdzLT5mbGFncykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlp ZiAoYXJncy0+ZXh0ZW5zaW9ucykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZCA9IGFyZ3MtPmlk OworCWlmICghaWQpCisJCXJldHVybiAtRU5PRU5UOworCisJZXJyID0gbXV0ZXhfbG9ja19pbnRl cnJ1cHRpYmxlKCZmaWxlX3ByaXYtPnZtX2xvY2spOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7 CisKKwlwcGd0dCA9IGlkcl9yZW1vdmUoJmZpbGVfcHJpdi0+dm1faWRyLCBpZCk7CisJaWYgKHBw Z3R0KSB7CisJCUdFTV9CVUdfT04oIXBwZ3R0LT51c2VyX2hhbmRsZSk7CisJCXBwZ3R0LT51c2Vy X2hhbmRsZSA9IDA7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZmaWxlX3ByaXYtPnZtX2xvY2spOwor CWlmICghcHBndHQpCisJCXJldHVybiAtRU5PRU5UOworCisJaTkxNV9wcGd0dF9wdXQocHBndHQp OworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGk5MTVfcmVxdWVzdCAqCkBAIC04MzEs NiArOTUyLDEyMCBAQCBpbnQgaTkxNV9nZW1fc3dpdGNoX3RvX2tlcm5lbF9jb250ZXh0KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1LAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGdl dF9wcGd0dChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAorCQkgICAgIHN0cnVjdCBkcm1f aTkxNV9nZW1fY29udGV4dF9wYXJhbSAqYXJncykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9w cml2YXRlICpmaWxlX3ByaXYgPSBjdHgtPmZpbGVfcHJpdjsKKwlzdHJ1Y3QgaTkxNV9od19wcGd0 dCAqcHBndHQ7CisJaW50IHJldDsKKworCWlmICghY3R4LT5wcGd0dCkKKwkJcmV0dXJuIC1FTk9E RVY7CisKKwkvKiBYWFggcmN1IGFjcXVpcmU/ICovCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1 cHRpYmxlKCZjdHgtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwlwcGd0dCA9IGk5MTVfcHBndHRfZ2V0KGN0eC0+cHBndHQpOworCW11dGV4X3Vu bG9jaygmY3R4LT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKworCXJldCA9IG11dGV4X2xvY2tf aW50ZXJydXB0aWJsZSgmZmlsZV9wcml2LT52bV9sb2NrKTsKKwlpZiAocmV0KQorCQlnb3RvIGVy cl9wdXQ7CisKKwlpZiAoIXBwZ3R0LT51c2VyX2hhbmRsZSkgeworCQlyZXQgPSBpZHJfYWxsb2Mo JmZpbGVfcHJpdi0+dm1faWRyLCBwcGd0dCwgMCwgMCwgR0ZQX0tFUk5FTCk7CisJCUdFTV9CVUdf T04oIXJldCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnJfdW5sb2NrOworCisJCXBwZ3R0 LT51c2VyX2hhbmRsZSA9IHJldDsKKwkJaTkxNV9wcGd0dF9nZXQocHBndHQpOworCX0KKworCWFy Z3MtPnNpemUgPSAwOworCWFyZ3MtPnZhbHVlID0gcHBndHQtPnVzZXJfaGFuZGxlOworCisJcmV0 ID0gMDsKK2Vycl91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZmaWxlX3ByaXYtPnZtX2xvY2spOwor ZXJyX3B1dDoKKwlpOTE1X3BwZ3R0X3B1dChwcGd0dCk7CisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIHZvaWQgc2V0X3BwZ3R0X2JhcnJpZXIodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaTkxNV9o d19wcGd0dCAqb2xkID0gZGF0YTsKKworCWk5MTVfcHBndHRfY2xvc2Uob2xkKTsKKwlpOTE1X3Bw Z3R0X3B1dChvbGQpOworfQorCitzdGF0aWMgaW50IHNldF9wcGd0dChzdHJ1Y3QgaTkxNV9nZW1f Y29udGV4dCAqY3R4LAorCQkgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSAq YXJncykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYgPSBjdHgt PmZpbGVfcHJpdjsKKwlzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQsICpvbGQ7CisJaW50IGVy cjsKKworCWlmIChhcmdzLT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh1cHBlcl8z Ml9iaXRzKGFyZ3MtPnZhbHVlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWN0eC0+cHBn dHQpCisJCXJldHVybiAtRU5PREVWOworCisJZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxl KCZmaWxlX3ByaXYtPnZtX2xvY2spOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlwcGd0 dCA9IGlkcl9maW5kKCZmaWxlX3ByaXYtPnZtX2lkciwgYXJncy0+dmFsdWUpOworCWlmIChwcGd0 dCkgeworCQlHRU1fQlVHX09OKHBwZ3R0LT51c2VyX2hhbmRsZSAhPSBhcmdzLT52YWx1ZSk7CisJ CWk5MTVfcHBndHRfZ2V0KHBwZ3R0KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZmaWxlX3ByaXYtPnZt X2xvY2spOworCWlmICghcHBndHQpCisJCXJldHVybiAtRU5PRU5UOworCisJZXJyID0gbXV0ZXhf bG9ja19pbnRlcnJ1cHRpYmxlKCZjdHgtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCWlmIChl cnIpCisJCWdvdG8gb3V0OworCisJaWYgKHBwZ3R0ID09IGN0eC0+cHBndHQpCisJCWdvdG8gdW5s b2NrOworCisJLyogVGVhcmRvd24gdGhlIGV4aXN0aW5nIG9iajp2bWEgY2FjaGUsIGl0IHdpbGwg aGF2ZSB0byBiZSByZWJ1aWx0LiAqLworCWx1dF9jbG9zZShjdHgpOworCisJb2xkID0gX19zZXRf cHBndHQoY3R4LCBwcGd0dCk7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gZmx1c2ggYW55IHJlcXVl c3RzIHVzaW5nIHRoZSBjdXJyZW50IHBwZ3R0IGJlZm9yZQorCSAqIHdlIHJlbGVhc2UgaXQgYXMg dGhlIHJlcXVlc3RzIGRvIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRoZW1zZWx2ZXMsCisJICogb25s eSBpbmRpcmVjdGx5IHRocm91Z2ggdGhlIGNvbnRleHQuCisJICovCisJZXJyID0gY29udGV4dF9i YXJyaWVyX3Rhc2soY3R4LCAtMSwgc2V0X3BwZ3R0X2JhcnJpZXIsIG9sZCk7CisJaWYgKGVycikg eworCQljdHgtPnBwZ3R0ID0gb2xkOworCQljdHgtPmRlc2NfdGVtcGxhdGUgPSBkZWZhdWx0X2Rl c2NfdGVtcGxhdGUoY3R4LT5pOTE1LCBvbGQpOworCisJCWk5MTVfcHBndHRfY2xvc2UocHBndHQp OworCQlpOTE1X3BwZ3R0X3B1dChwcGd0dCk7CisJfQorCit1bmxvY2s6CisJbXV0ZXhfdW5sb2Nr KCZjdHgtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCitvdXQ6CisJaTkxNV9wcGd0dF9wdXQo cHBndHQpOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBib29sIGNsaWVudF9pc19iYW5uZWQo c3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2KQogewogCXJldHVybiBhdG9t aWNfcmVhZCgmZmlsZV9wcml2LT5iYW5fc2NvcmUpID49IEk5MTVfQ0xJRU5UX1NDT1JFX0JBTk5F RDsKQEAgLTEwMDksNiArMTI0NCw5IEBAIGludCBpOTE1X2dlbV9jb250ZXh0X2dldHBhcmFtX2lv Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJY2FzZSBJOTE1X0NPTlRF WFRfUEFSQU1fU1NFVToKIAkJcmV0ID0gZ2V0X3NzZXUoY3R4LCBhcmdzKTsKIAkJYnJlYWs7CisJ Y2FzZSBJOTE1X0NPTlRFWFRfUEFSQU1fVk06CisJCXJldCA9IGdldF9wcGd0dChjdHgsIGFyZ3Mp OworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwogCQlicmVhazsKQEAgLTEz MDYsOSArMTU0NCw2IEBAIGludCBpOTE1X2dlbV9jb250ZXh0X3NldHBhcmFtX2lvY3RsKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCXJldHVybiAtRU5PRU5UOwogCiAJc3dp dGNoIChhcmdzLT5wYXJhbSkgewotCWNhc2UgSTkxNV9DT05URVhUX1BBUkFNX0JBTl9QRVJJT0Q6 Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwogCWNhc2UgSTkxNV9DT05URVhUX1BBUkFNX05P X1pFUk9NQVA6CiAJCWlmIChhcmdzLT5zaXplKQogCQkJcmV0ID0gLUVJTlZBTDsKQEAgLTEzNjQs OSArMTU5OSwxNiBAQCBpbnQgaTkxNV9nZW1fY29udGV4dF9zZXRwYXJhbV9pb2N0bChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJCQlJOTE1X1VTRVJfUFJJT1JJVFkocHJp b3JpdHkpOwogCQl9CiAJCWJyZWFrOworCiAJY2FzZSBJOTE1X0NPTlRFWFRfUEFSQU1fU1NFVToK IAkJcmV0ID0gc2V0X3NzZXUoY3R4LCBhcmdzKTsKIAkJYnJlYWs7CisKKwljYXNlIEk5MTVfQ09O VEVYVF9QQVJBTV9WTToKKwkJcmV0ID0gc2V0X3BwZ3R0KGN0eCwgYXJncyk7CisJCWJyZWFrOwor CisJY2FzZSBJOTE1X0NPTlRFWFRfUEFSQU1fQkFOX1BFUklPRDoKIAlkZWZhdWx0OgogCQlyZXQg PSAtRUlOVkFMOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2NvbnRleHQuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQu aAppbmRleCBkZjQ4MDEzYjU4MWUuLjk3Y2Y5ZDNkMDdhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2NvbnRleHQuaApAQCAtMzg0LDYgKzM4NCwxMSBAQCB2b2lkIGk5MTVfZ2VtX2Nv bnRleHRfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqY3R4X3JlZik7CiBzdHJ1Y3QgaTkxNV9nZW1fY29u dGV4dCAqCiBpOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9ndnQoc3RydWN0IGRybV9kZXZpY2UgKmRl dik7CiAKK2ludCBpOTE1X2dlbV92bV9jcmVhdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwKKwkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlKTsKK2ludCBpOTE1 X2dlbV92bV9kZXN0cm95X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEs CisJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOworCiBpbnQgaTkxNV9nZW1fY29udGV4 dF9jcmVhdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCQkg IHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7CiBpbnQgaTkxNV9nZW1fY29udGV4dF9kZXN0cm95X2lv Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2d0dC5jCmluZGV4IDk5MDIyNzM4Y2M4OS4uZDNmODBkYmYxM2VmIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9ndHQuYwpAQCAtMjEwMywxMCArMjEwMywyMSBAQCBpOTE1X3BwZ3R0 X2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKIAlyZXR1cm4gcHBndHQ7CiB9 CiAKLXZvaWQgaTkxNV9wcGd0dF9jbG9zZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkK K3ZvaWQgaTkxNV9wcGd0dF9vcGVuKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKIHsKLQlH RU1fQlVHX09OKHZtLT5jbG9zZWQpOwotCXZtLT5jbG9zZWQgPSB0cnVlOworCUdFTV9CVUdfT04o cHBndHQtPnZtLmNsb3NlZCk7CisKKwlwcGd0dC0+b3Blbl9jb3VudCsrOworfQorCit2b2lkIGk5 MTVfcHBndHRfY2xvc2Uoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQoreworCUdFTV9CVUdf T04oIXBwZ3R0LT5vcGVuX2NvdW50KTsKKwlpZiAoLS1wcGd0dC0+b3Blbl9jb3VudCkKKwkJcmV0 dXJuOworCisJR0VNX0JVR19PTihwcGd0dC0+dm0uY2xvc2VkKTsKKwlwcGd0dC0+dm0uY2xvc2Vk ID0gdHJ1ZTsKIH0KIAogc3RhdGljIHZvaWQgcHBndHRfZGVzdHJveV92bWEoc3RydWN0IGk5MTVf YWRkcmVzc19zcGFjZSAqdm0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9ndHQuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCmluZGV4IDAz YWRlNzFiOGQ5YS4uYmI3NTAzMThmNTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9ndHQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQu aApAQCAtMzkxLDExICszOTEsMTUgQEAgc3RydWN0IGk5MTVfaHdfcHBndHQgewogCXN0cnVjdCBr cmVmIHJlZjsKIAogCXVuc2lnbmVkIGxvbmcgcGRfZGlydHlfcmluZ3M7CisJdW5zaWduZWQgaW50 IG9wZW5fY291bnQ7CisKIAl1bmlvbiB7CiAJCXN0cnVjdCBpOTE1X3BtbDQgcG1sNDsJCS8qIEdF TjgrICYgNDhiIFBQR1RUICovCiAJCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXIg cGRwOwkvKiBHRU44KyAqLwogCQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSBwZDsJCS8qIEdF TjYtNyAqLwogCX07CisKKwl1MzIgdXNlcl9oYW5kbGU7CiB9OwogCiBzdHJ1Y3QgZ2VuNl9od19w cGd0dCB7CkBAIC02MDYsMTIgKzYxMCwxNiBAQCBpbnQgaTkxNV9wcGd0dF9pbml0X2h3KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB2b2lkIGk5MTVfcHBndHRfcmVsZWFzZShz dHJ1Y3Qga3JlZiAqa3JlZik7CiBzdHJ1Y3QgaTkxNV9od19wcGd0dCAqaTkxNV9wcGd0dF9jcmVh dGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJCQlzdHJ1Y3QgZHJtX2k5 MTVfZmlsZV9wcml2YXRlICpmcHJpdik7Ci12b2lkIGk5MTVfcHBndHRfY2xvc2Uoc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0pOwotc3RhdGljIGlubGluZSB2b2lkIGk5MTVfcHBndHRfZ2V0 KHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKKwordm9pZCBpOTE1X3BwZ3R0X29wZW4oc3Ry dWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KTsKK3ZvaWQgaTkxNV9wcGd0dF9jbG9zZShzdHJ1Y3Qg aTkxNV9od19wcGd0dCAqcHBndHQpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpOTE1X2h3X3Bw Z3R0ICppOTE1X3BwZ3R0X2dldChzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCiB7Ci0JaWYg KHBwZ3R0KQotCQlrcmVmX2dldCgmcHBndHQtPnJlZik7CisJa3JlZl9nZXQoJnBwZ3R0LT5yZWYp OworCXJldHVybiBwcGd0dDsKIH0KKwogc3RhdGljIGlubGluZSB2b2lkIGk5MTVfcHBndHRfcHV0 KHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKIHsKIAlpZiAocHBndHQpCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYwppbmRleCA0YjlkZWQ0Y2EwZjUuLmM1 MWFhMDk2NjhjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2h1 Z2VfcGFnZXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaHVnZV9wYWdl cy5jCkBAIC0xNzM0LDcgKzE3MzQsNiBAQCBpbnQgaTkxNV9nZW1faHVnZV9wYWdlX21vY2tfc2Vs ZnRlc3RzKHZvaWQpCiAJZXJyID0gaTkxNV9zdWJ0ZXN0cyh0ZXN0cywgcHBndHQpOwogCiBvdXRf Y2xvc2U6Ci0JaTkxNV9wcGd0dF9jbG9zZSgmcHBndHQtPnZtKTsKIAlpOTE1X3BwZ3R0X3B1dChw cGd0dCk7CiAKIG91dF91bmxvY2s6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvaTkxNV9nZW1fY29udGV4dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRl c3RzL2k5MTVfZ2VtX2NvbnRleHQuYwppbmRleCA0ZjdjMDQyNDczNTQuLjkxMzNhZmMwMzEzNSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2NvbnRl eHQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fY29udGV4 dC5jCkBAIC0zNzIsNyArMzcyLDggQEAgc3RhdGljIGludCBjcHVfZmlsbChzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLCB1MzIgdmFsdWUpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBp bnQgY3B1X2NoZWNrKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIHVuc2lnbmVkIGlu dCBtYXgpCitzdGF0aWMgbm9pbmxpbmUgaW50IGNwdV9jaGVjayhzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAorCQkJICAgICAgdW5zaWduZWQgaW50IGlkeCwgdW5zaWduZWQgaW50IG1h eCkKIHsKIAl1bnNpZ25lZCBpbnQgbiwgbSwgbmVlZHNfZmx1c2g7CiAJaW50IGVycjsKQEAgLTM5 MCw4ICszOTEsMTAgQEAgc3RhdGljIGludCBjcHVfY2hlY2soc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiwgdW5zaWduZWQgaW50IG1heCkKIAogCQlmb3IgKG0gPSAwOyBtIDwgbWF4OyBt KyspIHsKIAkJCWlmIChtYXBbbV0gIT0gbSkgewotCQkJCXByX2VycigiSW52YWxpZCB2YWx1ZSBh dCBwYWdlICVkLCBvZmZzZXQgJWQ6IGZvdW5kICV4IGV4cGVjdGVkICV4XG4iLAotCQkJCSAgICAg ICBuLCBtLCBtYXBbbV0sIG0pOworCQkJCXByX2VycigiJXBTOiBJbnZhbGlkIHZhbHVlIGF0IG9i amVjdCAlZCBwYWdlICVkLyVsZCwgb2Zmc2V0ICVkLyVkOiBmb3VuZCAleCBleHBlY3RlZCAleFxu IiwKKwkJCQkgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCBpZHgsCisJCQkJICAg ICAgIG4sIHJlYWxfcGFnZV9jb3VudChvYmopLCBtLCBtYXgsCisJCQkJICAgICAgIG1hcFttXSwg bSk7CiAJCQkJZXJyID0gLUVJTlZBTDsKIAkJCQlnb3RvIG91dF91bm1hcDsKIAkJCX0KQEAgLTM5 OSw4ICs0MDIsOSBAQCBzdGF0aWMgaW50IGNwdV9jaGVjayhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqLCB1bnNpZ25lZCBpbnQgbWF4KQogCiAJCWZvciAoOyBtIDwgRFdfUEVSX1BBR0U7 IG0rKykgewogCQkJaWYgKG1hcFttXSAhPSBTVEFDS19NQUdJQykgewotCQkJCXByX2VycigiSW52 YWxpZCB2YWx1ZSBhdCBwYWdlICVkLCBvZmZzZXQgJWQ6IGZvdW5kICV4IGV4cGVjdGVkICV4XG4i LAotCQkJCSAgICAgICBuLCBtLCBtYXBbbV0sIFNUQUNLX01BR0lDKTsKKwkJCQlwcl9lcnIoIiVw UzogSW52YWxpZCB2YWx1ZSBhdCBvYmplY3QgJWQgcGFnZSAlZCwgb2Zmc2V0ICVkOiBmb3VuZCAl eCBleHBlY3RlZCAleCAodW5pbml0aWFsaXNlZClcbiIsCisJCQkJICAgICAgIF9fYnVpbHRpbl9y ZXR1cm5fYWRkcmVzcygwKSwgaWR4LCBuLCBtLAorCQkJCSAgICAgICBtYXBbbV0sIFNUQUNLX01B R0lDKTsKIAkJCQllcnIgPSAtRUlOVkFMOwogCQkJCWdvdG8gb3V0X3VubWFwOwogCQkJfQpAQCAt NDc4LDEyICs0ODIsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXhfZHdvcmRzKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiBzdGF0aWMgaW50IGlndF9jdHhfZXhlYyh2b2lkICph cmcpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBhcmc7Ci0Jc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBuY29udGV4dHMs IG5kd29yZHMsIGR3OwotCXN0cnVjdCBpZ3RfbGl2ZV90ZXN0IHQ7Ci0Jc3RydWN0IGRybV9maWxl ICpmaWxlOwotCUlHVF9USU1FT1VUKGVuZF90aW1lKTsKLQlMSVNUX0hFQUQob2JqZWN0cyk7CisJ c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOworCWVudW0gaW50ZWxfZW5naW5lX2lkIGlk OwogCWludCBlcnIgPSAtRU5PREVWOwogCiAJLyoKQEAgLTQ5NSwzOCArNDk1LDQyIEBAIHN0YXRp YyBpbnQgaWd0X2N0eF9leGVjKHZvaWQgKmFyZykKIAlpZiAoIURSSVZFUl9DQVBTKGk5MTUpLT5o YXNfbG9naWNhbF9jb250ZXh0cykKIAkJcmV0dXJuIDA7CiAKLQlmaWxlID0gbW9ja19maWxlKGk5 MTUpOwotCWlmIChJU19FUlIoZmlsZSkpCi0JCXJldHVybiBQVFJfRVJSKGZpbGUpOworCWZvcl9l YWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlkKSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmogPSBOVUxMOworCQl1bnNpZ25lZCBsb25nIG5jb250ZXh0cywgbmR3b3JkcywgZHc7 CisJCXN0cnVjdCBpZ3RfbGl2ZV90ZXN0IHQ7CisJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZTsKKwkJ SUdUX1RJTUVPVVQoZW5kX3RpbWUpOworCQlMSVNUX0hFQUQob2JqZWN0cyk7CiAKLQltdXRleF9s b2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwkJaWYgKCFpbnRlbF9lbmdpbmVfY2FuX3N0 b3JlX2R3b3JkKGVuZ2luZSkpCisJCQljb250aW51ZTsKIAotCWVyciA9IGlndF9saXZlX3Rlc3Rf YmVnaW4oJnQsIGk5MTUsIF9fZnVuY19fLCAiIik7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfdW5s b2NrOworCQlpZiAoIWVuZ2luZS0+Y29udGV4dF9zaXplKQorCQkJY29udGludWU7IC8qIE5vIGxv Z2ljYWwgY29udGV4dCBzdXBwb3J0IGluIEhXICovCiAKLQluY29udGV4dHMgPSAwOwotCW5kd29y ZHMgPSAwOwotCWR3ID0gMDsKLQl3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgZW5kX3RpbWUp KSB7Ci0JCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKLQkJc3RydWN0IGk5MTVfZ2Vt X2NvbnRleHQgKmN0eDsKLQkJdW5zaWduZWQgaW50IGlkOworCQlmaWxlID0gbW9ja19maWxlKGk5 MTUpOworCQlpZiAoSVNfRVJSKGZpbGUpKQorCQkJcmV0dXJuIFBUUl9FUlIoZmlsZSk7CiAKLQkJ Y3R4ID0gaTkxNV9nZW1fY3JlYXRlX2NvbnRleHQoaTkxNSwgZmlsZS0+ZHJpdmVyX3ByaXYpOwot CQlpZiAoSVNfRVJSKGN0eCkpIHsKLQkJCWVyciA9IFBUUl9FUlIoY3R4KTsKKwkJbXV0ZXhfbG9j aygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisKKwkJZXJyID0gaWd0X2xpdmVfdGVzdF9iZWdp bigmdCwgaTkxNSwgX19mdW5jX18sIGVuZ2luZS0+bmFtZSk7CisJCWlmIChlcnIpCiAJCQlnb3Rv IG91dF91bmxvY2s7Ci0JCX0KIAotCQlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1LCBpZCkg eworCQluY29udGV4dHMgPSAwOworCQluZHdvcmRzID0gMDsKKwkJZHcgPSAwOworCQl3aGlsZSAo IXRpbWVfYWZ0ZXIoamlmZmllcywgZW5kX3RpbWUpKSB7CisJCQlzdHJ1Y3QgaTkxNV9nZW1fY29u dGV4dCAqY3R4OwogCQkJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7CiAKLQkJCWlmICghZW5naW5l LT5jb250ZXh0X3NpemUpCi0JCQkJY29udGludWU7IC8qIE5vIGxvZ2ljYWwgY29udGV4dCBzdXBw b3J0IGluIEhXICovCi0KLQkJCWlmICghaW50ZWxfZW5naW5lX2Nhbl9zdG9yZV9kd29yZChlbmdp bmUpKQotCQkJCWNvbnRpbnVlOworCQkJY3R4ID0gaTkxNV9nZW1fY3JlYXRlX2NvbnRleHQoaTkx NSwgZmlsZS0+ZHJpdmVyX3ByaXYpOworCQkJaWYgKElTX0VSUihjdHgpKSB7CisJCQkJZXJyID0g UFRSX0VSUihjdHgpOworCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCX0KIAogCQkJaWYgKCFvYmop IHsKIAkJCQlvYmogPSBjcmVhdGVfdGVzdF9vYmplY3QoY3R4LCBmaWxlLCAmb2JqZWN0cyk7CkBA IC01MzYsNyArNTQwLDYgQEAgc3RhdGljIGludCBpZ3RfY3R4X2V4ZWModm9pZCAqYXJnKQogCQkJ CX0KIAkJCX0KIAotCQkJZXJyID0gMDsKIAkJCXdpdGhfaW50ZWxfcnVudGltZV9wbShpOTE1LCB3 YWtlcmVmKQogCQkJCWVyciA9IGdwdV9maWxsKG9iaiwgY3R4LCBlbmdpbmUsIGR3KTsKIAkJCWlm IChlcnIpIHsKQEAgLTU1MSwzMiArNTU0LDE1OCBAQCBzdGF0aWMgaW50IGlndF9jdHhfZXhlYyh2 b2lkICphcmcpCiAJCQkJb2JqID0gTlVMTDsKIAkJCQlkdyA9IDA7CiAJCQl9CisKIAkJCW5kd29y ZHMrKzsKKwkJCW5jb250ZXh0cysrOwogCQl9Ci0JCW5jb250ZXh0cysrOworCisJCXByX2luZm8o IlN1Ym1pdHRlZCAlbHUgY29udGV4dHMgdG8gJXMsIGZpbGxpbmcgJWx1IGR3b3Jkc1xuIiwKKwkJ CW5jb250ZXh0cywgZW5naW5lLT5uYW1lLCBuZHdvcmRzKTsKKworCQluY29udGV4dHMgPSBkdyA9 IDA7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCAmb2JqZWN0cywgc3RfbGluaykgeworCQkJ dW5zaWduZWQgaW50IHJlbSA9CisJCQkJbWluX3QodW5zaWduZWQgaW50LCBuZHdvcmRzIC0gZHcs IG1heF9kd29yZHMob2JqKSk7CisKKwkJCWVyciA9IGNwdV9jaGVjayhvYmosIG5jb250ZXh0cysr LCByZW0pOworCQkJaWYgKGVycikKKwkJCQlicmVhazsKKworCQkJZHcgKz0gcmVtOworCQl9CisK K291dF91bmxvY2s6CisJCWlmIChpZ3RfbGl2ZV90ZXN0X2VuZCgmdCkpCisJCQllcnIgPSAtRUlP OworCQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCisJCW1vY2tfZmls ZV9mcmVlKGk5MTUsIGZpbGUpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKIAl9Ci0JcHJf aW5mbygiU3VibWl0dGVkICVsdSBjb250ZXh0cyAoYWNyb3NzICV1IGVuZ2luZXMpLCBmaWxsaW5n ICVsdSBkd29yZHNcbiIsCi0JCW5jb250ZXh0cywgUlVOVElNRV9JTkZPKGk5MTUpLT5udW1fZW5n aW5lcywgbmR3b3Jkcyk7CiAKLQlkdyA9IDA7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosICZv YmplY3RzLCBzdF9saW5rKSB7Ci0JCXVuc2lnbmVkIGludCByZW0gPQotCQkJbWluX3QodW5zaWdu ZWQgaW50LCBuZHdvcmRzIC0gZHcsIG1heF9kd29yZHMob2JqKSk7CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgaWd0X3NoYXJlZF9jdHhfZXhlYyh2b2lkICphcmcpCit7CisJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBhcmc7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lOworCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOworCWludCBlcnIgPSAtRU5PREVWOworCisJ LyoKKwkgKiBDcmVhdGUgYSBmZXcgZGlmZmVyZW50IGNvbnRleHRzIHdpdGggdGhlIHNhbWUgbW0g YW5kIHdyaXRlCisJICogdGhyb3VnaCBlYWNoIGN0eCB1c2luZyB0aGUgR1BVIG1ha2luZyBzdXJl IHRob3NlIHdyaXRlcyBlbmQKKwkgKiB1cCBpbiB0aGUgZXhwZWN0ZWQgcGFnZXMgb2Ygb3VyIG9i ai4KKwkgKi8KKworCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlkKSB7CisJCXVuc2ln bmVkIGxvbmcgbmNvbnRleHRzLCBuZHdvcmRzLCBkdzsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiA9IE5VTEw7CisJCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHggPSBOVUxM OworCQlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqcGFyZW50OworCQlzdHJ1Y3QgaWd0X2xpdmVf dGVzdCB0OworCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGU7CisJCUlHVF9USU1FT1VUKGVuZF90aW1l KTsKKwkJTElTVF9IRUFEKG9iamVjdHMpOwogCi0JCWVyciA9IGNwdV9jaGVjayhvYmosIHJlbSk7 CisJCWlmICghaW50ZWxfZW5naW5lX2Nhbl9zdG9yZV9kd29yZChlbmdpbmUpKQorCQkJY29udGlu dWU7CisKKwkJZmlsZSA9IG1vY2tfZmlsZShpOTE1KTsKKwkJaWYgKElTX0VSUihmaWxlKSkKKwkJ CXJldHVybiBQVFJfRVJSKGZpbGUpOworCisJCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3Rf bXV0ZXgpOworCisJCWVyciA9IGlndF9saXZlX3Rlc3RfYmVnaW4oJnQsIGk5MTUsIF9fZnVuY19f LCBlbmdpbmUtPm5hbWUpOwogCQlpZiAoZXJyKQotCQkJYnJlYWs7CisJCQlnb3RvIG91dF91bmxv Y2s7CiAKLQkJZHcgKz0gcmVtOwotCX0KKwkJcGFyZW50ID0gaTkxNV9nZW1fY3JlYXRlX2NvbnRl eHQoaTkxNSwgZmlsZS0+ZHJpdmVyX3ByaXYpOworCQlpZiAoSVNfRVJSKHBhcmVudCkpIHsKKwkJ CWVyciA9IFBUUl9FUlIocGFyZW50KTsKKwkJCWlmIChlcnIgPT0gLUVOT0RFVikgLyogbm8gbG9n aWNhbCBjdHggc3VwcG9ydCAqLworCQkJCWVyciA9IDA7CisJCQlnb3RvIG91dF91bmxvY2s7CisJ CX0KKworCQlpZiAoIXBhcmVudC0+cHBndHQpIHsKKwkJCWVyciA9IDA7CisJCQlnb3RvIG91dF91 bmxvY2s7CisJCX0KKworCQluY29udGV4dHMgPSAwOworCQluZHdvcmRzID0gMDsKKwkJZHcgPSAw OworCQl3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgZW5kX3RpbWUpKSB7CisJCQlpbnRlbF93 YWtlcmVmX3Qgd2FrZXJlZjsKKworCQkJaWYgKGN0eCkKKwkJCQlfX2Rlc3Ryb3lfaHdfY29udGV4 dChjdHgsIGZpbGUtPmRyaXZlcl9wcml2KTsKKworCQkJY3R4ID0gaTkxNV9nZW1fY3JlYXRlX2Nv bnRleHQoaTkxNSwgZmlsZS0+ZHJpdmVyX3ByaXYpOworCQkJaWYgKElTX0VSUihjdHgpKSB7CisJ CQkJZXJyID0gUFRSX0VSUihjdHgpOworCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCX0KKworCQkJ X19hc3NpZ25fcHBndHQoY3R4LCBwYXJlbnQtPnBwZ3R0KTsKKworCQkJaWYgKCFvYmopIHsKKwkJ CQlvYmogPSBjcmVhdGVfdGVzdF9vYmplY3QocGFyZW50LCBmaWxlLCAmb2JqZWN0cyk7CisJCQkJ aWYgKElTX0VSUihvYmopKSB7CisJCQkJCWVyciA9IFBUUl9FUlIob2JqKTsKKwkJCQkJZ290byBv dXRfdW5sb2NrOworCQkJCX0KKwkJCX0KKworCQkJZXJyID0gMDsKKwkJCXdpdGhfaW50ZWxfcnVu dGltZV9wbShpOTE1LCB3YWtlcmVmKQorCQkJCWVyciA9IGdwdV9maWxsKG9iaiwgY3R4LCBlbmdp bmUsIGR3KTsKKwkJCWlmIChlcnIpIHsKKwkJCQlwcl9lcnIoIkZhaWxlZCB0byBmaWxsIGR3b3Jk ICVsdSBbJWx1LyVsdV0gd2l0aCBncHUgKCVzKSBpbiBjdHggJXUgW2Z1bGwtcHBndHQ/ICVzXSwg ZXJyPSVkXG4iLAorCQkJCSAgICAgICBuZHdvcmRzLCBkdywgbWF4X2R3b3JkcyhvYmopLAorCQkJ CSAgICAgICBlbmdpbmUtPm5hbWUsIGN0eC0+aHdfaWQsCisJCQkJICAgICAgIHllc25vKCEhY3R4 LT5wcGd0dCksIGVycik7CisJCQkJZ290byBvdXRfdW5sb2NrOworCQkJfQorCisJCQlpZiAoKytk dyA9PSBtYXhfZHdvcmRzKG9iaikpIHsKKwkJCQlvYmogPSBOVUxMOworCQkJCWR3ID0gMDsKKwkJ CX0KKworCQkJbmR3b3JkcysrOworCQkJbmNvbnRleHRzKys7CisJCX0KKwkJcHJfaW5mbygiU3Vi bWl0dGVkICVsdSBjb250ZXh0cyB0byAlcywgZmlsbGluZyAlbHUgZHdvcmRzXG4iLAorCQkJbmNv bnRleHRzLCBlbmdpbmUtPm5hbWUsIG5kd29yZHMpOworCisJCW5jb250ZXh0cyA9IGR3ID0gMDsK KwkJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosICZvYmplY3RzLCBzdF9saW5rKSB7CisJCQl1bnNp Z25lZCBpbnQgcmVtID0KKwkJCQltaW5fdCh1bnNpZ25lZCBpbnQsIG5kd29yZHMgLSBkdywgbWF4 X2R3b3JkcyhvYmopKTsKKworCQkJZXJyID0gY3B1X2NoZWNrKG9iaiwgbmNvbnRleHRzKyssIHJl bSk7CisJCQlpZiAoZXJyKQorCQkJCWJyZWFrOworCisJCQlkdyArPSByZW07CisJCX0KIAogb3V0 X3VubG9jazoKLQlpZiAoaWd0X2xpdmVfdGVzdF9lbmQoJnQpKQotCQllcnIgPSAtRUlPOwotCW11 dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisJCWlmIChpZ3RfbGl2ZV90ZXN0 X2VuZCgmdCkpCisJCQllcnIgPSAtRUlPOworCQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOwogCi0JbW9ja19maWxlX2ZyZWUoaTkxNSwgZmlsZSk7Ci0JcmV0dXJuIGVycjsK KwkJbW9ja19maWxlX2ZyZWUoaTkxNSwgZmlsZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJy OworCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGk5MTVfdm1hICpycGNzX3F1 ZXJ5X2JhdGNoKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQpAQCAtMTA0OCw3ICsxMTc3LDcgQEAgc3Rh dGljIGludCBpZ3RfY3R4X3JlYWRvbmx5KHZvaWQgKmFyZykKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqID0gTlVMTDsKIAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4OwogCXN0 cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dDsKLQl1bnNpZ25lZCBsb25nIG5kd29yZHMsIGR3Owor CXVuc2lnbmVkIGxvbmcgaWR4LCBuZHdvcmRzLCBkdzsKIAlzdHJ1Y3QgaWd0X2xpdmVfdGVzdCB0 OwogCXN0cnVjdCBkcm1fZmlsZSAqZmlsZTsKIAlJOTE1X1JORF9TVEFURShwcm5nKTsKQEAgLTEx MjksNiArMTI1OCw3IEBAIHN0YXRpYyBpbnQgaWd0X2N0eF9yZWFkb25seSh2b2lkICphcmcpCiAJ CW5kd29yZHMsIFJVTlRJTUVfSU5GTyhpOTE1KS0+bnVtX2VuZ2luZXMpOwogCiAJZHcgPSAwOwor CWlkeCA9IDA7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosICZvYmplY3RzLCBzdF9saW5rKSB7 CiAJCXVuc2lnbmVkIGludCByZW0gPQogCQkJbWluX3QodW5zaWduZWQgaW50LCBuZHdvcmRzIC0g ZHcsIG1heF9kd29yZHMob2JqKSk7CkBAIC0xMTM4LDcgKzEyNjgsNyBAQCBzdGF0aWMgaW50IGln dF9jdHhfcmVhZG9ubHkodm9pZCAqYXJnKQogCQlpZiAoaTkxNV9nZW1fb2JqZWN0X2lzX3JlYWRv bmx5KG9iaikpCiAJCQludW1fd3JpdGVzID0gMDsKIAotCQllcnIgPSBjcHVfY2hlY2sob2JqLCBu dW1fd3JpdGVzKTsKKwkJZXJyID0gY3B1X2NoZWNrKG9iaiwgaWR4KyssIG51bV93cml0ZXMpOwog CQlpZiAoZXJyKQogCQkJYnJlYWs7CiAKQEAgLTE3MjMsNiArMTg1Myw3IEBAIGludCBpOTE1X2dl bV9jb250ZXh0X2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKIAkJU1VCVEVTVChpZ3RfY3R4X2V4ZWMpLAogCQlTVUJURVNUKGlndF9jdHhfcmVhZG9ubHkp LAogCQlTVUJURVNUKGlndF9jdHhfc3NldSksCisJCVNVQlRFU1QoaWd0X3NoYXJlZF9jdHhfZXhl YyksCiAJCVNVQlRFU1QoaWd0X3ZtX2lzb2xhdGlvbiksCiAJfTsKIApkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2d0dC5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2d0dC5jCmluZGV4IDgyNmZkNTFjMzMxZS4uNTdi M2Q5ODY3MDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkx NV9nZW1fZ3R0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2Vt X2d0dC5jCkBAIC0xMDIwLDcgKzEwMjAsNiBAQCBzdGF0aWMgaW50IGV4ZXJjaXNlX3BwZ3R0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAogCWVyciA9IGZ1bmMoZGV2X3ByaXYs ICZwcGd0dC0+dm0sIDAsIHBwZ3R0LT52bS50b3RhbCwgZW5kX3RpbWUpOwogCi0JaTkxNV9wcGd0 dF9jbG9zZSgmcHBndHQtPnZtKTsKIAlpOTE1X3BwZ3R0X3B1dChwcGd0dCk7CiBvdXRfdW5sb2Nr OgogCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfY29udGV4dC5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfY29udGV4dC5jCmluZGV4IDM1M2IzN2I5Zjc4 ZS4uNWVkZGY5ZmNmZThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvbW9ja19jb250ZXh0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21v Y2tfY29udGV4dC5jCkBAIC01NSwxMyArNTUsMTcgQEAgbW9ja19jb250ZXh0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1LAogCQlnb3RvIGVycl9oYW5kbGVzOwogCiAJaWYgKG5hbWUpIHsK KwkJc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0OworCiAJCWN0eC0+bmFtZSA9IGtzdHJkdXAo bmFtZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghY3R4LT5uYW1lKQogCQkJZ290byBlcnJfcHV0Owog Ci0JCWN0eC0+cHBndHQgPSBtb2NrX3BwZ3R0KGk5MTUsIG5hbWUpOwotCQlpZiAoIWN0eC0+cHBn dHQpCisJCXBwZ3R0ID0gbW9ja19wcGd0dChpOTE1LCBuYW1lKTsKKwkJaWYgKCFwcGd0dCkKIAkJ CWdvdG8gZXJyX3B1dDsKKworCQlfX3NldF9wcGd0dChjdHgsIHBwZ3R0KTsKIAl9CiAKIAlyZXR1 cm4gY3R4OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oIGIvaW5jbHVk ZS91YXBpL2RybS9pOTE1X2RybS5oCmluZGV4IGY0ZmEwODI1NzIyYS4uOWZjZmI1NGExM2YyIDEw MDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKKysrIGIvaW5jbHVkZS91YXBp L2RybS9pOTE1X2RybS5oCkBAIC0zNDEsNiArMzQxLDggQEAgdHlwZWRlZiBzdHJ1Y3QgX2RybV9p OTE1X3NhcmVhIHsKICNkZWZpbmUgRFJNX0k5MTVfUEVSRl9BRERfQ09ORklHCTB4MzcKICNkZWZp bmUgRFJNX0k5MTVfUEVSRl9SRU1PVkVfQ09ORklHCTB4MzgKICNkZWZpbmUgRFJNX0k5MTVfUVVF UlkJCQkweDM5CisjZGVmaW5lIERSTV9JOTE1X0dFTV9WTV9DUkVBVEUJCTB4M2EKKyNkZWZpbmUg RFJNX0k5MTVfR0VNX1ZNX0RFU1RST1kJCTB4M2IKIC8qIE11c3QgYmUga2VwdCBjb21wYWN0IC0t IG5vIGhvbGVzICovCiAKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfSU5JVAkJRFJNX0lPVyggRFJN X0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0lOSVQsIGRybV9pOTE1X2luaXRfdCkKQEAgLTQwMCw2 ICs0MDIsOCBAQCB0eXBlZGVmIHN0cnVjdCBfZHJtX2k5MTVfc2FyZWEgewogI2RlZmluZSBEUk1f SU9DVExfSTkxNV9QRVJGX0FERF9DT05GSUcJRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJN X0k5MTVfUEVSRl9BRERfQ09ORklHLCBzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9vYV9jb25maWcpCiAj ZGVmaW5lIERSTV9JT0NUTF9JOTE1X1BFUkZfUkVNT1ZFX0NPTkZJRwlEUk1fSU9XKERSTV9DT01N QU5EX0JBU0UgKyBEUk1fSTkxNV9QRVJGX1JFTU9WRV9DT05GSUcsIF9fdTY0KQogI2RlZmluZSBE Uk1fSU9DVExfSTkxNV9RVUVSWQkJCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkx NV9RVUVSWSwgc3RydWN0IGRybV9pOTE1X3F1ZXJ5KQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9H RU1fVk1fQ1JFQVRFCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fVk1f Q1JFQVRFLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ZtX2NvbnRyb2wpCisjZGVmaW5lIERSTV9JT0NU TF9JOTE1X0dFTV9WTV9ERVNUUk9ZCURSTV9JT1cgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkx NV9HRU1fVk1fREVTVFJPWSwgc3RydWN0IGRybV9pOTE1X2dlbV92bV9jb250cm9sKQogCiAvKiBB bGxvdyBkcml2ZXJzIHRvIHN1Ym1pdCBiYXRjaGJ1ZmZlcnMgZGlyZWN0bHkgdG8gaGFyZHdhcmUs IHJlbHlpbmcKICAqIG9uIHRoZSBzZWN1cml0eSBtZWNoYW5pc21zIHByb3ZpZGVkIGJ5IGhhcmR3 YXJlLgpAQCAtMTQ0OSw2ICsxNDUzLDI2IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9k ZXN0cm95IHsKIAlfX3UzMiBwYWQ7CiB9OwogCisvKgorICogRFJNX0k5MTVfR0VNX1ZNX0NSRUFU RSAtCisgKgorICogQ3JlYXRlIGEgbmV3IHZpcnR1YWwgbWVtb3J5IGFkZHJlc3Mgc3BhY2UgKHBw R1RUKSBmb3IgdXNlIHdpdGhpbiBhIGNvbnRleHQKKyAqIG9uIHRoZSBzYW1lIGZpbGUuIEV4dGVu c2lvbnMgY2FuIGJlIHByb3ZpZGVkIHRvIGNvbmZpZ3VyZSBleGFjdGx5IGhvdyB0aGUKKyAqIGFk ZHJlc3Mgc3BhY2UgaXMgc2V0dXAgdXBvbiBjcmVhdGlvbi4KKyAqCisgKiBUaGUgaWQgb2YgbmV3 IFZNIChib3VuZCB0byB0aGUgZmQpIGZvciB1c2Ugd2l0aCBJOTE1X0NPTlRFWFRfUEFSQU1fVk0g aXMKKyAqIHJldHVybmVkLgorICoKKyAqIERSTV9JOTE1X0dFTV9WTV9ERVNUUk9ZIC0KKyAqCisg KiBEZXN0cm95cyBhIHByZXZpb3VzbHkgY3JlYXRlZCBWTSBpZC4KKyAqLworc3RydWN0IGRybV9p OTE1X2dlbV92bV9jb250cm9sIHsKKwlfX3U2NCBleHRlbnNpb25zOworCV9fdTMyIGZsYWdzOwor CV9fdTMyIGlkOworfTsKKwogc3RydWN0IGRybV9pOTE1X3JlZ19yZWFkIHsKIAkvKgogCSAqIFJl Z2lzdGVyIG9mZnNldC4KQEAgLTE1MzgsNyArMTU2MiwxOSBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2NvbnRleHRfcGFyYW0gewogICogT24gY3JlYXRpb24sIGFsbCBuZXcgY29udGV4dHMgYXJlIG1h cmtlZCBhcyByZWNvdmVyYWJsZS4KICAqLwogI2RlZmluZSBJOTE1X0NPTlRFWFRfUEFSQU1fUkVD T1ZFUkFCTEUJMHg4CisKKwkvKgorCSAqIFRoZSBpZCBvZiB0aGUgYXNzb2NpYXRlZCB2aXJ0dWFs IG1lbW9yeSBhZGRyZXNzIHNwYWNlIChwcEdUVCkgb2YKKwkgKiB0aGlzIGNvbnRleHQuIENhbiBi ZSByZXRyaWV2ZWQgYW5kIHBhc3NlZCB0byBhbm90aGVyIGNvbnRleHQKKwkgKiAob24gdGhlIHNh bWUgZmQpIGZvciBib3RoIHRvIHVzZSB0aGUgc2FtZSBwcEdUVCBhbmQgc28gc2hhcmUKKwkgKiBh ZGRyZXNzIGxheW91dHMsIGFuZCBhdm9pZCByZWxvYWRpbmcgdGhlIHBhZ2UgdGFibGVzIG9uIGNv bnRleHQKKwkgKiBzd2l0Y2hlcyBiZXR3ZWVuIHRoZW1zZWx2ZXMuCisJICoKKwkgKiBTZWUgRFJN X0k5MTVfR0VNX1ZNX0NSRUFURSBhbmQgRFJNX0k5MTVfR0VNX1ZNX0RFU1RST1kuCisJICovCisj ZGVmaW5lIEk5MTVfQ09OVEVYVF9QQVJBTV9WTQkJMHg5CiAvKiBNdXN0IGJlIGtlcHQgY29tcGFj dCAtLSBubyBob2xlcyBhbmQgd2VsbCBkb2N1bWVudGVkICovCisKIAlfX3U2NCB2YWx1ZTsKIH07 CiAKLS0gCjIuMjAuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4