From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Kocialkowski Subject: Re: [PATCH i-g-t v3 1/4] chamelium: Calculate CRC from framebuffer instead of hardcoding it Date: Thu, 06 Jul 2017 16:14:15 +0300 Message-ID: <1499346855.1379.24.camel@linux.intel.com> References: <20170705080435.26789-1-paul.kocialkowski@linux.intel.com> <1499286840.20388.4.camel@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5C1BC6E5E4 for ; Thu, 6 Jul 2017 13:14:43 +0000 (UTC) In-Reply-To: <1499286840.20388.4.camel@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Lyude Paul , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAyMDE3LTA3LTA1IGF0IDE2OjM0IC0wNDAwLCBMeXVkZSBQYXVsIHdyb3RlOgo+IFNv IGEgY291cGxlIG9mIG5vdGVzIGhlcmUgdGhhdCB3aWxsIG1ha2UgaXQgYSBsb3QgZWFzaWVyIGZv ciBtZSB0bwo+IHJldmlldyB0aGVzZSBpbiB0aGUgZnV0dXJlCj4gCj4gICogV2hlbiB5b3UncmUg ZG9pbmcgYSBuZXcgcmV2aXNpb24gb2YgYSBwYXRjaCBzZXJpZXMsIGl0J3MgaGVscGZ1bCB0bwo+ ICAgIGtlZXAgaXQgaW4gdGhlIHNhbWUgZW1haWwgdGhyZWFkIGFzIHRoZSBvcmlnaW5hbCB2MSBz byBpdCdzIGVhc2llcgo+ICAgIHRvIGtlZXAgdHJhY2sgb2YgaW4gcGVvcGxlJ3MgbWFpbCBjbGll bnRzIChhcyB3ZWxsIGFzIGF2b2lkaW5nCj4gICAgYWNjaWRlbnRhbGx5IHJldmlld2luZyBvbGRl ciBwYXRjaCB2ZXJzaW9ucy4gSSB1c3VhbGx5IGRvIHNvbWV0aGluZwo+ICAgIGxpa2UgdGhpcyAo b3RoZXIgcHJvamVjdHMgbWlnaHQgcmVxdWVzdCB5b3UgZG8gdGhpcyBzbGlnaHRseQo+ICAgIGRp ZmZlcmVudGx5LCBidXQgdGhpcyBzaG91bGQgYmUgZmluZSBoZXJlKToKPiAgICAgKiBbUEFUQ0gg MC8yXSBDbGVhbmluZyB1cCB0aGUgYWxpZ25tZW50IG9mIHZhcmlvdXMgZm9vcwo+ICAgICAgICAq IFtQQVRDSCAxLzJdIEZvbyB0aGUgYmFyLCBub3QgdGhlIGJhego+ICAgICAgICAqIFtQQVRDSCAy LzJdIEludHJvZHVjZSB0aGUgYW1hemluZyBuZXcgZm9vX2Jhcgo+ICAgICAgICAqIFtQQVRDSCB2 MiAwLzJdIENsZWFuaW5nIHVwIHRoZSBhbGlnbm1lbnQgb2YgdmFyaW91cyBmb29zCj4gICAgICAg ICAgICogW1BBVENIIHYyIDEvMl0gRm9vIHRoZSBiYXIsIG5vdCB0aGUgYmF6Cj4gICAgICAgICAg ICogW1BBVENIIHYyIDIvMl0gSW50cm9kdWNlIHRoZSBhbWF6aW5nIG5ldyBmb29fYmFyCj4gICAg ICAgICogW1BBVENIIHYzIDAvMl0gQ2xlYW5pbmcgdXAgdGhlIGFsaWdubWVudCBvZiB2YXJpb3Vz IGZvb3MKPiAgICAgICAgICAgKiBbUEFUQ0ggdjMgMS8yXSBGb28gdGhlIGJhciwgbm90IHRoZSBi YXoKPiAgICAgICAgICAgKiBbUEFUQ0ggdjMgMi8yXSBJbnRyb2R1Y2UgdGhlIGFtYXppbmcgbmV3 IGZvb19iYXIKPiAgKiBUcnkgbm90IHRvIGdyb3VwIHVucmVsYXRlZCBwYXRjaGVzIHRvZ2V0aGVy IGluIHRoZSBzYW1lIHRocmVhZC4KPiBUaGlzCj4gICAgYWxzbyBtYWtlcyBzb3J0aW5nIHRocm91 Z2ggYWxsIG9mIHRoZW0gYSBsaXR0bGUgbW9yZSBkaWZmaWN1bHQuCj4gICogV2hlbiB5b3UgbWFr ZSBuZXcgcmV2aXNpb25zIG9mIHBhdGNoZXMsIGl0J3MgdmVyeSB1c2VmdWwgaWYgeW91Cj4gYWxz bwo+ICAgIGluY2x1ZGUgYSBsaXN0IG9mIGNoYW5nZXMgeW91IG1hZGUgdG8gdGhlIHBhdGNoIHNp bmNlIHRoZSBsYXN0Cj4gICAgcmV2aXNpb24uIEl0IGRvZXNuJ3QgbmVlZCB0byBiZSB2ZXJ5IGZp bmVseSBkZXRhaWxlZCwgc29tZXRoaW5nCj4gbGlrZQo+ICAgIHRoaXMgd291bGQgc3VmZmljZToK PiAgICAgKiBWYXJpb3VzIHN0eWxlIGZpeGVzCj4gICAgICogUmVuYW1lIGJheiB0byBtb28sIGFk ZCBjb3cgbm9pc2VzCj4gICAgICogU3BsaXQgaW5pdF9jb3coKSBpbnRvIGluaXRfd2hpdGVfY293 KCkgYW5kIGluaXRfYmxhY2tfY293KCkKPiAgICAgICBpbnN0ZWFkIG9mIGhhbmRsaW5nIGJvdGgg a2luZHMgb2YgY293cyBpbiB0aGUgc2FtZSBmdW5jdGlvbgo+ICAgICAqIEZpeCBkb2N1bWVudGF0 aW9uCj4gICAgIEZvciBpbnRlbC1ncHUtdG9vbHMsIGl0J3MgZmluZSB0byBqdXN0IHN0aWNrIHRo aXMgaW4gdGhlIGNvbW1pdAo+ICAgICBtZXNzYWdlLiBPdGhlciBwcm9qZWN0cyBtYXkgcmVxdWVz dCB5b3UgcHV0IHRoZSBjaGFuZ2Vsb2cgYmVsb3cKPiB0aGUKPiAgICAgLS0tLS0gcmlnaHQgYWJv dmUgdGhlIGRpZmYgc3RhdHMgKHRoaXMgYWxsb3dzIHRoZSBjb21tZW50cyBub3QgdG8KPiAgICAg Z2V0IGluY2x1ZGVkIGluIHRoZSBmaW5hbCBjb21taXQgbWVzc2FnZSkKPiAgKiBVbmxlc3MgdGhl eSBhcmUgYWxsIHZlcnkgc21hbGwgYW5kIGxlc3MgaW1wb3J0YW50IGZpeGVzLCBpbmNsdWRpbmcK PiAgICBjb3ZlciBsZXR0ZXJzIGhlbHBzIGFzIHdlbGwgc2luY2UgaXQgbGV0cyBwYXRjaHdvcmsg Z3JvdXAgdG9nZXRoZXIKPiAgICBwYXRjaCBzZXJpZXMgbGlrZSB0aGlzLgoKV2hhdCB3b3VsZCB5 b3UgcHJlZmVyIHRoYXQgSSBkbyByZWdhcmRpbmcgZm9sbG93LXVwIHZlcnNpb25zIHRvIHRoaXMK cGF0Y2hzZXQgKGFuZCB0aGUgb3RoZXIgb25lIHRoYXQgaXMgc3RpbGwgdW5kZXIgcmV2aWV3KT8K CkkgY291bGQgc3BsaXQgdGhlIHNlcmllcyBwZXItdG9waWMgKGNyYywgZnJhbWUgc2F2ZSwgdGlt ZSBpbXByb3ZlbWVudHMpCmFuZCBrZWVwIHRob3NlIGluIHRoZSBzYW1lIHBhcmVudCB0aHJlYWQg YXMgdGhlaXIgdjEuCgo+IEFueXdheSwgYmFjayB0byB0aGUgYWN0dWFsIHBhdGNoOgo+IEEgZ29v ZCBzdGFydCEgV2lsbCBuZWVkIGEgY291cGxlIG9mIGNoYW5nZXMgdGhvdWdoCj4gCj4gT24gV2Vk LCAyMDE3LTA3LTA1IGF0IDExOjA0ICswMzAwLCBQYXVsIEtvY2lhbGtvd3NraSB3cm90ZToKPiA+ IFRoaXMgaW50cm9kdWNlcyBDUkMgY2FsY3VsYXRpb24gZm9yIHJlZmVyZW5jZSBmcmFtZXMsIGlu c3RlYWQgb2YKPiA+IHVzaW5nCj4gPiBoYXJkY29kZWQgdmFsdWVzIGZvciB0aGVtLiBUaGUgcmVu ZGVyaW5nIG9mIHJlZmVyZW5jZSBmcmFtZXMgbWF5Cj4gPiBkaWZmZXIKPiA+IGZyb20gbWFjaGlu ZSB0byBtYWNoaW5lLCBlc3BlY2lhbGx5IGR1ZSB0byBmb250IHJlbmRlcmluZywgYW5kIHRoZQo+ ID4gZnJhbWUgaXRzZWxmIG1heSBjaGFuZ2Ugd2l0aCBzdWJzZXF1ZW50IElHVCBjaGFuZ2VzLgo+ ID4gCj4gPiBUaGVzZSBkaWZmZXJlbmNlcyB3b3VsZCBjYXVzZSB0aGUgQ1JDIGNoZWNrcyB0byBm YWlsIG9uIGRpZmZlcmVudAo+ID4gc2V0dXBzLiBUaGlzIGFsbG93cyB0aGVtIHRvIHBhc3MgcmVn YXJkbGVzcyBvZiB0aGUgc2V0dXAuCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IFBhdWwgS29jaWFs a293c2tpIDxwYXVsLmtvY2lhbGtvd3NraUBsaW51eC5pbnRlbC5jb20+Cj4gPiAtLS0KPiA+ICBs aWIvaWd0X2NoYW1lbGl1bS5jIHwgMTYwCj4gPiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCj4gPiAgbGliL2lndF9jaGFtZWxpdW0uaCB8ICAgNSAr Kwo+ID4gIHRlc3RzL2NoYW1lbGl1bS5jICAgfCAgNzYgKysrKysrLS0tLS0tLS0tLS0tLS0tLS0t LQo+ID4gIDMgZmlsZXMgY2hhbmdlZCwgMTgzIGluc2VydGlvbnMoKyksIDU4IGRlbGV0aW9ucygt KQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9jaGFtZWxpdW0uYyBiL2xpYi9pZ3RfY2hh bWVsaXVtLmMKPiA+IGluZGV4IGJmZjA4YzBlLi5iOWQ4MGI2YiAxMDA2NDQKPiA+IC0tLSBhL2xp Yi9pZ3RfY2hhbWVsaXVtLmMKPiA+ICsrKyBiL2xpYi9pZ3RfY2hhbWVsaXVtLmMKPiA+IEBAIC05 NCw2ICs5NCwxNCBAQCBzdHJ1Y3QgY2hhbWVsaXVtX2ZyYW1lX2R1bXAgewo+ID4gIAlzdHJ1Y3Qg Y2hhbWVsaXVtX3BvcnQgKnBvcnQ7Cj4gPiAgfTsKPiA+ICAKPiA+ICtzdHJ1Y3QgY2hhbWVsaXVt X2ZiX2NyYyB7Cj4gPiArCWludCBmZDsKPiA+ICsJc3RydWN0IGlndF9mYiAqZmI7Cj4gPiArCj4g PiArCXB0aHJlYWRfdCB0aHJlYWRfaWQ7Cj4gPiArCWlndF9jcmNfdCAqcmV0Owo+ID4gK307Cj4g PiArCj4gCj4gVGhlIG5hbWUgb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgYSBsaXR0bGUgbWlzbGVhZGlu ZywgYmVjYXVzZSBub3cgd2UgaGF2ZQo+IGFuIEFQSSB0aGF0IGV4cG9zZXMgYm90aCBhIHN0cnVj dCBjaGFtZWxpdW1fZmJfY3JjIHN0cnVjdCBpbiBhZGRpdGlvbgo+IHRvIHRoZSBpZ3RfY3JjX3Qg c3RydWN0LiBSZW5hbWUgdGhpcyB0byBzb21ldGhpbmcgbGlrZSBzdHJ1Y3QKPiBjaGFtZWxpdW1f ZmJfY3JjX3dvcmsKPiAKPiA+ICBzdHJ1Y3QgY2hhbWVsaXVtIHsKPiA+ICAJeG1scnBjX2VudiBl bnY7Cj4gPiAgCXhtbHJwY19jbGllbnQgKmNsaWVudDsKPiA+IEBAIC0xMDAzLDYgKzEwMTEsMTU4 IEBAIGludCBjaGFtZWxpdW1fZ2V0X2ZyYW1lX2xpbWl0KHN0cnVjdAo+ID4gY2hhbWVsaXVtICpj aGFtZWxpdW0sCj4gPiAgCXJldHVybiByZXQ7Cj4gPiAgfQo+ID4gIAo+ID4gK3N0YXRpYyB1aW50 MzJfdCBjaGFtZWxpdW1feHJnYl9oYXNoMTYodW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQKPiA+ IHdpZHRoLAo+ID4gKwkJCQkgICAgICBpbnQgaGVpZ2h0LCBpbnQgaywgaW50IG0pCj4gPiArewo+ IAo+IFdlJ3JlIG5vdCBtb2RpZnlpbmcgYnVmZmVyLCBzbyBtYWtlIGl0IGEgY29uc3QuIEFzIHdl bGwsIGZlZWwgZnJlZSB0bwo+IG1hcmsgdGhpcyBmdW5jdGlvbiBhcyBpbmxpbmUuCj4gCj4gPiAr CXVuc2lnbmVkIGNoYXIgciwgZywgYjsKPiA+ICsJdWludDY0X3Qgc3VtID0gMDsKPiA+ICsJdWlu dDY0X3QgY291bnQgPSAwOwo+ID4gKwl1aW50NjRfdCB2YWx1ZTsKPiA+ICsJdWludDMyX3QgaGFz aDsKPiA+ICsJaW50IGluZGV4Owo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ICsJZm9yIChpPTA7IGkg PCB3aWR0aCAqIGhlaWdodDsgaSsrKSB7Cj4gPiArCQlpZiAoKGkgJSBtKSAhPSBrKQo+ID4gKwkJ CWNvbnRpbnVlOwo+ID4gKwo+ID4gKwkJaW5kZXggPSBpICogNDsKPiA+ICsKPiA+ICsJCXIgPSBi dWZmZXJbaW5kZXggKyAyXTsKPiA+ICsJCWcgPSBidWZmZXJbaW5kZXggKyAxXTsKPiA+ICsJCWIg PSBidWZmZXJbaW5kZXggKyAwXTsKPiA+ICsKPiA+ICsJCXZhbHVlID0gciB8IChnIDw8IDgpIHwg KGIgPDwgMTYpOwo+ID4gKwkJc3VtICs9ICsrY291bnQgKiB2YWx1ZTsKPiA+ICsJfQo+ID4gKwo+ ID4gKwloYXNoID0gKChzdW0gPj4gMCkgXiAoc3VtID4+IDE2KSBeIChzdW0gPj4gMzIpIF4gKHN1 bSA+Pgo+ID4gNDgpKSAmIDB4ZmZmZjsKPiA+ICsKPiA+ICsJcmV0dXJuIGhhc2g7Cj4gPiArfQo+ ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGNoYW1lbGl1bV9jYWxjdWxhdGVfZmJfY3JjOgo+ID4gKyAq IEBmZDogVGhlIGRybSBmaWxlIGRlc2NyaXB0b3IKPiA+ICsgKiBAZmI6IFRoZSBmcmFtZWJ1ZmZl ciB0byBjYWxjdWxhdGUgdGhlIENSQyBmb3IKPiA+ICsgKgo+ID4gKyAqIENhbGN1bGF0ZXMgYSBD UkMgZm9yIHRoZSBwcm92aWRlZCBmcmFtZWJ1ZmZlciwgdGhlIHNhbWUgd2F5IGFzCj4gPiB0aGUg Q2hhbWVsaXVtLgo+IAo+IENhbGN1bGF0ZSB0aGUgQ1JDIGZvciB0aGUgcHJvdmlkZWQgZnJhbWVi dWZmZXIsIHVzaW5nIHRoZSBDaGFtZWxpdW0ncwo+IENSQyBhbGdvcml0aG0KPiA+ICsgKiBUaGlz IGNhbGN1bGF0ZXMgdGhlIENSQyBpbiBhIG5vbi10aHJlYWRlZCBmYXNoaW9uLgo+ID4gKyAqCj4g PiArICogUmV0dXJuczogVGhlIGNhbGN1bGF0ZWQgQ1JDCj4gPiArICovCj4gPiAraWd0X2NyY190 ICpjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2NyYyhpbnQgZmQsIHN0cnVjdCBpZ3RfZmIgKmZiKQo+ ID4gK3sKPiA+ICsJaWd0X2NyY190ICpyZXQ7Cj4gPiArCWNhaXJvX3QgKmNyOwo+ID4gKwljYWly b19zdXJmYWNlX3QgKmZiX3N1cmZhY2U7Cj4gPiArCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKPiA+ ICsJaW50IG4gPSA0Owo+ID4gKwlpbnQgdywgaDsKPiA+ICsJaW50IGksIGo7Cj4gPiArCj4gPiAr CXJldCA9IGNhbGxvYygxLCBzaXplb2YoaWd0X2NyY190KSk7Cj4gPiArCj4gPiArCS8qIEdldCB0 aGUgY2Fpcm8gc3VyZmFjZSBmb3IgdGhlIGZyYW1lYnVmZmVyICovCj4gPiArCWNyID0gaWd0X2dl dF9jYWlyb19jdHgoZmQsIGZiKTsKPiA+ICsJZmJfc3VyZmFjZSA9IGNhaXJvX2dldF90YXJnZXQo Y3IpOwo+ID4gKwljYWlyb19zdXJmYWNlX3JlZmVyZW5jZShmYl9zdXJmYWNlKTsKPiA+ICsJY2Fp cm9fZGVzdHJveShjcik7Cj4gPiArCj4gPiArCWJ1ZmZlciA9IGNhaXJvX2ltYWdlX3N1cmZhY2Vf Z2V0X2RhdGEoZmJfc3VyZmFjZSk7Cj4gPiArCXcgPSBmYi0+d2lkdGg7Cj4gPiArCWggPSBmYi0+ aGVpZ2h0Owo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Cj4gPiArCQlqID0g biAtIGkgLSAxOwo+ID4gKwkJcmV0LT5jcmNbaV0gPSBjaGFtZWxpdW1feHJnYl9oYXNoMTYoYnVm ZmVyLCB3LCBoLAo+ID4gaiwKPiA+IG4pOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldC0+bl93b3Jk cyA9IG47Cj4gPiArCWNhaXJvX3N1cmZhY2VfZGVzdHJveShmYl9zdXJmYWNlKTsKPiA+ICsKPiA+ ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgKmNoYW1lbGl1bV9j YWxjdWxhdGVfZmJfY3JjX3RocmVhZCh2b2lkICpkYXRhKQo+ID4gK3sKPiA+ICsJc3RydWN0IGNo YW1lbGl1bV9mYl9jcmMgKmZiX2NyYyA9IChzdHJ1Y3QgY2hhbWVsaXVtX2ZiX2NyYwo+ID4gKikg ZGF0YTsKPiA+ICsJY2Fpcm9fdCAqY3I7Cj4gPiArCWNhaXJvX3N1cmZhY2VfdCAqZmJfc3VyZmFj ZTsKPiA+ICsJdW5zaWduZWQgY2hhciAqYnVmZmVyOwo+ID4gKwlpbnQgbiA9IDQ7Cj4gPiArCWlu dCB3LCBoOwo+ID4gKwlpbnQgaSwgajsKPiA+ICsKPiA+ICsJLyogR2V0IHRoZSBjYWlybyBzdXJm YWNlIGZvciB0aGUgZnJhbWVidWZmZXIgKi8KPiA+ICsJY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChm Yl9jcmMtPmZkLCBmYl9jcmMtPmZiKTsKPiA+ICsJZmJfc3VyZmFjZSA9IGNhaXJvX2dldF90YXJn ZXQoY3IpOwo+ID4gKwljYWlyb19zdXJmYWNlX3JlZmVyZW5jZShmYl9zdXJmYWNlKTsKPiA+ICsJ Y2Fpcm9fZGVzdHJveShjcik7Cj4gPiArCj4gPiArCWJ1ZmZlciA9IGNhaXJvX2ltYWdlX3N1cmZh Y2VfZ2V0X2RhdGEoZmJfc3VyZmFjZSk7Cj4gPiArCXcgPSBmYl9jcmMtPmZiLT53aWR0aDsKPiA+ ICsJaCA9IGZiX2NyYy0+ZmItPmhlaWdodDsKPiA+ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8IG47 IGkrKykgewo+ID4gKwkJaiA9IG4gLSBpIC0gMTsKPiA+ICsJCWZiX2NyYy0+cmV0LT5jcmNbaV0g PSBjaGFtZWxpdW1feHJnYl9oYXNoMTYoYnVmZmVyLAo+ID4gdywgaCwgaiwgbik7Cj4gPiArCX0K PiA+ICsKPiA+ICsJZmJfY3JjLT5yZXQtPm5fd29yZHMgPSBuOwo+ID4gKwljYWlyb19zdXJmYWNl X2Rlc3Ryb3koZmJfc3VyZmFjZSk7Cj4gPiArCj4gPiArCXJldHVybiBOVUxMOwo+ID4gK30KPiA+ ICsKPiA+ICsvKioKPiA+ICsgKiBjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2NyY19sYXVuY2g6Cj4g PiArICogQGZkOiBUaGUgZHJtIGZpbGUgZGVzY3JpcHRvcgo+ID4gKyAqIEBmYjogVGhlIGZyYW1l YnVmZmVyIHRvIGNhbGN1bGF0ZSB0aGUgQ1JDIGZvcgo+ID4gKyAqCj4gPiArICogTGF1bmNoZXMg dGhlIENSQyBjYWxjdWxhdGlvbiBmb3IgdGhlIHByb3ZpZGVkIGZyYW1lYnVmZmVyLCB0aGUKPiA+ IHNhbWUgd2F5IGFzCj4gPiArICogdGhlIENoYW1lbGl1bS4gVGhpcyBjYWxjdWxhdGVzIHRoZSBD UkMgaW4gYSB0aHJlYWRlZCBmYXNoaW9uLgo+ID4gKyAqIFRocmVhZC1yZWxhdGVkIGluZm9ybWF0 aW9uIGlzIHJldHVybmVkIGFuZCBzaG91bGQgYmUgcGFzc2VkIHRvIGEKPiA+IHN1YnNlcXVlbnQK PiA+ICsgKiBjYWxsIHRvIGNoYW1lbGl1bV9jYWxjdWxhdGVfZmJfY3JjX3Jlc3VsdC4gSXQgc2hv dWxkIG5vdCBiZQo+ID4gZnJlZWQuCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zOiBBbiBpbnRlcm1l ZGlhdGUgc3RydWN0dXJlIHdpdGggdGhyZWFkLXJlbGF0ZWQKPiA+IGluZm9ybWF0aW9uCj4gCj4g VGhlIHVzZXIgZG9lc24ndCBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIG1hZ2ljIGluc2lkZSB0aGUg c3RydWN0dXJlLAo+IHNpbmNlIHdlJ3JlIG5vdCBnb2luZyB0byBleHBvc2UgaXQncyBkZWZpbml0 aW9uIG91dHNpZGUgb2YgdGhpcyBmaWxlCj4gYW55d2F5Lgo+ID4gKyAqLwo+ID4gK3N0cnVjdCBj aGFtZWxpdW1fZmJfY3JjICpjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2NyY19sYXVuY2goaW50IGZk LAo+ID4gKwkJCQkJCQkgICBzdHJ1Y3QKPiA+IGlndF9mYiAqZmIpCj4gPiArewo+ID4gKwlzdHJ1 Y3QgY2hhbWVsaXVtX2ZiX2NyYyAqZmJfY3JjOwo+ID4gKwo+ID4gKwlmYl9jcmMgPSBjYWxsb2Mo MSwgc2l6ZW9mKHN0cnVjdCBjaGFtZWxpdW1fZmJfY3JjKSk7Cj4gPiArCWZiX2NyYy0+cmV0ID0g Y2FsbG9jKDEsIHNpemVvZihpZ3RfY3JjX3QpKTsKPiA+ICsJZmJfY3JjLT5mZCA9IGZkOwo+ID4g KwlmYl9jcmMtPmZiID0gZmI7Cj4gPiArCj4gPiArCXB0aHJlYWRfY3JlYXRlKCZmYl9jcmMtPnRo cmVhZF9pZCwgTlVMTCwKPiA+ICsJCSAgICAgICBjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2NyY190 aHJlYWQsIGZiX2NyYyk7Cj4gPiArCj4gPiArCXJldHVybiBmYl9jcmM7Cj4gPiArfQo+ID4gKwo+ ID4gKy8qKgo+ID4gKyAqIGNoYW1lbGl1bV9jYWxjdWxhdGVfZmJfY3JjX3Jlc3VsdDoKPiA+ICsg KiBAZmJfY3JjOiBBbiBpbnRlcm1lZGlhdGUgc3RydWN0dXJlIHdpdGggdGhyZWFkLXJlbGF0ZWQK PiA+IGluZm9ybWF0aW9uCj4gPiArICoKPiA+ICsgKiBQcm92aWRlcyB0aGUgcmVzdWx0IGZvciB0 aGUgcHJldmlvdXNseS1sYXVuY2hlZCBDUkMgY2FsY3VsYXRpb24uCj4gCj4gQmxvY2tzIHVudGls IHRoZSBhc3luYyBDUkMgY2FsY3VsYXRpb24gaXMgZmluaXNoZWQsIGFuZCB0aGVuIHJldHVybnMK PiB0aGUgcmVzdWx0Lgo+ID4gKyAqCj4gPiArICogUmV0dXJuczogVGhlIGNhbGN1bGF0ZWQgQ1JD Cj4gPiArICovCj4gPiAraWd0X2NyY190ICpjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2NyY19yZXN1 bHQoc3RydWN0Cj4gPiBjaGFtZWxpdW1fZmJfY3JjCj4gPiAqZmJfY3JjKQo+ID4gK3sKPiA+ICsJ aWd0X2NyY190ICpyZXQ7Cj4gPiArCj4gPiArCXB0aHJlYWRfam9pbihmYl9jcmMtPnRocmVhZF9p ZCwgTlVMTCk7Cj4gPiArCj4gPiArCXJldCA9IGZiX2NyYy0+cmV0Owo+ID4gKwlmcmVlKGZiX2Ny Yyk7Cj4gPiArCj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gIHN0YXRpYyB1bnNp Z25lZCBpbnQgY2hhbWVsaXVtX2dldF9wb3J0X3R5cGUoc3RydWN0IGNoYW1lbGl1bQo+ID4gKmNo YW1lbGl1bSwKPiA+ICAJCQkJCSAgICBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQKPiA+ICpwb3J0KQo+ ID4gIHsKPiA+IGRpZmYgLS1naXQgYS9saWIvaWd0X2NoYW1lbGl1bS5oIGIvbGliL2lndF9jaGFt ZWxpdW0uaAo+ID4gaW5kZXggODEzMjJhZDIuLmU1MWNmNGY5IDEwMDY0NAo+ID4gLS0tIGEvbGli L2lndF9jaGFtZWxpdW0uaAo+ID4gKysrIGIvbGliL2lndF9jaGFtZWxpdW0uaAo+ID4gQEAgLTM2 LDYgKzM2LDcgQEAKPiA+ICBzdHJ1Y3QgY2hhbWVsaXVtOwo+ID4gIHN0cnVjdCBjaGFtZWxpdW1f cG9ydDsKPiA+ICBzdHJ1Y3QgY2hhbWVsaXVtX2ZyYW1lX2R1bXA7Cj4gPiArc3RydWN0IGNoYW1l bGl1bV9mYl9jcmM7Cj4gPiAgCj4gPiAgc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtX2luaXQo aW50IGRybV9mZCk7Cj4gPiAgdm9pZCBjaGFtZWxpdW1fZGVpbml0KHN0cnVjdCBjaGFtZWxpdW0g KmNoYW1lbGl1bSk7Cj4gPiBAQCAtOTIsNiArOTMsMTAgQEAgc3RydWN0IGNoYW1lbGl1bV9mcmFt ZV9kdW1wCj4gPiAqY2hhbWVsaXVtX3BvcnRfZHVtcF9waXhlbHMoc3RydWN0IGNoYW1lbGl1bSAq Y2hhbWVsCj4gPiAgCQkJCQkJCXN0cnVjdAo+ID4gY2hhbWVsaXVtX3BvcnQgKnBvcnQsCj4gPiAg CQkJCQkJCWludCB4LCBpbnQKPiA+IHksCj4gPiAgCQkJCQkJCWludCB3LCBpbnQKPiA+IGgpOwo+ ID4gK2lndF9jcmNfdCAqY2hhbWVsaXVtX2NhbGN1bGF0ZV9mYl9jcmMoaW50IGZkLCBzdHJ1Y3Qg aWd0X2ZiICpmYik7Cj4gPiArc3RydWN0IGNoYW1lbGl1bV9mYl9jcmMgKmNoYW1lbGl1bV9jYWxj dWxhdGVfZmJfY3JjX2xhdW5jaChpbnQgZmQsCj4gPiArCQkJCQkJCSAgIHN0cnVjdAo+ID4gaWd0 X2ZiICpmYik7Cj4gPiAraWd0X2NyY190ICpjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2NyY19yZXN1 bHQoc3RydWN0Cj4gPiBjaGFtZWxpdW1fZmJfY3JjCj4gPiAqZmJfY3JjKTsKPiA+ICBpbnQgY2hh bWVsaXVtX2dldF9jYXB0dXJlZF9mcmFtZV9jb3VudChzdHJ1Y3QgY2hhbWVsaXVtCj4gPiAqY2hh bWVsaXVtKTsKPiA+ICBpbnQgY2hhbWVsaXVtX2dldF9mcmFtZV9saW1pdChzdHJ1Y3QgY2hhbWVs aXVtICpjaGFtZWxpdW0sCj4gPiAgCQkJICAgICAgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0 LAo+ID4gZGlmZiAtLWdpdCBhL3Rlc3RzL2NoYW1lbGl1bS5jIGIvdGVzdHMvY2hhbWVsaXVtLmMK PiA+IGluZGV4IGUzMDY3NjY0Li4zZmQyYjAyYyAxMDA2NDQKPiA+IC0tLSBhL3Rlc3RzL2NoYW1l bGl1bS5jCj4gPiArKysgYi90ZXN0cy9jaGFtZWxpdW0uYwo+ID4gQEAgLTQ5LDQzICs0OSw2IEBA IHR5cGVkZWYgc3RydWN0IHsKPiA+ICAjZGVmaW5lIEhQRF9UT0dHTEVfQ09VTlRfVkdBIDUKPiA+ ICAjZGVmaW5lIEhQRF9UT0dHTEVfQ09VTlRfRFBfSERNSSAxNQo+ID4gIAo+ID4gLS8qIFByZS1j YWxjdWxhdGVkIENSQ3MgZm9yIHRoZSBwYXR0ZXJuIGZiLCBmb3IgYWxsIHRoZSBtb2RlcyBpbiB0 aGUKPiA+IGRlZmF1bHQKPiA+IC0gKiBjaGFtZWxpdW0gZWRpZAo+ID4gLSAqLwo+ID4gLXN0cnVj dCBjcmNfZW50cnkgewo+ID4gLQlpbnQgd2lkdGg7Cj4gPiAtCWludCBoZWlnaHQ7Cj4gPiAtCWln dF9jcmNfdCBjcmM7Cj4gPiAtfTsKPiA+IC0KPiA+IC0jZGVmaW5lIENSQ19FTlRSWSh3XywgaF8s IC4uLikgXAo+ID4gLQl7IHdfLCBoXywgeyAubl93b3JkcyA9IDQsIC5jcmMgPSB7IF9fVkFfQVJH U19fIH0gfSB9Cj4gPiAtCj4gPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBjcmNfZW50cnkgcGF0dGVy bl9mYl9jcmNzW10gPSB7Cj4gPiAtCUNSQ19FTlRSWSgxOTIwLCAxMDgwLCAweGY4NTksIDB4YTc1 MSwgMHg4YzgxLCAweDQ1YTEpLAo+ID4gLQlDUkNfRU5UUlkoMTI4MCwgIDcyMCwgMHhjZWMyLCAw eDQyNDYsIDB4NmNmZCwgMHhlYjQzKSwKPiA+IC0JQ1JDX0VOVFJZKDEwMjQsICA3NjgsIDB4ODVl NSwgMHhmMGNkLCAweGFmZTMsIDB4N2YxOCksCj4gPiAtCUNSQ19FTlRSWSggODAwLCAgNjAwLCAw eDZiMzksIDB4MzJiNiwgMHg4MzFhLCAweGIwM2UpLAo+ID4gLQlDUkNfRU5UUlkoIDY0MCwgIDQ4 MCwgMHhhMTIxLCAweDI0NzMsIDB4YjE1MCwgMHg4YzQ3KSwKPiA+IC19Owo+ID4gLSN1bmRlZiBD UkNfRU5UUlkKPiA+IC0KPiA+IC1zdGF0aWMgY29uc3QgaWd0X2NyY190ICoKPiA+IC1nZXRfcHJl Y2FsY3VsYXRlZF9jcmMoc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0LCBpbnQgdywgaW50IGgp Cj4gPiAtewo+ID4gLQlpbnQgaTsKPiA+IC0JY29uc3Qgc3RydWN0IGNyY19lbnRyeSAqZW50cnk7 Cj4gPiAtCj4gPiAtCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBhdHRlcm5fZmJfY3Jjcyk7 IGkrKykgewo+ID4gLQkJZW50cnkgPSAmcGF0dGVybl9mYl9jcmNzW2ldOwo+ID4gLQo+ID4gLQkJ aWYgKGVudHJ5LT53aWR0aCA9PSB3ICYmIGVudHJ5LT5oZWlnaHQgPT0gaCkKPiA+IC0JCQlyZXR1 cm4gJmVudHJ5LT5jcmM7Cj4gPiAtCX0KPiA+IC0KPiA+IC0JcmV0dXJuIE5VTEw7Cj4gPiAtfQo+ ID4gLQo+ID4gIHN0YXRpYyB2b2lkCj4gPiAgcmVxdWlyZV9jb25uZWN0b3JfcHJlc2VudChkYXRh X3QgKmRhdGEsIHVuc2lnbmVkIGludCB0eXBlKQo+ID4gIHsKPiA+IEBAIC00MjQsNyArMzg3LDgg QEAgdGVzdF9kaXNwbGF5X2NyY19zaW5nbGUoZGF0YV90ICpkYXRhLCBzdHJ1Y3QKPiA+IGNoYW1l bGl1bV9wb3J0ICpwb3J0KQo+ID4gIAlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKPiA+ICAJaWd0X3Bs YW5lX3QgKnByaW1hcnk7Cj4gPiAgCWlndF9jcmNfdCAqY3JjOwo+ID4gLQljb25zdCBpZ3RfY3Jj X3QgKmV4cGVjdGVkX2NyYzsKPiA+ICsJaWd0X2NyY190ICpleHBlY3RlZF9jcmM7Cj4gPiArCXN0 cnVjdCBjaGFtZWxpdW1fZmJfY3JjICpmYl9jcmM7Cj4gPiAgCXN0cnVjdCBpZ3RfZmIgZmI7Cj4g PiAgCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsKPiA+ICAJZHJtTW9kZUNvbm5lY3RvciAqY29ubmVj dG9yOwo+ID4gQEAgLTQ0NywyNCArNDExLDIxIEBAIHRlc3RfZGlzcGxheV9jcmNfc2luZ2xlKGRh dGFfdCAqZGF0YSwgc3RydWN0Cj4gPiBjaGFtZWxpdW1fcG9ydCAqcG9ydCkKPiA+ICAJCQkJCQkg ICAgMCwgMCwgMCwgJmZiKTsKPiA+ICAJCWlndF9hc3NlcnQoZmJfaWQgPiAwKTsKPiA+ICAKPiA+ IC0JCWVuYWJsZV9vdXRwdXQoZGF0YSwgcG9ydCwgb3V0cHV0LCBtb2RlLCAmZmIpOwo+ID4gKwkJ ZmJfY3JjID0gY2hhbWVsaXVtX2NhbGN1bGF0ZV9mYl9jcmNfbGF1bmNoKGRhdGEtCj4gPiA+IGRy bV9mZCwgJmZiKTsKPiA+IAo+ID4gIAo+ID4gLQkJZXhwZWN0ZWRfY3JjID0gZ2V0X3ByZWNhbGN1 bGF0ZWRfY3JjKHBvcnQsCj4gPiAtCQkJCQkJICAgICBtb2RlLQo+ID4gPmhkaXNwbGF5LAo+ID4g LQkJCQkJCSAgICAgbW9kZS0KPiA+ID4gdmRpc3BsYXkpOwo+ID4gCj4gPiAtCQlpZiAoIWV4cGVj dGVkX2NyYykgewo+ID4gLQkJCWlndF93YXJuKCJObyBwcmVjYWxjdWxhdGVkIENSQyBmb3VuZCBm b3IKPiA+ICVkeCVkLCBza2lwcGluZyBDUkMgY2hlY2tcbiIsCj4gPiAtCQkJCSBtb2RlLT5oZGlz cGxheSwgbW9kZS0+dmRpc3BsYXkpOwo+ID4gLQkJCWdvdG8gbmV4dDsKPiA+IC0JCX0KPiA+ICsJ CWVuYWJsZV9vdXRwdXQoZGF0YSwgcG9ydCwgb3V0cHV0LCBtb2RlLCAmZmIpOwo+ID4gIAo+ID4g IAkJaWd0X2RlYnVnKCJUZXN0aW5nIHNpbmdsZSBDUkMgZmV0Y2hcbiIpOwo+ID4gKwo+ID4gIAkJ Y3JjID0gY2hhbWVsaXVtX2dldF9jcmNfZm9yX2FyZWEoZGF0YS0+Y2hhbWVsaXVtLAo+ID4gcG9y dCwKPiA+ICAJCQkJCQkgMCwgMCwgMCwgMCk7Cj4gPiArCj4gPiArCQlleHBlY3RlZF9jcmMgPQo+ ID4gY2hhbWVsaXVtX2NhbGN1bGF0ZV9mYl9jcmNfcmVzdWx0KGZiX2NyYyk7Cj4gPiArCj4gPiAg CQlpZ3RfYXNzZXJ0X2NyY19lcXVhbChjcmMsIGV4cGVjdGVkX2NyYyk7Cj4gPiArCQlmcmVlKGV4 cGVjdGVkX2NyYyk7Cj4gPiAgCQlmcmVlKGNyYyk7Cj4gPiAgCj4gPiAtbmV4dDoKPiA+ICAJCWRp c2FibGVfb3V0cHV0KGRhdGEsIHBvcnQsIG91dHB1dCk7Cj4gPiAgCQlpZ3RfcmVtb3ZlX2ZiKGRh dGEtPmRybV9mZCwgJmZiKTsKPiA+ICAJfQo+ID4gQEAgLTQ4MCw3ICs0NDEsOCBAQCB0ZXN0X2Rp c3BsYXlfY3JjX211bHRpcGxlKGRhdGFfdCAqZGF0YSwgc3RydWN0Cj4gPiBjaGFtZWxpdW1fcG9y dCAqcG9ydCkKPiA+ICAJaWd0X291dHB1dF90ICpvdXRwdXQ7Cj4gPiAgCWlndF9wbGFuZV90ICpw cmltYXJ5Owo+ID4gIAlpZ3RfY3JjX3QgKmNyYzsKPiA+IC0JY29uc3QgaWd0X2NyY190ICpleHBl Y3RlZF9jcmM7Cj4gPiArCWlndF9jcmNfdCAqZXhwZWN0ZWRfY3JjOwo+ID4gKwlzdHJ1Y3QgY2hh bWVsaXVtX2ZiX2NyYyAqZmJfY3JjOwo+ID4gIAlzdHJ1Y3QgaWd0X2ZiIGZiOwo+ID4gIAlkcm1N b2RlTW9kZUluZm8gKm1vZGU7Cj4gPiAgCWRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvcjsKPiA+ IEBAIC01MDMsMTUgKzQ2NSw5IEBAIHRlc3RfZGlzcGxheV9jcmNfbXVsdGlwbGUoZGF0YV90ICpk YXRhLCBzdHJ1Y3QKPiA+IGNoYW1lbGl1bV9wb3J0ICpwb3J0KQo+ID4gIAkJCQkJCSAgICAwLCAw LCAwLCAmZmIpOwo+ID4gIAkJaWd0X2Fzc2VydChmYl9pZCA+IDApOwo+ID4gIAo+ID4gLQkJZW5h YmxlX291dHB1dChkYXRhLCBwb3J0LCBvdXRwdXQsIG1vZGUsICZmYik7Cj4gPiArCQlmYl9jcmMg PSBjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2NyY19sYXVuY2goZGF0YS0KPiA+ID4gZHJtX2ZkLCAm ZmIpOwo+ID4gCj4gPiAgCj4gPiAtCQlleHBlY3RlZF9jcmMgPSBnZXRfcHJlY2FsY3VsYXRlZF9j cmMocG9ydCwgbW9kZS0KPiA+ID4gaGRpc3BsYXksCj4gPiAKPiA+IC0JCQkJCQkgICAgIG1vZGUt Cj4gPiA+IHZkaXNwbGF5KTsKPiA+IAo+ID4gLQkJaWYgKCFleHBlY3RlZF9jcmMpIHsKPiA+IC0J CQlpZ3Rfd2FybigiTm8gcHJlY2FsY3VsYXRlZCBDUkMgZm91bmQgZm9yCj4gPiAlZHglZCwgc2tp cHBpbmcgQ1JDIGNoZWNrXG4iLAo+ID4gLQkJCQkgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNw bGF5KTsKPiA+IC0JCQlnb3RvIG5leHQ7Cj4gPiAtCQl9Cj4gPiArCQllbmFibGVfb3V0cHV0KGRh dGEsIHBvcnQsIG91dHB1dCwgbW9kZSwgJmZiKTsKPiA+ICAKPiA+ICAJCS8qIFdlIHdhbnQgdG8g a2VlcCB0aGUgZGlzcGxheSBydW5uaW5nIGZvciBhIGxpdHRsZQo+ID4gYml0LCBzaW5jZQo+ID4g IAkJICogdGhlcmUncyBhbHdheXMgdGhlIHBvdGVudGlhbCB0aGUgZHJpdmVyIGlzbid0Cj4gPiBh YmxlIHRvIGtlZXAKPiA+IEBAIC01MjIsMTEgKzQ3OCwxNSBAQCB0ZXN0X2Rpc3BsYXlfY3JjX211 bHRpcGxlKGRhdGFfdCAqZGF0YSwgc3RydWN0Cj4gPiBjaGFtZWxpdW1fcG9ydCAqcG9ydCkKPiA+ ICAJCQkJCQkgICAmY2FwdHVyZWRfZnJhbWVfCj4gPiBjCj4gPiBvdW50KTsKPiA+ICAKPiA+ICAJ CWlndF9kZWJ1ZygiQ2FwdHVyZWQgJWQgZnJhbWVzXG4iLAo+ID4gY2FwdHVyZWRfZnJhbWVfY291 bnQpOwo+ID4gKwo+ID4gKwkJZXhwZWN0ZWRfY3JjID0KPiA+IGNoYW1lbGl1bV9jYWxjdWxhdGVf ZmJfY3JjX3Jlc3VsdChmYl9jcmMpOwo+ID4gKwo+ID4gIAkJZm9yIChqID0gMDsgaiA8IGNhcHR1 cmVkX2ZyYW1lX2NvdW50OyBqKyspCj4gPiAgCQkJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJmNyY1tq XSwKPiA+IGV4cGVjdGVkX2NyYyk7Cj4gPiArCj4gPiArCQlmcmVlKGV4cGVjdGVkX2NyYyk7Cj4g PiAgCQlmcmVlKGNyYyk7Cj4gPiAgCj4gPiAtbmV4dDoKPiA+ICAJCWRpc2FibGVfb3V0cHV0KGRh dGEsIHBvcnQsIG91dHB1dCk7Cj4gPiAgCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmZi KTsKPiA+ICAJfQotLSAKUGF1bCBLb2NpYWxrb3dza2kgPHBhdWwua29jaWFsa293c2tpQGxpbnV4 LmludGVsLmNvbT4KSW50ZWwgRmlubGFuZCBPeSAtIEJJQyAwMzU3NjA2LTQgLSBXZXN0ZW5kaW5r YXR1IDcsIDAyMTYwIEVzcG9vLCBGaW5sYW5kCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=