From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH v4] drm/i915: Introduce an internal allocator for disposable private objects Date: Fri, 21 Oct 2016 09:07:59 +0100 Message-ID: References: <20161020150423.4560-13-chris@chris-wilson.co.uk> <20161021075616.15285-1-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 mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 80DFD6EC86 for ; Fri, 21 Oct 2016 08:08:02 +0000 (UTC) In-Reply-To: <20161021075616.15285-1-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 Ck9uIDIxLzEwLzIwMTYgMDg6NTYsIENocmlzIFdpbHNvbiB3cm90ZToKPiBRdWl0ZSBhIGZldyBv ZiBvdXIgb2JqZWN0cyB1c2VkIGZvciBpbnRlcm5hbCBoYXJkd2FyZSBwcm9ncmFtbWluZyBkbyBu b3QKPiBiZW5lZml0IGZyb20gYmVpbmcgc3dhcHBhYmxlIG9yIGZyb20gYmVpbmcgemVybyBpbml0 aWFsaXNlZC4gQXMgc3VjaAo+IHRoZXkgZG8gbm90IGJlbmVmaXQgZnJvbSB1c2luZyBhIHNobWVt ZnMgYmFja2luZyBzdG9yYWdlIGFuZCBzaW5jZSB0aGV5Cj4gYXJlIGludGVybmFsIGFuZCBuZXZl ciBkaXJlY3RseSBleHBvc2VkIHRvIHRoZSB1c2VyLCB3ZSBkbyBub3QgbmVlZCB0bwo+IHdvcnJ5 IGFib3V0IHByb3ZpZGluZyBhIGZpbHAuIEZvciB0aGVzZSB3ZSBjYW4gdXNlIGFuCj4gZHJtX2k5 MTVfZ2VtX29iamVjdCB3cmFwcGVyIGFyb3VuZCBhIHNnX3RhYmxlIG9mIHBsYWluIHN0cnVjdCBw YWdlLiBUaGV5Cj4gYXJlIG5vdCBzd2FwIGJhY2tlZCBhbmQgbm90IGF1dG9tYXRpY2FsbHkgcGlu bmVkLiBJZiB0aGV5IGFyZSByZWFwZWQKPiBieSB0aGUgc2hyaW5rZXIsIHRoZSBwYWdlcyBhcmUg cmVsZWFzZWQgYW5kIHRoZSBjb250ZW50cyBkaXNjYXJkZWQuIEZvcgo+IHRoZSBpbnRlcm5hbCB1 c2UgY2FzZSwgdGhpcyBpcyBmaW5lIGFzIGZvciBleGFtcGxlLCByaW5nYnVmZmVycyBhcmUKPiBw aW5uZWQgZnJvbSBiZWluZyB3cml0dGVuIGJ5IGEgcmVxdWVzdCB0byBiZSByZWFkIGJ5IHRoZSBo YXJkd2FyZS4gT25jZQo+IHRoZXkgYXJlIGlkbGUsIHRoZXkgY2FuIGJlIGRpc2NhcmRlZCBlbnRp cmVseS4gQXMgc3VjaCB0aGV5IGFyZSBhIGdvb2QKPiBtYXRjaCBmb3IgZXhlY2xpc3QgcmluZ2J1 ZmZlcnMgYW5kIGEgc21hbGwgdmFyaWV0eSBvZiBvdGhlciBpbnRlcm5hbAo+IG9iamVjdHMuCj4K PiBJbiB0aGUgZmlyc3QgaXRlcmF0aW9uLCB0aGlzIGlzIGxpbWl0ZWQgdG8gdGhlIHNjcmF0Y2gg YmF0Y2ggYnVmZmVycyB3ZQo+IHVzZSAoZm9yIGNvbW1hbmQgcGFyc2luZyBhbmQgc3RhdGUgaW5p dGlhbGlzYXRpb24pLgo+Cj4gdjI6IEFsbG9jYXRlIHBoeXNpY2FsbHkgY29udGlndW91cyBwYWdl cywgd2hlcmUgcG9zc2libGUuCj4gdjM6IFJlZHVjZSBtYXhpbXVtIG9yZGVyIG9uIHN1YnNlcXVl bnQgcmVxdWVzdHMgZm9sbG93aW5nIGFuIGFsbG9jYXRpb24KPiBmYWlsdXJlLgo+IHY0OiBGaXgg dXAgbWlzbWF0Y2ggYmV0d2VlbiBzd2lvdGxiIHNlZ21lbnQgc2l6ZSBhbmQgcGFnZSBjb3VudCAo aXQKPiBjb3VudHMgaW4gMmsgdW5pdHMsIG5vdCA0ayBwYWdlcykKPgo+IFNpZ25lZC1vZmYtYnk6 IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IENjOiBUdnJ0a28gVXJz dWxpbiA8dHZydGtvLnVyc3VsaW5AbGludXguaW50ZWwuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAgICAgIHwgICA1ICsKPiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fYmF0Y2hfcG9vbC5jICAgfCAgMjcgKystLS0KPiAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1faW50ZXJuYWwuYyAgICAgfCAxNzAgKysrKysrKysrKysrKysr KysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlbmRlcl9zdGF0 ZS5jIHwgICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jICAg ICAgIHwgICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyAg ICAgIHwgIDE0ICsrLQo+ICA3IGZpbGVzIGNoYW5nZWQsIDE5NyBpbnNlcnRpb25zKCspLCAyNCBk ZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2ludGVybmFsLmMKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5kZXggNjEyMzQwMDk3 ZjRiLi43ZmFhMDRjOTFlMWEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IEBAIC0zNSw2ICsz NSw3IEBAIGk5MTUteSArPSBpOTE1X2NtZF9wYXJzZXIubyBcCj4gIAkgIGk5MTVfZ2VtX2V4ZWNi dWZmZXIubyBcCj4gIAkgIGk5MTVfZ2VtX2ZlbmNlLm8gXAo+ICAJICBpOTE1X2dlbV9ndHQubyBc Cj4gKwkgIGk5MTVfZ2VtX2ludGVybmFsLm8gXAo+ICAJICBpOTE1X2dlbS5vIFwKPiAgCSAgaTkx NV9nZW1fcmVuZGVyX3N0YXRlLm8gXAo+ICAJICBpOTE1X2dlbV9yZXF1ZXN0Lm8gXAo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaAo+IGluZGV4IDRlOTNjMzc5N2Q5MC4uZTI2N2UyMGJkY2RiIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAgLTM1NDMsNiArMzU0MywxMSBAQCBpOTE1X2dl bV9vYmplY3RfY3JlYXRlX3N0b2xlbl9mb3JfcHJlYWxsb2NhdGVkKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCj4gIAkJCQkJICAgICAgIHUzMiBndHRfb2Zmc2V0LAo+ICAJCQkJCSAgICAgICB1MzIg c2l6ZSk7Cj4KPiArLyogaTkxNV9nZW1faW50ZXJuYWwuYyAqLwo+ICtzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqCj4gK2k5MTVfZ2VtX29iamVjdF9jcmVhdGVfaW50ZXJuYWwoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkJdW5zaWduZWQgaW50IHNpemUpOwo+ICsK PiAgLyogaTkxNV9nZW1fc2hyaW5rZXIuYyAqLwo+ICB1bnNpZ25lZCBsb25nIGk5MTVfZ2VtX3No cmluayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAkJCSAgICAgIHVuc2ln bmVkIGxvbmcgdGFyZ2V0LAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9iYXRjaF9wb29sLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9iYXRjaF9w b29sLmMKPiBpbmRleCBjYjI1Y2FkMzMxOGMuLmFhNGUxZTA0M2I0ZSAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9iYXRjaF9wb29sLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9iYXRjaF9wb29sLmMKPiBAQCAtOTcsOSArOTcsOSBAQCBp OTE1X2dlbV9iYXRjaF9wb29sX2dldChzdHJ1Y3QgaTkxNV9nZW1fYmF0Y2hfcG9vbCAqcG9vbCwK PiAgCQkJc2l6ZV90IHNpemUpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmogPSBOVUxMOwo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKnRtcCwgKm5leHQ7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqdG1wOwo+ICAJc3RydWN0IGxpc3RfaGVhZCAq bGlzdDsKPiAtCWludCBuOwo+ICsJaW50IG4sIHJldDsKPgo+ICAJbG9ja2RlcF9hc3NlcnRfaGVs ZCgmcG9vbC0+ZW5naW5lLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPgo+IEBAIC0xMTIsMTkg KzExMiwxMiBAQCBpOTE1X2dlbV9iYXRjaF9wb29sX2dldChzdHJ1Y3QgaTkxNV9nZW1fYmF0Y2hf cG9vbCAqcG9vbCwKPiAgCQluID0gQVJSQVlfU0laRShwb29sLT5jYWNoZV9saXN0KSAtIDE7Cj4g IAlsaXN0ID0gJnBvb2wtPmNhY2hlX2xpc3Rbbl07Cj4KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnlf c2FmZSh0bXAsIG5leHQsIGxpc3QsIGJhdGNoX3Bvb2xfbGluaykgewo+ICsJbGlzdF9mb3JfZWFj aF9lbnRyeSh0bXAsIGxpc3QsIGJhdGNoX3Bvb2xfbGluaykgewo+ICAJCS8qIFRoZSBiYXRjaGVz IGFyZSBzdHJpY3RseSBMUlUgb3JkZXJlZCAqLwo+ICAJCWlmICghaTkxNV9nZW1fYWN0aXZlX2lz X2lkbGUoJnRtcC0+bGFzdF9yZWFkW3Bvb2wtPmVuZ2luZS0+aWRdLAo+ICAJCQkJCSAgICAgJnRt cC0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCkpCj4gIAkJCWJyZWFrOwo+Cj4gLQkJLyogV2hpbGUg d2UncmUgbG9vcGluZywgZG8gc29tZSBjbGVhbiB1cCAqLwo+IC0JCWlmICh0bXAtPm1hZHYgPT0g X19JOTE1X01BRFZfUFVSR0VEKSB7Cj4gLQkJCWxpc3RfZGVsKCZ0bXAtPmJhdGNoX3Bvb2xfbGlu ayk7Cj4gLQkJCWk5MTVfZ2VtX29iamVjdF9wdXQodG1wKTsKPiAtCQkJY29udGludWU7Cj4gLQkJ fQo+IC0KPiAgCQlpZiAodG1wLT5iYXNlLnNpemUgPj0gc2l6ZSkgewo+ICAJCQlvYmogPSB0bXA7 Cj4gIAkJCWJyZWFrOwo+IEBAIC0xMzIsMTkgKzEyNSwxNSBAQCBpOTE1X2dlbV9iYXRjaF9wb29s X2dldChzdHJ1Y3QgaTkxNV9nZW1fYmF0Y2hfcG9vbCAqcG9vbCwKPiAgCX0KPgo+ICAJaWYgKG9i aiA9PSBOVUxMKSB7Cj4gLQkJaW50IHJldDsKPiAtCj4gLQkJb2JqID0gaTkxNV9nZW1fb2JqZWN0 X2NyZWF0ZSgmcG9vbC0+ZW5naW5lLT5pOTE1LT5kcm0sIHNpemUpOwo+ICsJCW9iaiA9IGk5MTVf Z2VtX29iamVjdF9jcmVhdGVfaW50ZXJuYWwocG9vbC0+ZW5naW5lLT5pOTE1LCBzaXplKTsKPiAg CQlpZiAoSVNfRVJSKG9iaikpCj4gIAkJCXJldHVybiBvYmo7Cj4gLQo+IC0JCXJldCA9IGk5MTVf Z2VtX29iamVjdF9nZXRfcGFnZXMob2JqKTsKPiAtCQlpZiAocmV0KQo+IC0JCQlyZXR1cm4gRVJS X1BUUihyZXQpOwo+IC0KPiAtCQlvYmotPm1hZHYgPSBJOTE1X01BRFZfRE9OVE5FRUQ7Cj4gIAl9 Cj4KPiArCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMob2JqKTsKPiArCWlmIChyZXQp Cj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCj4gIAlsaXN0X21vdmVfdGFpbCgmb2JqLT5i YXRjaF9wb29sX2xpbmssIGxpc3QpOwo+ICAJaTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyhvYmop Owo+ICAJcmV0dXJuIG9iajsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1faW50ZXJuYWwuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2ludGVybmFs LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMDJlNjZmYTE3 MGIwCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2ludGVybmFsLmMKPiBAQCAtMCwwICsxLDE3MCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkg MjAxNC0yMDE2IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4g KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJp Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo aW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUu Cj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4g KyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0v aTkxNV9kcm0uaD4KPiArI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gKwo+ICsjZGVmaW5lIFFVSUVU IChfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9XQVJOKQo+ICsKPiArLyogY29udmVydCBzd2lvdGxi IHNlZ21lbnQgc2l6ZSBpbnRvIHNlbnNpYmxlIHVuaXRzIChwYWdlcykhICovCj4gKyNkZWZpbmUg SU9fVExCX1NFR1BBR0VTIChJT19UTEJfU0VHU0laRSA8PCBJT19UTEJfU0hJRlQgPj4gUEFHRV9T SElGVCkKPiArCj4gK3N0YXRpYyB2b2lkIGludGVybmFsX2ZyZWVfcGFnZXMoc3RydWN0IHNnX3Rh YmxlICpzdCkKPiArewo+ICsJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKPiArCj4gKwlmb3IgKHNn ID0gc3QtPnNnbDsgc2c7IHNnID0gX19zZ19uZXh0KHNnKSkKPiArCQlfX2ZyZWVfcGFnZXMoc2df cGFnZShzZyksIGdldF9vcmRlcihzZy0+bGVuZ3RoKSk7Cj4gKwo+ICsJc2dfZnJlZV90YWJsZShz dCk7Cj4gKwlrZnJlZShzdCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0 X2dldF9wYWdlc19pbnRlcm5hbChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUob2JqLT5iYXNlLmRl dik7Cj4gKwl1bnNpZ25lZCBpbnQgbnBhZ2VzID0gb2JqLT5iYXNlLnNpemUgLyBQQUdFX1NJWkU7 Cj4gKwlzdHJ1Y3Qgc2dfdGFibGUgKnN0Owo+ICsJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKPiAr CWludCBtYXhfb3JkZXI7Cj4gKwlnZnBfdCBnZnA7Cj4gKwo+ICsJc3QgPSBrbWFsbG9jKHNpemVv Zigqc3QpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghc3QpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4g Kwo+ICsJaWYgKHNnX2FsbG9jX3RhYmxlKHN0LCBucGFnZXMsIEdGUF9LRVJORUwpKSB7Cj4gKwkJ a2ZyZWUoc3QpOwo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJfQo+ICsKPiArCXNnID0gc3QtPnNn bDsKPiArCXN0LT5uZW50cyA9IDA7Cj4gKwo+ICsJbWF4X29yZGVyID0gTUFYX09SREVSOwo+ICsj aWZkZWYgQ09ORklHX1NXSU9UTEIKPiArCWlmIChzd2lvdGxiX25yX3RibCgpKSAvKiBtaW5pbXVt IG1heCBzd2lvdGxiIHNpemUgaXMgSU9fVExCX1NFR1NJWkUgKi8KPiArCQltYXhfb3JkZXIgPSBt aW4obWF4X29yZGVyLCBpbG9nMihJT19UTEJfU0VHUEFHRVMpKTsKPiArI2VuZGlmCj4gKwo+ICsJ Z2ZwID0gR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9SRUNMQUlNQUJMRTsKPiAr CWlmIChJU19DUkVTVExJTkUoaTkxNSkgfHwgSVNfQlJPQURXQVRFUihpOTE1KSkgewo+ICsJCS8q IDk2NWdtIGNhbm5vdCByZWxvY2F0ZSBvYmplY3RzIGFib3ZlIDRHaUIuICovCj4gKwkJZ2ZwICY9 IH5fX0dGUF9ISUdITUVNOwo+ICsJCWdmcCB8PSBfX0dGUF9ETUEzMjsKPiArCX0KPiArCj4gKwlk byB7Cj4gKwkJaW50IG9yZGVyID0gbWluKGZscyhucGFnZXMpIC0gMSwgbWF4X29yZGVyKTsKPiAr CQlzdHJ1Y3QgcGFnZSAqcGFnZTsKPiArCj4gKwkJZG8gewo+ICsJCQlwYWdlID0gYWxsb2NfcGFn ZXMoZ2ZwIHwgKG9yZGVyID8gUVVJRVQgOiAwKSwgb3JkZXIpOwo+ICsJCQlpZiAocGFnZSkKPiAr CQkJCWJyZWFrOwo+ICsJCQlpZiAoIW9yZGVyLS0pCj4gKwkJCQlnb3RvIGVycjsKPiArCj4gKwkJ CS8qIExpbWl0IHN1YnNlcXVlbnQgYWxsb2NhdGlvbnMgYXMgd2VsbCAqLwo+ICsJCQltYXhfb3Jk ZXIgPSBvcmRlcjsKPiArCQl9IHdoaWxlICgxKTsKPiArCj4gKwkJc2dfc2V0X3BhZ2Uoc2csIHBh Z2UsIFBBR0VfU0laRSA8PCBvcmRlciwgMCk7Cj4gKwkJc3QtPm5lbnRzKys7Cj4gKwo+ICsJCW5w YWdlcyAtPSAxIDw8IG9yZGVyOwo+ICsJCWlmICghbnBhZ2VzKSB7Cj4gKwkJCXNnX21hcmtfZW5k KHNnKTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsKPiArCQlzZyA9IF9fc2dfbmV4dChzZyk7Cj4g Kwl9IHdoaWxlICgxKTsKPiArCW9iai0+cGFnZXMgPSBzdDsKPiArCj4gKwlpZiAoaTkxNV9nZW1f Z3R0X3ByZXBhcmVfb2JqZWN0KG9iaikpIHsKPiArCQlvYmotPnBhZ2VzID0gTlVMTDsKPiArCQln b3RvIGVycjsKPiArCX0KPiArCj4gKwkvKiBNYXJrIHRoZSBwYWdlcyBhcyBkb250bmVlZCB3aGls c3QgdGhleSBhcmUgc3RpbGwgcGlubmVkLiBBcyBzb29uCj4gKwkgKiBhcyB0aGV5IGFyZSB1bnBp bm5lZCB0aGV5IGFyZSBhbGxvd2VkIHRvIGJlIHJlYXBlZCBieSB0aGUgc2hyaW5rZXIsCj4gKwkg KiBhbmQgdGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byByZXBvcHVsYXRlIC0gdGhlIGNvbnRlbnRz IG9mIHRoaXMKPiArCSAqIG9iamVjdCBhcmUgb25seSB2YWxpZCB3aGlsc3QgYWN0aXZlIGFuZCBw aW5uZWQuCj4gKwkgKi8KPiArCW9iai0+bWFkdiA9IEk5MTVfTUFEVl9ET05UTkVFRDsKPiArCXJl dHVybiAwOwo+ICsKPiArZXJyOgo+ICsJc2dfbWFya19lbmQoc2cpOwo+ICsJaW50ZXJuYWxfZnJl ZV9wYWdlcyhzdCk7Cj4gKwlyZXR1cm4gLUVOT01FTTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg aTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlc19pbnRlcm5hbChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqKQo+ICt7Cj4gKwlpOTE1X2dlbV9ndHRfZmluaXNoX29iamVjdChvYmopOwo+ICsJ aW50ZXJuYWxfZnJlZV9wYWdlcyhvYmotPnBhZ2VzKTsKPiArCj4gKwlvYmotPmRpcnR5ID0gMDsK PiArCW9iai0+bWFkdiA9IEk5MTVfTUFEVl9XSUxMTkVFRDsKPiArfQo+ICsKPiArc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyBpOTE1X2dlbV9vYmplY3RfaW50ZXJu YWxfb3BzID0gewo+ICsJLmZsYWdzID0gSTkxNV9HRU1fT0JKRUNUX0hBU19TVFJVQ1RfUEFHRSwK PiArCS5nZXRfcGFnZXMgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzX2ludGVybmFsLAo+ICsJ LnB1dF9wYWdlcyA9IGk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXNfaW50ZXJuYWwsCj4gK307Cj4g Kwo+ICsvKioKPiArICogQ3JlYXRlcyBhIG5ldyBvYmplY3QgdGhhdCB3cmFwcyBzb21lIGludGVy bmFsIG1lbW9yeSBmb3IgcHJpdmF0ZSB1c2UuCj4gKyAqIFRoaXMgb2JqZWN0IGlzIG5vdCBiYWNr ZWQgYnkgc3dhcHBhYmxlIHN0b3JhZ2UsIGFuZCBhcyBzdWNoIGl0cyBjb250ZW50cwo+ICsgKiBh cmUgdm9sYXRpbGUgYW5kIG9ubHkgdmFsaWQgd2hpbHN0IHBpbm5lZC4gSWYgdGhlIG9iamVjdCBp cyByZWFwZWQgYnkgdGhlCj4gKyAqIHNocmlua2VyLCBpdHMgcGFnZXMgYW5kIGRhdGEgd2lsbCBi ZSBkaXNjYXJkZWQuIEVxdWFsbHksIGl0IGlzIG5vdCBhIGZ1bGwKPiArICogR0VNIG9iamVjdCBh bmQgc28gbm90IHZhbGlkIGZvciBhY2Nlc3MgZnJvbSB1c2Vyc3BhY2UuIFRoaXMgbWFrZXMgaXQg dXNlZnVsCj4gKyAqIGZvciBoYXJkd2FyZSBpbnRlcmZhY2VzIGxpa2UgcmluZ2J1ZmZlcnMgKHdo aWNoIGFyZSBwaW5uZWQgZnJvbSB0aGUgdGltZQo+ICsgKiB0aGUgcmVxdWVzdCBpcyB3cml0dGVu IHRvIHRoZSB0aW1lIHRoZSBoYXJkd2FyZSBzdG9wcyBhY2Nlc3NpbmcgaXQpLCBidXQKPiArICog bm90IGZvciBjb250ZXh0cyAod2hpY2ggbmVlZCB0byBiZSBwcmVzZXJ2ZWQgd2hlbiBub3QgYWN0 aXZlIGZvciBsYXRlcgo+ICsgKiByZXVzZSkuIE5vdGUgdGhhdCBpdCBpcyBub3QgY2xlYXJlZCB1 cG9uIGFsbG9jYXRpb24uCj4gKyAqLwo+ICtzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqCj4g K2k5MTVfZ2VtX29iamVjdF9jcmVhdGVfaW50ZXJuYWwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUsCj4gKwkJCQl1bnNpZ25lZCBpbnQgc2l6ZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iajsKPiArCj4gKwlvYmogPSBpOTE1X2dlbV9vYmplY3RfYWxsb2MoJmk5 MTUtPmRybSk7Cj4gKwlpZiAoIW9iaikKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAr Cj4gKwlkcm1fZ2VtX3ByaXZhdGVfb2JqZWN0X2luaXQoJmk5MTUtPmRybSwgJm9iai0+YmFzZSwg c2l6ZSk7Cj4gKwlpOTE1X2dlbV9vYmplY3RfaW5pdChvYmosICZpOTE1X2dlbV9vYmplY3RfaW50 ZXJuYWxfb3BzKTsKPiArCj4gKwlvYmotPmJhc2Uud3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9N QUlOX0NQVTsKPiArCW9iai0+YmFzZS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fQ1BV Owo+ICsJb2JqLT5jYWNoZV9sZXZlbCA9IEhBU19MTEMoaTkxNSkgPyBJOTE1X0NBQ0hFX0xMQyA6 IEk5MTVfQ0FDSEVfTk9ORTsKPiArCj4gKwlyZXR1cm4gb2JqOwo+ICt9Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlbmRlcl9zdGF0ZS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVuZGVyX3N0YXRlLmMKPiBpbmRleCBlN2MzZGJjYzZjODEu LjIxN2UwYjU4YjkzMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9yZW5kZXJfc3RhdGUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Jl bmRlcl9zdGF0ZS5jCj4gQEAgLTE4Nyw3ICsxODcsNyBAQCBpbnQgaTkxNV9nZW1fcmVuZGVyX3N0 YXRlX2luaXQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCj4gIAlpZiAoc28ucm9k YXRhLT5iYXRjaF9pdGVtcyAqIDQgPiA0MDk2KQo+ICAJCXJldHVybiAtRUlOVkFMOwo+Cj4gLQlv YmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlKCZyZXEtPmk5MTUtPmRybSwgNDA5Nik7Cj4gKwlv YmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2ludGVybmFsKHJlcS0+aTkxNSwgNDA5Nik7Cj4g IAlpZiAoSVNfRVJSKG9iaikpCj4gIAkJcmV0dXJuIFBUUl9FUlIob2JqKTsKPgo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCj4gaW5kZXggMmRjOTQ4MTJiZWE1Li5jN2FjN2Uy NmYyZGMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2Nz LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYwo+IEBAIC0y NjQsNyArMjY0LDcgQEAgaW50IGludGVsX2VuZ2luZV9jcmVhdGVfc2NyYXRjaChzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUsIGludCBzaXplKQo+Cj4gIAlvYmogPSBpOTE1X2dlbV9vYmpl Y3RfY3JlYXRlX3N0b2xlbigmZW5naW5lLT5pOTE1LT5kcm0sIHNpemUpOwo+ICAJaWYgKCFvYmop Cj4gLQkJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZSgmZW5naW5lLT5pOTE1LT5kcm0sIHNp emUpOwo+ICsJCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfaW50ZXJuYWwoZW5naW5lLT5p OTE1LCBzaXplKTsKPiAgCWlmIChJU19FUlIob2JqKSkgewo+ICAJCURSTV9FUlJPUigiRmFpbGVk IHRvIGFsbG9jYXRlIHNjcmF0Y2ggcGFnZVxuIik7Cj4gIAkJcmV0dXJuIFBUUl9FUlIob2JqKTsK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCj4gaW5kZXggZTI5ZTg0ODEz MjM0Li4yY2UyOGQ0MWY0MDUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcmluZ2J1ZmZlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1 ZmZlci5jCj4gQEAgLTE3ODQsOSArMTc4NCwxMCBAQCBzdGF0aWMgaW50IGluaXRfc3RhdHVzX3Bh Z2Uoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iajsKPiAgCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICAJdW5zaWduZWQgaW50 IGZsYWdzOwo+ICsJdm9pZCAqdmFkZHI7Cj4gIAlpbnQgcmV0Owo+Cj4gLQlvYmogPSBpOTE1X2dl bV9vYmplY3RfY3JlYXRlKCZlbmdpbmUtPmk5MTUtPmRybSwgNDA5Nik7Cj4gKwlvYmogPSBpOTE1 X2dlbV9vYmplY3RfY3JlYXRlX2ludGVybmFsKGVuZ2luZS0+aTkxNSwgNDA5Nik7Cj4gIAlpZiAo SVNfRVJSKG9iaikpIHsKPiAgCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBzdGF0dXMg cGFnZVxuIik7Cj4gIAkJcmV0dXJuIFBUUl9FUlIob2JqKTsKPiBAQCAtMTgxOSwxNSArMTgyMCwy MiBAQCBzdGF0aWMgaW50IGluaXRfc3RhdHVzX3BhZ2Uoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQo+ICAJaWYgKHJldCkKPiAgCQlnb3RvIGVycjsKPgo+ICsJdmFkZHIgPSBpOTE1X2dl bV9vYmplY3RfcGluX21hcChvYmosIEk5MTVfTUFQX1dCKTsKPiArCWlmIChJU19FUlIodmFkZHIp KSB7Cj4gKwkJcmV0ID0gUFRSX0VSUih2YWRkcik7Cj4gKwkJZ290byBlcnJfdW5waW47Cj4gKwl9 Cj4gKwo+ICAJZW5naW5lLT5zdGF0dXNfcGFnZS52bWEgPSB2bWE7Cj4gIAllbmdpbmUtPnN0YXR1 c19wYWdlLmdndHRfb2Zmc2V0ID0gaTkxNV9nZ3R0X29mZnNldCh2bWEpOwo+IC0JZW5naW5lLT5z dGF0dXNfcGFnZS5wYWdlX2FkZHIgPQo+IC0JCWk5MTVfZ2VtX29iamVjdF9waW5fbWFwKG9iaiwg STkxNV9NQVBfV0IpOwo+ICsJZW5naW5lLT5zdGF0dXNfcGFnZS5wYWdlX2FkZHIgPSBtZW1zZXQo dmFkZHIsIDAsIDQwOTYpOwo+Cj4gIAlEUk1fREVCVUdfRFJJVkVSKCIlcyBod3Mgb2Zmc2V0OiAw eCUwOHhcbiIsCj4gIAkJCSBlbmdpbmUtPm5hbWUsIGk5MTVfZ2d0dF9vZmZzZXQodm1hKSk7Cj4g IAlyZXR1cm4gMDsKPgo+ICtlcnJfdW5waW46Cj4gKwlpOTE1X3ZtYV91bnBpbih2bWEpOwo+ICBl cnI6Cj4gIAlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gIAlyZXR1cm4gcmV0Owo+CgpSZXZp ZXdlZC1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClJlZ2Fy ZHMsCgpUdnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 Cg==