From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paulo Zanoni Subject: Re: [PATCH 4/6] drm/i915/gen9: Make skl_wm_level per-plane Date: Wed, 05 Oct 2016 17:33:18 -0300 Message-ID: <1475699598.2381.64.camel@intel.com> References: <1475681598-12081-1-git-send-email-cpaul@redhat.com> <1475681598-12081-5-git-send-email-cpaul@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1475681598-12081-5-git-send-email-cpaul@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 , intel-gfx@lists.freedesktop.org Cc: David Airlie , Daniel Vetter , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RW0gUXVhLCAyMDE2LTEwLTA1IMOgcyAxMTozMyAtMDQwMCwgTHl1ZGUgZXNjcmV2ZXU6Cj4gSGF2 aW5nIHNrbF93bV9sZXZlbCBjb250YWluIGFsbCBvZiB0aGUgd2F0ZXJtYXJrcyBmb3IgZWFjaCBw bGFuZSBpcwo+IGFubm95aW5nIHNpbmNlIGl0IHByZXZlbnRzIHVzIGZyb20gaGF2aW5nIGFueSBz b3J0IG9mIG9iamVjdCB0bwo+IHJlcHJlc2VudCBhIHNpbmdsZSB3YXRlcm1hcmsgbGV2ZWwsIHNv bWV0aGluZyB3ZSB0YWtlIGFkdmFudGFnZSBvZiBpbgo+IHRoZSBuZXh0IGNvbW1pdCB0byBjdXQg ZG93biBvbiBhbGwgb2YgdGhlIGNvcHkgcGFzdGUgY29kZSBpbiBoZXJlLgoKSSdkIGxpa2UgdG8g c3RhcnQgbXkgcmV2aWV3IHBvaW50aW5nIHRoYXQgSSByZWFsbHkgbGlrZSB0aGlzIHBhdGNoLiBJ CmFncmVlIHRoZSBjdXJyZW50IGZvcm0gaXMgYW5ub3lpbmcuCgpTZWUgYmVsb3cgZm9yIHNvbWUg ZGV0YWlscy4KCgo+IAo+IFNpZ25lZC1vZmYtYnk6IEx5dWRlIDxjcGF1bEByZWRoYXQuY29tPgo+ IENjOiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29t Pgo+IENjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ IENjOiBNYXR0IFJvcGVyIDxtYXR0aGV3LmQucm9wZXJAaW50ZWwuY29tPgo+IC0tLQo+IMKgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaMKgwqB8wqDCoMKgNiArLQo+IMKgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggfMKgwqDCoDYgKy0KPiDCoGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3BtLmPCoMKgfCAyMDggKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCj4gLS0t LS0tLS0tLS0tCj4gwqAzIGZpbGVzIGNoYW5nZWQsIDEwMCBpbnNlcnRpb25zKCspLCAxMjAgZGVs ZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmgKPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCBkMjZlNTk5OS4u MGY5N2Q0MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC0xNjQ4LDkgKzE2NDgs OSBAQCBzdHJ1Y3Qgc2tsX3dtX3ZhbHVlcyB7Cj4gwqB9Owo+IMKgCj4gwqBzdHJ1Y3Qgc2tsX3dt X2xldmVsIHsKPiAtCWJvb2wgcGxhbmVfZW5bSTkxNV9NQVhfUExBTkVTXTsKPiAtCXVpbnQxNl90 IHBsYW5lX3Jlc19iW0k5MTVfTUFYX1BMQU5FU107Cj4gLQl1aW50OF90IHBsYW5lX3Jlc19sW0k5 MTVfTUFYX1BMQU5FU107Cj4gKwlib29sIHBsYW5lX2VuOwo+ICsJdWludDE2X3QgcGxhbmVfcmVz X2I7Cj4gKwl1aW50OF90IHBsYW5lX3Jlc19sOwo+IMKgfTsKPiDCoAo+IMKgLyoKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rydi5oCj4gaW5kZXggMzViYTI4Mi4uZDY4NGY0ZiAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rydi5oCj4gQEAgLTQ2OCw5ICs0NjgsMTMgQEAgc3RydWN0IGludGVsX3Bp cGVfd20gewo+IMKgCWJvb2wgc3ByaXRlc19zY2FsZWQ7Cj4gwqB9Owo+IMKgCj4gLXN0cnVjdCBz a2xfcGlwZV93bSB7Cj4gK3N0cnVjdCBza2xfcGxhbmVfd20gewo+IMKgCXN0cnVjdCBza2xfd21f bGV2ZWwgd21bOF07Cj4gwqAJc3RydWN0IHNrbF93bV9sZXZlbCB0cmFuc193bTsKPiArfTsKPiAr Cj4gK3N0cnVjdCBza2xfcGlwZV93bSB7Cj4gKwlzdHJ1Y3Qgc2tsX3BsYW5lX3dtIHBsYW5lc1tJ OTE1X01BWF9QTEFORVNdOwo+IMKgCXVpbnQzMl90IGxpbmV0aW1lOwo+IMKgfTsKPiDCoAo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gaW5kZXggYWY5Njg4OC4uMjUwZjEyZCAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcG0uYwo+IEBAIC0zNjY4LDY3ICszNjY4LDUyIEBAIHN0YXRpYyBpbnQK PiDCoHNrbF9jb21wdXRlX3dtX2xldmVsKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiDCoAkJwqDCoMKgwqDCoHN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmRkYiwK PiDCoAkJwqDCoMKgwqDCoHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gKwkJwqDC oMKgwqDCoHN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUsCj4gwqAJCcKgwqDCoMKgwqBp bnQgbGV2ZWwsCj4gwqAJCcKgwqDCoMKgwqBzdHJ1Y3Qgc2tsX3dtX2xldmVsICpyZXN1bHQpCj4g wqB7Cj4gwqAJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlID0gY3N0YXRlLT5iYXNlLnN0 YXRlOwo+IMKgCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0Yyhj c3RhdGUtCj4gPmJhc2UuY3J0Yyk7Cj4gLQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKPiAtCXN0 cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmU7Cj4gLQlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKmludGVsX3BzdGF0ZTsKPiArCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJmludGVsX3Bs YW5lLT5iYXNlOwo+ICsJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICppbnRlbF9wc3RhdGUgPSBO VUxMOwo+IMKgCXVpbnQxNl90IGRkYl9ibG9ja3M7Cj4gwqAJZW51bSBwaXBlIHBpcGUgPSBpbnRl bF9jcnRjLT5waXBlOwo+IMKgCWludCByZXQ7Cj4gKwlpbnQgaSA9IHNrbF93bV9wbGFuZV9pZChp bnRlbF9wbGFuZSk7Cj4gKwo+ICsJaWYgKHN0YXRlKQo+ICsJCWludGVsX3BzdGF0ZSA9Cj4gKwkJ CWludGVsX2F0b21pY19nZXRfZXhpc3RpbmdfcGxhbmVfc3RhdGUoc3RhdGUsCj4gKwkJCQkJCQnC oMKgwqDCoMKgwqBpbnRlbF8KPiBwbGFuZSk7Cj4gwqAKPiDCoAkvKgo+IC0JwqAqIFdlJ2xsIG9u bHkgY2FsY3VsYXRlIHdhdGVybWFya3MgZm9yIHBsYW5lcyB0aGF0IGFyZQo+IGFjdHVhbGx5Cj4g LQnCoCogZW5hYmxlZCwgc28gbWFrZSBzdXJlIGFsbCBvdGhlciBwbGFuZXMgYXJlIHNldCBhcwo+ IGRpc2FibGVkLgo+ICsJwqAqIE5vdGU6IElmIHdlIHN0YXJ0IHN1cHBvcnRpbmcgbXVsdGlwbGUg cGVuZGluZyBhdG9taWMKPiBjb21taXRzIGFnYWluc3QKPiArCcKgKiB0aGUgc2FtZSBwbGFuZXMv Q1JUQydzIGluIHRoZSBmdXR1cmUsIHBsYW5lLT5zdGF0ZSB3aWxsCj4gbm8gbG9uZ2VyIGJlCj4g KwnCoCogdGhlIGNvcnJlY3QgcHJlLXN0YXRlIHRvIHVzZSBmb3IgdGhlIGNhbGN1bGF0aW9ucyBo ZXJlCj4gYW5kIHdlJ2xsCj4gKwnCoCogbmVlZCB0byBjaGFuZ2Ugd2hlcmUgd2UgZ2V0IHRoZSAn dW5jaGFuZ2VkJyBwbGFuZSBkYXRhCj4gZnJvbS4KPiArCcKgKgo+ICsJwqAqIEZvciBub3cgdGhp cyBpcyBmaW5lIGJlY2F1c2Ugd2Ugb25seSBhbGxvdyBvbmUgcXVldWVkCj4gY29tbWl0IGFnYWlu c3QKPiArCcKgKiBhIENSVEMuwqDCoEV2ZW4gaWYgdGhlIHBsYW5lIGlzbid0IG1vZGlmaWVkIGJ5 IHRoaXMKPiB0cmFuc2FjdGlvbiBhbmQgd2UKPiArCcKgKiBkb24ndCBoYXZlIGEgcGxhbmUgbG9j aywgd2Ugc3RpbGwgaGF2ZSB0aGUgQ1JUQydzIGxvY2ssCj4gc28gd2Uga25vdwo+ICsJwqAqIHRo YXQgbm8gb3RoZXIgdHJhbnNhY3Rpb25zIGFyZSByYWNpbmcgd2l0aCB1cyB0byB1cGRhdGUKPiBp dC4KPiDCoAnCoCovCj4gLQltZW1zZXQocmVzdWx0LCAwLCBzaXplb2YoKnJlc3VsdCkpOwo+IC0K PiAtCWZvcl9lYWNoX2ludGVsX3BsYW5lX21hc2soJmRldl9wcml2LT5kcm0sCj4gLQkJCQnCoMKg aW50ZWxfcGxhbmUsCj4gLQkJCQnCoMKgY3N0YXRlLT5iYXNlLnBsYW5lX21hc2spIHsKPiAtCQlp bnQgaSA9IHNrbF93bV9wbGFuZV9pZChpbnRlbF9wbGFuZSk7Cj4gLQo+IC0JCXBsYW5lID0gJmlu dGVsX3BsYW5lLT5iYXNlOwo+IC0JCWludGVsX3BzdGF0ZSA9IE5VTEw7Cj4gLQkJaWYgKHN0YXRl KQo+IC0JCQlpbnRlbF9wc3RhdGUgPQo+IC0JCQkJaW50ZWxfYXRvbWljX2dldF9leGlzdGluZ19w bGFuZV9zdGF0Cj4gZShzdGF0ZSwKPiAtCQkJCQkJCQnCoMKgwqDCoAo+IMKgwqBpbnRlbF9wbGFu ZSk7Cj4gKwlpZiAoIWludGVsX3BzdGF0ZSkKPiArCQlpbnRlbF9wc3RhdGUgPSB0b19pbnRlbF9w bGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOwo+IMKgCj4gLQkJLyoKPiAtCQnCoCogTm90ZTogSWYg d2Ugc3RhcnQgc3VwcG9ydGluZyBtdWx0aXBsZSBwZW5kaW5nCj4gYXRvbWljIGNvbW1pdHMKPiAt CQnCoCogYWdhaW5zdCB0aGUgc2FtZSBwbGFuZXMvQ1JUQydzIGluIHRoZSBmdXR1cmUsCj4gcGxh bmUtPnN0YXRlCj4gLQkJwqAqIHdpbGwgbm8gbG9uZ2VyIGJlIHRoZSBjb3JyZWN0IHByZS1zdGF0 ZSB0byB1c2UKPiBmb3IgdGhlCj4gLQkJwqAqIGNhbGN1bGF0aW9ucyBoZXJlIGFuZCB3ZSdsbCBu ZWVkIHRvIGNoYW5nZSB3aGVyZQo+IHdlIGdldCB0aGUKPiAtCQnCoCogJ3VuY2hhbmdlZCcgcGxh bmUgZGF0YSBmcm9tLgo+IC0JCcKgKgo+IC0JCcKgKiBGb3Igbm93IHRoaXMgaXMgZmluZSBiZWNh dXNlIHdlIG9ubHkgYWxsb3cgb25lCj4gcXVldWVkIGNvbW1pdAo+IC0JCcKgKiBhZ2FpbnN0IGEg Q1JUQy7CoMKgRXZlbiBpZiB0aGUgcGxhbmUgaXNuJ3QgbW9kaWZpZWQKPiBieSB0aGlzCj4gLQkJ wqAqIHRyYW5zYWN0aW9uIGFuZCB3ZSBkb24ndCBoYXZlIGEgcGxhbmUgbG9jaywgd2UKPiBzdGls bCBoYXZlCj4gLQkJwqAqIHRoZSBDUlRDJ3MgbG9jaywgc28gd2Uga25vdyB0aGF0IG5vIG90aGVy Cj4gdHJhbnNhY3Rpb25zIGFyZQo+IC0JCcKgKiByYWNpbmcgd2l0aCB1cyB0byB1cGRhdGUgaXQu Cj4gLQkJwqAqLwo+IC0JCWlmICghaW50ZWxfcHN0YXRlKQo+IC0JCQlpbnRlbF9wc3RhdGUgPSB0 b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0KPiA+c3RhdGUpOwo+ICsJV0FSTl9PTighaW50ZWxf cHN0YXRlLT5iYXNlLmZiKTsKPiDCoAo+IC0JCVdBUk5fT04oIWludGVsX3BzdGF0ZS0+YmFzZS5m Yik7Cj4gKwlkZGJfYmxvY2tzID0gc2tsX2RkYl9lbnRyeV9zaXplKCZkZGItPnBsYW5lW3BpcGVd W2ldKTsKPiDCoAo+IC0JCWRkYl9ibG9ja3MgPSBza2xfZGRiX2VudHJ5X3NpemUoJmRkYi0KPiA+ cGxhbmVbcGlwZV1baV0pOwo+IC0KPiAtCQlyZXQgPSBza2xfY29tcHV0ZV9wbGFuZV93bShkZXZf cHJpdiwKPiAtCQkJCQnCoMKgwqBjc3RhdGUsCj4gLQkJCQkJwqDCoMKgaW50ZWxfcHN0YXRlLAo+ IC0JCQkJCcKgwqDCoGRkYl9ibG9ja3MsCj4gLQkJCQkJwqDCoMKgbGV2ZWwsCj4gLQkJCQkJwqDC oMKgJnJlc3VsdC0+cGxhbmVfcmVzX2JbaV0sCj4gLQkJCQkJwqDCoMKgJnJlc3VsdC0+cGxhbmVf cmVzX2xbaV0sCj4gLQkJCQkJwqDCoMKgJnJlc3VsdC0+cGxhbmVfZW5baV0pOwo+IC0JCWlmIChy ZXQpCj4gLQkJCXJldHVybiByZXQ7Cj4gLQl9Cj4gKwlyZXQgPSBza2xfY29tcHV0ZV9wbGFuZV93 bShkZXZfcHJpdiwKPiArCQkJCcKgwqDCoGNzdGF0ZSwKPiArCQkJCcKgwqDCoGludGVsX3BzdGF0 ZSwKPiArCQkJCcKgwqDCoGRkYl9ibG9ja3MsCj4gKwkJCQnCoMKgwqBsZXZlbCwKPiArCQkJCcKg wqDCoCZyZXN1bHQtPnBsYW5lX3Jlc19iLAo+ICsJCQkJwqDCoMKgJnJlc3VsdC0+cGxhbmVfcmVz X2wsCj4gKwkJCQnCoMKgwqAmcmVzdWx0LT5wbGFuZV9lbik7Cj4gKwlpZiAocmV0KQo+ICsJCXJl dHVybiByZXQ7Cj4gwqAKPiDCoAlyZXR1cm4gMDsKPiDCoH0KPiBAQCAtMzc0OSwxOSArMzczNCwx MSBAQCBza2xfY29tcHV0ZV9saW5ldGltZV93bShzdHJ1Y3QKPiBpbnRlbF9jcnRjX3N0YXRlICpj c3RhdGUpCj4gwqBzdGF0aWMgdm9pZCBza2xfY29tcHV0ZV90cmFuc2l0aW9uX3dtKHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlCj4gKmNzdGF0ZSwKPiDCoAkJCQnCoMKgwqDCoMKgwqBzdHJ1Y3Qgc2ts X3dtX2xldmVsICp0cmFuc193bQo+IC8qIG91dCAqLykKPiDCoHsKPiAtCXN0cnVjdCBkcm1fY3J0 YyAqY3J0YyA9IGNzdGF0ZS0+YmFzZS5jcnRjOwo+IC0Jc3RydWN0IGludGVsX2NydGMgKmludGVs X2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+IC0Jc3RydWN0IGludGVsX3BsYW5lICppbnRl bF9wbGFuZTsKPiAtCj4gwqAJaWYgKCFjc3RhdGUtPmJhc2UuYWN0aXZlKQo+IMKgCQlyZXR1cm47 Cj4gwqAKPiDCoAkvKiBVbnRpbCB3ZSBrbm93IG1vcmUsIGp1c3QgZGlzYWJsZSB0cmFuc2l0aW9u IFdNcyAqLwo+IC0JZm9yX2VhY2hfaW50ZWxfcGxhbmVfb25fY3J0YyhjcnRjLT5kZXYsIGludGVs X2NydGMsCj4gaW50ZWxfcGxhbmUpIHsKPiAtCQlpbnQgaSA9IHNrbF93bV9wbGFuZV9pZChpbnRl bF9wbGFuZSk7Cj4gLQo+IC0JCXRyYW5zX3dtLT5wbGFuZV9lbltpXSA9IGZhbHNlOwo+IC0JfQo+ ICsJdHJhbnNfd20tPnBsYW5lX2VuID0gZmFsc2U7Cj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyBpbnQg c2tsX2J1aWxkX3BpcGVfd20oc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPiBAQCAt Mzc3MCwxOSArMzc0NywzMyBAQCBzdGF0aWMgaW50IHNrbF9idWlsZF9waXBlX3dtKHN0cnVjdAo+ IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKPiDCoHsKPiDCoAlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gY3N0YXRlLT5iYXNlLmNydGMtPmRldjsKPiDCoAljb25zdCBzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gKwlzdHJ1Y3QgaW50ZWxfcGxhbmUg KmludGVsX3BsYW5lOwo+ICsJc3RydWN0IHNrbF9wbGFuZV93bSAqd207Cj4gwqAJaW50IGxldmVs LCBtYXhfbGV2ZWwgPSBpbGtfd21fbWF4X2xldmVsKGRldik7Cj4gwqAJaW50IHJldDsKPiDCoAo+ IC0JZm9yIChsZXZlbCA9IDA7IGxldmVsIDw9IG1heF9sZXZlbDsgbGV2ZWwrKykgewo+IC0JCXJl dCA9IHNrbF9jb21wdXRlX3dtX2xldmVsKGRldl9wcml2LCBkZGIsIGNzdGF0ZSwKPiAtCQkJCQnC oMKgwqBsZXZlbCwgJnBpcGVfd20tCj4gPndtW2xldmVsXSk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJ cmV0dXJuIHJldDsKPiArCS8qCj4gKwnCoCogV2UnbGwgb25seSBjYWxjdWxhdGUgd2F0ZXJtYXJr cyBmb3IgcGxhbmVzIHRoYXQgYXJlCj4gYWN0dWFsbHkKPiArCcKgKiBlbmFibGVkLCBzbyBtYWtl IHN1cmUgYWxsIG90aGVyIHBsYW5lcyBhcmUgc2V0IGFzCj4gZGlzYWJsZWQuCj4gKwnCoCovCj4g KwltZW1zZXQocGlwZV93bS0+cGxhbmVzLCAwLCBzaXplb2YocGlwZV93bS0+cGxhbmVzKSk7Cj4g Kwo+ICsJZm9yX2VhY2hfaW50ZWxfcGxhbmVfbWFzaygmZGV2X3ByaXYtPmRybSwKPiArCQkJCcKg wqBpbnRlbF9wbGFuZSwKPiArCQkJCcKgwqBjc3RhdGUtPmJhc2UucGxhbmVfbWFzaykgewo+ICsJ CXdtID0gJnBpcGVfd20tPnBsYW5lc1tza2xfd21fcGxhbmVfaWQoaW50ZWxfcGxhbmUpXTsKPiAr Cj4gKwkJZm9yIChsZXZlbCA9IDA7IGxldmVsIDw9IG1heF9sZXZlbDsgbGV2ZWwrKykgewo+ICsJ CQlyZXQgPSBza2xfY29tcHV0ZV93bV9sZXZlbChkZXZfcHJpdiwgZGRiLAo+IGNzdGF0ZSwKPiAr CQkJCQkJwqDCoMKgaW50ZWxfcGxhbmUsCj4gbGV2ZWwsCj4gKwkJCQkJCcKgwqDCoCZ3bS0+d21b bGV2ZWxdKTsKPiArCQkJaWYgKHJldCkKPiArCQkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ICsJCXNr bF9jb21wdXRlX3RyYW5zaXRpb25fd20oY3N0YXRlLCAmd20tPnRyYW5zX3dtKTsKPiDCoAl9Cj4g wqAJcGlwZV93bS0+bGluZXRpbWUgPSBza2xfY29tcHV0ZV9saW5ldGltZV93bShjc3RhdGUpOwo+ IMKgCj4gLQlza2xfY29tcHV0ZV90cmFuc2l0aW9uX3dtKGNzdGF0ZSwgJnBpcGVfd20tPnRyYW5z X3dtKTsKPiAtCj4gwqAJcmV0dXJuIDA7Cj4gwqB9Cj4gwqAKPiBAQCAtMzc5Miw1MCArMzc4Myw1 NiBAQCBzdGF0aWMgdm9pZCBza2xfY29tcHV0ZV93bV9yZXN1bHRzKHN0cnVjdAo+IGRybV9kZXZp Y2UgKmRldiwKPiDCoAkJCQnCoMKgwqBzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YykKPiDC oHsKPiDCoAlpbnQgbGV2ZWwsIG1heF9sZXZlbCA9IGlsa193bV9tYXhfbGV2ZWwoZGV2KTsKPiAr CXN0cnVjdCBza2xfcGxhbmVfd20gKnBsYW5lX3dtOwo+IMKgCWVudW0gcGlwZSBwaXBlID0gaW50 ZWxfY3J0Yy0+cGlwZTsKPiDCoAl1aW50MzJfdCB0ZW1wOwo+IMKgCWludCBpOwo+IMKgCj4gLQlm b3IgKGxldmVsID0gMDsgbGV2ZWwgPD0gbWF4X2xldmVsOyBsZXZlbCsrKSB7Cj4gLQkJZm9yIChp ID0gMDsgaSA8IGludGVsX251bV9wbGFuZXMoaW50ZWxfY3J0Yyk7IGkrKykgewo+ICsJZm9yIChp ID0gMDsgaSA8IGludGVsX251bV9wbGFuZXMoaW50ZWxfY3J0Yyk7IGkrKykgewo+ICsJCXBsYW5l X3dtID0gJnBfd20tPnBsYW5lc1tpXTsKPiArCj4gKwkJZm9yIChsZXZlbCA9IDA7IGxldmVsIDw9 IG1heF9sZXZlbDsgbGV2ZWwrKykgewo+IMKgCQkJdGVtcCA9IDA7Cj4gwqAKPiAtCQkJdGVtcCB8 PSBwX3dtLT53bVtsZXZlbF0ucGxhbmVfcmVzX2xbaV0gPDwKPiArCQkJdGVtcCB8PSBwbGFuZV93 bS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19sIDw8Cj4gwqAJCQkJCVBMQU5FX1dNX0xJTkVTX1NISUZU Owo+IC0JCQl0ZW1wIHw9IHBfd20tPndtW2xldmVsXS5wbGFuZV9yZXNfYltpXTsKPiAtCQkJaWYg KHBfd20tPndtW2xldmVsXS5wbGFuZV9lbltpXSkKPiArCQkJdGVtcCB8PSBwbGFuZV93bS0+d21b bGV2ZWxdLnBsYW5lX3Jlc19iOwo+ICsJCQlpZiAocGxhbmVfd20tPndtW2xldmVsXS5wbGFuZV9l bikKPiDCoAkJCQl0ZW1wIHw9IFBMQU5FX1dNX0VOOwo+IMKgCj4gwqAJCQlyLT5wbGFuZVtwaXBl XVtpXVtsZXZlbF0gPSB0ZW1wOwo+IMKgCQl9Cj4gwqAKPiAtCQl0ZW1wID0gMDsKPiAtCj4gLQkJ dGVtcCB8PSBwX3dtLT53bVtsZXZlbF0ucGxhbmVfcmVzX2xbUExBTkVfQ1VSU09SXSA8PAo+IFBM QU5FX1dNX0xJTkVTX1NISUZUOwo+IC0JCXRlbXAgfD0gcF93bS0+d21bbGV2ZWxdLnBsYW5lX3Jl c19iW1BMQU5FX0NVUlNPUl07Cj4gKwl9Cj4gwqAKPiAtCQlpZiAocF93bS0+d21bbGV2ZWxdLnBs YW5lX2VuW1BMQU5FX0NVUlNPUl0pCj4gKwlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPD0gbWF4X2xl dmVsOyBsZXZlbCsrKSB7Cj4gKwkJcGxhbmVfd20gPSAmcF93bS0+cGxhbmVzW1BMQU5FX0NVUlNP Ul07Cj4gKwkJdGVtcCA9IDA7Cj4gKwkJdGVtcCB8PSBwbGFuZV93bS0+d21bbGV2ZWxdLnBsYW5l X3Jlc19sIDw8Cj4gUExBTkVfV01fTElORVNfU0hJRlQ7Cj4gKwkJdGVtcCB8PSBwbGFuZV93bS0+ d21bbGV2ZWxdLnBsYW5lX3Jlc19iOwo+ICsJCWlmIChwbGFuZV93bS0+d21bbGV2ZWxdLnBsYW5l X2VuKQo+IMKgCQkJdGVtcCB8PSBQTEFORV9XTV9FTjsKPiDCoAo+IMKgCQlyLT5wbGFuZVtwaXBl XVtQTEFORV9DVVJTT1JdW2xldmVsXSA9IHRlbXA7Cj4gLQo+IMKgCX0KPiDCoAo+IMKgCS8qIHRy YW5zaXRpb24gV01zICovCj4gwqAJZm9yIChpID0gMDsgaSA8IGludGVsX251bV9wbGFuZXMoaW50 ZWxfY3J0Yyk7IGkrKykgewo+ICsJCXBsYW5lX3dtID0gJnBfd20tPnBsYW5lc1tpXTsKPiDCoAkJ dGVtcCA9IDA7Cj4gLQkJdGVtcCB8PSBwX3dtLT50cmFuc193bS5wbGFuZV9yZXNfbFtpXSA8PAo+ IFBMQU5FX1dNX0xJTkVTX1NISUZUOwo+IC0JCXRlbXAgfD0gcF93bS0+dHJhbnNfd20ucGxhbmVf cmVzX2JbaV07Cj4gLQkJaWYgKHBfd20tPnRyYW5zX3dtLnBsYW5lX2VuW2ldKQo+ICsJCXRlbXAg fD0gcGxhbmVfd20tPnRyYW5zX3dtLnBsYW5lX3Jlc19sIDw8Cj4gUExBTkVfV01fTElORVNfU0hJ RlQ7Cj4gKwkJdGVtcCB8PSBwbGFuZV93bS0+dHJhbnNfd20ucGxhbmVfcmVzX2I7Cj4gKwkJaWYg KHBsYW5lX3dtLT50cmFuc193bS5wbGFuZV9lbikKPiDCoAkJCXRlbXAgfD0gUExBTkVfV01fRU47 Cj4gwqAKPiDCoAkJci0+cGxhbmVfdHJhbnNbcGlwZV1baV0gPSB0ZW1wOwo+IMKgCX0KPiDCoAo+ ICsJcGxhbmVfd20gPSAmcF93bS0+cGxhbmVzW1BMQU5FX0NVUlNPUl07Cj4gwqAJdGVtcCA9IDA7 Cj4gLQl0ZW1wIHw9IHBfd20tPnRyYW5zX3dtLnBsYW5lX3Jlc19sW1BMQU5FX0NVUlNPUl0gPDwK PiBQTEFORV9XTV9MSU5FU19TSElGVDsKPiAtCXRlbXAgfD0gcF93bS0+dHJhbnNfd20ucGxhbmVf cmVzX2JbUExBTkVfQ1VSU09SXTsKPiAtCWlmIChwX3dtLT50cmFuc193bS5wbGFuZV9lbltQTEFO RV9DVVJTT1JdKQo+ICsJdGVtcCB8PSBwbGFuZV93bS0+dHJhbnNfd20ucGxhbmVfcmVzX2wgPDwK PiBQTEFORV9XTV9MSU5FU19TSElGVDsKPiArCXRlbXAgfD0gcGxhbmVfd20tPnRyYW5zX3dtLnBs YW5lX3Jlc19iOwo+ICsJaWYgKHBsYW5lX3dtLT50cmFuc193bS5wbGFuZV9lbikKPiDCoAkJdGVt cCB8PSBQTEFORV9XTV9FTjsKPiDCoAo+IMKgCXItPnBsYW5lX3RyYW5zW3BpcGVdW1BMQU5FX0NV UlNPUl0gPSB0ZW1wOwo+IEBAIC00MjYyLDQ0ICs0MjU5LDI0IEBAIHN0YXRpYyB2b2lkIGlsa19v cHRpbWl6ZV93YXRlcm1hcmtzKHN0cnVjdAo+IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSkKPiDC oHN0YXRpYyB2b2lkIHNrbF9waXBlX3dtX2FjdGl2ZV9zdGF0ZSh1aW50MzJfdCB2YWwsCj4gwqAJ CQkJwqDCoMKgwqDCoHN0cnVjdCBza2xfcGlwZV93bSAqYWN0aXZlLAo+IMKgCQkJCcKgwqDCoMKg wqBib29sIGlzX3RyYW5zd20sCj4gLQkJCQnCoMKgwqDCoMKgYm9vbCBpc19jdXJzb3IsCj4gwqAJ CQkJwqDCoMKgwqDCoGludCBpLAo+IMKgCQkJCcKgwqDCoMKgwqBpbnQgbGV2ZWwpCj4gwqB7Cj4g KwlzdHJ1Y3Qgc2tsX3BsYW5lX3dtICpwbGFuZV93bSA9ICZhY3RpdmUtPnBsYW5lc1tpXTsKPiDC oAlib29sIGlzX2VuYWJsZWQgPSAodmFsICYgUExBTkVfV01fRU4pICE9IDA7Cj4gwqAKPiDCoAlp ZiAoIWlzX3RyYW5zd20pIHsKPiAtCQlpZiAoIWlzX2N1cnNvcikgewo+IC0JCQlhY3RpdmUtPndt W2xldmVsXS5wbGFuZV9lbltpXSA9IGlzX2VuYWJsZWQ7Cj4gLQkJCWFjdGl2ZS0+d21bbGV2ZWxd LnBsYW5lX3Jlc19iW2ldID0KPiAtCQkJCQl2YWwgJiBQTEFORV9XTV9CTE9DS1NfTUFTSzsKPiAt CQkJYWN0aXZlLT53bVtsZXZlbF0ucGxhbmVfcmVzX2xbaV0gPQo+IC0JCQkJCSh2YWwgPj4KPiBQ TEFORV9XTV9MSU5FU19TSElGVCkgJgo+IC0JCQkJCQlQTEFORV9XTV9MSU5FU19NQVNLOwo+IC0J CX0gZWxzZSB7Cj4gLQkJCWFjdGl2ZS0+d21bbGV2ZWxdLnBsYW5lX2VuW1BMQU5FX0NVUlNPUl0g PQo+IGlzX2VuYWJsZWQ7Cj4gLQkJCWFjdGl2ZS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19iW1BMQU5F X0NVUlNPUl0KPiA9Cj4gLQkJCQkJdmFsICYgUExBTkVfV01fQkxPQ0tTX01BU0s7Cj4gLQkJCWFj dGl2ZS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19sW1BMQU5FX0NVUlNPUl0KPiA9Cj4gLQkJCQkJKHZh bCA+Pgo+IFBMQU5FX1dNX0xJTkVTX1NISUZUKSAmCj4gLQkJCQkJCVBMQU5FX1dNX0xJTkVTX01B U0s7Cj4gLQkJfQo+ICsJCXBsYW5lX3dtLT53bVtsZXZlbF0ucGxhbmVfZW4gPSBpc19lbmFibGVk Owo+ICsJCXBsYW5lX3dtLT53bVtsZXZlbF0ucGxhbmVfcmVzX2IgPSB2YWwgJgo+IFBMQU5FX1dN X0JMT0NLU19NQVNLOwo+ICsJCXBsYW5lX3dtLT53bVtsZXZlbF0ucGxhbmVfcmVzX2wgPQo+ICsJ CQkodmFsID4+IFBMQU5FX1dNX0xJTkVTX1NISUZUKSAmCj4gKwkJCVBMQU5FX1dNX0xJTkVTX01B U0s7CgpOaXRwaWNrOiB5b3UgY2FuIGpvaW4gdGhlIHR3byBsaW5lcyBhYm92ZSBhbmQgc3RpbGwg c3RheSB1bmRlciA4MApjb2x1bW5zLgoKCj4gwqAJfSBlbHNlIHsKPiAtCQlpZiAoIWlzX2N1cnNv cikgewo+IC0JCQlhY3RpdmUtPnRyYW5zX3dtLnBsYW5lX2VuW2ldID0gaXNfZW5hYmxlZDsKPiAt CQkJYWN0aXZlLT50cmFuc193bS5wbGFuZV9yZXNfYltpXSA9Cj4gLQkJCQkJdmFsICYgUExBTkVf V01fQkxPQ0tTX01BU0s7Cj4gLQkJCWFjdGl2ZS0+dHJhbnNfd20ucGxhbmVfcmVzX2xbaV0gPQo+ IC0JCQkJCSh2YWwgPj4KPiBQTEFORV9XTV9MSU5FU19TSElGVCkgJgo+IC0JCQkJCQlQTEFORV9X TV9MSU5FU19NQVNLOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCWFjdGl2ZS0+dHJhbnNfd20ucGxhbmVf ZW5bUExBTkVfQ1VSU09SXSA9Cj4gaXNfZW5hYmxlZDsKPiAtCQkJYWN0aXZlLT50cmFuc193bS5w bGFuZV9yZXNfYltQTEFORV9DVVJTT1JdID0KPiAtCQkJCQl2YWwgJiBQTEFORV9XTV9CTE9DS1Nf TUFTSzsKPiAtCQkJYWN0aXZlLT50cmFuc193bS5wbGFuZV9yZXNfbFtQTEFORV9DVVJTT1JdID0K PiAtCQkJCQkodmFsID4+Cj4gUExBTkVfV01fTElORVNfU0hJRlQpICYKPiAtCQkJCQkJUExBTkVf V01fTElORVNfTUFTSzsKPiAtCQl9Cj4gKwkJcGxhbmVfd20tPnRyYW5zX3dtLnBsYW5lX2VuID0g aXNfZW5hYmxlZDsKPiArCQlwbGFuZV93bS0+dHJhbnNfd20ucGxhbmVfcmVzX2IgPSB2YWwgJgo+ IFBMQU5FX1dNX0JMT0NLU19NQVNLOwo+ICsJCXBsYW5lX3dtLT50cmFuc193bS5wbGFuZV9yZXNf bCA9Cj4gKwkJCSh2YWwgPj4gUExBTkVfV01fTElORVNfU0hJRlQpICYKPiArCQkJUExBTkVfV01f TElORVNfTUFTSzsKClNhbWUgaGVyZS4KCgo+IMKgCX0KPiDCoH0KPiDCoAo+IEBAIC00MzM4LDIw ICs0MzE1LDE5IEBAIHN0YXRpYyB2b2lkIHNrbF9waXBlX3dtX2dldF9od19zdGF0ZShzdHJ1Y3QK PiBkcm1fY3J0YyAqY3J0YykKPiDCoAlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPD0gbWF4X2xldmVs OyBsZXZlbCsrKSB7Cj4gwqAJCWZvciAoaSA9IDA7IGkgPCBpbnRlbF9udW1fcGxhbmVzKGludGVs X2NydGMpOyBpKyspIHsKPiDCoAkJCXRlbXAgPSBody0+cGxhbmVbcGlwZV1baV1bbGV2ZWxdOwo+ IC0JCQlza2xfcGlwZV93bV9hY3RpdmVfc3RhdGUodGVtcCwgYWN0aXZlLAo+IGZhbHNlLAo+IC0J CQkJCQlmYWxzZSwgaSwgbGV2ZWwpOwo+ICsJCQlza2xfcGlwZV93bV9hY3RpdmVfc3RhdGUodGVt cCwgYWN0aXZlLAo+IGZhbHNlLCBpLCBsZXZlbCk7Cj4gwqAJCX0KPiDCoAkJdGVtcCA9IGh3LT5w bGFuZVtwaXBlXVtQTEFORV9DVVJTT1JdW2xldmVsXTsKPiAtCQlza2xfcGlwZV93bV9hY3RpdmVf c3RhdGUodGVtcCwgYWN0aXZlLCBmYWxzZSwgdHJ1ZSwKPiBpLCBsZXZlbCk7Cj4gKwkJc2tsX3Bp cGVfd21fYWN0aXZlX3N0YXRlKHRlbXAsIGFjdGl2ZSwgZmFsc2UsIGksCj4gbGV2ZWwpOwoKV2hp bGUgdGhpcyBpcyBub3Qgd3JvbmcgdG9kYXksIGhpc3Rvcnkgc2hvd3MgdGhhdCB0aGUgbnVtYmVy IG9mIHBsYW5lcwppbmNyZWFzZXMgb3ZlciB0aW1lLCBzbyB3ZSBtYXkgYXQgc29tZSBwb2ludCBp biB0aGUgZnV0dXJlIGFkZCBQTEFORV9ECmFuZCBtb3JlLCBzbyB0aGUgY29kZSB3aWxsIGJlY29t ZSB3cm9uZy4gSnVzdCBwYXNzIFBMQU5FX0NVUlNPUiBpbnN0ZWFkCm9mICJpIiBoZXJlIGFuZCBi ZWxvdy4gQWxzbywgdGhpcyBzaW1wbGlmaWNhdGlvbiBjb3VsZCBoYXZlIGJlZW4gYQpzZXBhcmF0 ZSBwYXRjaC4KCkV2ZXJ5dGhpbmcgZWxzZSBsb29rcyBjb3JyZWN0LCBzbyBpZiB5b3UgZml4IHRo ZSBkZXRhaWwgYWJvdmUgSSdsbApwcm92aWRlIGEgci1iIHRhZy4KCgo+IMKgCX0KPiDCoAo+IMKg CWZvciAoaSA9IDA7IGkgPCBpbnRlbF9udW1fcGxhbmVzKGludGVsX2NydGMpOyBpKyspIHsKPiDC oAkJdGVtcCA9IGh3LT5wbGFuZV90cmFuc1twaXBlXVtpXTsKPiAtCQlza2xfcGlwZV93bV9hY3Rp dmVfc3RhdGUodGVtcCwgYWN0aXZlLCB0cnVlLCBmYWxzZSwKPiBpLCAwKTsKPiArCQlza2xfcGlw ZV93bV9hY3RpdmVfc3RhdGUodGVtcCwgYWN0aXZlLCB0cnVlLCBpLCAwKTsKPiDCoAl9Cj4gwqAK PiDCoAl0ZW1wID0gaHctPnBsYW5lX3RyYW5zW3BpcGVdW1BMQU5FX0NVUlNPUl07Cj4gLQlza2xf cGlwZV93bV9hY3RpdmVfc3RhdGUodGVtcCwgYWN0aXZlLCB0cnVlLCB0cnVlLCBpLCAwKTsKPiAr CXNrbF9waXBlX3dtX2FjdGl2ZV9zdGF0ZSh0ZW1wLCBhY3RpdmUsIHRydWUsIGksIDApOwo+IMKg Cj4gwqAJaW50ZWxfY3J0Yy0+d20uYWN0aXZlLnNrbCA9ICphY3RpdmU7Cj4gwqB9Cl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=