From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: Re: [PATCH 2/8] drm/i915: Cache kmap between relocations Date: Thu, 09 Jun 2016 15:25:47 +0300 Message-ID: <1465475147.9670.7.camel@linux.intel.com> References: <1465471779-20765-1-git-send-email-chris@chris-wilson.co.uk> <1465471779-20765-3-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 7EC256E5C2 for ; Thu, 9 Jun 2016 12:25:50 +0000 (UTC) In-Reply-To: <1465471779-20765-3-git-send-email-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: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gdG8sIDIwMTYtMDYtMDkgYXQgMTI6MjkgKzAxMDAsIENocmlzIFdpbHNvbiB3cm90ZToKPiBX aGVuIGRvaW5nIHJlbG9jYXRpb25zLCB3ZSBoYXZlIHRvIG9idGFpbiBhIG1hcHBpbmcgdG8gdGhl IHBhZ2UKPiBjb250YWluaW5nIHRoZSB0YXJnZXQgYWRkcmVzcy4gVGhpcyBpcyBlaXRoZXIgYSBr bWFwIG9yIGlvbWFwIGRlcGVuZGluZwo+IG9uIEdQVSBhbmQgaXRzIGNhY2hlIGNvaGVyZW5jeS4g TmVpZ2hib3VyaW5nIHJlbG9jYXRpb24gZW50cmllcyBhcmUKPiB0eXBpY2FsbHkgd2l0aGluIHRo ZSBzYW1lIHBhZ2UgYW5kIHNvIHdlIGNhbiBjYWNoZSBvdXIga21hcHBpbmcgYmV0d2Vlbgo+IHRo ZW0gYW5kIGF2b2lkIHRob3NlIHBlc2t5IFRMQiBmbHVzaGVzLgo+IAo+IE5vdGUgdGhhdCB0aGVy ZSBpcyBzb21lIHNsZWlnaHQtb2YtaGFuZCBpbiBob3cgdGhlIHNsb3cgcmVsb2NhdGUgd29ya3MK PiBhcyB0aGUgcmVsb2NfZW50cnlfY2FjaGUgaW1wbGllcyBwYWdlZmF1bHRzIGRpc2FibGVkIChh cyB3ZSBhcmUgaW5zaWRlIGEKPiBrbWFwX2F0b21pYyBzZWN0aW9uKS4gSG93ZXZlciwgdGhlIHNs b3cgcmVsb2NhdGUgY29kZSBpcyBtZWFudCB0byBiZSB0aGUKPiBmYWxsYmFjayBmcm9tIHRoZSBh dG9taWMgZmFzdCBwYXRoIGZhaWxpbmcuIEZvcnR1bmF0ZWx5IGl0IHdvcmtzIGFzIHdlCj4gYWxy ZWFkeSBoYXZlIHBlcmZvcm1lZCB0aGUgY29weV9mcm9tX3VzZXIgZm9yIHRoZSByZWxvY2F0aW9u IGFycmF5IChubwo+IG1vcmUgcGFnZWZhdWx0cyB0aGVyZSkgYW5kIHRoZSBrbWFwX2F0b21pYyBj YWNoZSBpcyBlbmFibGVkIGFmdGVyIHdlCj4gaGF2ZSB3YWl0ZWQgdXBvbiBhbiBhY3RpdmUgYnVm ZmVyIChzbyBubyBtb3JlIHNsZWVwaW5nIGluIGF0b21pYykuCj4gTWFnaWMhCj4gCgpZb3UgY291 bGQgYWxzbyBtZW50aW9uIHRoYXQgeW91IG1hbmdsZSB0aGUgcmVsb2NhdGlvbiA8LT4gcGFnZSBs b2dpYywKc28gdGhpcyBpcyBub3QgcHVyZWx5IGFib3V0IGNhY2hpbmcuIE9yIG1heWJlIGV2ZW4g c3BsaXQgaXQuCgpCZWxvdyBjb21tZW50cywgdGhvc2UgYWRkcmVzc2VkOwoKUmV2aWV3ZWQtYnk6 IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbT4KCj4gU2ln bmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gLS0t Cj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMgfCAxNjAgKysr KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KPiDCoDEgZmlsZSBjaGFuZ2VkLCAxMDYgaW5zZXJ0 aW9ucygrKSwgNTQgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2V4ZWNidWZmZXIuYwo+IGluZGV4IGEyOWM0YjZmZWEyOC4uMzE4YzcxYjY2M2Y0IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+IEBAIC0zMDIs OSArMzAyLDUwIEBAIHJlbG9jYXRpb25fdGFyZ2V0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2Nh dGlvbl9lbnRyeSAqcmVsb2MsCj4gwqAJcmV0dXJuIGdlbjhfY2Fub25pY2FsX2FkZHIoKGludCly ZWxvYy0+ZGVsdGEgKyB0YXJnZXRfb2Zmc2V0KTsKPiDCoH0KPiDCoAo+ICtzdHJ1Y3QgcmVsb2Nf Y2FjaGUgewo+ICsJdm9pZCAqdmFkZHI7Cj4gKwl1bnNpZ25lZCBwYWdlOwo+ICsJZW51bSB7IEtN QVAsIElPTUFQIH0gdHlwZTsKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIHJlbG9jX2NhY2hlX2lu aXQoc3RydWN0IHJlbG9jX2NhY2hlICpjYWNoZSkKPiArewo+ICsJY2FjaGUtPnBhZ2UgPSAtMTsK PiArCWNhY2hlLT52YWRkciA9IE5VTEw7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHJlbG9jX2Nh Y2hlX2Zpbmkoc3RydWN0IHJlbG9jX2NhY2hlICpjYWNoZSkKPiArewo+ICsJaWYgKGNhY2hlLT52 YWRkciA9PSBOVUxMKQo+ICsJCXJldHVybjsKPiArCj4gKwlzd2l0Y2ggKGNhY2hlLT50eXBlKSB7 Cj4gKwljYXNlIEtNQVA6IGt1bm1hcF9hdG9taWMoY2FjaGUtPnZhZGRyKTsgYnJlYWs7Cj4gKwlj YXNlIElPTUFQOiBpb19tYXBwaW5nX3VubWFwX2F0b21pYyhjYWNoZS0+dmFkZHIpOyBicmVhazsK PiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgKnJlbG9jX2ttYXAoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKPiArCQkJc3RydWN0IHJlbG9jX2NhY2hlICpjYWNoZSwKPiArCQkJ aW50IHBhZ2UpCj4gK3sKPiArCWlmIChjYWNoZS0+cGFnZSA9PSBwYWdlKQo+ICsJCXJldHVybiBj YWNoZS0+dmFkZHI7Cj4gKwo+ICsJaWYgKGNhY2hlLT52YWRkcikKPiArCQlrdW5tYXBfYXRvbWlj KGNhY2hlLT52YWRkcik7CgpNYXliZSBhZGQgc29tZSBHRU1fQlVHX09OKGNhY2hlLT50eXBlICE9 IEtNQVApIGhlcmUgYmVmb3JlIHJ1bm5pbmcKa3VubWFwX2F0b21pYz8gQmVjYXVzZSB0aGF0IGFz c3VtcHRpb24gaXMgbWFkZS4KCj4gKwo+ICsJY2FjaGUtPnBhZ2UgPSBwYWdlOwo+ICsJY2FjaGUt PnZhZGRyID0ga21hcF9hdG9taWMoaTkxNV9nZW1fb2JqZWN0X2dldF9kaXJ0eV9wYWdlKG9iaiwg cGFnZSkpOwo+ICsJY2FjaGUtPnR5cGUgPSBLTUFQOwo+ICsKPiArCXJldHVybiBjYWNoZS0+dmFk ZHI7Cj4gK30KPiArCj4gwqBzdGF0aWMgaW50Cj4gwqByZWxvY2F0ZV9lbnRyeV9jcHUoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiDCoAkJwqDCoMKgc3RydWN0IGRybV9pOTE1X2dl bV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvYywKPiArCQnCoMKgwqBzdHJ1Y3QgcmVsb2NfY2FjaGUg KmNhY2hlLAo+IMKgCQnCoMKgwqB1aW50NjRfdCB0YXJnZXRfb2Zmc2V0KQo+IMKgewo+IMKgCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2Owo+IEBAIC0zMTcsMzQgKzM1OCw0 NyBAQCByZWxvY2F0ZV9lbnRyeV9jcHUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwK PiDCoAlpZiAocmV0KQo+IMKgCQlyZXR1cm4gcmV0Owo+IMKgCj4gLQl2YWRkciA9IGttYXBfYXRv bWljKGk5MTVfZ2VtX29iamVjdF9nZXRfZGlydHlfcGFnZShvYmosCj4gLQkJCQlyZWxvYy0+b2Zm c2V0ID4+IFBBR0VfU0hJRlQpKTsKPiArCXZhZGRyID0gcmVsb2Nfa21hcChvYmosIGNhY2hlLCBy ZWxvYy0+b2Zmc2V0ID4+IFBBR0VfU0hJRlQpOwo+IMKgCSoodWludDMyX3QgKikodmFkZHIgKyBw YWdlX29mZnNldCkgPSBsb3dlcl8zMl9iaXRzKGRlbHRhKTsKPiDCoAo+IC0JaWYgKElOVEVMX0lO Rk8oZGV2KS0+Z2VuID49IDgpIHsKPiAtCQlwYWdlX29mZnNldCA9IG9mZnNldF9pbl9wYWdlKHBh Z2Vfb2Zmc2V0ICsgc2l6ZW9mKHVpbnQzMl90KSk7Cj4gLQo+IC0JCWlmIChwYWdlX29mZnNldCA9 PSAwKSB7Cj4gLQkJCWt1bm1hcF9hdG9taWModmFkZHIpOwo+IC0JCQl2YWRkciA9IGttYXBfYXRv bWljKGk5MTVfZ2VtX29iamVjdF9nZXRfZGlydHlfcGFnZShvYmosCj4gLQkJCcKgwqDCoMKgKHJl bG9jLT5vZmZzZXQgKyBzaXplb2YodWludDMyX3QpKSA+PiBQQUdFX1NISUZUKSk7Cj4gKwlpZiAo SU5URUxfR0VOKGRldikgPj0gOCkgewo+ICsJCXBhZ2Vfb2Zmc2V0ICs9IHNpemVvZih1aW50MzJf dCk7Cj4gKwkJaWYgKHBhZ2Vfb2Zmc2V0ID09IFBBR0VfU0laRSkgewo+ICsJCQl2YWRkciA9IHJl bG9jX2ttYXAob2JqLCBjYWNoZSwgY2FjaGUtPnBhZ2UgKyAxKTsKPiArCQkJcGFnZV9vZmZzZXQg PSAwOwo+IMKgCQl9Cj4gLQo+IMKgCQkqKHVpbnQzMl90ICopKHZhZGRyICsgcGFnZV9vZmZzZXQp ID0gdXBwZXJfMzJfYml0cyhkZWx0YSk7Cj4gwqAJfQo+IMKgCj4gLQlrdW5tYXBfYXRvbWljKHZh ZGRyKTsKPiAtCj4gwqAJcmV0dXJuIDA7Cj4gwqB9Cj4gwqAKPiArc3RhdGljIHZvaWQgKnJlbG9j X2lvbWFwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICsJCQnCoHN0cnVjdCByZWxv Y19jYWNoZSAqY2FjaGUsCj4gKwkJCcKgdWludDY0X3Qgb2Zmc2V0KQo+ICt7Cj4gKwlpZiAoY2Fj aGUtPnBhZ2UgPT0gb2Zmc2V0ID4+IFBBR0VfU0hJRlQpCj4gKwkJcmV0dXJuIGNhY2hlLT52YWRk cjsKPiArCj4gKwlpZiAoY2FjaGUtPnZhZGRyKQo+ICsJCWlvX21hcHBpbmdfdW5tYXBfYXRvbWlj KGNhY2hlLT52YWRkcik7Cj4gKwo+ICsJY2FjaGUtPnBhZ2UgPSBvZmZzZXQgPj4gUEFHRV9TSElG VDsKPiArCWNhY2hlLT52YWRkciA9Cj4gKwkJaW9fbWFwcGluZ19tYXBfYXRvbWljX3djKGk5MTUt PmdndHQubWFwcGFibGUsCj4gKwkJCQkJwqBvZmZzZXQgJiBQQUdFX01BU0spOwo+ICsJY2FjaGUt PnR5cGUgPSBJT01BUDsKPiArCj4gKwlyZXR1cm4gY2FjaGUtPnZhZGRyOwo+ICt9Cj4gKwo+IMKg c3RhdGljIGludAo+IMKgcmVsb2NhdGVfZW50cnlfZ3R0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCj4gwqAJCcKgwqDCoHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRy eSAqcmVsb2MsCj4gKwkJwqDCoMKgc3RydWN0IHJlbG9jX2NhY2hlICpjYWNoZSwKPiDCoAkJwqDC oMKgdWludDY0X3QgdGFyZ2V0X29mZnNldCkKPiDCoHsKPiDCoAlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOwo+IC0Jc3RydWN0IGk5MTVf Z2d0dCAqZ2d0dCA9ICZkZXZfcHJpdi0+Z2d0dDsKPiDCoAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsK PiDCoAl1aW50NjRfdCBkZWx0YSA9IHJlbG9jYXRpb25fdGFyZ2V0KHJlbG9jLCB0YXJnZXRfb2Zm c2V0KTsKPiDCoAl1aW50NjRfdCBvZmZzZXQ7Cj4gQEAgLTM2NiwyOCArNDIwLDE5IEBAIHJlbG9j YXRlX2VudHJ5X2d0dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IMKgCS8qIE1h cCB0aGUgcGFnZSBjb250YWluaW5nIHRoZSByZWxvY2F0aW9uIHdlJ3JlIGdvaW5nIHRvIHBlcmZv cm0uwqDCoCovCj4gwqAJb2Zmc2V0ID0gdm1hLT5ub2RlLnN0YXJ0Owo+IMKgCW9mZnNldCArPSBy ZWxvYy0+b2Zmc2V0Owo+IC0JcmVsb2NfcGFnZSA9IGlvX21hcHBpbmdfbWFwX2F0b21pY193Yyhn Z3R0LT5tYXBwYWJsZSwKPiAtCQkJCQnCoMKgwqDCoMKgwqBvZmZzZXQgJiBQQUdFX01BU0spOwo+ ICsJcmVsb2NfcGFnZSA9IHJlbG9jX2lvbWFwKGRldl9wcml2LCBjYWNoZSwgb2Zmc2V0KTsKPiDC oAlpb3dyaXRlMzIobG93ZXJfMzJfYml0cyhkZWx0YSksIHJlbG9jX3BhZ2UgKyBvZmZzZXRfaW5f cGFnZShvZmZzZXQpKTsKPiDCoAo+IMKgCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDgpIHsK PiDCoAkJb2Zmc2V0ICs9IHNpemVvZih1aW50MzJfdCk7Cj4gLQo+IC0JCWlmIChvZmZzZXRfaW5f cGFnZShvZmZzZXQpID09IDApIHsKPiAtCQkJaW9fbWFwcGluZ191bm1hcF9hdG9taWMocmVsb2Nf cGFnZSk7Cj4gLQkJCXJlbG9jX3BhZ2UgPQo+IC0JCQkJaW9fbWFwcGluZ19tYXBfYXRvbWljX3dj KGdndHQtPm1hcHBhYmxlLAo+IC0JCQkJCQkJwqBvZmZzZXQpOwo+IC0JCX0KPiAtCj4gKwkJaWYg KG9mZnNldF9pbl9wYWdlKG9mZnNldCkgPT0gMCkKPiArCQkJcmVsb2NfcGFnZSA9IHJlbG9jX2lv bWFwKGRldl9wcml2LCBjYWNoZSwgb2Zmc2V0KTsKPiDCoAkJaW93cml0ZTMyKHVwcGVyXzMyX2Jp dHMoZGVsdGEpLAo+IMKgCQkJwqDCoHJlbG9jX3BhZ2UgKyBvZmZzZXRfaW5fcGFnZShvZmZzZXQp KTsKPiDCoAl9Cj4gwqAKPiAtCWlvX21hcHBpbmdfdW5tYXBfYXRvbWljKHJlbG9jX3BhZ2UpOwo+ IC0KPiDCoHVucGluOgo+IC0JaTkxNV92bWFfdW5waW4odm1hKTsKPiArCV9faTkxNV92bWFfdW5w aW4odm1hKTsKPiDCoAlyZXR1cm4gcmV0Owo+IMKgfQo+IMKgCj4gQEAgLTQwMyw2ICs0NDgsNyBA QCBjbGZsdXNoX3dyaXRlMzIodm9pZCAqYWRkciwgdWludDMyX3QgdmFsdWUpCj4gwqBzdGF0aWMg aW50Cj4gwqByZWxvY2F0ZV9lbnRyeV9jbGZsdXNoKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCj4gwqAJCcKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9u X2VudHJ5ICpyZWxvYywKPiArCQnCoMKgwqDCoMKgwqDCoHN0cnVjdCByZWxvY19jYWNoZSAqY2Fj aGUsCgpGb3IgY29uc2lzdGVuY3kgd2l0aCByZXN0IG9mIHRoZSBwYXRjaCwgSSB3b3VsZCBwdXQg dGhlIGNhY2hlIGFzIGxhc3QKYXJndW1lbnQsIGFzIGl0IGNvdWxkIGVhc2lseSBiZSByZW1vdmVk IGFnYWluIGluIGZ1dHVyZSwgc28gaXQncyB0aGUKbGVhc3QgaW1wb3J0YW50LgoKPiDCoAkJwqDC oMKgwqDCoMKgwqB1aW50NjRfdCB0YXJnZXRfb2Zmc2V0KQo+IMKgewo+IMKgCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2Owo+IEBAIC00MTUsMjQgKzQ2MSwxOCBAQCByZWxv Y2F0ZV9lbnRyeV9jbGZsdXNoKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gwqAJ aWYgKHJldCkKPiDCoAkJcmV0dXJuIHJldDsKPiDCoAo+IC0JdmFkZHIgPSBrbWFwX2F0b21pYyhp OTE1X2dlbV9vYmplY3RfZ2V0X2RpcnR5X3BhZ2Uob2JqLAo+IC0JCQkJcmVsb2MtPm9mZnNldCA+ PiBQQUdFX1NISUZUKSk7Cj4gKwl2YWRkciA9IHJlbG9jX2ttYXAob2JqLCBjYWNoZSwgcmVsb2Mt Pm9mZnNldCA+PiBQQUdFX1NISUZUKTsKPiDCoAljbGZsdXNoX3dyaXRlMzIodmFkZHIgKyBwYWdl X29mZnNldCwgbG93ZXJfMzJfYml0cyhkZWx0YSkpOwo+IMKgCj4gLQlpZiAoSU5URUxfSU5GTyhk ZXYpLT5nZW4gPj0gOCkgewo+IC0JCXBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UocGFnZV9v ZmZzZXQgKyBzaXplb2YodWludDMyX3QpKTsKPiAtCj4gLQkJaWYgKHBhZ2Vfb2Zmc2V0ID09IDAp IHsKPiAtCQkJa3VubWFwX2F0b21pYyh2YWRkcik7Cj4gLQkJCXZhZGRyID0ga21hcF9hdG9taWMo aTkxNV9nZW1fb2JqZWN0X2dldF9kaXJ0eV9wYWdlKG9iaiwKPiAtCQkJwqDCoMKgwqAocmVsb2Mt Pm9mZnNldCArIHNpemVvZih1aW50MzJfdCkpID4+IFBBR0VfU0hJRlQpKTsKPiArCWlmIChJTlRF TF9HRU4oZGV2KSA+PSA4KSB7Cj4gKwkJcGFnZV9vZmZzZXQgKz0gc2l6ZW9mKHVpbnQzMl90KTsK PiArCQlpZiAocGFnZV9vZmZzZXQgPT0gUEFHRV9TSVpFKSB7Cj4gKwkJCXZhZGRyID0gcmVsb2Nf a21hcChvYmosIGNhY2hlLCBjYWNoZS0+cGFnZSArIDEpOwo+ICsJCQlwYWdlX29mZnNldCA9IDA7 Cj4gwqAJCX0KPiAtCj4gwqAJCWNsZmx1c2hfd3JpdGUzMih2YWRkciArIHBhZ2Vfb2Zmc2V0LCB1 cHBlcl8zMl9iaXRzKGRlbHRhKSk7Cj4gwqAJfQo+IMKgCj4gLQlrdW5tYXBfYXRvbWljKHZhZGRy KTsKPiAtCj4gwqAJcmV0dXJuIDA7Cj4gwqB9Cj4gwqAKPiBAQCAtNDUzLDcgKzQ5Myw4IEBAIHN0 YXRpYyBib29sIG9iamVjdF9pc19pZGxlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmop Cj4gwqBzdGF0aWMgaW50Cj4gwqBpOTE1X2dlbV9leGVjYnVmZmVyX3JlbG9jYXRlX2VudHJ5KHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gwqAJCQkJwqDCoMKgc3RydWN0IGViX3Zt YXMgKmViLAo+IC0JCQkJwqDCoMKgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5 ICpyZWxvYykKPiArCQkJCcKgwqDCoHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRy eSAqcmVsb2MsCj4gKwkJCQnCoMKgwqBzdHJ1Y3QgcmVsb2NfY2FjaGUgKmNhY2hlKQo+IMKgewo+ IMKgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2Owo+IMKgCXN0cnVjdCBk cm1fZ2VtX29iamVjdCAqdGFyZ2V0X29iajsKPiBAQCAtNTM3LDExICs1NzgsMTEgQEAgaTkxNV9n ZW1fZXhlY2J1ZmZlcl9yZWxvY2F0ZV9lbnRyeShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqLAo+IMKgCQlyZXR1cm4gLUVGQVVMVDsKPiDCoAo+IMKgCWlmICh1c2VfY3B1X3JlbG9jKG9i aikpCj4gLQkJcmV0ID0gcmVsb2NhdGVfZW50cnlfY3B1KG9iaiwgcmVsb2MsIHRhcmdldF9vZmZz ZXQpOwo+ICsJCXJldCA9IHJlbG9jYXRlX2VudHJ5X2NwdShvYmosIHJlbG9jLCBjYWNoZSwgdGFy Z2V0X29mZnNldCk7Cj4gwqAJZWxzZSBpZiAob2JqLT5tYXBfYW5kX2ZlbmNlYWJsZSkKPiAtCQly ZXQgPSByZWxvY2F0ZV9lbnRyeV9ndHQob2JqLCByZWxvYywgdGFyZ2V0X29mZnNldCk7Cj4gKwkJ cmV0ID0gcmVsb2NhdGVfZW50cnlfZ3R0KG9iaiwgcmVsb2MsIGNhY2hlLCB0YXJnZXRfb2Zmc2V0 KTsKPiDCoAllbHNlIGlmIChzdGF0aWNfY3B1X2hhcyhYODZfRkVBVFVSRV9DTEZMVVNIKSkKPiAt CQlyZXQgPSByZWxvY2F0ZV9lbnRyeV9jbGZsdXNoKG9iaiwgcmVsb2MsIHRhcmdldF9vZmZzZXQp Owo+ICsJCXJldCA9IHJlbG9jYXRlX2VudHJ5X2NsZmx1c2gob2JqLCByZWxvYywgY2FjaGUsIHRh cmdldF9vZmZzZXQpOwo+IMKgCWVsc2Ugewo+IMKgCQlXQVJOX09OQ0UoMSwgIkltcG9zc2libGUg Y2FzZSBpbiByZWxvY2F0aW9uIGhhbmRsaW5nXG4iKTsKPiDCoAkJcmV0ID0gLUVOT0RFVjsKPiBA QCAtNTY0LDkgKzYwNSwxMSBAQCBpOTE1X2dlbV9leGVjYnVmZmVyX3JlbG9jYXRlX3ZtYShzdHJ1 Y3QgaTkxNV92bWEgKnZtYSwKPiDCoAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50 cnkgc3RhY2tfcmVsb2NbTl9SRUxPQyg1MTIpXTsKPiDCoAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl bG9jYXRpb25fZW50cnkgX191c2VyICp1c2VyX3JlbG9jczsKPiDCoAlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNfb2JqZWN0MiAqZW50cnkgPSB2bWEtPmV4ZWNfZW50cnk7Cj4gLQlpbnQgcmVtYWlu LCByZXQ7Cj4gKwlzdHJ1Y3QgcmVsb2NfY2FjaGUgY2FjaGU7Cj4gKwlpbnQgcmVtYWluLCByZXQg PSAwOwo+IMKgCj4gwqAJdXNlcl9yZWxvY3MgPSB1NjRfdG9fdXNlcl9wdHIoZW50cnktPnJlbG9j c19wdHIpOwo+ICsJcmVsb2NfY2FjaGVfaW5pdCgmY2FjaGUpOwo+IMKgCj4gwqAJcmVtYWluID0g ZW50cnktPnJlbG9jYXRpb25fY291bnQ7Cj4gwqAJd2hpbGUgKHJlbWFpbikgewo+IEBAIC01NzYs MTkgKzYxOSwyMyBAQCBpOTE1X2dlbV9leGVjYnVmZmVyX3JlbG9jYXRlX3ZtYShzdHJ1Y3QgaTkx NV92bWEgKnZtYSwKPiDCoAkJCWNvdW50ID0gQVJSQVlfU0laRShzdGFja19yZWxvYyk7Cj4gwqAJ CXJlbWFpbiAtPSBjb3VudDsKPiDCoAo+IC0JCWlmIChfX2NvcHlfZnJvbV91c2VyX2luYXRvbWlj KHIsIHVzZXJfcmVsb2NzLCBjb3VudCpzaXplb2YoclswXSkpKQo+IC0JCQlyZXR1cm4gLUVGQVVM VDsKPiArCQlpZiAoX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyhyLCB1c2VyX3JlbG9jcywgY291 bnQqc2l6ZW9mKHJbMF0pKSkgewo+ICsJCQlyZXQgPSAtRUZBVUxUOwo+ICsJCQlnb3RvIG91dDsK PiArCQl9Cj4gwqAKPiDCoAkJZG8gewo+IMKgCQkJdTY0IG9mZnNldCA9IHItPnByZXN1bWVkX29m ZnNldDsKPiDCoAo+IC0JCQlyZXQgPSBpOTE1X2dlbV9leGVjYnVmZmVyX3JlbG9jYXRlX2VudHJ5 KHZtYS0+b2JqLCBlYiwgcik7Cj4gKwkJCXJldCA9IGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2Nh dGVfZW50cnkodm1hLT5vYmosIGViLCByLCAmY2FjaGUpOwo+IMKgCQkJaWYgKHJldCkKPiAtCQkJ CXJldHVybiByZXQ7Cj4gKwkJCQlnb3RvIG91dDsKPiDCoAo+IMKgCQkJaWYgKHItPnByZXN1bWVk X29mZnNldCAhPSBvZmZzZXQgJiYKPiAtCQkJwqDCoMKgwqBfX3B1dF91c2VyKHItPnByZXN1bWVk X29mZnNldCwgJnVzZXJfcmVsb2NzLT5wcmVzdW1lZF9vZmZzZXQpKSB7Cj4gLQkJCQlyZXR1cm4g LUVGQVVMVDsKPiArCQkJwqDCoMKgwqBfX3B1dF91c2VyKHItPnByZXN1bWVkX29mZnNldCwKPiAr CQkJCcKgwqDCoMKgwqDCoMKgJnVzZXJfcmVsb2NzLT5wcmVzdW1lZF9vZmZzZXQpKSB7Cj4gKwkJ CQlyZXQgPSAtRUZBVUxUOwo+ICsJCQkJZ290byBvdXQ7Cj4gwqAJCQl9Cj4gwqAKPiDCoAkJCXVz ZXJfcmVsb2NzKys7Cj4gQEAgLTU5Niw3ICs2NDMsOSBAQCBpOTE1X2dlbV9leGVjYnVmZmVyX3Jl bG9jYXRlX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiDCoAkJfSB3aGlsZSAoLS1jb3VudCk7 Cj4gwqAJfQo+IMKgCj4gLQlyZXR1cm4gMDsKPiArb3V0Ogo+ICsJcmVsb2NfY2FjaGVfZmluaSgm Y2FjaGUpOwoKPE5MPiBoZXJlIHRvIGtlZXAgY29uc2lzdGVudCBiZXR3ZWVuIHlvdXIgbmV4dCBj aGFuZ2UuCgpSZWdhcmRzLCBKb29uYXMKCj4gKwlyZXR1cm4gcmV0Owo+IMKgI3VuZGVmIE5fUkVM T0MKPiDCoH0KPiDCoAo+IEBAIC02MDYsMTUgKzY1NSwxOCBAQCBpOTE1X2dlbV9leGVjYnVmZmVy X3JlbG9jYXRlX3ZtYV9zbG93KHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAo+IMKgCQkJCcKgwqDCoMKg wqDCoHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2NzKQo+IMKgewo+ IMKgCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICplbnRyeSA9IHZtYS0+ ZXhlY19lbnRyeTsKPiAtCWludCBpLCByZXQ7Cj4gKwlzdHJ1Y3QgcmVsb2NfY2FjaGUgY2FjaGU7 Cj4gKwlpbnQgaSwgcmV0ID0gMDsKPiDCoAo+ICsJcmVsb2NfY2FjaGVfaW5pdCgmY2FjaGUpOwo+ IMKgCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+cmVsb2NhdGlvbl9jb3VudDsgaSsrKSB7Cj4gLQkJ cmV0ID0gaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZWxvY2F0ZV9lbnRyeSh2bWEtPm9iaiwgZWIsICZy ZWxvY3NbaV0pOwo+ICsJCXJldCA9IGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVfZW50cnko dm1hLT5vYmosIGViLCAmcmVsb2NzW2ldLCAmY2FjaGUpOwo+IMKgCQlpZiAocmV0KQo+IC0JCQly ZXR1cm4gcmV0Owo+ICsJCQlicmVhazsKPiDCoAl9Cj4gKwlyZWxvY19jYWNoZV9maW5pKCZjYWNo ZSk7Cj4gwqAKPiAtCXJldHVybiAwOwo+ICsJcmV0dXJuIHJldDsKPiDCoH0KPiDCoAo+IMKgc3Rh dGljIGludAotLSAKSm9vbmFzIExhaHRpbmVuCk9wZW4gU291cmNlIFRlY2hub2xvZ3kgQ2VudGVy CkludGVsIENvcnBvcmF0aW9uCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lu dGVsLWdmeAo=