From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sharat Masetty Subject: Re: [PATCH] drm/msm: Optimize GPU crashstate capture read path Date: Fri, 2 Nov 2018 15:12:51 +0530 Message-ID: References: <1541061341-29994-1-git-send-email-smasetty@codeaurora.org> <20181101150449.GA20483@jcrouse-lnx.qualcomm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181101150449.GA20483-9PYrDHPZ2Orvke4nUoYGnHL1okKdlPRT@public.gmane.org> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org VGhhbmtzIGZvciB0aGUgY29tbWVudHMgSm9yZGFuIC0KCk9uIDExLzEvMjAxOCA4OjM0IFBNLCBK b3JkYW4gQ3JvdXNlIHdyb3RlOgo+IE9uIFRodSwgTm92IDAxLCAyMDE4IGF0IDAyOjA1OjQxUE0g KzA1MzAsIFNoYXJhdCBNYXNldHR5IHdyb3RlOgo+PiBXaGVuIHRoZSB1c2Vyc3BhY2UgdHJpZXMg dG8gcmVhZCB0aGUgY3Jhc2hzdGF0ZSBkdW1wLCB0aGUgcmVhZCBzaWRlCj4+IGltcGxlbWVudGF0 aW9uIGluIHRoZSBkcml2ZXIgY3VycmVudGx5IGFzY2lpODUgZW5jb2RlcyBhbGwgdGhlIGJpbmFy eQo+PiBidWZmZXJzIGFuZCBpdCBkb2VzIHRoaXMgZWFjaCB0aW1lIHRoZSByZWFkIHN5c3RlbSBj YWxsIGlzIGNhbGxlZC4KPj4gQSB1c2Vyc3BhY2UgdG9vbCBsaWtlIGNhdCB0eXBpY2FsbHkgZG9l cyBhIHBhZ2UgYnkgcGFnZSByZWFkIGFuZCB0aGUKPj4gbnVtYmVyIG9mIHJlYWQgY2FsbHMgZGVw ZW5kcyBvbiB0aGUgc2l6ZSBvZiB0aGUgZGF0YSBjYXB0dXJlZCBieSB0aGUKPj4gZHJpdmVyLiBU aGlzIGlzIGNlcnRhaW5seSBub3QgZGVzaXJhYmxlIGFuZCBkb2VzIG5vdCBzY2FsZSB3ZWxsIHdp dGgKPj4gbGFyZ2UgY2FwdHVyZXMuCj4+Cj4+IFRoaXMgcGF0Y2ggc3RhcnRzIG9mZiB3aXRoIG1v dmluZyB0aGUgZW5jb2RpbmcgcGFydCB0byB0aGUgY2FwdHVyZSB0aW1lLAo+PiB0aGF0IGlzIHdo ZW4gdGhlIEdQVSB0cmllcyB0byByZWNvdmVyIGFmdGVyIGEgaGFuZy4gTm93IHdlIG9ubHkgZW5j b2RlCj4+IG9uY2UgcGVyIGJ1ZmZlciBvYmplY3QgYW5kIG5vdCBwZXIgcGFnZSByZWFkLiBXaXRo IHRoaXMgdGhlcmUgaXMgYW4KPj4gaW1tZWRpYXRlID4xMFggc3BlZWQgaW1wcm92ZW1lbnQgaW4g Y3Jhc2hzdGF0ZSBzYXZlIHRpbWUuCj4+Cj4+IFRoZSBmbGlwIHNpZGUgaG93ZXZlciBpcyB0aGF0 IHRoZSBHUFUgcmVjb3ZlcnkgdGltZSBpbmNyZWFzZXMgYW5kIHRoaXMKPj4gbmVnYXRpdmVseSBp bXBhY3RzIHRoZSB1c2VyIGV4cGVyaWVuY2UsIHNvIHRoaXMgaXMgaGFuZGxlZCBieSBtb3Zpbmcg dGhlCj4+IGVuY29kaW5nIHBhcnQgdG8gYSB3b3JrZXIgdGhyZWFkIGFuZCBvbmx5IHJlZ2lzdGVy IHdpdGggdGhlIGRldl9jb3JlZHVtcAo+PiBvbmNlIHRoZSBlbmNvZGluZyBvZiB0aGUgYnVmZmVy cyBpcyBjb21wbGV0ZS4KPiAKPiBEb2VzIHlvdXIgdHJlZSBoYXZlIGh0dHBzOi8vcGF0Y2h3b3Jr LmZyZWVkZXNrdG9wLm9yZy9wYXRjaC8yNTcxODEvID8gVGhhdCB3aWxsCj4gaGVscCB3aXRoIGEg bG90IG9mIHRoZSBwcm9ibGVtcyB5b3UgaGF2ZSBkZXNjcmliZWQuClRoZSBpc3N1ZSBpcyB0aGF0 IGV2ZW4gd2l0aCBzbWFsbCBzaXplZCBmaWxlcyBsaWtlIH41TUIgb3Igc28sIHRoZSAKY2FwdHVy ZSB0aW1lIGlzIGh1Z2UgYW5kIHNvbWV0aW1lIGRvZXMgbm90IHN1cnZpdmUgdGhlIGRldl9jb3Jl ZHVtcCAKdGltZW91dCBvZiA1IG1pbnV0ZXMuIFdpdGggdGhpcyBjaGFuZ2UgaG93ZXZlciBJIGFt IGFibGUgdG8gZHVtcCBsYXJnZSAKZmlsZSBzaXplcyBsaWtlIDYwTUIgb3Igc28gaW4gcmVhc29u YWJsZSBhbW91bnQgb2YgdGltZSAofjUwIHNlY29uZHMpLgoKQXMgZm9yIHRoZSBwYXRjaCB0aGF0 IHlvdSBzaGFyZWQsIEkgYW0gdGhpbmtpbmcgdGhhdCB3ZSBzaG91bGQgZHJvcCBpdCAKYW5kIGlu c3RlYWQgZ28gd2l0aCB0aGlzIG9yIHdoYXRldmVyIHdlIGFncmVlIG9uLiBUaGUgcGF0Y2ggbG9z ZXMgc3R1ZmYgCmxpa2UgSUIyJ3Mgd2hpY2ggbWlnaHQgYmUgaW1wb3J0YW50IHdoaWxlIGRlYnVn Z2luZyBoYW5nIGlzc3Vlcy4KPiAKPj4gU2lnbmVkLW9mZi1ieTogU2hhcmF0IE1hc2V0dHkgPHNt YXNldHR5QGNvZGVhdXJvcmEub3JnPgo+PiAtLS0KPj4gICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Fk cmVuby9hZHJlbm9fZ3B1LmMgfCAzNSArKystLS0tLS0tLS0tCj4+ICAgZHJpdmVycy9ncHUvZHJt L21zbS9tc21fZ3B1LmMgICAgICAgICAgIHwgOTMgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKy0tCj4+ICAgZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ3B1LmggICAgICAgICAgIHwgIDEg Kwo+PiAgIDMgZmlsZXMgY2hhbmdlZCwgOTggaW5zZXJ0aW9ucygrKSwgMzEgZGVsZXRpb25zKC0p Cj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1 LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmMKPj4gaW5kZXggMTQx MDYyZi4uNzQ0MTU3MSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8v YWRyZW5vX2dwdS5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19n cHUuYwo+PiBAQCAtNDA2LDcgKzQwNiw3IEBAIGludCBhZHJlbm9fZ3B1X3N0YXRlX2dldChzdHJ1 Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqc3RhdGUpCj4+ICAgCQkJCXNp emUgPSBqICsgMTsKPj4gICAKPj4gICAJCWlmIChzaXplKSB7Cj4+IC0JCQlzdGF0ZS0+cmluZ1tp XS5kYXRhID0ga21hbGxvYyhzaXplIDw8IDIsIEdGUF9LRVJORUwpOwo+PiArCQkJc3RhdGUtPnJp bmdbaV0uZGF0YSA9IGt2bWFsbG9jKHNpemUgPDwgMiwgR0ZQX0tFUk5FTCk7Cj4+ICAgCQkJaWYg KHN0YXRlLT5yaW5nW2ldLmRhdGEpIHsKPj4gICAJCQkJbWVtY3B5KHN0YXRlLT5yaW5nW2ldLmRh dGEsIGdwdS0+cmJbaV0tPnN0YXJ0LCBzaXplIDw8IDIpOwo+PiAgIAkJCQlzdGF0ZS0+cmluZ1tp XS5kYXRhX3NpemUgPSBzaXplIDw8IDI7Cj4gCj4gVGhpcyBpcyBhIGdvb2QgZml4LCBidXQgdW5y ZWxhdGVkIHRvIHRoaXMgY2hhbmdlIGFzIGRldGFpbGVkIGFib3ZlLiBTaG91bGQgYmUKPiBzZXBh cmF0ZS4KPiAKPj4gQEAgLTQ0NSw3ICs0NDUsNyBAQCB2b2lkIGFkcmVub19ncHVfc3RhdGVfZGVz dHJveShzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqc3RhdGUpCj4+ICAgCWludCBpOwo+PiAgIAo+PiAg IAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdGF0ZS0+cmluZyk7IGkrKykKPj4gLQkJa2Zy ZWUoc3RhdGUtPnJpbmdbaV0uZGF0YSk7Cj4+ICsJCWt2ZnJlZShzdGF0ZS0+cmluZ1tpXS5kYXRh KTsKPiAKPiBBcyBhYm92ZS4KPiAKPj4gICAKPj4gICAJZm9yIChpID0gMDsgc3RhdGUtPmJvcyAm JiBpIDwgc3RhdGUtPm5yX2JvczsgaSsrKQo+PiAgIAkJa3ZmcmVlKHN0YXRlLT5ib3NbaV0uZGF0 YSk7Cj4+IEBAIC00NzUsMzQgKzQ3NSwxNSBAQCBpbnQgYWRyZW5vX2dwdV9zdGF0ZV9wdXQoc3Ry dWN0IG1zbV9ncHVfc3RhdGUgKnN0YXRlKQo+PiAgIAo+PiAgICNpZiBkZWZpbmVkKENPTkZJR19E RUJVR19GUykgfHwgZGVmaW5lZChDT05GSUdfREVWX0NPUkVEVU1QKQo+PiAgIAo+PiAtc3RhdGlj IHZvaWQgYWRyZW5vX3Nob3dfb2JqZWN0KHN0cnVjdCBkcm1fcHJpbnRlciAqcCwgdTMyICpwdHIs IGludCBsZW4pCj4+ICtzdGF0aWMgdm9pZCBhZHJlbm9fc2hvd19vYmplY3Qoc3RydWN0IGRybV9w cmludGVyICpwLCB2b2lkICpwdHIpCj4+ICAgewo+PiAtCWNoYXIgb3V0W0FTQ0lJODVfQlVGU1pd Owo+PiAtCWxvbmcgbCwgZGF0YWxlbiwgaTsKPj4gLQo+PiAtCWlmICghcHRyIHx8ICFsZW4pCj4+ IC0JCXJldHVybjsKPj4gLQo+PiAtCS8qCj4+IC0JICogT25seSBkdW1wIHRoZSBub24temVybyBw YXJ0IG9mIHRoZSBidWZmZXIgLSByYXJlbHkgd2lsbCBhbnkgZGF0YQo+PiAtCSAqIGNvbXBsZXRl bHkgZmlsbCB0aGUgZW50aXJlIGFsbG9jYXRlZCBzaXplIG9mIHRoZSBidWZmZXIKPj4gLQkgKi8K Pj4gLQlmb3IgKGRhdGFsZW4gPSAwLCBpID0gMDsgaSA8IGxlbiA+PiAyOyBpKyspIHsKPj4gLQkJ aWYgKHB0cltpXSkKPj4gLQkJCWRhdGFsZW4gPSAoaSA8PCAyKSArIDE7Cj4+IC0JfQo+PiAtCj4+ IC0JLyogU2tpcCBwcmludGluZyB0aGUgb2JqZWN0IGlmIGl0IGlzIGVtcHR5ICovCj4+IC0JaWYg KGRhdGFsZW4gPT0gMCkKPj4gKwlpZiAoIXB0cikKPj4gICAJCXJldHVybjsKPj4gICAKPj4gLQls ID0gYXNjaWk4NV9lbmNvZGVfbGVuKGRhdGFsZW4pOwo+PiAtCj4+ICAgCWRybV9wdXRzKHAsICIg ICAgZGF0YTogISFhc2NpaTg1IHxcbiIpOwo+PiAgIAlkcm1fcHV0cyhwLCAiICAgICAiKTsKPj4g ICAKPj4gLQlmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKQo+PiAtCQlkcm1fcHV0cyhwLCBhc2NpaTg1 X2VuY29kZShwdHJbaV0sIG91dCkpOwo+PiArCWRybV9wdXRzKHAsIHB0cik7Cj4+ICAgCj4+ICAg CWRybV9wdXRzKHAsICJcbiIpOwo+PiAgIH0KPj4gQEAgLTUzNCw4ICs1MTUsNyBAQCB2b2lkIGFk cmVub19zaG93KHN0cnVjdCBtc21fZ3B1ICpncHUsIHN0cnVjdCBtc21fZ3B1X3N0YXRlICpzdGF0 ZSwKPj4gICAJCWRybV9wcmludGYocCwgIiAgICB3cHRyOiAlZFxuIiwgc3RhdGUtPnJpbmdbaV0u d3B0cik7Cj4+ICAgCQlkcm1fcHJpbnRmKHAsICIgICAgc2l6ZTogJWRcbiIsIE1TTV9HUFVfUklO R0JVRkZFUl9TWik7Cj4+ICAgCj4+IC0JCWFkcmVub19zaG93X29iamVjdChwLCBzdGF0ZS0+cmlu Z1tpXS5kYXRhLAo+PiAtCQkJc3RhdGUtPnJpbmdbaV0uZGF0YV9zaXplKTsKPj4gKwkJYWRyZW5v X3Nob3dfb2JqZWN0KHAsIHN0YXRlLT5yaW5nW2ldLmRhdGEpOwo+PiAgIAl9Cj4+ICAgCj4+ICAg CWlmIChzdGF0ZS0+Ym9zKSB7Cj4+IEBAIC01NDYsOCArNTI2LDcgQEAgdm9pZCBhZHJlbm9fc2hv dyhzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqc3RhdGUsCj4+ICAg CQkJCXN0YXRlLT5ib3NbaV0uaW92YSk7Cj4+ICAgCQkJZHJtX3ByaW50ZihwLCAiICAgIHNpemU6 ICV6ZFxuIiwgc3RhdGUtPmJvc1tpXS5zaXplKTsKPj4gICAKPj4gLQkJCWFkcmVub19zaG93X29i amVjdChwLCBzdGF0ZS0+Ym9zW2ldLmRhdGEsCj4+IC0JCQkJc3RhdGUtPmJvc1tpXS5zaXplKTsK Pj4gKwkJCWFkcmVub19zaG93X29iamVjdChwLCBzdGF0ZS0+Ym9zW2ldLmRhdGEpOwo+PiAgIAkJ fQo+PiAgIAl9Cj4+ICAgCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9n cHUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dwdS5jCj4+IGluZGV4IGZmOTU4NDguLmQ1 NTMzZjEgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dwdS5jCj4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dwdS5jCj4+IEBAIC0yMSw2ICsyMSw3IEBACj4+ ICAgI2luY2x1ZGUgIm1zbV9mZW5jZS5oIgo+PiAgIAo+PiAgICNpbmNsdWRlIDxnZW5lcmF0ZWQv dXRzcmVsZWFzZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2FzY2lpODUuaD4KPj4gICAjaW5jbHVk ZSA8bGludXgvc3RyaW5nX2hlbHBlcnMuaD4KPj4gICAjaW5jbHVkZSA8bGludXgvcG1fb3BwLmg+ Cj4+ICAgI2luY2x1ZGUgPGxpbnV4L2RldmZyZXEuaD4KPj4gQEAgLTM3NSw5ICszNzYsNyBAQCBz dGF0aWMgdm9pZCBtc21fZ3B1X2NyYXNoc3RhdGVfY2FwdHVyZShzdHJ1Y3QgbXNtX2dwdSAqZ3B1 LAo+PiAgIAkvKiBTZXQgdGhlIGFjdGl2ZSBjcmFzaCBzdGF0ZSB0byBiZSBkdW1wZWQgb24gZmFp bHVyZSAqLwo+PiAgIAlncHUtPmNyYXNoc3RhdGUgPSBzdGF0ZTsKPj4gICAKPj4gLQkvKiBGSVhN RTogUmVsZWFzZSB0aGUgY3Jhc2hzdGF0ZSBpZiB0aGlzIGVycm9ycyBvdXQ/ICovCj4+IC0JZGV2 X2NvcmVkdW1wbShncHUtPmRldi0+ZGV2LCBUSElTX01PRFVMRSwgZ3B1LCAwLCBHRlBfS0VSTkVM LAo+PiAtCQltc21fZ3B1X2RldmNvcmVkdW1wX3JlYWQsIG1zbV9ncHVfZGV2Y29yZWR1bXBfZnJl ZSk7Cj4+ICsJc2NoZWR1bGVfd29yaygmZ3B1LT5jcmFzaHN0YXRlX3dvcmspOwo+IAo+IEknbSBz dXBlciBoZXNpdGFudCB0byBldmVyIGFkZCBhbnl0aGluZyBoYXZpbmcgdG8gZG8gd2l0aCBzY2hl ZHVsaW5nIGJlY2F1c2Ugd2UKPiBhbHJlYWR5IGFidXNlIGl0IHNvIGJhZGx5IGJ1dCB0aGlzIHNl ZW1zIGxpa2UgaXQgbWlnaHQgYmUgb2theSBzaW5jZSBpdCBpc24ndAo+IGhpZ2ggcHJpb3JpdHkg YW5kIG5vdCByZWxhdGVkIHRvIHRpbWluZy4gIEkgd291bGQgYmUgY3VyaW91cyB3aGF0IG90aGVy cyB0aGluay4KPiAKPj4gICB9Cj4+ICAgI2Vsc2UKPj4gICBzdGF0aWMgdm9pZCBtc21fZ3B1X2Ny YXNoc3RhdGVfY2FwdHVyZShzdHJ1Y3QgbXNtX2dwdSAqZ3B1LAo+PiBAQCAtNDIwLDYgKzQxOSw5 MyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfZmVuY2VzKHN0cnVjdCBtc21fZ3B1ICpncHUsIHN0cnVj dCBtc21fcmluZ2J1ZmZlciAqcmluZywKPj4gICAKPj4gICBzdGF0aWMgdm9pZCByZXRpcmVfc3Vi bWl0cyhzdHJ1Y3QgbXNtX2dwdSAqZ3B1KTsKPj4gICAKPj4gK3N0YXRpYyBjaGFyICptc21fZ3B1 X2FzY2lpODVfZW5jb2RlX2J1Zih1MzIgKnNyYywgc2l6ZV90IGxlbikKPj4gK3sKPj4gKwl2b2lk ICpidWY7Cj4+ICsJc2l6ZV90IGJ1Zl9pdHIgPSAwLCBidWZmZXJfc2l6ZTsKPj4gKwljaGFyIG91 dFtBU0NJSTg1X0JVRlNaXTsKPj4gKwlsb25nIGw7Cj4+ICsJaW50IGk7Cj4+ICsKPj4gKwlpZiAo IXNyYyB8fCAhbGVuKQo+PiArCQlyZXR1cm4gTlVMTDsKPiAKPiBJIGRvbid0IHRoaW5rIHNyYygp IHdpbGwgZXZlciBsZWdpdGltYXRlbHkgYmUgTlVMTCBzbyB5b3UgY2FuIHJlbW92ZSB0aGUgY2hl Y2suCj4gCj4+ICsJbCA9IGFzY2lpODVfZW5jb2RlX2xlbihsZW4pOwo+PiArCj4+ICsJLyoKPj4g KwkgKiBBc2NpaTg1IG91dHB1dHMgZWl0aGVyIGEgNSBieXRlIHN0cmluZyBvciBhIDEgYnl0ZSBz dHJpbmcuIFNvIHdlCj4+ICsJICogYWNjb3VudCBmb3IgdGhlIHdvcnN0IGNhc2Ugb2YgNSBieXRl cyBwZXIgZHdvcmQgcGx1cyB0aGUgMSBmb3IgJ1wwJwo+PiArCSAqLwo+PiArCWJ1ZmZlcl9zaXpl ID0gKGwgKiA1KSArIDE7Cj4gCj4gYnVmZmVyX3NpemUgaXMndCBuZWVkZWQgLSB5b3UgY2FuIGRv IHRoZSBtYXRoIGlubGluZSBpbiB0aGUga3ZtYWxsb2MoKSBmdW5jdGlvbi4KPiAKPj4gKwo+PiAr CWJ1ZiA9IGt2bWFsbG9jKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKPj4gKwlpZiAoIWJ1ZikK Pj4gKwkJcmV0dXJuIE5VTEw7Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKQo+PiAr CQlidWZfaXRyICs9IHNucHJpbnRmKGJ1ZiArIGJ1Zl9pdHIsIGJ1ZmZlcl9zaXplIC0gYnVmX2l0 ciwgIiVzIiwKPiAKPiBUaGlzIHNwZWNpZmljIGFsZ29yaXRobSBzaG91bGQgdXNlIHNjbnByaW50 ZigpIGhlcmUgYnV0IG9uIGEgYnJvYWRlciBub3RlCj4gc3ByaW50ZigpIGFuZCBmcmllbmRzIGlz IGEgYmFkIGNob2ljZSBpZiBwZXJmb3JtYW5jZSBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdAo+IGp1 bXBzIHRocm91Z2ggbW9yZSBob29wcyB0byBldmVudHVhbGx5IGRvIHdoYXQgYW1vdW50cyB0byBh IG1lbXBjeSAodGhpcyBpcyB0aGUKPiByZWFzb24gd2h5IHNlcV9wcmludGYoKSBhbmQgc2VxX3B1 dHMoKSBhcmUgZGlmZmVyZW50IHRoaW5ncyBhbmQgY2hlY2twYXRjaAo+IGluc2lzdHMgdGhhdCB5 b3UgdXNlIHNlcV9wdXRzKCkgZm9yIGNvbnN0YW50IHN0cmluZ3MpLgo+IAo+IEluZiB5b3UgYXJl IHBsYW5uaW5nIG9uICBvdXRwdXR0aW5nIGludG8gYSBidWZmZXIgeW91IHNob3VsZCBqdXN0IG1h a2UgYSBjdXN0b20KPiBhc2NpaTg1IGZ1bmN0aW9uIHRvIG91dHB1dCBkaXJlY3RseSBhbmQgYXZv aWQgY29weWluZyBpbiB0aGUgZmlyc3QgcGxhY2UuCj4gCj4gSWYgeW91IHdhbnRlZCB0byBnZXQg ZmFuY3kgeW91IGNvdWxkIGFkZCBpdCB0byBpbmNsdWRlL2xpbnV4L2FzY2lpODUuaCAtCj4gYXNj aWk4NV9lbmNvZGVfdG9fYnVmKCkgb3Igc29tZSBzdWNoLgo+IApBaCEgVGhpcyBpcyBhIGdvb2Qg cG9pbnQgLSBJIHdpbGwgdHJ5IG91dCBzb21ldGhpbmcgb24gdGhlc2UgbGluZXMuCj4+ICsJCQkJ YXNjaWk4NV9lbmNvZGUoc3JjW2ldLCBvdXQpKTsKPj4gKwo+PiArCXJldHVybiBidWY7Cj4+ICt9 Cj4+ICsKPj4gKy8qCj4+ICsgKiBDb252ZXJ0IHRoZSBiaW5hcnkgZGF0YSBpbiB0aGUgZ3B1IGNy YXNoIHN0YXRlIGNhcHR1cmUobGlrZSBib3MgYW5kCj4+ICsgKiByaW5nYnVmZmVyIGRhdGEpIHRv IGFzY2lpODUgZW5jb2RlZCBzdHJpbmdzLiBOb3RlIHRoYXQgdGhlIGVuY29kZWQKPj4gKyAqIHN0 cmluZyBpcyBOVUxMIHRlcm1pbmF0ZWQuCj4gCj4gVGhpcyBpcyB0ZWNobmljYWxseSBub3QgdHJ1 ZSBiZWNhdXNlIHlvdSBhcmUgc3BlY2lmaWNhbGx5IGFjY291bnRpbmcgZm9yIGEgTlVMTAo+IHRl cm1pbmF0b3IgaW4gdGhlIGZ1bmN0aW9uIGFib3ZlLgo+IAo+PiArICovCj4+ICtzdGF0aWMgdm9p ZCBjcmFzaHN0YXRlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4+ICt7Cj4+ICsJ c3RydWN0IG1zbV9ncHVfc3RhdGUgKnN0YXRlOwo+PiArCXN0cnVjdCBtc21fZ3B1ICpncHUgPSBj b250YWluZXJfb2Yod29yaywgc3RydWN0IG1zbV9ncHUsCj4+ICsJCQljcmFzaHN0YXRlX3dvcmsp Owo+PiArCWludCBpOwo+PiArCj4+ICsJc3RhdGUgPSBtc21fZ3B1X2NyYXNoc3RhdGVfZ2V0KGdw dSk7Cj4+ICsJaWYgKCFzdGF0ZSkKPj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJZm9yIChpID0gMDsg aSA8IE1TTV9HUFVfTUFYX1JJTkdTOyBpKyspIHsKPj4gKwkJdm9pZCAqYnVmID0gTlVMTDsKPiAK PiBZb3UgZG9uJ3QgbmVlZGVkIHRvIGluaXRpYWxpemUgYnVmLgo+IAo+PiArCj4+ICsJCWlmICgh c3RhdGUtPnJpbmdbaV0uZGF0YSkKPj4gKwkJCWNvbnRpbnVlOwo+PiArCj4gCj4gQSBjb21tZW50 IGhlcmUgZGVzY3JpYmluZyB0aGUgdmFyaWFibGUgc3dpdGNoLWEtcm9vIHlvdSBhcmUgZG9pbmcg d291bGQgYmUKPiBoZWxwZnVsLgo+IAo+PiArCQlidWYgPSBzdGF0ZS0+cmluZ1tpXS5kYXRhOwo+ PiArCj4+ICsJCXN0YXRlLT5yaW5nW2ldLmRhdGEgPSBtc21fZ3B1X2FzY2lpODVfZW5jb2RlX2J1 ZihidWYsCj4+ICsJCQkJc3RhdGUtPnJpbmdbaV0uZGF0YV9zaXplKTsKPj4gKwkJa3ZmcmVlKGJ1 Zik7Cj4+ICsJfQo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5ucl9ib3M7IGkrKykg ewo+PiArCQl1MzIgKmJ1ZiA9IE5VTEw7Cj4gCj4gYnVmIGRvZXMgbm90IG5lZWQgdG8gYmUgaW5p dGlhbGl6ZWQuCj4gCj4+ICsJCWxvbmcgZGF0YWxlbiwgajsKPj4gKwo+PiArCQlpZiAoIXN0YXRl LT5ib3NbaV0uZGF0YSkKPj4gKwkJCWNvbnRpbnVlOwo+PiArCj4+ICsJCWJ1ZiA9IHN0YXRlLT5i b3NbaV0uZGF0YTsKPj4gKwo+PiArCQkvKgo+PiArCQkgKiBPbmx5IGR1bXAgdGhlIG5vbi16ZXJv IHBhcnQgb2YgdGhlIGJ1ZmZlciAtIHJhcmVseSB3aWxsCj4+ICsJCSAqIGFueSBkYXRhIGNvbXBs ZXRlbHkgZmlsbCB0aGUgZW50aXJlIGFsbG9jYXRlZCBzaXplIG9mIHRoZQo+PiArCQkgKiBidWZm ZXIKPj4gKwkJICovCj4+ICsJCWZvciAoZGF0YWxlbiA9IDAsIGogPSAwOyBqIDwgc3RhdGUtPmJv c1tpXS5zaXplID4+IDI7IGorKykKPj4gKwkJCWlmIChidWZbal0pCj4+ICsJCQkJZGF0YWxlbiA9 ICgoaiArIDEpIDw8IDIpOwo+PiArCj4+ICsJCXN0YXRlLT5ib3NbaV0uZGF0YSA9IG1zbV9ncHVf YXNjaWk4NV9lbmNvZGVfYnVmKGJ1ZiwgZGF0YWxlbik7Cj4+ICsJCWt2ZnJlZShidWYpOwo+PiAr CX0KPj4gKwo+PiArCW1zbV9ncHVfY3Jhc2hzdGF0ZV9wdXQoZ3B1KTsKPj4gKwo+PiArCWRldl9j b3JlZHVtcG0oZ3B1LT5kZXYtPmRldiwgVEhJU19NT0RVTEUsIGdwdSwgMCwgR0ZQX0tFUk5FTCwK Pj4gKwkJbXNtX2dwdV9kZXZjb3JlZHVtcF9yZWFkLCBtc21fZ3B1X2RldmNvcmVkdW1wX2ZyZWUp Owo+PiArfQo+PiArCj4+ICAgc3RhdGljIHZvaWQgcmVjb3Zlcl93b3JrZXIoc3RydWN0IHdvcmtf c3RydWN0ICp3b3JrKQo+PiAgIHsKPj4gICAJc3RydWN0IG1zbV9ncHUgKmdwdSA9IGNvbnRhaW5l cl9vZih3b3JrLCBzdHJ1Y3QgbXNtX2dwdSwgcmVjb3Zlcl93b3JrKTsKPj4gQEAgLTg1Niw2ICs5 NDIsNyBAQCBpbnQgbXNtX2dwdV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4+ICAgCUlOSVRfTElTVF9IRUFEKCZncHUtPmFjdGl2ZV9s aXN0KTsKPj4gICAJSU5JVF9XT1JLKCZncHUtPnJldGlyZV93b3JrLCByZXRpcmVfd29ya2VyKTsK Pj4gICAJSU5JVF9XT1JLKCZncHUtPnJlY292ZXJfd29yaywgcmVjb3Zlcl93b3JrZXIpOwo+PiAr CUlOSVRfV09SSygmZ3B1LT5jcmFzaHN0YXRlX3dvcmssIGNyYXNoc3RhdGVfd29ya2VyKTsKPj4g ICAKPj4gICAKPj4gICAJdGltZXJfc2V0dXAoJmdwdS0+aGFuZ2NoZWNrX3RpbWVyLCBoYW5nY2hl Y2tfaGFuZGxlciwgMCk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9n cHUuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dwdS5oCj4+IGluZGV4IGY4MmJhYzAuLjg4 MjUwNjkgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dwdS5oCj4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dwdS5oCj4+IEBAIC0xMzcsNiArMTM3LDcgQEAg c3RydWN0IG1zbV9ncHUgewo+PiAgIAl9IGRldmZyZXE7Cj4+ICAgCj4+ICAgCXN0cnVjdCBtc21f Z3B1X3N0YXRlICpjcmFzaHN0YXRlOwo+PiArCXN0cnVjdCB3b3JrX3N0cnVjdCBjcmFzaHN0YXRl X3dvcms7Cj4+ICAgfTsKPj4gICAKPj4gICAvKiBJdCB0dXJucyBvdXQgdGhhdCBhbGwgdGFyZ2V0 cyB1c2UgdGhlIHNhbWUgcmluZ2J1ZmZlciBzaXplICovCj4+IC0tIAo+PiAxLjkuMQo+Pgo+IAoK LS0gClRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0 aGUgQ29kZSBBdXJvcmEgRm9ydW0sCkxpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9q ZWN0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVk cmVubyBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=