From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: Re: [PATCH v2 17/21] drm/imx: pd: Use bus format/flags provided by the bridge when available Date: Tue, 27 Aug 2019 10:43:53 +0200 Message-ID: <20190827104353.1447e5ba@collabora.com> References: <20190826152649.13820-1-boris.brezillon@collabora.com> <20190826152649.13820-18-boris.brezillon@collabora.com> <1566893719.4102.1.camel@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [46.235.227.227]) by gabe.freedesktop.org (Postfix) with ESMTPS id 031B8890ED for ; Tue, 27 Aug 2019 08:43:58 +0000 (UTC) In-Reply-To: <1566893719.4102.1.camel@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Philipp Zabel Cc: Nikita Yushchenko , Jernej Skrabec , Laurent Pinchart , Neil Armstrong , Andrey Smirnov , Jonas Karlman , Seung-Woo Kim , dri-devel@lists.freedesktop.org, Kyungmin Park , Thierry Reding , Chris Healy , kernel@collabora.com, Sam Ravnborg List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCAyNyBBdWcgMjAxOSAxMDoxNToxOSArMDIwMApQaGlsaXBwIFphYmVsIDxwLnphYmVs QHBlbmd1dHJvbml4LmRlPiB3cm90ZToKCj4gSGkgQm9yaXMsCj4gCj4gT24gTW9uLCAyMDE5LTA4 LTI2IGF0IDE3OjI2ICswMjAwLCBCb3JpcyBCcmV6aWxsb24gd3JvdGU6Cj4gPiBOb3cgdGhhdCBi cmlkZ2VzIGNhbiBleHBvc2UgdGhlIGJ1cyBmb3JtYXQvZmxhZ3MgdGhleSBleHBlY3QsIHdlIGNh bgo+ID4gdXNlIHRob3NlIGluc3RlYWQgb2YgdGhlIHJlbHlpbmcgb24gdGhlIGRpc3BsYXlfaW5m byBwcm92aWRlZCBieSB0aGUKPiA+IGNvbm5lY3RvciAod2hpY2ggaXMgb25seSB2YWxpZCBpZiB0 aGUgZW5jb2RlciBpcyBkaXJlY3RseSBjb25uZWN0ZWQKPiA+IHRvIGJyaWRnZSBlbGVtZW50IGRy aXZpbmcgdGhlIHBhbmVsL2Rpc3BsYXkpLgo+ID4gCj4gPiBXZSBhbHNvIGV4cGxpY2l0bHkgZXhw b3NlIHRoZSBidXMgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgb3VyIGVuY29kZXIgYnkKPiA+IGZpbGxp bmcgZW5jb2Rlci0+b3V0cHV0X2J1c19jYXBzIHdpdGggcHJvcGVyIGluZm8uCj4gPiAKPiA+IFNp Z25lZC1vZmYtYnk6IEJvcmlzIEJyZXppbGxvbiA8Ym9yaXMuYnJlemlsbG9uQGNvbGxhYm9yYS5j b20+Cj4gPiAtLS0KPiA+IENoYW5nZXMgaW4gdjI6Cj4gPiAqIEFkanVzdCB0aGluZ3MgdG8gbWF0 Y2ggdGhlIG5ldyBidXMtZm9ybWF0IG5lZ290aWF0aW9uIGluZnJhCj4gPiAtLS0KPiA+ICBkcml2 ZXJzL2dwdS9kcm0vaW14L3BhcmFsbGVsLWRpc3BsYXkuYyB8IDEzNiArKysrKysrKysrKysrKysr KysrKysrLS0tCj4gPiAgMSBmaWxlIGNoYW5nZWQsIDEyMCBpbnNlcnRpb25zKCspLCAxNiBkZWxl dGlvbnMoLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvcGFyYWxs ZWwtZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2lteC9wYXJhbGxlbC1kaXNwbGF5LmMKPiA+ IGluZGV4IDM1NTE4ZTVkZTM1Ni4uZGY0N2NiNzQ3NTlmIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2lteC9wYXJhbGxlbC1kaXNwbGF5LmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pbXgvcGFyYWxsZWwtZGlzcGxheS5jCj4gPiBAQCAtODksMzcgKzg5LDEzOSBAQCBzdGF0aWMg c3RydWN0IGRybV9lbmNvZGVyICppbXhfcGRfY29ubmVjdG9yX2Jlc3RfZW5jb2RlcigKPiA+ICAJ cmV0dXJuICZpbXhwZC0+ZW5jb2RlcjsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIHZvaWQgaW14 X3BkX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPiA+ICtzdGF0 aWMgdm9pZCBpbXhfcGRfYnJpZGdlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ ID4gIHsKPiA+ICsJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gYnJpZGdlX3RvX2VuY29k ZXIoYnJpZGdlKTsKPiA+ICAJc3RydWN0IGlteF9wYXJhbGxlbF9kaXNwbGF5ICppbXhwZCA9IGVu Y190b19pbXhwZChlbmNvZGVyKTsKPiA+ICAKPiA+ICAJZHJtX3BhbmVsX3ByZXBhcmUoaW14cGQt PnBhbmVsKTsKPiA+ICAJZHJtX3BhbmVsX2VuYWJsZShpbXhwZC0+cGFuZWwpOwo+ID4gIH0KPiA+ ICAKPiA+IC1zdGF0aWMgdm9pZCBpbXhfcGRfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlcikKPiA+ICtzdGF0aWMgdm9pZCBpbXhfcGRfYnJpZGdlX2Rpc2FibGUoc3Ry dWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiA+ICB7Cj4gPiArCXN0cnVjdCBkcm1fZW5jb2RlciAq ZW5jb2RlciA9IGJyaWRnZV90b19lbmNvZGVyKGJyaWRnZSk7Cj4gPiAgCXN0cnVjdCBpbXhfcGFy YWxsZWxfZGlzcGxheSAqaW14cGQgPSBlbmNfdG9faW14cGQoZW5jb2Rlcik7Cj4gPiAgCj4gPiAg CWRybV9wYW5lbF9kaXNhYmxlKGlteHBkLT5wYW5lbCk7Cj4gPiAgCWRybV9wYW5lbF91bnByZXBh cmUoaW14cGQtPnBhbmVsKTsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIGludCBpbXhfcGRfZW5j b2Rlcl9hdG9taWNfY2hlY2soc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAo+ID4gLQkJCQkg ICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gLQkJCQkgICAgICAg c3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCj4gPiArc3RhdGljIGNvbnN0 IHUzMiBpbXhfcGRfYnVzX2ZtdHNbXSA9IHsKPiA+ICsJTUVESUFfQlVTX0ZNVF9SR0I4ODhfMVgy NCwKPiA+ICsJTUVESUFfQlVTX0ZNVF9SR0I1NjVfMVgxNiwKPiA+ICsJTUVESUFfQlVTX0ZNVF9S R0I2NjZfMVgxOCwKPiA+ICsJTUVESUFfQlVTX0ZNVF9SR0I2NjZfMVgyNF9DUEFESEksICAKPiAK PiBpcHUtZGMuYyBhbHNvIHN1cHBvcnRzIE1FRElBX0JVU19GTVRfQkdSODg4XzFYMjQuCgpXaWxs IGFkZCB0aGF0IG9uZSB0byB0aGUgbGlzdC4KCj4gCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMg dm9pZAo+ID4gK2lteF9wZF9icmlkZ2VfYXRvbWljX2dldF9vdXRwdXRfYnVzX2ZtdHMoc3RydWN0 IGRybV9icmlkZ2UgKmJyaWRnZSwKPiA+ICsJCQkJCSBzdHJ1Y3QgZHJtX2JyaWRnZV9zdGF0ZSAq YnJpZGdlX3N0YXRlLAo+ID4gKwkJCQkJIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSwKPiA+ICsJCQkJCSBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSwKPiA+ ICsJCQkJCSB1bnNpZ25lZCBpbnQgKm51bV9vdXRwdXRfZm10cywKPiA+ICsJCQkJCSB1MzIgKm91 dHB1dF9mbXRzKQo+ID4gIHsKPiA+ICsJc3RydWN0IGRybV9kaXNwbGF5X2luZm8gKmRpID0gJmNv bm5fc3RhdGUtPmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvOwo+ID4gKwlzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXIgPSBicmlkZ2VfdG9fZW5jb2RlcihicmlkZ2UpOwo+ID4gKwlzdHJ1Y3QgaW14 X3BhcmFsbGVsX2Rpc3BsYXkgKmlteHBkID0gZW5jX3RvX2lteHBkKGVuY29kZXIpOwo+ID4gKwo+ ID4gKwkqbnVtX291dHB1dF9mbXRzID0gMTsKPiA+ICsJaWYgKGlteHBkLT5idXNfZm9ybWF0KSB7 Cj4gPiArCQlpZiAob3V0cHV0X2ZtdHMpCj4gPiArCQkJb3V0cHV0X2ZtdHNbMF0gPSBpbXhwZC0+ YnVzX2Zvcm1hdDsgIAo+IAo+IFRoaXMgaXMgdGhlIGxlZ2FjeSBEVCBjb25maWd1cmVkIGludGVy ZmFjZS1waXgtZm10LiBNYXliZSB0aGlzIHNob3VsZCBiZQo+IG1vdmVkIHRvIHRoZSBsYXN0IHBs YWNlLgoKSG0sIHNob3VsZG4ndCB3ZSByZXN0cmljdCB0aGluZ3MgdG8gYSBzaW5nbGUgZm9ybWF0 IHdoZW4gd2UgaGF2ZSB0aGUKRFQgcHJvcCBkZWZpbmVkPwoKPiAKPiA+ICsJfSBlbHNlIGlmIChk aS0+bnVtX2J1c19mb3JtYXRzKSB7Cj4gPiArCQkqbnVtX291dHB1dF9mbXRzID0gMTsgIAo+IAo+ IG51bV9vdXRwdXRfZm10cyBpcyBhbHJlYWR5IHNldCB0byBvbmUgYWJvdmUuCgpDb3JyZWN0LCBJ J2xsIGdldCByaWQgb2YgdGhpcyBhc3NpZ25tZW50LgoKPiAKPiA+ICsJCWlmIChvdXRwdXRfZm10 cykKPiA+ICsJCQlvdXRwdXRfZm10c1swXSA9IGRpLT5idXNfZm9ybWF0c1swXTsKPiA+ICsJfSBl bHNlIHsKPiA+ICsJCSpudW1fb3V0cHV0X2ZtdHMgPSBBUlJBWV9TSVpFKGlteF9wZF9idXNfZm10 cyk7Cj4gPiArCQlpZiAob3V0cHV0X2ZtdHMpCj4gPiArCQkJbWVtY3B5KG91dHB1dF9mbXRzLCBp bXhfcGRfYnVzX2ZtdHMsCj4gPiArCQkJICAgICAgIEFSUkFZX1NJWkUoaW14X3BkX2J1c19mbXRz KSk7Cj4gPiArCX0KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQKPiA+ICtpbXhfcGRfYnJp ZGdlX2F0b21pY19nZXRfaW5wdXRfYnVzX2ZtdHMoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwK PiA+ICsJCQkJCXN0cnVjdCBkcm1fYnJpZGdlX3N0YXRlICpicmlkZ2Vfc3RhdGUsCj4gPiArCQkJ CQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gPiArCQkJCQlzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSwKPiA+ICsJCQkJCXUzMiBvdXRwdXRfZm10LAo+ ID4gKwkJCQkJdW5zaWduZWQgaW50ICpudW1faW5wdXRfZm10cywKPiA+ICsJCQkJCXUzMiAqaW5w dXRfZm10cykKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IGJyaWRn ZV90b19lbmNvZGVyKGJyaWRnZSk7Cj4gPiArCXN0cnVjdCBpbXhfcGFyYWxsZWxfZGlzcGxheSAq aW14cGQgPSBlbmNfdG9faW14cGQoZW5jb2Rlcik7Cj4gPiArCj4gPiArCSpudW1faW5wdXRfZm10 cyA9IDA7Cj4gPiArCWlmIChvdXRwdXRfZm10ID09IE1FRElBX0JVU19GTVRfRklYRUQpIHsKPiA+ ICsJCSpudW1faW5wdXRfZm10cyA9IDE7ICAKPiAKPiBJIGRvbid0IHVuZGVyc3RhbmQgdGhpcy4g VGhlIGJ1cyBmb3JtYXQgc3RvcmVkIGluIGlteF9jcnRjX3N0YXRlIGJ5Cj4gYXRvbWljX2NoZWNr IGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBEQyBsYXRlci4gVGhpcyBzaG91bGQgbmV2ZXIgYmUK PiBNRURJQV9CVVNfRk1UX0ZJWEVELCB0aGF0IHdvdWxkIHRyaWdnZXIgYSBXQVJOX09OIGluCj4g aXB1X2J1c19mb3JtYXRfdG9fbWFwKCkuCgpNRURJQV9CVVNfRk1UX0ZJWEVEIGlzIHRoZSBkZWZh dWx0IHZhbHVlIHVzZWQgd2hlbiB0aGUgbmV4dCBicmlkZ2UgaW4KdGhlIGNoYWluIGRvZXMgbm90 IHN1cHBvcnQgYnVzIGZvcm1hdCBuZWdvdGlhdGlvbi4gV2hlbiB0aGUgZHJpdmVyCnJlY2VpdmVz IHRoaXMgdmFsdWUsIGl0IHNob3VsZCBwaWNrIGEgZGVmYXVsdCB2YWx1ZSAod2hpY2ggSSBtaWdo dCBoYXZlCmdvdHRlbiB3cm9uZyBoZXJlKSBzbyB0aGF0IGl0IGtlZXBzIHdvcmtpbmcgZXZlbiBp ZiBzb21lIGVsZW1lbnRzIG9mCnRoZSBicmlkZ2UgY2hhaW4gZG9uJ3Qgc3VwcG9ydCBuZWdvdGlh dGluZyB0aGUgYnVzIGZvcm1hdCB5ZXQuCgo+IAo+ID4gKwl9IGVsc2UgaWYgKCFpbXhwZC0+YnVz X2Zvcm1hdCkgewo+ID4gKwkJdW5zaWduZWQgaW50IGk7Cj4gPiArCj4gPiArCQlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRShpbXhfcGRfYnVzX2ZtdHMpOyBpKyspIHsKPiA+ICsJCQlpZiAoaW14 X3BkX2J1c19mbXRzW2ldID09IG91dHB1dF9mbXQpIHsKPiA+ICsJCQkJKm51bV9pbnB1dF9mbXRz ID0gMTsKPiA+ICsJCQkJYnJlYWs7Cj4gPiArCQkJfQo+ID4gKwkJfQo+ID4gKwl9IGVsc2UgaWYg KGlteHBkLT5idXNfZm9ybWF0ID09IG91dHB1dF9mbXQpIHsKPiA+ICsJCSpudW1faW5wdXRfZm10 cyA9IDE7Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYgKCpudW1faW5wdXRfZm10cyAmJiBpbnB1dF9m bXRzKQo+ID4gKwkJaW5wdXRfZm10c1swXSA9IE1FRElBX0JVU19GTVRfRklYRUQ7ICAKPiAKPiBU aGUgcGFyYWxsZWwtZGlzcGxheSBkcml2ZXIgYmFzaWNhbGx5IHJlcHJlc2VudHMgdGhlIHdpcmlu ZywgcGlubXV4LCBhbmQKPiBkcml2ZXJzIGJldHdlZW4gdGhlIElQVSBESSBhbmQgdGhlIERJU1Ag cGFkcy4gVGhlIGlucHV0IGZvcm1hdCBzaG91bGQKPiBhbHdheXMgYmUgaWRlbnRpY2FsIHRvIHRo ZSBvdXRwdXQgZm9ybWF0LgoKSSBjYW4gZG8gdGhhdCBpZiB5b3UgbGlrZS4gTm90ZSB0aGF0IHdl IGFyZSBmb3J3YXJkaW5nCnRoZSAtPm91dHB1dF9idXNfY2ZnLmZtdCB2YWx1ZSB0byB0aGUgSVBV IERJLCBub3QgLT5pbnB1dF9idXNfY2ZnLmZtdC4KSSBqdXN0IGFzc3VtZWQgdGhhdCBpbnB1dCBm b3JtYXQgd291bGRuJ3QgYmUgdXNlZCBpbiB0aGUgZHVtbXkgYnJpZGdlCmVsZW1lbnQgKHRoZSBv bmUgZW1iZWRkZWQgaW4gdGhlIGVuY29kZXIpIHNpbmNlIGVuY29kZXJzIG9ubHkgaGF2ZSBhbgpv dXRwdXQgZW5kIChpbnB1dCBwb3J0IGlzIGxpa2VseSB0byBiZSBhIFNvQyBzcGVjaWZpYyBsaW5r IGJldHdlZW4gdGhlCkNSVEMgYW5kIHRoZSBlbmNvZGVyIHdoaWNoIHdlIHByb2JhYmx5IGRvbid0 IG5lZWQvd2FudCB0byBleHBvc2UpLgoKPiAKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBp bXhfcGRfYnJpZGdlX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ID4g KwkJCQkgICAgICBzdHJ1Y3QgZHJtX2JyaWRnZV9zdGF0ZSAqYnJpZGdlX3N0YXRlLAo+ID4gKwkJ CQkgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gPiArCQkJCSAgICAg IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQo+ID4gK3sKPiA+ICsJc3Ry dWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gYnJpZGdlX3RvX2VuY29kZXIoYnJpZGdlKTsKPiA+ ICAJc3RydWN0IGlteF9jcnRjX3N0YXRlICppbXhfY3J0Y19zdGF0ZSA9IHRvX2lteF9jcnRjX3N0 YXRlKGNydGNfc3RhdGUpOwo+ID4gIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqZGkgPSAmY29u bl9zdGF0ZS0+Y29ubmVjdG9yLT5kaXNwbGF5X2luZm87Cj4gPiAgCXN0cnVjdCBpbXhfcGFyYWxs ZWxfZGlzcGxheSAqaW14cGQgPSBlbmNfdG9faW14cGQoZW5jb2Rlcik7Cj4gPiArCXN0cnVjdCBk cm1fYnJpZGdlX3N0YXRlICpuZXh0X2JyaWRnZV9zdGF0ZSA9IE5VTEw7Cj4gPiArCXN0cnVjdCBk cm1fYnJpZGdlICpuZXh0X2JyaWRnZTsKPiA+ICsJdTMyIGJ1c19mbGFncywgYnVzX2ZtdDsKPiA+ ICsJdW5zaWduZWQgaW50IGk7Cj4gPiAgCj4gPiAtCWlmICghaW14cGQtPmJ1c19mb3JtYXQgJiYg ZGktPm51bV9idXNfZm9ybWF0cykgewo+ID4gLQkJaW14X2NydGNfc3RhdGUtPmJ1c19mbGFncyA9 IGRpLT5idXNfZmxhZ3M7Cj4gPiAtCQlpbXhfY3J0Y19zdGF0ZS0+YnVzX2Zvcm1hdCA9IGRpLT5i dXNfZm9ybWF0c1swXTsKPiA+IC0JfSBlbHNlIHsKPiA+IC0JCWlteF9jcnRjX3N0YXRlLT5idXNf ZmxhZ3MgPSBpbXhwZC0+YnVzX2ZsYWdzOwo+ID4gLQkJaW14X2NydGNfc3RhdGUtPmJ1c19mb3Jt YXQgPSBpbXhwZC0+YnVzX2Zvcm1hdDsKPiA+ICsJbmV4dF9icmlkZ2UgPSBkcm1fYnJpZGdlX2No YWluX2dldF9uZXh0X2JyaWRnZShicmlkZ2UpOwo+ID4gKwlpZiAobmV4dF9icmlkZ2UpCj4gPiAr CQluZXh0X2JyaWRnZV9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X25ld19icmlkZ2Vfc3RhdGUoY3J0 Y19zdGF0ZS0+c3RhdGUsCj4gPiArCQkJCQkJCQkgICAgbmV4dF9icmlkZ2UpOwo+ID4gKwo+ID4g KwlidXNfZm10ID0gYnJpZGdlX3N0YXRlLT5vdXRwdXRfYnVzX2NmZy5mbXQ7Cj4gPiArCWlmIChi dXNfZm10ID09IE1FRElBX0JVU19GTVRfRklYRUQpCj4gPiArCQlidXNfZm10ID0gMDsgIAo+IAo+ IEkgd291bGQgZXhwZWN0IHRoaXMgdG8gcmV0dXJuIHdpdGggLUVJTlZBTCBpZiBicmlkZ2Vfc3Rh dGUtCj4gPm91dHB1dF9idXNfY2ZnLmZtdCBpcyBub3QgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVk IGZvcm1hdHMuCgpBcyBzYWlkIGFib3ZlLCB3ZSBuZWVkIGEgd2F5IHRvIHN1cHBvcnQgYnJpZGdl IGNoYWlucyB3aGVyZSBub3QgYWxsCmVsZW1lbnRzIHN1cHBvcnQgbmVnb3RpYXRpbmcgdGhlIGJ1 cyBmb3JtYXQsIHRoYXQncyB3aGF0IHRoaXMgZmFsbGJhY2sKaXMgZm9yLCBidXQgbWF5YmUgMCBp cyBub3QgYW4gYXBwcm9wcmlhdGUgdmFsdWUgdG8gbWVhbiAncGljayB0aGUKZGVmYXVsdCBmb3Jt YXQnLgoKPiAKPiA+ICsKPiA+ICsJaWYgKG5leHRfYnJpZGdlX3N0YXRlKQo+ID4gKwkJYnVzX2Zs YWdzID0gbmV4dF9icmlkZ2Vfc3RhdGUtPmlucHV0X2J1c19jZmcuZmxhZ3M7Cj4gPiArCWVsc2Ug aWYgKCFpbXhwZC0+YnVzX2Zvcm1hdCAmJiBkaS0+bnVtX2J1c19mb3JtYXRzKQo+ID4gKwkJYnVz X2ZsYWdzID0gZGktPmJ1c19mbGFnczsKPiA+ICsJZWxzZQo+ID4gKwkJYnVzX2ZsYWdzID0gaW14 cGQtPmJ1c19mbGFnczsKPiA+ICsKPiA+ICsJZm9yIChpID0gMDsgYnVzX2ZtdCAmJiBpIDwgQVJS QVlfU0laRShpbXhfcGRfYnVzX2ZtdHMpOyBpKyspIHsKPiA+ICsJCWlmIChpbXhfcGRfYnVzX2Zt dHNbaV0gPT0gYnJpZGdlX3N0YXRlLT5vdXRwdXRfYnVzX2NmZy5mbXQpCj4gPiArCQkJYnJlYWs7 Cj4gPiAgCX0KPiA+ICsKPiA+ICsJaWYgKGkgPT0gQVJSQVlfU0laRShpbXhfcGRfYnVzX2ZtdHMp KQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiArCWlmIChidXNfZmxhZ3MgJgo+ID4g KwkgICAgfihEUk1fQlVTX0ZMQUdfREVfTE9XIHwgRFJNX0JVU19GTEFHX0RFX0hJR0ggfAo+ID4g KwkgICAgICBEUk1fQlVTX0ZMQUdfUElYREFUQV9EUklWRV9QT1NFREdFIHwKPiA+ICsJICAgICAg RFJNX0JVU19GTEFHX1BJWERBVEFfRFJJVkVfTkVHRURHRSkpCj4gPiArCQlyZXR1cm4gLUVJTlZB TDsgIAo+IAo+IFRoaXMgY291bGQgYWxsb3cgRFJNX0JVU19GTEFHX1NZTkNfRFJJVkVfUE9TRURH RS9ORUdFREdFIGFzIHdlbGwsIGlmCj4gdGhleSBhcmUgbm90IG9wcG9zaXRlIHRvIFBJWERBVEFf RFJJVkUuCgpPa2F5LCB3aWxsIGFkZCB0aG9zZSBmbGFncyBhbmQgY2hlY2sgdGhhdCBQSVhEQVRB IGFuZCBTWU5DIGFyZQpjb25zaXN0ZW50LgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWw=