From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 14/42] drm/i915: Use a radixtree for random access to the object's backing storage Date: Tue, 11 Oct 2016 10:32:10 +0100 Message-ID: <27ae781e-e121-8262-b170-2cb83b8f8cb0@linux.intel.com> References: <20161007094635.28319-1-chris@chris-wilson.co.uk> <20161007094635.28319-15-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 mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id B74996E28E for ; Tue, 11 Oct 2016 09:32:14 +0000 (UTC) In-Reply-To: <20161007094635.28319-15-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 Ck9uIDA3LzEwLzIwMTYgMTA6NDYsIENocmlzIFdpbHNvbiB3cm90ZToKPiBBIHdoaWxlIGFnbyB3 ZSBzd2l0Y2hlZCBmcm9tIGEgY29udGlndW91cyBhcnJheSBvZiBwYWdlcyBpbnRvIGFuIHNnbGlz dCwKPiBmb3IgdGhhdCB3YXMgYm90aCBtb3JlIGNvbnZlbmllbnQgZm9yIG1hcHBpbmcgdG8gaGFy ZHdhcmUgYW5kIGF2b2lkZWQKPiB0aGUgcmVxdWlyZW1lbnQgZm9yIGEgdm1hbGxvYyBhcnJheSBv ZiBwYWdlcyBvbiBldmVyeSBvYmplY3QuIEhvd2V2ZXIsCj4gY2VydGFpbiBHRU0gQVBJIGNhbGxz IChsaWtlIHB3cml0ZSwgcHJlYWQgYXMgd2VsbCBhcyBwZXJmb3JtaW5nCj4gcmVsb2NhdGlvbnMp IGRvIGRlc2lyZSBhY2Nlc3MgdG8gaW5kaXZpZHVhbCBzdHJ1Y3QgcGFnZXMuIEEgcXVpY2sgaGFj awo+IHdhcyB0byBpbnRyb2R1Y2UgYSBjYWNoZSBvZiB0aGUgbGFzdCBhY2Nlc3Mgc3VjaCB0aGF0 IGZpbmRpbmcgdGhlCj4gZm9sbG93aW5nIHBhZ2Ugd2FzIHF1aWNrIC0gdGhpcyB3b3JrcyBzbyBs b25nIGFzIHRoZSBjYWxsZXIgZGVzaXJlZAo+IHNlcXVlbnRpYWwgYWNjZXNzLiBXYWxraW5nIGJh Y2t3YXJkcywgb3IgbXVsdGlwbGUgY2FsbGVycywgc3RpbGwgaGl0cyBhCj4gc2xvdyBsaW5lYXIg c2VhcmNoIGZvciBlYWNoIHBhZ2UuIE9uZSBzb2x1dGlvbiBpcyB0byBzdG9yZSBlYWNoCj4gc3Vj Y2Vzc2Z1bCBsb29rdXAgaW4gYSByYWRpeCB0cmVlLgo+Cj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMg V2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgfCAgNTcgKysrKy0tLS0tLS0tCj4gICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgfCAxNDkgKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0tLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5j ICB8ICAgNCArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jIHwg ICA0ICstCj4gICA0IGZpbGVzIGNoYW5nZWQsIDE1NCBpbnNlcnRpb25zKCspLCA2MCBkZWxldGlv bnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IGluZGV4IGJhZDk3ZjFlNTI2NS4uYTk2 YjQ0NmQ4ZGI0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAgLTIyNzgsOSArMjI3 OCwxMiBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7Cj4gICAKPiAgIAlzdHJ1Y3Qgc2df dGFibGUgKnBhZ2VzOwo+ICAgCWludCBwYWdlc19waW5fY291bnQ7Cj4gLQlzdHJ1Y3QgZ2V0X3Bh Z2Ugewo+IC0JCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Cj4gLQkJaW50IGxhc3Q7Cj4gKwlzdHJ1 Y3QgaTkxNV9nZW1fb2JqZWN0X3BhZ2VfaXRlciB7Cj4gKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpz Z19wb3M7Cj4gKwkJdW5zaWduZWQgbG9uZyBzZ19pZHg7Cj4gKwo+ICsJCXN0cnVjdCByYWRpeF90 cmVlX3Jvb3QgcmFkaXg7Cj4gKwkJc3RydWN0IG11dGV4IGxvY2s7Cj4gICAJfSBnZXRfcGFnZTsK PiAgIAl2b2lkICptYXBwaW5nOwo+ICAgCj4gQEAgLTMxNjgsNDUgKzMxNzEsMjEgQEAgc3RhdGlj IGlubGluZSBpbnQgX19zZ19wYWdlX2NvdW50KHN0cnVjdCBzY2F0dGVybGlzdCAqc2cpCj4gICAJ cmV0dXJuIHNnLT5sZW5ndGggPj4gUEFHRV9TSElGVDsKPiAgIH0KPiAgIAo+IC1zdHJ1Y3QgcGFn ZSAqCj4gLWk5MTVfZ2VtX29iamVjdF9nZXRfZGlydHlfcGFnZShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLCBpbnQgbik7Cj4gLQo+IC1zdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKPiAt aTkxNV9nZW1fb2JqZWN0X2dldF9kbWFfYWRkcmVzcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqLCBpbnQgbikKPiAtewo+IC0JaWYgKG4gPCBvYmotPmdldF9wYWdlLmxhc3QpIHsKPiAt CQlvYmotPmdldF9wYWdlLnNnID0gb2JqLT5wYWdlcy0+c2dsOwo+IC0JCW9iai0+Z2V0X3BhZ2Uu bGFzdCA9IDA7Cj4gLQl9Cj4gLQo+IC0Jd2hpbGUgKG9iai0+Z2V0X3BhZ2UubGFzdCArIF9fc2df cGFnZV9jb3VudChvYmotPmdldF9wYWdlLnNnKSA8PSBuKSB7Cj4gLQkJb2JqLT5nZXRfcGFnZS5s YXN0ICs9IF9fc2dfcGFnZV9jb3VudChvYmotPmdldF9wYWdlLnNnKyspOwo+IC0JCWlmICh1bmxp a2VseShzZ19pc19jaGFpbihvYmotPmdldF9wYWdlLnNnKSkpCj4gLQkJCW9iai0+Z2V0X3BhZ2Uu c2cgPSBzZ19jaGFpbl9wdHIob2JqLT5nZXRfcGFnZS5zZyk7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJu IHNnX2RtYV9hZGRyZXNzKG9iai0+Z2V0X3BhZ2Uuc2cpICsgKChuIC0gb2JqLT5nZXRfcGFnZS5s YXN0KSA8PCBQQUdFX1NISUZUKTsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFn ZSAqCj4gLWk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqLCBpbnQgbikKPiAtewo+IC0JaWYgKFdBUk5fT04obiA+PSBvYmotPmJhc2Uuc2l6ZSA+ PiBQQUdFX1NISUZUKSkKPiAtCQlyZXR1cm4gTlVMTDsKPiArc3RydWN0IHNjYXR0ZXJsaXN0ICoK PiAraTkxNV9nZW1fb2JqZWN0X2dldF9zZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq LAo+ICsJCSAgICAgICB1bnNpZ25lZCBsb25nIG4sIHVuc2lnbmVkIGludCAqb2Zmc2V0KTsKPiAg IAo+IC0JaWYgKG4gPCBvYmotPmdldF9wYWdlLmxhc3QpIHsKPiAtCQlvYmotPmdldF9wYWdlLnNn ID0gb2JqLT5wYWdlcy0+c2dsOwo+IC0JCW9iai0+Z2V0X3BhZ2UubGFzdCA9IDA7Cj4gLQl9Cj4g K3N0cnVjdCBwYWdlICoKPiAraTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCSB1bnNpZ25lZCBsb25nIG4pOwo+ICAgCj4gLQl3aGls ZSAob2JqLT5nZXRfcGFnZS5sYXN0ICsgX19zZ19wYWdlX2NvdW50KG9iai0+Z2V0X3BhZ2Uuc2cp IDw9IG4pIHsKPiAtCQlvYmotPmdldF9wYWdlLmxhc3QgKz0gX19zZ19wYWdlX2NvdW50KG9iai0+ Z2V0X3BhZ2Uuc2crKyk7Cj4gLQkJaWYgKHVubGlrZWx5KHNnX2lzX2NoYWluKG9iai0+Z2V0X3Bh Z2Uuc2cpKSkKPiAtCQkJb2JqLT5nZXRfcGFnZS5zZyA9IHNnX2NoYWluX3B0cihvYmotPmdldF9w YWdlLnNnKTsKPiAtCX0KPiArc3RydWN0IHBhZ2UgKgo+ICtpOTE1X2dlbV9vYmplY3RfZ2V0X2Rp cnR5X3BhZ2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiArCQkJICAgICAgIHVu c2lnbmVkIGxvbmcgbik7Cj4gICAKPiAtCXJldHVybiBudGhfcGFnZShzZ19wYWdlKG9iai0+Z2V0 X3BhZ2Uuc2cpLCBuIC0gb2JqLT5nZXRfcGFnZS5sYXN0KTsKPiAtfQo+ICtkbWFfYWRkcl90Cj4g K2k5MTVfZ2VtX29iamVjdF9nZXRfZG1hX2FkZHJlc3Moc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKPiArCQkJCXVuc2lnbmVkIGxvbmcgbik7Cj4gICAKPiAgIHN0YXRpYyBpbmxpbmUg dm9pZCBpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmopCj4gICB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gaW5kZXggYWRhODM3ZTM5M2E3 Li5hZjdkNTFmMTY2NTggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBAQCAtMjI5Miw2 ICsyMjkyLDE1IEBAIGk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXNfZ3R0KHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopCj4gICAJa2ZyZWUob2JqLT5wYWdlcyk7Cj4gICB9Cj4gICAKPiAr c3RhdGljIHZvaWQgX19pOTE1X2dlbV9vYmplY3RfcmVzZXRfcGFnZV9pdGVyKHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gK3sKPiArCXN0cnVjdCByYWRpeF90cmVlX2l0ZXIgaXRl cjsKPiArCXZvaWQgKipzbG90Owo+ICsKPiArCXJhZGl4X3RyZWVfZm9yX2VhY2hfc2xvdChzbG90 LCAmb2JqLT5nZXRfcGFnZS5yYWRpeCwgJml0ZXIsIDApCj4gKwkJcmFkaXhfdHJlZV9kZWxldGUo Jm9iai0+Z2V0X3BhZ2UucmFkaXgsIGl0ZXIuaW5kZXgpOwo+ICt9Cj4gKwo+ICAgaW50Cj4gICBp OTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmop Cj4gICB7Cj4gQEAgLTIzMjQsNiArMjMzMyw4IEBAIGk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIAkJb2JqLT5tYXBwaW5nID0gTlVM TDsKPiAgIAl9Cj4gICAKPiArCV9faTkxNV9nZW1fb2JqZWN0X3Jlc2V0X3BhZ2VfaXRlcihvYmop Owo+ICsKPiAgIAlvcHMtPnB1dF9wYWdlcyhvYmopOwo+ICAgCW9iai0+cGFnZXMgPSBOVUxMOwo+ ICAgCj4gQEAgLTI0ODgsOCArMjQ5OSw4IEBAIGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIAo+ICAgCWxpc3RfYWRkX3RhaWwoJm9i ai0+Z2xvYmFsX2xpc3QsICZkZXZfcHJpdi0+bW0udW5ib3VuZF9saXN0KTsKPiAgIAo+IC0Jb2Jq LT5nZXRfcGFnZS5zZyA9IG9iai0+cGFnZXMtPnNnbDsKPiAtCW9iai0+Z2V0X3BhZ2UubGFzdCA9 IDA7Cj4gKwlvYmotPmdldF9wYWdlLnNnX3BvcyA9IG9iai0+cGFnZXMtPnNnbDsKPiArCW9iai0+ Z2V0X3BhZ2Uuc2dfaWR4ID0gMDsKPiAgIAo+ICAgCXJldHVybiAwOwo+ICAgfQo+IEBAIC00MjQy LDYgKzQyNTMsOCBAQCB2b2lkIGk5MTVfZ2VtX29iamVjdF9pbml0KHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmosCj4gICAKPiAgIAlvYmotPmZyb250YnVmZmVyX2dndHRfb3JpZ2luID0g T1JJR0lOX0dUVDsKPiAgIAlvYmotPm1hZHYgPSBJOTE1X01BRFZfV0lMTE5FRUQ7Cj4gKwlJTklU X1JBRElYX1RSRUUoJm9iai0+Z2V0X3BhZ2UucmFkaXgsIEdGUF9LRVJORUwpOwo+ICsJbXV0ZXhf aW5pdCgmb2JqLT5nZXRfcGFnZS5sb2NrKTsKPiAgIAo+ICAgCWk5MTVfZ2VtX2luZm9fYWRkX29i aih0b19pOTE1KG9iai0+YmFzZS5kZXYpLCBvYmotPmJhc2Uuc2l6ZSk7Cj4gICB9Cj4gQEAgLTQ5 MDQsMjEgKzQ5MTcsNiBAQCB2b2lkIGk5MTVfZ2VtX3RyYWNrX2ZiKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvbGQsCj4gICAJfQo+ICAgfQo+ICAgCj4gLS8qIExpa2UgaTkxNV9nZW1fb2Jq ZWN0X2dldF9wYWdlKCksIGJ1dCBtYXJrIHRoZSByZXR1cm5lZCBwYWdlIGRpcnR5ICovCj4gLXN0 cnVjdCBwYWdlICoKPiAtaTkxNV9nZW1fb2JqZWN0X2dldF9kaXJ0eV9wYWdlKHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmosIGludCBuKQo+IC17Cj4gLQlzdHJ1Y3QgcGFnZSAqcGFnZTsK PiAtCj4gLQkvKiBPbmx5IGRlZmF1bHQgb2JqZWN0cyBoYXZlIHBlci1wYWdlIGRpcnR5IHRyYWNr aW5nICovCj4gLQlpZiAoV0FSTl9PTighaTkxNV9nZW1fb2JqZWN0X2hhc19zdHJ1Y3RfcGFnZShv YmopKSkKPiAtCQlyZXR1cm4gTlVMTDsKPiAtCj4gLQlwYWdlID0gaTkxNV9nZW1fb2JqZWN0X2dl dF9wYWdlKG9iaiwgbik7Cj4gLQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKPiAtCXJldHVybiBwYWdl Owo+IC19Cj4gLQo+ICAgLyogQWxsb2NhdGUgYSBuZXcgR0VNIG9iamVjdCBhbmQgZmlsbCBpdCB3 aXRoIHRoZSBzdXBwbGllZCBkYXRhICovCj4gICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq Cj4gICBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2Zyb21fZGF0YShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAo+IEBAIC00OTU5LDMgKzQ5NTcsMTIwIEBAIGZhaWw6Cj4gICAJaTkxNV9nZW1fb2JqZWN0 X3B1dChvYmopOwo+ICAgCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gICB9Cj4gKwo+ICtzdGF0aWMg c3RydWN0IHNjYXR0ZXJsaXN0ICoKPiArX19pOTE1X2dlbV9vYmplY3RfZ2V0X3NnKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCSB1bnNpZ25lZCBsb25nIG4sIHVuc2lnbmVk IGludCAqb2Zmc2V0KQo+ICt7Cj4gKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gb2JqLT5wYWdl cy0+c2dsOwo+ICsJaW50IGlkeCA9IDA7Cj4gKwo+ICsJd2hpbGUgKGlkeCArIF9fc2dfcGFnZV9j b3VudChzZykgPD0gbikgewo+ICsJCWlkeCArPSBfX3NnX3BhZ2VfY291bnQoc2crKyk7Cj4gKwkJ aWYgKHVubGlrZWx5KHNnX2lzX2NoYWluKHNnKSkpCj4gKwkJCXNnID0gc2dfY2hhaW5fcHRyKHNn KTsKPiArCX0KPiArCj4gKwkqb2Zmc2V0ID0gbiAtIGlkeDsKPiArCXJldHVybiBzZzsKPiArfQo+ ICsKPiArc3RydWN0IHNjYXR0ZXJsaXN0ICoKPiAraTkxNV9nZW1fb2JqZWN0X2dldF9zZyhzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJCSAgICAgICB1bnNpZ25lZCBsb25nIG4s Cj4gKwkJICAgICAgIHVuc2lnbmVkIGludCAqb2Zmc2V0KQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9n ZW1fb2JqZWN0X3BhZ2VfaXRlciAqaXRlciA9ICZvYmotPmdldF9wYWdlOwo+ICsJc3RydWN0IHNj YXR0ZXJsaXN0ICpzZzsKPiArCj4gKwlHRU1fQlVHX09OKG4gPj0gb2JqLT5iYXNlLnNpemUgPj4g UEFHRV9TSElGVCk7Cj4gKwlHRU1fQlVHX09OKG9iai0+cGFnZXNfcGluX2NvdW50ID09IDApOwo+ ICsKPiArCWlmIChuIDwgUkVBRF9PTkNFKGl0ZXItPnNnX2lkeCkpCj4gKwkJZ290byBsb29rdXA7 Cj4gKwoKT2ssIHNvIG9uIGxvb2t1cCBvZiAibiIgeW91IGJ1aWxkIHRoZSByYWRpeCB0cmVlIGZv ciBhbGwgc2cgZW50cmllcyBmcm9tIAp6ZXJvIHRvIG4uIFRoZXJlZm9yZSBmb3IgYSBsb29rdXAg YmVsb3cgdGhlIGN1cnJlbnQgaW5kZXgsIHRoZXJlIG11c3QgYmUgCmEgcmFkaXggdHJlZSBlbnRy eSwgY29ycmVjdD8KCj4gKwltdXRleF9sb2NrKCZpdGVyLT5sb2NrKTsKPiArCWlmIChuID49IGl0 ZXItPnNnX2lkeCAmJgo+ICsJICAgIG4gPCBpdGVyLT5zZ19pZHggKyBfX3NnX3BhZ2VfY291bnQo aXRlci0+c2dfcG9zKSkgewo+ICsJCXNnID0gaXRlci0+c2dfcG9zOwo+ICsJCSpvZmZzZXQgPSBu IC0gaXRlci0+c2dfaWR4Owo+ICsJCW11dGV4X3VubG9jaygmaXRlci0+bG9jayk7Cj4gKwkJcmV0 dXJuIHNnOwo+ICsJfQo+ICsKPiArCXdoaWxlIChpdGVyLT5zZ19pZHggPD0gbikgewo+ICsJCXVu c2lnbmVkIGxvbmcgZXhjZXB0aW9uOwo+ICsJCXVuc2lnbmVkIGludCBjb3VudCwgaTsKPiArCj4g KwkJcmFkaXhfdHJlZV9pbnNlcnQoJml0ZXItPnJhZGl4LAo+ICsJCQkJICBpdGVyLT5zZ19pZHgs Cj4gKwkJCQkgIGl0ZXItPnNnX3Bvcyk7Cj4gKwo+ICsJCWV4Y2VwdGlvbiA9Cj4gKwkJCVJBRElY X1RSRUVfRVhDRVBUSU9OQUxfRU5UUlkgfAo+ICsJCQlpdGVyLT5zZ19pZHggPDwgUkFESVhfVFJF RV9FWENFUFRJT05BTF9TSElGVDsKPiArCQljb3VudCA9IF9fc2dfcGFnZV9jb3VudChpdGVyLT5z Z19wb3MpOwo+ICsJCWZvciAoaSA9IDE7IGkgPCBjb3VudDsgaSsrKQo+ICsJCQlyYWRpeF90cmVl X2luc2VydCgmaXRlci0+cmFkaXgsCj4gKwkJCQkJICBpdGVyLT5zZ19pZHggKyBpLAo+ICsJCQkJ CSAgKHZvaWQgKilleGNlcHRpb24pOwo+ICsKPiArCQlpdGVyLT5zZ19pZHggKz0gY291bnQ7Cj4g KwkJaXRlci0+c2dfcG9zID0gX19zZ19uZXh0KGl0ZXItPnNnX3Bvcyk7Cj4gKwl9Cj4gKwltdXRl eF91bmxvY2soJml0ZXItPmxvY2spOwoKV2h5IG5vdCBhdm9pZCBmYWxsaW5nIHRocm91Z2ggdGhl IGxvb2t1cCBhbmQgcmV0dXJuIHRoZSBwcmV2aW91cyBzZyBmcm9tIApoZXJlPwoKPiArCj4gK2xv b2t1cDoKPiArCXJjdV9yZWFkX2xvY2soKTsKPiArCXNnID0gcmFkaXhfdHJlZV9sb29rdXAoJml0 ZXItPnJhZGl4LCBuKTsKPiArCXJjdV9yZWFkX3VubG9jaygpOwo+ICsKPiArCWlmICh1bmxpa2Vs eSghc2cpKQo+ICsJCXJldHVybiBfX2k5MTVfZ2VtX29iamVjdF9nZXRfc2cob2JqLCBuLCBvZmZz ZXQpOwo+ICsKCkNvbnNpZGVyaW5nIHRoZSBmaXJzdCBvYnNlcnZhdGlvbiBmcm9tIGFib3ZlLCB3 aGVuIGRvZXMgaXQgdGhlbiBoYXBwZW4gCnRoYXQgdGhlcmUgaXMgbm8gcmFkaXggdHJlZSBlbnRy eSBhdCB0aGlzIHBvaW50PwoKT3IgaW4gb3RoZXIgd29yZHMsIG1heWJlIHNvbWUgY29tbWVudHMg c2hvdWxkIGJlIGFkZGVkIHRvIHRoaXMgcGF0Y2ggLSAKdGhlcmUgYXJlIG5vbmUgYW5kIGl0IGlz IG5vdCB0aGF0IHRyaXZpYWwuCgo+ICsJKm9mZnNldCA9IDA7Cj4gKwlpZiAodW5saWtlbHkocmFk aXhfdHJlZV9leGNlcHRpb24oc2cpKSkgewo+ICsJCXVuc2lnbmVkIGxvbmcgYmFzZSA9Cj4gKwkJ CSh1bnNpZ25lZCBsb25nKXNnID4+IFJBRElYX1RSRUVfRVhDRVBUSU9OQUxfU0hJRlQ7Cj4gKwkJ c2cgPSByYWRpeF90cmVlX2xvb2t1cCgmaXRlci0+cmFkaXgsIGJhc2UpOwo+ICsJCSpvZmZzZXQg PSBuIC0gYmFzZTsKPiArCX0KPiArCXJldHVybiBzZzsKPiArfQo+ICsKPiArc3RydWN0IHBhZ2Ug Kgo+ICtpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiwgdW5zaWduZWQgbG9uZyBuKQo+ICt7Cj4gKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwo+ ICsJdW5zaWduZWQgaW50IG9mZnNldDsKPiArCj4gKwlHRU1fQlVHX09OKCFpOTE1X2dlbV9vYmpl Y3RfaGFzX3N0cnVjdF9wYWdlKG9iaikpOwo+ICsKPiArCXNnID0gaTkxNV9nZW1fb2JqZWN0X2dl dF9zZyhvYmosIG4sICZvZmZzZXQpOwo+ICsJcmV0dXJuIG50aF9wYWdlKHNnX3BhZ2Uoc2cpLCBv ZmZzZXQpOwo+ICt9Cj4gKwo+ICsvKiBMaWtlIGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZSgpLCBi dXQgbWFyayB0aGUgcmV0dXJuZWQgcGFnZSBkaXJ0eSAqLwo+ICtzdHJ1Y3QgcGFnZSAqCj4gK2k5 MTVfZ2VtX29iamVjdF9nZXRfZGlydHlfcGFnZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqLAo+ICsJCQkgICAgICAgdW5zaWduZWQgbG9uZyBuKQo+ICt7Cj4gKwlzdHJ1Y3QgcGFnZSAq cGFnZTsKPiArCj4gKwlwYWdlID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKG9iaiwgbik7Cj4g KwlpZiAoIW9iai0+ZGlydHkpCj4gKwkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Cj4gKwo+ICsJcmV0 dXJuIHBhZ2U7Cj4gK30KPiArCj4gK2RtYV9hZGRyX3QKPiAraTkxNV9nZW1fb2JqZWN0X2dldF9k bWFfYWRkcmVzcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJCQkJdW5zaWdu ZWQgbG9uZyBuKQo+ICt7Cj4gKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwo+ICsJdW5zaWduZWQg aW50IG9mZnNldDsKPiArCj4gKwlzZyA9IGk5MTVfZ2VtX29iamVjdF9nZXRfc2cob2JqLCBuLCAm b2Zmc2V0KTsKPiArCXJldHVybiBzZ19kbWFfYWRkcmVzcyhzZykgKyAob2Zmc2V0IDw8IFBBR0Vf U0hJRlQpOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X3N0b2xlbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMKPiBpbmRl eCA1OTk4OWU4ZWU1ZGMuLjI0YmFkNGU2MGVmMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX3N0b2xlbi5jCj4gQEAgLTU5NCw4ICs1OTQsOCBAQCBfaTkxNV9nZW1fb2JqZWN0X2Ny ZWF0ZV9zdG9sZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAlpZiAob2JqLT5wYWdlcyA9 PSBOVUxMKQo+ICAgCQlnb3RvIGNsZWFudXA7Cj4gICAKPiAtCW9iai0+Z2V0X3BhZ2Uuc2cgPSBv YmotPnBhZ2VzLT5zZ2w7Cj4gLQlvYmotPmdldF9wYWdlLmxhc3QgPSAwOwo+ICsJb2JqLT5nZXRf cGFnZS5zZ19wb3MgPSBvYmotPnBhZ2VzLT5zZ2w7Cj4gKwlvYmotPmdldF9wYWdlLnNnX2lkeCA9 IDA7Cj4gICAKPiAgIAlpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKG9iaik7Cj4gICAJb2JqLT5z dG9sZW4gPSBzdG9sZW47Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX3VzZXJwdHIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYwo+ IGluZGV4IDFjODkxYjkyYWM4MC4uY2I5NTc4OWRhNzZlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX3VzZXJwdHIuYwo+IEBAIC01MjYsOCArNTI2LDggQEAgX19pOTE1X2dlbV91 c2VycHRyX2dldF9wYWdlc193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICpfd29yaykKPiAgIAkJ CWlmIChyZXQgPT0gMCkgewo+ICAgCQkJCWxpc3RfYWRkX3RhaWwoJm9iai0+Z2xvYmFsX2xpc3Qs Cj4gICAJCQkJCSAgICAgICZ0b19pOTE1KGRldiktPm1tLnVuYm91bmRfbGlzdCk7Cj4gLQkJCQlv YmotPmdldF9wYWdlLnNnID0gb2JqLT5wYWdlcy0+c2dsOwo+IC0JCQkJb2JqLT5nZXRfcGFnZS5s YXN0ID0gMDsKPiArCQkJCW9iai0+Z2V0X3BhZ2Uuc2dfcG9zID0gb2JqLT5wYWdlcy0+c2dsOwo+ ICsJCQkJb2JqLT5nZXRfcGFnZS5zZ19pZHggPSAwOwo+ICAgCQkJCXBpbm5lZCA9IDA7Cj4gICAJ CQl9Cj4gICAJCX0KClJlZ2FyZHMsCgpUdnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaW50ZWwtZ2Z4Cg==