From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v3] drm/dp: Use large transactions for I2C over AUX Date: Thu, 29 Jan 2015 15:30:36 +0200 Message-ID: <20150129133036.GV19354@intel.com> References: <1422373429-10137-1-git-send-email-simon.farnsworth@onelan.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 2A80372090 for ; Thu, 29 Jan 2015 05:30:43 -0800 (PST) Content-Disposition: inline In-Reply-To: <1422373429-10137-1-git-send-email-simon.farnsworth@onelan.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Simon Farnsworth Cc: Thierry Reding , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBKYW4gMjcsIDIwMTUgYXQgMDM6NDM6NDlQTSArMDAwMCwgU2ltb24gRmFybnN3b3J0 aCB3cm90ZToKPiBEaXNwbGF5UG9ydCB0byBEVkktRCBEdWFsIExpbmsgYWRhcHRlcnMgZGVzaWdu ZWQgYnkgQml6bGluayBoYXZlIGJ1Z3MgaW4KPiB0aGVpciBJMkMgb3ZlciBBVVggaW1wbGVtZW50 YXRpb24uIFRoZXkgd29yayBmaW5lIHdpdGggV2luZG93cywgYnV0IGZhaWwKPiB3aXRoIExpbnV4 Lgo+IAo+IEl0IHR1cm5zIG91dCB0aGF0IHRoZXkgY2Fubm90IGtlZXAgYW4gSTJDIHRyYW5zYWN0 aW9uIG9wZW4gdW5sZXNzIHRoZQo+IHByZXZpb3VzIHJlYWQgd2FzIDE2IGJ5dGVzOyBzaG9ydGVy IHJlYWRzIGNhbiBvbmx5IGJlIGZvbGxvd2VkIGJ5IGEgemVybwo+IGJ5dGUgdHJhbnNmZXIgZW5k aW5nIHRoZSBJMkMgdHJhbnNhY3Rpb24uCj4gCj4gQ29weSBXaW5kb3dzJ3MgYmVoYXZpb3VyLCBh bmQgcmVhZCAxNiBieXRlcyBhdCBhIHRpbWUuIElmIHdlIGdldCBhIHNob3J0Cj4gcmVwbHksIGFz c3VtZSB0aGF0IHRoZXJlJ3MgYSBoYXJkd2FyZSBib3R0bGVuZWNrLCBhbmQgc2hyaW5rIG91ciBy ZWFkIHNpemUKPiB0byBtYXRjaC4gRm9yIHRoaXMgcHVycG9zZSwgdXNlIHRoZSBhbGdvcml0aG0g aW4gdGhlIERpc3BsYXlQb3J0IDEuMiBzcGVjLAo+IGluIHRoZSBob3BlcyB0aGF0IGl0J2xsIGJl IGNsb3Nlc3QgdG8gd2hhdCBXaW5kb3dzIGRvZXMsIGFzIG5vIHNpbmsgSSd2ZQo+IGZvdW5kIGFj dHVhbGx5IGdpdmVzIHNob3J0IHJlcGxpZXMuCj4gCj4gQWxzbyBwcm92aWRlIGEgbW9kdWxlIHBh cmFtZXRlciBmb3IgdGVzdGluZyBzbWFsbGVyIHRyYW5zZmVyIHNpemVzLCBpbiBjYXNlCj4gdGhl cmUgYXJlIHNpbmtzIG91dCB0aGVyZSB0aGF0IGNhbm5vdCB3b3JrIHdpdGggV2luZG93cy4KPiAK PiBTaWduZWQtb2ZmLWJ5OiBTaW1vbiBGYXJuc3dvcnRoIDxzaW1vbi5mYXJuc3dvcnRoQG9uZWxh bi5jby51az4KPiAtLS0KPiAKPiB2MyBjaGFuZ2VzLCBhZnRlciBmZWVkYmFjayBmcm9tIFZpbGxl IGFuZCBtb3JlIHRlc3Rpbmcgb2YgV2luZG93czoKPiAKPiAgKiBDaGFuZ2UgdGhlIHNob3J0IHJl cGx5IGFsZ29yaXRobSB0byBtYXRjaCBWaWxsZSdzIGRlc2NyaXB0aW9uIG9mIHRoZQo+ICAgIERp c3BsYXlQb3J0IDEuMiBzcGVjIHdvcmRpbmcuCj4gCj4gICogQWRkIGEgbW9kdWxlIHBhcmFtZXRl ciB0byBzZXQgdGhlIGRlZmF1bHQgdHJhbnNmZXIgc2l6ZSBmb3IKPiAgICBleHBlcmltZW50cy4g UmVxdWVzdGVkIG92ZXIgSVJDIGJ5IFZpbGxlLgo+IAo+IE5vLW9uZSdzIGJlZW4gYWJsZSB0byBm aW5kIGEgZGV2aWNlIHRoYXQgZG9lcyBzaG9ydCByZXBsaWVzLCBidXQgZXhwZXJpbWVudHMKPiBz aG93IHRoYXQgYmlnZ2VyIHJlYWRzIGFyZSBmYXN0ZXIgb24gbW9zdCBkZXZpY2VzLiBWaWxsZSBn b3Q6Cj4gCj4gIERQLT5EVkkgKE9VSSAwMDFjZjgpOiAgNDBtcyAtPiAzNW1zCj4gIERQLT5WR0Eg KE9VSSAwMDIyYjkpOiAgNDVtcyAtPiAzOG1zCj4gIFpvdGFjIERQLT4yeEhETUk6ICAgICAgMjVt cyAtPiAgNG1zCj4gCj4gdjIgY2hhbmdlcywgYWZ0ZXIgZmVlZGJhY2sgZnJvbSBUaGllcnJ5IGFu ZCBWaWxsZToKPiAKPiAgKiBIYW5kbGUgc2hvcnQgcmVwbGllcy4gSSd2ZSBkZWNpZGVkIChhcmJp dHJhcmlseSkgdGhhdCBhIHNob3J0IHJlcGx5Cj4gICAgcmVzdWx0cyBpbiB1cyBkcm9wcGluZyBi YWNrIHRvIHRoZSBuZXdseSBjaG9zZW4gc2l6ZSBmb3IgdGhlIHJlc3Qgb2YgdGhpcwo+ICAgIEky QyB0cmFuc2FjdGlvbi4gVGh1cywgZ2l2ZW4gYW4gYXR0ZW1wdCB0byByZWFkIHRoZSBmaXJzdCAx NiBieXRlcyBvZgo+ICAgIEVESUQsIGFuZCBhIHNpbmsgdGhhdCBvbmx5IGRvZXMgNCBieXRlcyBv ZiBidWZmZXJpbmcsIHdlIHdpbGwgc2VlIHRoZQo+ICAgIGZvbGxvd2luZyBBVVggdHJhbnNmZXJz IGZvciB0aGUgRURJRCByZWFkIChhZnRlciBhZGRyZXNzIGlzIHNldCk6Cj4gCj4gICAgPHNldCBh ZGRyZXNzLCBibG9jayBldGM+Cj4gICAgUmVhZCAxNiBieXRlcyBmcm9tIEkyQyBvdmVyIEFVWC4K PiAgICBSZXBseSB3aXRoIDQgYnl0ZXMKPiAgICBSZWFkIDQgYnl0ZXMKPiAgICBSZXBseSB3aXRo IDQgYnl0ZXMKPiAgICBSZWFkIDQgYnl0ZXMKPiAgICBSZXBseSB3aXRoIDQgYnl0ZXMKPiAgICBS ZWFkIDQgYnl0ZXMKPiAgICBSZXBseSB3aXRoIDQgYnl0ZXMKPiAgICA8ZW5kIEkyQyB0cmFuc2Fj dGlvbj4KPiAKPiBOb3RlIHRoYXQgSSd2ZSBub3QgbG9va2VkIGF0IE1TVCBzdXBwb3J0IC0gSSBo YXZlIG5laXRoZXIgdGhlIERQIDEuMiBzcGVjCj4gbm9yIGFueSBNU1QgYnJhbmNoIGRldmljZXMs IHNvIEkgY2FuJ3QgdGVzdCBhbnl0aGluZyBJIHdyaXRlIG9yIGNoZWNrIGl0Cj4gYWdhaW5zdCBh IHNwZWMuIEl0IGxvb2tzIGZyb20gdGhlIGNvZGUsIGhvd2V2ZXIsIGFzIGlmIE1TVCBoYXMgdGhl IGJyYW5jaAo+IGRldmljZSBkbyB0aGUgc3BsaXQgZnJvbSBhIGJpZyByZXF1ZXN0IGludG8gc21h bGwgdHJhbnNhY3Rpb25zLgo+IAo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5jIHwg OTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KPiAgaW5jbHVkZS9k cm0vZHJtX2RwX2hlbHBlci5oICAgICB8ICA1ICsrKwo+ICAyIGZpbGVzIGNoYW5nZWQsIDc3IGlu c2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2RwX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYwo+ IGluZGV4IDc5OTY4ZTMuLjNkYjExNmMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2Ry bV9kcF9oZWxwZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVscGVyLmMKPiBA QCAtMzk2LDExICszOTYsMTMgQEAgc3RhdGljIHUzMiBkcm1fZHBfaTJjX2Z1bmN0aW9uYWxpdHko c3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQo+ICAgKiByZXRyeWluZyB0aGUgdHJhbnNhY3Rp b24gYXMgYXBwcm9wcmlhdGUuICBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlCj4gICAqIGF1eC0+dHJh bnNmZXIgZnVuY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGFueXRoaW5nIGluIHRoZSBtc2cgb3RoZXIg dGhhbiB0aGUKPiAgICogcmVwbHkgZmllbGQuCj4gKyAqCj4gKyAqIFJldHVybnMgYnl0ZXMgdHJh bnNmZXJyZWQgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUu Cj4gICAqLwo+ICBzdGF0aWMgaW50IGRybV9kcF9pMmNfZG9fbXNnKHN0cnVjdCBkcm1fZHBfYXV4 ICphdXgsIHN0cnVjdCBkcm1fZHBfYXV4X21zZyAqbXNnKQo+ICB7Cj4gIAl1bnNpZ25lZCBpbnQg cmV0cnk7Cj4gLQlpbnQgZXJyOwo+ICsJaW50IHJldDsKPiAgCj4gIAkvKgo+ICAJICogRFAxLjIg c2VjdGlvbnMgMi43LjcuMS41LjYuMSBhbmQgMi43LjcuMS42LjYuMTogQSBEUCBTb3VyY2UgZGV2 aWNlCj4gQEAgLTQwOSwxNCArNDExLDE0IEBAIHN0YXRpYyBpbnQgZHJtX2RwX2kyY19kb19tc2co c3RydWN0IGRybV9kcF9hdXggKmF1eCwgc3RydWN0IGRybV9kcF9hdXhfbXNnICptc2cpCj4gIAkg Ki8KPiAgCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IDc7IHJldHJ5KyspIHsKPiAgCQltdXRleF9s b2NrKCZhdXgtPmh3X211dGV4KTsKPiAtCQllcnIgPSBhdXgtPnRyYW5zZmVyKGF1eCwgbXNnKTsK PiArCQlyZXQgPSBhdXgtPnRyYW5zZmVyKGF1eCwgbXNnKTsKPiAgCQltdXRleF91bmxvY2soJmF1 eC0+aHdfbXV0ZXgpOwo+IC0JCWlmIChlcnIgPCAwKSB7Cj4gLQkJCWlmIChlcnIgPT0gLUVCVVNZ KQo+ICsJCWlmIChyZXQgPCAwKSB7Cj4gKwkJCWlmIChyZXQgPT0gLUVCVVNZKQo+ICAJCQkJY29u dGludWU7Cj4gIAo+IC0JCQlEUk1fREVCVUdfS01TKCJ0cmFuc2FjdGlvbiBmYWlsZWQ6ICVkXG4i LCBlcnIpOwo+IC0JCQlyZXR1cm4gZXJyOwo+ICsJCQlEUk1fREVCVUdfS01TKCJ0cmFuc2FjdGlv biBmYWlsZWQ6ICVkXG4iLCByZXQpOwo+ICsJCQlyZXR1cm4gcmV0Owo+ICAJCX0KPiAgCj4gIAo+ IEBAIC00NTcsOSArNDU5LDcgQEAgc3RhdGljIGludCBkcm1fZHBfaTJjX2RvX21zZyhzdHJ1Y3Qg ZHJtX2RwX2F1eCAqYXV4LCBzdHJ1Y3QgZHJtX2RwX2F1eF9tc2cgKm1zZykKPiAgCQkJICogQm90 aCBuYXRpdmUgQUNLIGFuZCBJMkMgQUNLIHJlcGxpZXMgcmVjZWl2ZWQuIFdlCj4gIAkJCSAqIGNh biBhc3N1bWUgdGhlIHRyYW5zZmVyIHdhcyBzdWNjZXNzZnVsLgo+ICAJCQkgKi8KPiAtCQkJaWYg KGVyciA8IG1zZy0+c2l6ZSkKPiAtCQkJCXJldHVybiAtRVBST1RPOwo+IC0JCQlyZXR1cm4gMDsK PiArCQkJcmV0dXJuIHJldDsKClRoZSBzL2Vyci9yZXQvIHNlZW1zIGEgYml0IHN1cGVyZmx1b3Vz LCBidXQgT1RPSCBpdCBkb2VzIG1ha2Ugc2Vuc2UKc2luY2UgaXQncyBubyBsb25nZXIganVzdCBh biBlcnJvciB2YWx1ZS4gQXQgZmlyc3QgZ2xhbmNlIGl0IGp1c3QKY29uZnVzZWQgbWUgYSBiaXQg c2luY2UgSSB3YXNuJ3QgZXhwZWN0aW5nIHRoYXQgbWFueSBjaGFuZ2VzIHRvIHRoaXMKZnVuY3Rp b24uCgo+ICAKPiAgCQljYXNlIERQX0FVWF9JMkNfUkVQTFlfTkFDSzoKPiAgCQkJRFJNX0RFQlVH X0tNUygiSTJDIG5hY2tcbiIpOwo+IEBAIC00ODIsMTQgKzQ4Miw2NyBAQCBzdGF0aWMgaW50IGRy bV9kcF9pMmNfZG9fbXNnKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsIHN0cnVjdCBkcm1fZHBfYXV4 X21zZyAqbXNnKQo+ICAJcmV0dXJuIC1FUkVNT1RFSU87Cj4gIH0KPiAgCj4gKy8qCj4gKyAqIEtl ZXAgcmV0cnlpbmcgZHJtX2RwX2kyY19kb19tc2cgdW50aWwgYWxsIGRhdGEgaGFzIGJlZW4gdHJh bnNmZXJyZWQuCj4gKyAqCj4gKyAqIFJldHVybnMgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLCBv ciBhIHJlY29tbWVuZGVkIHRyYW5zZmVyIHNpemUgb24gc3VjY2Vzcy4KPiArICovCj4gK3N0YXRp YyBpbnQgZHJtX2RwX2kyY19kcmFpbl9tc2coc3RydWN0IGRybV9kcF9hdXggKmF1eCwgc3RydWN0 IGRybV9kcF9hdXhfbXNnICptc2cpCj4gK3sKPiArCWludCByZXQ7Cj4gKwlzdHJ1Y3QgZHJtX2Rw X2F1eF9tc2cgZHJhaW5fbXNnOwo+ICsJaW50IGRyYWluX2J5dGVzOwo+ICsKPiArCXJldCA9IGRy bV9kcF9pMmNfZG9fbXNnKGF1eCwgbXNnKTsKPiArCj4gKwlpZiAocmV0ID09IG1zZy0+c2l6ZSB8 fCByZXQgPD0gMCkKPiArCQlyZXR1cm4gcmV0ID09IDAgPyAtRVBST1RPIDogcmV0Owo+ICsKPiAr CS8qCj4gKwkgKiBXZSBoYWQgYSBwYXJ0aWFsIHJlcGx5LiBEcmFpbiBvdXQgdGhlIHJlc3Qgb2Yg dGhlIGJ5dGVzIHdlCj4gKwkgKiBvcmlnaW5hbGx5IHJlcXVlc3RlZCwgdGhlbiByZXR1cm4gdGhl IHNpemUgb2YgdGhlIHBhcnRpYWwKPiArCSAqIHJlcGx5LiBJbiB0aGVvcnksIHRoaXMgc2hvdWxk IG1hdGNoIERQIDEuMidzIGRlc2lyZWQgYmVoYXZpb3VyCj4gKwkgKiBmb3IgSTJDIG92ZXIgQVVY Lgo+ICsJICovCgpUaGUgc3BlYyBpcyBhIGJpdCBzZWxmIGNvbnRyYWRpY3RvcnksIGJ1dCB0aGVy ZSBpcyBhIHNlY3Rpb24gd2hpY2ggc2VlbXMKdG8gc3VnZ2VzdCB0aGlzLiBJdCdzIG9ubHkgbWVu dGlvbmVkIGZvciByZWFkcyBtaW5kIHlvdSwgYnV0IEkgZG9uJ3Qgc2VlCml0IGNhdXNpbmcgaGFy bSBmb3Igd3JpdGVzIGVpdGhlci4gTm90IHRoYXQgd2UgYWN0dWFsbHkgaGFuZGxlCnBhcnRpYWwv ZGVmZXJyZWQgd3JpdGVzIGNvcnJlY3RseSBhdCB0aGUgbW9tZW50LgoKPiArCURSTV9ERUJVR19L TVMoIlBhcnRpYWwgSTJDIHJlcGx5OiByZXF1ZXN0ZWQgJXp1IGJ5dGVzIGdvdCAlZCBieXRlc1xu IiwgbXNnLT5zaXplLCByZXQpOwo+ICsJZHJhaW5fbXNnID0gKm1zZzsKPiArCWRyYWluX21zZy5z aXplIC09IHJldDsKPiArCWRyYWluX21zZy5idWZmZXIgKz0gcmV0Owo+ICsJd2hpbGUgKGRyYWlu X21zZy5zaXplICE9IDApIHsKPiArCQlkcmFpbl9ieXRlcyA9IGRybV9kcF9pMmNfZG9fbXNnKGF1 eCwgJmRyYWluX21zZyk7Cj4gKwkJaWYgKGRyYWluX2J5dGVzIDw9IDApCj4gKwkJCXJldHVybiBk cmFpbl9ieXRlcyA9PSAwID8gLUVQUk9UTyA6IGRyYWluX2J5dGVzOwo+ICsJCWRyYWluX21zZy5z aXplIC09IGRyYWluX2J5dGVzOwo+ICsJCWRyYWluX21zZy5idWZmZXIgKz0gZHJhaW5fYnl0ZXM7 Cj4gKwl9CgpTb21laG93IEkgZG9uJ3QgbGlrZSB0aGUgZHVwbGljYXRlZCBjb2RlIGVuZCB1cCBo YXZpbmcgaGVyZS4gU28KcHV0dGluZyBpdCBhbGwgaW4gYSBzaW5nbGUgbG9vcCB3b3VsZCBzZWVt IG5pY2VyIHRvIG1lLiBNYXliZQpzb21ldGhpbmcgYWxvbmcgdGhlc2UgbGluZXM/CgpzdHJ1Y3Qg ZHJtX2RwX2F1eF9tc2cgbXNnID0gKm9yaWdfbXNnOwppbnQgcmV0ID0gbXNnLnNpemU7CndoaWxl IChtc2cuc2l6ZSA+IDApIHsKCWludCBlcnIgPSBkcm1fZHBfaTJjX2RvX21zZyhhdXgsICZtc2cp OwoJaWYgKGVyciA8PSAwKQoJCXJldHVybiBlcnIgPT0gMCA/IC1FUFJPVE8gOiBlcnI7CgoJaWYg KGVyciA8IG1zZy5zaXplICYmIGVyciA8IHJldCkgewoJCURSTV9ERUJVR19LTVMoIlBhcnRpYWwg STJDIHJlcGx5OiByZXF1ZXN0ZWQgJXp1CgkJCSAgICAgICBieXRlcyBnb3QgJWQgYnl0ZXNcbiIs IG1zZy5zaXplLCBlcnIpOwoJCXJldCA9IGVycjsKCX0KCgltc2cuc2l6ZSAtPSBlcnI7Cgltc2cu YnVmZmVyICs9IGVycjsKfQoKSXQgd291bGQgYWxzbyByZWR1Y2UgdGhlIHJldHVybmVkIHByZWZl cnJlZCB0cmFuc2ZlciBzaXplIGZ1cnRoZXIgaWYgd2UKKGZvciB3aGF0ZXZlciByZWFzb24pIGdv dCBhbiBldmVuIHNob3J0ZXIgcmVwbHkgd2hpbGUgd2UncmUgZHJhaW5pbmcuCgoKPiArCXJldHVy biByZXQ7Cj4gK30KPiArCj4gKy8qCj4gKyAqIEJpemxpbmsgZGVzaWduZWQgRFAtPkRWSS1EIER1 YWwgTGluayBhZGFwdGVycyByZXF1aXJlIHRoZSBJMkMgb3ZlciBBVVgKPiArICogcGFja2V0cyB0 byBiZSBhcyBsYXJnZSBhcyBwb3NzaWJsZS4gSWYgbm90LCB0aGUgSTJDIHRyYW5zYWN0aW9ucyBu ZXZlcgo+ICsgKiBzdWNjZWVkLiBIZW5jZSB0aGUgZGVmYXVsdCBpcyBtYXhpbXVtLgo+ICsgKi8K PiArc3RhdGljIGludCBkcF9hdXhfaTJjX3RyYW5zZmVyX3NpemUgX19yZWFkX21vc3RseSA9IERQ X0FVWF9NQVhfUEFZTE9BRF9CWVRFUzsKPiArbW9kdWxlX3BhcmFtX25hbWVkKGRwX2F1eF9pMmNf dHJhbnNmZXJfc2l6ZSwgZHBfYXV4X2kyY190cmFuc2Zlcl9zaXplLCBpbnQsIDA2MDApOwo+ICtN T0RVTEVfUEFSTV9ERVNDKGRwX2F1eF9pMmNfdHJhbnNmZXJfc2l6ZSwKPiArCQkgIk51bWJlciBv ZiBieXRlcyB0byB0cmFuc2ZlciBpbiBhIHNpbmdsZSBJMkMgb3ZlciBEUCBBVVggQ0ggbWVzc2Fn ZSwgKDEtMTYsIGRlZmF1bHQgMTYpIik7Cj4gKwo+ICBzdGF0aWMgaW50IGRybV9kcF9pMmNfeGZl cihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBpMmNfbXNnICptc2dzLAo+ICAJ CQkgICBpbnQgbnVtKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4ID0gYWRhcHRlci0+ YWxnb19kYXRhOwo+ICAJdW5zaWduZWQgaW50IGksIGo7Cj4gKwlpbnQgdHJhbnNmZXJfc2l6ZTsK PiAgCXN0cnVjdCBkcm1fZHBfYXV4X21zZyBtc2c7Cj4gIAlpbnQgZXJyID0gMDsKPiAgCj4gKwlp ZiAoZHBfYXV4X2kyY190cmFuc2Zlcl9zaXplIDwgMSB8fCBkcF9hdXhfaTJjX3RyYW5zZmVyX3Np emUgPiBEUF9BVVhfTUFYX1BBWUxPQURfQllURVMpIHsKPiArCQlEUk1fRVJST1IoImRwX2F1eF9p MmNfdHJhbnNmZXJfc2l6ZSBpbnZhbGlkIC0gY2hhbmdpbmcgZnJvbSAlZCB0byAlZFxuIiwKPiAr CQkJICBkcF9hdXhfaTJjX3RyYW5zZmVyX3NpemUsIERQX0FVWF9NQVhfUEFZTE9BRF9CWVRFUyk7 Cj4gKwkJZHBfYXV4X2kyY190cmFuc2Zlcl9zaXplID0gRFBfQVVYX01BWF9QQVlMT0FEX0JZVEVT Owo+ICsJfQoKVGhlIGludmFsaWQgdmFsdWVzIGNvdWxkIGJlIHJlamVjdGVkIHdpdGggY3VzdG9t IHN0cnVjdAprZXJuZWxfcGFyYW1fb3BzLCBidXQgbWF5YmUgdGhhdCdzIGEgYml0IG92ZXJraWxs LiBJZiBub3QgdGhhdCwgdGhlbgpJJ20gbm90IHN1cmUgdGhlIGVycm9yIG1lc3NhZ2UgcmVhbGx5 IGhhcyB0aGF0IG11Y2ggdmFsdWUuIFNvIEknbSB0aGlua2luZwp3ZSBjb3VsZCBqdXN0ICdjbGFt cCguLi4sIDEsIERQX0FVWF9NQVhfUEFZTE9BRF9CWVRFUyknIGhlcmUuCgo+ICsKPiAgCW1lbXNl dCgmbXNnLCAwLCBzaXplb2YobXNnKSk7Cj4gIAo+ICAJZm9yIChpID0gMDsgaSA8IG51bTsgaSsr KSB7Cj4gQEAgLTUwNywyMCArNTYwLDIwIEBAIHN0YXRpYyBpbnQgZHJtX2RwX2kyY194ZmVyKHN0 cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGkyY19tc2cgKm1zZ3MsCj4gIAkJZXJy ID0gZHJtX2RwX2kyY19kb19tc2coYXV4LCAmbXNnKTsKPiAgCQlpZiAoZXJyIDwgMCkKPiAgCQkJ YnJlYWs7Cj4gLQkJLyoKPiAtCQkgKiBNYW55IGhhcmR3YXJlIGltcGxlbWVudGF0aW9ucyBzdXBw b3J0IEZJRk9zIGxhcmdlciB0aGFuIGEKPiAtCQkgKiBzaW5nbGUgYnl0ZSwgYnV0IGl0IGhhcyBi ZWVuIGVtcGlyaWNhbGx5IGRldGVybWluZWQgdGhhdAo+IC0JCSAqIHRyYW5zZmVycmluZyBkYXRh IGluIGxhcmdlciBjaHVua3MgY2FuIGFjdHVhbGx5IGxlYWQgdG8KPiAtCQkgKiBkZWNyZWFzZWQg cGVyZm9ybWFuY2UuIFRoZXJlZm9yZSBlYWNoIG1lc3NhZ2UgaXMgc2ltcGx5Cj4gLQkJICogdHJh bnNmZXJyZWQgYnl0ZS1ieS1ieXRlLgo+ICsJCS8qIFdlIHdhbnQgZWFjaCB0cmFuc2FjdGlvbiB0 byBiZSBhcyBsYXJnZSBhcyBwb3NzaWJsZSwgYnV0Cj4gKwkJICogd2UnbGwgZ28gdG8gc21hbGxl ciBzaXplcyBpZiB0aGUgaGFyZHdhcmUgZ2l2ZXMgdXMgYQo+ICsJCSAqIHNob3J0IHJlcGx5Lgo+ ICAJCSAqLwo+IC0JCWZvciAoaiA9IDA7IGogPCBtc2dzW2ldLmxlbjsgaisrKSB7Cj4gKwkJdHJh bnNmZXJfc2l6ZSA9IGRwX2F1eF9pMmNfdHJhbnNmZXJfc2l6ZTsKPiArCQlmb3IgKGogPSAwOyBq IDwgbXNnc1tpXS5sZW47IGogKz0gbXNnLnNpemUpIHsKPiAgCQkJbXNnLmJ1ZmZlciA9IG1zZ3Nb aV0uYnVmICsgajsKPiAtCQkJbXNnLnNpemUgPSAxOwo+ICsJCQltc2cuc2l6ZSA9IG1pbigodW5z aWduZWQpdHJhbnNmZXJfc2l6ZSwgbXNnc1tpXS5sZW4gLSBqKTsKCkNvdWxkIG1ha2UgdHJhbnNm ZXJfc2l6ZSB1bnNpZ25lZCBpbiB0aGUgZmlyc3QgcGxhY2UuCgo+ICAKPiAtCQkJZXJyID0gZHJt X2RwX2kyY19kb19tc2coYXV4LCAmbXNnKTsKPiAtCQkJaWYgKGVyciA8IDApCj4gKwkJCXRyYW5z ZmVyX3NpemUgPSBkcm1fZHBfaTJjX2RyYWluX21zZyhhdXgsICZtc2cpOwo+ICsJCQlpZiAodHJh bnNmZXJfc2l6ZSA8IDApIHsKPiArCQkJCWVyciA9IHRyYW5zZmVyX3NpemU7Cj4gIAkJCQlicmVh azsKPiArCQkJfQoKTWF5YmUgdGhpcyBpcyBhIGJpdCBtb3JlIHN0cmFpZ2h0IGZvcndhcmQ/Cgpl cnIgPSBkcm1fZHBfaTJjX2RyYWluX21zZyhhdXgsICZtc2cpOwppZiAoZXJyIDwgMCkKCWJyZWFr Owp0cmFuc2Zlcl9zaXplID0gZXJyOwoKQXQgbGVhc3QgdGhlIGRpZmYgd291bGQgYmUgc21hbGxl ciwgd2hpY2ggaXMgYWx3YXlzIGdvb2Qgd2hlbiByZXZpZXdpbmcKc3R1ZmYuCgoKPiAgCQl9Cj4g IAkJaWYgKGVyciA8IDApCj4gIAkJCWJyZWFrOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9k cm1fZHBfaGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fZHBfaGVscGVyLmgKPiBpbmRleCAxMWY4 Yzg0Li40NDRkNTFiIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9kcF9oZWxwZXIuaAo+ ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9kcF9oZWxwZXIuaAo+IEBAIC00Miw2ICs0Miw4IEBACj4g ICAqIDEuMiBmb3JtYWxseSBpbmNsdWRlcyBib3RoIGVEUCBhbmQgRFBJIGRlZmluaXRpb25zLgo+ ICAgKi8KPiAgCj4gKyNkZWZpbmUgRFBfQVVYX01BWF9QQVlMT0FEX0JZVEVTCTE2Cj4gKwo+ICAj ZGVmaW5lIERQX0FVWF9JMkNfV1JJVEUJCTB4MAo+ICAjZGVmaW5lIERQX0FVWF9JMkNfUkVBRAkJ CTB4MQo+ICAjZGVmaW5lIERQX0FVWF9JMkNfU1RBVFVTCQkweDIKPiBAQCAtNTE5LDYgKzUyMSw5 IEBAIHN0cnVjdCBkcm1fZHBfYXV4X21zZyB7Cj4gICAqIHRyYW5zYWN0aW9ucy4gVGhlIGRybV9k cF9hdXhfcmVnaXN0ZXJfaTJjX2J1cygpIGZ1bmN0aW9uIHJlZ2lzdGVycyBhbgo+ICAgKiBJMkMg YWRhcHRlciB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gZHJtX3Byb2JlX2RkYygpLiBVcG9uIHJlbW92 YWwsIGRyaXZlcnMKPiAgICogc2hvdWxkIGNhbGwgZHJtX2RwX2F1eF91bnJlZ2lzdGVyX2kyY19i dXMoKSB0byByZW1vdmUgdGhlIEkyQyBhZGFwdGVyLgo+ICsgKiBUaGUgSTJDIGFkYXB0ZXIgdXNl cyBsb25nIHRyYW5zZmVycyBieSBkZWZhdWx0OyBpZiBhIHBhcnRpYWwgcmVzcG9uc2UgaXMKPiAr ICogcmVjZWl2ZWQsIHRoZSBhZGFwdGVyIHdpbGwgZHJvcCBkb3duIHRvIHRoZSBzaXplIGdpdmVu IGJ5IHRoZSBwYXJ0aWFsCj4gKyAqIHJlc3BvbnNlIGZvciB0aGlzIHRyYW5zYWN0aW9uIG9ubHku Cj4gICAqCj4gICAqIE5vdGUgdGhhdCB0aGUgYXV4IGhlbHBlciBjb2RlIGFzc3VtZXMgdGhhdCB0 aGUgLnRyYW5zZmVyKCkgZnVuY3Rpb24KPiAgICogb25seSBtb2RpZmllcyB0aGUgcmVwbHkgZmll bGQgb2YgdGhlIGRybV9kcF9hdXhfbXNnIHN0cnVjdHVyZS4gIFRoZQo+IC0tIAo+IDIuMS4wCgot LSAKVmlsbGUgU3lyasOkbMOkCkludGVsIE9UQwpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbAo=