From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 3/3] drm/i915/icl: Add Multi-segmented gamma support Date: Fri, 26 Apr 2019 21:29:03 +0300 Message-ID: <20190426182903.GV24299@intel.com> References: <20190426180151.30036-1-shashank.sharma@intel.com> <20190426180151.30036-3-shashank.sharma@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id CFE7B89123 for ; Fri, 26 Apr 2019 18:29:07 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190426180151.30036-3-shashank.sharma@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Shashank Sharma Cc: Daniel Vetter , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBBcHIgMjYsIDIwMTkgYXQgMTE6MzE6NTFQTSArMDUzMCwgU2hhc2hhbmsgU2hhcm1h IHdyb3RlOgo+IElDTCBpbnRyb2R1Y2VzIGEgbmV3IGdhbW1hIGNvcnJlY3Rpb24gbW9kZSBpbiBk aXNwbGF5IGVuZ2luZSwgY2FsbGVkCj4gbXVsdGktc2VnbWVudGVkLWdhbW1hIG1vZGUuIFRoaXMg bW9kZSBhbGxvd3MgdXNlcnMgdG8gcHJvZ3JhbSB0aGUKPiBkYXJrZXIgcmVnaW9uIG9mIHRoZSBn YW1tYSBjdXJ2ZSB3aXRoIHN1ZXByZmluZSBwcmVjaXNpb24uIEFuCj4gZXhhbXBsZSB1c2UgY2Fz ZSBmb3IgdGhpcyBpcyBIRFIgY3VydmVzIChsaWtlIFBRIFNULTIwODQpLgo+IAo+IElmIHdlIHBs b3QgYSBnYW1tYSBjb3JyZWN0aW9uIGN1cnZlIGZyb20gdmFsdWUgcmFuZ2UgYmV0d2VlbiAwLjAg dG8gMS4wLAo+IElDTCdzIG11bHRpLXNlZ21lbnQgaGFzIDMgZGlmZmVyZW50IHNlY3Rpb25zOgo+ IC0gc3VwZXJmaW5lIHNlZ21lbnQ6IDkgdmFsdWVzLCByYW5nZXMgYmV0d2VlbiAwIC0gMS8oMTI4 ICogMjU2KQo+IC0gZmluZSBzZWdtZW50OiAyNTcgdmFsdWVzLCByYW5nZXMgYmV0d2VlbiAwIC0g MS8oMTI4KQo+IC0gY29yYXNlIHNlZ21lbnQ6IDI1NyB2YWx1ZXMsIHJhbmdlcyBiZXR3ZWVuIDAg LSAxCj4gCj4gVGhpcyBwYXRjaDoKPiAtIENoYW5nZXMgZ2FtbWEgTFVUcyBzaXplIGZvciBJQ0wv R0VOMTEgdG8gMjYyMTQ0IGVudHJpZXMgKDggKiAxMjggKiAyNTYpLAo+ICAgc28gdGhhdCB1c2Vy c3BhY2UgY2FuIHByb2dyYW0gd2l0aCBoaWdoZXN0IHByZWNpc2lvbiBzdXBwb3J0ZWQuCj4gLSBD aGFuZ2VzIGRlZmF1bHQgZ2FtbWEgbW9kZSAobm9uLWxlZ2FjeSkgdG8gbXVsdGktc2VnbWVudGVk LWdhbW1hIG1vZGUuCj4gLSBBZGRzIGZ1bmN0aW9ucyB0byBwcm9ncmFtL2RldGVjdCBtdWx0aS1z ZWdtZW50IGdhbW1hLgo+IAo+IENjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGlu dXguaW50ZWwuY29tPgo+IENjOiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RA bGludXguaW50ZWwuY29tPgo+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xs LmNoPgo+IAo+IFN1Z2dlc3RlZC1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxp bnV4LmludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBTaGFzaGFuayBTaGFybWEgPHNoYXNoYW5r LnNoYXJtYUBpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogVW1hIFNoYW5rYXIgPHVtYS5zaGFu a2FyQGludGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wY2kuYyAg ICB8ICAgMyArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jb2xvci5jIHwgMTU1ICsr KysrKysrKysrKysrKysrKysrKysrKysrKystCj4gIDIgZmlsZXMgY2hhbmdlZCwgMTU2IGluc2Vy dGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcGNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BjaS5jCj4gaW5k ZXggZmZhMmVlNzBhMDNkLi44MzY5ODk1MTc2MGIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9wY2kuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGNp LmMKPiBAQCAtNzQ5LDcgKzc0OSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNl X2luZm8gaW50ZWxfY2Fubm9ubGFrZV9pbmZvID0gewo+ICAJR0VOKDExKSwgXAo+ICAJLmRkYl9z aXplID0gMjA0OCwgXAo+ICAJLmhhc19sb2dpY2FsX3JpbmdfZWxzcSA9IDEsIFwKPiAtCS5jb2xv ciA9IHsgLmRlZ2FtbWFfbHV0X3NpemUgPSAzMywgLmdhbW1hX2x1dF9zaXplID0gMTAyNCB9Cj4g KwkuY29sb3IgPSB7IC5kZWdhbW1hX2x1dF9zaXplID0gMzMsIC5nYW1tYV9sdXRfc2l6ZSA9IDI2 MjE0NCB9Cj4gKwo+ICAKPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBp bnRlbF9pY2VsYWtlXzExX2luZm8gPSB7Cj4gIAlHRU4xMV9GRUFUVVJFUywKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY29sb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2NvbG9yLmMKPiBpbmRleCBjYTM0MWE5ZTQ3ZTYuLmQxZmI3OWE1ZDc2NCAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jb2xvci5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY29sb3IuYwo+IEBAIC00MSw2ICs0MSw3IEBACj4gICNk ZWZpbmUgQ1RNX0NPRUZGX0FCUyhjb2VmZikJCSgoY29lZmYpICYgKENUTV9DT0VGRl9TSUdOIC0g MSkpCj4gIAo+ICAjZGVmaW5lIExFR0FDWV9MVVRfTEVOR1RICQkyNTYKPiArI2RlZmluZSBJQ0xf TVVMVElTRUdfTFVUX0xFTkdUSAkJKDI1NiAqIDEyOCAqIDgpCj4gIC8qCj4gICAqIEV4dHJhY3Qg dGhlIENTQyBjb2VmZmljaWVudCBmcm9tIGEgQ1RNIGNvZWZmaWNpZW50IChpbiBVMzIuMzIgZml4 ZWQgcG9pbnQKPiAgICogZm9ybWF0KS4gVGhpcyBtYWNybyB0YWtlcyB0aGUgY29lZmZpY2llbnQg d2Ugd2FudCB0cmFuc2Zvcm1lZCBhbmQgdGhlCj4gQEAgLTU4LDYgKzU5LDEyIEBACj4gIAo+ICAj ZGVmaW5lIElMS19DU0NfUE9TVE9GRl9MSU1JVEVEX1JBTkdFICgxNiAqICgxIDw8IDEyKSAvIDI1 NSkKPiAgCj4gK2VudW0gaWNsX21zX2dhbW1hX3NlZ21lbnRzIHsKPiArCUlDTF9NU19HQU1NQV9T RUdfU1VQRVJGSU5FLAo+ICsJSUNMX01TX0dBTU1BX1NFR19GSU5FLAo+ICsJSUNMX01TX0dBTU1B X1NFR19DT0FSU0UsCj4gK307Cj4gKwo+ICBzdGF0aWMgY29uc3QgdTE2IGlsa19jc2Nfb2ZmX3pl cm9bM10gPSB7fTsKPiAgCj4gIHN0YXRpYyBjb25zdCB1MTYgaWxrX2NzY19jb2VmZl9pZGVudGl0 eVs5XSA9IHsKPiBAQCAtNzY3LDYgKzc3NCwxNDkgQEAgc3RhdGljIHZvaWQgZ2xrX2xvYWRfbHV0 cyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiAgCX0KPiAgfQo+ ICAKPiArLyogaWxrKyAiMTIuNCIgaW50ZXJwb2xhdGVkIGZvcm1hdCAoaGlnaCAxMCBiaXRzKSAq Lwo+ICtzdGF0aWMgdTMyIGlsa19sdXRfMTJwNF9sZHcoY29uc3Qgc3RydWN0IGRybV9jb2xvcl9s dXQgKmNvbG9yKQo+ICt7Cj4gKwlyZXR1cm4gKGNvbG9yLT5yZWQgPj4gNikgPDwgMjAgfCAoY29s b3ItPmdyZWVuID4+IDYpIDw8IDEwIHwKPiArCQkoY29sb3ItPmJsdWUgPj4gNik7Cj4gK30KPiAr Cj4gKy8qIGlsaysgIjEyLjQiIGludGVycG9sYXRlZCBmb3JtYXQgKGxvdyA2IGJpdHMpICovCj4g K3N0YXRpYyB1MzIgaWxrX2x1dF8xMnA0X3Vkdyhjb25zdCBzdHJ1Y3QgZHJtX2NvbG9yX2x1dCAq Y29sb3IpCj4gK3sKPiArCXJldHVybiAoY29sb3ItPnJlZCAmIDB4M2YpIDw8IDI0IHwgKGNvbG9y LT5ncmVlbiAmIDB4M2YpIDw8IDE0IHwKPiArCQkoY29sb3ItPmJsdWUgJiAweDNmKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQKPiAraWNsX3Byb2dyYW1fZ2FtbWFfZ2NtYXgoY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT5iYXNlLmNydGMpOwo+ICsJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7Cj4g KwllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7Cj4gKwo+ICsJLyoKPiArCSAqIFByb2dyYW0g dGhlIG1heCByZWdpc3RlciB0byBjbGFtcCB2YWx1ZXMgPiAxLjAuCj4gKwkgKiBUb0RvOiBFeHRl bmQgdGhlIEFCSSB0byBiZSBhYmxlIHRvIHByb2dyYW0gdmFsdWVzCj4gKwkgKiBmcm9tIDEuMAo+ ICsJICovCj4gKwlJOTE1X1dSSVRFKFBSRUNfUEFMX0dDX01BWChwaXBlLCAwKSwgKDEgPDwgMTYp KTsKPiArCUk5MTVfV1JJVEUoUFJFQ19QQUxfR0NfTUFYKHBpcGUsIDEpLCAoMSA8PCAxNikpOwo+ ICsJSTkxNV9XUklURShQUkVDX1BBTF9HQ19NQVgocGlwZSwgMiksICgxIDw8IDE2KSk7CgpUaGlz IG9uZSBJIHRoaW5rIHdlIHdhbnQgdG8gcHJvZ3JhbSBiYXNlZCBvbiB0aGUgcHJvdmlkZSBMVVQu IEl0J3MgdGhlCmxhc3QgZW50cnkgdGhhdCBzdGlsbCBnZXRzIHVzZWQgaW4gaW50ZXJwb2xhdGlv biBmb3IgPDEuMCB2YWx1ZXMuCk9yIGF0IGxlYXN0IHRoYXQncyB0aGUgd2F5IGl0IHdvcmtzIHdp dGggdGhlIDEycDQgbW9kZSBJSVJDLiBJIGRvbid0CmFjdHVhbGx5IHJlbWVtYmVyIGhvdyBpdCBn b2VzIHdpdGggdGhlIG11bHRpIHNlZ21lbnQgbW9kZS4KCj4gKwo+ICsJLyoKPiArCSAqIFByb2dy YW0gdGhlIG1heCByZWdpc3RlciB0byBjbGFtcCB2YWx1ZXMgPiAxLjAuCj4gKwkgKiBUb0RvOiBF eHRlbmQgdGhlIEFCSSB0byBiZSBhYmxlIHRvIHByb2dyYW0gdmFsdWVzCj4gKwkgKiBmcm9tIDEu MCB0byAzLjAKPiArCSAqLwo+ICsJSTkxNV9XUklURShQUkVDX1BBTF9FWFRfR0NfTUFYKHBpcGUs IDApLCAoMSA8PCAxNikpOwo+ICsJSTkxNV9XUklURShQUkVDX1BBTF9FWFRfR0NfTUFYKHBpcGUs IDEpLCAoMSA8PCAxNikpOwo+ICsJSTkxNV9XUklURShQUkVDX1BBTF9FWFRfR0NfTUFYKHBpcGUs IDIpLCAoMSA8PCAxNikpOwo+ICsKPiArCS8qCj4gKwkgKiBQcm9ncmFtIHRoZSBnYyBtYXggMiBy ZWdpc3RlciB0byBjbGFtcCB2YWx1ZXMgPiAxLjAuCj4gKwkgKiBUb0RvOiBFeHRlbmQgdGhlIEFC SSB0byBiZSBhYmxlIHRvIHByb2dyYW0gdmFsdWVzCj4gKwkgKiBmcm9tIDMuMCB0byA3LjAKPiAr CSAqLwo+ICsJSTkxNV9XUklURShQUkVDX1BBTF9FWFQyX0dDX01BWChwaXBlLCAwKSwgKDEgPDwg MTYpKTsKPiArCUk5MTVfV1JJVEUoUFJFQ19QQUxfRVhUMl9HQ19NQVgocGlwZSwgMSksICgxIDw8 IDE2KSk7Cj4gKwlJOTE1X1dSSVRFKFBSRUNfUEFMX0VYVDJfR0NfTUFYKHBpcGUsIDIpLCAoMSA8 PCAxNikpOwoKQW5kIHRoZXNlIGFyZSBqdXN0IGl2Yl9sb2FkX2x1dF8xMF9tYXgoKS4gTWlnaHQg bmVlZCB0byBqdXN0CnMvMTAvZXh0LyBpbiB0aGUgbmFtZSBzaW5jZSBJIGd1ZXNzIHRoZXkgYXBw bHkgdG8gdGhlIDEycDQgYW5kCm11bHRpIHNlZ21tZW50IG1vZGVzIHRvby4KCj4gK30KPiArCj4g K3N0YXRpYyB2b2lkCj4gK2ljbF9wcm9ncmFtX2dhbW1hX211bHRpX3NlZ21lbnQoY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gKwkJCQljb25zdCBzdHJ1Y3QgZHJt X3Byb3BlcnR5X2Jsb2IgKmJsb2IsCj4gKwkJCQllbnVtIGljbF9tc19nYW1tYV9zZWdtZW50cyBz ZWdtZW50KQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMo Y3J0Y19zdGF0ZS0+YmFzZS5jcnRjKTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwo+ICsJY29uc3Qgc3RydWN0IGRybV9jb2xv cl9sdXQgKmx1dCA9IGJsb2ItPmRhdGE7Cj4gKwllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7 Cj4gKwl1MzIgaSwgd29yZCwgc2VnX3NpemUsIHNlZ19zdGVwLCBzZWdfc3RhcnQgPSAwOwo+ICsJ aTkxNV9yZWdfdCBpbmRleF9yZWcsIGRhdGFfcmVnOwo+ICsKPiArCWlmICghbHV0IHx8IChkcm1f Y29sb3JfbHV0X3NpemUoYmxvYikgPCBJQ0xfTVVMVElTRUdfTFVUX0xFTkdUSCkpIHsKPiArCQlE Uk1fREVCVUdfS01TKCJOb3QgcHJvZ3JhbW1pbmcgZ2FtbWEgc2VnbWVudCwgaW52YWxpZCBpbnB1 dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBFdmVyeSBlbnRyeSBp biB0aGUgbXVsdGktc2VnbWVudCBMVVQgaXMgY29ycmVzcG9uZGluZyB0byBhIHN1cGVyZmluZQo+ ICsJICogc2VnbWVudCBzdGVwIHdoaWNoIGlzIDEvKDgqMTI4KjI1NikuCj4gKwkgKgo+ICsJICog U3VwZXJmaW5lIHNlZ21lbnQgaGFzIDkgZW50cmllcywgY29ycmVzcG9uZGluZyB0byB2YWx1ZXMK PiArCSAqIDAsIDEvKDggKiAxMjggKiAyNTYpLCAyLyg4ICogMTI4ICogMjU2KSAuLi4uIDgvKDgg KiAxMjggKiAyNTYpLgo+ICsJICoKPiArCSAqIEZpbmUgc2VnbWVudCdzIHN0ZXAgaXMgMS8oMTI4 ICogMjU2KSBpZSAxLygxMjggKiAyNTYpLCAgMi8oMTI4KjI1NikKPiArCSAqIC4uLiAyNTYvKDEy OCoyNTYpLiBTbyBpbiBvcmRlciB0byBwcm9ncmFtIGZpbmUgc2VnbWVudCBvZiBMVVQgd2UKPiAr CSAqIG5lZWQgdG8gcGljayBldmVyeSA4J3RoIGVudHJ5IGluIExVVCwgYW5kIHByb2dyYW0gMjU2 IGluZGV4ZXMuCj4gKwkgKiBGaW5lIHNlZ21lbnQncyBpbmRleCAwIGlzIHByb2dyYW1tZWQgaW4g SFcsIGFuZCBpdCBzdGFydHMgZnJvbQo+ICsJICogaW5kZXggMS4KPiArCSAqCj4gKwkgKiBDb2Fy c2Ugc2VnbWVudCdzIHN0YXJ0cyBmcm9tIGluZGV4IDAgYW5kIGl0J3Mgc3RlcCBpcyAxLzI1NiBp ZSAwLAo+ICsJICogMS8yNTYsIDIvMjU2IC4uLjI1Ni8yNTYuIEFzIHBlciB0aGUgZGVzY3JpcHRp b24gb2YgZWFjaCBlbnRyeSBpbiBMVVQKPiArCSAqIGFib3ZlLCB3ZSBuZWVkIHRvIHBpY2sgZXZl cnkgOCAqIDEyOCA9IDEwMjR0aCBlbnRyeSBpbiBMVVQsIGFuZAo+ICsJICogcHJvZ3JhbSAyNTYg b2YgdGhvc2UuCj4gKwkgKi8KPiArCj4gKwlzd2l0Y2ggKHNlZ21lbnQpIHsKPiArCWNhc2UgSUNM X01TX0dBTU1BX1NFR19TVVBFUkZJTkU6Cj4gKwkJc2VnX3NpemUgPSA5Owo+ICsJCXNlZ19zdGVw ID0gMTsKPiArCQlpbmRleF9yZWcgPSBQUkVDX1BBTF9NVUxUSV9TRUdfSU5ERVgocGlwZSk7Cj4g KwkJZGF0YV9yZWcgPSBQUkVDX1BBTF9NVUxUSV9TRUdfREFUQShwaXBlKTsKPiArCQlicmVhazsK PiArCj4gKwljYXNlIElDTF9NU19HQU1NQV9TRUdfRklORToKPiArCQlzZWdfc3RhcnQgPSAxOwo+ ICsJCXNlZ19zaXplID0gMjU2Owo+ICsJCXNlZ19zdGVwID0gODsKPiArCQlpbmRleF9yZWcgPSBQ UkVDX1BBTF9JTkRFWChwaXBlKTsKPiArCQlkYXRhX3JlZyA9IFBSRUNfUEFMX0RBVEEocGlwZSk7 Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBJQ0xfTVNfR0FNTUFfU0VHX0NPQVJTRToKPiArCQlz ZWdfc2l6ZSA9IDI1NjsKPiArCQlzZWdfc3RlcCA9IDEwMjQ7Cj4gKwkJaW5kZXhfcmVnID0gUFJF Q19QQUxfSU5ERVgocGlwZSk7Cj4gKwkJZGF0YV9yZWcgPSBQUkVDX1BBTF9EQVRBKHBpcGUpOwo+ ICsJCWJyZWFrOwoKSSdtIG5vdCBjb252aW5jZWQgdGhpcyB0aGlzIGVudW0gaXMgYWN0dWFsbHkg aGVscGZ1bC4gSSB3b3VsZApwcm9iYWJseSBqdXN0IHRyeSB0byBwcm92aWRlIHNlcGFyYXRlIGZ1 bmN0aW9ucyBmb3IgdGhlIHNlZ21lbnRzLgpOb3Qgc3VyZSBpZiB3ZSBjb3VsZCBzaGFyZSB0aGUg c2FtZSBjb2RlIGZvciB0aGUgZmluZS9jb2Fyc2UKc2VnbWVudHMgYW5kIGp1c3QgcGFzcyBpbiB0 aGUgZGlmZmVyZW5jZXMgYXMgcGFyYW1ldGVycy4KCj4gKwo+ICsJZGVmYXVsdDoKPiArCQlEUk1f RVJST1IoIkludmFsaWQgZ2FtbWEgc2VnbWVudCAlZCB0byBwcm9ncmFtXG4iLCBzZWdtZW50KTsK PiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJSTkxNV9XUklURShpbmRleF9yZWcsIFBBTF9QUkVD X0FVVE9fSU5DUkVNRU5UKTsKPiArCj4gKwlmb3IgKGkgPSBzZWdfc3RhcnQ7IGkgPCBzZWdfc2l6 ZTsgaSsrKSB7Cj4gKwkJLyogRXZlbiBJbmRleCAqLwoKVGhlc2UgY29tbWVudHMgZG9uJ3QgcmVh bGx5IHByb3ZpZGUgYW55IHZhbHVlLgoKPiArCQl3b3JkID0gaWxrX2x1dF8xMnA0X3VkdygmbHV0 W2kgKiBzZWdfc3RlcF0pOwoKYW5kIHRoZSAnd29yZCcgdmFyaWFibGUgaXNuJ3QgcGFydGljdWxh cmx5IHVzZWZ1bCBlaXRoZXIuCldlIG1pZ2h0IHdhbnQgYSBsb2NhbCB2YXJpYW5ibGUgZm9yIHRo ZSBsdXQgZW50cnkgbGlrZSB3ZQpoYXZlIGluIHRoZSBpdmIvYmR3IGZ1bmN0aW9ucywgaWYgb25s eSB0byBhdm9pZCByZXBlYXRpbmcgdGhlCmFyaXRobWV0aWMuCgo+ICsJCUk5MTVfV1JJVEUoZGF0 YV9yZWcsIHdvcmQpOwo+ICsKPiArCQkvKiBPZGQgaW5kZXggKi8KPiArCQl3b3JkID0gaWxrX2x1 dF8xMnA0X2xkdygmbHV0W2kgKiBzZWdfc3RlcF0pOwo+ICsJCUk5MTVfV1JJVEUoZGF0YV9yZWcs IHdvcmQpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtpY2xfbG9hZF9nYW1tYV9t dWx0aV9zZWdfbHV0KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ ICt7Cj4gKwljb25zdCBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmx1dF9ibG9iID0gY3J0Y19z dGF0ZS0+YmFzZS5nYW1tYV9sdXQ7Cj4gKwo+ICsJaWYgKCFsdXRfYmxvYikKPiArCQlyZXR1cm47 Cj4gKwo+ICsJaWNsX3Byb2dyYW1fZ2FtbWFfbXVsdGlfc2VnbWVudChjcnRjX3N0YXRlLCBsdXRf YmxvYiwKPiArCQkJCQlJQ0xfTVNfR0FNTUFfU0VHX1NVUEVSRklORSk7Cj4gKwlpY2xfcHJvZ3Jh bV9nYW1tYV9tdWx0aV9zZWdtZW50KGNydGNfc3RhdGUsIGx1dF9ibG9iLAo+ICsJCQkJCUlDTF9N U19HQU1NQV9TRUdfRklORSk7Cj4gKwlpY2xfcHJvZ3JhbV9nYW1tYV9tdWx0aV9zZWdtZW50KGNy dGNfc3RhdGUsIGx1dF9ibG9iLAo+ICsJCQkJCUlDTF9NU19HQU1NQV9TRUdfQ09BUlNFKTsKPiAr CWljbF9wcm9ncmFtX2dhbW1hX2djbWF4KGNydGNfc3RhdGUpOwo+ICt9CgpBbmQgdGhpcyBJIHdv dWxkIGp1c3QgaW5saW5lIGludG8gaWNsX2xvYWRfbHV0cygpIGp1c3QgbGlrZSB0aGUgcmVzdC4K Cj4gKwo+ICBzdGF0aWMgdm9pZCBpY2xfbG9hZF9sdXRzKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlKQo+ICB7Cj4gIAljb25zdCBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Js b2IgKmdhbW1hX2x1dCA9IGNydGNfc3RhdGUtPmJhc2UuZ2FtbWFfbHV0Owo+IEBAIC03NzYsNiAr OTI2LDkgQEAgc3RhdGljIHZvaWQgaWNsX2xvYWRfbHV0cyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiAgCQlnbGtfbG9hZF9kZWdhbW1hX2x1dChjcnRjX3N0YXRl KTsKPiAgCj4gIAlpZiAoKGNydGNfc3RhdGUtPmdhbW1hX21vZGUgJiBHQU1NQV9NT0RFX01PREVf TUFTSykgPT0KPiArCQlHQU1NQV9NT0RFX01PREVfMTJCSVRfTVVMVElfU0VHTUVOVEVEKSB7Cj4g KwkJaWNsX2xvYWRfZ2FtbWFfbXVsdGlfc2VnX2x1dChjcnRjX3N0YXRlKTsKCkknZCBwdXQgdGhp cyBsYXN0IHRvIGtlZXAgdGhpbmdzIGluIGNvbnNpc3RlbnQgb3JkZXIuIEFuZCBwcm9iYWJseSB3 YW50CnRvIHVzZSBhIHN3aXRjaCBzdGF0ZW1lbnQgbm93IHRoYXQgd2UgaGF2ZSB0aHJlZSBvcHRp b25zLgoKPiArCX0gZWxzZSBpZiAoKGNydGNfc3RhdGUtPmdhbW1hX21vZGUgJiBHQU1NQV9NT0RF X01PREVfTUFTSykgPT0KPiAgCSAgICBHQU1NQV9NT0RFX01PREVfOEJJVCkgewo+ICAJCWk5eHhf bG9hZF9sdXRzKGNydGNfc3RhdGUpOwo+ICAJfSBlbHNlIHsKPiBAQCAtMTE4Nyw3ICsxMzQwLDcg QEAgc3RhdGljIHUzMiBpY2xfZ2FtbWFfbW9kZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSkKPiAgCSAgICBjcnRjX3N0YXRlX2lzX2xlZ2FjeV9nYW1tYShjcnRjX3N0 YXRlKSkKPiAgCQlnYW1tYV9tb2RlIHw9IEdBTU1BX01PREVfTU9ERV84QklUOwo+ICAJZWxzZQo+ IC0JCWdhbW1hX21vZGUgfD0gR0FNTUFfTU9ERV9NT0RFXzEwQklUOwo+ICsJCWdhbW1hX21vZGUg fD0gR0FNTUFfTU9ERV9NT0RFXzEyQklUX01VTFRJX1NFR01FTlRFRDsKPiAgCj4gIAlyZXR1cm4g Z2FtbWFfbW9kZTsKPiAgfQo+IC0tIAo+IDIuMTcuMQoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRl bApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1n ZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=