From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 23/34] drm/i915: Share per-timeline HWSP using a slab suballocator Date: Tue, 22 Jan 2019 10:47:11 +0000 Message-ID: <5e4b1d6d-c9ca-c300-bc77-bb6c33a74676@linux.intel.com> References: <20190121222117.23305-1-chris@chris-wilson.co.uk> <20190121222117.23305-24-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 mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 19DBB6EC76 for ; Tue, 22 Jan 2019 10:47:10 +0000 (UTC) In-Reply-To: <20190121222117.23305-24-chris@chris-wilson.co.uk> Content-Language: en-US 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 Ck9uIDIxLzAxLzIwMTkgMjI6MjEsIENocmlzIFdpbHNvbiB3cm90ZToKPiBJZiB3ZSByZXN0cmlj dCBvdXJzZWx2ZXMgdG8gb25seSB1c2luZyBhIGNhY2hlbGluZSBmb3IgZWFjaCB0aW1lbGluZSdz Cj4gSFdTUCAod2UgY291bGQgZ28gc21hbGxlciwgYnV0IHdhbnQgdG8gYXZvaWQgbmVlZGxlc3Mg cG9sbHV0aW5nCj4gY2FjaGVsaW5lcyBvbiBkaWZmZXJlbnQgZW5naW5lcyBiZXR3ZWVuIGRpZmZl cmVudCBjb250ZXh0cyksIHRoZW4gd2UgY2FuCj4gc3ViYWxsb2NhdGUgYSBzaW5nbGUgNGsgcGFn ZSBpbnRvIDY0IGRpZmZlcmVudCB0aW1lbGluZSBIV1NQLiBCeQo+IHRyZWF0aW5nIGVhY2ggZnJl c2ggYWxsb2NhdGlvbiBhcyBhIHNsYWIgb2YgNjQgZW50cmllcywgd2UgY2FuIGtlZXAgaXQKPiBh cm91bmQgZm9yIHRoZSBuZXh0IDY0IGFsbG9jYXRpb24gYXR0ZW1wdHMgdW50aWwgd2UgbmVlZCB0 byByZWZyZXNoIHRoZQo+IHNsYWIgY2FjaGUuCj4gCj4gSm9obiBIYXJyaXNvbiBub3RlZCB0aGUg aXNzdWUgb2YgZnJhZ21lbnRhdGlvbiBsZWFkaW5nIHRvIHRoZSBzYW1lIHdvcnN0Cj4gY2FzZSBw ZXJmb3JtYW5jZSBvZiBvbmUgcGFnZSBwZXIgdGltZWxpbmUgYXMgYmVmb3JlLCB3aGljaCBjYW4g YmUKPiBtaXRpZ2F0ZWQgYnkgYWRvcHRpbmcgYSBmcmVlbGlzdC4KPiAKPiB2MjogS2VlcCBhbGwg cGFydGlhbGx5IGFsbG9jYXRlZCBIV1NQIG9uIGEgZnJlZWxpc3QKPiAKPiBUaGlzIGlzIHN0aWxs IHdpdGhvdXQgbWlncmF0aW9uLCBzbyBpdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHN5c3RlbSB0byBl bmQKPiB1cCB3aXRoIGVhY2ggdGltZWxpbmUgaW4gaXRzIG93biBwYWdlLCBidXQgd2UgZW5zdXJl IHRoYXQgbm8gbmV3Cj4gYWxsb2NhdGlvbiB3b3VsZCBuZWVkbGVzcyBhbGxvY2F0ZSBhIGZyZXNo IHBhZ2UhCj4gCj4gdjM6IFRocm93IGEgc2VsZnRlc3QgYXQgdGhlIGFsbG9jYXRvciB0byB0cnkg YW5kIGNhdGNoIGludmFsaWQgY2FjaGVsaW5lCj4gcmV1c2UuCj4gCj4gU2lnbmVkLW9mZi1ieTog Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gQ2M6IEpvaG4gSGFycmlz b24gPEpvaG4uQy5IYXJyaXNvbkBJbnRlbC5jb20+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oICAgICAgICAgICAgICAgfCAgIDQgKwo+ICAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV90aW1lbGluZS5jICAgICAgICAgIHwgMTE3ICsrKysrKysrKysrKy0tLQo+ICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90aW1lbGluZS5oICAgICAgICAgIHwgICAxICsKPiAg IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmggICAgICAgICAgICAgICB8ICAxMiArKwo+ ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmFuZG9tLmMgIHwgIDMzICsr KystCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yYW5kb20uaCAgfCAg IDMgKwo+ICAgLi4uL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV90aW1lbGluZS5jICAgIHwg MTQwICsrKysrKysrKysrKysrKysrKwo+ICAgNyBmaWxlcyBjaGFuZ2VkLCAyODIgaW5zZXJ0aW9u cygrKSwgMjggZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXgg MzY0MDY3ZjgxMWY3Li5jMDBlYWYyODg5ZmIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK PiBAQCAtMTk3OCw2ICsxOTc4LDEwIEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKPiAgIAkJ c3RydWN0IGk5MTVfZ3RfdGltZWxpbmVzIHsKPiAgIAkJCXN0cnVjdCBtdXRleCBtdXRleDsgLyog cHJvdGVjdHMgbGlzdCwgdGFpbnRlZCBieSBHUFUgKi8KPiAgIAkJCXN0cnVjdCBsaXN0X2hlYWQg bGlzdDsKPiArCj4gKwkJCS8qIFBhY2sgbXVsdGlwbGUgdGltZWxpbmVzJyBzZXFub3MgaW50byB0 aGUgc2FtZSBwYWdlICovCj4gKwkJCXNwaW5sb2NrX3QgaHdzcF9sb2NrOwo+ICsJCQlzdHJ1Y3Qg bGlzdF9oZWFkIGh3c3BfZnJlZV9saXN0Owo+ICAgCQl9IHRpbWVsaW5lczsKPiAgIAo+ICAgCQlz dHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV9yaW5nczsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV90aW1lbGluZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90aW1l bGluZS5jCj4gaW5kZXggOGQ1NzkyMzExYThmLi42OWVlMzNkZmEzNDAgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90aW1lbGluZS5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV90aW1lbGluZS5jCj4gQEAgLTksNiArOSwxMiBAQAo+ICAgI2luY2x1ZGUg Imk5MTVfdGltZWxpbmUuaCIKPiAgICNpbmNsdWRlICJpOTE1X3N5bmNtYXAuaCIKPiAgIAo+ICtz dHJ1Y3QgaTkxNV90aW1lbGluZV9od3NwIHsKPiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICsJ c3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpbms7Cj4gKwl1NjQgZnJlZV9iaXRtYXA7Cj4gK307Cj4g Kwo+ICAgc3RhdGljIHN0cnVjdCBpOTE1X3ZtYSAqX19od3NwX2FsbG9jKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1KQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv Ymo7Cj4gQEAgLTI3LDI4ICszMyw5MiBAQCBzdGF0aWMgc3RydWN0IGk5MTVfdm1hICpfX2h3c3Bf YWxsb2Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gICAJcmV0dXJuIHZtYTsKPiAg IH0KPiAgIAo+IC1zdGF0aWMgaW50IGh3c3BfYWxsb2Moc3RydWN0IGk5MTVfdGltZWxpbmUgKnRp bWVsaW5lKQo+ICtzdGF0aWMgc3RydWN0IGk5MTVfdm1hICoKPiAraHdzcF9hbGxvYyhzdHJ1Y3Qg aTkxNV90aW1lbGluZSAqdGltZWxpbmUsIGludCAqb2Zmc2V0KQo+ICAgewo+IC0Jc3RydWN0IGk5 MTVfdm1hICp2bWE7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRpbWVsaW5l LT5pOTE1Owo+ICsJc3RydWN0IGk5MTVfZ3RfdGltZWxpbmVzICpndCA9ICZpOTE1LT5ndC50aW1l bGluZXM7Cj4gKwlzdHJ1Y3QgaTkxNV90aW1lbGluZV9od3NwICpod3NwOwo+ICsJaW50IGNhY2hl bGluZTsKPiAgIAo+IC0Jdm1hID0gX19od3NwX2FsbG9jKHRpbWVsaW5lLT5pOTE1KTsKPiAtCWlm IChJU19FUlIodm1hKSkKPiAtCQlyZXR1cm4gUFRSX0VSUih2bWEpOwo+ICsJQlVJTERfQlVHX09O KEJJVFNfUEVSX1RZUEUodTY0KSAqIENBQ0hFTElORV9CWVRFUyA+IFBBR0VfU0laRSk7Cj4gICAK PiAtCXRpbWVsaW5lLT5od3NwX2dndHQgPSB2bWE7Cj4gLQl0aW1lbGluZS0+aHdzcF9vZmZzZXQg PSAwOwo+ICsJc3Bpbl9sb2NrKCZndC0+aHdzcF9sb2NrKTsKPiAgIAo+IC0JcmV0dXJuIDA7Cj4g KwkvKiBod3NwX2ZyZWVfbGlzdCBvbmx5IGNvbnRhaW5zIEhXU1AgdGhhdCBoYXZlIGF2YWlsYWJs ZSBjYWNoZWxpbmVzICovCj4gKwlod3NwID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKCZndC0+ aHdzcF9mcmVlX2xpc3QsCj4gKwkJCQkJdHlwZW9mKCpod3NwKSwgZnJlZV9saW5rKTsKPiArCWlm ICghaHdzcCkgewo+ICsJCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICsKPiArCQlzcGluX3VubG9j aygmZ3QtPmh3c3BfbG9jayk7Cj4gKwo+ICsJCWh3c3AgPSBrbWFsbG9jKHNpemVvZigqaHdzcCks IEdGUF9LRVJORUwpOwo+ICsJCWlmICghaHdzcCkKPiArCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7Cj4gKwo+ICsJCXZtYSA9IF9faHdzcF9hbGxvYyhpOTE1KTsKPiArCQlpZiAoSVNfRVJSKHZt YSkpIHsKPiArCQkJa2ZyZWUoaHdzcCk7Cj4gKwkJCXJldHVybiB2bWE7Cj4gKwkJfQo+ICsKPiAr CQl2bWEtPnByaXZhdGUgPSBod3NwOwo+ICsJCWh3c3AtPnZtYSA9IHZtYTsKPiArCQlod3NwLT5m cmVlX2JpdG1hcCA9IH4wdWxsOwo+ICsKPiArCQlzcGluX2xvY2soJmd0LT5od3NwX2xvY2spOwo+ ICsJCWxpc3RfYWRkKCZod3NwLT5mcmVlX2xpbmssICZndC0+aHdzcF9mcmVlX2xpc3QpOwo+ICsJ fQo+ICsKPiArCUdFTV9CVUdfT04oIWh3c3AtPmZyZWVfYml0bWFwKTsKPiArCWNhY2hlbGluZSA9 IF9fZmZzNjQoaHdzcC0+ZnJlZV9iaXRtYXApOwo+ICsJaHdzcC0+ZnJlZV9iaXRtYXAgJj0gfkJJ VF9VTEwoY2FjaGVsaW5lKTsKPiArCWlmICghaHdzcC0+ZnJlZV9iaXRtYXApCj4gKwkJbGlzdF9k ZWwoJmh3c3AtPmZyZWVfbGluayk7Cj4gKwo+ICsJc3Bpbl91bmxvY2soJmd0LT5od3NwX2xvY2sp Owo+ICsKPiArCUdFTV9CVUdfT04oaHdzcC0+dm1hLT5wcml2YXRlICE9IGh3c3ApOwo+ICsKPiAr CSpvZmZzZXQgPSBjYWNoZWxpbmUgKiBDQUNIRUxJTkVfQllURVM7Cj4gKwlyZXR1cm4gaHdzcC0+ dm1hOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBod3NwX2ZyZWUoc3RydWN0IGk5MTVfdGltZWxp bmUgKnRpbWVsaW5lKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9ndF90aW1lbGluZXMgKmd0ID0gJnRp bWVsaW5lLT5pOTE1LT5ndC50aW1lbGluZXM7Cj4gKwlzdHJ1Y3QgaTkxNV90aW1lbGluZV9od3Nw ICpod3NwOwo+ICsKPiArCWh3c3AgPSBpOTE1X3RpbWVsaW5lX2h3c3AodGltZWxpbmUpOwo+ICsJ aWYgKCFod3NwKSAvKiBsZWF2ZSBnbG9iYWwgSFdTUCBhbG9uZSEgKi8KCkxhdGVyIHlvdSBhZGQg aTkxNV90aW1lbGluZV9pc19nbG9iYWwgc28gY291bGQgdXNlIGl0IGhlcmUuCgo+ICsJCXJldHVy bjsKPiArCj4gKwlzcGluX2xvY2soJmd0LT5od3NwX2xvY2spOwo+ICsKPiArCS8qIEFzIGEgY2Fj aGVsaW5lIGJlY29tZXMgYXZhaWxhYmxlLCBwdWJsaXNoIHRoZSBIV1NQIG9uIHRoZSBmcmVlbGlz dCAqLwoKVGhhbmsgeW91ISA6KQoKPiArCWlmICghaHdzcC0+ZnJlZV9iaXRtYXApCj4gKwkJbGlz dF9hZGRfdGFpbCgmaHdzcC0+ZnJlZV9saW5rLCAmZ3QtPmh3c3BfZnJlZV9saXN0KTsKPiArCj4g Kwlod3NwLT5mcmVlX2JpdG1hcCB8PSBCSVRfVUxMKHRpbWVsaW5lLT5od3NwX29mZnNldCAvIENB Q0hFTElORV9CWVRFUyk7Cj4gKwo+ICsJLyogQW5kIGlmIG5vIG9uZSBpcyBsZWZ0IHVzaW5nIGl0 LCBnaXZlIHRoZSBwYWdlIGJhY2sgdG8gdGhlIHN5c3RlbSAqLwo+ICsJaWYgKGh3c3AtPmZyZWVf Yml0bWFwID09IH4wdWxsKSB7Cj4gKwkJaTkxNV92bWFfcHV0KGh3c3AtPnZtYSk7Cj4gKwkJbGlz dF9kZWwoJmh3c3AtPmZyZWVfbGluayk7Cj4gKwkJa2ZyZWUoaHdzcCk7Cj4gKwl9Cj4gKwo+ICsJ c3Bpbl91bmxvY2soJmd0LT5od3NwX2xvY2spOwo+ICAgfQo+ICAgCj4gICBpbnQgaTkxNV90aW1l bGluZV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICAgCQkgICAgICAgc3Ry dWN0IGk5MTVfdGltZWxpbmUgKnRpbWVsaW5lLAo+ICAgCQkgICAgICAgY29uc3QgY2hhciAqbmFt ZSwKPiAtCQkgICAgICAgc3RydWN0IGk5MTVfdm1hICpnbG9iYWxfaHdzcCkKPiArCQkgICAgICAg c3RydWN0IGk5MTVfdm1hICpod3NwKQo+ICAgewo+ICAgCXN0cnVjdCBpOTE1X2d0X3RpbWVsaW5l cyAqZ3QgPSAmaTkxNS0+Z3QudGltZWxpbmVzOwo+ICAgCXZvaWQgKnZhZGRyOwo+IC0JaW50IGVy cjsKPiAgIAo+ICAgCS8qCj4gICAJICogSWRlYWxseSB3ZSB3YW50IGEgc2V0IG9mIGVuZ2luZXMg b24gYSBzaW5nbGUgbGVhZiBhcyB3ZSBleHBlY3QKPiBAQCAtNjQsMTggKzEzNCwxOCBAQCBpbnQg aTkxNV90aW1lbGluZV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICAgCXRp bWVsaW5lLT5uYW1lID0gbmFtZTsKPiAgIAl0aW1lbGluZS0+cGluX2NvdW50ID0gMDsKPiAgIAo+ IC0JaWYgKGdsb2JhbF9od3NwKSB7Cj4gLQkJdGltZWxpbmUtPmh3c3BfZ2d0dCA9IGk5MTVfdm1h X2dldChnbG9iYWxfaHdzcCk7Cj4gLQkJdGltZWxpbmUtPmh3c3Bfb2Zmc2V0ID0gSTkxNV9HRU1f SFdTX1NFUU5PX0FERFI7Cj4gLQl9IGVsc2Ugewo+IC0JCWVyciA9IGh3c3BfYWxsb2ModGltZWxp bmUpOwo+IC0JCWlmIChlcnIpCj4gLQkJCXJldHVybiBlcnI7Cj4gKwl0aW1lbGluZS0+aHdzcF9v ZmZzZXQgPSBJOTE1X0dFTV9IV1NfU0VRTk9fQUREUjsKCkNvdWxkIGJlIGNsZWFyZXIgdG8gcHV0 IHRoaXMgb24gdGhlIGVsc2UgYnJhbmNoLgoKPiArCWlmICghaHdzcCkgewo+ICsJCWh3c3AgPSBo d3NwX2FsbG9jKHRpbWVsaW5lLCAmdGltZWxpbmUtPmh3c3Bfb2Zmc2V0KTsKPiArCQlpZiAoSVNf RVJSKGh3c3ApKQo+ICsJCQlyZXR1cm4gUFRSX0VSUihod3NwKTsKPiAgIAl9Cj4gKwl0aW1lbGlu ZS0+aHdzcF9nZ3R0ID0gaTkxNV92bWFfZ2V0KGh3c3ApOwo+ICAgCj4gLQl2YWRkciA9IGk5MTVf Z2VtX29iamVjdF9waW5fbWFwKHRpbWVsaW5lLT5od3NwX2dndHQtPm9iaiwgSTkxNV9NQVBfV0Ip Owo+ICsJdmFkZHIgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChod3NwLT5vYmosIEk5MTVfTUFQ X1dCKTsKPiAgIAlpZiAoSVNfRVJSKHZhZGRyKSkgewo+IC0JCWk5MTVfdm1hX3B1dCh0aW1lbGlu ZS0+aHdzcF9nZ3R0KTsKPiArCQlod3NwX2ZyZWUodGltZWxpbmUpOwo+ICsJCWk5MTVfdm1hX3B1 dChod3NwKTsKPiAgIAkJcmV0dXJuIFBUUl9FUlIodmFkZHIpOwo+ICAgCX0KPiAgIAo+IEBAIC0x MDUsNiArMTc1LDkgQEAgdm9pZCBpOTE1X3RpbWVsaW5lc19pbml0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KQo+ICAgCW11dGV4X2luaXQoJmd0LT5tdXRleCk7Cj4gICAJSU5JVF9MSVNU X0hFQUQoJmd0LT5saXN0KTsKPiAgIAo+ICsJc3Bpbl9sb2NrX2luaXQoJmd0LT5od3NwX2xvY2sp Owo+ICsJSU5JVF9MSVNUX0hFQUQoJmd0LT5od3NwX2ZyZWVfbGlzdCk7Cj4gKwo+ICAgCS8qIHZp YSBpOTE1X2dlbV93YWl0X2Zvcl9pZGxlKCkgKi8KPiAgIAlpOTE1X2dlbV9zaHJpbmtlcl90YWlu dHNfbXV0ZXgoaTkxNSwgJmd0LT5tdXRleCk7Cj4gICB9Cj4gQEAgLTE0NCwxMiArMjE3LDEzIEBA IHZvaWQgaTkxNV90aW1lbGluZV9maW5pKHN0cnVjdCBpOTE1X3RpbWVsaW5lICp0aW1lbGluZSkK PiAgIAlHRU1fQlVHX09OKHRpbWVsaW5lLT5waW5fY291bnQpOwo+ICAgCUdFTV9CVUdfT04oIWxp c3RfZW1wdHkoJnRpbWVsaW5lLT5yZXF1ZXN0cykpOwo+ICAgCj4gLQlpOTE1X3N5bmNtYXBfZnJl ZSgmdGltZWxpbmUtPnN5bmMpOwo+IC0KPiAgIAltdXRleF9sb2NrKCZndC0+bXV0ZXgpOwo+ICAg CWxpc3RfZGVsKCZ0aW1lbGluZS0+bGluayk7Cj4gICAJbXV0ZXhfdW5sb2NrKCZndC0+bXV0ZXgp Owo+ICAgCj4gKwlpOTE1X3N5bmNtYXBfZnJlZSgmdGltZWxpbmUtPnN5bmMpOwo+ICsJaHdzcF9m cmVlKHRpbWVsaW5lKTsKPiArCj4gICAJaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcCh0aW1lbGlu ZS0+aHdzcF9nZ3R0LT5vYmopOwo+ICAgCWk5MTVfdm1hX3B1dCh0aW1lbGluZS0+aHdzcF9nZ3R0 KTsKPiAgIH0KPiBAQCAtMjI2LDYgKzMwMCw3IEBAIHZvaWQgaTkxNV90aW1lbGluZXNfZmluaShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIAlzdHJ1Y3QgaTkxNV9ndF90aW1lbGlu ZXMgKmd0ID0gJmk5MTUtPmd0LnRpbWVsaW5lczsKPiAgIAo+ICAgCUdFTV9CVUdfT04oIWxpc3Rf ZW1wdHkoJmd0LT5saXN0KSk7Cj4gKwlHRU1fQlVHX09OKCFsaXN0X2VtcHR5KCZndC0+aHdzcF9m cmVlX2xpc3QpKTsKPiAgIAo+ICAgCW11dGV4X2Rlc3Ryb3koJmd0LT5tdXRleCk7Cj4gICB9Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdGltZWxpbmUuaCBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfdGltZWxpbmUuaAo+IGluZGV4IDBjMzczOWQ1M2Q3OS4uYWI3 MzZlMmU1NzA3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdGltZWxp bmUuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdGltZWxpbmUuaAo+IEBAIC0z Myw2ICszMyw3IEBACj4gICAjaW5jbHVkZSAiaTkxNV91dGlscy5oIgo+ICAgCj4gICBzdHJ1Y3Qg aTkxNV92bWE7Cj4gK3N0cnVjdCBpOTE1X3RpbWVsaW5lX2h3c3A7Cj4gICAKPiAgIHN0cnVjdCBp OTE1X3RpbWVsaW5lIHsKPiAgIAl1NjQgZmVuY2VfY29udGV4dDsKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf dm1hLmgKPiBpbmRleCA1NzkzYWJlNTA5YTIuLjQ2ZWI4MThlZDMwOSAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV92bWEuaAo+IEBAIC0yMjYsNiArMjI2LDE4IEBAIHN0YXRpYyBpbmxpbmUgdTMyIGk5 MTVfZ2d0dF9waW5fYmlhcyhzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIAlyZXR1cm4gaTkxNV92 bV90b19nZ3R0KHZtYS0+dm0pLT5waW5fYmlhczsKPiAgIH0KPiAgIAo+ICsvKiBYWFggaW5saW5l IHNwYWdoZXR0aSAqLwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBpOTE1X3RpbWVsaW5lX2h3c3Ag Kgo+ICtpOTE1X3RpbWVsaW5lX2h3c3AoY29uc3Qgc3RydWN0IGk5MTVfdGltZWxpbmUgKnRsKQo+ ICt7Cj4gKwlyZXR1cm4gdGwtPmh3c3BfZ2d0dC0+cHJpdmF0ZTsKPiArfQo+ICsKPiArc3RhdGlj IGlubGluZSBib29sIGk5MTVfdGltZWxpbmVfaXNfZ2xvYmFsKGNvbnN0IHN0cnVjdCBpOTE1X3Rp bWVsaW5lICp0bCkKPiArewo+ICsJcmV0dXJuICFpOTE1X3RpbWVsaW5lX2h3c3AodGwpOwo+ICt9 Cj4gKwo+ICAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaTkxNV92bWEgKmk5MTVfdm1hX2dldChzdHJ1 Y3QgaTkxNV92bWEgKnZtYSkKPiAgIHsKPiAgIAlpOTE1X2dlbV9vYmplY3RfZ2V0KHZtYS0+b2Jq KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmFu ZG9tLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yYW5kb20uYwo+IGlu ZGV4IDFmNDE1Y2U0NzAxOC4uNzE2YTNmMTlmMDMwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JhbmRvbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL2k5MTVfcmFuZG9tLmMKPiBAQCAtNDEsMTggKzQxLDM3IEBAIHU2NCBp OTE1X3ByYW5kb21fdTY0X3N0YXRlKHN0cnVjdCBybmRfc3RhdGUgKnJuZCkKPiAgIAlyZXR1cm4g eDsKPiAgIH0KPiAgIAo+IC12b2lkIGk5MTVfcmFuZG9tX3Jlb3JkZXIodW5zaWduZWQgaW50ICpv cmRlciwgdW5zaWduZWQgaW50IGNvdW50LAo+IC0JCQkgc3RydWN0IHJuZF9zdGF0ZSAqc3RhdGUp Cj4gK3ZvaWQgaTkxNV9wcmFuZG9tX3NodWZmbGUodm9pZCAqYXJyLCBzaXplX3QgZWxzeiwgc2l6 ZV90IGNvdW50LAo+ICsJCQkgIHN0cnVjdCBybmRfc3RhdGUgKnN0YXRlKQo+ICAgewo+IC0JdW5z aWduZWQgaW50IGksIGo7Cj4gKwljaGFyIHN0YWNrWzEyOF07Cj4gKwo+ICsJaWYgKFdBUk5fT04o ZWxzeiA+IHNpemVvZihzdGFjaykgfHwgY291bnQgPiBVMzJfTUFYKSkKCkkgd29uZGVyIGlmIHRo ZSBlbHN6ID4gc2l6ZW9mKHN0YWNrKSB3b3VsZCB3b3JrIGFzIGEgQlVJTERfQlVHX09OIGlmIApl bHN6IHdhcyBtYXJrZWQgYXMgY29uc3QuIFNlZW1zIHRvIGJlIGNvbnN0IGF0IGJvdGggY2FsbCBz aXRlcy4KClN0ZXAgZnVydGhlciBzaXppbmcgdGhlIHN0YWNrIGJ5IGl0LCBidXQuLiB0aGF0J3Mg c29tZSBHQ0MgZXh0ZW5zaW9uIHdlIApzaG91bGQgbm90IHVzZSByaWdodD8KCj4gKwkJcmV0dXJu Owo+ICsKPiArCWlmICghZWxzeiB8fCAhY291bnQpCj4gKwkJcmV0dXJuOwo+ICsKPiArCS8qIEZp c2hlci1ZYXRlcyBzaHVmZmxlIGNvdXJ0ZXN5IG9mIEtudXRoICovCj4gKwl3aGlsZSAoLS1jb3Vu dCkgewo+ICsJCXNpemVfdCBzd3A7Cj4gKwo+ICsJCXN3cCA9IGk5MTVfcHJhbmRvbV91MzJfbWF4 X3N0YXRlKGNvdW50ICsgMSwgc3RhdGUpOwo+ICsJCWlmIChzd3AgPT0gY291bnQpCj4gKwkJCWNv bnRpbnVlOwo+ICAgCj4gLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewo+IC0JCUJVSUxE X0JVR19PTihzaXplb2YodW5zaWduZWQgaW50KSA+IHNpemVvZih1MzIpKTsKPiAtCQlqID0gaTkx NV9wcmFuZG9tX3UzMl9tYXhfc3RhdGUoY291bnQsIHN0YXRlKTsKPiAtCQlzd2FwKG9yZGVyW2ld LCBvcmRlcltqXSk7Cj4gKwkJbWVtY3B5KHN0YWNrLCBhcnIgKyBjb3VudCAqIGVsc3osIGVsc3op Owo+ICsJCW1lbWNweShhcnIgKyBjb3VudCAqIGVsc3osIGFyciArIHN3cCAqIGVsc3osIGVsc3op Owo+ICsJCW1lbWNweShhcnIgKyBzd3AgKiBlbHN6LCBzdGFjaywgZWxzeik7Cj4gICAJfQo+ICAg fQo+ICAgCj4gK3ZvaWQgaTkxNV9yYW5kb21fcmVvcmRlcih1bnNpZ25lZCBpbnQgKm9yZGVyLCB1 bnNpZ25lZCBpbnQgY291bnQsCj4gKwkJCSBzdHJ1Y3Qgcm5kX3N0YXRlICpzdGF0ZSkKPiArewo+ ICsJaTkxNV9wcmFuZG9tX3NodWZmbGUob3JkZXIsIHNpemVvZigqb3JkZXIpLCBjb3VudCwgc3Rh dGUpOwo+ICt9Cj4gKwo+ICAgdW5zaWduZWQgaW50ICppOTE1X3JhbmRvbV9vcmRlcih1bnNpZ25l ZCBpbnQgY291bnQsIHN0cnVjdCBybmRfc3RhdGUgKnN0YXRlKQo+ICAgewo+ICAgCXVuc2lnbmVk IGludCAqb3JkZXIsIGk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9pOTE1X3JhbmRvbS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVf cmFuZG9tLmgKPiBpbmRleCA3ZGZmZWRjNTAxY2EuLjhlMWZmOWMxMDViNiAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yYW5kb20uaAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JhbmRvbS5oCj4gQEAgLTU0LDQgKzU0 LDcgQEAgdm9pZCBpOTE1X3JhbmRvbV9yZW9yZGVyKHVuc2lnbmVkIGludCAqb3JkZXIsCj4gICAJ CQkgdW5zaWduZWQgaW50IGNvdW50LAo+ICAgCQkJIHN0cnVjdCBybmRfc3RhdGUgKnN0YXRlKTsK PiAgIAo+ICt2b2lkIGk5MTVfcHJhbmRvbV9zaHVmZmxlKHZvaWQgKmFyciwgc2l6ZV90IGVsc3os IHNpemVfdCBjb3VudCwKPiArCQkJICBzdHJ1Y3Qgcm5kX3N0YXRlICpzdGF0ZSk7Cj4gKwo+ICAg I2VuZGlmIC8qICFfX0k5MTVfU0VMRlRFU1RTX1JBTkRPTV9IX18gKi8KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfdGltZWxpbmUuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3RpbWVsaW5lLmMKPiBpbmRleCAxNTg1YjYxNDUx MGQuLjFjZWNjNzFmYmE3NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxm dGVzdHMvaTkxNV90aW1lbGluZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRl c3RzL2k5MTVfdGltZWxpbmUuYwo+IEBAIC00LDYgKzQsOCBAQAo+ICAgICogQ29weXJpZ2h0IMKp IDIwMTctMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbgo+ICAgICovCj4gICAKPiArI2luY2x1ZGUgPGxp bnV4L3ByaW1lX251bWJlcnMuaD4KPiArCj4gICAjaW5jbHVkZSAiLi4vaTkxNV9zZWxmdGVzdC5o Igo+ICAgI2luY2x1ZGUgImk5MTVfcmFuZG9tLmgiCj4gICAKPiBAQCAtMTEsNiArMTMsMTQzIEBA Cj4gICAjaW5jbHVkZSAibW9ja19nZW1fZGV2aWNlLmgiCj4gICAjaW5jbHVkZSAibW9ja190aW1l bGluZS5oIgo+ICAgCj4gK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqaHdzcF9wYWdlKHN0cnVjdCBpOTE1 X3RpbWVsaW5lICp0bCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9 IHRsLT5od3NwX2dndHQtPm9iajsKPiArCj4gKwlHRU1fQlVHX09OKCFpOTE1X2dlbV9vYmplY3Rf aGFzX3Bpbm5lZF9wYWdlcyhvYmopKTsKPiArCXJldHVybiBzZ19wYWdlKG9iai0+bW0ucGFnZXMt PnNnbCk7Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGh3c3BfY2FjaGVsaW5lKHN0 cnVjdCBpOTE1X3RpbWVsaW5lICp0bCkKPiArewo+ICsJdW5zaWduZWQgbG9uZyBhZGRyZXNzID0g KHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKGh3c3BfcGFnZSh0bCkpOwo+ICsKPiArCXJldHVy biAoYWRkcmVzcyArIHRsLT5od3NwX29mZnNldCkgLyBDQUNIRUxJTkVfQllURVM7Cj4gK30KPiAr Cj4gKyNkZWZpbmUgQ0FDSEVMSU5FU19QRVJfUEFHRSAoUEFHRV9TSVpFIC8gQ0FDSEVMSU5FX0JZ VEVTKQo+ICsKPiArc3RydWN0IG1vY2tfaHdzcF9mcmVlbGlzdCB7Cj4gKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNTsKPiArCXN0cnVjdCByYWRpeF90cmVlX3Jvb3QgY2FjaGVsaW5lczsK PiArCXN0cnVjdCBpOTE1X3RpbWVsaW5lICoqaGlzdG9yeTsKPiArCXVuc2lnbmVkIGxvbmcgY291 bnQsIG1heDsKPiArCXN0cnVjdCBybmRfc3RhdGUgcHJuZzsKPiArfTsKPiArCj4gK2VudW0gewo+ ICsJU0hVRkZMRSA9IEJJVCgwKSwKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIF9fbW9ja19od3Nw X3JlY29yZChzdHJ1Y3QgbW9ja19od3NwX2ZyZWVsaXN0ICpzdGF0ZSwKPiArCQkJICAgICAgIHVu c2lnbmVkIGludCBpZHgsCj4gKwkJCSAgICAgICBzdHJ1Y3QgaTkxNV90aW1lbGluZSAqdGwpCj4g K3sKPiArCXRsID0geGNoZygmc3RhdGUtPmhpc3RvcnlbaWR4XSwgdGwpOwo+ICsJaWYgKHRsKSB7 Cj4gKwkJcmFkaXhfdHJlZV9kZWxldGUoJnN0YXRlLT5jYWNoZWxpbmVzLCBod3NwX2NhY2hlbGlu ZSh0bCkpOwo+ICsJCWk5MTVfdGltZWxpbmVfcHV0KHRsKTsKPiArCX0KPiArfQo+ICsKPiArc3Rh dGljIGludCBfX21vY2tfaHdzcF90aW1lbGluZShzdHJ1Y3QgbW9ja19od3NwX2ZyZWVsaXN0ICpz dGF0ZSwKPiArCQkJCXVuc2lnbmVkIGludCBjb3VudCwKPiArCQkJCXVuc2lnbmVkIGludCBmbGFn cykKPiArewo+ICsJc3RydWN0IGk5MTVfdGltZWxpbmUgKnRsOwo+ICsJdW5zaWduZWQgaW50IGlk eDsKPiArCj4gKwl3aGlsZSAoY291bnQtLSkgewo+ICsJCXVuc2lnbmVkIGxvbmcgY2FjaGVsaW5l Owo+ICsJCWludCBlcnI7Cj4gKwo+ICsJCXRsID0gaTkxNV90aW1lbGluZV9jcmVhdGUoc3RhdGUt Pmk5MTUsICJtb2NrIiwgTlVMTCk7Cj4gKwkJaWYgKElTX0VSUih0bCkpCj4gKwkJCXJldHVybiBQ VFJfRVJSKHRsKTsKPiArCj4gKwkJY2FjaGVsaW5lID0gaHdzcF9jYWNoZWxpbmUodGwpOwo+ICsJ CWVyciA9IHJhZGl4X3RyZWVfaW5zZXJ0KCZzdGF0ZS0+Y2FjaGVsaW5lcywgY2FjaGVsaW5lLCB0 bCk7Cj4gKwkJaWYgKGVycikgewo+ICsJCQlpZiAoZXJyID09IC1FRVhJU1QpIHsKPiArCQkJCXBy X2VycigiSFdTUCBjYWNoZWxpbmUgJWx1IGFscmVhZHkgdXNlZDsgZHVwbGljYXRlIGFsbG9jYXRp b24hXG4iLAo+ICsJCQkJICAgICAgIGNhY2hlbGluZSk7Cj4gKwkJCX0KClJhZGl4IHRyZWUgaXMg anVzdCB0byBsb29rdXAgcG90ZW50aWFsIG9mZnNldCBkdXBsaWNhdGVzPyBJIG1lYW4sIHRvIAph dm9pZCBkb2luZyBhIGxpbmVhciBzZWFyY2ggb24gdGhlIGhpc3RvcnkgYXJyYXk/IElmIHNvIGlz IGl0IHdvcnRoIGl0IApzaW5jZSB0aGVyZSBhcmVuJ3QgdGhhdCBtYW55IHRpbWVsaW5lcyB1c2Vk IGluIHRlc3Q/IENvdWxkIGJlIHNpbmNlIApiZWxvdyBJIGZpZ3VyZWQgdGhlIG1heGltdW0gbnVt YmVyIG9mIHRpbWVsaW5lcyB0ZXN0IHdpbGwgdXNlLi4uCgo+ICsJCQlpOTE1X3RpbWVsaW5lX3B1 dCh0bCk7Cj4gKwkJCXJldHVybiBlcnI7Cj4gKwkJfQo+ICsKPiArCQlpZHggPSBzdGF0ZS0+Y291 bnQrKyAlIHN0YXRlLT5tYXg7Cj4gKwkJX19tb2NrX2h3c3BfcmVjb3JkKHN0YXRlLCBpZHgsIHRs KTsKClRoaXMgZG9lc24ndCBoaXQgInJlY3ljbGluZyIgb2Ygc2xvdHMgcmlnaHQ/IE1heCBjb3Vu dCBpcyAyICogCkNBQ0hFTElORVNfUEVSX1BBR0UgPSAxMjggd2hpbGUgc3RhdGUtPm1heCBpcyA1 MTIuCgo+ICsJfQo+ICsKPiArCWlmIChmbGFncyAmIFNIVUZGTEUpCj4gKwkJaTkxNV9wcmFuZG9t X3NodWZmbGUoc3RhdGUtPmhpc3RvcnksCj4gKwkJCQkgICAgIHNpemVvZigqc3RhdGUtPmhpc3Rv cnkpLAo+ICsJCQkJICAgICBtaW4oc3RhdGUtPmNvdW50LCBzdGF0ZS0+bWF4KSwKPiArCQkJCSAg ICAgJnN0YXRlLT5wcm5nKTsKPiArCj4gKwljb3VudCA9IGk5MTVfcHJhbmRvbV91MzJfbWF4X3N0 YXRlKG1pbihzdGF0ZS0+Y291bnQsIHN0YXRlLT5tYXgpLAo+ICsJCQkJCSAgICZzdGF0ZS0+cHJu Zyk7Cj4gKwl3aGlsZSAoY291bnQtLSkgewo+ICsJCWlkeCA9IC0tc3RhdGUtPmNvdW50ICUgc3Rh dGUtPm1heDsKPiArCQlfX21vY2tfaHdzcF9yZWNvcmQoc3RhdGUsIGlkeCwgTlVMTCk7Cj4gKwl9 CgpUaGVyZSBpcyBubyBhbGxvY2F0aW9ucyBhZnRlciBzaHVmZmxpbmcsIHNvIHRoZSBjb2RlIHBh dGggb2YgYWxsb2NhdGluZyAKZnJvbSBod3NwIGZyZWUgbGlzdCB3aWxsIG5vdCBiZSBleGVyY2lz ZWQgSSB0aGluay4KCj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbW9j a19od3NwX2ZyZWVsaXN0KHZvaWQgKmFyZykKPiArewo+ICsJc3RydWN0IG1vY2tfaHdzcF9mcmVl bGlzdCBzdGF0ZTsKPiArCWNvbnN0IHN0cnVjdCB7Cj4gKwkJY29uc3QgY2hhciAqbmFtZTsKPiAr CQl1bnNpZ25lZCBpbnQgZmxhZ3M7Cj4gKwl9IHBoYXNlc1tdID0gewo+ICsJCXsgImxpbmVhciIs IDAgfSwKPiArCQl7ICJzaHVmZmxlZCIsIFNIVUZGTEUgfSwKPiArCQl7IH0sCj4gKwl9LCAqcDsK PiArCXVuc2lnbmVkIGludCBuYTsKPiArCWludCBlcnIgPSAwOwo+ICsKPiArCUlOSVRfUkFESVhf VFJFRSgmc3RhdGUuY2FjaGVsaW5lcywgR0ZQX0tFUk5FTCk7Cj4gKwlzdGF0ZS5wcm5nID0gSTkx NV9STkRfU1RBVEVfSU5JVElBTElaRVIoaTkxNV9zZWxmdGVzdC5yYW5kb21fc2VlZCk7Cj4gKwo+ ICsJc3RhdGUuaTkxNSA9IG1vY2tfZ2VtX2RldmljZSgpOwo+ICsJaWYgKCFzdGF0ZS5pOTE1KQo+ ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCS8qCj4gKwkgKiBDcmVhdGUgYSBidW5jaCBvZiB0 aW1lbGluZXMgYW5kIGNoZWNrIHRoYXQgdGhlaXIgSFdTUCBkbyBub3Qgb3ZlcmxhcC4KPiArCSAq IEZyZWUgc29tZSwgYW5kIHRyeSBhZ2Fpbi4KPiArCSAqLwo+ICsKPiArCXN0YXRlLm1heCA9IFBB R0VfU0laRSAvIHNpemVvZigqc3RhdGUuaGlzdG9yeSk7CgpTbyBtYXhpbXVtIGxpdmUgbnVtYmVy IG9mIHRpbWVsaW5lcyBpcyA1MTIgb24gNjQtYml0IHdoaWNoIHNob3VsZCAKdHJhbnNsYXRlIHRv IDggbWF4IHBhZ2VzIG9mIGh3c3AgYmFja2luZyBzdG9yZS4KCj4gKwlzdGF0ZS5jb3VudCA9IDA7 Cj4gKwlzdGF0ZS5oaXN0b3J5ID0ga2NhbGxvYyhzdGF0ZS5tYXgsIHNpemVvZigqc3RhdGUuaGlz dG9yeSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFzdGF0ZS5oaXN0b3J5KSB7Cj4gKwkJZXJyID0g LUVOT01FTTsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwlmb3IgKHAgPSBwaGFzZXM7IHAt Pm5hbWU7IHArKykgewo+ICsJCXByX2RlYnVnKCIlcyglcylcbiIsIF9fZnVuY19fLCBwLT5uYW1l KTsKPiArCQlmb3JfZWFjaF9wcmltZV9udW1iZXJfZnJvbShuYSwgMSwgMiAqIENBQ0hFTElORVNf UEVSX1BBR0UpIHsKPiArCQkJZXJyID0gX19tb2NrX2h3c3BfdGltZWxpbmUoJnN0YXRlLCBuYSwg cC0+ZmxhZ3MpOwo+ICsJCQlpZiAoZXJyKQo+ICsJCQkJZ290byBvdXQ7Cj4gKwkJfQo+ICsJfQo+ ICsKPiArb3V0Ogo+ICsJZm9yIChuYSA9IDA7IG5hIDwgc3RhdGUubWF4OyBuYSsrKQo+ICsJCV9f bW9ja19od3NwX3JlY29yZCgmc3RhdGUsIG5hLCBOVUxMKTsKPiArCWtmcmVlKHN0YXRlLmhpc3Rv cnkpOwo+ICsJZHJtX2Rldl9wdXQoJnN0YXRlLmk5MTUtPmRybSk7Cj4gKwlyZXR1cm4gZXJyOwo+ ICt9Cj4gKwo+ICAgc3RydWN0IF9faWd0X3N5bmMgewo+ICAgCWNvbnN0IGNoYXIgKm5hbWU7Cj4g ICAJdTMyIHNlcW5vOwo+IEBAIC0yNjAsNiArMzk5LDcgQEAgc3RhdGljIGludCBiZW5jaF9zeW5j KHZvaWQgKmFyZykKPiAgIGludCBpOTE1X3RpbWVsaW5lX21vY2tfc2VsZnRlc3RzKHZvaWQpCj4g ICB7Cj4gICAJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsKPiAr CQlTVUJURVNUKG1vY2tfaHdzcF9mcmVlbGlzdCksCj4gICAJCVNVQlRFU1QoaWd0X3N5bmMpLAo+ ICAgCQlTVUJURVNUKGJlbmNoX3N5bmMpLAo+ICAgCX07Cj4gCgpSZWdhcmRzLAoKVHZydGtvCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=