From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 04/25] drm/i915/userptr: Avoid struct_mutex recursion for mmu_invalidate_range_start Date: Tue, 6 Nov 2018 12:41:53 +0000 Message-ID: References: <20181102161232.17742-1-chris@chris-wilson.co.uk> <20181102161232.17742-4-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 859386E235 for ; Tue, 6 Nov 2018 12:41:55 +0000 (UTC) In-Reply-To: <20181102161232.17742-4-chris@chris-wilson.co.uk> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDAyLzExLzIwMTggMTY6MTIsIENocmlzIFdpbHNvbiB3cm90ZToKPiBTaW5jZSBjb21taXQg OTMwNjVhYzc1M2U0ICgibW0sIG9vbTogZGlzdGluZ3Vpc2ggYmxvY2thYmxlIG1vZGUgZm9yIG1t dQo+IG5vdGlmaWVycyIpIHdlIGhhdmUgYmVlbiBhYmxlIHRvIHJlcG9ydCBmYWlsdXJlIGZyb20K PiBtbXVfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCB3aGljaCBhbGxvd3MgdXMgdG8gdXNlIGEgdHJ5 bG9jayBvbiB0aGUKPiBzdHJ1Y3RfbXV0ZXggdG8gYXZvaWQgcG90ZW50aWFsIHJlY3Vyc2lvbiBh bmQgcmVwb3J0IC1FQlVTWSBpbnN0ZWFkLgo+IEZ1cnRoZXJtb3JlLCB0aGlzIGFsbG93cyB1cyB0 byBwdWxsIHRoZSB3b3JrIGludG8gdGhlIG1haW4gY2FsbGJhY2sgYW5kCj4gYXZvaWQgdGhlIHNs ZWlnaHQtb2YtaGFuZCBpbiB1c2luZyBhIHdvcmtxdWV1ZSB0byBhdm9pZCBsb2NrZGVwLgo+IAo+ IEhvd2V2ZXIsIG5vdCBhbGwgcGF0aHMgdG8gbW11X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQgYXJl IHByZXBhcmVkIHRvCj4gaGFuZGxlIGZhaWx1cmUsIHNvIGluc3RlYWQgb2YgcmVwb3J0aW5nIHRo ZSByZWN1cnNpb24sIGRlYWwgd2l0aCBpdC4KClBsZWFzZSBhZGQgYSBwYXJhZ3JhcGggb24gaG93 IHRoZSBwYXRjaCBkZWFscyB3aXRoIGl0LgoKPiBCdWd6aWxsYTogaHR0cHM6Ly9idWdzLmZyZWVk ZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mzc1Cj4gUmVmZXJlbmNlczogOTMwNjVhYzc1 M2U0ICgibW0sIG9vbTogZGlzdGluZ3Vpc2ggYmxvY2thYmxlIG1vZGUgZm9yIG1tdSBub3RpZmll cnMiKQo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNv LnVrPgo+IC0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgIHwg ICA0ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgfCAgMTgg Ky0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdC5oICB8ICAgNyArCj4g ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMgfCAyMTcgKysrKysrKysr KystLS0tLS0tLS0tLS0tCj4gICA0IGZpbGVzIGNoYW5nZWQsIDEyMCBpbnNlcnRpb25zKCspLCAx MjYgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggMmE4OGE3 ZWI4NzFiLi4xMDU2YjEyYzNiYzggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAt MzA3Myw4ICszMDczLDggQEAgZW51bSBpOTE1X21tX3N1YmNsYXNzIHsgLyogbG9ja2RlcCBzdWJj bGFzcyBmb3Igb2JqLT5tbS5sb2NrICovCj4gICAJSTkxNV9NTV9TSFJJTktFUgo+ICAgfTsKPiAg IAo+IC12b2lkIF9faTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAo+IC0JCQkJIGVudW0gaTkxNV9tbV9zdWJjbGFzcyBzdWJjbGFzcyk7Cj4g K2ludCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKPiArCQkJCWVudW0gaTkxNV9tbV9zdWJjbGFzcyBzdWJjbGFzcyk7Cj4gICB2b2lk IF9faTkxNV9nZW1fb2JqZWN0X2ludmFsaWRhdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaik7Cj4gICAKPiAgIGVudW0gaTkxNV9tYXBfdHlwZSB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bS5jCj4gaW5kZXggOTNkMDkyODI3MTBkLi45YThhZjk0NTRhNTMgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtLmMKPiBAQCAtMjQyOSw4ICsyNDI5LDggQEAgX19pOTE1X2dlbV9vYmplY3RfdW5z ZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIAlzdHJ1Y3Qgc2df dGFibGUgKnBhZ2VzOwo+ICAgCj4gICAJcGFnZXMgPSBmZXRjaF9hbmRfemVybygmb2JqLT5tbS5w YWdlcyk7Cj4gLQlpZiAoIXBhZ2VzKQo+IC0JCXJldHVybiBOVUxMOwo+ICsJaWYgKElTX0VSUl9P Ul9OVUxMKHBhZ2VzKSkKPiArCQlyZXR1cm4gcGFnZXM7Cj4gICAKPiAgIAlzcGluX2xvY2soJmk5 MTUtPm1tLm9ial9sb2NrKTsKPiAgIAlsaXN0X2RlbCgmb2JqLT5tbS5saW5rKTsKPiBAQCAtMjQ1 NCwxNyArMjQ1NCwxNiBAQCBfX2k5MTVfZ2VtX29iamVjdF91bnNldF9wYWdlcyhzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgCXJldHVybiBwYWdlczsKPiAgIH0KPiAgIAo+IC12 b2lkIF9faTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqLAo+IC0JCQkJIGVudW0gaTkxNV9tbV9zdWJjbGFzcyBzdWJjbGFzcykKPiAraW50IF9f aTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq LAo+ICsJCQkJZW51bSBpOTE1X21tX3N1YmNsYXNzIHN1YmNsYXNzKQo+ICAgewo+ICAgCXN0cnVj dCBzZ190YWJsZSAqcGFnZXM7Cj4gKwlpbnQgcmV0ID0gLUVCVVNZOwo+ICAgCj4gICAJaWYgKGk5 MTVfZ2VtX29iamVjdF9oYXNfcGlubmVkX3BhZ2VzKG9iaikpCj4gLQkJcmV0dXJuOwo+ICsJCXJl dHVybiAtRUJVU1k7CgpDb3VsZCByZXR1cm4gcmV0IHNpbmNlIHlvdSBqdXN0IGxvYWRlZCBpdCB3 aXRoIC1FQlVTWSBidXQgbm90IHN1cmUgaWYgaXQgCm1ha2VzIGFueSBkaWZmZXJlbmNlLgoKPiAg IAo+ICAgCUdFTV9CVUdfT04ob2JqLT5iaW5kX2NvdW50KTsKPiAtCWlmICghaTkxNV9nZW1fb2Jq ZWN0X2hhc19wYWdlcyhvYmopKQo+IC0JCXJldHVybjsKPiAgIAo+ICAgCS8qIE1heSBiZSBjYWxs ZWQgYnkgc2hyaW5rZXIgZnJvbSB3aXRoaW4gZ2V0X3BhZ2VzKCkgKG9uIGFub3RoZXIgYm8pICov Cj4gICAJbXV0ZXhfbG9ja19uZXN0ZWQoJm9iai0+bW0ubG9jaywgc3ViY2xhc3MpOwo+IEBAIC0y NDc3LDExICsyNDc2LDE2IEBAIHZvaWQgX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gICAJICogbGlzdHMgZWFybHkuCj4gICAJICov Cj4gICAJcGFnZXMgPSBfX2k5MTVfZ2VtX29iamVjdF91bnNldF9wYWdlcyhvYmopOwo+ICsJaWYg KCFwYWdlcyAmJiAhaTkxNV9nZW1fb2JqZWN0X25lZWRzX2FzeW5jX2NhbmNlbChvYmopKQoKV291 bGQgYXN5bmNfcHV0X3BhZ2VzIGJlIGJldHRlcj8KCj4gKwkJcGFnZXMgPSBFUlJfUFRSKC1FSU5W QUwpOwo+ICAgCWlmICghSVNfRVJSKHBhZ2VzKSkKPiAgIAkJb2JqLT5vcHMtPnB1dF9wYWdlcyhv YmosIHBhZ2VzKTsKPiAgIAo+ICsJcmV0ID0gMDsKCkZ1bm5pbHkgZW5vdWdoLCBubyBjYWxsZXJz IHNlZW0gdG8gYmUgYm90aGVyZWQgd2l0aCB0aGUgcmV0dXJuIGNvZGUgZnJvbSAKdGhpcyBmdW5j dGlvbi4KCj4gICB1bmxvY2s6Cj4gICAJbXV0ZXhfdW5sb2NrKCZvYmotPm1tLmxvY2spOwo+ICsK PiArCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAgIGJvb2wgaTkxNV9zZ190cmltKHN0cnVjdCBz Z190YWJsZSAqb3JpZ19zdCkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fb2JqZWN0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9vYmplY3QuaAo+ IGluZGV4IGE2ZGQ3YzQ2ZGUwZC4uNDljZTc5NzE3M2I1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdC5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fb2JqZWN0LmgKPiBAQCAtNTYsNiArNTYsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdF9vcHMgewo+ICAgI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfSEFTX1NUUlVDVF9Q QUdFCUJJVCgwKQo+ICAgI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfSVNfU0hSSU5LQUJMRQlCSVQo MSkKPiAgICNkZWZpbmUgSTkxNV9HRU1fT0JKRUNUX0lTX1BST1hZCUJJVCgyKQo+ICsjZGVmaW5l IEk5MTVfR0VNX09CSkVDVF9BU1lOQ19DQU5DRUwJQklUKDMpCgpTb21ld2hlcmUgd2UgbmVlZCBh IGNvbW1lbnQgYmx1cmIgZXhwbGFpbmluZyB3aGF0IGFzeW5jX2NhbmNlbCBtZWFucy4KCj4gICAK PiAgIAkvKiBJbnRlcmZhY2UgYmV0d2VlbiB0aGUgR0VNIG9iamVjdCBhbmQgaXRzIGJhY2tpbmcg c3RvcmFnZS4KPiAgIAkgKiBnZXRfcGFnZXMoKSBpcyBjYWxsZWQgb25jZSBwcmlvciB0byB0aGUg dXNlIG9mIHRoZSBhc3NvY2lhdGVkIHNldAo+IEBAIC0zODYsNiArMzg3LDEyIEBAIGk5MTVfZ2Vt X29iamVjdF9pc19wcm94eShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ ICAgCXJldHVybiBvYmotPm9wcy0+ZmxhZ3MgJiBJOTE1X0dFTV9PQkpFQ1RfSVNfUFJPWFk7Cj4g ICB9Cj4gICAKPiArc3RhdGljIGlubGluZSBib29sCj4gK2k5MTVfZ2VtX29iamVjdF9uZWVkc19h c3luY19jYW5jZWwoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiArewo+ ICsJcmV0dXJuIG9iai0+b3BzLT5mbGFncyAmIEk5MTVfR0VNX09CSkVDVF9BU1lOQ19DQU5DRUw7 Cj4gK30KPiArCj4gICBzdGF0aWMgaW5saW5lIGJvb2wKPiAgIGk5MTVfZ2VtX29iamVjdF9pc19h Y3RpdmUoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIHsKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jCj4gaW5kZXggMmM5YjI4NDAzNmQxLi5h YjVhZTQyNmUyN2IgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f dXNlcnB0ci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5j Cj4gQEAgLTUwLDc5ICs1MCw4NCBAQCBzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgewo+ICAgCXN0 cnVjdCBobGlzdF9ub2RlIG5vZGU7Cj4gICAJc3RydWN0IG1tdV9ub3RpZmllciBtbjsKPiAgIAlz dHJ1Y3QgcmJfcm9vdF9jYWNoZWQgb2JqZWN0czsKPiAtCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0 ICp3cTsKPiArCXN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW07Cj4gICB9Owo+ICAgCj4gICBzdHJ1 Y3QgaTkxNV9tbXVfb2JqZWN0IHsKPiAgIAlzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1uOwo+ ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gICAJc3RydWN0IGludGVydmFs X3RyZWVfbm9kZSBpdDsKPiAtCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKPiAtCXN0cnVjdCB3b3Jr X3N0cnVjdCB3b3JrOwo+IC0JYm9vbCBhdHRhY2hlZDsKPiAgIH07Cj4gICAKPiAtc3RhdGljIHZv aWQgY2FuY2VsX3VzZXJwdHIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+IC17Cj4gLQlzdHJ1 Y3QgaTkxNV9tbXVfb2JqZWN0ICptbyA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKm1vKSwg d29yayk7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gbW8tPm9iajsKPiAt CXN0cnVjdCB3b3JrX3N0cnVjdCAqYWN0aXZlOwo+IC0KPiAtCS8qIENhbmNlbCBhbnkgYWN0aXZl IHdvcmtlciBhbmQgZm9yY2UgdXMgdG8gcmUtZXZhbHVhdGUgZ3VwICovCj4gLQltdXRleF9sb2Nr KCZvYmotPm1tLmxvY2spOwo+IC0JYWN0aXZlID0gZmV0Y2hfYW5kX3plcm8oJm9iai0+dXNlcnB0 ci53b3JrKTsKPiAtCW11dGV4X3VubG9jaygmb2JqLT5tbS5sb2NrKTsKPiAtCWlmIChhY3RpdmUp Cj4gLQkJZ290byBvdXQ7Cj4gLQo+IC0JaTkxNV9nZW1fb2JqZWN0X3dhaXQob2JqLCBJOTE1X1dB SVRfQUxMLCBNQVhfU0NIRURVTEVfVElNRU9VVCwgTlVMTCk7Cj4gLQo+IC0JbXV0ZXhfbG9jaygm b2JqLT5iYXNlLmRldi0+c3RydWN0X211dGV4KTsKPiAtCj4gLQkvKiBXZSBhcmUgaW5zaWRlIGEg a3RocmVhZCBjb250ZXh0IGFuZCBjYW4ndCBiZSBpbnRlcnJ1cHRlZCAqLwo+IC0JaWYgKGk5MTVf Z2VtX29iamVjdF91bmJpbmQob2JqKSA9PSAwKQo+IC0JCV9faTkxNV9nZW1fb2JqZWN0X3B1dF9w YWdlcyhvYmosIEk5MTVfTU1fTk9STUFMKTsKPiAtCVdBUk5fT05DRShpOTE1X2dlbV9vYmplY3Rf aGFzX3BhZ2VzKG9iaiksCj4gLQkJICAiRmFpbGVkIHRvIHJlbGVhc2UgcGFnZXM6IGJpbmRfY291 bnQ9JWQsIHBhZ2VzX3Bpbl9jb3VudD0lZCwgcGluX2dsb2JhbD0lZFxuIiwKPiAtCQkgIG9iai0+ YmluZF9jb3VudCwKPiAtCQkgIGF0b21pY19yZWFkKCZvYmotPm1tLnBhZ2VzX3Bpbl9jb3VudCks Cj4gLQkJICBvYmotPnBpbl9nbG9iYWwpOwo+IC0KPiAtCW11dGV4X3VubG9jaygmb2JqLT5iYXNl LmRldi0+c3RydWN0X211dGV4KTsKPiAtCj4gLW91dDoKPiAtCWk5MTVfZ2VtX29iamVjdF9wdXQo b2JqKTsKPiAtfQo+IC0KPiAgIHN0YXRpYyB2b2lkIGFkZF9vYmplY3Qoc3RydWN0IGk5MTVfbW11 X29iamVjdCAqbW8pCj4gICB7Cj4gLQlpZiAobW8tPmF0dGFjaGVkKQo+ICsJaWYgKCFSQl9FTVBU WV9OT0RFKCZtby0+aXQucmIpKQo+ICAgCQlyZXR1cm47Cj4gICAKPiAgIAlpbnRlcnZhbF90cmVl X2luc2VydCgmbW8tPml0LCAmbW8tPm1uLT5vYmplY3RzKTsKPiAtCW1vLT5hdHRhY2hlZCA9IHRy dWU7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIGRlbF9vYmplY3Qoc3RydWN0IGk5MTVfbW11 X29iamVjdCAqbW8pCj4gICB7Cj4gLQlpZiAoIW1vLT5hdHRhY2hlZCkKPiArCWlmIChSQl9FTVBU WV9OT0RFKCZtby0+aXQucmIpKQo+ICAgCQlyZXR1cm47Cj4gICAKPiAgIAlpbnRlcnZhbF90cmVl X3JlbW92ZSgmbW8tPml0LCAmbW8tPm1uLT5vYmplY3RzKTsKPiAtCW1vLT5hdHRhY2hlZCA9IGZh bHNlOwo+ICsJUkJfQ0xFQVJfTk9ERSgmbW8tPml0LnJiKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQKPiArX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiwgYm9vbCB2YWx1ZSkKPiArewo+ICsJc3RydWN0IGk5MTVfbW11X29iamVjdCAq bW8gPSBvYmotPnVzZXJwdHIubW11X29iamVjdDsKPiArCj4gKwkvKgo+ICsJICogRHVyaW5nIG1t X2ludmFsaWRhdGVfcmFuZ2Ugd2UgbmVlZCB0byBjYW5jZWwgYW55IHVzZXJwdHIgdGhhdAo+ICsJ ICogb3ZlcmxhcHMgdGhlIHJhbmdlIGJlaW5nIGludmFsaWRhdGVkLiBEb2luZyBzbyByZXF1aXJl cyB0aGUKPiArCSAqIHN0cnVjdF9tdXRleCwgYW5kIHRoYXQgcmlza3MgcmVjdXJzaW9uLiBJbiBv cmRlciB0byBjYXVzZQo+ICsJICogcmVjdXJzaW9uLCB0aGUgdXNlciBtdXN0IGFsaWFzIHRoZSB1 c2VycHRyIGFkZHJlc3Mgc3BhY2Ugd2l0aAo+ICsJICogYSBHVFQgbW1hcHBpbmcgKHBvc3NpYmxl IHdpdGggYSBNQVBfRklYRUQpIC0gdGhlbiB3aGVuIHdlIGhhdmUKPiArCSAqIHRvIGludmFsaWRh dGUgdGhhdCBtbWFwaW5nLCBtbV9pbnZhbGlkYXRlX3JhbmdlIGlzIGNhbGxlZCB3aXRoCj4gKwkg KiB0aGUgdXNlcnB0ciBhZGRyZXNzICphbmQqIHRoZSBzdHJ1Y3RfbXV0ZXggaGVsZC4gIFRvIHBy ZXZlbnQgdGhhdAo+ICsJICogd2Ugc2V0IGEgZmxhZyB1bmRlciB0aGUgaTkxNV9tbXVfbm90aWZp ZXIgc3BpbmxvY2sgdG8gaW5kaWNhdGUKPiArCSAqIHdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdmFs aWQuCj4gKwkgKi8KPiArCWlmICghbW8pCj4gKwkJcmV0dXJuOwo+ICsKPiArCXNwaW5fbG9jaygm bW8tPm1uLT5sb2NrKTsKPiArCWlmICh2YWx1ZSkKPiArCQlhZGRfb2JqZWN0KG1vKTsKPiArCWVs c2UKPiArCQlkZWxfb2JqZWN0KG1vKTsKPiArCXNwaW5fdW5sb2NrKCZtby0+bW4tPmxvY2spOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IG11dGV4ICpfX2k5MTVfbXV0ZXhfbG9ja19yZWN1cnNp dmUoc3RydWN0IG11dGV4ICptKQo+ICt7Cj4gKwlzd2l0Y2ggKG11dGV4X3RyeWxvY2tfcmVjdXJz aXZlKG0pKSB7Cj4gKwlkZWZhdWx0Ogo+ICsJY2FzZSBNVVRFWF9UUllMT0NLX0ZBSUxFRDoKPiAr CQltdXRleF9sb2NrKG0pOwo+ICsJY2FzZSBNVVRFWF9UUllMT0NLX1NVQ0NFU1M6Cj4gKwkJcmV0 dXJuIG07Cj4gKwo+ICsJY2FzZSBNVVRFWF9UUllMT0NLX1JFQ1VSU0lWRToKPiArCQlyZXR1cm4g RVJSX1BUUigtRUVYSVNUKTsgPiArCX0KPiAgIH0KPiAgIAo+ICAgc3RhdGljIGludCBpOTE1X2dl bV91c2VycHRyX21uX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3RpZmllciAq X21uLAo+IC0JCQkJCQkgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sCj4gLQkJCQkJCSAgICAg ICB1bnNpZ25lZCBsb25nIHN0YXJ0LAo+IC0JCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbmQs Cj4gLQkJCQkJCSAgICAgICBib29sIGJsb2NrYWJsZSkKPiArCQkJCQkJICAgICAgc3RydWN0IG1t X3N0cnVjdCAqbW0sCj4gKwkJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCj4gKwkJCQkJ CSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLAo+ICsJCQkJCQkgICAgICBib29sIGJsb2NrYWJsZSkK PiAgIHsKPiAgIAlzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1uID0KPiAgIAkJY29udGFpbmVy X29mKF9tbiwgc3RydWN0IGk5MTVfbW11X25vdGlmaWVyLCBtbik7Cj4gLQlzdHJ1Y3QgaTkxNV9t bXVfb2JqZWN0ICptbzsKPiAgIAlzdHJ1Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlICppdDsKPiAtCUxJ U1RfSEVBRChjYW5jZWxsZWQpOwo+ICsJc3RydWN0IG11dGV4ICp1bmxvY2sgPSBOVUxMOwo+ICsJ aW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAoUkJfRU1QVFlfUk9PVCgmbW4tPm9iamVjdHMucmJf cm9vdCkpCj4gICAJCXJldHVybiAwOwo+IEBAIC0xMzMsMTEgKzEzOCwxNSBAQCBzdGF0aWMgaW50 IGk5MTVfZ2VtX3VzZXJwdHJfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25v dGlmaWVyICpfbW4sCj4gICAJc3Bpbl9sb2NrKCZtbi0+bG9jayk7Cj4gICAJaXQgPSBpbnRlcnZh bF90cmVlX2l0ZXJfZmlyc3QoJm1uLT5vYmplY3RzLCBzdGFydCwgZW5kKTsKPiAgIAl3aGlsZSAo aXQpIHsKPiArCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ICsKPiAgIAkJaWYg KCFibG9ja2FibGUpIHsKPiAtCQkJc3Bpbl91bmxvY2soJm1uLT5sb2NrKTsKPiAtCQkJcmV0dXJu IC1FQUdBSU47Cj4gKwkJCXJldCA9IC1FQUdBSU47Cj4gKwkJCWJyZWFrOwo+ICAgCQl9Cj4gLQkJ LyogVGhlIG1tdV9vYmplY3QgaXMgcmVsZWFzZWQgbGF0ZSB3aGVuIGRlc3Ryb3lpbmcgdGhlCj4g Kwo+ICsJCS8qCj4gKwkJICogVGhlIG1tdV9vYmplY3QgaXMgcmVsZWFzZWQgbGF0ZSB3aGVuIGRl c3Ryb3lpbmcgdGhlCj4gICAJCSAqIEdFTSBvYmplY3Qgc28gaXQgaXMgZW50aXJlbHkgcG9zc2li bGUgdG8gZ2FpbiBhCj4gICAJCSAqIHJlZmVyZW5jZSBvbiBhbiBvYmplY3QgaW4gdGhlIHByb2Nl c3Mgb2YgYmVpbmcgZnJlZWQKPiAgIAkJICogc2luY2Ugb3VyIHNlcmlhbGlzYXRpb24gaXMgdmlh IHRoZSBzcGlubG9jayBhbmQgbm90Cj4gQEAgLTE0NiwyMSArMTU1LDMzIEBAIHN0YXRpYyBpbnQg aTkxNV9nZW1fdXNlcnB0cl9tbl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90 aWZpZXIgKl9tbiwKPiAgIAkJICogdXNlLWFmdGVyLWZyZWUgd2Ugb25seSBhY3F1aXJlIGEgcmVm ZXJlbmNlIG9uIHRoZQo+ICAgCQkgKiBvYmplY3QgaWYgaXQgaXMgbm90IGluIHRoZSBwcm9jZXNz IG9mIGJlaW5nIGRlc3Ryb3llZC4KPiAgIAkJICovCj4gLQkJbW8gPSBjb250YWluZXJfb2YoaXQs IHN0cnVjdCBpOTE1X21tdV9vYmplY3QsIGl0KTsKPiAtCQlpZiAoa3JlZl9nZXRfdW5sZXNzX3pl cm8oJm1vLT5vYmotPmJhc2UucmVmY291bnQpKQo+IC0JCQlxdWV1ZV93b3JrKG1uLT53cSwgJm1v LT53b3JrKTsKPiAtCj4gLQkJbGlzdF9hZGQoJm1vLT5saW5rLCAmY2FuY2VsbGVkKTsKPiAtCQlp dCA9IGludGVydmFsX3RyZWVfaXRlcl9uZXh0KGl0LCBzdGFydCwgZW5kKTsKPiArCQlvYmogPSBj b250YWluZXJfb2YoaXQsIHN0cnVjdCBpOTE1X21tdV9vYmplY3QsIGl0KS0+b2JqOwo+ICsJCWlm ICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJm9iai0+YmFzZS5yZWZjb3VudCkpIHsKPiArCQkJaXQg PSBpbnRlcnZhbF90cmVlX2l0ZXJfbmV4dChpdCwgc3RhcnQsIGVuZCk7Cj4gKwkJCWNvbnRpbnVl Owo+ICsJCX0KPiArCQlzcGluX3VubG9jaygmbW4tPmxvY2spOyA+ICsKPiArCQlpZiAoIXVubG9j aykKPiArCQkJdW5sb2NrID0gX19pOTE1X211dGV4X2xvY2tfcmVjdXJzaXZlKCZtbi0+bW0tPmk5 MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJCXJldCA9IGk5MTVfZ2VtX29iamVjdF91bmJpbmQo b2JqKTsKPiArCQlpZiAocmV0ID09IDApCj4gKwkJCXJldCA9IF9faTkxNV9nZW1fb2JqZWN0X3B1 dF9wYWdlcyhvYmosIEk5MTVfTU1fU0hSSU5LRVIpOwoKV2hlbiBndXBfd29ya2VyIGhhcyBiZWVu IHNjaGVkdWxlZCBidXQgbm90IGV4ZWN1dGVkLCB3ZSdsbCBoYXZlIG9iamVjdCAKaW4gdGhlIGlu dGVydmFsIHRyZWUgd2l0aCBwYWdlcyA9PSAtRUlOVkFMLiBfX2k5MTVfZ2VtX29iamVjdF9wdXRf cGFnZXMgCndpbGwgdGhlcmVmb3JlIHNraXAgdGhlIGNhbGwgdXNlcl9wdHItPnB1dF9wYWdlcyB3 aGljaCB3b3VsZCBjYW5jZWwgdGhlIAp3b3JrZXIuIFNvIGNhbmNlbGluZyB0aGUgd29ya2VyIHNl ZW1zIHdpbGwgYmUgbWlzc2VkIHVuZGVyIHRoZXNlIApjaXJjdW1zdGFuY2VzLgoKSSB0aGluayBh dCBsZWFzdCwgaWYgSSBoYXZlbid0IGxvc3QgbXlzZWxmIGluIHRoZSBmbG93cyBoZXJlLi4KCkkg YW0gYWxzbyB3b3JyaWVkIGFib3V0IHRoZSBsb2NrIGRyb3BwaW5nIGEgZmV3IGxpbmVzIGFib3Zl LiBJdCdzIApkZWZpbml0ZWx5IGNvcnJlY3QgdG8gcmVzdGFydCBldmVyeSB0aW1lLCBidXQgY2Fu IHdlIGdldCBpbiBhIHNpdHVhdGlvbiAKd2hlcmUgd2UgbmV2ZXIgZXhpdCB0aGUgbG9vcD8gTWF5 YmUgbm90IGV2ZW4gYmVjYXVzZSBuZXcgb2JqZWN0cyBhcmUgCmNvbWluZyBhbG9uZywgYnV0IGJl Y2F1c2UgZm9yIHNvbWUgcmVhc29uIHdlIHdvdWxkbid0IGJlIGRlbGV0aW5nIGFsbCAKb2JqZWN0 cy4gQmVjYXVzZSBBRkFJQ1Qgd2UgY2FuIG9ubHkgZXhpdCB0aGUgbG9vcCB3aGVuIGFsbCBpbnRl cnZhbHMgCmhhdmUgYmVlbiBkZWxldGVkIG9yIGFuIGVycm9yIGhhcHBlbmVkIG9uIHNvbWUgb2Jq ZWN0LiBNYXliZSAKa3JlZl9nZXRfdW5sZXNzX3plcm8gZmFpbGluZz8gVGhhdCBjb3VsZCBiZSBS Q1UgcGVyaW9kIChsb25nKSBhbmQgdGhpcyAKbG9vcCB3b3VsZCBlc3NlbnRpYWxseSBidXN5IGxv b3AgZm9yIHRoYXQgdGltZS4KClJlZ2FyZHMsCgpUdnJ0a28KCj4gKwkJaTkxNV9nZW1fb2JqZWN0 X3B1dChvYmopOwo+ICsJCWlmIChyZXQpCj4gKwkJCWdvdG8gdW5sb2NrOwo+ICsKPiArCQlzcGlu X2xvY2soJm1uLT5sb2NrKTsKPiArCQlpdCA9IGludGVydmFsX3RyZWVfaXRlcl9maXJzdCgmbW4t Pm9iamVjdHMsIHN0YXJ0LCBlbmQpOwo+ICAgCX0KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkobW8s ICZjYW5jZWxsZWQsIGxpbmspCj4gLQkJZGVsX29iamVjdChtbyk7Cj4gICAJc3Bpbl91bmxvY2so Jm1uLT5sb2NrKTsKPiAgIAo+IC0JaWYgKCFsaXN0X2VtcHR5KCZjYW5jZWxsZWQpKQo+IC0JCWZs dXNoX3dvcmtxdWV1ZShtbi0+d3EpOwo+ICt1bmxvY2s6Cj4gKwlpZiAoIUlTX0VSUl9PUl9OVUxM KHVubG9jaykpCj4gKwkJbXV0ZXhfdW5sb2NrKHVubG9jayk7Cj4gKwo+ICsJcmV0dXJuIHJldDsK PiAgIAo+IC0JcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW11 X25vdGlmaWVyX29wcyBpOTE1X2dlbV91c2VycHRyX25vdGlmaWVyID0gewo+IEBAIC0xNjgsNyAr MTg5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfb3BzIGk5MTVfZ2VtX3Vz ZXJwdHJfbm90aWZpZXIgPSB7Cj4gICB9Owo+ICAgCj4gICBzdGF0aWMgc3RydWN0IGk5MTVfbW11 X25vdGlmaWVyICoKPiAtaTkxNV9tbXVfbm90aWZpZXJfY3JlYXRlKHN0cnVjdCBtbV9zdHJ1Y3Qg Km1tKQo+ICtpOTE1X21tdV9ub3RpZmllcl9jcmVhdGUoc3RydWN0IGk5MTVfbW1fc3RydWN0ICpt bSkKPiAgIHsKPiAgIAlzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1uOwo+ICAgCj4gQEAgLTE3 OSwxMyArMjAwLDcgQEAgaTkxNV9tbXVfbm90aWZpZXJfY3JlYXRlKHN0cnVjdCBtbV9zdHJ1Y3Qg Km1tKQo+ICAgCXNwaW5fbG9ja19pbml0KCZtbi0+bG9jayk7Cj4gICAJbW4tPm1uLm9wcyA9ICZp OTE1X2dlbV91c2VycHRyX25vdGlmaWVyOwo+ICAgCW1uLT5vYmplY3RzID0gUkJfUk9PVF9DQUNI RUQ7Cj4gLQltbi0+d3EgPSBhbGxvY193b3JrcXVldWUoImk5MTUtdXNlcnB0ci1yZWxlYXNlIiwK PiAtCQkJCSBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU0sCj4gLQkJCQkgMCk7Cj4gLQlpZiAo bW4tPndxID09IE5VTEwpIHsKPiAtCQlrZnJlZShtbik7Cj4gLQkJcmV0dXJuIEVSUl9QVFIoLUVO T01FTSk7Cj4gLQl9Cj4gKwltbi0+bW0gPSBtbTsKPiAgIAo+ICAgCXJldHVybiBtbjsKPiAgIH0K PiBAQCAtMTk1LDE2ICsyMTAsMTQgQEAgaTkxNV9nZW1fdXNlcnB0cl9yZWxlYXNlX19tbXVfbm90 aWZpZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIHsKPiAgIAlzdHJ1Y3Qg aTkxNV9tbXVfb2JqZWN0ICptbzsKPiAgIAo+IC0JbW8gPSBvYmotPnVzZXJwdHIubW11X29iamVj dDsKPiAtCWlmIChtbyA9PSBOVUxMKQo+ICsJbW8gPSBmZXRjaF9hbmRfemVybygmb2JqLT51c2Vy cHRyLm1tdV9vYmplY3QpOwo+ICsJaWYgKCFtbykKPiAgIAkJcmV0dXJuOwo+ICAgCj4gICAJc3Bp bl9sb2NrKCZtby0+bW4tPmxvY2spOwo+ICAgCWRlbF9vYmplY3QobW8pOwo+ICAgCXNwaW5fdW5s b2NrKCZtby0+bW4tPmxvY2spOwo+ICAgCWtmcmVlKG1vKTsKPiAtCj4gLQlvYmotPnVzZXJwdHIu bW11X29iamVjdCA9IE5VTEw7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBzdHJ1Y3QgaTkxNV9tbXVf bm90aWZpZXIgKgo+IEBAIC0yMTcsNyArMjMwLDcgQEAgaTkxNV9tbXVfbm90aWZpZXJfZmluZChz dHJ1Y3QgaTkxNV9tbV9zdHJ1Y3QgKm1tKQo+ICAgCWlmIChtbikKPiAgIAkJcmV0dXJuIG1uOwo+ ICAgCj4gLQltbiA9IGk5MTVfbW11X25vdGlmaWVyX2NyZWF0ZShtbS0+bW0pOwo+ICsJbW4gPSBp OTE1X21tdV9ub3RpZmllcl9jcmVhdGUobW0pOwo+ICAgCWlmIChJU19FUlIobW4pKQo+ICAgCQll cnIgPSBQVFJfRVJSKG1uKTsKPiAgIAo+IEBAIC0yNDAsMTAgKzI1Myw4IEBAIGk5MTVfbW11X25v dGlmaWVyX2ZpbmQoc3RydWN0IGk5MTVfbW1fc3RydWN0ICptbSkKPiAgIAltdXRleF91bmxvY2so Jm1tLT5pOTE1LT5tbV9sb2NrKTsKPiAgIAl1cF93cml0ZSgmbW0tPm1tLT5tbWFwX3NlbSk7Cj4g ICAKPiAtCWlmIChtbiAmJiAhSVNfRVJSKG1uKSkgewo+IC0JCWRlc3Ryb3lfd29ya3F1ZXVlKG1u LT53cSk7Cj4gKwlpZiAobW4gJiYgIUlTX0VSUihtbikpCj4gICAJCWtmcmVlKG1uKTsKPiAtCX0K PiAgIAo+ICAgCXJldHVybiBlcnIgPyBFUlJfUFRSKGVycikgOiBtbS0+bW47Cj4gICB9Cj4gQEAg LTI2NiwxNCArMjc3LDE0IEBAIGk5MTVfZ2VtX3VzZXJwdHJfaW5pdF9fbW11X25vdGlmaWVyKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gICAJCXJldHVybiBQVFJfRVJSKG1uKTsK PiAgIAo+ICAgCW1vID0ga3phbGxvYyhzaXplb2YoKm1vKSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAo bW8gPT0gTlVMTCkKPiArCWlmICghbW8pCj4gICAJCXJldHVybiAtRU5PTUVNOwo+ICAgCj4gICAJ bW8tPm1uID0gbW47Cj4gICAJbW8tPm9iaiA9IG9iajsKPiAgIAltby0+aXQuc3RhcnQgPSBvYmot PnVzZXJwdHIucHRyOwo+ICAgCW1vLT5pdC5sYXN0ID0gb2JqLT51c2VycHRyLnB0ciArIG9iai0+ YmFzZS5zaXplIC0gMTsKPiAtCUlOSVRfV09SSygmbW8tPndvcmssIGNhbmNlbF91c2VycHRyKTsK PiArCVJCX0NMRUFSX05PREUoJm1vLT5pdC5yYik7Cj4gICAKPiAgIAlvYmotPnVzZXJwdHIubW11 X29iamVjdCA9IG1vOwo+ICAgCXJldHVybiAwOwo+IEBAIC0yODcsMTIgKzI5OCwxNiBAQCBpOTE1 X21tdV9ub3RpZmllcl9mcmVlKHN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW4sCj4gICAJCXJl dHVybjsKPiAgIAo+ICAgCW1tdV9ub3RpZmllcl91bnJlZ2lzdGVyKCZtbi0+bW4sIG1tKTsKPiAt CWRlc3Ryb3lfd29ya3F1ZXVlKG1uLT53cSk7Cj4gICAJa2ZyZWUobW4pOwo+ICAgfQo+ICAgCj4g ICAjZWxzZQo+ICAgCj4gK3N0YXRpYyB2b2lkCj4gK19faTkxNV9nZW1fdXNlcnB0cl9zZXRfYWN0 aXZlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIGJvb2wgdmFsdWUpCj4gK3sKPiAr fQo+ICsKPiAgIHN0YXRpYyB2b2lkCj4gICBpOTE1X2dlbV91c2VycHRyX3JlbGVhc2VfX21tdV9u b3RpZmllcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgewo+IEBAIC00NjEs NDIgKzQ3Niw2IEBAIF9faTkxNV9nZW1fdXNlcnB0cl9hbGxvY19wYWdlcyhzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCXJldHVybiBzdDsKPiAgIH0KPiAgIAo+IC1zdGF0aWMg aW50Cj4gLV9faTkxNV9nZW1fdXNlcnB0cl9zZXRfYWN0aXZlKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmosCj4gLQkJCSAgICAgIGJvb2wgdmFsdWUpCj4gLXsKPiAtCWludCByZXQgPSAw Owo+IC0KPiAtCS8qIER1cmluZyBtbV9pbnZhbGlkYXRlX3JhbmdlIHdlIG5lZWQgdG8gY2FuY2Vs IGFueSB1c2VycHRyIHRoYXQKPiAtCSAqIG92ZXJsYXBzIHRoZSByYW5nZSBiZWluZyBpbnZhbGlk YXRlZC4gRG9pbmcgc28gcmVxdWlyZXMgdGhlCj4gLQkgKiBzdHJ1Y3RfbXV0ZXgsIGFuZCB0aGF0 IHJpc2tzIHJlY3Vyc2lvbi4gSW4gb3JkZXIgdG8gY2F1c2UKPiAtCSAqIHJlY3Vyc2lvbiwgdGhl IHVzZXIgbXVzdCBhbGlhcyB0aGUgdXNlcnB0ciBhZGRyZXNzIHNwYWNlIHdpdGgKPiAtCSAqIGEg R1RUIG1tYXBwaW5nIChwb3NzaWJsZSB3aXRoIGEgTUFQX0ZJWEVEKSAtIHRoZW4gd2hlbiB3ZSBo YXZlCj4gLQkgKiB0byBpbnZhbGlkYXRlIHRoYXQgbW1hcGluZywgbW1faW52YWxpZGF0ZV9yYW5n ZSBpcyBjYWxsZWQgd2l0aAo+IC0JICogdGhlIHVzZXJwdHIgYWRkcmVzcyAqYW5kKiB0aGUgc3Ry dWN0X211dGV4IGhlbGQuICBUbyBwcmV2ZW50IHRoYXQKPiAtCSAqIHdlIHNldCBhIGZsYWcgdW5k ZXIgdGhlIGk5MTVfbW11X25vdGlmaWVyIHNwaW5sb2NrIHRvIGluZGljYXRlCj4gLQkgKiB3aGV0 aGVyIHRoaXMgb2JqZWN0IGlzIHZhbGlkLgo+IC0JICovCj4gLSNpZiBkZWZpbmVkKENPTkZJR19N TVVfTk9USUZJRVIpCj4gLQlpZiAob2JqLT51c2VycHRyLm1tdV9vYmplY3QgPT0gTlVMTCkKPiAt CQlyZXR1cm4gMDsKPiAtCj4gLQlzcGluX2xvY2soJm9iai0+dXNlcnB0ci5tbXVfb2JqZWN0LT5t bi0+bG9jayk7Cj4gLQkvKiBJbiBvcmRlciB0byBzZXJpYWxpc2UgZ2V0X3BhZ2VzIHdpdGggYW4g b3V0c3RhbmRpbmcKPiAtCSAqIGNhbmNlbF91c2VycHRyLCB3ZSBtdXN0IGRyb3AgdGhlIHN0cnVj dF9tdXRleCBhbmQgdHJ5IGFnYWluLgo+IC0JICovCj4gLQlpZiAoIXZhbHVlKQo+IC0JCWRlbF9v YmplY3Qob2JqLT51c2VycHRyLm1tdV9vYmplY3QpOwo+IC0JZWxzZSBpZiAoIXdvcmtfcGVuZGlu Zygmb2JqLT51c2VycHRyLm1tdV9vYmplY3QtPndvcmspKQo+IC0JCWFkZF9vYmplY3Qob2JqLT51 c2VycHRyLm1tdV9vYmplY3QpOwo+IC0JZWxzZQo+IC0JCXJldCA9IC1FQUdBSU47Cj4gLQlzcGlu X3VubG9jaygmb2JqLT51c2VycHRyLm1tdV9vYmplY3QtPm1uLT5sb2NrKTsKPiAtI2VuZGlmCj4g LQo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAgIHN0YXRpYyB2b2lkCj4gICBfX2k5MTVfZ2Vt X3VzZXJwdHJfZ2V0X3BhZ2VzX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKl93b3JrKQo+ICAg ewo+IEBAIC02ODIsOCArNjYxLDExIEBAIGk5MTVfZ2VtX3VzZXJwdHJfcHV0X3BhZ2VzKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gICAJc3RydWN0IHNndF9pdGVyIHNndF9pdGVy Owo+ICAgCXN0cnVjdCBwYWdlICpwYWdlOwo+ICAgCj4gLQlCVUdfT04ob2JqLT51c2VycHRyLndv cmsgIT0gTlVMTCk7Cj4gKwkvKiBDYW5jZWwgYW55IGluZmxpZ2h0IHdvcmsgYW5kIGZvcmNlIHRo ZW0gdG8gcmVzdGFydCB0aGVpciBndXAgKi8KPiArCW9iai0+dXNlcnB0ci53b3JrID0gTlVMTDsK PiAgIAlfX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShvYmosIGZhbHNlKTsKPiArCWlmICgh cGFnZXMpCj4gKwkJcmV0dXJuOwo+ICAgCj4gICAJaWYgKG9iai0+bW0ubWFkdiAhPSBJOTE1X01B RFZfV0lMTE5FRUQpCj4gICAJCW9iai0+bW0uZGlydHkgPSBmYWxzZTsKPiBAQCAtNzIxLDcgKzcw Myw4IEBAIGk5MTVfZ2VtX3VzZXJwdHJfZG1hYnVmX2V4cG9ydChzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqKQo+ICAgCj4gICBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3Rfb3BzIGk5MTVfZ2VtX3VzZXJwdHJfb3BzID0gewo+ICAgCS5mbGFncyA9IEk5MTVfR0VN X09CSkVDVF9IQVNfU1RSVUNUX1BBR0UgfAo+IC0JCSBJOTE1X0dFTV9PQkpFQ1RfSVNfU0hSSU5L QUJMRSwKPiArCQkgSTkxNV9HRU1fT0JKRUNUX0lTX1NIUklOS0FCTEUgfAo+ICsJCSBJOTE1X0dF TV9PQkpFQ1RfQVNZTkNfQ0FOQ0VMLAo+ICAgCS5nZXRfcGFnZXMgPSBpOTE1X2dlbV91c2VycHRy X2dldF9wYWdlcywKPiAgIAkucHV0X3BhZ2VzID0gaTkxNV9nZW1fdXNlcnB0cl9wdXRfcGFnZXMs Cj4gICAJLmRtYWJ1Zl9leHBvcnQgPSBpOTE1X2dlbV91c2VycHRyX2RtYWJ1Zl9leHBvcnQsCj4g Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdm eCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=