From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: Re: [PATCH 8/8] drm/i915: Refactor execbuffer relocation writing Date: Thu, 09 Jun 2016 16:31:25 +0300 Message-ID: <1465479085.9670.40.camel@linux.intel.com> References: <1465471779-20765-1-git-send-email-chris@chris-wilson.co.uk> <1465471779-20765-9-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 mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id 98ABD6EBC6 for ; Thu, 9 Jun 2016 13:31:28 +0000 (UTC) In-Reply-To: <1465471779-20765-9-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 aXRoIGluIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIHJlbG9jIHBhZ2UgY2FjaGUsIHdlIGFyZSBq dXN0IG9uZSBzdGVwCj4gYXdheSBmcm9tIHJlZmFjdG9yaW5nIHRoZSByZWxvY2F0aW9uIHdyaXRl IGZ1bmN0aW9ucyBpbnRvIG9uZS4gTm90IG9ubHkKPiBkb2VzIGl0IHRpZHkgdGhlIGNvZGUgKHNs aWdodGx5KSwgYnV0IGl0IGdyZWF0bHkgc2ltcGxpZmllcyB0aGUgY29udHJvbAo+IGxvZ2ljIG11 Y2ggdG8gZ2NjJ3Mgc2F0aXNmYWN0aW9uLgo+IAo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNv biA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IC0tLQo+IMKgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jIHwgMjg5ICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0t LS0tCj4gwqAxIGZpbGUgY2hhbmdlZCwgMTUwIGluc2VydGlvbnMoKyksIDEzOSBkZWxldGlvbnMo LSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1 ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4gaW5k ZXggMzE4YzcxYjY2M2Y0Li5iZGE4ZWM4YjAyZTYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4gQEAgLTM0LDYgKzM0LDggQEAKPiDCoCNpbmNsdWRl IAo+IMKgI2luY2x1ZGUgCj4gwqAKPiArI2RlZmluZSBEQkdfVVNFX0NQVV9SRUxPQyAwIC8qIGZv cmNlIHJlbG9jYXRpb25zIHRvIHVzZSB0aGUgQ1BVIHdyaXRlIHBhdGggKi8KCkJldHRlciBjb25u ZWN0IHRvIHRoZSBuZXcgZGVidWcgS2NvbmZpZyBtZW51IHlvdSBpbnRyb2R1Y2VkPwoKPiArCj4g wqAjZGVmaW5lwqDCoF9fRVhFQ19PQkpFQ1RfSEFTX1BJTiAoMVU8PDMxKQo+IMKgI2RlZmluZcKg wqBfX0VYRUNfT0JKRUNUX0hBU19GRU5DRSAoMVU8PDMwKQo+IMKgI2RlZmluZcKgwqBfX0VYRUNf T0JKRUNUX05FRURTX01BUCAoMVU8PDI5KQo+IEBAIC01Myw2ICs1NSw3IEBAIHN0cnVjdCBpOTE1 X2V4ZWNidWZmZXJfcGFyYW1zIHsKPiDCoH07Cj4gwqAKPiDCoHN0cnVjdCBlYl92bWFzIHsKPiAr CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1Owo+IMKgCXN0cnVjdCBsaXN0X2hlYWQgdm1h czsKPiDCoAlpbnQgYW5kOwo+IMKgCXVuaW9uIHsKPiBAQCAtNjIsNyArNjUsOCBAQCBzdHJ1Y3Qg ZWJfdm1hcyB7Cj4gwqB9Owo+IMKgCj4gwqBzdGF0aWMgc3RydWN0IGViX3ZtYXMgKgo+IC1lYl9j cmVhdGUoc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqYXJncykKPiArZWJfY3JlYXRl KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICsJwqDCoHN0cnVjdCBkcm1faTkxNV9n ZW1fZXhlY2J1ZmZlcjIgKmFyZ3MpCj4gwqB7Cj4gwqAJc3RydWN0IGViX3ZtYXMgKmViID0gTlVM TDsKPiDCoAo+IEBAIC04OSw2ICs5Myw3IEBAIGViX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNidWZmZXIyICphcmdzKQo+IMKgCX0gZWxzZQo+IMKgCQllYi0+YW5kID0gLWFyZ3MtPmJ1 ZmZlcl9jb3VudDsKPiDCoAo+ICsJZWItPmk5MTUgPSBpOTE1Owo+IMKgCUlOSVRfTElTVF9IRUFE KCZlYi0+dm1hcyk7Cj4gwqAJcmV0dXJuIGViOwo+IMKgfQo+IEBAIC0yNzIsNyArMjc3LDggQEAg c3RhdGljIHZvaWQgZWJfZGVzdHJveShzdHJ1Y3QgZWJfdm1hcyAqZWIpCj4gwqAKPiDCoHN0YXRp YyBpbmxpbmUgaW50IHVzZV9jcHVfcmVsb2Moc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aikKPiDCoHsKPiAtCXJldHVybiAoSEFTX0xMQyhvYmotPmJhc2UuZGV2KSB8fAo+ICsJcmV0dXJu IChEQkdfVVNFX0NQVV9SRUxPQyB8fAo+ICsJCUhBU19MTEMob2JqLT5iYXNlLmRldikgfHwKPiDC oAkJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9PSBJOTE1X0dFTV9ET01BSU5fQ1BVIHx8Cj4gwqAJ CW9iai0+Y2FjaGVfbGV2ZWwgIT0gSTkxNV9DQUNIRV9OT05FKTsKPiDCoH0KPiBAQCAtMjk2LDMy ICszMDIsNTggQEAgc3RhdGljIGlubGluZSB1aW50NjRfdCBnZW44X25vbmNhbm9uaWNhbF9hZGRy KHVpbnQ2NF90IGFkZHJlc3MpCj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyBpbmxpbmUgdWludDY0X3QK PiAtcmVsb2NhdGlvbl90YXJnZXQoc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5 ICpyZWxvYywKPiArcmVsb2NhdGlvbl90YXJnZXQoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9y ZWxvY2F0aW9uX2VudHJ5ICpyZWxvYywKClRoZXNlIGNvbnN0IGNoYW5nZXMgY291bGQgYmUgYSBi dW5jaCBpbnN0ZWFkIG9mIHNwcmlua2xlZCBhcm91bmQuClVubGVzcyB3ZSB3YW50IHRvIHNtdWdn bGUgdGhlbSBpbiB0aHJvdWdoIHRoZSByZXNpc3RhbmNlLgoKPiDCoAkJwqDCoHVpbnQ2NF90IHRh cmdldF9vZmZzZXQpCj4gwqB7Cj4gwqAJcmV0dXJuIGdlbjhfY2Fub25pY2FsX2FkZHIoKGludCly ZWxvYy0+ZGVsdGEgKyB0YXJnZXRfb2Zmc2V0KTsKPiDCoH0KPiDCoAo+IMKgc3RydWN0IHJlbG9j X2NhY2hlIHsKPiAtCXZvaWQgKnZhZGRyOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTU7Cj4gKwl1bnNpZ25lZCBsb25nIHZhZGRyOwo+IMKgCXVuc2lnbmVkIHBhZ2U7Cj4gLQllbnVt IHsgS01BUCwgSU9NQVAgfSB0eXBlOwo+ICsJc3RydWN0IGRybV9tbV9ub2RlIG5vZGU7Cj4gKwli b29sIHVzZV82NGJpdF9yZWxvYzsKPiDCoH07Cj4gwqAKPiAtc3RhdGljIHZvaWQgcmVsb2NfY2Fj aGVfaW5pdChzdHJ1Y3QgcmVsb2NfY2FjaGUgKmNhY2hlKQo+ICtzdGF0aWMgdm9pZCByZWxvY19j YWNoZV9pbml0KHN0cnVjdCByZWxvY19jYWNoZSAqY2FjaGUsCj4gKwkJCcKgwqDCoMKgwqBzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiDCoHsKPiDCoAljYWNoZS0+cGFnZSA9IC0xOwo+ IC0JY2FjaGUtPnZhZGRyID0gTlVMTDsKPiArCWNhY2hlLT52YWRkciA9IDA7Cj4gKwljYWNoZS0+ aTkxNSA9IGk5MTU7Cj4gKwljYWNoZS0+dXNlXzY0Yml0X3JlbG9jID0gSU5URUxfR0VOKGNhY2hl LT5pOTE1KSA+PSA4Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgKnVubWFza19wYWdl KHVuc2lnbmVkIGxvbmcgcCkKPiArewo+ICsJcmV0dXJuICh2b2lkICopKHVpbnRwdHJfdCkocCAm IFBBR0VfTUFTSyk7Cj4gwqB9Cj4gwqAKPiArc3RhdGljIGlubGluZSB1bnNpZ25lZCB1bm1hc2tf ZmxhZ3ModW5zaWduZWQgbG9uZyBwKQo+ICt7Cj4gKwlyZXR1cm4gcCAmIH5QQUdFX01BU0s7Cj4g K30KPiArCj4gKyNkZWZpbmUgS01BUCAweDQKPiArCj4gwqBzdGF0aWMgdm9pZCByZWxvY19jYWNo ZV9maW5pKHN0cnVjdCByZWxvY19jYWNoZSAqY2FjaGUpCj4gwqB7Cj4gLQlpZiAoY2FjaGUtPnZh ZGRyID09IE5VTEwpCj4gKwl2b2lkICp2YWRkcjsKPiArCj4gKwlpZiAoY2FjaGUtPnZhZGRyID09 IDApCj4gwqAJCXJldHVybjsKPiDCoAo+IC0Jc3dpdGNoIChjYWNoZS0+dHlwZSkgewo+IC0JY2Fz ZSBLTUFQOiBrdW5tYXBfYXRvbWljKGNhY2hlLT52YWRkcik7IGJyZWFrOwo+IC0JY2FzZSBJT01B UDogaW9fbWFwcGluZ191bm1hcF9hdG9taWMoY2FjaGUtPnZhZGRyKTsgYnJlYWs7Cj4gKwl2YWRk ciA9IHVubWFza19wYWdlKGNhY2hlLT52YWRkcik7Cj4gKwlpZiAoY2FjaGUtPnZhZGRyICYgS01B UCkgewo+ICsJCWlmIChjYWNoZS0+dmFkZHIgJiBDTEZMVVNIX0FGVEVSKQo+ICsJCQltYigpOwo+ ICsKPiArCQlrdW5tYXBfYXRvbWljKHZhZGRyKTsKPiArCQlpOTE1X2dlbV9vYmplY3RfdW5waW5f cGFnZXMoKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICopY2FjaGUtPm5vZGUubW0pOwoKUmF0 aGVyIGxvbmcgbGluZS4KCj4gKwl9IGVsc2Ugewo+ICsJCWlvX21hcHBpbmdfdW5tYXBfYXRvbWlj KHZhZGRyKTsKPiArCQlpOTE1X3ZtYV91bnBpbigoc3RydWN0IGk5MTVfdm1hICopY2FjaGUtPm5v ZGUubW0pOwo+IMKgCX0KPiDCoH0KPiDCoAo+IEBAIC0zMjksMTQ4ICszNjEsMTM4IEBAIHN0YXRp YyB2b2lkICpyZWxvY19rbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gwqAJ CQlzdHJ1Y3QgcmVsb2NfY2FjaGUgKmNhY2hlLAo+IMKgCQkJaW50IHBhZ2UpCj4gwqB7Cj4gLQlp ZiAoY2FjaGUtPnBhZ2UgPT0gcGFnZSkKPiAtCQlyZXR1cm4gY2FjaGUtPnZhZGRyOwo+ICsJdm9p ZCAqdmFkZHI7Cj4gwqAKPiAtCWlmIChjYWNoZS0+dmFkZHIpCj4gLQkJa3VubWFwX2F0b21pYyhj YWNoZS0+dmFkZHIpOwo+ICsJaWYgKGNhY2hlLT52YWRkcikgewo+ICsJCWt1bm1hcF9hdG9taWMo dW5tYXNrX3BhZ2UoY2FjaGUtPnZhZGRyKSk7Cj4gKwl9IGVsc2Ugewo+ICsJCXVuc2lnbmVkIGZs dXNoZXM7Cj4gKwkJaW50IHJldDsKPiArCj4gKwkJcmV0ID0gaTkxNV9nZW1fb2JqX3ByZXBhcmVf c2htZW1fd3JpdGUob2JqLCAmZmx1c2hlcyk7CgpZZWFoLCBuZWVkc19jbGZsdXNoIGlzIHNvIGJh ZCBuYW1lIGVhcmxpZXIgaW4gdGhlIHNlcmllcywgdGhhdCBldmVuIHlvdQpkb24ndCB1c2UgaXQu ICJuZWVkX2NsZmx1c2hlcyIgb3IgYW55dGhpbmcgaXMgYmV0dGVyLgoKPiArCQlpZiAocmV0KQo+ ICsJCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+IMKgCj4gKwkJY2FjaGUtPnZhZGRyID0gZmx1c2hl cyB8IEtNQVA7Cj4gKwkJY2FjaGUtPm5vZGUubW0gPSAodm9pZCAqKW9iajsKPiArCQlpZiAoZmx1 c2hlcykKPiArCQkJbWIoKTsKPiArCX0KPiArCj4gKwl2YWRkciA9IGttYXBfYXRvbWljKGk5MTVf Z2VtX29iamVjdF9nZXRfZGlydHlfcGFnZShvYmosIHBhZ2UpKTsKPiArCWNhY2hlLT52YWRkciA9 IHVubWFza19mbGFncyhjYWNoZS0+dmFkZHIpIHwgKHVuc2lnbmVkIGxvbmcpdmFkZHI7Cj4gwqAJ Y2FjaGUtPnBhZ2UgPSBwYWdlOwo+IC0JY2FjaGUtPnZhZGRyID0ga21hcF9hdG9taWMoaTkxNV9n ZW1fb2JqZWN0X2dldF9kaXJ0eV9wYWdlKG9iaiwgcGFnZSkpOwo+IC0JY2FjaGUtPnR5cGUgPSBL TUFQOwo+IMKgCj4gLQlyZXR1cm4gY2FjaGUtPnZhZGRyOwo+ICsJcmV0dXJuIHZhZGRyOwo+IMKg fQo+IMKgCj4gLXN0YXRpYyBpbnQKPiAtcmVsb2NhdGVfZW50cnlfY3B1KHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmosCj4gLQkJwqDCoMKgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0 aW9uX2VudHJ5ICpyZWxvYywKPiAtCQnCoMKgwqBzdHJ1Y3QgcmVsb2NfY2FjaGUgKmNhY2hlLAo+ IC0JCcKgwqDCoHVpbnQ2NF90IHRhcmdldF9vZmZzZXQpCj4gK3N0YXRpYyB2b2lkICpyZWxvY19p b21hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJCQnCoHN0cnVjdCByZWxv Y19jYWNoZSAqY2FjaGUsCj4gKwkJCcKgaW50IHBhZ2UpCj4gwqB7Cj4gLQlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKPiAtCXVpbnQzMl90IHBhZ2Vfb2Zmc2V0ID0gb2Zm c2V0X2luX3BhZ2UocmVsb2MtPm9mZnNldCk7Cj4gLQl1aW50NjRfdCBkZWx0YSA9IHJlbG9jYXRp b25fdGFyZ2V0KHJlbG9jLCB0YXJnZXRfb2Zmc2V0KTsKPiAtCWNoYXIgKnZhZGRyOwo+IC0JaW50 IHJldDsKPiArCXZvaWQgKnZhZGRyOwo+IMKgCj4gLQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0 X3RvX2NwdV9kb21haW4ob2JqLCB0cnVlKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsK PiArCWlmIChjYWNoZS0+dmFkZHIpIHsKPiArCQlpb19tYXBwaW5nX3VubWFwX2F0b21pYyh1bm1h c2tfcGFnZShjYWNoZS0+dmFkZHIpKTsKPiArCX0gZWxzZSB7Cj4gKwkJc3RydWN0IGk5MTVfdm1h ICp2bWE7Cj4gKwkJaW50IHJldDsKPiDCoAo+IC0JdmFkZHIgPSByZWxvY19rbWFwKG9iaiwgY2Fj aGUsIHJlbG9jLT5vZmZzZXQgPj4gUEFHRV9TSElGVCk7Cj4gLQkqKHVpbnQzMl90ICopKHZhZGRy ICsgcGFnZV9vZmZzZXQpID0gbG93ZXJfMzJfYml0cyhkZWx0YSk7Cj4gKwkJaWYgKHVzZV9jcHVf cmVsb2Mob2JqKSkKPiArCQkJcmV0dXJuIE5VTEw7Cj4gwqAKPiAtCWlmIChJTlRFTF9HRU4oZGV2 KSA+PSA4KSB7Cj4gLQkJcGFnZV9vZmZzZXQgKz0gc2l6ZW9mKHVpbnQzMl90KTsKPiAtCQlpZiAo cGFnZV9vZmZzZXQgPT0gUEFHRV9TSVpFKSB7Cj4gLQkJCXZhZGRyID0gcmVsb2Nfa21hcChvYmos IGNhY2hlLCBjYWNoZS0+cGFnZSArIDEpOwo+IC0JCQlwYWdlX29mZnNldCA9IDA7Cj4gLQkJfQo+ IC0JCSoodWludDMyX3QgKikodmFkZHIgKyBwYWdlX29mZnNldCkgPSB1cHBlcl8zMl9iaXRzKGRl bHRhKTsKPiAtCX0KPiArCQl2bWEgPSBpOTE1X2dlbV9vYmplY3RfZ2d0dF9waW4ob2JqLCBOVUxM LCAwLCAwLAo+ICsJCQkJCcKgwqDCoMKgwqDCoMKgUElOX01BUFBBQkxFIHwgUElOX05PTkJMT0NL KTsKPiArCQlpZiAoSVNfRVJSKHZtYSkpCj4gKwkJCXJldHVybiBOVUxMOwo+IMKgCj4gLQlyZXR1 cm4gMDsKPiAtfQoKVWdoLCBkaWQgeW91IHNpbXVsdGFuZW91c2x5IG1vdmUgYW5kIHJlbmFtZSBm dW5jdGlvbnMuIFRoaXMgaXMgcmF0aGVyCmhhcmQgdG8gZm9sbG93IGZyb20gdGhpcyBwb2ludCBv bi4uLgoKUmVnYXJkcywgSm9vbmFzCgo+ICsJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9f Z3R0X2RvbWFpbihvYmosIHRydWUpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiBFUlJfUFRS KHJldCk7Cj4gwqAKPiAtc3RhdGljIHZvaWQgKnJlbG9jX2lvbWFwKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1LAo+IC0JCQnCoHN0cnVjdCByZWxvY19jYWNoZSAqY2FjaGUsCj4gLQkJCcKg dWludDY0X3Qgb2Zmc2V0KQo+IC17Cj4gLQlpZiAoY2FjaGUtPnBhZ2UgPT0gb2Zmc2V0ID4+IFBB R0VfU0hJRlQpCj4gLQkJcmV0dXJuIGNhY2hlLT52YWRkcjsKPiArCQlyZXQgPSBpOTE1X2dlbV9v YmplY3RfcHV0X2ZlbmNlKG9iaik7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIEVSUl9QVFIo cmV0KTsKPiDCoAo+IC0JaWYgKGNhY2hlLT52YWRkcikKPiAtCQlpb19tYXBwaW5nX3VubWFwX2F0 b21pYyhjYWNoZS0+dmFkZHIpOwo+ICsJCWNhY2hlLT5ub2RlLnN0YXJ0ID0gdm1hLT5ub2RlLnN0 YXJ0Owo+ICsJCWNhY2hlLT5ub2RlLm1tID0gKHZvaWQgKil2bWE7Cj4gKwl9Cj4gwqAKPiAtCWNh Y2hlLT5wYWdlID0gb2Zmc2V0ID4+IFBBR0VfU0hJRlQ7Cj4gLQljYWNoZS0+dmFkZHIgPQo+IC0J CWlvX21hcHBpbmdfbWFwX2F0b21pY193YyhpOTE1LT5nZ3R0Lm1hcHBhYmxlLAo+IC0JCQkJCcKg b2Zmc2V0ICYgUEFHRV9NQVNLKTsKPiAtCWNhY2hlLT50eXBlID0gSU9NQVA7Cj4gKwl2YWRkciA9 IGlvX21hcHBpbmdfbWFwX2F0b21pY193YyhjYWNoZS0+aTkxNS0+Z2d0dC5tYXBwYWJsZSwKPiAr CQkJCQnCoGNhY2hlLT5ub2RlLnN0YXJ0ICsgKHBhZ2UgPDwgUEFHRV9TSElGVCkpOwo+ICsJY2Fj aGUtPnBhZ2UgPSBwYWdlOwo+ICsJY2FjaGUtPnZhZGRyID0gKHVuc2lnbmVkIGxvbmcpdmFkZHI7 Cj4gwqAKPiAtCXJldHVybiBjYWNoZS0+dmFkZHI7Cj4gKwlyZXR1cm4gdmFkZHI7Cj4gwqB9Cj4g wqAKPiAtc3RhdGljIGludAo+IC1yZWxvY2F0ZV9lbnRyeV9ndHQoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKPiAtCQnCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25f ZW50cnkgKnJlbG9jLAo+IC0JCcKgwqDCoHN0cnVjdCByZWxvY19jYWNoZSAqY2FjaGUsCj4gLQkJ wqDCoMKgdWludDY0X3QgdGFyZ2V0X29mZnNldCkKPiArc3RhdGljIHZvaWQgKnJlbG9jX3ZhZGRy KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCcKgc3RydWN0IHJlbG9jX2Nh Y2hlICpjYWNoZSwKPiArCQkJwqBpbnQgcGFnZSkKPiDCoHsKPiAtCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUob2JqLT5iYXNlLmRldik7Cj4gLQlzdHJ1Y3QgaTkx NV92bWEgKnZtYTsKPiAtCXVpbnQ2NF90IGRlbHRhID0gcmVsb2NhdGlvbl90YXJnZXQocmVsb2Ms IHRhcmdldF9vZmZzZXQpOwo+IC0JdWludDY0X3Qgb2Zmc2V0Owo+IC0Jdm9pZCBfX2lvbWVtICpy ZWxvY19wYWdlOwo+IC0JaW50IHJldDsKPiAtCj4gLQl2bWEgPSBpOTE1X2dlbV9vYmplY3RfZ2d0 dF9waW4ob2JqLCBOVUxMLCAwLCAwLCBQSU5fTUFQUEFCTEUpOwo+IC0JaWYgKElTX0VSUih2bWEp KQo+IC0JCXJldHVybiBQVFJfRVJSKHZtYSk7Cj4gLQo+IC0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0 X3NldF90b19ndHRfZG9tYWluKG9iaiwgdHJ1ZSk7Cj4gLQlpZiAocmV0KQo+IC0JCWdvdG8gdW5w aW47Cj4gLQo+IC0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3B1dF9mZW5jZShvYmopOwo+IC0JaWYg KHJldCkKPiAtCQlnb3RvIHVucGluOwo+IC0KPiAtCS8qIE1hcCB0aGUgcGFnZSBjb250YWluaW5n IHRoZSByZWxvY2F0aW9uIHdlJ3JlIGdvaW5nIHRvIHBlcmZvcm0uwqDCoCovCj4gLQlvZmZzZXQg PSB2bWEtPm5vZGUuc3RhcnQ7Cj4gLQlvZmZzZXQgKz0gcmVsb2MtPm9mZnNldDsKPiAtCXJlbG9j X3BhZ2UgPSByZWxvY19pb21hcChkZXZfcHJpdiwgY2FjaGUsIG9mZnNldCk7Cj4gLQlpb3dyaXRl MzIobG93ZXJfMzJfYml0cyhkZWx0YSksIHJlbG9jX3BhZ2UgKyBvZmZzZXRfaW5fcGFnZShvZmZz ZXQpKTsKPiArCXZvaWQgKnZhZGRyOwo+IMKgCj4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSA4KSB7Cj4gLQkJb2Zmc2V0ICs9IHNpemVvZih1aW50MzJfdCk7Cj4gLQkJaWYgKG9mZnNldF9p bl9wYWdlKG9mZnNldCkgPT0gMCkKPiAtCQkJcmVsb2NfcGFnZSA9IHJlbG9jX2lvbWFwKGRldl9w cml2LCBjYWNoZSwgb2Zmc2V0KTsKPiAtCQlpb3dyaXRlMzIodXBwZXJfMzJfYml0cyhkZWx0YSks Cj4gLQkJCcKgwqByZWxvY19wYWdlICsgb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KSk7Cj4gKwlpZiAo Y2FjaGUtPnBhZ2UgPT0gcGFnZSkgewo+ICsJCXZhZGRyID0gdW5tYXNrX3BhZ2UoY2FjaGUtPnZh ZGRyKTsKPiArCX0gZWxzZSB7Cj4gKwkJdmFkZHIgPSBOVUxMOwo+ICsJCWlmICgoY2FjaGUtPnZh ZGRyICYgS01BUCkgPT0gMCkKPiArCQkJdmFkZHIgPSByZWxvY19pb21hcChvYmosIGNhY2hlLCBw YWdlKTsKPiArCQlpZiAodmFkZHIgPT0gTlVMTCkKPiArCQkJdmFkZHIgPSByZWxvY19rbWFwKG9i aiwgY2FjaGUsIHBhZ2UpOwo+IMKgCX0KPiDCoAo+IC11bnBpbjoKPiAtCV9faTkxNV92bWFfdW5w aW4odm1hKTsKPiAtCXJldHVybiByZXQ7Cj4gKwlyZXR1cm4gdmFkZHI7Cj4gwqB9Cj4gwqAKPiDC oHN0YXRpYyB2b2lkCj4gLWNsZmx1c2hfd3JpdGUzMih2b2lkICphZGRyLCB1aW50MzJfdCB2YWx1 ZSkKPiArY2xmbHVzaF93cml0ZTMyKHVpbnQzMl90ICphZGRyLCB1aW50MzJfdCB2YWx1ZSwgdW5z aWduZWQgZmx1c2hlcykKPiDCoHsKPiAtCS8qIFRoaXMgaXMgbm90IGEgZmFzdCBwYXRoLCBzbyBL SVNTLiAqLwo+IC0JZHJtX2NsZmx1c2hfdmlydF9yYW5nZShhZGRyLCBzaXplb2YodWludDMyX3Qp KTsKPiAtCSoodWludDMyX3QgKilhZGRyID0gdmFsdWU7Cj4gLQlkcm1fY2xmbHVzaF92aXJ0X3Jh bmdlKGFkZHIsIHNpemVvZih1aW50MzJfdCkpOwo+ICsJaWYgKHVubGlrZWx5KGZsdXNoZXMgJiAo Q0xGTFVTSF9CRUZPUkUgfCBDTEZMVVNIX0FGVEVSKSkpIHsKPiArCQlpZiAoZmx1c2hlcyAmIENM RkxVU0hfQkVGT1JFKSB7Cj4gKwkJCWNsZmx1c2hvcHQoYWRkcik7Cj4gKwkJCW1iKCk7Cj4gKwkJ fQo+ICsKPiArCQkqYWRkciA9IHZhbHVlOwo+ICsKPiArCQkvKiBXcml0ZXMgdG8gdGhlIHNhbWUg Y2FjaGVsaW5lIGFyZSBzZXJpYWxpc2VkIGJ5IHRoZSBDUFUKPiArCQnCoCogKGluY2x1ZGluZyBj bGZsdXNoKS4gT24gdGhlIHdyaXRlIHBhdGgsIHdlIG9ubHkgcmVxdWlyZQo+ICsJCcKgKiB0aGF0 IGl0IGhpdHMgbWVtb3J5IGluIGFuIG9yZGVybHkgZmFzaGlvbiBhbmQgcGxhY2UKPiArCQnCoCog bWIgYmFycmllcnMgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHJlbG9jYXRpb24gcGhhc2UK PiArCQnCoCogdG8gZW5zdXJlIG9yZGVyaW5nIG9mIGNsZmx1c2ggd3J0IHRvIHRoZSBzeXN0ZW0u Cj4gKwkJwqAqLwo+ICsJCWlmIChmbHVzaGVzICYgQ0xGTFVTSF9BRlRFUikKPiArCQkJY2xmbHVz aG9wdChhZGRyKTsKPiArCX0gZWxzZQo+ICsJCSphZGRyID0gdmFsdWU7Cj4gwqB9Cj4gwqAKPiDC oHN0YXRpYyBpbnQKPiAtcmVsb2NhdGVfZW50cnlfY2xmbHVzaChzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAo+IC0JCcKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxv Y2F0aW9uX2VudHJ5ICpyZWxvYywKPiAtCQnCoMKgwqDCoMKgwqDCoHN0cnVjdCByZWxvY19jYWNo ZSAqY2FjaGUsCj4gLQkJwqDCoMKgwqDCoMKgwqB1aW50NjRfdCB0YXJnZXRfb2Zmc2V0KQo+ICty ZWxvY2F0ZV9lbnRyeShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJwqDCoMKg wqDCoMKgwqBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9j LAo+ICsJwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcmVsb2NfY2FjaGUgKmNhY2hlLAo+ICsJwqDCoMKg wqDCoMKgwqB1aW50NjRfdCB0YXJnZXRfb2Zmc2V0KQo+IMKgewo+IC0Jc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IG9iai0+YmFzZS5kZXY7Cj4gLQl1aW50MzJfdCBwYWdlX29mZnNldCA9IG9mZnNl dF9pbl9wYWdlKHJlbG9jLT5vZmZzZXQpOwo+IC0JdWludDY0X3QgZGVsdGEgPSByZWxvY2F0aW9u X3RhcmdldChyZWxvYywgdGFyZ2V0X29mZnNldCk7Cj4gLQljaGFyICp2YWRkcjsKPiAtCWludCBy ZXQ7Cj4gKwl1aW50NjRfdCBvZmZzZXQgPSByZWxvYy0+b2Zmc2V0Owo+ICsJYm9vbCB3aWRlID0g Y2FjaGUtPnVzZV82NGJpdF9yZWxvYzsKPiArCXZvaWQgKnZhZGRyOwo+IMKgCj4gLQlyZXQgPSBp OTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9kb21haW4ob2JqLCB0cnVlKTsKPiAtCWlmIChyZXQp Cj4gLQkJcmV0dXJuIHJldDsKPiArCXRhcmdldF9vZmZzZXQgPSByZWxvY2F0aW9uX3RhcmdldChy ZWxvYywgdGFyZ2V0X29mZnNldCk7Cj4gK3JlcGVhdDoKPiArCXZhZGRyID0gcmVsb2NfdmFkZHIo b2JqLCBjYWNoZSwgb2Zmc2V0ID4+IFBBR0VfU0hJRlQpOwo+ICsJaWYgKElTX0VSUih2YWRkcikp Cj4gKwkJcmV0dXJuIFBUUl9FUlIodmFkZHIpOwo+IMKgCj4gLQl2YWRkciA9IHJlbG9jX2ttYXAo b2JqLCBjYWNoZSwgcmVsb2MtPm9mZnNldCA+PiBQQUdFX1NISUZUKTsKPiAtCWNsZmx1c2hfd3Jp dGUzMih2YWRkciArIHBhZ2Vfb2Zmc2V0LCBsb3dlcl8zMl9iaXRzKGRlbHRhKSk7Cj4gKwljbGZs dXNoX3dyaXRlMzIodmFkZHIgKyBvZmZzZXRfaW5fcGFnZShvZmZzZXQpLAo+ICsJCQlsb3dlcl8z Ml9iaXRzKHRhcmdldF9vZmZzZXQpLAo+ICsJCQljYWNoZS0+dmFkZHIpOwo+IMKgCj4gLQlpZiAo SU5URUxfR0VOKGRldikgPj0gOCkgewo+IC0JCXBhZ2Vfb2Zmc2V0ICs9IHNpemVvZih1aW50MzJf dCk7Cj4gLQkJaWYgKHBhZ2Vfb2Zmc2V0ID09IFBBR0VfU0laRSkgewo+IC0JCQl2YWRkciA9IHJl bG9jX2ttYXAob2JqLCBjYWNoZSwgY2FjaGUtPnBhZ2UgKyAxKTsKPiAtCQkJcGFnZV9vZmZzZXQg PSAwOwo+IC0JCX0KPiAtCQljbGZsdXNoX3dyaXRlMzIodmFkZHIgKyBwYWdlX29mZnNldCwgdXBw ZXJfMzJfYml0cyhkZWx0YSkpOwo+ICsJaWYgKHdpZGUpIHsKPiArCQlvZmZzZXQgKz0gc2l6ZW9m KHVpbnQzMl90KTsKPiArCQl0YXJnZXRfb2Zmc2V0ID4+PSAzMjsKPiArCQl3aWRlID0gZmFsc2U7 Cj4gKwkJZ290byByZXBlYXQ7Cj4gwqAJfQo+IMKgCj4gwqAJcmV0dXJuIDA7Cj4gQEAgLTU1Nyw3 ICs1NzksNyBAQCBpOTE1X2dlbV9leGVjYnVmZmVyX3JlbG9jYXRlX2VudHJ5KHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gwqAKPiDCoAkvKiBDaGVjayB0aGF0IHRoZSByZWxvY2F0 aW9uIGFkZHJlc3MgaXMgdmFsaWQuLi4gKi8KPiDCoAlpZiAodW5saWtlbHkocmVsb2MtPm9mZnNl dCA+Cj4gLQkJb2JqLT5iYXNlLnNpemUgLSAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gOCA/IDgg OiA0KSkpIHsKPiArCQnCoMKgwqDCoMKgb2JqLT5iYXNlLnNpemUgLSAoY2FjaGUtPnVzZV82NGJp dF9yZWxvYyA/IDggOiA0KSkpIHsKPiDCoAkJRFJNX0RFQlVHKCJSZWxvY2F0aW9uIGJleW9uZCBv YmplY3QgYm91bmRzOiAiCj4gwqAJCQnCoMKgIm9iaiAlcCB0YXJnZXQgJWQgb2Zmc2V0ICVkIHNp emUgJWQuXG4iLAo+IMKgCQkJwqDCoG9iaiwgcmVsb2MtPnRhcmdldF9oYW5kbGUsCj4gQEAgLTU3 NywyMyArNTk5LDEyIEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXJfcmVsb2NhdGVfZW50cnkoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiDCoAlpZiAocGFnZWZhdWx0X2Rpc2FibGVkKCkg JiYgIW9iamVjdF9pc19pZGxlKG9iaikpCj4gwqAJCXJldHVybiAtRUZBVUxUOwo+IMKgCj4gLQlp ZiAodXNlX2NwdV9yZWxvYyhvYmopKQo+IC0JCXJldCA9IHJlbG9jYXRlX2VudHJ5X2NwdShvYmos IHJlbG9jLCBjYWNoZSwgdGFyZ2V0X29mZnNldCk7Cj4gLQllbHNlIGlmIChvYmotPm1hcF9hbmRf ZmVuY2VhYmxlKQo+IC0JCXJldCA9IHJlbG9jYXRlX2VudHJ5X2d0dChvYmosIHJlbG9jLCBjYWNo ZSwgdGFyZ2V0X29mZnNldCk7Cj4gLQllbHNlIGlmIChzdGF0aWNfY3B1X2hhcyhYODZfRkVBVFVS RV9DTEZMVVNIKSkKPiAtCQlyZXQgPSByZWxvY2F0ZV9lbnRyeV9jbGZsdXNoKG9iaiwgcmVsb2Ms IGNhY2hlLCB0YXJnZXRfb2Zmc2V0KTsKPiAtCWVsc2Ugewo+IC0JCVdBUk5fT05DRSgxLCAiSW1w b3NzaWJsZSBjYXNlIGluIHJlbG9jYXRpb24gaGFuZGxpbmdcbiIpOwo+IC0JCXJldCA9IC1FTk9E RVY7Cj4gLQl9Cj4gLQo+ICsJcmV0ID0gcmVsb2NhdGVfZW50cnkob2JqLCByZWxvYywgY2FjaGUs IHRhcmdldF9vZmZzZXQpOwo+IMKgCWlmIChyZXQpCj4gwqAJCXJldHVybiByZXQ7Cj4gwqAKPiDC oAkvKiBhbmQgdXBkYXRlIHRoZSB1c2VyJ3MgcmVsb2NhdGlvbiBlbnRyeSAqLwo+IMKgCXJlbG9j LT5wcmVzdW1lZF9vZmZzZXQgPSB0YXJnZXRfb2Zmc2V0Owo+IC0KPiDCoAlyZXR1cm4gMDsKPiDC oH0KPiDCoAo+IEBAIC02MDksNyArNjIwLDcgQEAgaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZWxvY2F0 ZV92bWEoc3RydWN0IGk5MTVfdm1hICp2bWEsCj4gwqAJaW50IHJlbWFpbiwgcmV0ID0gMDsKPiDC oAo+IMKgCXVzZXJfcmVsb2NzID0gdTY0X3RvX3VzZXJfcHRyKGVudHJ5LT5yZWxvY3NfcHRyKTsK PiAtCXJlbG9jX2NhY2hlX2luaXQoJmNhY2hlKTsKPiArCXJlbG9jX2NhY2hlX2luaXQoJmNhY2hl LCBlYi0+aTkxNSk7Cj4gwqAKPiDCoAlyZW1haW4gPSBlbnRyeS0+cmVsb2NhdGlvbl9jb3VudDsK PiDCoAl3aGlsZSAocmVtYWluKSB7Cj4gQEAgLTY1OCw3ICs2NjksNyBAQCBpOTE1X2dlbV9leGVj YnVmZmVyX3JlbG9jYXRlX3ZtYV9zbG93KHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAo+IMKgCXN0cnVj dCByZWxvY19jYWNoZSBjYWNoZTsKPiDCoAlpbnQgaSwgcmV0ID0gMDsKPiDCoAo+IC0JcmVsb2Nf Y2FjaGVfaW5pdCgmY2FjaGUpOwo+ICsJcmVsb2NfY2FjaGVfaW5pdCgmY2FjaGUsIGViLT5pOTE1 KTsKPiDCoAlmb3IgKGkgPSAwOyBpIDwgZW50cnktPnJlbG9jYXRpb25fY291bnQ7IGkrKykgewo+ IMKgCQlyZXQgPSBpOTE1X2dlbV9leGVjYnVmZmVyX3JlbG9jYXRlX2VudHJ5KHZtYS0+b2JqLCBl YiwgJnJlbG9jc1tpXSwgJmNhY2hlKTsKPiDCoAkJaWYgKHJldCkKPiBAQCAtMTA3Myw4ICsxMDg0 LDggQEAgaTkxNV9nZW1fZXhlY2J1ZmZlcl9tb3ZlX3RvX2dwdShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlcXVlc3QgKnJlcSwKPiDCoAlpZiAoZmx1c2hfY2hpcHNldCkKPiDCoAkJaTkxNV9nZW1fY2hp cHNldF9mbHVzaChyZXEtPmVuZ2luZS0+aTkxNSk7Cj4gwqAKPiAtCWlmIChmbHVzaF9kb21haW5z ICYgSTkxNV9HRU1fRE9NQUlOX0dUVCkKPiAtCQl3bWIoKTsKPiArCS8qIE1ha2Ugc3VyZSAodW50 cmFja2VkKSBDUFUgcmVsb2NzL3BhcnNpbmcgYXJlIGZsdXNoZWQgKi8KPiArCXdtYigpOwo+IMKg Cj4gwqAJLyogVW5jb25kaXRpb25hbGx5IGludmFsaWRhdGUgZ3B1IGNhY2hlcyBhbmQgVExCcy4g Ki8KPiDCoAlyZXR1cm4gcmVxLT5lbmdpbmUtPmVtaXRfZmx1c2gocmVxLCBJOTE1X0dFTV9HUFVf RE9NQUlOUywgMCk7Cj4gQEAgLTE2MDYsNyArMTYxNyw3IEBAIGk5MTVfZ2VtX2RvX2V4ZWNidWZm ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiDCoAo+IMKgCW1lbXNldCjC tm1zX21hc3RlciwgMHgwMCwgc2l6ZW9mKHBhcmFtc19tYXN0ZXIpKTsKPiDCoAo+IC0JZWIgPSBl Yl9jcmVhdGUoYXJncyk7Cj4gKwllYiA9IGViX2NyZWF0ZShkZXZfcHJpdiwgYXJncyk7Cj4gwqAJ aWYgKGViID09IE5VTEwpIHsKPiDCoAkJaTkxNV9nZW1fY29udGV4dF9wdXQoY3R4KTsKPiDCoAkJ bXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0tIApKb29uYXMgTGFodGluZW4KT3Bl biBTb3VyY2UgVGVjaG5vbG9neSBDZW50ZXIKSW50ZWwgQ29ycG9yYXRpb24KX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==