From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vivek Gautam Subject: Re: [PATCH v12 1/4] iommu/arm-smmu: Add pm_runtime/sleep ops Date: Mon, 16 Jul 2018 15:41:12 +0530 Message-ID: <010cb56a-36e8-e729-1fe7-738048eb551d@codeaurora.org> References: <20180708173413.1965-1-vivek.gautam@codeaurora.org> <20180708173413.1965-2-vivek.gautam@codeaurora.org> <17407514.unFVTGoGrn@aspire.rjw.lan> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: 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: "Rafael J. Wysocki" Cc: Mark Rutland , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , Linux PM , Stephen Boyd , "Rafael J. Wysocki" , Joerg Roedel , Will Deacon , Linux Kernel Mailing List , Tomasz Figa , iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, Rob Herring , linux-arm-msm , freedreno List-Id: devicetree@vger.kernel.org SEkgUmFmYWVsLAoKCk9uIDcvMTYvMjAxOCAyOjIxIFBNLCBSYWZhZWwgSi4gV3lzb2NraSB3cm90 ZToKPiBPbiBUaHUsIEp1bCAxMiwgMjAxOCBhdCAxMjo1NyBQTSwgVml2ZWsgR2F1dGFtCj4gPHZp dmVrLmdhdXRhbUBjb2RlYXVyb3JhLm9yZz4gd3JvdGU6Cj4+IEhpLAo+Pgo+Pgo+PiBPbiBXZWQs IEp1bCAxMSwgMjAxOCBhdCA2OjIxIFBNLCBUb21hc3ogRmlnYSA8dGZpZ2FAY2hyb21pdW0ub3Jn PiB3cm90ZToKPj4+IE9uIFdlZCwgSnVsIDExLCAyMDE4IGF0IDg6MTEgUE0gUmFmYWVsIEouIFd5 c29ja2kgPHJhZmFlbEBrZXJuZWwub3JnPiB3cm90ZToKPj4+PiBPbiBXZWQsIEp1bCAxMSwgMjAx OCBhdCAxMjo1NSBQTSwgVml2ZWsgR2F1dGFtCj4+Pj4gPHZpdmVrLmdhdXRhbUBjb2RlYXVyb3Jh Lm9yZz4gd3JvdGU6Cj4+Pj4+IEhpIFJhZmFlbCwKPj4+Pj4KPj4+Pj4KPj4+Pj4gT24gV2VkLCBK dWwgMTEsIDIwMTggYXQgMzoyMCBQTSwgUmFmYWVsIEouIFd5c29ja2kgPHJqd0Byand5c29ja2ku bmV0PiB3cm90ZToKPj4+Pj4+IE9uIFN1bmRheSwgSnVseSA4LCAyMDE4IDc6MzQ6MTAgUE0gQ0VT VCBWaXZlayBHYXV0YW0gd3JvdGU6Cj4+Pj4+Pj4gRnJvbTogU3JpY2hhcmFuIFIgPHNyaWNoYXJh bkBjb2RlYXVyb3JhLm9yZz4KPj4+Pj4+Pgo+Pj4+Pj4+IFRoZSBzbW11IG5lZWRzIHRvIGJlIGZ1 bmN0aW9uYWwgb25seSB3aGVuIHRoZSByZXNwZWN0aXZlCj4+Pj4+Pj4gbWFzdGVyJ3MgdXNpbmcg aXQgYXJlIGFjdGl2ZS4gVGhlIGRldmljZV9saW5rIGZlYXR1cmUKPj4+Pj4+PiBoZWxwcyB0byB0 cmFjayBzdWNoIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzLCBzbyB0aGF0IHRoZQo+Pj4+Pj4+IGlv bW11IGdldHMgcG93ZXJlZCB3aGVuIHRoZSBtYXN0ZXIgZGV2aWNlIGVuYWJsZXMgaXRzZWxmCj4+ Pj4+Pj4gdXNpbmcgcG1fcnVudGltZS4gU28gYnkgYWRhcHRpbmcgdGhlIHNtbXUgZHJpdmVyIGZv cgo+Pj4+Pj4+IHJ1bnRpbWUgcG0sIGFib3ZlIHNhaWQgZGVwZW5kZW5jeSBjYW4gYmUgYWRkcmVz c2VkLgo+Pj4+Pj4+Cj4+Pj4+Pj4gVGhpcyBwYXRjaCBhZGRzIHRoZSBwbSBydW50aW1lL3NsZWVw IGNhbGxiYWNrcyB0byB0aGUKPj4+Pj4+PiBkcml2ZXIgYW5kIGFsc28gdGhlIGZ1bmN0aW9ucyB0 byBwYXJzZSB0aGUgc21tdSBjbG9ja3MKPj4+Pj4+PiBmcm9tIERUIGFuZCBlbmFibGUgdGhlbSBp biByZXN1bWUvc3VzcGVuZC4KPj4+Pj4+Pgo+Pj4+Pj4+IFNpZ25lZC1vZmYtYnk6IFNyaWNoYXJh biBSIDxzcmljaGFyYW5AY29kZWF1cm9yYS5vcmc+Cj4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogQXJj aGl0IFRhbmVqYSA8YXJjaGl0dEBjb2RlYXVyb3JhLm9yZz4KPj4+Pj4+PiBbdml2ZWs6IENsb2Nr IHJld29yayB0byByZXF1ZXN0IGJ1bGsgb2YgY2xvY2tzXQo+Pj4+Pj4+IFNpZ25lZC1vZmYtYnk6 IFZpdmVrIEdhdXRhbSA8dml2ZWsuZ2F1dGFtQGNvZGVhdXJvcmEub3JnPgo+Pj4+Pj4+IFJldmll d2VkLWJ5OiBUb21hc3ogRmlnYSA8dGZpZ2FAY2hyb21pdW0ub3JnPgo+Pj4+Pj4+IC0tLQo+Pj4+ Pj4+Cj4+Pj4+Pj4gICAtIE5vIGNoYW5nZSBzaW5jZSB2MTEuCj4+Pj4+Pj4KPj4+Pj4+PiAgIGRy aXZlcnMvaW9tbXUvYXJtLXNtbXUuYyB8IDYwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKystLQo+Pj4+Pj4+ICAgMSBmaWxlIGNoYW5nZWQsIDU4IGluc2VydGlv bnMoKyksIDIgZGVsZXRpb25zKC0pCj4+Pj4+Pj4KPj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9pb21tdS9hcm0tc21tdS5jIGIvZHJpdmVycy9pb21tdS9hcm0tc21tdS5jCj4+Pj4+Pj4gaW5k ZXggZjdhOTZiY2Y5NGE2Li5hMDFkMGRkZTIxZGQgMTAwNjQ0Cj4+Pj4+Pj4gLS0tIGEvZHJpdmVy cy9pb21tdS9hcm0tc21tdS5jCj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9pb21tdS9hcm0tc21tdS5j Cj4+Pj4+Pj4gQEAgLTQ4LDYgKzQ4LDcgQEAKPj4+Pj4+PiAgICNpbmNsdWRlIDxsaW51eC9vZl9p b21tdS5oPgo+Pj4+Pj4+ICAgI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgo+Pj4+Pj4+ICAgI2luY2x1 ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+Pj4+Pj4+ICsjaW5jbHVkZSA8bGludXgvcG1f cnVudGltZS5oPgo+Pj4+Pj4+ICAgI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPj4+Pj4+PiAgICNp bmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgo+Pj4+Pj4+Cj4+Pj4+Pj4gQEAgLTIwNSw2ICsyMDYs OCBAQCBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlIHsKPj4+Pj4+PiAgICAgICAgdTMyICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBudW1fZ2xvYmFsX2lycXM7Cj4+Pj4+Pj4gICAgICAgIHUzMiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2NvbnRleHRfaXJxczsKPj4+Pj4+PiAgICAg ICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICAqaXJxczsKPj4+Pj4+PiArICAgICBz dHJ1Y3QgY2xrX2J1bGtfZGF0YSAgICAgICAgICAgICpjbGtzOwo+Pj4+Pj4+ICsgICAgIGludCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2Nsa3M7Cj4+Pj4+Pj4KPj4+Pj4+PiAgICAg ICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXZpdW1faWRfYmFzZTsgLyogU3Bl Y2lmaWMgdG8gQ2F2aXVtICovCj4+Pj4+Pj4KPj4+Pj4+PiBAQCAtMTg5NywxMCArMTkwMCwxMiBA QCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9jZmdfcHJvYmUoc3RydWN0IGFybV9zbW11X2Rl dmljZSAqc21tdSkKPj4+Pj4+PiAgIHN0cnVjdCBhcm1fc21tdV9tYXRjaF9kYXRhIHsKPj4+Pj4+ PiAgICAgICAgZW51bSBhcm1fc21tdV9hcmNoX3ZlcnNpb24gdmVyc2lvbjsKPj4+Pj4+PiAgICAg ICAgZW51bSBhcm1fc21tdV9pbXBsZW1lbnRhdGlvbiBtb2RlbDsKPj4+Pj4+PiArICAgICBjb25z dCBjaGFyICogY29uc3QgKmNsa3M7Cj4+Pj4+Pj4gKyAgICAgaW50IG51bV9jbGtzOwo+Pj4+Pj4+ ICAgfTsKPj4+Pj4+Pgo+Pj4+Pj4+ICAgI2RlZmluZSBBUk1fU01NVV9NQVRDSF9EQVRBKG5hbWUs IHZlciwgaW1wKSAgXAo+Pj4+Pj4+IC1zdGF0aWMgc3RydWN0IGFybV9zbW11X21hdGNoX2RhdGEg bmFtZSA9IHsgLnZlcnNpb24gPSB2ZXIsIC5tb2RlbCA9IGltcCB9Cj4+Pj4+Pj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgYXJtX3NtbXVfbWF0Y2hfZGF0YSBuYW1lID0geyAudmVyc2lvbiA9IHZlciwg Lm1vZGVsID0gaW1wIH0KPj4+Pj4+Pgo+Pj4+Pj4+ICAgQVJNX1NNTVVfTUFUQ0hfREFUQShzbW11 X2dlbmVyaWNfdjEsIEFSTV9TTU1VX1YxLCBHRU5FUklDX1NNTVUpOwo+Pj4+Pj4+ICAgQVJNX1NN TVVfTUFUQ0hfREFUQShzbW11X2dlbmVyaWNfdjIsIEFSTV9TTU1VX1YyLCBHRU5FUklDX1NNTVUp Owo+Pj4+Pj4+IEBAIC0xOTE5LDYgKzE5MjQsMjMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgYXJtX3NtbXVfb2ZfbWF0Y2hbXSA9IHsKPj4+Pj4+PiAgIH07Cj4+Pj4+Pj4gICBN T0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhcm1fc21tdV9vZl9tYXRjaCk7Cj4+Pj4+Pj4KPj4+Pj4+ PiArc3RhdGljIHZvaWQgYXJtX3NtbXVfZmlsbF9jbGtfZGF0YShzdHJ1Y3QgYXJtX3NtbXVfZGV2 aWNlICpzbW11LAo+Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKiBjb25zdCAqY2xrcykKPj4+Pj4+PiArewo+Pj4+Pj4+ICsgICAgIGludCBpOwo+Pj4+ Pj4+ICsKPj4+Pj4+PiArICAgICBpZiAoc21tdS0+bnVtX2Nsa3MgPCAxKQo+Pj4+Pj4+ICsgICAg ICAgICAgICAgcmV0dXJuOwo+Pj4+Pj4+ICsKPj4+Pj4+PiArICAgICBzbW11LT5jbGtzID0gZGV2 bV9rY2FsbG9jKHNtbXUtPmRldiwgc21tdS0+bnVtX2Nsa3MsCj4+Pj4+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplb2YoKnNtbXUtPmNsa3MpLCBHRlBfS0VSTkVMKTsKPj4+ Pj4+PiArICAgICBpZiAoIXNtbXUtPmNsa3MpCj4+Pj4+Pj4gKyAgICAgICAgICAgICByZXR1cm47 Cj4+Pj4+Pj4gKwo+Pj4+Pj4+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBzbW11LT5udW1fY2xrczsg aSsrKQo+Pj4+Pj4+ICsgICAgICAgICAgICAgc21tdS0+Y2xrc1tpXS5pZCA9IGNsa3NbaV07Cj4+ Pj4+Pj4gK30KPj4+Pj4+PiArCj4+Pj4+Pj4gICAjaWZkZWYgQ09ORklHX0FDUEkKPj4+Pj4+PiAg IHN0YXRpYyBpbnQgYWNwaV9zbW11X2dldF9kYXRhKHUzMiBtb2RlbCwgc3RydWN0IGFybV9zbW11 X2RldmljZSAqc21tdSkKPj4+Pj4+PiAgIHsKPj4+Pj4+PiBAQCAtMjAwMSw2ICsyMDIzLDkgQEAg c3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldiwKPj4+Pj4+PiAgICAgICAgZGF0YSA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShk ZXYpOwo+Pj4+Pj4+ICAgICAgICBzbW11LT52ZXJzaW9uID0gZGF0YS0+dmVyc2lvbjsKPj4+Pj4+ PiAgICAgICAgc21tdS0+bW9kZWwgPSBkYXRhLT5tb2RlbDsKPj4+Pj4+PiArICAgICBzbW11LT5u dW1fY2xrcyA9IGRhdGEtPm51bV9jbGtzOwo+Pj4+Pj4+ICsKPj4+Pj4+PiArICAgICBhcm1fc21t dV9maWxsX2Nsa19kYXRhKHNtbXUsIGRhdGEtPmNsa3MpOwo+Pj4+Pj4+Cj4+Pj4+Pj4gICAgICAg IHBhcnNlX2RyaXZlcl9vcHRpb25zKHNtbXUpOwo+Pj4+Pj4+Cj4+Pj4+Pj4gQEAgLTIwOTksNiAr MjEyNCwxNCBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQo+Pj4+Pj4+ICAgICAgICAgICAgICAgIHNtbXUtPmlycXNbaV0gPSBp cnE7Cj4+Pj4+Pj4gICAgICAgIH0KPj4+Pj4+Pgo+Pj4+Pj4+ICsgICAgIGVyciA9IGRldm1fY2xr X2J1bGtfZ2V0KHNtbXUtPmRldiwgc21tdS0+bnVtX2Nsa3MsIHNtbXUtPmNsa3MpOwo+Pj4+Pj4+ ICsgICAgIGlmIChlcnIpCj4+Pj4+Pj4gKyAgICAgICAgICAgICByZXR1cm4gZXJyOwo+Pj4+Pj4+ ICsKPj4+Pj4+PiArICAgICBlcnIgPSBjbGtfYnVsa19wcmVwYXJlKHNtbXUtPm51bV9jbGtzLCBz bW11LT5jbGtzKTsKPj4+Pj4+PiArICAgICBpZiAoZXJyKQo+Pj4+Pj4+ICsgICAgICAgICAgICAg cmV0dXJuIGVycjsKPj4+Pj4+PiArCj4+Pj4+Pj4gICAgICAgIGVyciA9IGFybV9zbW11X2Rldmlj ZV9jZmdfcHJvYmUoc21tdSk7Cj4+Pj4+Pj4gICAgICAgIGlmIChlcnIpCj4+Pj4+Pj4gICAgICAg ICAgICAgICAgcmV0dXJuIGVycjsKPj4+Pj4+PiBAQCAtMjE4MSw2ICsyMjE0LDkgQEAgc3RhdGlj IGludCBhcm1fc21tdV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cj4+Pj4+Pj4KPj4+Pj4+PiAgICAgICAgLyogVHVybiB0aGUgdGhpbmcgb2ZmICovCj4+Pj4+Pj4g ICAgICAgIHdyaXRlbChzQ1IwX0NMSUVOVFBELCBBUk1fU01NVV9HUjBfTlMoc21tdSkgKyBBUk1f U01NVV9HUjBfc0NSMCk7Cj4+Pj4+Pj4gKwo+Pj4+Pj4+ICsgICAgIGNsa19idWxrX3VucHJlcGFy ZShzbW11LT5udW1fY2xrcywgc21tdS0+Y2xrcyk7Cj4+Pj4+Pj4gKwo+Pj4+Pj4+ICAgICAgICBy ZXR1cm4gMDsKPj4+Pj4+PiAgIH0KPj4+Pj4+Pgo+Pj4+Pj4+IEBAIC0yMTk3LDcgKzIyMzMsMjcg QEAgc3RhdGljIGludCBfX21heWJlX3VudXNlZCBhcm1fc21tdV9wbV9yZXN1bWUoc3RydWN0IGRl dmljZSAqZGV2KQo+Pj4+Pj4+ICAgICAgICByZXR1cm4gMDsKPj4+Pj4+PiAgIH0KPj4+Pj4+Pgo+ Pj4+Pj4+IC1zdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoYXJtX3NtbXVfcG1fb3BzLCBOVUxMLCBh cm1fc21tdV9wbV9yZXN1bWUpOwo+Pj4+Pj4+ICtzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGFy bV9zbW11X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPj4+Pj4+PiArewo+Pj4+ Pj4+ICsgICAgIHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUgPSBkZXZfZ2V0X2RydmRhdGEo ZGV2KTsKPj4+Pj4+PiArCj4+Pj4+Pj4gKyAgICAgcmV0dXJuIGNsa19idWxrX2VuYWJsZShzbW11 LT5udW1fY2xrcywgc21tdS0+Y2xrcyk7Cj4+Pj4+Pj4gK30KPj4+Pj4+PiArCj4+Pj4+Pj4gK3N0 YXRpYyBpbnQgX19tYXliZV91bnVzZWQgYXJtX3NtbXVfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBk ZXZpY2UgKmRldikKPj4+Pj4+PiArewo+Pj4+Pj4+ICsgICAgIHN0cnVjdCBhcm1fc21tdV9kZXZp Y2UgKnNtbXUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPj4+Pj4+PiArCj4+Pj4+Pj4gKyAgICAg Y2xrX2J1bGtfZGlzYWJsZShzbW11LT5udW1fY2xrcywgc21tdS0+Y2xrcyk7Cj4+Pj4+Pj4gKwo+ Pj4+Pj4+ICsgICAgIHJldHVybiAwOwo+Pj4+Pj4+ICt9Cj4+Pj4+Pj4gKwo+Pj4+Pj4+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYXJtX3NtbXVfcG1fb3BzID0gewo+Pj4+Pj4+ICsg ICAgIFNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKE5VTEwsIGFybV9zbW11X3BtX3Jlc3VtZSkKPj4+ Pj4+IFRoaXMgaXMgc3VzcGljaW91cy4KPj4+Pj4+Cj4+Pj4+PiBJZiB5b3UgbmVlZCBhIHJ1bnRp bWUgc3VzcGVuZCBtZXRob2QsIHdoeSBkbyB5b3UgdGhpbmsgdGhhdCBpdCBpcyBub3QgbmVjZXNz YXJ5Cj4+Pj4+PiB0byBzdXNwZW5kIHRoZSBkZXZpY2UgZHVyaW5nIHN5c3RlbS13aWRlIHRyYW5z aXRpb25zPwo+Pj4+PiBPa2F5LCBzbyB5b3Ugc3VnZ2VzdCB0byBwdXQgY2xvY2sgZGlzYWJsaW5n IGluIHNheSBhcm1fc21tdV9wbV9zdXNwZW5kKCk/Cj4+Pj4+IEluIHRoYXQgY2FzZSB0aGUgY2xv Y2tzIGhhdmUgdG8gYmUgZW5hYmxlZCBpbiB0aGUgcmVzdW1lIHBhdGggdG9vLgo+Pj4+Pgo+Pj4+ PiBJIHJlbWVtYmVyIFRvbWFzeiBwb2ludGVkIHRvIHRoYXQgd2Ugc2hvdWxkbid0IG5lZWQgY2xv Y2sgZW5hYmxlIGluIHJlc3VtZQo+Pj4+PiBwYXRoIFsxXS4KPj4+Pj4KPj4+Pj4gWzFdIGh0dHBz Oi8vbGttbC5vcmcvbGttbC8yMDE4LzMvMTUvNjAKPj4+IFRoYXQgd2FzIGFuIGFuc3dlciBmb3Ig YSBkaWZmZXJlbnQgcXVlc3Rpb24uIEkgZG9uJ3QgcmVtZW1iZXIKPj4+IHN1Z2dlc3RpbmcgaGF2 aW5nIG5vIHN1c3BlbmQgZnVuY3Rpb24uCj4+IE15IGJhZCwgYXBvbG9naWVzLiBZb3UgYXJlIHJp Z2h0LCB3ZSB3ZXJlIGRpc2N1c3NpbmcgaWYgd2UgbmVlZCBhbnkgYWRkaXRpb25hbAo+PiBoYW5k bGluZyBvZiBwb3dlciBmb3IgYXJtX3NtbXVfZGV2aWNlX3Jlc2V0KCkgaW4gYXJtX3NtbXVfcG1f cmVzdW1lKCkuCj4+Cj4+PiBBbHRob3VnaCwgZ2l2ZW4gdGhlIFBNCj4+PiBzdWJzeXN0ZW0gaW50 ZXJuYWxzLCB0aGUgc3VzcGVuZCBmdW5jdGlvbiB3b3VsZG4ndCBiZSBjYWxsZWQgb24gU01NVQo+ Pj4gaW1wbGVtZW50YXRpb24gbmVlZGVkIHBvd2VyIGNvbnRyb2wgKHNpbmNlIHRoZXkgd291bGQg aGF2ZSBydW50aW1lIFBNCj4+PiBlbmFibGVkKSBhbmQgb24gb3RoZXJzLCBpdCB3b3VsZCBiZSBj YWxsZWQgYnV0IGRvIG5vdGhpbmcgKHNpbmNlIG5vCj4+PiBjbG9ja3MpLgo+Pj4KPj4+PiBIb25l c3RseSwgSSBqdXN0IGRvbid0IGtub3cuIDotKQo+Pj4+Cj4+Pj4gSXQganVzdCBsb29rcyBvZGQg dGhlIHdheSBpdCBpcyBkb25lLiAgSSB0aGluayB0aGUgY2xvY2sgc2hvdWxkIGJlCj4+Pj4gZ2F0 ZWQgZHVyaW5nIHN5c3RlbS13aWRlIHN1c3BlbmQgdG9vLCBiZWNhdXNlIHRoZSBzeXN0ZW0gY2Fu IHNwZW5kCj4+Pj4gbXVjaCBtb3JlIHRpbWUgaW4gYSBzbGVlcCBzdGF0ZSB0aGFuIGluIHRoZSB3 b3JraW5nIHN0YXRlLCBvbiBhdmVyYWdlLgo+Pj4+Cj4+Pj4gQW5kIG5vdGUgdGhhdCB5b3UgY2Fu bm90IHJlbHkgb24gcnVudGltZSBQTSB0byBhbHdheXMgZG8gaXQgZm9yIHlvdSwKPj4+PiBiZWNh dXNlIGl0IG1heSBiZSBkaXNhYmxlZCBhdCBhIGNsaWVudCBkZXZpY2Ugb3IgZXZlbiBibG9ja2Vk IGJ5IHVzZXIKPj4+PiBzcGFjZSB2aWEgcG93ZXIvY29udHJvbCBpbiBzeXNmcyBhbmQgdGhhdCBz aG91bGRuJ3QgbWF0dGVyIGZvcgo+Pj4+IHN5c3RlbS13aWRlIFBNLgo+Pj4gVXNlciBzcGFjZSBi bG9ja2luZyBydW50aW1lIFBNIHRocm91Z2ggc3lzZnMgaXMgYSBnb29kIHBvaW50LiBJJ20gbm90 Cj4+PiAxMDAlIHN1cmUgaG93IHRoZSBQTSBzdWJzeXN0ZW0gZGVhbHMgd2l0aCB0aGF0IGluIGNh c2Ugb2Ygc3lzdGVtLXdpZGUKPj4+IHN1c3BlbmQuIEkgZ3Vlc3MgZm9yIGNvbnNpc3RlbmN5IGFu ZCBzYWZldHksIHdlIHNob3VsZCBoYXZlIHRoZQo+Pj4gc3VzcGVuZCBjYWxsYmFjay4KPj4gV2ls bCBhZGQgdGhlIGZvbGxvd2luZyBzdXNwZW5kIGNhbGxiYWNrIChzYW1lIGFzIGFybV9zbW11X3J1 bnRpbWVfc3VzcGVuZCk6Cj4+Cj4+ICAgc3RhdGljIGludCBfX21heWJlX3VudXNlZCBhcm1fc21t dV9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPj4gICB7Cj4+ICAgICAgICAgICBzdHJ1 Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4+Cj4+ICAg ICAgICAgICBjbGtfYnVsa19kaXNhYmxlKHNtbXUtPm51bV9jbGtzLCBzbW11LT5jbGtzKTsKPj4K Pj4gICAgICAgICAgIHJldHVybiAwOwo+PiAgIH0KPiBJIHRoaW5rIHlvdSBhbHNvIG5lZWQgdG8g Y2hlY2sgaWYgdGhlIGNsb2NrIGhhcyBhbHJlYWR5IGJlZW4gZGlzYWJsZWQKPiBieSBydW50aW1l IFBNLiAgT3RoZXJ3aXNlIHlvdSBtYXkgZW5kIHVwIGRpc2FibGluZyBpdCB0d2ljZSBpbiBhIHJv dy4KClNob3VsZCBJIHJhdGhlciBjYWxsIGEgcG1fcnVudGltZV9wdXQoKSBpbiBzdXNwZW5kIGNh bGxiYWNrPyBPciBhbiAKZXhwYW5kZWQgZm9ybQpzb21ldGhpbmcgc2ltaWxhciB0bzoKaHR0cHM6 Ly9lbGl4aXIuYm9vdGxpbi5jb20vbGludXgvdjQuMTgtcmM1L3NvdXJjZS9kcml2ZXJzL3NsaW1i dXMvcWNvbS1jdHJsLmMjTDY5NQoKCkJlc3QgcmVnYXJkcwpWaXZlawpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZy ZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K