From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v2 09/12] drm/i915: Rewrite VLV/CHV watermark code Date: Tue, 10 Mar 2015 11:26:29 +0100 Message-ID: <20150310102629.GK3800@phenom.ffwll.local> References: <1425583192-2584-1-git-send-email-ville.syrjala@linux.intel.com> <1425583192-2584-10-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wg0-f47.google.com (mail-wg0-f47.google.com [74.125.82.47]) by gabe.freedesktop.org (Postfix) with ESMTP id 07C7E6E066 for ; Tue, 10 Mar 2015 03:24:51 -0700 (PDT) Received: by wghn12 with SMTP id n12so673778wgh.6 for ; Tue, 10 Mar 2015 03:24:50 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1425583192-2584-10-git-send-email-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: ville.syrjala@linux.intel.com Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBNYXIgMDUsIDIwMTUgYXQgMDk6MTk6NDlQTSArMDIwMCwgdmlsbGUuc3lyamFsYUBs aW51eC5pbnRlbC5jb20gd3JvdGU6Cj4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJq YWxhQGxpbnV4LmludGVsLmNvbT4KPiAKPiBBc3N1bWluZyB0aGUgUE5EIGRlYWRsaW5lIG1lY2hh bmlzbSB3b3JrcyByZWFzb25hYmx5IHdlIHNob3VsZCBkbwo+IG1lbW9yeSByZXF1ZXN0cyBhcyBl YXJseSBhcyBwb3NzaWJsZSBzbyB0aGF0IFBORCBoYXMgc2NoZWR1bGUgdGhlCj4gcmVxdWVzdHMg bW9yZSBpbnRlbGxpZ2VudGx5LiBDdXJyZW50bHkgd2UncmUgc3RpbGwgY2FsY3VsYXRpbmcKPiB0 aGUgd2F0ZXJtYXJrcyBhcyBpZiBWTFYvQ0hWIGFyZSBpZGVudGljYWwgdG8gZzR4LCB3aGljaCBp c24ndAo+IHRoZSBjYXNlLgo+IAo+IFRoZSBjdXJyZW50IGNvZGUgYWxzbyBzZWVtcyB0byBjYWxj dWxhdGUgaW5zdWZmaWNpZW50IHdhdGVybWFya3MKPiBhbmQgaGVuY2Ugd2UncmUgc2VlaW5nIHNv bWUgdW5kZXJydW5zLCBlc3BlY2lhbGx5IG9uIGhpZ2ggcmVzb2x1dGlvbgo+IGRpc3BsYXlzLgo+ IAo+IFRvIGZpeCBpdCBqdXN0IHJpcCBvdXQgdGhlIGN1cnJlbnQgY29kZSBhbmQgcmVwbGFjZSBp cyB3aXRoIHNvbWV0aGluZwo+IHRoYXQgdHJpZXMgdG8gdXRpbGl6ZSBQTkQgYXMgZWZmaWNpZW50 bHkgYXMgcG9zc2libGUuCj4gCj4gV2Ugbm93IGNhbGN1bGF0ZSB0aGUgV00gd2F0ZXJtYXJrIHRv IHRyaWdnZXIgd2hlbiB0aGUgRklGTyBzdGlsbCBoYXMKPiAyNTZ1cyB3b3J0aCBvZiBkYXRhLiAy NTZ1cyBpcyB0aGUgbWF4aW11bSBkZWFkbGluZSB2YWx1ZSBzdXBvb3J0ZWQgYnkKPiBQTkQsIHNv IGlzc3VpbmcgbWVtb3J5IHJlcXVlc3RzIGVhcmxpZXIgd291bGQgbWVhbiB3ZSBwcm9iYWJseSBj b3VsZG4ndAo+IHV0aWxpemUgdGhlIGZ1bGwgRklGTyBhcyBQTkQgd291bGQgYXR0ZW1wdCB0byBy ZXR1cm4gdGhlIGRhdGEgYXQKPiBsZWFzdCBpbiBhdCBsZWFzdCAyNTZ1cy4gV2UgYWxzbyBjbGFt cCB0aGUgd2F0ZXJtYXJrIHRvIGF0IGxlYXN0IDgKPiBjYWNoZWxpbmVzIGFzIHRoYXQncyB0aGUg bWFnaWMgd2F0ZXJtYXJrIHRoYXQgZW5hYmxpbmcgdHJpY2tsZSBmZWVkCj4gd291bGQgYWxzbyBp bXBvc2UuIEknbSBhc3N1bWluZyBpdCBtYXRjaGVzIHNvbWUgYnVyc3Qgc2l6ZS4KPiAKPiBJbiB0 aGVvcnkgd2UgY291bGQganVzdCBlbmFibGUgdHJpY2tsZSBmZWVkIGFuZCBpZ25vcmUgdGhlIFdN IHZhbHVlcywKPiBleGNlcHQgdHJpY2tsZSBmZWVkIGRvZXNuJ3Qgd29yayB3aXRoIG1heCBmaWZv IG1vZGUgYW55d2F5LCBzbyB3ZSdkCj4gc3RpbGwgbmVlZCB0byBjYWxjdWxhdGUgdGhlIFNSIHdh dGVybWFya3MuIEl0IHNlZW1zIGNsZWFuZXIgdG8ganVzdAo+IGRpc2FibGUgdHJpY2tsZSBmZWVk IGFuZCBjYWxjdWxhdGUgYWxsIHdhdGVybWFya3MgdGhlIHNhbWUgd2F5LiBBbHNvCj4gdHJpY2ts ZSBmZWVkIHdvdWxkbid0IGFjY291bnQgZm9yIHRoZSAyNTZ1cyBtYXggZGVhZGxpbmUgdmFsdWUs IHRob2d1aAo+IHRoYXQgbWF5IGJlIGEgbW9vdCBwb2ludCBpbiBub24tbWF4IGZpZm8gbW9kZSBz aWNuZSB0aGUgRklGT3MgYXJlIGZhaXJseQo+IHNtYWxsLgo+IAo+IE9uIFZMViBtYXggZmlmbyBt b2RlIGNhbiBiZSB1c2VkIHdpdGggZWl0aGVyIHByaW1hcnkgb3Igc3ByaXRlIHBsYW5lcy4KPiBT byB0aGUgY29kZSBub3cgYWxzbyBjaGVja3MgYWxsIHRoZSBwbGFuZXMgKGFwYXJ0IGZyb20gdGhl IGN1cnNvcikKPiB3aGVuIGNhbGN1bGF0aW5nIHRoZSBTUiBwbGFuZSB3YXRlcm1hcmsuCj4gCj4g V2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGUgV00xIHdhdGVybWFya3Mgc2luY2Ugd2Un cmUgdXNpbmcgdGhlCj4gUE5EIGRlYWRsaW5lIHNjaGVtZSB3aGljaCBtZWFucyB0aGUgaGFyZHdh cmUgaWdub3JlcyBXTTEgdmFsdWVzLgo+IAo+IHYyOiBVc2UgcGxhbmUtPnN0YXRlLT5mYiBpbnN0 ZWFkIG9mIHBsYW5lLT5mYgo+IAo+IFNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmls bGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmggfCAgMTEgKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCB8 ICAgNCArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIHwgMzMwICsrKysrKysr KysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgMyBmaWxlcyBjaGFuZ2VkLCAxODgg aW5zZXJ0aW9ucygrKSwgMTU3IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aAo+IGluZGV4IDVkZTY5YTAuLmIxOTFiMTIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK PiBAQCAtMTUxNiw2ICsxNTE2LDE3IEBAIHN0cnVjdCBpbGtfd21fdmFsdWVzIHsKPiAgCj4gIHN0 cnVjdCB2bHZfd21fdmFsdWVzIHsKPiAgCXN0cnVjdCB7Cj4gKwkJdWludDE2X3QgcHJpbWFyeTsK PiArCQl1aW50MTZfdCBzcHJpdGVbMl07Cj4gKwkJdWludDhfdCBjdXJzb3I7Cj4gKwl9IHBpcGVb M107Cj4gKwo+ICsJc3RydWN0IHsKPiArCQl1aW50MTZfdCBwbGFuZTsKPiArCQl1aW50OF90IGN1 cnNvcjsKPiArCX0gc3I7Cj4gKwo+ICsJc3RydWN0IHsKPiAgCQl1aW50OF90IGN1cnNvcjsKPiAg CQl1aW50OF90IHNwcml0ZVsyXTsKPiAgCQl1aW50OF90IHByaW1hcnk7Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3JlZy5oCj4gaW5kZXggODE3ODYxMC4uOWY5ODM4NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9yZWcuaAo+IEBAIC00MTI3LDcgKzQxMjcsNyBAQCBlbnVtIHNrbF9kaXNwX3Bvd2VyX3dlbGxz IHsKPiAgLyogdmx2L2NodiBoaWdoIG9yZGVyIGJpdHMgKi8KPiAgI2RlZmluZSBEU1BIT1dNCQkJ KFZMVl9ESVNQTEFZX0JBU0UgKyAweDcwMDY0KQo+ICAjZGVmaW5lICAgRFNQRldfU1JfSElfU0hJ RlQJCTI0Cj4gLSNkZWZpbmUgICBEU1BGV19TUl9ISV9NQVNLCQkoMTw8MjQpCj4gKyNkZWZpbmUg ICBEU1BGV19TUl9ISV9NQVNLCQkoMzw8MjQpIC8qIDIgYml0cyBmb3IgY2h2LCAxIGZvciB2bHYg Ki8KPiAgI2RlZmluZSAgIERTUEZXX1NQUklURUZfSElfU0hJRlQJMjMKPiAgI2RlZmluZSAgIERT UEZXX1NQUklURUZfSElfTUFTSwkJKDE8PDIzKQo+ICAjZGVmaW5lICAgRFNQRldfU1BSSVRFRV9I SV9TSElGVAkyMgo+IEBAIC00MTQ4LDcgKzQxNDgsNyBAQCBlbnVtIHNrbF9kaXNwX3Bvd2VyX3dl bGxzIHsKPiAgI2RlZmluZSAgIERTUEZXX1BMQU5FQV9ISV9NQVNLCQkoMTw8MCkKPiAgI2RlZmlu ZSBEU1BIT1dNMQkJKFZMVl9ESVNQTEFZX0JBU0UgKyAweDcwMDY4KQo+ICAjZGVmaW5lICAgRFNQ RldfU1JfV00xX0hJX1NISUZUCQkyNAo+IC0jZGVmaW5lICAgRFNQRldfU1JfV00xX0hJX01BU0sJ CSgxPDwyNCkKPiArI2RlZmluZSAgIERTUEZXX1NSX1dNMV9ISV9NQVNLCQkoMzw8MjQpIC8qIDIg Yml0cyBmb3IgY2h2LCAxIGZvciB2bHYgKi8KPiAgI2RlZmluZSAgIERTUEZXX1NQUklURUZfV00x X0hJX1NISUZUCTIzCj4gICNkZWZpbmUgICBEU1BGV19TUFJJVEVGX1dNMV9ISV9NQVNLCSgxPDwy MykKPiAgI2RlZmluZSAgIERTUEZXX1NQUklURUVfV00xX0hJX1NISUZUCTIyCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9wbS5jCj4gaW5kZXggYmRiMGY1ZC4uNDk3ODQ3YyAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfcG0uYwo+IEBAIC03NzgsNiArNzc4LDU1IEBAIHN0YXRpYyB2b2lkIHZsdl93cml0ZV93 bV92YWx1ZXMoc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gIAkJICAgKHdtLT5kZGxbcGlwZV0u c3ByaXRlWzBdIDw8IERETF9TUFJJVEVfU0hJRlQoMCkpIHwKPiAgCQkgICAod20tPmRkbFtwaXBl XS5wcmltYXJ5IDw8IERETF9QTEFORV9TSElGVCkpOwo+ICAKPiArCUk5MTVfV1JJVEUoRFNQRlcx LAo+ICsJCSAgICgod20tPnNyLnBsYW5lIDw8IERTUEZXX1NSX1NISUZUKSAmIERTUEZXX1NSX01B U0spIHwKPiArCQkgICAoKHdtLT5waXBlW1BJUEVfQl0uY3Vyc29yIDw8IERTUEZXX0NVUlNPUkJf U0hJRlQpICYgRFNQRldfQ1VSU09SQl9NQVNLKSB8Cj4gKwkJICAgKCh3bS0+cGlwZVtQSVBFX0Jd LnByaW1hcnkgPDwgRFNQRldfUExBTkVCX1NISUZUKSAmIERTUEZXX1BMQU5FQl9NQVNLX1ZMVikg fAo+ICsJCSAgICgod20tPnBpcGVbUElQRV9BXS5wcmltYXJ5IDw8IERTUEZXX1BMQU5FQV9TSElG VCkgJiBEU1BGV19QTEFORUFfTUFTS19WTFYpKTsKPiArCUk5MTVfV1JJVEUoRFNQRlcyLAo+ICsJ CSAgICgod20tPnBpcGVbUElQRV9BXS5zcHJpdGVbMV0gPDwgRFNQRldfU1BSSVRFQl9TSElGVCkg JiBEU1BGV19TUFJJVEVCX01BU0tfVkxWKSB8Cj4gKwkJICAgKCh3bS0+cGlwZVtQSVBFX0FdLmN1 cnNvciA8PCBEU1BGV19DVVJTT1JBX1NISUZUKSAmIERTUEZXX0NVUlNPUkFfTUFTSykgfAo+ICsJ CSAgICgod20tPnBpcGVbUElQRV9BXS5zcHJpdGVbMF0gPDwgRFNQRldfU1BSSVRFQV9TSElGVCkg JiBEU1BGV19TUFJJVEVBX01BU0tfVkxWKSk7Cj4gKwlJOTE1X1dSSVRFKERTUEZXMywKPiArCQkg ICAoKHdtLT5zci5jdXJzb3IgPDwgRFNQRldfQ1VSU09SX1NSX1NISUZUKSAmIERTUEZXX0NVUlNP Ul9TUl9NQVNLKSk7Cj4gKwo+ICsJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7Cj4gKwkJ STkxNV9XUklURShEU1BGVzdfQ0hWLAo+ICsJCQkgICAoKHdtLT5waXBlW1BJUEVfQl0uc3ByaXRl WzFdIDw8IERTUEZXX1NQUklURURfU0hJRlQpICYgRFNQRldfU1BSSVRFRF9NQVNLKSB8Cj4gKwkJ CSAgICgod20tPnBpcGVbUElQRV9CXS5zcHJpdGVbMF0gPDwgRFNQRldfU1BSSVRFQ19TSElGVCkg JiBEU1BGV19TUFJJVEVDX01BU0spKTsKPiArCQlJOTE1X1dSSVRFKERTUEZXOF9DSFYsCj4gKwkJ CSAgICgod20tPnBpcGVbUElQRV9DXS5zcHJpdGVbMV0gPDwgRFNQRldfU1BSSVRFRl9TSElGVCkg JiBEU1BGV19TUFJJVEVGX01BU0spIHwKPiArCQkJICAgKCh3bS0+cGlwZVtQSVBFX0NdLnNwcml0 ZVswXSA8PCBEU1BGV19TUFJJVEVFX1NISUZUKSAmIERTUEZXX1NQUklURUVfTUFTSykpOwo+ICsJ CUk5MTVfV1JJVEUoRFNQRlc5X0NIViwKPiArCQkJICAgKCh3bS0+cGlwZVtQSVBFX0NdLnByaW1h cnkgPDwgRFNQRldfUExBTkVDX1NISUZUKSAmIERTUEZXX1BMQU5FQ19NQVNLKSB8Cj4gKwkJCSAg ICgod20tPnBpcGVbUElQRV9DXS5jdXJzb3IgPDwgRFNQRldfQ1VSU09SQ19TSElGVCkgJiBEU1BG V19DVVJTT1JDX01BU0spKTsKPiArCQlJOTE1X1dSSVRFKERTUEhPV00sCj4gKwkJCSAgICgoKHdt LT5zci5wbGFuZSA+PiA5KSA8PCBEU1BGV19TUl9ISV9TSElGVCkgJiBEU1BGV19TUl9ISV9NQVNL KSB8Cj4gKwkJCSAgICgoKHdtLT5waXBlW1BJUEVfQ10uc3ByaXRlWzFdID4+IDgpIDw8IERTUEZX X1NQUklURUZfSElfU0hJRlQpICYgRFNQRldfU1BSSVRFRl9ISV9NQVNLKSB8Cj4gKwkJCSAgICgo KHdtLT5waXBlW1BJUEVfQ10uc3ByaXRlWzBdID4+IDgpIDw8IERTUEZXX1NQUklURUVfSElfU0hJ RlQpICYgRFNQRldfU1BSSVRFRV9ISV9NQVNLKSB8Cj4gKwkJCSAgICgoKHdtLT5waXBlW1BJUEVf Q10ucHJpbWFyeSA+PiA4KSA8PCBEU1BGV19QTEFORUNfSElfU0hJRlQpICYgRFNQRldfUExBTkVD X0hJX01BU0spIHwKPiArCQkJICAgKCgod20tPnBpcGVbUElQRV9CXS5zcHJpdGVbMV0gPj4gOCkg PDwgRFNQRldfU1BSSVRFRF9ISV9TSElGVCkgJiBEU1BGV19TUFJJVEVEX0hJX01BU0spIHwKPiAr CQkJICAgKCgod20tPnBpcGVbUElQRV9CXS5zcHJpdGVbMF0gPj4gOCkgPDwgRFNQRldfU1BSSVRF Q19ISV9TSElGVCkgJiBEU1BGV19TUFJJVEVDX0hJX01BU0spIHwKPiArCQkJICAgKCgod20tPnBp cGVbUElQRV9CXS5wcmltYXJ5ID4+IDgpIDw8IERTUEZXX1BMQU5FQl9ISV9TSElGVCkgJiBEU1BG V19QTEFORUJfSElfTUFTSykgfAo+ICsJCQkgICAoKCh3bS0+cGlwZVtQSVBFX0FdLnNwcml0ZVsx XSA+PiA4KSA8PCBEU1BGV19TUFJJVEVCX0hJX1NISUZUKSAmIERTUEZXX1NQUklURUJfSElfTUFT SykgfAo+ICsJCQkgICAoKCh3bS0+cGlwZVtQSVBFX0FdLnNwcml0ZVswXSA+PiA4KSA8PCBEU1BG V19TUFJJVEVBX0hJX1NISUZUKSAmIERTUEZXX1NQUklURUFfSElfTUFTSykgfAo+ICsJCQkgICAo KCh3bS0+cGlwZVtQSVBFX0FdLnByaW1hcnkgPj4gOCkgPDwgRFNQRldfUExBTkVBX0hJX1NISUZU KSAmIERTUEZXX1BMQU5FQV9ISV9NQVNLKSk7Cj4gKwl9IGVsc2Ugewo+ICsJCUk5MTVfV1JJVEUo RFNQRlc3LAo+ICsJCQkgICAoKHdtLT5waXBlW1BJUEVfQl0uc3ByaXRlWzFdIDw8IERTUEZXX1NQ UklURURfU0hJRlQpICYgRFNQRldfU1BSSVRFRF9NQVNLKSB8Cj4gKwkJCSAgICgod20tPnBpcGVb UElQRV9CXS5zcHJpdGVbMF0gPDwgRFNQRldfU1BSSVRFQ19TSElGVCkgJiBEU1BGV19TUFJJVEVD X01BU0spKTsKPiArCQlJOTE1X1dSSVRFKERTUEhPV00sCj4gKwkJCSAgICgoKHdtLT5zci5wbGFu ZSA+PiA5KSA8PCBEU1BGV19TUl9ISV9TSElGVCkgJiBEU1BGV19TUl9ISV9NQVNLKSB8Cj4gKwkJ CSAgICgoKHdtLT5waXBlW1BJUEVfQl0uc3ByaXRlWzFdID4+IDgpIDw8IERTUEZXX1NQUklURURf SElfU0hJRlQpICYgRFNQRldfU1BSSVRFRF9ISV9NQVNLKSB8Cj4gKwkJCSAgICgoKHdtLT5waXBl W1BJUEVfQl0uc3ByaXRlWzBdID4+IDgpIDw8IERTUEZXX1NQUklURUNfSElfU0hJRlQpICYgRFNQ RldfU1BSSVRFQ19ISV9NQVNLKSB8Cj4gKwkJCSAgICgoKHdtLT5waXBlW1BJUEVfQl0ucHJpbWFy eSA+PiA4KSA8PCBEU1BGV19QTEFORUJfSElfU0hJRlQpICYgRFNQRldfUExBTkVCX0hJX01BU0sp IHwKPiArCQkJICAgKCgod20tPnBpcGVbUElQRV9BXS5zcHJpdGVbMV0gPj4gOCkgPDwgRFNQRldf U1BSSVRFQl9ISV9TSElGVCkgJiBEU1BGV19TUFJJVEVCX0hJX01BU0spIHwKPiArCQkJICAgKCgo d20tPnBpcGVbUElQRV9BXS5zcHJpdGVbMF0gPj4gOCkgPDwgRFNQRldfU1BSSVRFQV9ISV9TSElG VCkgJiBEU1BGV19TUFJJVEVBX0hJX01BU0spIHwKPiArCQkJICAgKCgod20tPnBpcGVbUElQRV9B XS5wcmltYXJ5ID4+IDgpIDw8IERTUEZXX1BMQU5FQV9ISV9TSElGVCkgJiBEU1BGV19QTEFORUFf SElfTUFTSykpOwoKQ2hlY2twYXRjaCBjb21wbGFpbmVkIGFib3V0IHRoaXMgY29kZSBhbmQgSSBj b25jdXIgdGhhdCBpdCdzIG5vdCBwcmV0dHkuCkNhcmUgZm9yIGEgcHJldHRpZmljYXRpb24gZm9s bG93LXVwPyBTb21lICNkZWZpbmVzIHRvIGRvIHRoZSBzaGlmdCttYXNrCndvdWxkIGhlbHAgYSBs b3QgaW1vLiBPciBtYXliZSBub3QgY29tcHV0aW5nIGV2ZXJ5dGhpbmcgaW4tcGxhY2UuCi1EYW5p ZWwKCj4gKwl9Cj4gKwo+ICsJUE9TVElOR19SRUFEKERTUEZXMSk7Cj4gKwo+ICAJZGV2X3ByaXYt PndtLnZsdiA9ICp3bTsKPiAgfQo+ICAKPiBAQCAtODIyLDE2OSArODcxLDExMyBAQCBzdGF0aWMg dWludDhfdCB2bHZfY29tcHV0ZV9kcmFpbl9sYXRlbmN5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK PiAgCQkJCURETF9QUkVDSVNJT05fSElHSCA6IERETF9QUkVDSVNJT05fTE9XKTsKPiAgfQo+ICAK PiAtLyoKPiAtICogVXBkYXRlIGRyYWluIGxhdGVuY3kgcmVnaXN0ZXJzIG9mIG1lbW9yeSBhcmJp dGVyCj4gLSAqCj4gLSAqIFZhbGxleXZpZXcgU29DIGhhcyBhIG5ldyBtZW1vcnkgYXJiaXRlciBh bmQgbmVlZHMgZHJhaW4gbGF0ZW5jeSByZWdpc3RlcnMKPiAtICogdG8gYmUgcHJvZ3JhbW1lZC4g RWFjaCBwbGFuZSBoYXMgYSBkcmFpbiBsYXRlbmN5IG11bHRpcGxpZXIgYW5kIGEgZHJhaW4KPiAt ICogbGF0ZW5jeSB2YWx1ZS4KPiAtICovCj4gLQo+IC1zdGF0aWMgdm9pZCB2bHZfdXBkYXRlX2Ry YWluX2xhdGVuY3koc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICtzdGF0aWMgaW50IHZsdl9jb21w dXRlX3dtKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ICsJCQkgIHN0cnVjdCBpbnRlbF9wbGFu ZSAqcGxhbmUsCj4gKwkJCSAgaW50IGZpZm9fc2l6ZSkKPiArewo+ICsJaW50IGNsb2NrLCBlbnRy aWVzLCBwaXhlbF9zaXplOwo+ICsKPiArCS8qCj4gKwkgKiBGSVhNRSB0aGUgcGxhbmUgbWlnaHQg aGF2ZSBhbiBmYgo+ICsJICogYnV0IGJlIGludmlzaWJsZSAoZWcuIGR1ZSB0byBjbGlwcGluZykK PiArCSAqLwo+ICsJaWYgKCFjcnRjLT5hY3RpdmUgfHwgIXBsYW5lLT5iYXNlLnN0YXRlLT5mYikK PiArCQlyZXR1cm4gMDsKPiArCj4gKwlwaXhlbF9zaXplID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAo cGxhbmUtPmJhc2Uuc3RhdGUtPmZiLT5waXhlbF9mb3JtYXQsIDApOwo+ICsJY2xvY2sgPSBjcnRj LT5jb25maWctPmJhc2UuYWRqdXN0ZWRfbW9kZS5jcnRjX2Nsb2NrOwo+ICsKPiArCWVudHJpZXMg PSBESVZfUk9VTkRfVVAoY2xvY2ssIDEwMDApICogcGl4ZWxfc2l6ZTsKPiArCj4gKwkvKgo+ICsJ ICogU2V0IHVwIHRoZSB3YXRlcm1hcmsgc3VjaCB0aGF0IHdlIGRvbid0IHN0YXJ0IGlzc3Vpbmcg bWVtb3J5Cj4gKwkgKiByZXF1ZXN0cyB1bnRpbCB3ZSBhcmUgd2l0aGluIFBORCdzIG1heCBkZWFk bGluZSB2YWx1ZSAoMjU2dXMpLgo+ICsJICogSWRlYSBiZWluZyB0byBiZSBpZGxlIGFzIGxvbmcg YXMgcG9zc2libGUgd2hpbGUgc3RpbGwgdGFraW5nCj4gKwkgKiBhZHZhdGFuZ2Ugb2YgUE5EJ3Mg ZGVhZGxpbmUgc2NoZWR1bGluZy4gVGhlIGxpbWl0IG9mIDgKPiArCSAqIGNhY2hlbGluZXMgKHVz ZWQgd2hlbiB0aGUgRklGTyB3aWxsIGFueXdheSBkcmFpbiBpbiBsZXNzIHRpbWUKPiArCSAqIHRo YW4gMjU2dXMpIHNob3VsZCBtYXRjaCB3aGF0IHdlIHdvdWxkIGJlIGRvbmUgaWYgdHJpY2tsZQo+ ICsJICogZmVlZCB3ZXJlIGVuYWJsZWQuCj4gKwkgKi8KPiArCXJldHVybiBmaWZvX3NpemUgLSBj bGFtcChESVZfUk9VTkRfVVAoMjU2ICogZW50cmllcywgNjQpLCAwLCBmaWZvX3NpemUgLSA4KTsK PiArfQo+ICsKPiArc3RhdGljIGJvb2wgdmx2X2NvbXB1dGVfc3Jfd20oc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKPiArCQkJICAgICAgc3RydWN0IHZsdl93bV92YWx1ZXMgKndtKQo+ICt7Cj4gKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gKwlzdHJ1 Y3QgZHJtX2NydGMgKmNydGM7Cj4gKwllbnVtIHBpcGUgcGlwZSA9IElOVkFMSURfUElQRTsKPiAr CWludCBudW1fcGxhbmVzID0gMDsKPiArCWludCBmaWZvX3NpemUgPSAwOwo+ICsJc3RydWN0IGlu dGVsX3BsYW5lICpwbGFuZTsKPiArCj4gKwl3bS0+c3IuY3Vyc29yID0gd20tPnNyLnBsYW5lID0g MDsKPiArCj4gKwljcnRjID0gc2luZ2xlX2VuYWJsZWRfY3J0YyhkZXYpOwo+ICsJLyogbWF4Zmlm byBub3Qgc3VwcG9ydGVkIG9uIHBpcGUgQyAqLwo+ICsJaWYgKGNydGMgJiYgdG9faW50ZWxfY3J0 YyhjcnRjKS0+cGlwZSAhPSBQSVBFX0MpIHsKPiArCQlwaXBlID0gdG9faW50ZWxfY3J0YyhjcnRj KS0+cGlwZTsKPiArCQludW1fcGxhbmVzID0gISF3bS0+cGlwZVtwaXBlXS5wcmltYXJ5ICsKPiAr CQkJISF3bS0+cGlwZVtwaXBlXS5zcHJpdGVbMF0gKwo+ICsJCQkhIXdtLT5waXBlW3BpcGVdLnNw cml0ZVsxXTsKPiArCQlmaWZvX3NpemUgPSBJTlRFTF9JTkZPKGRldl9wcml2KS0+bnVtX3BpcGVz ICogNTEyIC0gMTsKPiArCX0KPiArCj4gKwlpZiAoZmlmb19zaXplID09IDAgfHwgbnVtX3BsYW5l cyA+IDEpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCXdtLT5zci5jdXJzb3IgPSB2bHZfY29t cHV0ZV93bSh0b19pbnRlbF9jcnRjKGNydGMpLAo+ICsJCQkJICAgICAgIHRvX2ludGVsX3BsYW5l KGNydGMtPmN1cnNvciksIDB4M2YpOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkocGxhbmUs ICZkZXYtPm1vZGVfY29uZmlnLnBsYW5lX2xpc3QsIGJhc2UuaGVhZCkgewo+ICsJCWlmIChwbGFu ZS0+YmFzZS50eXBlID09IERSTV9QTEFORV9UWVBFX0NVUlNPUikKPiArCQkJY29udGludWU7Cj4g Kwo+ICsJCWlmIChwbGFuZS0+cGlwZSAhPSBwaXBlKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJ d20tPnNyLnBsYW5lID0gdmx2X2NvbXB1dGVfd20odG9faW50ZWxfY3J0YyhjcnRjKSwKPiArCQkJ CQkgICAgICBwbGFuZSwgZmlmb19zaXplKTsKPiArCQlpZiAod20tPnNyLnBsYW5lICE9IDApCj4g KwkJCWJyZWFrOwo+ICsJfQo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCB2YWxsZXl2aWV3X3VwZGF0ZV93bShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gIHsKPiAg CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICAJc3RydWN0IGludGVsX2Ny dGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ICAJZW51bSBwaXBlIHBpcGUg PSBpbnRlbF9jcnRjLT5waXBlOwo+ICsJYm9vbCBjeHNyX2VuYWJsZWQ7Cj4gIAlzdHJ1Y3Qgdmx2 X3dtX3ZhbHVlcyB3bSA9IGRldl9wcml2LT53bS52bHY7Cj4gIAo+ICAJd20uZGRsW3BpcGVdLnBy aW1hcnkgPSB2bHZfY29tcHV0ZV9kcmFpbl9sYXRlbmN5KGNydGMsIGNydGMtPnByaW1hcnkpOwo+ ICsJd20ucGlwZVtwaXBlXS5wcmltYXJ5ID0gdmx2X2NvbXB1dGVfd20oaW50ZWxfY3J0YywKPiAr CQkJCQkgICAgICAgdG9faW50ZWxfcGxhbmUoY3J0Yy0+cHJpbWFyeSksCj4gKwkJCQkJICAgICAg IHZsdl9nZXRfZmlmb19zaXplKGRldiwgcGlwZSwgMCkpOwo+ICsKPiAgCXdtLmRkbFtwaXBlXS5j dXJzb3IgPSB2bHZfY29tcHV0ZV9kcmFpbl9sYXRlbmN5KGNydGMsIGNydGMtPmN1cnNvcik7Cj4g Kwl3bS5waXBlW3BpcGVdLmN1cnNvciA9IHZsdl9jb21wdXRlX3dtKGludGVsX2NydGMsCj4gKwkJ CQkJICAgICAgdG9faW50ZWxfcGxhbmUoY3J0Yy0+Y3Vyc29yKSwKPiArCQkJCQkgICAgICAweDNm KTsKPiArCj4gKwljeHNyX2VuYWJsZWQgPSB2bHZfY29tcHV0ZV9zcl93bShkZXYsICZ3bSk7Cj4g Kwo+ICsJaWYgKG1lbWNtcCgmd20sICZkZXZfcHJpdi0+d20udmx2LCBzaXplb2Yod20pKSA9PSAw KQo+ICsJCXJldHVybjsKPiArCj4gKwlEUk1fREVCVUdfS01TKCJTZXR0aW5nIEZJRk8gd2F0ZXJt YXJrcyAtICVjOiBwbGFuZT0lZCwgY3Vyc29yPSVkLCAiCj4gKwkJICAgICAgIlNSOiBwbGFuZT0l ZCwgY3Vyc29yPSVkXG4iLCBwaXBlX25hbWUocGlwZSksCj4gKwkJICAgICAgd20ucGlwZVtwaXBl XS5wcmltYXJ5LCB3bS5waXBlW3BpcGVdLmN1cnNvciwKPiArCQkgICAgICB3bS5zci5wbGFuZSwg d20uc3IuY3Vyc29yKTsKPiArCj4gKwlpZiAoIWN4c3JfZW5hYmxlZCkKPiArCQlpbnRlbF9zZXRf bWVtb3J5X2N4c3IoZGV2X3ByaXYsIGZhbHNlKTsKPiAgCj4gIAl2bHZfd3JpdGVfd21fdmFsdWVz KGludGVsX2NydGMsICZ3bSk7Cj4gLX0KPiAtCj4gLSNkZWZpbmUgc2luZ2xlX3BsYW5lX2VuYWJs ZWQobWFzaykgaXNfcG93ZXJfb2ZfMihtYXNrKQo+IC0KPiAtc3RhdGljIHZvaWQgdmFsbGV5dmll d191cGRhdGVfd20oc3RydWN0IGRybV9jcnRjICpjcnRjKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+IC0Jc3RhdGljIGNvbnN0IGludCBzcl9sYXRlbmN5X25z ID0gMTIwMDA7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOwo+IC0JaW50IHBsYW5lYV93bSwgcGxhbmViX3dtLCBjdXJzb3JhX3dtLCBjdXJz b3JiX3dtOwo+IC0JaW50IHBsYW5lX3NyLCBjdXJzb3Jfc3I7Cj4gLQlpbnQgaWdub3JlX3BsYW5l X3NyLCBpZ25vcmVfY3Vyc29yX3NyOwo+IC0JdW5zaWduZWQgaW50IGVuYWJsZWQgPSAwOwo+IC0J Ym9vbCBjeHNyX2VuYWJsZWQ7Cj4gLQo+IC0Jdmx2X3VwZGF0ZV9kcmFpbl9sYXRlbmN5KGNydGMp Owo+IC0KPiAtCWlmIChnNHhfY29tcHV0ZV93bTAoZGV2LCBQSVBFX0EsCj4gLQkJCSAgICAmdmFs bGV5dmlld193bV9pbmZvLCBwZXNzaW1hbF9sYXRlbmN5X25zLAo+IC0JCQkgICAgJnZhbGxleXZp ZXdfY3Vyc29yX3dtX2luZm8sIHBlc3NpbWFsX2xhdGVuY3lfbnMsCj4gLQkJCSAgICAmcGxhbmVh X3dtLCAmY3Vyc29yYV93bSkpCj4gLQkJZW5hYmxlZCB8PSAxIDw8IFBJUEVfQTsKPiAtCj4gLQlp ZiAoZzR4X2NvbXB1dGVfd20wKGRldiwgUElQRV9CLAo+IC0JCQkgICAgJnZhbGxleXZpZXdfd21f aW5mbywgcGVzc2ltYWxfbGF0ZW5jeV9ucywKPiAtCQkJICAgICZ2YWxsZXl2aWV3X2N1cnNvcl93 bV9pbmZvLCBwZXNzaW1hbF9sYXRlbmN5X25zLAo+IC0JCQkgICAgJnBsYW5lYl93bSwgJmN1cnNv cmJfd20pKQo+IC0JCWVuYWJsZWQgfD0gMSA8PCBQSVBFX0I7Cj4gLQo+IC0JaWYgKHNpbmdsZV9w bGFuZV9lbmFibGVkKGVuYWJsZWQpICYmCj4gLQkgICAgZzR4X2NvbXB1dGVfc3J3bShkZXYsIGZm cyhlbmFibGVkKSAtIDEsCj4gLQkJCSAgICAgc3JfbGF0ZW5jeV9ucywKPiAtCQkJICAgICAmdmFs bGV5dmlld193bV9pbmZvLAo+IC0JCQkgICAgICZ2YWxsZXl2aWV3X2N1cnNvcl93bV9pbmZvLAo+ IC0JCQkgICAgICZwbGFuZV9zciwgJmlnbm9yZV9jdXJzb3Jfc3IpICYmCj4gLQkgICAgZzR4X2Nv bXB1dGVfc3J3bShkZXYsIGZmcyhlbmFibGVkKSAtIDEsCj4gLQkJCSAgICAgMipzcl9sYXRlbmN5 X25zLAo+IC0JCQkgICAgICZ2YWxsZXl2aWV3X3dtX2luZm8sCj4gLQkJCSAgICAgJnZhbGxleXZp ZXdfY3Vyc29yX3dtX2luZm8sCj4gLQkJCSAgICAgJmlnbm9yZV9wbGFuZV9zciwgJmN1cnNvcl9z cikpIHsKPiAtCQljeHNyX2VuYWJsZWQgPSB0cnVlOwo+IC0JfSBlbHNlIHsKPiAtCQljeHNyX2Vu YWJsZWQgPSBmYWxzZTsKPiAtCQlpbnRlbF9zZXRfbWVtb3J5X2N4c3IoZGV2X3ByaXYsIGZhbHNl KTsKPiAtCQlwbGFuZV9zciA9IGN1cnNvcl9zciA9IDA7Cj4gLQl9Cj4gLQo+IC0JRFJNX0RFQlVH X0tNUygiU2V0dGluZyBGSUZPIHdhdGVybWFya3MgLSBBOiBwbGFuZT0lZCwgY3Vyc29yPSVkLCAi Cj4gLQkJICAgICAgIkI6IHBsYW5lPSVkLCBjdXJzb3I9JWQsIFNSOiBwbGFuZT0lZCwgY3Vyc29y PSVkXG4iLAo+IC0JCSAgICAgIHBsYW5lYV93bSwgY3Vyc29yYV93bSwKPiAtCQkgICAgICBwbGFu ZWJfd20sIGN1cnNvcmJfd20sCj4gLQkJICAgICAgcGxhbmVfc3IsIGN1cnNvcl9zcik7Cj4gLQo+ IC0JSTkxNV9XUklURShEU1BGVzEsCj4gLQkJICAgKHBsYW5lX3NyIDw8IERTUEZXX1NSX1NISUZU KSB8Cj4gLQkJICAgKGN1cnNvcmJfd20gPDwgRFNQRldfQ1VSU09SQl9TSElGVCkgfAo+IC0JCSAg IChwbGFuZWJfd20gPDwgRFNQRldfUExBTkVCX1NISUZUKSB8Cj4gLQkJICAgKHBsYW5lYV93bSA8 PCBEU1BGV19QTEFORUFfU0hJRlQpKTsKPiAtCUk5MTVfV1JJVEUoRFNQRlcyLAo+IC0JCSAgIChJ OTE1X1JFQUQoRFNQRlcyKSAmIH5EU1BGV19DVVJTT1JBX01BU0spIHwKPiAtCQkgICAoY3Vyc29y YV93bSA8PCBEU1BGV19DVVJTT1JBX1NISUZUKSk7Cj4gLQlJOTE1X1dSSVRFKERTUEZXMywKPiAt CQkgICAoSTkxNV9SRUFEKERTUEZXMykgJiB+RFNQRldfQ1VSU09SX1NSX01BU0spIHwKPiAtCQkg ICAoY3Vyc29yX3NyIDw8IERTUEZXX0NVUlNPUl9TUl9TSElGVCkpOwo+IC0KPiAtCWlmIChjeHNy X2VuYWJsZWQpCj4gLQkJaW50ZWxfc2V0X21lbW9yeV9jeHNyKGRldl9wcml2LCB0cnVlKTsKPiAt fQo+IC0KPiAtc3RhdGljIHZvaWQgY2hlcnJ5dmlld191cGRhdGVfd20oc3RydWN0IGRybV9jcnRj ICpjcnRjKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+IC0J c3RhdGljIGNvbnN0IGludCBzcl9sYXRlbmN5X25zID0gMTIwMDA7Cj4gLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0JaW50IHBsYW5lYV93 bSwgcGxhbmViX3dtLCBwbGFuZWNfd207Cj4gLQlpbnQgY3Vyc29yYV93bSwgY3Vyc29yYl93bSwg Y3Vyc29yY193bTsKPiAtCWludCBwbGFuZV9zciwgY3Vyc29yX3NyOwo+IC0JaW50IGlnbm9yZV9w bGFuZV9zciwgaWdub3JlX2N1cnNvcl9zcjsKPiAtCXVuc2lnbmVkIGludCBlbmFibGVkID0gMDsK PiAtCWJvb2wgY3hzcl9lbmFibGVkOwo+IC0KPiAtCXZsdl91cGRhdGVfZHJhaW5fbGF0ZW5jeShj cnRjKTsKPiAtCj4gLQlpZiAoZzR4X2NvbXB1dGVfd20wKGRldiwgUElQRV9BLAo+IC0JCQkgICAg JnZhbGxleXZpZXdfd21faW5mbywgcGVzc2ltYWxfbGF0ZW5jeV9ucywKPiAtCQkJICAgICZ2YWxs ZXl2aWV3X2N1cnNvcl93bV9pbmZvLCBwZXNzaW1hbF9sYXRlbmN5X25zLAo+IC0JCQkgICAgJnBs YW5lYV93bSwgJmN1cnNvcmFfd20pKQo+IC0JCWVuYWJsZWQgfD0gMSA8PCBQSVBFX0E7Cj4gLQo+ IC0JaWYgKGc0eF9jb21wdXRlX3dtMChkZXYsIFBJUEVfQiwKPiAtCQkJICAgICZ2YWxsZXl2aWV3 X3dtX2luZm8sIHBlc3NpbWFsX2xhdGVuY3lfbnMsCj4gLQkJCSAgICAmdmFsbGV5dmlld19jdXJz b3Jfd21faW5mbywgcGVzc2ltYWxfbGF0ZW5jeV9ucywKPiAtCQkJICAgICZwbGFuZWJfd20sICZj dXJzb3JiX3dtKSkKPiAtCQllbmFibGVkIHw9IDEgPDwgUElQRV9COwo+IC0KPiAtCWlmIChnNHhf Y29tcHV0ZV93bTAoZGV2LCBQSVBFX0MsCj4gLQkJCSAgICAmdmFsbGV5dmlld193bV9pbmZvLCBw ZXNzaW1hbF9sYXRlbmN5X25zLAo+IC0JCQkgICAgJnZhbGxleXZpZXdfY3Vyc29yX3dtX2luZm8s IHBlc3NpbWFsX2xhdGVuY3lfbnMsCj4gLQkJCSAgICAmcGxhbmVjX3dtLCAmY3Vyc29yY193bSkp Cj4gLQkJZW5hYmxlZCB8PSAxIDw8IFBJUEVfQzsKPiAtCj4gLQlpZiAoc2luZ2xlX3BsYW5lX2Vu YWJsZWQoZW5hYmxlZCkgJiYKPiAtCSAgICBnNHhfY29tcHV0ZV9zcndtKGRldiwgZmZzKGVuYWJs ZWQpIC0gMSwKPiAtCQkJICAgICBzcl9sYXRlbmN5X25zLAo+IC0JCQkgICAgICZ2YWxsZXl2aWV3 X3dtX2luZm8sCj4gLQkJCSAgICAgJnZhbGxleXZpZXdfY3Vyc29yX3dtX2luZm8sCj4gLQkJCSAg ICAgJnBsYW5lX3NyLCAmaWdub3JlX2N1cnNvcl9zcikgJiYKPiAtCSAgICBnNHhfY29tcHV0ZV9z cndtKGRldiwgZmZzKGVuYWJsZWQpIC0gMSwKPiAtCQkJICAgICAyKnNyX2xhdGVuY3lfbnMsCj4g LQkJCSAgICAgJnZhbGxleXZpZXdfd21faW5mbywKPiAtCQkJICAgICAmdmFsbGV5dmlld19jdXJz b3Jfd21faW5mbywKPiAtCQkJICAgICAmaWdub3JlX3BsYW5lX3NyLCAmY3Vyc29yX3NyKSkgewo+ IC0JCWN4c3JfZW5hYmxlZCA9IHRydWU7Cj4gLQl9IGVsc2Ugewo+IC0JCWN4c3JfZW5hYmxlZCA9 IGZhbHNlOwo+IC0JCWludGVsX3NldF9tZW1vcnlfY3hzcihkZXZfcHJpdiwgZmFsc2UpOwo+IC0J CXBsYW5lX3NyID0gY3Vyc29yX3NyID0gMDsKPiAtCX0KPiAtCj4gLQlEUk1fREVCVUdfS01TKCJT ZXR0aW5nIEZJRk8gd2F0ZXJtYXJrcyAtIEE6IHBsYW5lPSVkLCBjdXJzb3I9JWQsICIKPiAtCQkg ICAgICAiQjogcGxhbmU9JWQsIGN1cnNvcj0lZCwgQzogcGxhbmU9JWQsIGN1cnNvcj0lZCwgIgo+ IC0JCSAgICAgICJTUjogcGxhbmU9JWQsIGN1cnNvcj0lZFxuIiwKPiAtCQkgICAgICBwbGFuZWFf d20sIGN1cnNvcmFfd20sCj4gLQkJICAgICAgcGxhbmViX3dtLCBjdXJzb3JiX3dtLAo+IC0JCSAg ICAgIHBsYW5lY193bSwgY3Vyc29yY193bSwKPiAtCQkgICAgICBwbGFuZV9zciwgY3Vyc29yX3Ny KTsKPiAtCj4gLQlJOTE1X1dSSVRFKERTUEZXMSwKPiAtCQkgICAocGxhbmVfc3IgPDwgRFNQRldf U1JfU0hJRlQpIHwKPiAtCQkgICAoY3Vyc29yYl93bSA8PCBEU1BGV19DVVJTT1JCX1NISUZUKSB8 Cj4gLQkJICAgKHBsYW5lYl93bSA8PCBEU1BGV19QTEFORUJfU0hJRlQpIHwKPiAtCQkgICAocGxh bmVhX3dtIDw8IERTUEZXX1BMQU5FQV9TSElGVCkpOwo+IC0JSTkxNV9XUklURShEU1BGVzIsCj4g LQkJICAgKEk5MTVfUkVBRChEU1BGVzIpICYgfkRTUEZXX0NVUlNPUkFfTUFTSykgfAo+IC0JCSAg IChjdXJzb3JhX3dtIDw8IERTUEZXX0NVUlNPUkFfU0hJRlQpKTsKPiAtCUk5MTVfV1JJVEUoRFNQ RlczLAo+IC0JCSAgIChJOTE1X1JFQUQoRFNQRlczKSAmIH5EU1BGV19DVVJTT1JfU1JfTUFTSykg fAo+IC0JCSAgIChjdXJzb3Jfc3IgPDwgRFNQRldfQ1VSU09SX1NSX1NISUZUKSk7Cj4gLQlJOTE1 X1dSSVRFKERTUEZXOV9DSFYsCj4gLQkJICAgKEk5MTVfUkVBRChEU1BGVzlfQ0hWKSAmIH4oRFNQ RldfUExBTkVDX01BU0sgfAo+IC0JCQkJCSAgICAgIERTUEZXX0NVUlNPUkNfTUFTSykpIHwKPiAt CQkgICAocGxhbmVjX3dtIDw8IERTUEZXX1BMQU5FQ19TSElGVCkgfAo+IC0JCSAgIChjdXJzb3Jj X3dtIDw8IERTUEZXX0NVUlNPUkNfU0hJRlQpKTsKPiAgCj4gIAlpZiAoY3hzcl9lbmFibGVkKQo+ ICAJCWludGVsX3NldF9tZW1vcnlfY3hzcihkZXZfcHJpdiwgdHJ1ZSk7Cj4gQEAgLTEwMDIsMTcg Kzk5NSw0NCBAQCBzdGF0aWMgdm9pZCB2YWxsZXl2aWV3X3VwZGF0ZV9zcHJpdGVfd20oc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsCj4gIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRv X2ludGVsX2NydGMoY3J0Yyk7Cj4gIAllbnVtIHBpcGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7 Cj4gIAlpbnQgc3ByaXRlID0gdG9faW50ZWxfcGxhbmUocGxhbmUpLT5wbGFuZTsKPiArCWJvb2wg Y3hzcl9lbmFibGVkOwo+ICAJc3RydWN0IHZsdl93bV92YWx1ZXMgd20gPSBkZXZfcHJpdi0+d20u dmx2Owo+ICAKPiAtCWlmIChlbmFibGVkKQo+ICsJaWYgKGVuYWJsZWQpIHsKPiAgCQl3bS5kZGxb cGlwZV0uc3ByaXRlW3Nwcml0ZV0gPQo+ICAJCQl2bHZfY29tcHV0ZV9kcmFpbl9sYXRlbmN5KGNy dGMsIHBsYW5lKTsKPiAtCWVsc2UKPiArCj4gKwkJd20ucGlwZVtwaXBlXS5zcHJpdGVbc3ByaXRl XSA9Cj4gKwkJCXZsdl9jb21wdXRlX3dtKGludGVsX2NydGMsCj4gKwkJCQkgICAgICAgdG9faW50 ZWxfcGxhbmUocGxhbmUpLAo+ICsJCQkJICAgICAgIHZsdl9nZXRfZmlmb19zaXplKGRldiwgcGlw ZSwgc3ByaXRlKzEpKTsKPiArCX0gZWxzZSB7Cj4gIAkJd20uZGRsW3BpcGVdLnNwcml0ZVtzcHJp dGVdID0gMDsKPiArCQl3bS5waXBlW3BpcGVdLnNwcml0ZVtzcHJpdGVdID0gMDsKPiArCX0KPiAr Cj4gKwljeHNyX2VuYWJsZWQgPSB2bHZfY29tcHV0ZV9zcl93bShkZXYsICZ3bSk7Cj4gKwo+ICsJ aWYgKG1lbWNtcCgmd20sICZkZXZfcHJpdi0+d20udmx2LCBzaXplb2Yod20pKSA9PSAwKQo+ICsJ CXJldHVybjsKPiArCj4gKwlEUk1fREVCVUdfS01TKCJTZXR0aW5nIEZJRk8gd2F0ZXJtYXJrcyAt ICVjOiBzcHJpdGUgJWM9JWQsICIKPiArCQkgICAgICAiU1I6IHBsYW5lPSVkLCBjdXJzb3I9JWRc biIsIHBpcGVfbmFtZShwaXBlKSwKPiArCQkgICAgICBzcHJpdGVfbmFtZShwaXBlLCBzcHJpdGUp LAo+ICsJCSAgICAgIHdtLnBpcGVbcGlwZV0uc3ByaXRlW3Nwcml0ZV0sCj4gKwkJICAgICAgd20u c3IucGxhbmUsIHdtLnNyLmN1cnNvcik7Cj4gKwo+ICsJaWYgKCFjeHNyX2VuYWJsZWQpCj4gKwkJ aW50ZWxfc2V0X21lbW9yeV9jeHNyKGRldl9wcml2LCBmYWxzZSk7Cj4gIAo+ICAJdmx2X3dyaXRl X3dtX3ZhbHVlcyhpbnRlbF9jcnRjLCAmd20pOwo+ICsKPiArCWlmIChjeHNyX2VuYWJsZWQpCj4g KwkJaW50ZWxfc2V0X21lbW9yeV9jeHNyKGRldl9wcml2LCB0cnVlKTsKPiAgfQo+ICAKPiArI2Rl ZmluZSBzaW5nbGVfcGxhbmVfZW5hYmxlZChtYXNrKSBpc19wb3dlcl9vZl8yKG1hc2spCj4gKwo+ ICBzdGF0aWMgdm9pZCBnNHhfdXBkYXRlX3dtKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiAgewo+ ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiBAQCAtNjQ4NSw3ICs2NTA1 LDcgQEAgdm9pZCBpbnRlbF9pbml0X3BtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAkJZWxz ZSBpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPT0gOCkKPiAgCQkJZGV2X3ByaXYtPmRpc3BsYXku aW5pdF9jbG9ja19nYXRpbmcgPSBicm9hZHdlbGxfaW5pdF9jbG9ja19nYXRpbmc7Cj4gIAl9IGVs c2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2KSkgewo+IC0JCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0 ZV93bSA9IGNoZXJyeXZpZXdfdXBkYXRlX3dtOwo+ICsJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0 ZV93bSA9IHZhbGxleXZpZXdfdXBkYXRlX3dtOwo+ICAJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0 ZV9zcHJpdGVfd20gPSB2YWxsZXl2aWV3X3VwZGF0ZV9zcHJpdGVfd207Cj4gIAkJZGV2X3ByaXYt PmRpc3BsYXkuaW5pdF9jbG9ja19nYXRpbmcgPQo+ICAJCQljaGVycnl2aWV3X2luaXRfY2xvY2tf Z2F0aW5nOwo+IC0tIAo+IDIuMC41Cj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVy LCBJbnRlbCBDb3Jwb3JhdGlvbgorNDEgKDApIDc5IDM2NSA1NyA0OCAtIGh0dHA6Ly9ibG9nLmZm d2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCklu dGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==