From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: Re: [PATCH 1/2] drm/i915: Canonicalize stolen memory calculations Date: Wed, 27 Apr 2016 13:50:39 +0300 Message-ID: <1461754239.3986.30.camel@linux.intel.com> References: <1461324307-16019-1-git-send-email-joonas.lahtinen@linux.intel.com> <1461324307-16019-2-git-send-email-joonas.lahtinen@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 423B76EA5C for ; Wed, 27 Apr 2016 10:49:17 +0000 (UTC) In-Reply-To: <1461324307-16019-2-git-send-email-joonas.lahtinen@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: Intel graphics driver community testing & development Cc: x86@kernel.org, Ingo Molnar , "H. Peter Anvin" , Thomas Gleixner , Mika Kuoppala List-Id: intel-gfx@lists.freedesktop.org SGksCgpBZGRpbmcgeDg2IG1haW50YWluZXJzIGFzIENDIGFzIHRoZXkgd2VyZSBtaXNzaW5nIGZy b20gdGhlIG9yaWdpbmFsCnBhdGNoIGR1ZSB0byBzb21lIGNvbmZ1c2lvbiBpbiBiZXN0IHByYWN0 aWNlcy4KClRoaXMgcGF0Y2ggd2FzIG1lcmdlZCB0byB0aGUgZHJtLWludGVsLmdpdCBhZnRlciBy ZXZpZXdpbmcgYW5kIHRlc3RpbmcuCgpSZWdhcmRzLCBKb29uYXMKCk9uIHBlLCAyMDE2LTA0LTIy IGF0IDE0OjI1ICswMzAwLCBKb29uYXMgTGFodGluZW4gd3JvdGU6Cj4gTW92ZSB0aGUgYmV0dGVy IGNvbnN0cnVjdHMvY29tbWVudHMgZnJvbSBpOTE1X2dlbV9zdG9sZW4uYyB0bwo+IGVhcmx5LXF1 aXJrcy5jIGFuZCBpbmNyZWFzZSByZWFkYWJpbGl0eSBpbiBwcmVwYXJhdGlvbiBvZiBvbmx5Cj4g aGF2aW5nIG9uZSBzZXQgb2YgZnVuY3Rpb25zLgo+IAo+IC0gaW50ZWxfc3RvbGVuX2Jhc2UgLT4g Z2VuM19zdG9sZW5fYmFzZQo+IC0gdXNlIHBoeXNfYWRkcl90IGluc3RlYWQgb2YgdTMyIGZvciBh ZGRyZXNzIGZvciBmdXR1cmUgcHJvb2ZpbmcKPiAKPiBDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0Bj aHJpcy13aWxzb24uY28udWs+Cj4gQ2M6IE1pa2EgS3VvcHBhbGEgPG1pa2Eua3VvcHBhbGFAaW50 ZWwuY29tPgo+IENjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwu Y29tPgo+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AbGludXguaW50ZWwuY29t Pgo+IFNpZ25lZC1vZmYtYnk6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4 LmludGVsLmNvbT4KPiAtLS0KPiDCoGFyY2gveDg2L2tlcm5lbC9lYXJseS1xdWlya3MuY8KgwqDC oMKgwqDCoMKgwqDCoHwgMjM0ICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQo+IMKg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMgfMKgwqDCoDQgKy0KPiDCoGlu Y2x1ZGUvZHJtL2k5MTVfZHJtLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKg wqDCoDMgKwo+IMKgMyBmaWxlcyBjaGFuZ2VkLCAxMDkgaW5zZXJ0aW9ucygrKSwgMTMyIGRlbGV0 aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZWFybHktcXVpcmtzLmMg Yi9hcmNoL3g4Ni9rZXJuZWwvZWFybHktcXVpcmtzLmMKPiBpbmRleCBiY2ExNGM4Li5mMTY5NDc1 IDEwMDY0NAo+IC0tLSBhL2FyY2gveDg2L2tlcm5lbC9lYXJseS1xdWlya3MuYwo+ICsrKyBiL2Fy Y2gveDg2L2tlcm5lbC9lYXJseS1xdWlya3MuYwo+IEBAIC0yMjMsMzYgKzIyMywxOSBAQCBzdGF0 aWMgdm9pZCBfX2luaXQgaW50ZWxfcmVtYXBwaW5nX2NoZWNrKGludCBudW0sIGludCBzbG90LCBp bnQgZnVuYykKPiDCoCAqIGRlc3BpdGUgdGhlIGVmZm9ydHMgb2YgdGhlICJSQU0gYnVmZmVyIiBh cHByb2FjaCwgd2hpY2ggc2ltcGx5IHJvdW5kcwo+IMKgICogbWVtb3J5IGJvdW5kYXJpZXMgdXAg dG8gNjRNIHRvIHRyeSB0byBjYXRjaCBzcGFjZSB0aGF0IG1heSBkZWNvZGUKPiDCoCAqIGFzIFJB TSBhbmQgc28gaXMgbm90IHN1aXRhYmxlIGZvciBNTUlPLgo+IC0gKgo+IC0gKiBBbmQgeWVzLCBz byBmYXIgb24gY3VycmVudCBkZXZpY2VzIHRoZSBiYXNlIGFkZHIgaXMgYWx3YXlzIHVuZGVyIDRH Lgo+IMKgICovCj4gLXN0YXRpYyB1MzIgX19pbml0IGludGVsX3N0b2xlbl9iYXNlKGludCBudW0s IGludCBzbG90LCBpbnQgZnVuYywgc2l6ZV90IHN0b2xlbl9zaXplKQo+IC17Cj4gLQl1MzIgYmFz ZTsKPiAtCj4gLQkvKgo+IC0JwqAqIEZvciB0aGUgUENJIElEcyBpbiB0aGlzIHF1aXJrLCB0aGUg c3RvbGVuIGJhc2UgaXMgYWx3YXlzCj4gLQnCoCogaW4gMHg1YywgYWthIHRoZSBCRFNNIHJlZ2lz dGVyICh5ZXMgdGhhdCdzIHJlYWxseSB3aGF0Cj4gLQnCoCogaXQncyBjYWxsZWQpLgo+IC0JwqAq Lwo+IC0JYmFzZSA9IHJlYWRfcGNpX2NvbmZpZyhudW0sIHNsb3QsIGZ1bmMsIDB4NWMpOwo+IC0J YmFzZSAmPSB+KCgxPDwyMCkgLSAxKTsKPiAtCj4gLQlyZXR1cm4gYmFzZTsKPiAtfQo+IMKgCj4g wqAjZGVmaW5lIEtCKHgpCSgoeCkgKiAxMDI0VUwpCj4gwqAjZGVmaW5lIE1CKHgpCShLQiAoS0Ig KHgpKSkKPiAtI2RlZmluZSBHQih4KQkoTUIgKEtCICh4KSkpCj4gwqAKPiDCoHN0YXRpYyBzaXpl X3QgX19pbml0IGk4MzBfdHNlZ19zaXplKHZvaWQpCj4gwqB7Cj4gLQl1OCB0bXAgPSByZWFkX3Bj aV9jb25maWdfYnl0ZSgwLCAwLCAwLCBJODMwX0VTTVJBTUMpOwo+ICsJdTggZXNtcmFtYyA9IHJl YWRfcGNpX2NvbmZpZ19ieXRlKDAsIDAsIDAsIEk4MzBfRVNNUkFNQyk7Cj4gwqAKPiAtCWlmICgh KHRtcCAmIFRTRUdfRU5BQkxFKSkKPiArCWlmICghKGVzbXJhbWMgJiBUU0VHX0VOQUJMRSkpCj4g wqAJCXJldHVybiAwOwo+IMKgCj4gLQlpZiAodG1wICYgSTgzMF9UU0VHX1NJWkVfMU0pCj4gKwlp ZiAoZXNtcmFtYyAmIEk4MzBfVFNFR19TSVpFXzFNKQo+IMKgCQlyZXR1cm4gTUIoMSk7Cj4gwqAJ ZWxzZQo+IMKgCQlyZXR1cm4gS0IoNTEyKTsKPiBAQCAtMjYwLDI3ICsyNDMsMjYgQEAgc3RhdGlj IHNpemVfdCBfX2luaXQgaTgzMF90c2VnX3NpemUodm9pZCkKPiDCoAo+IMKgc3RhdGljIHNpemVf dCBfX2luaXQgaTg0NV90c2VnX3NpemUodm9pZCkKPiDCoHsKPiAtCXU4IHRtcCA9IHJlYWRfcGNp X2NvbmZpZ19ieXRlKDAsIDAsIDAsIEk4NDVfRVNNUkFNQyk7Cj4gKwl1OCBlc21yYW1jID0gcmVh ZF9wY2lfY29uZmlnX2J5dGUoMCwgMCwgMCwgSTg0NV9FU01SQU1DKTsKPiArCXU4IHRzZWdfc2l6 ZSA9IGVzbXJhbWMgJiBJODQ1X1RTRUdfU0laRV9NQVNLOwo+IMKgCj4gLQlpZiAoISh0bXAgJiBU U0VHX0VOQUJMRSkpCj4gKwlpZiAoIShlc21yYW1jICYgVFNFR19FTkFCTEUpKQo+IMKgCQlyZXR1 cm4gMDsKPiDCoAo+IC0Jc3dpdGNoICh0bXAgJiBJODQ1X1RTRUdfU0laRV9NQVNLKSB7Cj4gLQlj YXNlIEk4NDVfVFNFR19TSVpFXzUxMks6Cj4gLQkJcmV0dXJuIEtCKDUxMik7Cj4gLQljYXNlIEk4 NDVfVFNFR19TSVpFXzFNOgo+IC0JCXJldHVybiBNQigxKTsKPiArCXN3aXRjaCAodHNlZ19zaXpl KSB7Cj4gKwljYXNlIEk4NDVfVFNFR19TSVpFXzUxMks6CXJldHVybiBLQig1MTIpOwo+ICsJY2Fz ZSBJODQ1X1RTRUdfU0laRV8xTToJCXJldHVybiBNQigxKTsKPiDCoAlkZWZhdWx0Ogo+IC0JCVdB Uk5fT04oMSk7Cj4gLQkJcmV0dXJuIDA7Cj4gKwkJV0FSTigxLCAiVW5rbm93biByZWdpc3RlciB2 YWx1ZSFcbiIpOwo+IMKgCX0KPiArCXJldHVybiAwOwo+IMKgfQo+IMKgCj4gwqBzdGF0aWMgc2l6 ZV90IF9faW5pdCBpODV4X3RzZWdfc2l6ZSh2b2lkKQo+IMKgewo+IC0JdTggdG1wID0gcmVhZF9w Y2lfY29uZmlnX2J5dGUoMCwgMCwgMCwgSTg1WF9FU01SQU1DKTsKPiArCXU4IGVzbXJhbWMgPSBy ZWFkX3BjaV9jb25maWdfYnl0ZSgwLCAwLCAwLCBJODVYX0VTTVJBTUMpOwo+IMKgCj4gLQlpZiAo ISh0bXAgJiBUU0VHX0VOQUJMRSkpCj4gKwlpZiAoIShlc21yYW1jICYgVFNFR19FTkFCTEUpKQo+ IMKgCQlyZXR1cm4gMDsKPiDCoAo+IMKgCXJldHVybiBNQigxKTsKPiBAQCAtMzAwLDE3NCArMjgy LDE2NiBAQCBzdGF0aWMgc2l6ZV90IF9faW5pdCBpODV4X21lbV9zaXplKHZvaWQpCj4gwqAgKiBP biA4MzAvODQ1Lzg1eCB0aGUgc3RvbGVuIG1lbW9yeSBiYXNlIGlzbid0IGF2YWlsYWJsZSBpbiBh bnkKPiDCoCAqIHJlZ2lzdGVyLiBXZSBuZWVkIHRvIGNhbGN1bGF0ZSBpdCBhcyBUT00tVFNFR19T SVpFLXN0b2xlbl9zaXplLgo+IMKgICovCj4gLXN0YXRpYyB1MzIgX19pbml0IGk4MzBfc3RvbGVu X2Jhc2UoaW50IG51bSwgaW50IHNsb3QsIGludCBmdW5jLCBzaXplX3Qgc3RvbGVuX3NpemUpCj4g K3N0YXRpYyBwaHlzX2FkZHJfdCBfX2luaXQgaTgzMF9zdG9sZW5fYmFzZShpbnQgbnVtLCBpbnQg c2xvdCwgaW50IGZ1bmMsCj4gKwkJCQkJwqDCoMKgc2l6ZV90IHN0b2xlbl9zaXplKQo+IMKgewo+ IC0JcmV0dXJuIGk4MzBfbWVtX3NpemUoKSAtIGk4MzBfdHNlZ19zaXplKCkgLSBzdG9sZW5fc2l6 ZTsKPiArCXJldHVybiAocGh5c19hZGRyX3QpaTgzMF9tZW1fc2l6ZSgpIC0gaTgzMF90c2VnX3Np emUoKSAtIHN0b2xlbl9zaXplOwo+IMKgfQo+IMKgCj4gLXN0YXRpYyB1MzIgX19pbml0IGk4NDVf c3RvbGVuX2Jhc2UoaW50IG51bSwgaW50IHNsb3QsIGludCBmdW5jLCBzaXplX3Qgc3RvbGVuX3Np emUpCj4gK3N0YXRpYyBwaHlzX2FkZHJfdCBfX2luaXQgaTg0NV9zdG9sZW5fYmFzZShpbnQgbnVt LCBpbnQgc2xvdCwgaW50IGZ1bmMsCj4gKwkJCQkJwqDCoMKgc2l6ZV90IHN0b2xlbl9zaXplKQo+ IMKgewo+IC0JcmV0dXJuIGk4MzBfbWVtX3NpemUoKSAtIGk4NDVfdHNlZ19zaXplKCkgLSBzdG9s ZW5fc2l6ZTsKPiArCXJldHVybiAocGh5c19hZGRyX3QpaTgzMF9tZW1fc2l6ZSgpIC0gaTg0NV90 c2VnX3NpemUoKSAtIHN0b2xlbl9zaXplOwo+IMKgfQo+IMKgCj4gLXN0YXRpYyB1MzIgX19pbml0 IGk4NXhfc3RvbGVuX2Jhc2UoaW50IG51bSwgaW50IHNsb3QsIGludCBmdW5jLCBzaXplX3Qgc3Rv bGVuX3NpemUpCj4gK3N0YXRpYyBwaHlzX2FkZHJfdCBfX2luaXQgaTg1eF9zdG9sZW5fYmFzZShp bnQgbnVtLCBpbnQgc2xvdCwgaW50IGZ1bmMsCj4gKwkJCQkJwqDCoMKgc2l6ZV90IHN0b2xlbl9z aXplKQo+IMKgewo+IC0JcmV0dXJuIGk4NXhfbWVtX3NpemUoKSAtIGk4NXhfdHNlZ19zaXplKCkg LSBzdG9sZW5fc2l6ZTsKPiArCXJldHVybiAocGh5c19hZGRyX3QpaTg1eF9tZW1fc2l6ZSgpIC0g aTg1eF90c2VnX3NpemUoKSAtIHN0b2xlbl9zaXplOwo+IMKgfQo+IMKgCj4gLXN0YXRpYyB1MzIg X19pbml0IGk4NjVfc3RvbGVuX2Jhc2UoaW50IG51bSwgaW50IHNsb3QsIGludCBmdW5jLCBzaXpl X3Qgc3RvbGVuX3NpemUpCj4gK3N0YXRpYyBwaHlzX2FkZHJfdCBfX2luaXQgaTg2NV9zdG9sZW5f YmFzZShpbnQgbnVtLCBpbnQgc2xvdCwgaW50IGZ1bmMsCj4gKwkJCQkJwqDCoMKgc2l6ZV90IHN0 b2xlbl9zaXplKQo+IMKgewo+ICsJdTE2IHRvdWQ7Cj4gKwo+IMKgCS8qCj4gwqAJwqAqIEZJWE1F IGlzIHRoZSBncmFwaGljcyBzdG9sZW4gbWVtb3J5IHJlZ2lvbgo+IMKgCcKgKiBhbHdheXMgYXQg VE9VRD8gSWUuIGlzIGl0IGFsd2F5cyB0aGUgbGFzdAo+IMKgCcKgKiBvbmUgdG8gYmUgYWxsb2Nh dGVkIGJ5IHRoZSBCSU9TPwo+IMKgCcKgKi8KPiAtCXJldHVybiByZWFkX3BjaV9jb25maWdfMTYo MCwgMCwgMCwgSTg2NV9UT1VEKSA8PCAxNjsKPiArCXRvdWQgPSByZWFkX3BjaV9jb25maWdfMTYo MCwgMCwgMCwgSTg2NV9UT1VEKTsKPiArCj4gKwlyZXR1cm4gKHBoeXNfYWRkcl90KXRvdWQgPDwg MTY7Cj4gK30KPiArCj4gK3N0YXRpYyBwaHlzX2FkZHJfdCBfX2luaXQgZ2VuM19zdG9sZW5fYmFz ZShpbnQgbnVtLCBpbnQgc2xvdCwgaW50IGZ1bmMsCj4gKwkJCQkJwqDCoMKgc2l6ZV90IHN0b2xl bl9zaXplKQo+ICt7Cj4gKwl1MzIgYnNtOwo+ICsKPiArCS8qIEFsbW9zdCB1bml2ZXJzYWxseSB3 ZSBjYW4gZmluZCB0aGUgR3JhcGhpY3MgQmFzZSBvZiBTdG9sZW4gTWVtb3J5Cj4gKwnCoCogYXQg cmVnaXN0ZXIgQlNNICgweDVjKSBpbiB0aGUgaWdmeCBjb25maWd1cmF0aW9uIHNwYWNlLiBPbiBh IGZldwo+ICsJwqAqIChkZXNrdG9wKSBtYWNoaW5lcyB0aGlzIGlzIGFsc28gbWlycm9yZWQgaW4g dGhlIGJyaWRnZSBkZXZpY2UgYXQKPiArCcKgKiBkaWZmZXJlbnQgbG9jYXRpb25zLCBvciBpbiB0 aGUgTUNIQkFSLgo+ICsJwqAqLwo+ICsJYnNtID0gcmVhZF9wY2lfY29uZmlnKG51bSwgc2xvdCwg ZnVuYywgSU5URUxfQlNNKTsKPiArCj4gKwlyZXR1cm4gKHBoeXNfYWRkcl90KWJzbSAmIElOVEVM X0JTTV9NQVNLOwo+IMKgfQo+IMKgCj4gwqBzdGF0aWMgc2l6ZV90IF9faW5pdCBpODMwX3N0b2xl bl9zaXplKGludCBudW0sIGludCBzbG90LCBpbnQgZnVuYykKPiDCoHsKPiAtCXNpemVfdCBzdG9s ZW5fc2l6ZTsKPiDCoAl1MTYgZ21jaF9jdHJsOwo+ICsJdTE2IGdtczsKPiDCoAo+IMKgCWdtY2hf Y3RybCA9IHJlYWRfcGNpX2NvbmZpZ18xNigwLCAwLCAwLCBJODMwX0dNQ0hfQ1RSTCk7Cj4gLQo+ IC0Jc3dpdGNoIChnbWNoX2N0cmwgJiBJODMwX0dNQ0hfR01TX01BU0spIHsKPiAtCWNhc2UgSTgz MF9HTUNIX0dNU19TVE9MRU5fNTEyOgo+IC0JCXN0b2xlbl9zaXplID0gS0IoNTEyKTsKPiAtCQli cmVhazsKPiAtCWNhc2UgSTgzMF9HTUNIX0dNU19TVE9MRU5fMTAyNDoKPiAtCQlzdG9sZW5fc2l6 ZSA9IE1CKDEpOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBJODMwX0dNQ0hfR01TX1NUT0xFTl84MTky Ogo+IC0JCXN0b2xlbl9zaXplID0gTUIoOCk7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIEk4MzBfR01D SF9HTVNfTE9DQUw6Cj4gLQkJLyogbG9jYWwgbWVtb3J5IGlzbid0IHBhcnQgb2YgdGhlIG5vcm1h bCBhZGRyZXNzIHNwYWNlICovCj4gLQkJc3RvbGVuX3NpemUgPSAwOwo+IC0JCWJyZWFrOwo+ICsJ Z21zID0gZ21jaF9jdHJsICYgSTgzMF9HTUNIX0dNU19NQVNLOwo+ICsKPiArCXN3aXRjaCAoZ21z KSB7Cj4gKwljYXNlIEk4MzBfR01DSF9HTVNfU1RPTEVOXzUxMjoJcmV0dXJuIEtCKDUxMik7Cj4g KwljYXNlIEk4MzBfR01DSF9HTVNfU1RPTEVOXzEwMjQ6CXJldHVybiBNQigxKTsKPiArCWNhc2Ug STgzMF9HTUNIX0dNU19TVE9MRU5fODE5MjoJcmV0dXJuIE1CKDgpOwo+ICsJLyogbG9jYWwgbWVt b3J5IGlzbid0IHBhcnQgb2YgdGhlIG5vcm1hbCBhZGRyZXNzIHNwYWNlICovCj4gKwljYXNlIEk4 MzBfR01DSF9HTVNfTE9DQUw6CXJldHVybiAwOwo+IMKgCWRlZmF1bHQ6Cj4gLQkJcmV0dXJuIDA7 Cj4gKwkJV0FSTigxLCAiVW5rbm93biByZWdpc3RlciB2YWx1ZSFcbiIpOwo+IMKgCX0KPiDCoAo+ IC0JcmV0dXJuIHN0b2xlbl9zaXplOwo+ICsJcmV0dXJuIDA7Cj4gwqB9Cj4gwqAKPiDCoHN0YXRp YyBzaXplX3QgX19pbml0IGdlbjNfc3RvbGVuX3NpemUoaW50IG51bSwgaW50IHNsb3QsIGludCBm dW5jKQo+IMKgewo+IC0Jc2l6ZV90IHN0b2xlbl9zaXplOwo+IMKgCXUxNiBnbWNoX2N0cmw7Cj4g Kwl1MTYgZ21zOwo+IMKgCj4gwqAJZ21jaF9jdHJsID0gcmVhZF9wY2lfY29uZmlnXzE2KDAsIDAs IDAsIEk4MzBfR01DSF9DVFJMKTsKPiAtCj4gLQlzd2l0Y2ggKGdtY2hfY3RybCAmIEk4NTVfR01D SF9HTVNfTUFTSykgewo+IC0JY2FzZSBJODU1X0dNQ0hfR01TX1NUT0xFTl8xTToKPiAtCQlzdG9s ZW5fc2l6ZSA9IE1CKDEpOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBJODU1X0dNQ0hfR01TX1NUT0xF Tl80TToKPiAtCQlzdG9sZW5fc2l6ZSA9IE1CKDQpOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBJODU1 X0dNQ0hfR01TX1NUT0xFTl84TToKPiAtCQlzdG9sZW5fc2l6ZSA9IE1CKDgpOwo+IC0JCWJyZWFr Owo+IC0JY2FzZSBJODU1X0dNQ0hfR01TX1NUT0xFTl8xNk06Cj4gLQkJc3RvbGVuX3NpemUgPSBN QigxNik7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIEk4NTVfR01DSF9HTVNfU1RPTEVOXzMyTToKPiAt CQlzdG9sZW5fc2l6ZSA9IE1CKDMyKTsKPiAtCQlicmVhazsKPiAtCWNhc2UgSTkxNV9HTUNIX0dN U19TVE9MRU5fNDhNOgo+IC0JCXN0b2xlbl9zaXplID0gTUIoNDgpOwo+IC0JCWJyZWFrOwo+IC0J Y2FzZSBJOTE1X0dNQ0hfR01TX1NUT0xFTl82NE06Cj4gLQkJc3RvbGVuX3NpemUgPSBNQig2NCk7 Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIEczM19HTUNIX0dNU19TVE9MRU5fMTI4TToKPiAtCQlzdG9s ZW5fc2l6ZSA9IE1CKDEyOCk7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIEczM19HTUNIX0dNU19TVE9M RU5fMjU2TToKPiAtCQlzdG9sZW5fc2l6ZSA9IE1CKDI1Nik7Cj4gLQkJYnJlYWs7Cj4gLQljYXNl IElOVEVMX0dNQ0hfR01TX1NUT0xFTl85Nk06Cj4gLQkJc3RvbGVuX3NpemUgPSBNQig5Nik7Cj4g LQkJYnJlYWs7Cj4gLQljYXNlIElOVEVMX0dNQ0hfR01TX1NUT0xFTl8xNjBNOgo+IC0JCXN0b2xl bl9zaXplID0gTUIoMTYwKTsKPiAtCQlicmVhazsKPiAtCWNhc2UgSU5URUxfR01DSF9HTVNfU1RP TEVOXzIyNE06Cj4gLQkJc3RvbGVuX3NpemUgPSBNQigyMjQpOwo+IC0JCWJyZWFrOwo+IC0JY2Fz ZSBJTlRFTF9HTUNIX0dNU19TVE9MRU5fMzUyTToKPiAtCQlzdG9sZW5fc2l6ZSA9IE1CKDM1Mik7 Cj4gLQkJYnJlYWs7Cj4gKwlnbXMgPSBnbWNoX2N0cmwgJiBJODU1X0dNQ0hfR01TX01BU0s7Cj4g Kwo+ICsJc3dpdGNoIChnbXMpIHsKPiArCWNhc2UgSTg1NV9HTUNIX0dNU19TVE9MRU5fMU06CXJl dHVybiBNQigxKTsKPiArCWNhc2UgSTg1NV9HTUNIX0dNU19TVE9MRU5fNE06CXJldHVybiBNQig0 KTsKPiArCWNhc2UgSTg1NV9HTUNIX0dNU19TVE9MRU5fOE06CXJldHVybiBNQig4KTsKPiArCWNh c2UgSTg1NV9HTUNIX0dNU19TVE9MRU5fMTZNOglyZXR1cm4gTUIoMTYpOwo+ICsJY2FzZSBJODU1 X0dNQ0hfR01TX1NUT0xFTl8zMk06CXJldHVybiBNQigzMik7Cj4gKwljYXNlIEk5MTVfR01DSF9H TVNfU1RPTEVOXzQ4TToJcmV0dXJuIE1CKDQ4KTsKPiArCWNhc2UgSTkxNV9HTUNIX0dNU19TVE9M RU5fNjRNOglyZXR1cm4gTUIoNjQpOwo+ICsJY2FzZSBHMzNfR01DSF9HTVNfU1RPTEVOXzEyOE06 CXJldHVybiBNQigxMjgpOwo+ICsJY2FzZSBHMzNfR01DSF9HTVNfU1RPTEVOXzI1Nk06CXJldHVy biBNQigyNTYpOwo+ICsJY2FzZSBJTlRFTF9HTUNIX0dNU19TVE9MRU5fOTZNOglyZXR1cm4gTUIo OTYpOwo+ICsJY2FzZSBJTlRFTF9HTUNIX0dNU19TVE9MRU5fMTYwTTpyZXR1cm4gTUIoMTYwKTsK PiArCWNhc2UgSU5URUxfR01DSF9HTVNfU1RPTEVOXzIyNE06cmV0dXJuIE1CKDIyNCk7Cj4gKwlj YXNlIElOVEVMX0dNQ0hfR01TX1NUT0xFTl8zNTJNOnJldHVybiBNQigzNTIpOwo+IMKgCWRlZmF1 bHQ6Cj4gLQkJc3RvbGVuX3NpemUgPSAwOwo+IC0JCWJyZWFrOwo+ICsJCVdBUk4oMSwgIlVua25v d24gcmVnaXN0ZXIgdmFsdWUhXG4iKTsKPiDCoAl9Cj4gwqAKPiAtCXJldHVybiBzdG9sZW5fc2l6 ZTsKPiArCXJldHVybiAwOwo+IMKgfQo+IMKgCj4gwqBzdGF0aWMgc2l6ZV90IF9faW5pdCBnZW42 X3N0b2xlbl9zaXplKGludCBudW0sIGludCBzbG90LCBpbnQgZnVuYykKPiDCoHsKPiDCoAl1MTYg Z21jaF9jdHJsOwo+ICsJdTE2IGdtczsKPiDCoAo+IMKgCWdtY2hfY3RybCA9IHJlYWRfcGNpX2Nv bmZpZ18xNihudW0sIHNsb3QsIGZ1bmMsIFNOQl9HTUNIX0NUUkwpOwo+IC0JZ21jaF9jdHJsID4+ PSBTTkJfR01DSF9HTVNfU0hJRlQ7Cj4gLQlnbWNoX2N0cmwgJj0gU05CX0dNQ0hfR01TX01BU0s7 Cj4gKwlnbXMgPSAoZ21jaF9jdHJsID4+IFNOQl9HTUNIX0dNU19TSElGVCkgJiBTTkJfR01DSF9H TVNfTUFTSzsKPiDCoAo+IC0JcmV0dXJuIGdtY2hfY3RybCA8PCAyNTsgLyogMzIgTUIgdW5pdHMg Ki8KPiArCXJldHVybiAoc2l6ZV90KWdtcyAqIE1CKDMyKTsKPiDCoH0KPiDCoAo+IMKgc3RhdGlj IHNpemVfdCBfX2luaXQgZ2VuOF9zdG9sZW5fc2l6ZShpbnQgbnVtLCBpbnQgc2xvdCwgaW50IGZ1 bmMpCj4gwqB7Cj4gwqAJdTE2IGdtY2hfY3RybDsKPiArCXUxNiBnbXM7Cj4gwqAKPiDCoAlnbWNo X2N0cmwgPSByZWFkX3BjaV9jb25maWdfMTYobnVtLCBzbG90LCBmdW5jLCBTTkJfR01DSF9DVFJM KTsKPiAtCWdtY2hfY3RybCA+Pj0gQkRXX0dNQ0hfR01TX1NISUZUOwo+IC0JZ21jaF9jdHJsICY9 IEJEV19HTUNIX0dNU19NQVNLOwo+IC0JcmV0dXJuIGdtY2hfY3RybCA8PCAyNTsgLyogMzIgTUIg dW5pdHMgKi8KPiArCWdtcyA9IChnbWNoX2N0cmwgPj4gQkRXX0dNQ0hfR01TX1NISUZUKSAmIEJE V19HTUNIX0dNU19NQVNLOwo+ICsKPiArCXJldHVybiAoc2l6ZV90KWdtcyAqIE1CKDMyKTsKPiDC oH0KPiDCoAo+IMKgc3RhdGljIHNpemVfdCBfX2luaXQgY2h2X3N0b2xlbl9zaXplKGludCBudW0s IGludCBzbG90LCBpbnQgZnVuYykKPiDCoHsKPiDCoAl1MTYgZ21jaF9jdHJsOwo+ICsJdTE2IGdt czsKPiDCoAo+IMKgCWdtY2hfY3RybCA9IHJlYWRfcGNpX2NvbmZpZ18xNihudW0sIHNsb3QsIGZ1 bmMsIFNOQl9HTUNIX0NUUkwpOwo+IC0JZ21jaF9jdHJsID4+PSBTTkJfR01DSF9HTVNfU0hJRlQ7 Cj4gLQlnbWNoX2N0cmwgJj0gU05CX0dNQ0hfR01TX01BU0s7Cj4gKwlnbXMgPSAoZ21jaF9jdHJs ID4+IFNOQl9HTUNIX0dNU19TSElGVCkgJiBTTkJfR01DSF9HTVNfTUFTSzsKPiDCoAo+IMKgCS8q Cj4gwqAJwqAqIDB4MMKgwqB0byAweDEwOiAzMk1CIGluY3JlbWVudHMgc3RhcnRpbmcgYXQgME1C Cj4gwqAJwqAqIDB4MTEgdG8gMHgxNjogNE1CIGluY3JlbWVudHMgc3RhcnRpbmcgYXQgOE1CCj4g wqAJwqAqIDB4MTcgdG8gMHgxZDogNE1CIGluY3JlbWVudHMgc3RhcnQgYXQgMzZNQgo+IMKgCcKg Ki8KPiAtCWlmIChnbWNoX2N0cmwgPCAweDExKQo+IC0JCXJldHVybiBnbWNoX2N0cmwgPDwgMjU7 Cj4gLQllbHNlIGlmIChnbWNoX2N0cmwgPCAweDE3KQo+IC0JCXJldHVybiAoZ21jaF9jdHJsIC0g MHgxMSArIDIpIDw8IDIyOwo+ICsJaWYgKGdtcyA8IDB4MTEpCj4gKwkJcmV0dXJuIChzaXplX3Qp Z21zICogTUIoMzIpOwo+ICsJZWxzZSBpZiAoZ21zIDwgMHgxNykKPiArCQlyZXR1cm4gKHNpemVf dCkoZ21zIC0gMHgxMSArIDIpICogTUIoNCk7Cj4gwqAJZWxzZQo+IC0JCXJldHVybiAoZ21jaF9j dHJsIC0gMHgxNyArIDkpIDw8IDIyOwo+ICsJCXJldHVybiAoc2l6ZV90KShnbXMgLSAweDE3ICsg OSkgKiBNQig0KTsKPiDCoH0KPiDCoAo+IMKgc3RydWN0IGludGVsX3N0b2xlbl9mdW5jcyB7Cj4g wqAJc2l6ZV90ICgqc2l6ZSkoaW50IG51bSwgaW50IHNsb3QsIGludCBmdW5jKTsKPiAtCXUzMiAo KmJhc2UpKGludCBudW0sIGludCBzbG90LCBpbnQgZnVuYywgc2l6ZV90IHNpemUpOwo+ICsJcGh5 c19hZGRyX3QgKCpiYXNlKShpbnQgbnVtLCBpbnQgc2xvdCwgaW50IGZ1bmMsIHNpemVfdCBzaXpl KTsKPiDCoH07Cj4gwqAKPiDCoHN0YXRpYyBzaXplX3QgX19pbml0IGdlbjlfc3RvbGVuX3NpemUo aW50IG51bSwgaW50IHNsb3QsIGludCBmdW5jKQo+IMKgewo+IMKgCXUxNiBnbWNoX2N0cmw7Cj4g Kwl1MTYgZ21zOwo+IMKgCj4gwqAJZ21jaF9jdHJsID0gcmVhZF9wY2lfY29uZmlnXzE2KG51bSwg c2xvdCwgZnVuYywgU05CX0dNQ0hfQ1RSTCk7Cj4gLQlnbWNoX2N0cmwgPj49IEJEV19HTUNIX0dN U19TSElGVDsKPiAtCWdtY2hfY3RybCAmPSBCRFdfR01DSF9HTVNfTUFTSzsKPiArCWdtcyA9IChn bWNoX2N0cmwgPj4gQkRXX0dNQ0hfR01TX1NISUZUKSAmIEJEV19HTUNIX0dNU19NQVNLOwo+IMKg Cj4gLQlpZiAoZ21jaF9jdHJsIDwgMHhmMCkKPiAtCQlyZXR1cm4gZ21jaF9jdHJsIDw8IDI1OyAv KiAzMiBNQiB1bml0cyAqLwo+ICsJLyogMHgwwqDCoHRvIDB4ZWY6IDMyTUIgaW5jcmVtZW50cyBz dGFydGluZyBhdCAwTUIgKi8KPiArCS8qIDB4ZjAgdG8gMHhmZTogNE1CIGluY3JlbWVudHMgc3Rh cnRpbmcgYXQgNE1CICovCj4gKwlpZiAoZ21zIDwgMHhmMCkKPiArCQlyZXR1cm4gKHNpemVfdCln bXMgKiBNQigzMik7Cj4gwqAJZWxzZQo+IC0JCS8qIDRNQiBpbmNyZW1lbnRzIHN0YXJ0aW5nIGF0 IDB4ZjAgZm9yIDRNQiAqLwo+IC0JCXJldHVybiAoZ21jaF9jdHJsIC0gMHhmMCArIDEpIDw8IDIy Owo+ICsJCXJldHVybiAoc2l6ZV90KShnbXMgLSAweGYwICsgMSkgKiBNQig0KTsKPiDCoH0KPiDC oAo+IMKgdHlwZWRlZiBzaXplX3QgKCpzdG9sZW5fc2l6ZV9mbikoaW50IG51bSwgaW50IHNsb3Qs IGludCBmdW5jKTsKPiBAQCAtNDkzLDI3ICs0NjcsMjcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBp bnRlbF9zdG9sZW5fZnVuY3MgaTg2NV9zdG9sZW5fZnVuY3MgX19pbml0Y29uc3QgPSB7Cj4gwqB9 Owo+IMKgCj4gwqBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX3N0b2xlbl9mdW5jcyBnZW4zX3N0 b2xlbl9mdW5jcyBfX2luaXRjb25zdCA9IHsKPiAtCS5iYXNlID0gaW50ZWxfc3RvbGVuX2Jhc2Us Cj4gKwkuYmFzZSA9IGdlbjNfc3RvbGVuX2Jhc2UsCj4gwqAJLnNpemUgPSBnZW4zX3N0b2xlbl9z aXplLAo+IMKgfTsKPiDCoAo+IMKgc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9zdG9sZW5fZnVu Y3MgZ2VuNl9zdG9sZW5fZnVuY3MgX19pbml0Y29uc3QgPSB7Cj4gLQkuYmFzZSA9IGludGVsX3N0 b2xlbl9iYXNlLAo+ICsJLmJhc2UgPSBnZW4zX3N0b2xlbl9iYXNlLAo+IMKgCS5zaXplID0gZ2Vu Nl9zdG9sZW5fc2l6ZSwKPiDCoH07Cj4gwqAKPiDCoHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxf c3RvbGVuX2Z1bmNzIGdlbjhfc3RvbGVuX2Z1bmNzIF9faW5pdGNvbnN0ID0gewo+IC0JLmJhc2Ug PSBpbnRlbF9zdG9sZW5fYmFzZSwKPiArCS5iYXNlID0gZ2VuM19zdG9sZW5fYmFzZSwKPiDCoAku c2l6ZSA9IGdlbjhfc3RvbGVuX3NpemUsCj4gwqB9Owo+IMKgCj4gwqBzdGF0aWMgY29uc3Qgc3Ry dWN0IGludGVsX3N0b2xlbl9mdW5jcyBnZW45X3N0b2xlbl9mdW5jcyBfX2luaXRjb25zdCA9IHsK PiAtCS5iYXNlID0gaW50ZWxfc3RvbGVuX2Jhc2UsCj4gKwkuYmFzZSA9IGdlbjNfc3RvbGVuX2Jh c2UsCj4gwqAJLnNpemUgPSBnZW45X3N0b2xlbl9zaXplLAo+IMKgfTsKPiDCoAo+IMKgc3RhdGlj IGNvbnN0IHN0cnVjdCBpbnRlbF9zdG9sZW5fZnVuY3MgY2h2X3N0b2xlbl9mdW5jcyBfX2luaXRj b25zdCA9IHsKPiAtCS5iYXNlID0gaW50ZWxfc3RvbGVuX2Jhc2UsCj4gKwkuYmFzZSA9IGdlbjNf c3RvbGVuX2Jhc2UsCj4gwqAJLnNpemUgPSBjaHZfc3RvbGVuX3NpemUsCj4gwqB9Owo+IMKgCj4g QEAgLTU1NCw3ICs1MjgsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgaW50ZWxfZ3JhcGhpY3Nfc3Rv bGVuKGludCBudW0sIGludCBzbG90LCBpbnQgZnVuYykKPiDCoHsKPiDCoAlzaXplX3Qgc2l6ZTsK PiDCoAlpbnQgaTsKPiAtCXUzMiBzdGFydDsKPiArCXBoeXNfYWRkcl90IHN0YXJ0Owo+IMKgCXUx NiBkZXZpY2UsIHN1YnZlbmRvciwgc3ViZGV2aWNlOwo+IMKgCj4gwqAJZGV2aWNlID0gcmVhZF9w Y2lfY29uZmlnXzE2KG51bSwgc2xvdCwgZnVuYywgUENJX0RFVklDRV9JRCk7Cj4gQEAgLTU2OSw4 ICs1NDMsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgaW50ZWxfZ3JhcGhpY3Nfc3RvbGVuKGludCBu dW0sIGludCBzbG90LCBpbnQgZnVuYykKPiDCoAkJCXNpemUgPSBzdG9sZW5fZnVuY3MtPnNpemUo bnVtLCBzbG90LCBmdW5jKTsKPiDCoAkJCXN0YXJ0ID0gc3RvbGVuX2Z1bmNzLT5iYXNlKG51bSwg c2xvdCwgZnVuYywgc2l6ZSk7Cj4gwqAJCQlpZiAoc2l6ZSAmJiBzdGFydCkgewo+IC0JCQkJcHJp bnRrKEtFUk5fSU5GTyAiUmVzZXJ2aW5nIEludGVsIGdyYXBoaWNzIHN0b2xlbiBtZW1vcnkgYXQg MHgleC0weCV4XG4iLAo+IC0JCQkJwqDCoMKgwqDCoMKgwqBzdGFydCwgc3RhcnQgKyAodTMyKXNp emUgLSAxKTsKPiArCQkJCXByaW50ayhLRVJOX0lORk8gIlJlc2VydmluZyBJbnRlbCBncmFwaGlj cyBzdG9sZW4gbWVtb3J5IGF0IDB4JWxseC0weCVsbHhcbiIsCj4gKwkJCQnCoMKgwqDCoMKgwqDC oHN0YXJ0LCBzdGFydCArIHNpemUgLSAxKTsKPiDCoAkJCQkvKiBNYXJrIHRoaXMgc3BhY2UgYXMg cmVzZXJ2ZWQgKi8KPiDCoAkJCQllODIwX2FkZF9yZWdpb24oc3RhcnQsIHNpemUsIEU4MjBfUkVT RVJWRUQpOwo+IMKgCQkJCXNhbml0aXplX2U4MjBfbWFwKGU4MjAubWFwLAo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4uYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5jCj4gaW5kZXggYjdjZTk2My4uNjhmZGU4ZiAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4uYwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5jCj4gQEAgLTEwOSw5ICsxMDksOSBA QCBzdGF0aWMgdW5zaWduZWQgbG9uZyBpOTE1X3N0b2xlbl90b19waHlzaWNhbChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQo+IMKgCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSAzKSB7Cj4gwqAJ CXUzMiBic207Cj4gwqAKPiAtCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LT5wZGV2LCBCU00s ICZic20pOwo+ICsJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYtPnBkZXYsIElOVEVMX0JTTSwg JmJzbSk7Cj4gwqAKPiAtCQliYXNlID0gYnNtICYgQlNNX01BU0s7Cj4gKwkJYmFzZSA9IGJzbSAm IElOVEVMX0JTTV9NQVNLOwo+IMKgCX0gZWxzZSBpZiAoSVNfSTg2NUcoZGV2KSkgewo+IMKgCQl1 MTYgdG91ZCA9IDA7Cj4gwqAKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaCBi L2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKPiBpbmRleCA1OTVmODVjLi5iMTc1NWY4IDEwMDY0NAo+ IC0tLSBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKPiArKysgYi9pbmNsdWRlL2RybS9pOTE1X2Ry bS5oCj4gQEAgLTkyLDQgKzkyLDcgQEAgZXh0ZXJuIGJvb2wgaTkxNV9ncHVfdHVyYm9fZGlzYWJs ZSh2b2lkKTsKPiDCoCNkZWZpbmXCoMKgwqDCoEk4NDVfVFNFR19TSVpFXzUxMksJKDIgPDwgMSkK PiDCoCNkZWZpbmXCoMKgwqDCoEk4NDVfVFNFR19TSVpFXzFNCSgzIDw8IDEpCj4gwqAKPiArI2Rl ZmluZSBJTlRFTF9CU00gMHg1Ywo+ICsjZGVmaW5lwqDCoMKgSU5URUxfQlNNX01BU0sgKDB4RkZG RiA8PCAyMCkKPiArCj4gwqAjZW5kaWYJCQkJLyogX0k5MTVfRFJNX0hfICovCi0tIApKb29uYXMg TGFodGluZW4KT3BlbiBTb3VyY2UgVGVjaG5vbG9neSBDZW50ZXIKSW50ZWwgQ29ycG9yYXRpb24K X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==