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 16:36:55 +0200 Message-ID: <20150129143655.GW19354@intel.com> References: <1422373429-10137-1-git-send-email-simon.farnsworth@onelan.co.uk> <20150129133036.GV19354@intel.com> <5088334.4MFZWJ3IA6@f19simon> 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 EB79D6E069 for ; Thu, 29 Jan 2015 06:37:02 -0800 (PST) Content-Disposition: inline In-Reply-To: <5088334.4MFZWJ3IA6@f19simon> 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 T24gVGh1LCBKYW4gMjksIDIwMTUgYXQgMDI6MjQ6MDlQTSArMDAwMCwgU2ltb24gRmFybnN3b3J0 aCB3cm90ZToKPiBPbiBUaHVyc2RheSAyOSBKYW51YXJ5IDIwMTUgMTU6MzA6MzYgeW91IHdyb3Rl Ogo+ID4gT24gVHVlLCBKYW4gMjcsIDIwMTUgYXQgMDM6NDM6NDlQTSArMDAwMCwgU2ltb24gRmFy bnN3b3J0aCB3cm90ZToKPiAtLXNuaXAtLQo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2RybV9kcF9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVscGVyLmMKPiA+ ID4gaW5kZXggNzk5NjhlMy4uM2RiMTE2YyAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2RybV9kcF9oZWxwZXIuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hl bHBlci5jCj4gPiA+IEBAIC0zOTYsMTEgKzM5NiwxMyBAQCBzdGF0aWMgdTMyIGRybV9kcF9pMmNf ZnVuY3Rpb25hbGl0eShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCj4gPiA+ICAgKiByZXRy eWluZyB0aGUgdHJhbnNhY3Rpb24gYXMgYXBwcm9wcmlhdGUuICBJdCBpcyBhc3N1bWVkIHRoYXQg dGhlCj4gPiA+ICAgKiBhdXgtPnRyYW5zZmVyIGZ1bmN0aW9uIGRvZXMgbm90IG1vZGlmeSBhbnl0 aGluZyBpbiB0aGUgbXNnIG90aGVyIHRoYW4gdGhlCj4gPiA+ICAgKiByZXBseSBmaWVsZC4KPiA+ ID4gKyAqCj4gPiA+ICsgKiBSZXR1cm5zIGJ5dGVzIHRyYW5zZmVycmVkIG9uIHN1Y2Nlc3MsIG9y IGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ID4gPiAgICovCj4gPiA+ICBzdGF0 aWMgaW50IGRybV9kcF9pMmNfZG9fbXNnKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsIHN0cnVjdCBk cm1fZHBfYXV4X21zZyAqbXNnKQo+ID4gPiAgewo+ID4gPiAgCXVuc2lnbmVkIGludCByZXRyeTsK PiA+ID4gLQlpbnQgZXJyOwo+ID4gPiArCWludCByZXQ7Cj4gPiA+ICAKPiA+ID4gIAkvKgo+ID4g PiAgCSAqIERQMS4yIHNlY3Rpb25zIDIuNy43LjEuNS42LjEgYW5kIDIuNy43LjEuNi42LjE6IEEg RFAgU291cmNlIGRldmljZQo+ID4gPiBAQCAtNDA5LDE0ICs0MTEsMTQgQEAgc3RhdGljIGludCBk cm1fZHBfaTJjX2RvX21zZyhzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LCBzdHJ1Y3QgZHJtX2RwX2F1 eF9tc2cgKm1zZykKPiA+ID4gIAkgKi8KPiA+ID4gIAlmb3IgKHJldHJ5ID0gMDsgcmV0cnkgPCA3 OyByZXRyeSsrKSB7Cj4gPiA+ICAJCW11dGV4X2xvY2soJmF1eC0+aHdfbXV0ZXgpOwo+ID4gPiAt CQllcnIgPSBhdXgtPnRyYW5zZmVyKGF1eCwgbXNnKTsKPiA+ID4gKwkJcmV0ID0gYXV4LT50cmFu c2ZlcihhdXgsIG1zZyk7Cj4gPiA+ICAJCW11dGV4X3VubG9jaygmYXV4LT5od19tdXRleCk7Cj4g PiA+IC0JCWlmIChlcnIgPCAwKSB7Cj4gPiA+IC0JCQlpZiAoZXJyID09IC1FQlVTWSkKPiA+ID4g KwkJaWYgKHJldCA8IDApIHsKPiA+ID4gKwkJCWlmIChyZXQgPT0gLUVCVVNZKQo+ID4gPiAgCQkJ CWNvbnRpbnVlOwo+ID4gPiAgCj4gPiA+IC0JCQlEUk1fREVCVUdfS01TKCJ0cmFuc2FjdGlvbiBm YWlsZWQ6ICVkXG4iLCBlcnIpOwo+ID4gPiAtCQkJcmV0dXJuIGVycjsKPiA+ID4gKwkJCURSTV9E RUJVR19LTVMoInRyYW5zYWN0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7Cj4gPiA+ICsJCQlyZXR1 cm4gcmV0Owo+ID4gPiAgCQl9Cj4gPiA+ICAKPiA+ID4gIAo+ID4gPiBAQCAtNDU3LDkgKzQ1OSw3 IEBAIHN0YXRpYyBpbnQgZHJtX2RwX2kyY19kb19tc2coc3RydWN0IGRybV9kcF9hdXggKmF1eCwg c3RydWN0IGRybV9kcF9hdXhfbXNnICptc2cpCj4gPiA+ICAJCQkgKiBCb3RoIG5hdGl2ZSBBQ0sg YW5kIEkyQyBBQ0sgcmVwbGllcyByZWNlaXZlZC4gV2UKPiA+ID4gIAkJCSAqIGNhbiBhc3N1bWUg dGhlIHRyYW5zZmVyIHdhcyBzdWNjZXNzZnVsLgo+ID4gPiAgCQkJICovCj4gPiA+IC0JCQlpZiAo ZXJyIDwgbXNnLT5zaXplKQo+ID4gPiAtCQkJCXJldHVybiAtRVBST1RPOwo+ID4gPiAtCQkJcmV0 dXJuIDA7Cj4gPiA+ICsJCQlyZXR1cm4gcmV0Owo+ID4gCj4gPiBUaGUgcy9lcnIvcmV0LyBzZWVt cyBhIGJpdCBzdXBlcmZsdW91cywgYnV0IE9UT0ggaXQgZG9lcyBtYWtlIHNlbnNlCj4gPiBzaW5j ZSBpdCdzIG5vIGxvbmdlciBqdXN0IGFuIGVycm9yIHZhbHVlLiBBdCBmaXJzdCBnbGFuY2UgaXQg anVzdAo+ID4gY29uZnVzZWQgbWUgYSBiaXQgc2luY2UgSSB3YXNuJ3QgZXhwZWN0aW5nIHRoYXQg bWFueSBjaGFuZ2VzIHRvIHRoaXMKPiA+IGZ1bmN0aW9uLgo+ID4KPiAKPiBJJ20gZ29pbmcgdG8g aGFuZyBvbnRvIHRoYXQgY2hhbmdlIC0gaXQgbWFrZXMgdGhpbmdzIGNsZWFyZXIgd2hlbiB5b3Ug cmVhZAo+IHRoZSBmdW5jdGlvbiBvdXRzaWRlIHRoZSBjb250ZXh0IG9mIHRoaXMgcGF0Y2guCj4g Cj4gPiA+ICAKPiA+ID4gIAkJY2FzZSBEUF9BVVhfSTJDX1JFUExZX05BQ0s6Cj4gPiA+ICAJCQlE Uk1fREVCVUdfS01TKCJJMkMgbmFja1xuIik7Cj4gPiA+IEBAIC00ODIsMTQgKzQ4Miw2NyBAQCBz dGF0aWMgaW50IGRybV9kcF9pMmNfZG9fbXNnKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsIHN0cnVj dCBkcm1fZHBfYXV4X21zZyAqbXNnKQo+ID4gPiAgCXJldHVybiAtRVJFTU9URUlPOwo+ID4gPiAg fQo+ID4gPiAgCj4gPiA+ICsvKgo+ID4gPiArICogS2VlcCByZXRyeWluZyBkcm1fZHBfaTJjX2Rv X21zZyB1bnRpbCBhbGwgZGF0YSBoYXMgYmVlbiB0cmFuc2ZlcnJlZC4KPiA+ID4gKyAqCj4gPiA+ ICsgKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgb24gZmFpbHVyZSwgb3IgYSByZWNvbW1lbmRlZCB0 cmFuc2ZlciBzaXplIG9uIHN1Y2Nlc3MuCj4gPiA+ICsgKi8KPiA+ID4gK3N0YXRpYyBpbnQgZHJt X2RwX2kyY19kcmFpbl9tc2coc3RydWN0IGRybV9kcF9hdXggKmF1eCwgc3RydWN0IGRybV9kcF9h dXhfbXNnICptc2cpCj4gPiA+ICt7Cj4gPiA+ICsJaW50IHJldDsKPiA+ID4gKwlzdHJ1Y3QgZHJt X2RwX2F1eF9tc2cgZHJhaW5fbXNnOwo+ID4gPiArCWludCBkcmFpbl9ieXRlczsKPiA+ID4gKwo+ ID4gPiArCXJldCA9IGRybV9kcF9pMmNfZG9fbXNnKGF1eCwgbXNnKTsKPiA+ID4gKwo+ID4gPiAr CWlmIChyZXQgPT0gbXNnLT5zaXplIHx8IHJldCA8PSAwKQo+ID4gPiArCQlyZXR1cm4gcmV0ID09 IDAgPyAtRVBST1RPIDogcmV0Owo+ID4gPiArCj4gPiA+ICsJLyoKPiA+ID4gKwkgKiBXZSBoYWQg YSBwYXJ0aWFsIHJlcGx5LiBEcmFpbiBvdXQgdGhlIHJlc3Qgb2YgdGhlIGJ5dGVzIHdlCj4gPiA+ ICsJICogb3JpZ2luYWxseSByZXF1ZXN0ZWQsIHRoZW4gcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBw YXJ0aWFsCj4gPiA+ICsJICogcmVwbHkuIEluIHRoZW9yeSwgdGhpcyBzaG91bGQgbWF0Y2ggRFAg MS4yJ3MgZGVzaXJlZCBiZWhhdmlvdXIKPiA+ID4gKwkgKiBmb3IgSTJDIG92ZXIgQVVYLgo+ID4g PiArCSAqLwo+ID4gCj4gPiBUaGUgc3BlYyBpcyBhIGJpdCBzZWxmIGNvbnRyYWRpY3RvcnksIGJ1 dCB0aGVyZSBpcyBhIHNlY3Rpb24gd2hpY2ggc2VlbXMKPiA+IHRvIHN1Z2dlc3QgdGhpcy4gSXQn cyBvbmx5IG1lbnRpb25lZCBmb3IgcmVhZHMgbWluZCB5b3UsIGJ1dCBJIGRvbid0IHNlZQo+ID4g aXQgY2F1c2luZyBoYXJtIGZvciB3cml0ZXMgZWl0aGVyLiBOb3QgdGhhdCB3ZSBhY3R1YWxseSBo YW5kbGUKPiA+IHBhcnRpYWwvZGVmZXJyZWQgd3JpdGVzIGNvcnJlY3RseSBhdCB0aGUgbW9tZW50 Lgo+ID4gCj4gPiA+ICsJRFJNX0RFQlVHX0tNUygiUGFydGlhbCBJMkMgcmVwbHk6IHJlcXVlc3Rl ZCAlenUgYnl0ZXMgZ290ICVkIGJ5dGVzXG4iLCBtc2ctPnNpemUsIHJldCk7Cj4gPiA+ICsJZHJh aW5fbXNnID0gKm1zZzsKPiA+ID4gKwlkcmFpbl9tc2cuc2l6ZSAtPSByZXQ7Cj4gPiA+ICsJZHJh aW5fbXNnLmJ1ZmZlciArPSByZXQ7Cj4gPiA+ICsJd2hpbGUgKGRyYWluX21zZy5zaXplICE9IDAp IHsKPiA+ID4gKwkJZHJhaW5fYnl0ZXMgPSBkcm1fZHBfaTJjX2RvX21zZyhhdXgsICZkcmFpbl9t c2cpOwo+ID4gPiArCQlpZiAoZHJhaW5fYnl0ZXMgPD0gMCkKPiA+ID4gKwkJCXJldHVybiBkcmFp bl9ieXRlcyA9PSAwID8gLUVQUk9UTyA6IGRyYWluX2J5dGVzOwo+ID4gPiArCQlkcmFpbl9tc2cu c2l6ZSAtPSBkcmFpbl9ieXRlczsKPiA+ID4gKwkJZHJhaW5fbXNnLmJ1ZmZlciArPSBkcmFpbl9i eXRlczsKPiA+ID4gKwl9Cj4gPiAKPiA+IFNvbWVob3cgSSBkb24ndCBsaWtlIHRoZSBkdXBsaWNh dGVkIGNvZGUgZW5kIHVwIGhhdmluZyBoZXJlLiBTbwo+ID4gcHV0dGluZyBpdCBhbGwgaW4gYSBz aW5nbGUgbG9vcCB3b3VsZCBzZWVtIG5pY2VyIHRvIG1lLiBNYXliZQo+ID4gc29tZXRoaW5nIGFs b25nIHRoZXNlIGxpbmVzPwo+ID4gCj4gPiBzdHJ1Y3QgZHJtX2RwX2F1eF9tc2cgbXNnID0gKm9y aWdfbXNnOwo+ID4gaW50IHJldCA9IG1zZy5zaXplOwo+ID4gd2hpbGUgKG1zZy5zaXplID4gMCkg ewo+ID4gCWludCBlcnIgPSBkcm1fZHBfaTJjX2RvX21zZyhhdXgsICZtc2cpOwo+ID4gCWlmIChl cnIgPD0gMCkKPiA+IAkJcmV0dXJuIGVyciA9PSAwID8gLUVQUk9UTyA6IGVycjsKPiA+IAo+ID4g CWlmIChlcnIgPCBtc2cuc2l6ZSAmJiBlcnIgPCByZXQpIHsKPiA+IAkJRFJNX0RFQlVHX0tNUygi UGFydGlhbCBJMkMgcmVwbHk6IHJlcXVlc3RlZCAlenUKPiA+IAkJCSAgICAgICBieXRlcyBnb3Qg JWQgYnl0ZXNcbiIsIG1zZy5zaXplLCBlcnIpOwo+ID4gCQlyZXQgPSBlcnI7Cj4gPiAJfQo+ID4g Cj4gPiAJbXNnLnNpemUgLT0gZXJyOwo+ID4gCW1zZy5idWZmZXIgKz0gZXJyOwo+ID4gfQo+ID4g Cj4gPiBJdCB3b3VsZCBhbHNvIHJlZHVjZSB0aGUgcmV0dXJuZWQgcHJlZmVycmVkIHRyYW5zZmVy IHNpemUgZnVydGhlciBpZiB3ZQo+ID4gKGZvciB3aGF0ZXZlciByZWFzb24pIGdvdCBhbiBldmVu IHNob3J0ZXIgcmVwbHkgd2hpbGUgd2UncmUgZHJhaW5pbmcuCj4gPgo+IEknbSBub3Qgc3VyZSB0 aGF0IHRoYXQncyB0aGUgcmlnaHQgYmVoYXZpb3VyLCB0aG91Z2guIElmIHdlIGFzc3VtZSBhIDMg Ynl0ZQo+IEZJRk8gaW4gYSBkZXZpY2UgdGhhdCBkb2VzIHBhcnRpYWwgcmVhZHMsIHdlIGFzayBm b3IgMTYgYnl0ZXMsIGNhdXNpbmcgYQo+IHBhcnRpYWwgcmVzcG9uc2UgdGhhdCdzIDMgYnl0ZXMg bG9uZy4gV2UgdGhlbiBkcmFpbiBvdXQgdGhlIHJlbWFpbmluZyAxMwo+IGJ5dGVzIG9mIHRoZSBp bml0aWFsIHJlcXVlc3QgKGluIGNhc2UgaXQncyBzZXQgdXAgYSAxNiBieXRlIEkyQyB0cmFuc2Zl ciksCj4gYW5kIHRoZSBsYXN0IG9mIHRoZSByZWFkcyBpcyBndWFyYW50ZWVkIHRvIGJlIDEgYnl0 ZSBsb25nLgoKTXkgcHJvcG9zZWQgY29kZSB3b3VsZG4ndCByZWR1Y2UgdGhlIHRyYW5zZmVyIHNp emUgaW4gdGhhdCBjYXNlIGR1ZSB0bwp0aGUgZXJyPG1zZy5zaXplIGNoZWNrLiBTbyBpdCBvbmx5 IGNvbnNpZGVycyBzaHJpbmtpbmcgdGhlIHRyYW5zZmVyIHNpemUKd2hlbiB0aGUgcmVwbHkgY2Ft ZSBiYWNrIHdpdGggbGVzcyBkYXRhIHRoYW4gd2FzIHJlcXVlc3RlZC4KCj4gCj4gV2UgdGhlbiBz aHJpbmsgdG8gMSBieXRlIHRyYW5zZmVycywgd2hlbiB0aGUgZGV2aWNlIHdvdWxkIGJlIGNhcGFi bGUgb2YgMwo+IGJ5dGUgdHJhbnNmZXJzLCBhbmQgY291bGQgcG9zc2libHkgcGVyZm9ybSBiZXR0 ZXIgd2l0aCAzIGJ5dGUgdHJhbnNmZXJzCj4gcmF0aGVyIHRoYW4gMS4KPiAKPiBIYXZpbmcgc2Fp ZCB0aGF0LCB0aGlzIGlzIGFsbCBoeXBvdGhldGljYWwgdW50aWwgd2UgZmluZCBkZXZpY2VzIHRo YXQgZG8KPiBwYXJ0aWFsIHJlcGxpZXMgLSBuby1vbmUncyBiZWVuIGFibGUgdG8gZmluZCBzdWNo IGEgZGV2aWNlIHNvIGZhci4KPiAKPiBJJ2xsIGhhdmUgYSB0aGluayBhbmQgc2VlIGlmIEkgY2Fu IGNvbWUgdXAgd2l0aCBhIHdheSB0byBnZXQgdGhlIGJlaGF2aW91ciBJCj4gd2FudCB3aXRoIGxl c3MgY29kZSBkdXBsaWNhdGlvbiAtIEkgbWlnaHQgYmUgYWJsZSB0byBkbyBzb21ldGhpbmcgYnkg dXNpbmcgYQo+IHNlbnRpbmVsIHZhbHVlIHRvIHNwb3QgZmlyc3QgdGltZSByb3VuZCB0aGUgbG9v cC4KPiAKPiA+IAo+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gKy8q Cj4gPiA+ICsgKiBCaXpsaW5rIGRlc2lnbmVkIERQLT5EVkktRCBEdWFsIExpbmsgYWRhcHRlcnMg cmVxdWlyZSB0aGUgSTJDIG92ZXIgQVVYCj4gPiA+ICsgKiBwYWNrZXRzIHRvIGJlIGFzIGxhcmdl IGFzIHBvc3NpYmxlLiBJZiBub3QsIHRoZSBJMkMgdHJhbnNhY3Rpb25zIG5ldmVyCj4gPiA+ICsg KiBzdWNjZWVkLiBIZW5jZSB0aGUgZGVmYXVsdCBpcyBtYXhpbXVtLgo+ID4gPiArICovCj4gPiA+ ICtzdGF0aWMgaW50IGRwX2F1eF9pMmNfdHJhbnNmZXJfc2l6ZSBfX3JlYWRfbW9zdGx5ID0gRFBf QVVYX01BWF9QQVlMT0FEX0JZVEVTOwo+ID4gPiArbW9kdWxlX3BhcmFtX25hbWVkKGRwX2F1eF9p MmNfdHJhbnNmZXJfc2l6ZSwgZHBfYXV4X2kyY190cmFuc2Zlcl9zaXplLCBpbnQsIDA2MDApOwo+ ID4gPiArTU9EVUxFX1BBUk1fREVTQyhkcF9hdXhfaTJjX3RyYW5zZmVyX3NpemUsCj4gPiA+ICsJ CSAiTnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyIGluIGEgc2luZ2xlIEkyQyBvdmVyIERQIEFV WCBDSCBtZXNzYWdlLCAoMS0xNiwgZGVmYXVsdCAxNikiKTsKPiA+ID4gKwo+ID4gPiAgc3RhdGlj IGludCBkcm1fZHBfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qg aTJjX21zZyAqbXNncywKPiA+ID4gIAkJCSAgIGludCBudW0pCj4gPiA+ICB7Cj4gPiA+ICAJc3Ry dWN0IGRybV9kcF9hdXggKmF1eCA9IGFkYXB0ZXItPmFsZ29fZGF0YTsKPiA+ID4gIAl1bnNpZ25l ZCBpbnQgaSwgajsKPiA+ID4gKwlpbnQgdHJhbnNmZXJfc2l6ZTsKPiA+ID4gIAlzdHJ1Y3QgZHJt X2RwX2F1eF9tc2cgbXNnOwo+ID4gPiAgCWludCBlcnIgPSAwOwo+ID4gPiAgCj4gPiA+ICsJaWYg KGRwX2F1eF9pMmNfdHJhbnNmZXJfc2l6ZSA8IDEgfHwgZHBfYXV4X2kyY190cmFuc2Zlcl9zaXpl ID4gRFBfQVVYX01BWF9QQVlMT0FEX0JZVEVTKSB7Cj4gPiA+ICsJCURSTV9FUlJPUigiZHBfYXV4 X2kyY190cmFuc2Zlcl9zaXplIGludmFsaWQgLSBjaGFuZ2luZyBmcm9tICVkIHRvICVkXG4iLAo+ ID4gPiArCQkJICBkcF9hdXhfaTJjX3RyYW5zZmVyX3NpemUsIERQX0FVWF9NQVhfUEFZTE9BRF9C WVRFUyk7Cj4gPiA+ICsJCWRwX2F1eF9pMmNfdHJhbnNmZXJfc2l6ZSA9IERQX0FVWF9NQVhfUEFZ TE9BRF9CWVRFUzsKPiA+ID4gKwl9Cj4gPiAKPiA+IFRoZSBpbnZhbGlkIHZhbHVlcyBjb3VsZCBi ZSByZWplY3RlZCB3aXRoIGN1c3RvbSBzdHJ1Y3QKPiA+IGtlcm5lbF9wYXJhbV9vcHMsIGJ1dCBt YXliZSB0aGF0J3MgYSBiaXQgb3ZlcmtpbGwuIElmIG5vdCB0aGF0LCB0aGVuCj4gPiBJJ20gbm90 IHN1cmUgdGhlIGVycm9yIG1lc3NhZ2UgcmVhbGx5IGhhcyB0aGF0IG11Y2ggdmFsdWUuIFNvIEkn bSB0aGlua2luZwo+ID4gd2UgY291bGQganVzdCAnY2xhbXAoLi4uLCAxLCBEUF9BVVhfTUFYX1BB WUxPQURfQllURVMpJyBoZXJlLgo+ID4KPiBJJ2xsIHJlbW92ZSB0aGUgbWVzc2FnZSBmb3IgdjQs IGFzIHdlbGwgYXMgbWFya2luZyB0aGUgcGFyYW1ldGVyIHVuc2FmZSB3aXRoCj4gbW9kdWxlX3Bh cmFtX25hbWVkX3Vuc2FmZSwgYW5kIHVzZSBjbGFtcCBpbnN0ZWFkIG9mIGlmKCkuCj4gCj4gPiA+ ICsKPiA+ID4gIAltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOwo+ID4gPiAgCj4gPiA+ICAJ Zm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Cj4gPiA+IEBAIC01MDcsMjAgKzU2MCwyMCBAQCBz dGF0aWMgaW50IGRybV9kcF9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0 cnVjdCBpMmNfbXNnICptc2dzLAo+ID4gPiAgCQllcnIgPSBkcm1fZHBfaTJjX2RvX21zZyhhdXgs ICZtc2cpOwo+ID4gPiAgCQlpZiAoZXJyIDwgMCkKPiA+ID4gIAkJCWJyZWFrOwo+ID4gPiAtCQkv Kgo+ID4gPiAtCQkgKiBNYW55IGhhcmR3YXJlIGltcGxlbWVudGF0aW9ucyBzdXBwb3J0IEZJRk9z IGxhcmdlciB0aGFuIGEKPiA+ID4gLQkJICogc2luZ2xlIGJ5dGUsIGJ1dCBpdCBoYXMgYmVlbiBl bXBpcmljYWxseSBkZXRlcm1pbmVkIHRoYXQKPiA+ID4gLQkJICogdHJhbnNmZXJyaW5nIGRhdGEg aW4gbGFyZ2VyIGNodW5rcyBjYW4gYWN0dWFsbHkgbGVhZCB0bwo+ID4gPiAtCQkgKiBkZWNyZWFz ZWQgcGVyZm9ybWFuY2UuIFRoZXJlZm9yZSBlYWNoIG1lc3NhZ2UgaXMgc2ltcGx5Cj4gPiA+IC0J CSAqIHRyYW5zZmVycmVkIGJ5dGUtYnktYnl0ZS4KPiA+ID4gKwkJLyogV2Ugd2FudCBlYWNoIHRy YW5zYWN0aW9uIHRvIGJlIGFzIGxhcmdlIGFzIHBvc3NpYmxlLCBidXQKPiA+ID4gKwkJICogd2Un bGwgZ28gdG8gc21hbGxlciBzaXplcyBpZiB0aGUgaGFyZHdhcmUgZ2l2ZXMgdXMgYQo+ID4gPiAr CQkgKiBzaG9ydCByZXBseS4KPiA+ID4gIAkJICovCj4gPiA+IC0JCWZvciAoaiA9IDA7IGogPCBt c2dzW2ldLmxlbjsgaisrKSB7Cj4gPiA+ICsJCXRyYW5zZmVyX3NpemUgPSBkcF9hdXhfaTJjX3Ry YW5zZmVyX3NpemU7Cj4gPiA+ICsJCWZvciAoaiA9IDA7IGogPCBtc2dzW2ldLmxlbjsgaiArPSBt c2cuc2l6ZSkgewo+ID4gPiAgCQkJbXNnLmJ1ZmZlciA9IG1zZ3NbaV0uYnVmICsgajsKPiA+ID4g LQkJCW1zZy5zaXplID0gMTsKPiA+ID4gKwkJCW1zZy5zaXplID0gbWluKCh1bnNpZ25lZCl0cmFu c2Zlcl9zaXplLCBtc2dzW2ldLmxlbiAtIGopOwo+ID4gCj4gPiBDb3VsZCBtYWtlIHRyYW5zZmVy X3NpemUgdW5zaWduZWQgaW4gdGhlIGZpcnN0IHBsYWNlLgo+ID4gCj4gPiA+ICAKPiA+ID4gLQkJ CWVyciA9IGRybV9kcF9pMmNfZG9fbXNnKGF1eCwgJm1zZyk7Cj4gPiA+IC0JCQlpZiAoZXJyIDwg MCkKPiA+ID4gKwkJCXRyYW5zZmVyX3NpemUgPSBkcm1fZHBfaTJjX2RyYWluX21zZyhhdXgsICZt c2cpOwo+ID4gPiArCQkJaWYgKHRyYW5zZmVyX3NpemUgPCAwKSB7Cj4gPiA+ICsJCQkJZXJyID0g dHJhbnNmZXJfc2l6ZTsKPiA+ID4gIAkJCQlicmVhazsKPiA+ID4gKwkJCX0KPiA+IAo+ID4gTWF5 YmUgdGhpcyBpcyBhIGJpdCBtb3JlIHN0cmFpZ2h0IGZvcndhcmQ/Cj4gPiAKPiA+IGVyciA9IGRy bV9kcF9pMmNfZHJhaW5fbXNnKGF1eCwgJm1zZyk7Cj4gPiBpZiAoZXJyIDwgMCkKPiA+IAlicmVh azsKPiA+IHRyYW5zZmVyX3NpemUgPSBlcnI7Cj4gPgo+IFRoYXQgYW5kIG1ha2luZyB0cmFuc2Zl cl9zaXplIHVuc2lnbmVkIHNlZW1zIGxpa2UgYSBnb29kIGNvbWJpbmF0aW9uLiBXaWxsCj4gYWRv cHQgZm9yIHY0Lgo+IAo+IC0tIAo+IFNpbW9uIEZhcm5zd29ydGgKPiBTb2Z0d2FyZSBFbmdpbmVl cgo+IE9ORUxBTiBMdGQKPiBodHRwOi8vd3d3Lm9uZWxhbi5jb20KCgoKLS0gClZpbGxlIFN5cmrD pGzDpApJbnRlbCBPVEMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2 ZWwK