From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 2/2] drm/i915: rewrite FBC's atomic CRTC-choosing code Date: Fri, 23 Dec 2016 15:40:23 +0200 Message-ID: <20161223134023.GT31595@intel.com> References: <1482495839-27041-1-git-send-email-paulo.r.zanoni@intel.com> <1482495839-27041-2-git-send-email-paulo.r.zanoni@intel.com> <20161223124346.GS31595@intel.com> <1482499436.2641.82.camel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id AC8706E026 for ; Fri, 23 Dec 2016 13:40:26 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1482499436.2641.82.camel@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Paulo Zanoni Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBEZWMgMjMsIDIwMTYgYXQgMTE6MjM6NTZBTSAtMDIwMCwgUGF1bG8gWmFub25pIHdy b3RlOgo+IEVtIFNleCwgMjAxNi0xMi0yMyDDoHMgMTQ6NDMgKzAyMDAsIFZpbGxlIFN5cmrDpGzD pCBlc2NyZXZldToKPiA+IE9uIEZyaSwgRGVjIDIzLCAyMDE2IGF0IDEwOjIzOjU5QU0gLTAyMDAs IFBhdWxvIFphbm9uaSB3cm90ZToKPiA+ID4gCj4gPiA+IFZpbGxlIHBvaW50ZWQgb3V0IHRoYXQg aW50ZWxfZmJjX2Nob29zZV9jcnRjKCkgaXMgaXRlcmF0aW5nIG92ZXIKPiA+ID4gYWxsCj4gPiA+ IHBsYW5lcyBpbnN0ZWFkIG9mIGp1c3QgdGhlIHByaW1hcnkgcGxhbmVzLiBUaGVyZSBhcmUgbm8g cmVhbAo+ID4gPiBjb25zZXF1ZW5jZXMgb2YgdGhpcyBwcm9ibGVtIGZvciBIU1crLCBhbmQgZm9y IHRoZSBvdGhlciBwbGF0Zm9ybXMKPiA+ID4gaXQKPiA+ID4ganVzdCBtZWFucyB0aGF0IGluIHNv bWUgb2JzY3VyZSBtdWx0aS1zY3JlZW4gY2FzZXMgd2UnbGwga2VlcCBGQkMKPiA+ID4gZGlzYWJs ZWQgd2hlbiB3ZSBjb3VsZCBoYXZlIGVuYWJsZWQgaXQuIFN0aWxsLCBpdGVyYXRpbmcgb3ZlciBh bGwKPiA+ID4gcGxhbmVzIGRvZXNuJ3Qgc2VlbSB0byBiZSB0aGUgYmVzdCB0aGluZyB0byBkby4K PiA+ID4gCj4gPiA+IE15IGluaXRpYWwgaWRlYSB3YXMgdG8ganVzdCBhZGQgYSBjaGVjayBmb3Ig cGxhbmUtPnR5cGUgYW5kIGJlCj4gPiA+IGRvbmUsCj4gPiA+IGJ1dCB0aGVuIEkgcmVhbGl6ZWQg dGhhdCBpbiBjb21taXRzIG5vdCBpbnZvbHZpbmcgdGhlIHByaW1hcnkgcGxhbmUKPiA+ID4gd2UK PiA+ID4gd291bGQgcmVzZXQgY3J0Y19zdGF0ZS0+ZW5hYmxlX2ZiYyBiYWNrIHRvIGZhbHNlIGV2 ZW4gd2hlbiBGQkMgaXMKPiA+ID4gZW5hYmxlZC4gVGhhdCBhbHNvIHdvdWxkbid0IHJlc3VsdCBp biBhIGJ1ZyBkdWUgdG8gdGhlIHdheSB0aGUKPiA+ID4gZW5hYmxlX2ZiYyB2YXJpYWJsZSBpcyBj aGVja2VkLCBidXQsIHN0aWxsLCBvdXIgY29kZSBjYW4gYmUgYmV0dGVyCj4gPiA+IHRoYW4gdGhp cy4KPiA+ID4gCj4gPiA+IFNvIEkgd2VudCBmb3IgdGhlIHNvbHV0aW9uIHRoYXQgaW52b2x2ZXMg dHJhY2tpbmcgZW5hYmxlX2ZiYyBpbiB0aGUKPiA+ID4gcHJpbWFyeSBwbGFuZSBzdGF0ZSBpbnN0 ZWFkIG9mIHRoZSBDUlRDIHN0YXRlLiBUaGlzIHdheSwgaWYgYQo+ID4gPiBjb21taXQKPiA+ID4g ZG9lc24ndCBpbnZvbHZlIHRoZSBwcmltYXJ5IHBsYW5lIGZvciB0aGUgQ1JUQyB3ZSB3b24ndCBi ZQo+ID4gPiByZXNldHRpbmcKPiA+ID4gZW5hYmxlX2ZiYyBiYWNrIHRvIGZhbHNlLCBzbyB0aGUg dmFyaWFibGUgd2lsbCBhbHdheXMgcmVmbGVjdCB0aGUKPiA+ID4gcmVhbGl0eS4gQW5kIHRoaXMg Y2hhbmdlIGFsc28gbWFrZXMgbW9yZSBzZW5zZSBzaW5jZSBGQkMgaXMKPiA+ID4gYWN0dWFsbHkK PiA+ID4gdGllZCB0byB0aGUgc2luZ2xlIHBsYW5lIGFuZCBub3QgdGhlIGZ1bGwgcGlwZS4gQXMg YSBib251cywgd2Ugb25seQo+ID4gPiBpdGVyYXRlIG92ZXIgdGhlIENSVENzIGluc3RlYWQgb2Yg aXRlcmF0aW5nIG92ZXIgYWxsIHBsYW5lcy4KPiA+ID4gCj4gPiA+IHYyOgo+ID4gPiAKPiA+ID4g QnV0IFZpbGxlIHBvaW50ZWQgdGhhdCB0aGlzIG9ubHkgd29ya3MgcHJvcGVybHkgaWYgd2UgaGF2 ZSBhIHNpbmdsZQo+ID4gPiBjb21taXQgd2l0aCBtdWx0aXBsZSBDUlRDcy4gSWYgd2UgaGF2ZSBt dWx0aXBsZSBwYXJhbGxlbCBjb21taXRzLAo+ID4gPiBlYWNoCj4gPiA+IHdpdGggaXRzIG93biBD UlRDLCB3ZSdsbCBlbmQgd2l0aCBlbmFibGVfZmJjIHNldCB0byB0cnVlIGluIG1vcmUKPiA+ID4g dGhhbgo+ID4gPiBvbmUgcGxhbmUuCj4gPiA+IAo+ID4gPiBTbyB0aGUgc29sdXRpb24gd2FzIHRv IHJlbmFtZSBlbmFibGVfZmJjIHRvIGNhbl9lbmFibGVfZmJjLiBJZiB3ZQo+ID4gPiBqdXN0Cj4g PiA+IGRpZCB0aGUgcmVuYW1lIGFzIHRoZSBwYXRjaCB3YXMsIHdlJ2QgZW5kIHVwIHdpdGggYSBz aW5nbGUgcGxhbmUKPiA+ID4gd2l0aAo+ID4gPiBjYW5fZW5hYmxlX2ZiYyBvbiBjb21taXRzIGlu dm9sdmluZyBtdWx0aXBsZSBDUlRDczogd2UnZCBjaG9vc2UgdGhlCj4gPiA+IGJlc3Qgb25lLCBi dXQgd2UnZCBzdGlsbCBlbmQgdXAgd2l0aCBhIHZhcmlhYmxlIHRoYXQgZG9lc24ndCAxMDAlCj4g PiA+IHJlZmxlY3QgcmVhbGl0eS4KPiA+ID4gCj4gPiA+IFNvIGluIHRoZSBlbmQgSSBhZG9wdGVk IFZpbGxlJ3Mgc3VnZ2VzdGlvbiBvZiB0aGUgZmJjX3Njb3JlCj4gPiA+IHZhcmlhYmxlLgo+ID4g PiBBbmQgdGhlbiwgaW5zdGVhZCBvZiBjaGVja2luZyB0aGUgc2NvcmUgYXQgaW50ZWxfZmJjX2No b29zZV9jcnRjKCkKPiA+ID4gaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGNoZWNrIGZvciB0aGUg c2NvcmUgYXQgaW50ZWxfZmJjX2VuYWJsZSgpLgo+ID4gPiBUaGlzIGFsbG93cyB1cyB0byBzaW1w bGlmeSBpbnRlbF9mYmNfY2hvb3NlX2NydGMoKSB0byB0aGUgcG9pbnQKPiA+ID4gd2hlcmUKPiA+ ID4gaXQgb25seSBuZWVkcyB0byBsb29rIGF0IHRoZSBnaXZlbiBwbGFuZSBpbiBvcmRlciB0byBh c3NpZ24gaXRzCj4gPiA+IHNjb3JlCj4gPiA+IGluc3RlYWQgb2YgbG9va2luZyBhdCBldmVyeSBw cmltYXJ5IHBsYW5lIG9uIHRoZSBzYW1lIGNvbW1pdC4KPiA+ID4gCj4gPiA+IFdlIHN0aWxsIG9u bHkgc2V0IHNjb3JlcyBvZiAwIGFuZCAxIGFuZCB3ZSBkb24ndCByZWFsbHkgZG8gdGhlCj4gPiA+ IHNjb3JlLWNoZWNraW5nIGxvb3AuCj4gPiA+IAo+ID4gPiB2MzogUmViYXNlLgo+ID4gPiAKPiA+ ID4gQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4g PiA+IFJlcG9ydGVkLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50 ZWwuY29tPgo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBQYXVsbyBaYW5vbmkgPHBhdWxvLnIuemFub25p QGludGVsLmNvbT4KPiA+ID4gLS0tCj4gPiA+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGlzcGxheS5jIHzCoMKgMyArLQo+ID4gPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Ry di5owqDCoMKgwqDCoHzCoMKgOCArKy0tCj4gPiA+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZmJjLmPCoMKgwqDCoMKgfCA4NSArKysrKysrKysrKystLS0tLS0tLS0tCj4gPiA+IC0tLS0t LS0tLS0tLS0tCj4gPiA+IMKgMyBmaWxlcyBjaGFuZ2VkLCAzNSBpbnNlcnRpb25zKCspLCA2MSBk ZWxldGlvbnMoLSkKPiA+ID4gCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kaXNwbGF5LmMKPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNw bGF5LmMKPiA+ID4gaW5kZXggZDhlZmZkNC4uOTI1MjdkNiAxMDA2NDQKPiA+ID4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gPiBAQCAtMTQxOTEsNyArMTQxOTEsNiBAQCBz dGF0aWMgaW50IGludGVsX2F0b21pY19jaGVjayhzdHJ1Y3QKPiA+ID4gZHJtX2RldmljZSAqZGV2 LAo+ID4gPiDCoAlpZiAocmV0KQo+ID4gPiDCoAkJcmV0dXJuIHJldDsKPiA+ID4gwqAKPiA+ID4g LQlpbnRlbF9mYmNfY2hvb3NlX2NydGMoZGV2X3ByaXYsIHN0YXRlKTsKPiA+ID4gwqAJcmV0dXJu IGNhbGNfd2F0ZXJtYXJrX2RhdGEoc3RhdGUpOwo+ID4gPiDCoH0KPiA+ID4gwqAKPiA+ID4gQEAg LTE0OTY2LDYgKzE0OTY1LDggQEAgaW50ZWxfY2hlY2tfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJt X3BsYW5lCj4gPiA+ICpwbGFuZSwKPiA+ID4gwqAJCQlyZXR1cm4gcmV0Owo+ID4gPiDCoAl9Cj4g PiA+IMKgCj4gPiA+ICsJaW50ZWxfZmJjX2NoZWNrX3BsYW5lKHN0YXRlKTsKPiA+ID4gKwo+ID4g Cj4gPiBXZSBoYXZlIGFub3RoZXIgJ3JldHVybiAwJyBhIGxpdHRsZSBlYXJsaWVyIGluIHRoZSBm dW5jdGlvbiBmb3IgdGhlCj4gPiAicGxhbmUgZGlzYWJsZSBieSB0aGUgdXNlciIgY2FzZS4gUHJl c3VtYWJseSB3ZSdsbCB3YW50IHRvIHVwZGF0ZQo+ID4gdGhlIHNjb3JlIGluIHRoYXQgY2FzZSBh cyB3ZWxsPwo+IAo+IEkgYWx3YXlzIGFzc3VtZWQgdGhlIHN0YXRlIHdhcyB6ZXJvLWFsbG9jYXRl ZCwgbm90IGNvcGllZCwgYW5kIGludCBoaXMKPiBjYXNlIHRoaXMgd291bGRuJ3QgYmUgYSBwcm9i bGVtLi4uIFRoYW5rcyBmb3IgcG9pbnRpbmcgdGhpcyB0byBtZS4KPiAKPiBJJ2xsIG1vdmUgaXQg dXAuIENhbid0IG1vdmUgdXAgZnVydGhlciBzaW5jZSB3ZSBuZWVkIHBsYW5lX3N0YXRlLQo+ID52 aXNpYmxlIHRvIGJlIHNldC4KCk1heWJlIHdlIGp1c3Qgd2FudCB0byBjbGVhciB0aGUgc2NvcmUg dG8gMCB3aGVuIHZpc2libGU9PWZhbHNlPwoKPiAKPiAKPiA+IAo+ID4gPiAKPiA+ID4gwqAJcmV0 dXJuIDA7Cj4gPiA+IMKgfQo+ID4gPiDCoAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cnYuaAo+ID4gPiBpbmRleCAwMjVlNGM4Li43NDMwMDgyIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcnYuaAo+ID4gPiBAQCAtNDA2LDYgKzQwNiw5IEBAIHN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSB7Cj4gPiA+IMKgCcKgKi8KPiA+ID4gwqAJaW50IHNjYWxlcl9pZDsKPiA+ID4g wqAKPiA+ID4gKwkvKiAwOiBub3Qgc3VpdGFibGUgZm9yIEZCQywgMSs6IHN1aXRhYmxlIGZvciBG QkMsIG1vcmUgaXMKPiA+ID4gYmV0dGVyLiAqLwo+ID4gPiArCXVuc2lnbmVkIGludCBmYmNfc2Nv cmU7Cj4gPiA+ICsKPiA+ID4gwqAJc3RydWN0IGRybV9pbnRlbF9zcHJpdGVfY29sb3JrZXkgY2tl eTsKPiA+ID4gwqB9Owo+ID4gPiDCoAo+ID4gPiBAQCAtNjUyLDggKzY1NSw2IEBAIHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlIHsKPiA+ID4gwqAKPiA+ID4gwqAJYm9vbCBpcHNfZW5hYmxlZDsKPiA+ ID4gwqAKPiA+ID4gLQlib29sIGVuYWJsZV9mYmM7Cj4gPiA+IC0KPiA+ID4gwqAJYm9vbCBkb3Vi bGVfd2lkZTsKPiA+ID4gwqAKPiA+ID4gwqAJaW50IHBibjsKPiA+ID4gQEAgLTE1MzUsOCArMTUz Niw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZAo+ID4gPiBpbnRlbF9mYmRldl9yZXN0b3JlX21vZGUo c3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+ID4gwqAjZW5kaWYKPiA+ID4gwqAKPiA+ID4gwqAv KiBpbnRlbF9mYmMuYyAqLwo+ID4gPiAtdm9pZCBpbnRlbF9mYmNfY2hvb3NlX2NydGMoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gPiAtCQkJwqDCoMKgc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlKTsKPiA+ID4gK3ZvaWQgaW50ZWxfZmJjX2NoZWNrX3BsYW5lKHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwo+ID4gPiDCoGJvb2wgaW50ZWxf ZmJjX2lzX2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ID4gPiDC oHZvaWQgaW50ZWxfZmJjX3ByZV91cGRhdGUoc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gPiA+ IMKgCQkJwqDCoHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJjLmMKPiA+ID4gYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9mYmMuYwo+ID4gPiBpbmRleCAyNmE4MWE5Li5jZWRhNmY0IDEw MDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmMuYwo+ID4gPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmMuYwo+ID4gPiBAQCAtMTA0MCw2OCAr MTA0MCwzMiBAQCB2b2lkIGludGVsX2ZiY19mbHVzaChzdHJ1Y3QKPiA+ID4gZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCj4gPiA+IMKgfQo+ID4gPiDCoAo+ID4gPiDCoC8qKgo+ID4gPiAtICog aW50ZWxfZmJjX2Nob29zZV9jcnRjIC0gc2VsZWN0IGEgQ1JUQyB0byBlbmFibGUgRkJDIG9uCj4g PiA+IC0gKiBAZGV2X3ByaXY6IGk5MTUgZGV2aWNlIGluc3RhbmNlCj4gPiA+IC0gKiBAc3RhdGU6 IHRoZSBhdG9taWMgc3RhdGUgc3RydWN0dXJlCj4gPiA+ICsgKiBpbnRlbF9mYmNfY2hlY2tfcGxh bmUgLSBjaGVjayBwbGFuZSBmb3IgRkJDIHN1aXRhYmlsaXR5Cj4gPiA+ICsgKiBAcGxhbmVfc3Rh dGU6IHRoZSBwbGFuZSBzdGF0ZQo+ID4gPiDCoCAqCj4gPiA+IC0gKiBUaGlzIGZ1bmN0aW9uIGxv b2tzIGF0IHRoZSBwcm9wb3NlZCBzdGF0ZSBmb3IgQ1JUQ3MgYW5kIHBsYW5lcywKPiA+ID4gdGhl biBjaG9vc2VzCj4gPiA+IC0gKiB3aGljaCBwaXBlIGlzIGdvaW5nIHRvIGhhdmUgRkJDIGJ5IHNl dHRpbmcgaW50ZWxfY3J0Y19zdGF0ZS0KPiA+ID4gPmVuYWJsZV9mYmMgdG8KPiA+ID4gLSAqIHRy dWUuCj4gPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBzZXQgZmJjX3Njb3JlIGJhc2VkIG9u IGhvdyBzdWl0YWJsZSB0aGUKPiA+ID4gcGxhbmUgaXMgZm9yCj4gPiA+ICsgKiBGQkMuIEZvciBu b3cgdGhlIG9ubHkgc2NvcmVzIHVzZWQgYXJlIDAgYW5kIDEuCj4gPiA+IMKgICoKPiA+ID4gLSAq IExhdGVyLCBpbnRlbF9mYmNfZW5hYmxlIGlzIGdvaW5nIHRvIGxvb2sgZm9yIHN0YXRlLT5lbmFi bGVfZmJjCj4gPiA+IGFuZCB0aGVuIG1heWJlCj4gPiA+IC0gKiBlbmFibGUgRkJDIGZvciB0aGUg Y2hvc2VuIENSVEMuIElmIGl0IGRvZXMsIGl0IHdpbGwgc2V0Cj4gPiA+IGRldl9wcml2LT5mYmMu Y3J0Yy4KPiA+ID4gKyAqIFdlJ3JlIG5vdCBjaGFuZ2luZyBkZXZfcHJpdi0+ZmJjLCBzbyB0aGVy ZSdzIG5vIG5lZWQgZm9yIHRoZQo+ID4gPiBGQkMgbG9jay4KPiA+ID4gwqAgKi8KPiA+ID4gLXZv aWQgaW50ZWxfZmJjX2Nob29zZV9jcnRjKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKPiA+ID4gLQkJCcKgwqDCoHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiA+ID4g K3ZvaWQgaW50ZWxfZmJjX2NoZWNrX3BsYW5lKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUpCj4gPiA+IMKgewo+ID4gPiAtCXN0cnVjdCBpbnRlbF9mYmMgKmZiYyA9ICZkZXZf cHJpdi0+ZmJjOwo+ID4gPiAtCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ID4gPiAtCXN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOwo+ID4gPiAtCWJvb2wgY3J0Y19jaG9zZW4g PSBmYWxzZTsKPiA+ID4gLQlpbnQgaTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9 IHBsYW5lX3N0YXRlLT5iYXNlLnBsYW5lOwo+ID4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmRldik7Cj4gPiA+ICsJc3RydWN0IGludGVsX2Ny dGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKHBsYW5lX3N0YXRlLQo+ID4gPiA+YmFzZS5jcnRjKTsK PiA+IAo+ID4gV2hhdCBoYXBwZW5zIGlmIHdlIGRvbid0IGhhdmUgYSBjcnRjPwo+IAo+IEl0J3Mg YmVlbiBjb25maXJtZWQgdG8gbWUgbWFueSB0aW1lcyB0aGF0IGlmIGEgcGxhbmUgaXMgYmVpbmcK PiBjb21taXR0ZWQsIGl0cyBDUlRDIGlzIGluY2x1ZGVkIGluIHRoZSBhdG9taWMgY29tbWl0LiBX YXMgdGhpcyB3aGF0IHlvdQo+IHdlcmUgdGFsa2luZyBhYm91ZT8gQ2FuIHlvdSBnaXZlIG1lIGFu IGV4YW1wbGUgd2hlcmUgd2Ugd291bGRuJ3QgaGF2ZSBhCj4gQ1JUQz8KPiAKPiAKPiA+ID4gCj4g PiA+IMKgCj4gPiA+IC0JbXV0ZXhfbG9jaygmZmJjLT5sb2NrKTsKPiA+ID4gLQo+ID4gPiAtCS8q IERvZXMgdGhpcyBhdG9taWMgY29tbWl0IGludm9sdmUgdGhlIENSVEMgY3VycmVudGx5IHRpZWQK PiA+ID4gdG8gRkJDPyAqLwo+ID4gPiAtCWlmIChmYmMtPmNydGMgJiYKPiA+ID4gLQnCoMKgwqDC oCFkcm1fYXRvbWljX2dldF9leGlzdGluZ19jcnRjX3N0YXRlKHN0YXRlLCAmZmJjLT5jcnRjLQo+ ID4gPiA+YmFzZSkpCj4gPiA+IC0JCWdvdG8gb3V0Owo+ID4gPiArCXBsYW5lX3N0YXRlLT5mYmNf c2NvcmUgPSAwOwo+ID4gPiDCoAo+ID4gPiDCoAlpZiAoIWludGVsX2ZiY19jYW5fZW5hYmxlKGRl dl9wcml2KSkKPiA+ID4gLQkJZ290byBvdXQ7Cj4gPiA+IC0KPiA+ID4gLQkvKiBTaW1wbHkgY2hv b3NlIHRoZSBmaXJzdCBDUlRDIHRoYXQgaXMgY29tcGF0aWJsZSBhbmQgaGFzCj4gPiA+IGEgdmlz aWJsZQo+ID4gPiAtCcKgKiBwbGFuZS4gV2UgY291bGQgZ28gZm9yIGZhbmNpZXIgc2NoZW1lcyBz dWNoIGFzIGNoZWNraW5nCj4gPiA+IHRoZSBwbGFuZQo+ID4gPiAtCcKgKiBzaXplLCBidXQgdGhp cyB3b3VsZCBqdXN0IGFmZmVjdCB0aGUgZmV3IHBsYXRmb3JtcyB0aGF0Cj4gPiA+IGRvbid0IHRp ZSBGQkMKPiA+ID4gLQnCoCogdG8gcGlwZSBvciBwbGFuZSBBLiAqLwo+ID4gPiAtCWZvcl9lYWNo X3BsYW5lX2luX3N0YXRlKHN0YXRlLCBwbGFuZSwgcGxhbmVfc3RhdGUsIGkpIHsKPiA+ID4gLQkJ c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICppbnRlbF9wbGFuZV9zdGF0ZSA9Cj4gPiA+IC0JCQl0 b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZV9zdGF0ZSk7Cj4gPiA+IC0JCXN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICppbnRlbF9jcnRjX3N0YXRlOwo+ID4gPiAtCQlzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0YyA9Cj4gPiA+IHRvX2ludGVsX2NydGMocGxhbmVfc3RhdGUtPmNydGMpOwo+ID4gPiAtCj4g PiA+IC0JCWlmICghaW50ZWxfcGxhbmVfc3RhdGUtPmJhc2UudmlzaWJsZSkKPiA+ID4gLQkJCWNv bnRpbnVlOwo+ID4gPiAtCj4gPiA+IC0JCWlmIChmYmNfb25fcGlwZV9hX29ubHkoZGV2X3ByaXYp ICYmIGNydGMtPnBpcGUgIT0KPiA+ID4gUElQRV9BKQo+ID4gPiAtCQkJY29udGludWU7Cj4gPiA+ IC0KPiA+ID4gLQkJaWYgKGZiY19vbl9wbGFuZV9hX29ubHkoZGV2X3ByaXYpICYmIGNydGMtPnBs YW5lCj4gPiA+ICE9IFBMQU5FX0EpCj4gPiA+IC0JCQljb250aW51ZTsKPiA+ID4gLQo+ID4gPiAt CQlpbnRlbF9jcnRjX3N0YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0ZSgKPiA+ID4gLQkJCWRybV9h dG9taWNfZ2V0X2V4aXN0aW5nX2NydGNfc3RhdGUoc3RhdGUsCj4gPiA+ICZjcnRjLT5iYXNlKSk7 Cj4gPiA+IC0KPiA+ID4gLQkJaW50ZWxfY3J0Y19zdGF0ZS0+ZW5hYmxlX2ZiYyA9IHRydWU7Cj4g PiA+IC0JCWNydGNfY2hvc2VuID0gdHJ1ZTsKPiA+ID4gLQkJYnJlYWs7Cj4gPiA+IC0JfQo+ID4g PiAtCj4gPiA+IC0JaWYgKCFjcnRjX2Nob3NlbikKPiA+ID4gLQkJZmJjLT5ub19mYmNfcmVhc29u ID0gIm5vIHN1aXRhYmxlIENSVEMgZm9yIEZCQyI7Cj4gPiA+ICsJCXJldHVybjsKPiA+ID4gKwlp ZiAoZmJjX29uX3BpcGVfYV9vbmx5KGRldl9wcml2KSAmJiBjcnRjLT5waXBlICE9IFBJUEVfQSkK PiA+ID4gKwkJcmV0dXJuOwo+ID4gPiArCWlmIChmYmNfb25fcGxhbmVfYV9vbmx5KGRldl9wcml2 KSAmJiBjcnRjLT5wbGFuZSAhPQo+ID4gPiBQTEFORV9BKQo+ID4gPiArCQlyZXR1cm47Cj4gPiA+ ICsJaWYgKCFwbGFuZV9zdGF0ZS0+YmFzZS52aXNpYmxlKQo+ID4gPiArCQlyZXR1cm47Cj4gPiA+ IMKgCj4gPiA+IC1vdXQ6Cj4gPiA+IC0JbXV0ZXhfdW5sb2NrKCZmYmMtPmxvY2spOwo+ID4gPiAr CXBsYW5lX3N0YXRlLT5mYmNfc2NvcmUgPSAxOwo+ID4gPiDCoH0KPiA+ID4gwqAKPiA+ID4gwqAv KioKPiA+ID4gQEAgLTExMTQsNiArMTA3OCwxMyBAQCB2b2lkIGludGVsX2ZiY19jaG9vc2VfY3J0 YyhzdHJ1Y3QKPiA+ID4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+IMKgICogcG9z c2libGUuIE5vdGljZSB0aGF0IGl0IGRvZXNuJ3QgYWN0aXZhdGUgRkJDLiBJdCBpcyB2YWxpZCB0 bwo+ID4gPiBjYWxsCj4gPiA+IMKgICogaW50ZWxfZmJjX2VuYWJsZSBtdWx0aXBsZSB0aW1lcyBm b3IgdGhlIHNhbWUgcGlwZSB3aXRob3V0IGFuCj4gPiA+IMKgICogaW50ZWxfZmJjX2Rpc2FibGUg aW4gdGhlIG1pZGRsZSwgYXMgbG9uZyBhcyBpdCBpcyBkZWFjdGl2YXRlZC4KPiA+ID4gKyAqCj4g PiA+ICsgKiBJbiB0aGUgZnV0dXJlIHRoaXMgZnVuY3Rpb24gY291bGQgbWFrZSBiZXR0ZXIgdXNl IG9mIHRoZQo+ID4gPiBmYmNfc2NvcmUgdmFyaWFibGUuCj4gPiA+ICsgKiBXZSBjb3VsZCwgZm9y IGV4YW1wbGUsIGxvb3AgdGhyb3VnaCBhbGwgdGhlIHByaW1hcnkgcGxhbmVzCj4gPiA+IGludm9s dmVkIGluIHRoZQo+ID4gPiArICogYXRvbWljIGNvbW1pdCBhbmQgb25seSBlbmFibGUgRkJDIGZv ciB0aGUgcGxhbmUgd2l0aCB0aGUgYmVzdAo+ID4gPiBmYmNfc2NvcmUuIFdlCj4gPiA+ICsgKiBj b3VsZCBhbHNvIHRyeSB0byBkbyBzb21lIHNjaGVtZSB3aGVyZSBhIHBsYW5lIHdpdGggYmV0dGVy Cj4gPiA+IHNjb3JlIHRha2VzIG92ZXIKPiA+ID4gKyAqIEZCQyBmcm9tIGFub3RoZXIgcGxhbmUs IGJ1dCBvdXIgZHJpdmVyIGN1cnJlbnRseSBjYW4ndCBoYW5kbGUKPiA+ID4gdGhlIGNvbXBsZXhp dHkKPiA+ID4gKyAqIG9mIHN3aXRjaGluZyBwbGFuZXMgb24gdGhlIGZseS4gVGhpcyB3b3VsZCBv bmx5IGFmZmVjdCBmcm9tIEdlbgo+ID4gPiA0IHVwIHRvIElWQi4KPiA+ID4gwqAgKi8KPiA+ID4g wqB2b2lkIGludGVsX2ZiY19lbmFibGUoc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gPiA+IMKg CQnCoMKgwqDCoMKgwqBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+ID4g QEAgLTExMzAsMTQgKzExMDEsMTYgQEAgdm9pZCBpbnRlbF9mYmNfZW5hYmxlKHN0cnVjdCBpbnRl bF9jcnRjCj4gPiA+ICpjcnRjLAo+ID4gPiDCoAlpZiAoZmJjLT5lbmFibGVkKSB7Cj4gPiA+IMKg CQlXQVJOX09OKGZiYy0+Y3J0YyA9PSBOVUxMKTsKPiA+ID4gwqAJCWlmIChmYmMtPmNydGMgPT0g Y3J0Yykgewo+ID4gPiAtCQkJV0FSTl9PTighY3J0Y19zdGF0ZS0+ZW5hYmxlX2ZiYyk7Cj4gPiA+ ICsJCQlXQVJOX09OKHBsYW5lX3N0YXRlLT5mYmNfc2NvcmUgPT0gMCk7Cj4gPiA+IMKgCQkJV0FS Tl9PTihmYmMtPmFjdGl2ZSk7Cj4gPiA+IMKgCQl9Cj4gPiA+IMKgCQlnb3RvIG91dDsKPiA+ID4g wqAJfQo+ID4gPiDCoAo+ID4gPiAtCWlmICghY3J0Y19zdGF0ZS0+ZW5hYmxlX2ZiYykKPiA+ID4g KwlpZiAocGxhbmVfc3RhdGUtPmZiY19zY29yZSA9PSAwKSB7Cj4gPiA+ICsJCWZiYy0+bm9fZmJj X3JlYXNvbiA9ICJubyBzdWl0YWJsZSBDUlRDIGZvciBGQkMiOwo+ID4gPiDCoAkJZ290byBvdXQ7 Cj4gPiA+ICsJfQo+ID4gPiDCoAo+ID4gPiDCoAlXQVJOX09OKGZiYy0+YWN0aXZlKTsKPiA+ID4g wqAJV0FSTl9PTihmYmMtPmNydGMgIT0gTlVMTCk7Cj4gPiA+IC0twqAKPiA+ID4gMi43LjQKPiA+ IAoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbCBPVEMKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==