From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 15/41] drm/i915: Use a radixtree for random access to the object's backing storage Date: Thu, 20 Oct 2016 16:55:47 +0100 Message-ID: <6bea716b-7d19-a05b-e64a-46e0642ae043@linux.intel.com> References: <20161020150423.4560-1-chris@chris-wilson.co.uk> <20161020150423.4560-16-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 mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1EA836E1EC for ; Thu, 20 Oct 2016 15:55:58 +0000 (UTC) In-Reply-To: <20161020150423.4560-16-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 Ck9uIDIwLzEwLzIwMTYgMTY6MDMsIENocmlzIFdpbHNvbiB3cm90ZToKPiBBIHdoaWxlIGFnbyB3 ZSBzd2l0Y2hlZCBmcm9tIGEgY29udGlndW91cyBhcnJheSBvZiBwYWdlcyBpbnRvIGFuIHNnbGlz dCwKPiBmb3IgdGhhdCB3YXMgYm90aCBtb3JlIGNvbnZlbmllbnQgZm9yIG1hcHBpbmcgdG8gaGFy ZHdhcmUgYW5kIGF2b2lkZWQKPiB0aGUgcmVxdWlyZW1lbnQgZm9yIGEgdm1hbGxvYyBhcnJheSBv ZiBwYWdlcyBvbiBldmVyeSBvYmplY3QuIEhvd2V2ZXIsCj4gY2VydGFpbiBHRU0gQVBJIGNhbGxz IChsaWtlIHB3cml0ZSwgcHJlYWQgYXMgd2VsbCBhcyBwZXJmb3JtaW5nCj4gcmVsb2NhdGlvbnMp IGRvIGRlc2lyZSBhY2Nlc3MgdG8gaW5kaXZpZHVhbCBzdHJ1Y3QgcGFnZXMuIEEgcXVpY2sgaGFj awo+IHdhcyB0byBpbnRyb2R1Y2UgYSBjYWNoZSBvZiB0aGUgbGFzdCBhY2Nlc3Mgc3VjaCB0aGF0 IGZpbmRpbmcgdGhlCj4gZm9sbG93aW5nIHBhZ2Ugd2FzIHF1aWNrIC0gdGhpcyB3b3JrcyBzbyBs b25nIGFzIHRoZSBjYWxsZXIgZGVzaXJlZAo+IHNlcXVlbnRpYWwgYWNjZXNzLiBXYWxraW5nIGJh Y2t3YXJkcywgb3IgbXVsdGlwbGUgY2FsbGVycywgc3RpbGwgaGl0cyBhCj4gc2xvdyBsaW5lYXIg c2VhcmNoIGZvciBlYWNoIHBhZ2UuIE9uZSBzb2x1dGlvbiBpcyB0byBzdG9yZSBlYWNoCj4gc3Vj Y2Vzc2Z1bCBsb29rdXAgaW4gYSByYWRpeCB0cmVlLgo+Cj4gdjI6IFJld3JpdGUgYnVpbGRpbmcg dGhlIHJhZGl4dHJlZSBmb3IgY2xhcml0eSwgaG9wZWZ1bGx5Lgo+Cj4gdjM6IFJlYXJyYW5nZSBl eGVjYnVmIHRvIGF2b2lkIGNhbGxpbmcgaTkxNV9nZW1fb2JqZWN0X2dldF9zZygpIGZyb20KPiB3 aXRoaW4gYW4gYXRvbWljIHNlY3Rpb24gYW5kIHNvIHJlbGF4IHRoZSBhbGxvY2F0aW9uIGNvbnRl eHQgdG8gYSBzaW1wbGUKPiBHRlBfS0VSTkVMIGFuZCBtdXRleC4KPgo+IFNpZ25lZC1vZmYtYnk6 IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IC0tLQo+ICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgfCAgNjkgKysrKystLS0tLS0tCj4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAgICAgICB8IDE4NSArKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zdG9s ZW4uYyAgfCAgIDQgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5j IHwgICA0ICstCj4gIDQgZmlsZXMgY2hhbmdlZCwgMTk5IGluc2VydGlvbnMoKyksIDYzIGRlbGV0 aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2Lmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggMDg5N2Y0M2U3Nzk2Li5l MmU0OGFmOGQ0MWYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAtMjI3Myw5ICsy MjczLDEyIEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0IHsKPgo+ICAJc3RydWN0IHNnX3Rh YmxlICpwYWdlczsKPiAgCWludCBwYWdlc19waW5fY291bnQ7Cj4gLQlzdHJ1Y3QgZ2V0X3BhZ2Ug ewo+IC0JCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Cj4gLQkJaW50IGxhc3Q7Cj4gKwlzdHJ1Y3Qg aTkxNV9nZW1fb2JqZWN0X3BhZ2VfaXRlciB7Cj4gKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19w b3M7Cj4gKwkJdW5zaWduZWQgaW50IHNnX2lkeDsgLyogaW4gcGFnZXMsIGJ1dCAzMmJpdCBlZWsh ICovCj4gKwo+ICsJCXN0cnVjdCByYWRpeF90cmVlX3Jvb3QgcmFkaXg7Cj4gKwkJc3RydWN0IG11 dGV4IGxvY2s7IC8qIHByb3RlY3RzIHRoaXMgY2FjaGUgKi8KPiAgCX0gZ2V0X3BhZ2U7Cj4gIAl2 b2lkICptYXBwaW5nOwo+Cj4gQEAgLTI0NzgsNiArMjQ4MSwxNCBAQCBzdGF0aWMgX19hbHdheXNf aW5saW5lIHN0cnVjdCBzZ3RfaXRlciB7Cj4gIAlyZXR1cm4gczsKPiAgfQo+Cj4gK3N0YXRpYyBp bmxpbmUgc3RydWN0IHNjYXR0ZXJsaXN0ICpfX19fc2dfbmV4dChzdHJ1Y3Qgc2NhdHRlcmxpc3Qg KnNnKQo+ICt7Cj4gKwkrK3NnOwo+ICsJaWYgKHVubGlrZWx5KHNnX2lzX2NoYWluKHNnKSkpCj4g KwkJc2cgPSBzZ19jaGFpbl9wdHIoc2cpOwo+ICsJcmV0dXJuIHNnOwo+ICt9Cj4gKwo+ICAvKioK PiAgICogX19zZ19uZXh0IC0gcmV0dXJuIHRoZSBuZXh0IHNjYXR0ZXJsaXN0IGVudHJ5IGluIGEg bGlzdAo+ICAgKiBAc2c6CQlUaGUgY3VycmVudCBzZyBlbnRyeQo+IEBAIC0yNDkyLDkgKzI1MDMs NyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBzY2F0dGVybGlzdCAqX19zZ19uZXh0KHN0cnVjdCBz Y2F0dGVybGlzdCAqc2cpCj4gICNpZmRlZiBDT05GSUdfREVCVUdfU0cKPiAgCUJVR19PTihzZy0+ c2dfbWFnaWMgIT0gU0dfTUFHSUMpOwo+ICAjZW5kaWYKPiAtCXJldHVybiBzZ19pc19sYXN0KHNn KSA/IE5VTEwgOgo+IC0JCWxpa2VseSghc2dfaXNfY2hhaW4oKytzZykpID8gc2cgOgo+IC0JCXNn X2NoYWluX3B0cihzZyk7Cj4gKwlyZXR1cm4gc2dfaXNfbGFzdChzZykgPyBOVUxMIDogX19fX3Nn X25leHQoc2cpOwo+ICB9Cj4KPiAgLyoqCj4gQEAgLTMxNzIsNDUgKzMxODEsMjEgQEAgc3RhdGlj IGlubGluZSBpbnQgX19zZ19wYWdlX2NvdW50KHN0cnVjdCBzY2F0dGVybGlzdCAqc2cpCj4gIAly ZXR1cm4gc2ctPmxlbmd0aCA+PiBQQUdFX1NISUZUOwo+ICB9Cj4KPiAtc3RydWN0IHBhZ2UgKgo+ IC1pOTE1X2dlbV9vYmplY3RfZ2V0X2RpcnR5X3BhZ2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwgaW50IG4pOwo+IC0KPiAtc3RhdGljIGlubGluZSBkbWFfYWRkcl90Cj4gLWk5MTVf Z2VtX29iamVjdF9nZXRfZG1hX2FkZHJlc3Moc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwgaW50IG4pCj4gLXsKPiAtCWlmIChuIDwgb2JqLT5nZXRfcGFnZS5sYXN0KSB7Cj4gLQkJb2Jq LT5nZXRfcGFnZS5zZyA9IG9iai0+cGFnZXMtPnNnbDsKPiAtCQlvYmotPmdldF9wYWdlLmxhc3Qg PSAwOwo+IC0JfQo+IC0KPiAtCXdoaWxlIChvYmotPmdldF9wYWdlLmxhc3QgKyBfX3NnX3BhZ2Vf Y291bnQob2JqLT5nZXRfcGFnZS5zZykgPD0gbikgewo+IC0JCW9iai0+Z2V0X3BhZ2UubGFzdCAr PSBfX3NnX3BhZ2VfY291bnQob2JqLT5nZXRfcGFnZS5zZysrKTsKPiAtCQlpZiAodW5saWtlbHko c2dfaXNfY2hhaW4ob2JqLT5nZXRfcGFnZS5zZykpKQo+IC0JCQlvYmotPmdldF9wYWdlLnNnID0g c2dfY2hhaW5fcHRyKG9iai0+Z2V0X3BhZ2Uuc2cpOwo+IC0JfQo+ICtzdHJ1Y3Qgc2NhdHRlcmxp c3QgKgo+ICtpOTE1X2dlbV9vYmplY3RfZ2V0X3NnKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCj4gKwkJICAgICAgIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgKm9mZnNldCk7 Cj4KPiAtCXJldHVybiBzZ19kbWFfYWRkcmVzcyhvYmotPmdldF9wYWdlLnNnKSArICgobiAtIG9i ai0+Z2V0X3BhZ2UubGFzdCkgPDwgUEFHRV9TSElGVCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxp bmUgc3RydWN0IHBhZ2UgKgo+IC1pOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2Uoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaiwgaW50IG4pCj4gLXsKPiAtCWlmIChXQVJOX09OKG4gPj0gb2Jq LT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVCkpCj4gLQkJcmV0dXJuIE5VTEw7Cj4gLQo+IC0JaWYg KG4gPCBvYmotPmdldF9wYWdlLmxhc3QpIHsKPiAtCQlvYmotPmdldF9wYWdlLnNnID0gb2JqLT5w YWdlcy0+c2dsOwo+IC0JCW9iai0+Z2V0X3BhZ2UubGFzdCA9IDA7Cj4gLQl9Cj4gK3N0cnVjdCBw YWdlICoKPiAraTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCj4gKwkJCSB1bnNpZ25lZCBpbnQgbik7Cj4KPiAtCXdoaWxlIChvYmotPmdldF9w YWdlLmxhc3QgKyBfX3NnX3BhZ2VfY291bnQob2JqLT5nZXRfcGFnZS5zZykgPD0gbikgewo+IC0J CW9iai0+Z2V0X3BhZ2UubGFzdCArPSBfX3NnX3BhZ2VfY291bnQob2JqLT5nZXRfcGFnZS5zZysr KTsKPiAtCQlpZiAodW5saWtlbHkoc2dfaXNfY2hhaW4ob2JqLT5nZXRfcGFnZS5zZykpKQo+IC0J CQlvYmotPmdldF9wYWdlLnNnID0gc2dfY2hhaW5fcHRyKG9iai0+Z2V0X3BhZ2Uuc2cpOwo+IC0J fQo+ICtzdHJ1Y3QgcGFnZSAqCj4gK2k5MTVfZ2VtX29iamVjdF9nZXRfZGlydHlfcGFnZShzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJCQkgICAgICAgdW5zaWduZWQgaW50IG4p Owo+Cj4gLQlyZXR1cm4gbnRoX3BhZ2Uoc2dfcGFnZShvYmotPmdldF9wYWdlLnNnKSwgbiAtIG9i ai0+Z2V0X3BhZ2UubGFzdCk7Cj4gLX0KPiArZG1hX2FkZHJfdAo+ICtpOTE1X2dlbV9vYmplY3Rf Z2V0X2RtYV9hZGRyZXNzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCQl1 bnNpZ25lZCBsb25nIG4pOwo+Cj4gIHN0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X2dlbV9vYmplY3Rf cGluX3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gIHsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtLmMKPiBpbmRleCBkNTk2YjFmOWU5NjkuLmE5ZWEyMGQ1M2UyMyAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IEBAIC0yMzMzLDYgKzIzMzMsMTUgQEAgaTkxNV9nZW1f b2JqZWN0X3B1dF9wYWdlc19ndHQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAg CWtmcmVlKG9iai0+cGFnZXMpOwo+ICB9Cj4KPiArc3RhdGljIHZvaWQgX19pOTE1X2dlbV9vYmpl Y3RfcmVzZXRfcGFnZV9pdGVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gK3sK PiArCXN0cnVjdCByYWRpeF90cmVlX2l0ZXIgaXRlcjsKPiArCXZvaWQgKipzbG90Owo+ICsKPiAr CXJhZGl4X3RyZWVfZm9yX2VhY2hfc2xvdChzbG90LCAmb2JqLT5nZXRfcGFnZS5yYWRpeCwgJml0 ZXIsIDApCj4gKwkJcmFkaXhfdHJlZV9kZWxldGUoJm9iai0+Z2V0X3BhZ2UucmFkaXgsIGl0ZXIu aW5kZXgpOwo+ICt9Cj4gKwo+ICBpbnQKPiAgaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICB7Cj4gQEAgLTIzNjUsNiArMjM3NCw4IEBA IGk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aikKPiAgCQlvYmotPm1hcHBpbmcgPSBOVUxMOwo+ICAJfQo+Cj4gKwlfX2k5MTVfZ2VtX29iamVj dF9yZXNldF9wYWdlX2l0ZXIob2JqKTsKPiArCj4gIAlvcHMtPnB1dF9wYWdlcyhvYmopOwo+ICAJ b2JqLT5wYWdlcyA9IE5VTEw7Cj4KPiBAQCAtMjUzNCw4ICsyNTQ1LDggQEAgaTkxNV9nZW1fb2Jq ZWN0X2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+Cj4gIAlsaXN0 X2FkZF90YWlsKCZvYmotPmdsb2JhbF9saXN0LCAmZGV2X3ByaXYtPm1tLnVuYm91bmRfbGlzdCk7 Cj4KPiAtCW9iai0+Z2V0X3BhZ2Uuc2cgPSBvYmotPnBhZ2VzLT5zZ2w7Cj4gLQlvYmotPmdldF9w YWdlLmxhc3QgPSAwOwo+ICsJb2JqLT5nZXRfcGFnZS5zZ19wb3MgPSBvYmotPnBhZ2VzLT5zZ2w7 Cj4gKwlvYmotPmdldF9wYWdlLnNnX2lkeCA9IDA7Cj4KPiAgCXJldHVybiAwOwo+ICB9Cj4gQEAg LTQzMzgsNiArNDM0OSw4IEBAIHZvaWQgaTkxNV9nZW1fb2JqZWN0X2luaXQoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaiwKPgo+ICAJb2JqLT5mcm9udGJ1ZmZlcl9nZ3R0X29yaWdpbiA9 IE9SSUdJTl9HVFQ7Cj4gIAlvYmotPm1hZHYgPSBJOTE1X01BRFZfV0lMTE5FRUQ7Cj4gKwlJTklU X1JBRElYX1RSRUUoJm9iai0+Z2V0X3BhZ2UucmFkaXgsIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dB Uk4pOwo+ICsJbXV0ZXhfaW5pdCgmb2JqLT5nZXRfcGFnZS5sb2NrKTsKPgo+ICAJaTkxNV9nZW1f aW5mb19hZGRfb2JqKHRvX2k5MTUob2JqLT5iYXNlLmRldiksIG9iai0+YmFzZS5zaXplKTsKPiAg fQo+IEBAIC01MDMxLDIxICs1MDQ0LDYgQEAgdm9pZCBpOTE1X2dlbV90cmFja19mYihzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2xkLAo+ICAJfQo+ICB9Cj4KPiAtLyogTGlrZSBpOTE1X2dl bV9vYmplY3RfZ2V0X3BhZ2UoKSwgYnV0IG1hcmsgdGhlIHJldHVybmVkIHBhZ2UgZGlydHkgKi8K PiAtc3RydWN0IHBhZ2UgKgo+IC1pOTE1X2dlbV9vYmplY3RfZ2V0X2RpcnR5X3BhZ2Uoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgaW50IG4pCj4gLXsKPiAtCXN0cnVjdCBwYWdlICpw YWdlOwo+IC0KPiAtCS8qIE9ubHkgZGVmYXVsdCBvYmplY3RzIGhhdmUgcGVyLXBhZ2UgZGlydHkg dHJhY2tpbmcgKi8KPiAtCWlmIChXQVJOX09OKCFpOTE1X2dlbV9vYmplY3RfaGFzX3N0cnVjdF9w YWdlKG9iaikpKQo+IC0JCXJldHVybiBOVUxMOwo+IC0KPiAtCXBhZ2UgPSBpOTE1X2dlbV9vYmpl Y3RfZ2V0X3BhZ2Uob2JqLCBuKTsKPiAtCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwo+IC0JcmV0dXJu IHBhZ2U7Cj4gLX0KPiAtCj4gIC8qIEFsbG9jYXRlIGEgbmV3IEdFTSBvYmplY3QgYW5kIGZpbGwg aXQgd2l0aCB0aGUgc3VwcGxpZWQgZGF0YSAqLwo+ICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqCj4gIGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfZnJvbV9kYXRhKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCj4gQEAgLTUwODYsMyArNTA4NCwxNTYgQEAgaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9m cm9tX2RhdGEoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCWk5MTVfZ2VtX29iamVjdF9wdXQo b2JqKTsKPiAgCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gIH0KPiArCj4gK3N0cnVjdCBzY2F0dGVy bGlzdCAqCj4gK2k5MTVfZ2VtX29iamVjdF9nZXRfc2coc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKPiArCQkgICAgICAgdW5zaWduZWQgaW50IG4sCj4gKwkJICAgICAgIHVuc2lnbmVk IGludCAqb2Zmc2V0KQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9nZW1fb2JqZWN0X3BhZ2VfaXRlciAq aXRlciA9ICZvYmotPmdldF9wYWdlOwo+ICsJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKPiArCXVu c2lnbmVkIGludCBpZHgsIGNvdW50Owo+ICsKPiArCW1pZ2h0X3NsZWVwKCk7Cj4gKwlHRU1fQlVH X09OKG4gPj0gb2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVCk7Cj4gKwlHRU1fQlVHX09OKG9i ai0+cGFnZXNfcGluX2NvdW50ID09IDApOwo+ICsKPiArCS8qIEFzIHdlIGl0ZXJhdGUgZm9yd2Fy ZCB0aHJvdWdoIHRoZSBzZywgd2UgcmVjb3JkIGVhY2ggZW50cnkgaW4gYQo+ICsJICogcmFkaXh0 cmVlIGZvciBxdWljayByZXBlYXRlZCAoYmFja3dhcmRzKSBsb29rdXBzLiBJZiB3ZSBoYXZlIHNl ZW4KPiArCSAqIHRoaXMgaW5kZXggcHJldmlvdXNseSwgd2Ugd2lsbCBoYXZlIGFuIGVudHJ5IGZv ciBpdC4KPiArCSAqCj4gKwkgKiBJbml0aWFsIGxvb2t1cCBpcyBPKE4pLCBidXQgdGhpcyBpcyBh bW9ydGl6ZWQgdG8gTygxKSBmb3IKPiArCSAqIHNlcXVlbnRpYWwgcGFnZSBhY2Nlc3MgKHdoZXJl IGVhY2ggbmV3IHJlcXVlc3QgaXMgY29uc2VjdXRpdmUKPiArCSAqIHRvIHRoZSBwcmV2aW91cyBv bmUpLiBSZXBlYXRlZCBsb29rdXBzIGFyZSBPKGxnKG9iai0+YmFzZS5zaXplKSksCj4gKwkgKiBp LmUuIE8oMSkgd2l0aCBhIGxhcmdlIGNvbnN0YW50IQo+ICsJICovCj4gKwlpZiAobiA8IFJFQURf T05DRShpdGVyLT5zZ19pZHgpKQo+ICsJCWdvdG8gbG9va3VwOwo+ICsKPiArCW11dGV4X2xvY2so Jml0ZXItPmxvY2spOwo+ICsKPiArCS8qIFdlIHByZWZlciB0byByZXVzZSB0aGUgbGFzdCBzZyBz byB0aGF0IHJlcGVhdGVkIGxvb2t1cCBvZiB0aGlzCj4gKwkgKiAob3IgdGhlIHN1YnNlcXVlbnQp IHNnIGFyZSBmYXN0IC0gY29tcGFyaW5nIGFnYWluc3QgdGhlIGxhc3QKPiArCSAqIHNnIGlzIGZh c3RlciB0aGFuIGdvaW5nIHRocm91Z2ggdGhlIHJhZGl4dHJlZS4KPiArCSAqLwo+ICsKPiArCXNn ID0gaXRlci0+c2dfcG9zOwo+ICsJaWR4ID0gaXRlci0+c2dfaWR4Owo+ICsJY291bnQgPSBfX3Nn X3BhZ2VfY291bnQoc2cpOwo+ICsKPiArCXdoaWxlIChpZHggKyBjb3VudCA8PSBuKSB7Cj4gKwkJ dW5zaWduZWQgbG9uZyBleGNlcHRpb24sIGk7Cj4gKwkJaW50IHJldDsKPiArCj4gKwkJLyogSWYg d2UgY2Fubm90IGFsbG9jYXRlIGFuZCBpbnNlcnQgdGhpcyBlbnRyeSwgb3IgdGhlCj4gKwkJICog aW5kaXZpZHVhbCBwYWdlcyBmcm9tIHRoaXMgcmFuZ2UsIGNhbmNlbCB1cGRhdGluZyB0aGUKPiAr CQkgKiBzZ19pZHggc28gdGhhdCBvbiB0aGlzIGxvb2t1cCB3ZSBhcmUgZm9yY2VkIHRvIGxpbmVh cmx5Cj4gKwkJICogc2NhbiBvbndhcmRzLCBidXQgb24gZnV0dXJlIGxvb2t1cHMgd2Ugd2lsbCB0 cnkgdGhlCj4gKwkJICogaW5zZXJ0aW9uIGFnYWluIChpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8g YmUgY2FyZWZ1bCBvZgo+ICsJCSAqIHRoZSBlcnJvciByZXR1cm4gcmVwb3J0aW5nIHRoYXQgd2Ug aGF2ZSBhbHJlYWR5IGluc2VydGVkCj4gKwkJICogdGhpcyBpbmRleCkuCj4gKwkJICovCj4gKwkJ cmV0ID0gcmFkaXhfdHJlZV9pbnNlcnQoJml0ZXItPnJhZGl4LCBpZHgsIHNnKTsKPiArCQlpZiAo cmV0ICYmIHJldCAhPSAtRUVYSVNUKQo+ICsJCQlnb3RvIHNjYW47Cj4gKwo+ICsJCWV4Y2VwdGlv biA9Cj4gKwkJCVJBRElYX1RSRUVfRVhDRVBUSU9OQUxfRU5UUlkgfAo+ICsJCQlpZHggPDwgUkFE SVhfVFJFRV9FWENFUFRJT05BTF9TSElGVDsKPiArCQlmb3IgKGkgPSAxOyBpIDwgY291bnQ7IGkr Kykgewo+ICsJCQlyZXQgPSByYWRpeF90cmVlX2luc2VydCgmaXRlci0+cmFkaXgsIGlkeCArIGks Cj4gKwkJCQkJCSh2b2lkICopZXhjZXB0aW9uKTsKPiArCQkJaWYgKHJldCAmJiByZXQgIT0gLUVF WElTVCkKPiArCQkJCWdvdG8gc2NhbjsKPiArCQl9Cj4gKwo+ICsJCWlkeCArPSBjb3VudDsKPiAr CQlzZyA9IF9fX19zZ19uZXh0KHNnKTsKPiArCQljb3VudCA9IF9fc2dfcGFnZV9jb3VudChzZyk7 Cj4gKwl9Cj4gKwo+ICtzY2FuOgo+ICsJaXRlci0+c2dfcG9zID0gc2c7Cj4gKwlpdGVyLT5zZ19p ZHggPSBpZHg7Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZpdGVyLT5sb2NrKTsKPiArCj4gKwlpZiAo dW5saWtlbHkobiA8IGlkeCkpIC8qIGluc2VydGlvbiBjb21wbGV0ZWQgYnkgYW5vdGhlciB0aHJl YWQgKi8KPiArCQlnb3RvIGxvb2t1cDsKPiArCj4gKwkvKiBJbiBjYXNlIHdlIGZhaWxlZCB0byBp bnNlcnQgdGhlIGVudHJ5IGludG8gdGhlIHJhZGl4dHJlZSwgd2UgbmVlZAo+ICsJICogdG8gbG9v ayBiZXlvbmQgdGhlIGN1cnJlbnQgc2cuCj4gKwkgKi8KPiArCXdoaWxlIChpZHggKyBjb3VudCA8 PSBuKSB7Cj4gKwkJaWR4ICs9IGNvdW50Owo+ICsJCXNnID0gX19fX3NnX25leHQoc2cpOwo+ICsJ CWNvdW50ID0gX19zZ19wYWdlX2NvdW50KHNnKTsKPiArCX0KPiArCj4gKwkqb2Zmc2V0ID0gbiAt IGlkeDsKPiArCXJldHVybiBzZzsKPiArCj4gK2xvb2t1cDoKPiArCXJjdV9yZWFkX2xvY2soKTsK PiArCj4gKwlzZyA9IHJhZGl4X3RyZWVfbG9va3VwKCZpdGVyLT5yYWRpeCwgbik7Cj4gKwlHRU1f QlVHX09OKCFzZyk7Cj4gKwo+ICsJLyogSWYgdGhpcyBpbmRleCBpcyBpbiB0aGUgbWlkZGxlIG9m IG11bHRpLXBhZ2Ugc2cgZW50cnksCj4gKwkgKiB0aGUgcmFkaXh0cmVlIHdpbGwgY29udGFpbiBh biBleGNlcHRpb25hbCBlbnRyeSB0aGF0IHBvaW50cwo+ICsJICogdG8gdGhlIHN0YXJ0IG9mIHRo YXQgcmFuZ2UuIFdlIHdpbGwgcmV0dXJuIHRoZSBwb2ludGVyIHRvCj4gKwkgKiB0aGUgYmFzZSBw YWdlIGFuZCB0aGUgb2Zmc2V0IG9mIHRoaXMgcGFnZSB3aXRoaW4gdGhlCj4gKwkgKiBzZyBlbnRy eSdzIHJhbmdlLgo+ICsJICovCj4gKwkqb2Zmc2V0ID0gMDsKPiArCWlmICh1bmxpa2VseShyYWRp eF90cmVlX2V4Y2VwdGlvbihzZykpKSB7Cj4gKwkJdW5zaWduZWQgbG9uZyBiYXNlID0KPiArCQkJ KHVuc2lnbmVkIGxvbmcpc2cgPj4gUkFESVhfVFJFRV9FWENFUFRJT05BTF9TSElGVDsKPiArCj4g KwkJc2cgPSByYWRpeF90cmVlX2xvb2t1cCgmaXRlci0+cmFkaXgsIGJhc2UpOwo+ICsJCUdFTV9C VUdfT04oIXNnKTsKPiArCj4gKwkJKm9mZnNldCA9IG4gLSBiYXNlOwo+ICsJfQo+ICsKPiArCXJj dV9yZWFkX3VubG9jaygpOwo+ICsKPiArCXJldHVybiBzZzsKPiArfQo+ICsKPiArc3RydWN0IHBh Z2UgKgo+ICtpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwgdW5zaWduZWQgaW50IG4pCj4gK3sKPiArCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7 Cj4gKwl1bnNpZ25lZCBpbnQgb2Zmc2V0Owo+ICsKPiArCUdFTV9CVUdfT04oIWk5MTVfZ2VtX29i amVjdF9oYXNfc3RydWN0X3BhZ2Uob2JqKSk7Cj4gKwo+ICsJc2cgPSBpOTE1X2dlbV9vYmplY3Rf Z2V0X3NnKG9iaiwgbiwgJm9mZnNldCk7Cj4gKwlyZXR1cm4gbnRoX3BhZ2Uoc2dfcGFnZShzZyks IG9mZnNldCk7Cj4gK30KPiArCj4gKy8qIExpa2UgaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKCks IGJ1dCBtYXJrIHRoZSByZXR1cm5lZCBwYWdlIGRpcnR5ICovCj4gK3N0cnVjdCBwYWdlICoKPiAr aTkxNV9nZW1fb2JqZWN0X2dldF9kaXJ0eV9wYWdlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCj4gKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgbikKPiArewo+ICsJc3RydWN0IHBhZ2Ug KnBhZ2U7Cj4gKwo+ICsJcGFnZSA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShvYmosIG4pOwo+ ICsJaWYgKCFvYmotPmRpcnR5KQo+ICsJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwo+ICsKPiArCXJl dHVybiBwYWdlOwo+ICt9Cj4gKwo+ICtkbWFfYWRkcl90Cj4gK2k5MTVfZ2VtX29iamVjdF9nZXRf ZG1hX2FkZHJlc3Moc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiArCQkJCXVuc2ln bmVkIGxvbmcgbikKPiArewo+ICsJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKPiArCXVuc2lnbmVk IGludCBvZmZzZXQ7Cj4gKwo+ICsJc2cgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3NnKG9iaiwgbiwg Jm9mZnNldCk7Cj4gKwlyZXR1cm4gc2dfZG1hX2FkZHJlc3Moc2cpICsgKG9mZnNldCA8PCBQQUdF X1NISUZUKTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9zdG9sZW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5jCj4gaW5k ZXggZjRmNmQzYTQ4YjA1Li43MGU2MWJjMzVjNjAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9zdG9sZW4uYwo+IEBAIC01OTUsOCArNTk1LDggQEAgX2k5MTVfZ2VtX29iamVjdF9j cmVhdGVfc3RvbGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAlpZiAob2JqLT5wYWdlcyA9 PSBOVUxMKQo+ICAJCWdvdG8gY2xlYW51cDsKPgo+IC0Jb2JqLT5nZXRfcGFnZS5zZyA9IG9iai0+ cGFnZXMtPnNnbDsKPiAtCW9iai0+Z2V0X3BhZ2UubGFzdCA9IDA7Cj4gKwlvYmotPmdldF9wYWdl LnNnX3BvcyA9IG9iai0+cGFnZXMtPnNnbDsKPiArCW9iai0+Z2V0X3BhZ2Uuc2dfaWR4ID0gMDsK Pgo+ICAJaTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyhvYmopOwo+ICAJb2JqLT5zdG9sZW4gPSBz dG9sZW47Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJw dHIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYwo+IGluZGV4IDFj ODkxYjkyYWM4MC4uY2I5NTc4OWRhNzZlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX3VzZXJwdHIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX3VzZXJwdHIuYwo+IEBAIC01MjYsOCArNTI2LDggQEAgX19pOTE1X2dlbV91c2VycHRyX2dl dF9wYWdlc193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICpfd29yaykKPiAgCQkJaWYgKHJldCA9 PSAwKSB7Cj4gIAkJCQlsaXN0X2FkZF90YWlsKCZvYmotPmdsb2JhbF9saXN0LAo+ICAJCQkJCSAg ICAgICZ0b19pOTE1KGRldiktPm1tLnVuYm91bmRfbGlzdCk7Cj4gLQkJCQlvYmotPmdldF9wYWdl LnNnID0gb2JqLT5wYWdlcy0+c2dsOwo+IC0JCQkJb2JqLT5nZXRfcGFnZS5sYXN0ID0gMDsKPiAr CQkJCW9iai0+Z2V0X3BhZ2Uuc2dfcG9zID0gb2JqLT5wYWdlcy0+c2dsOwo+ICsJCQkJb2JqLT5n ZXRfcGFnZS5zZ19pZHggPSAwOwo+ICAJCQkJcGlubmVkID0gMDsKPiAgCQkJfQo+ICAJCX0KPgoK UmV2aWV3ZWQtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+CgpS ZWdhcmRzLAoKVHZydGtvCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeAo=