From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 14/41] drm/i915: Use a radixtree for random access to the object's backing storage Date: Fri, 14 Oct 2016 14:32:03 +0100 Message-ID: <51f431b0-06da-9624-66cf-f6f9e7a77e7b@linux.intel.com> References: <20161014121833.439-1-chris@chris-wilson.co.uk> <20161014121833.439-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 mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 137716EC72 for ; Fri, 14 Oct 2016 13:32:07 +0000 (UTC) In-Reply-To: <20161014121833.439-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 Ck9uIDE0LzEwLzIwMTYgMTM6MTgsIENocmlzIFdpbHNvbiB3cm90ZToKPiBBIHdoaWxlIGFnbyB3 ZSBzd2l0Y2hlZCBmcm9tIGEgY29udGlndW91cyBhcnJheSBvZiBwYWdlcyBpbnRvIGFuIHNnbGlz dCwKPiBmb3IgdGhhdCB3YXMgYm90aCBtb3JlIGNvbnZlbmllbnQgZm9yIG1hcHBpbmcgdG8gaGFy ZHdhcmUgYW5kIGF2b2lkZWQKPiB0aGUgcmVxdWlyZW1lbnQgZm9yIGEgdm1hbGxvYyBhcnJheSBv ZiBwYWdlcyBvbiBldmVyeSBvYmplY3QuIEhvd2V2ZXIsCj4gY2VydGFpbiBHRU0gQVBJIGNhbGxz IChsaWtlIHB3cml0ZSwgcHJlYWQgYXMgd2VsbCBhcyBwZXJmb3JtaW5nCj4gcmVsb2NhdGlvbnMp IGRvIGRlc2lyZSBhY2Nlc3MgdG8gaW5kaXZpZHVhbCBzdHJ1Y3QgcGFnZXMuIEEgcXVpY2sgaGFj awo+IHdhcyB0byBpbnRyb2R1Y2UgYSBjYWNoZSBvZiB0aGUgbGFzdCBhY2Nlc3Mgc3VjaCB0aGF0 IGZpbmRpbmcgdGhlCj4gZm9sbG93aW5nIHBhZ2Ugd2FzIHF1aWNrIC0gdGhpcyB3b3JrcyBzbyBs b25nIGFzIHRoZSBjYWxsZXIgZGVzaXJlZAo+IHNlcXVlbnRpYWwgYWNjZXNzLiBXYWxraW5nIGJh Y2t3YXJkcywgb3IgbXVsdGlwbGUgY2FsbGVycywgc3RpbGwgaGl0cyBhCj4gc2xvdyBsaW5lYXIg c2VhcmNoIGZvciBlYWNoIHBhZ2UuIE9uZSBzb2x1dGlvbiBpcyB0byBzdG9yZSBlYWNoCj4gc3Vj Y2Vzc2Z1bCBsb29rdXAgaW4gYSByYWRpeCB0cmVlLgo+Cj4gdjI6IFJld3JpdGUgYnVpbGRpbmcg dGhlIHJhZGl4dHJlZSBmb3IgY2xhcml0eSwgaG9wZWZ1bGx5Lgo+Cj4gU2lnbmVkLW9mZi1ieTog Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gLS0tCj4gICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgfCAgNjkgKysrKystLS0tLS0tCj4gICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgfCAxNzkgKysrKysrKysrKysr KysrKysrKysrKysrKysrKystLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3N0 b2xlbi5jICB8ICAgNCArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0 ci5jIHwgICA0ICstCj4gICA0IGZpbGVzIGNoYW5nZWQsIDE5MyBpbnNlcnRpb25zKCspLCA2MyBk ZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IGluZGV4IDM4NDY3ZGRlMWVm ZS4uNTNjZjRiMGU1MzU5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAgLTIyNzMs OSArMjI3MywxMiBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7Cj4gICAKPiAgIAlzdHJ1 Y3Qgc2dfdGFibGUgKnBhZ2VzOwo+ICAgCWludCBwYWdlc19waW5fY291bnQ7Cj4gLQlzdHJ1Y3Qg Z2V0X3BhZ2Ugewo+IC0JCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Cj4gLQkJaW50IGxhc3Q7Cj4g KwlzdHJ1Y3QgaTkxNV9nZW1fb2JqZWN0X3BhZ2VfaXRlciB7Cj4gKwkJc3RydWN0IHNjYXR0ZXJs aXN0ICpzZ19wb3M7Cj4gKwkJdW5zaWduZWQgbG9uZyBzZ19pZHg7CgpXZSBhcmUgbm90IGNvbnNp c3RlbnQgaW4gdGhlIGNvZGUgd2l0aCB0eXBlIHVzZWQgZm9yIG51bWJlciBvZiBwYWdlcyBpbiAK YW4gb2JqZWN0LiBzZ19hbGxvY190YWJsZSBldmVuIHRha2VzIGFuIHVuc2lnbmVkIGludCBmb3Ig aXQsIHNvIGZvciBhcyAKbG9uZyBhcyB3ZSBidWlsZCB0aGVtIGFzIHdlIGRvLCB1bnNpZ25lZCBs b25nIGlzIGEgd2FzdGUuCgo+ICsKPiArCQlzdHJ1Y3QgcmFkaXhfdHJlZV9yb290IHJhZGl4Owo+ ICsJCXNwaW5sb2NrX3QgbG9jazsKPiAgIAl9IGdldF9wYWdlOwo+ICAgCXZvaWQgKm1hcHBpbmc7 Cj4gICAKPiBAQCAtMjQ3OCw2ICsyNDgxLDE0IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3Ry dWN0IHNndF9pdGVyIHsKPiAgIAlyZXR1cm4gczsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgaW5saW5l IHN0cnVjdCBzY2F0dGVybGlzdCAqX19fX3NnX25leHQoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZykK PiArewo+ICsJKytzZzsKPiArCWlmICh1bmxpa2VseShzZ19pc19jaGFpbihzZykpKQo+ICsJCXNn ID0gc2dfY2hhaW5fcHRyKHNnKTsKPiArCXJldHVybiBzZzsKPiArfQo+ICsKPiAgIC8qKgo+ICAg ICogX19zZ19uZXh0IC0gcmV0dXJuIHRoZSBuZXh0IHNjYXR0ZXJsaXN0IGVudHJ5IGluIGEgbGlz dAo+ICAgICogQHNnOgkJVGhlIGN1cnJlbnQgc2cgZW50cnkKPiBAQCAtMjQ5Miw5ICsyNTAzLDcg QEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKl9fc2dfbmV4dChzdHJ1Y3Qgc2Nh dHRlcmxpc3QgKnNnKQo+ICAgI2lmZGVmIENPTkZJR19ERUJVR19TRwo+ICAgCUJVR19PTihzZy0+ c2dfbWFnaWMgIT0gU0dfTUFHSUMpOwo+ICAgI2VuZGlmCj4gLQlyZXR1cm4gc2dfaXNfbGFzdChz ZykgPyBOVUxMIDoKPiAtCQlsaWtlbHkoIXNnX2lzX2NoYWluKCsrc2cpKSA/IHNnIDoKPiAtCQlz Z19jaGFpbl9wdHIoc2cpOwo+ICsJcmV0dXJuIHNnX2lzX2xhc3Qoc2cpID8gTlVMTCA6IF9fX19z Z19uZXh0KHNnKTsKPiAgIH0KPiAgIAo+ICAgLyoqCj4gQEAgLTMxNzAsNDUgKzMxNzksMjEgQEAg c3RhdGljIGlubGluZSBpbnQgX19zZ19wYWdlX2NvdW50KHN0cnVjdCBzY2F0dGVybGlzdCAqc2cp Cj4gICAJcmV0dXJuIHNnLT5sZW5ndGggPj4gUEFHRV9TSElGVDsKPiAgIH0KPiAgIAo+IC1zdHJ1 Y3QgcGFnZSAqCj4gLWk5MTVfZ2VtX29iamVjdF9nZXRfZGlydHlfcGFnZShzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLCBpbnQgbik7Cj4gLQo+IC1zdGF0aWMgaW5saW5lIGRtYV9hZGRy X3QKPiAtaTkxNV9nZW1fb2JqZWN0X2dldF9kbWFfYWRkcmVzcyhzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLCBpbnQgbikKPiAtewo+IC0JaWYgKG4gPCBvYmotPmdldF9wYWdlLmxhc3Qp IHsKPiAtCQlvYmotPmdldF9wYWdlLnNnID0gb2JqLT5wYWdlcy0+c2dsOwo+IC0JCW9iai0+Z2V0 X3BhZ2UubGFzdCA9IDA7Cj4gLQl9Cj4gLQo+IC0Jd2hpbGUgKG9iai0+Z2V0X3BhZ2UubGFzdCAr IF9fc2dfcGFnZV9jb3VudChvYmotPmdldF9wYWdlLnNnKSA8PSBuKSB7Cj4gLQkJb2JqLT5nZXRf cGFnZS5sYXN0ICs9IF9fc2dfcGFnZV9jb3VudChvYmotPmdldF9wYWdlLnNnKyspOwo+IC0JCWlm ICh1bmxpa2VseShzZ19pc19jaGFpbihvYmotPmdldF9wYWdlLnNnKSkpCj4gLQkJCW9iai0+Z2V0 X3BhZ2Uuc2cgPSBzZ19jaGFpbl9wdHIob2JqLT5nZXRfcGFnZS5zZyk7Cj4gLQl9Cj4gLQo+IC0J cmV0dXJuIHNnX2RtYV9hZGRyZXNzKG9iai0+Z2V0X3BhZ2Uuc2cpICsgKChuIC0gb2JqLT5nZXRf cGFnZS5sYXN0KSA8PCBQQUdFX1NISUZUKTsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSBzdHJ1 Y3QgcGFnZSAqCj4gLWk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLCBpbnQgbikKPiAtewo+IC0JaWYgKFdBUk5fT04obiA+PSBvYmotPmJhc2Uu c2l6ZSA+PiBQQUdFX1NISUZUKSkKPiAtCQlyZXR1cm4gTlVMTDsKPiArc3RydWN0IHNjYXR0ZXJs aXN0ICoKPiAraTkxNV9nZW1fb2JqZWN0X2dldF9zZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqLAo+ICsJCSAgICAgICB1bnNpZ25lZCBsb25nIG4sIHVuc2lnbmVkIGludCAqb2Zmc2V0 KTsKPiAgIAo+IC0JaWYgKG4gPCBvYmotPmdldF9wYWdlLmxhc3QpIHsKPiAtCQlvYmotPmdldF9w YWdlLnNnID0gb2JqLT5wYWdlcy0+c2dsOwo+IC0JCW9iai0+Z2V0X3BhZ2UubGFzdCA9IDA7Cj4g LQl9Cj4gK3N0cnVjdCBwYWdlICoKPiAraTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCSB1bnNpZ25lZCBsb25nIG4pOwo+ICAgCj4g LQl3aGlsZSAob2JqLT5nZXRfcGFnZS5sYXN0ICsgX19zZ19wYWdlX2NvdW50KG9iai0+Z2V0X3Bh Z2Uuc2cpIDw9IG4pIHsKPiAtCQlvYmotPmdldF9wYWdlLmxhc3QgKz0gX19zZ19wYWdlX2NvdW50 KG9iai0+Z2V0X3BhZ2Uuc2crKyk7Cj4gLQkJaWYgKHVubGlrZWx5KHNnX2lzX2NoYWluKG9iai0+ Z2V0X3BhZ2Uuc2cpKSkKPiAtCQkJb2JqLT5nZXRfcGFnZS5zZyA9IHNnX2NoYWluX3B0cihvYmot PmdldF9wYWdlLnNnKTsKPiAtCX0KPiArc3RydWN0IHBhZ2UgKgo+ICtpOTE1X2dlbV9vYmplY3Rf Z2V0X2RpcnR5X3BhZ2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiArCQkJICAg ICAgIHVuc2lnbmVkIGxvbmcgbik7Cj4gICAKPiAtCXJldHVybiBudGhfcGFnZShzZ19wYWdlKG9i ai0+Z2V0X3BhZ2Uuc2cpLCBuIC0gb2JqLT5nZXRfcGFnZS5sYXN0KTsKPiAtfQo+ICtkbWFfYWRk cl90Cj4gK2k5MTVfZ2VtX29iamVjdF9nZXRfZG1hX2FkZHJlc3Moc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKPiArCQkJCXVuc2lnbmVkIGxvbmcgbik7Cj4gICAKPiAgIHN0YXRpYyBp bmxpbmUgdm9pZCBpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmopCj4gICB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gaW5kZXggOTU3ODFj NjNmNjA1Li5kNzM2YmViNGQ1N2YgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBAQCAt MjMzMyw2ICsyMzMzLDE1IEBAIGk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXNfZ3R0KHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICAJa2ZyZWUob2JqLT5wYWdlcyk7Cj4gICB9Cj4g ICAKPiArc3RhdGljIHZvaWQgX19pOTE1X2dlbV9vYmplY3RfcmVzZXRfcGFnZV9pdGVyKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gK3sKPiArCXN0cnVjdCByYWRpeF90cmVlX2l0 ZXIgaXRlcjsKPiArCXZvaWQgKipzbG90Owo+ICsKPiArCXJhZGl4X3RyZWVfZm9yX2VhY2hfc2xv dChzbG90LCAmb2JqLT5nZXRfcGFnZS5yYWRpeCwgJml0ZXIsIDApCj4gKwkJcmFkaXhfdHJlZV9k ZWxldGUoJm9iai0+Z2V0X3BhZ2UucmFkaXgsIGl0ZXIuaW5kZXgpOwo+ICt9Cj4gKwo+ICAgaW50 Cj4gICBpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmopCj4gICB7Cj4gQEAgLTIzNjUsNiArMjM3NCw4IEBAIGk5MTVfZ2VtX29iamVjdF9wdXRf cGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIAkJb2JqLT5tYXBwaW5n ID0gTlVMTDsKPiAgIAl9Cj4gICAKPiArCV9faTkxNV9nZW1fb2JqZWN0X3Jlc2V0X3BhZ2VfaXRl cihvYmopOwo+ICsKPiAgIAlvcHMtPnB1dF9wYWdlcyhvYmopOwo+ICAgCW9iai0+cGFnZXMgPSBO VUxMOwo+ICAgCj4gQEAgLTI1MzQsOCArMjU0NSw4IEBAIGk5MTVfZ2VtX29iamVjdF9nZXRfcGFn ZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIAo+ICAgCWxpc3RfYWRkX3Rh aWwoJm9iai0+Z2xvYmFsX2xpc3QsICZkZXZfcHJpdi0+bW0udW5ib3VuZF9saXN0KTsKPiAgIAo+ IC0Jb2JqLT5nZXRfcGFnZS5zZyA9IG9iai0+cGFnZXMtPnNnbDsKPiAtCW9iai0+Z2V0X3BhZ2Uu bGFzdCA9IDA7Cj4gKwlvYmotPmdldF9wYWdlLnNnX3BvcyA9IG9iai0+cGFnZXMtPnNnbDsKPiAr CW9iai0+Z2V0X3BhZ2Uuc2dfaWR4ID0gMDsKPiAgIAo+ICAgCXJldHVybiAwOwo+ICAgfQo+IEBA IC00MzM4LDYgKzQzNDksOCBAQCB2b2lkIGk5MTVfZ2VtX29iamVjdF9pbml0KHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gICAKPiAgIAlvYmotPmZyb250YnVmZmVyX2dndHRfb3Jp Z2luID0gT1JJR0lOX0dUVDsKPiAgIAlvYmotPm1hZHYgPSBJOTE1X01BRFZfV0lMTE5FRUQ7Cj4g KwlJTklUX1JBRElYX1RSRUUoJm9iai0+Z2V0X3BhZ2UucmFkaXgsIEdGUF9BVE9NSUMgfCBfX0dG UF9OT1dBUk4pOwoKUHJvcyAmIGNvbnMgb2YgR0ZQX0FUT01JQyBoZXJlPyBWZXJzdXMgcGVyaGFw cyBnb2luZyB3aXRoIHRoZSBtdXRleD8gSSAKZG9uJ3Qga25vdyBob3cgbXVjaCBkYXRhIHJhZGl4 IHRyZWUgYWxsb2NhdGVzIHdpdGggdGhpcywgcGVyIG5vZGUsIGJ1dCAKd2UgY2FuIGhhdmUgYSBs b3Qgb2YgcGFnZXMuIFdvdWxkIHRoaXMgY3JlYXRlIGV4dHJhIHByZXNzdXJlIG9uIHNsYWIgCnNo cmlua2luZywgYW5kIGluIHR1cm4gb3V0IG9iamVjdHM/Cgo+ICsJc3Bpbl9sb2NrX2luaXQoJm9i ai0+Z2V0X3BhZ2UubG9jayk7Cj4gICAKPiAgIAlpOTE1X2dlbV9pbmZvX2FkZF9vYmoodG9faTkx NShvYmotPmJhc2UuZGV2KSwgb2JqLT5iYXNlLnNpemUpOwo+ICAgfQo+IEBAIC01MDE2LDIxICs1 MDI5LDYgQEAgdm9pZCBpOTE1X2dlbV90cmFja19mYihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2xkLAo+ICAgCX0KPiAgIH0KPiAgIAo+IC0vKiBMaWtlIGk5MTVfZ2VtX29iamVjdF9nZXRf cGFnZSgpLCBidXQgbWFyayB0aGUgcmV0dXJuZWQgcGFnZSBkaXJ0eSAqLwo+IC1zdHJ1Y3QgcGFn ZSAqCj4gLWk5MTVfZ2VtX29iamVjdF9nZXRfZGlydHlfcGFnZShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLCBpbnQgbikKPiAtewo+IC0Jc3RydWN0IHBhZ2UgKnBhZ2U7Cj4gLQo+IC0J LyogT25seSBkZWZhdWx0IG9iamVjdHMgaGF2ZSBwZXItcGFnZSBkaXJ0eSB0cmFja2luZyAqLwo+ IC0JaWYgKFdBUk5fT04oIWk5MTVfZ2VtX29iamVjdF9oYXNfc3RydWN0X3BhZ2Uob2JqKSkpCj4g LQkJcmV0dXJuIE5VTEw7Cj4gLQo+IC0JcGFnZSA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShv YmosIG4pOwo+IC0Jc2V0X3BhZ2VfZGlydHkocGFnZSk7Cj4gLQlyZXR1cm4gcGFnZTsKPiAtfQo+ IC0KPiAgIC8qIEFsbG9jYXRlIGEgbmV3IEdFTSBvYmplY3QgYW5kIGZpbGwgaXQgd2l0aCB0aGUg c3VwcGxpZWQgZGF0YSAqLwo+ICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKgo+ICAgaTkx NV9nZW1fb2JqZWN0X2NyZWF0ZV9mcm9tX2RhdGEoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiBA QCAtNTA3MSwzICs1MDY5LDE1MCBAQCBmYWlsOgo+ICAgCWk5MTVfZ2VtX29iamVjdF9wdXQob2Jq KTsKPiAgIAlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICAgfQo+ICsKPiArc3RydWN0IHNjYXR0ZXJs aXN0ICoKPiAraTkxNV9nZW1fb2JqZWN0X2dldF9zZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqLAo+ICsJCSAgICAgICB1bnNpZ25lZCBsb25nIG4sClNhbWUgdW5zaWduZWQgbG9uZyB2 cyB1bnNpZ25lZCBpbnQgYXMgYWJvdmUuCgo+ICsJCSAgICAgICB1bnNpZ25lZCBpbnQgKm9mZnNl dCkKPiArewo+ICsJc3RydWN0IGk5MTVfZ2VtX29iamVjdF9wYWdlX2l0ZXIgKml0ZXIgPSAmb2Jq LT5nZXRfcGFnZTsKPiArCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Cj4gKwl1bnNpZ25lZCBsb25n IGlkeCwgY291bnQ7Cj4gKwo+ICsJR0VNX0JVR19PTihuID49IG9iai0+YmFzZS5zaXplID4+IFBB R0VfU0hJRlQpOwo+ICsJR0VNX0JVR19PTihvYmotPnBhZ2VzX3Bpbl9jb3VudCA9PSAwKTsKPiAr Cj4gKwkvKiBBcyB3ZSBpdGVyYXRlIGZvcndhcmQgdGhyb3VnaCB0aGUgc2csIHdlIHJlY29yZCBl YWNoIGVudHJ5IGluIGEKPiArCSAqIHJhZGl4dHJlZSBmb3IgcXVpY2sgcmVwZWF0ZWQgKGJhY2t3 YXJkcykgbG9va3Vwcy4gSWYgd2UgaGF2ZSBzZWVuCj4gKwkgKiB0aGlzIGluZGV4IHByZXZpb3Vz bHksIHdlIHdpbGwgaGF2ZSBhbiBlbnRyeSBmb3IgaXQuCj4gKwkgKgo+ICsJICogSW5pdGlhbCBs b29rdXAgaXMgTyhOKSwgYnV0IHRoaXMgaXMgYW1vcnRpemVkIHRvIE8oMSkgZm9yCj4gKwkgKiBz ZXF1ZW50aWFsIHBhZ2UgYWNjZXNzICh3aGVyZSBlYWNoIG5ldyByZXF1ZXN0IGlzIGNvbnNlY3V0 aXZlCj4gKwkgKiB0byB0aGUgcHJldmlvdXMgb25lKS4gUmVwZWF0ZWQgbG9va3VwcyBhcmUgTyhs ZyhvYmotPmJhc2Uuc2l6ZSkpLAo+ICsJICogaS5lLiBPKDEpIHdpdGggYSBsYXJnZSBjb25zdGFu dCEKPiArCSAqLwo+ICsJaWYgKG4gPCBSRUFEX09OQ0UoaXRlci0+c2dfaWR4KSkKPiArCQlnb3Rv IGxvb2t1cDsKPiArCj4gKwlzcGluX2xvY2soJml0ZXItPmxvY2spOwo+ICsKPiArCXNnID0gaXRl ci0+c2dfcG9zOwo+ICsJaWR4ID0gaXRlci0+c2dfaWR4Owo+ICsJY291bnQgPSBfX3NnX3BhZ2Vf Y291bnQoc2cpOwo+ICsKPiArCXdoaWxlIChpZHggKyBjb3VudCA8IG4pIHsKPiArCQl1bnNpZ25l ZCBsb25nIGV4Y2VwdGlvbiwgaTsKPiArCQlpbnQgcmV0Owo+ICsKPiArCQkvKiBJZiB3ZSBjYW5u b3QgYWxsb2NhdGUgYW5kIGluc2VydCB0aGlzIGVudHJ5LCBvciB0aGUKPiArCQkgKiBpbmRpdmlk dWFsIHBhZ2VzIGZyb20gdGhpcyByYW5nZSwgY2FuY2VsIHVwZGF0aW5nIHRoZQo+ICsJCSAqIHNn X2lkeCBzbyB0aGF0IG9uIHRoaXMgbG9va3VwIHdlIGFyZSBmb3JjZWQgdG8gbGluZWFybHkKPiAr CQkgKiBzY2FuIG9ud2FyZHMsIGJ1dCBvbiBmdXR1cmUgbG9va3VwcyB3ZSB3aWxsIHRyeSB0aGUK PiArCQkgKiBpbnNlcnRpb24gYWdhaW4gKGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0byBiZSBjYXJl ZnVsIG9mCj4gKwkJICogdGhlIGVycm9yIHJldHVybiByZXBvcnRpbmcgdGhhdCB3ZSBoYXZlIGFs cmVhZHkgaW5zZXJ0ZWQKPiArCQkgKiB0aGlzIGluZGV4KS4KPiArCQkgKi8KPiArCQlyZXQgPSBy YWRpeF90cmVlX2luc2VydCgmaXRlci0+cmFkaXgsIGlkeCwgc2cpOwo+ICsJCWlmIChyZXQgJiYg cmV0ICE9IC1FRVhJU1QpCj4gKwkJCWdvdG8gc2NhbjsKCldoYXQgb3RoZXIgZXJyb3IgY2FuIHdl IGdldCBoZXJlPyBJbnRlcm5hbCBhbGxvY2F0aW9uIGZhaWx1cmU/Cgo+ICsKPiArCQlleGNlcHRp b24gPQo+ICsJCQlSQURJWF9UUkVFX0VYQ0VQVElPTkFMX0VOVFJZIHwKPiArCQkJaWR4IDw8IFJB RElYX1RSRUVfRVhDRVBUSU9OQUxfU0hJRlQ7Cj4gKwkJZm9yIChpID0gMTsgaSA8IGNvdW50OyBp KyspIHsKPiArCQkJcmV0ID0gcmFkaXhfdHJlZV9pbnNlcnQoJml0ZXItPnJhZGl4LCBpZHggKyBp LAo+ICsJCQkJCQkodm9pZCAqKWV4Y2VwdGlvbik7Cj4gKwkJCWlmIChyZXQgJiYgcmV0ICE9IC1F RVhJU1QpCj4gKwkJCQlnb3RvIHNjYW47Cj4gKwkJfQo+ICsKPiArCQlpZHggKz0gY291bnQ7Cj4g KwkJc2cgPSBfX19fc2dfbmV4dChzZyk7Cj4gKwkJY291bnQgPSBfX3NnX3BhZ2VfY291bnQoc2cp Owo+ICsJfQo+ICsKPiArc2NhbjoKPiArCWl0ZXItPnNnX3BvcyA9IHNnOwo+ICsJaXRlci0+c2df aWR4ID0gaWR4Owo+ICsKPiArCXNwaW5fdW5sb2NrKCZpdGVyLT5sb2NrKTsKPiArCj4gKwlpZiAo dW5saWtlbHkobiA8IGlkeCkpIC8qIGluc2VydGlvbiBjb21wbGV0ZWQgYnkgYW5vdGhlciB0aHJl YWQgKi8KPiArCQlnb3RvIGxvb2t1cDsKPiArCj4gKwkvKiBJbiBjYXNlIHdlIGZhaWxlZCB0byBp bnNlcnQgdGhlIGVudHJ5IGludG8gdGhlIHJhZGl4dHJlZSwgd2UgbmVlZAo+ICsJICogdG8gbG9v ayBiZXlvbmQgdGhlIGN1cnJlbnQgc2cuCj4gKwkgKi8KPiArCXdoaWxlIChpZHggKyBjb3VudCA8 PSBuKSB7Cj4gKwkJaWR4ICs9IGNvdW50Owo+ICsJCXNnID0gX19fX3NnX25leHQoc2cpOwo+ICsJ CWNvdW50ID0gX19zZ19wYWdlX2NvdW50KHNnKTsKPiArCX0KPiArCgpIbW0uLi4gSSBhc3N1bWUg ZmFpbHVyZXMgaGFwcGVuIHRoZW4gc2luY2UgeW91IGFkZGVkIHRoaXMgZmFsbGJhY2suIER1ZSAK R0ZQX0FUT01JQz8KCj4gKwkqb2Zmc2V0ID0gbiAtIGlkeDsKPiArCXJldHVybiBzZzsKPiArCj4g K2xvb2t1cDoKPiArCXJjdV9yZWFkX2xvY2soKTsKPiArCgpQcm9wZXJ0eSBvZiB0aGUgcmFkaXgg dHJlZSBpbXBsZW1lbnRhdGlvbiB0aGF0IHRoZSBSQ1UgbG9jayBpcyBzdWZmaWNpZW50PwoKPiAr CXNnID0gcmFkaXhfdHJlZV9sb29rdXAoJml0ZXItPnJhZGl4LCBuKTsKPiArCUdFTV9CVUdfT04o IXNnKTsKPiArCj4gKwkvKiBJZiB0aGlzIGluZGV4IGlzIGluIHRoZSBtaWRkbGUgb2YgbXVsdGkt cGFnZSBzZyBlbnRyeSwKPiArCSAqIHRoZSByYWRpeHRyZWUgd2lsbCBjb250YWluIGFuIGV4Y2Vw dGlvbmFsIGVudHJ5IHRoYXQgcG9pbnRzCj4gKwkgKiB0byB0aGUgc3RhcnQgb2YgdGhhdCByYW5n ZS4gV2Ugd2lsbCByZXR1cm4gdGhlIHBvaW50ZXIgdG8KPiArCSAqIHRoZSBiYXNlIHBhZ2UgYW5k IHRoZSBvZmZzZXQgb2YgdGhpcyBwYWdlIHdpdGhpbiB0aGUKPiArCSAqIHNnIGVudHJ5J3MgcmFu Z2UuCj4gKwkgKi8KPiArCSpvZmZzZXQgPSAwOwo+ICsJaWYgKHVubGlrZWx5KHJhZGl4X3RyZWVf ZXhjZXB0aW9uKHNnKSkpIHsKPiArCQl1bnNpZ25lZCBsb25nIGJhc2UgPQo+ICsJCQkodW5zaWdu ZWQgbG9uZylzZyA+PiBSQURJWF9UUkVFX0VYQ0VQVElPTkFMX1NISUZUOwo+ICsKPiArCQlzZyA9 IHJhZGl4X3RyZWVfbG9va3VwKCZpdGVyLT5yYWRpeCwgYmFzZSk7Cj4gKwkJR0VNX0JVR19PTigh c2cpOwo+ICsKPiArCQkqb2Zmc2V0ID0gbiAtIGJhc2U7Cj4gKwl9Cj4gKwo+ICsJcmN1X3JlYWRf dW5sb2NrKCk7Cj4gKwo+ICsJcmV0dXJuIHNnOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgcGFnZSAqCj4g K2k5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq LCB1bnNpZ25lZCBsb25nIG4pCj4gK3sKPiArCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Cj4gKwl1 bnNpZ25lZCBpbnQgb2Zmc2V0Owo+ICsKPiArCUdFTV9CVUdfT04oIWk5MTVfZ2VtX29iamVjdF9o YXNfc3RydWN0X3BhZ2Uob2JqKSk7Cj4gKwo+ICsJc2cgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3Nn KG9iaiwgbiwgJm9mZnNldCk7Cj4gKwlyZXR1cm4gbnRoX3BhZ2Uoc2dfcGFnZShzZyksIG9mZnNl dCk7Cj4gK30KPiArCj4gKy8qIExpa2UgaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKCksIGJ1dCBt YXJrIHRoZSByZXR1cm5lZCBwYWdlIGRpcnR5ICovCj4gK3N0cnVjdCBwYWdlICoKPiAraTkxNV9n ZW1fb2JqZWN0X2dldF9kaXJ0eV9wYWdlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmos Cj4gKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIG4pCj4gK3sKPiArCXN0cnVjdCBwYWdlICpwYWdl Owo+ICsKPiArCXBhZ2UgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2Uob2JqLCBuKTsKPiArCWlm ICghb2JqLT5kaXJ0eSkKPiArCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKPiArCj4gKwlyZXR1cm4g cGFnZTsKPiArfQo+ICsKPiArZG1hX2FkZHJfdAo+ICtpOTE1X2dlbV9vYmplY3RfZ2V0X2RtYV9h ZGRyZXNzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCQl1bnNpZ25lZCBs b25nIG4pCj4gK3sKPiArCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Cj4gKwl1bnNpZ25lZCBpbnQg b2Zmc2V0Owo+ICsKPiArCXNnID0gaTkxNV9nZW1fb2JqZWN0X2dldF9zZyhvYmosIG4sICZvZmZz ZXQpOwo+ICsJcmV0dXJuIHNnX2RtYV9hZGRyZXNzKHNnKSArIChvZmZzZXQgPDwgUEFHRV9TSElG VCk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc3Rv bGVuLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4uYwo+IGluZGV4IGY0 ZjZkM2E0OGIwNS4uNzBlNjFiYzM1YzYwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX3N0b2xlbi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fc3RvbGVuLmMKPiBAQCAtNTk1LDggKzU5NSw4IEBAIF9pOTE1X2dlbV9vYmplY3RfY3JlYXRl X3N0b2xlbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAgCWlmIChvYmotPnBhZ2VzID09IE5V TEwpCj4gICAJCWdvdG8gY2xlYW51cDsKPiAgIAo+IC0Jb2JqLT5nZXRfcGFnZS5zZyA9IG9iai0+ cGFnZXMtPnNnbDsKPiAtCW9iai0+Z2V0X3BhZ2UubGFzdCA9IDA7Cj4gKwlvYmotPmdldF9wYWdl LnNnX3BvcyA9IG9iai0+cGFnZXMtPnNnbDsKPiArCW9iai0+Z2V0X3BhZ2Uuc2dfaWR4ID0gMDsK PiAgIAo+ICAgCWk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsKPiAgIAlvYmotPnN0b2xl biA9IHN0b2xlbjsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f dXNlcnB0ci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jCj4gaW5k ZXggMWM4OTFiOTJhYzgwLi5jYjk1Nzg5ZGE3NmUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fdXNlcnB0ci5jCj4gQEAgLTUyNiw4ICs1MjYsOCBAQCBfX2k5MTVfZ2VtX3VzZXJw dHJfZ2V0X3BhZ2VzX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKl93b3JrKQo+ICAgCQkJaWYg KHJldCA9PSAwKSB7Cj4gICAJCQkJbGlzdF9hZGRfdGFpbCgmb2JqLT5nbG9iYWxfbGlzdCwKPiAg IAkJCQkJICAgICAgJnRvX2k5MTUoZGV2KS0+bW0udW5ib3VuZF9saXN0KTsKPiAtCQkJCW9iai0+ Z2V0X3BhZ2Uuc2cgPSBvYmotPnBhZ2VzLT5zZ2w7Cj4gLQkJCQlvYmotPmdldF9wYWdlLmxhc3Qg PSAwOwo+ICsJCQkJb2JqLT5nZXRfcGFnZS5zZ19wb3MgPSBvYmotPnBhZ2VzLT5zZ2w7Cj4gKwkJ CQlvYmotPmdldF9wYWdlLnNnX2lkeCA9IDA7CgpBbG1vc3QgbGlrZSB0aGVzZSBvbmVzIHdvdWxk IGJlIGJldHRlciBpbiBhIGhlbHBlciBsaWtlIAppOTE1X2dlbV9vYmplY3RfaW5pdF9wYWdlX2xv b2t1cCBvciBzb21ldGhpbmcuCgo+ICAgCQkJCXBpbm5lZCA9IDA7Cj4gICAJCQl9Cj4gICAJCX0K ClJlZ2FyZHMsCgpUdnJ0a28KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lu dGVsLWdmeAo=