From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC PATCH v3 07/11] drm, cgroup: Add TTM buffer allocation stats Date: Wed, 26 Jun 2019 18:12:54 +0200 Message-ID: <20190626161254.GS12905@phenom.ffwll.local> References: <20190626150522.11618-1-Kenny.Ho@amd.com> <20190626150522.11618-8-Kenny.Ho@amd.com> Mime-Version: 1.0 Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20190626150522.11618-8-Kenny.Ho@amd.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Content-Type: text/plain; charset="us-ascii" To: Kenny Ho Cc: jsparks@cray.com, amd-gfx@lists.freedesktop.org, lkaplan@cray.com, alexander.deucher@amd.com, y2kenny@gmail.com, dri-devel@lists.freedesktop.org, joseph.greathouse@amd.com, tj@kernel.org, cgroups@vger.kernel.org, christian.koenig@amd.com T24gV2VkLCBKdW4gMjYsIDIwMTkgYXQgMTE6MDU6MThBTSAtMDQwMCwgS2VubnkgSG8gd3JvdGU6 Cj4gVGhlIGRybSByZXNvdXJjZSBiZWluZyBtZWFzdXJlZCBpcyB0aGUgVFRNIChUcmFuc2xhdGlv biBUYWJsZSBNYW5hZ2VyKQo+IGJ1ZmZlcnMuICBUVE0gbWFuYWdlcyBkaWZmZXJlbnQgdHlwZXMg b2YgbWVtb3J5IHRoYXQgYSBHUFUgbWlnaHQgYWNjZXNzLgo+IFRoZXNlIG1lbW9yeSB0eXBlcyBp bmNsdWRlIGRlZGljYXRlZCBWaWRlbyBSQU0gKFZSQU0pIGFuZCBob3N0L3N5c3RlbQo+IG1lbW9y eSBhY2Nlc3NpYmxlIHRocm91Z2ggSU9NTVUgKEdBUlQvR1RUKS4gIFRUTSBpcyBjdXJyZW50bHkg dXNlZCBieQo+IG11bHRpcGxlIGRybSBkcml2ZXJzIChhbWQsIGFzdCwgYm9jaHMsIGNpcnJ1cywg aGlzaWxpY29uLCBtYWdhMjAwLAo+IG5vdXZlYXUsIHF4bCwgdmlydGlvLCB2bXdnZnguKQo+IAo+ IGRybS5tZW1vcnkuc3RhdHMKPiAgICAgICAgIEEgcmVhZC1vbmx5IG5lc3RlZC1rZXllZCBmaWxl IHdoaWNoIGV4aXN0cyBvbiBhbGwgY2dyb3Vwcy4KPiAgICAgICAgIEVhY2ggZW50cnkgaXMga2V5 ZWQgYnkgdGhlIGRybSBkZXZpY2UncyBtYWpvcjptaW5vci4gIFRoZQo+ICAgICAgICAgZm9sbG93 aW5nIG5lc3RlZCBrZXlzIGFyZSBkZWZpbmVkLgo+IAo+ICAgICAgICAgICA9PT09PT0gICAgICAg ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiAgICAgICAg ICAgc3lzdGVtICAgICAgICAgSG9zdC9zeXN0ZW0gbWVtb3J5CgpTaG91bGRuJ3QgdGhhdCBiZSBj b3ZlcmVkIGJ5IGdlbSBibyBzdGF0cyBhbHJlYWR5PyBBbHNvLCBzeXN0ZW0gbWVtb3J5IGlzCmRl ZmluaXRlbHkgc29tZXRoaW5nIGEgbG90IG9mIG5vbi10dG0gZHJpdmVycyB3YW50IHRvIGJlIGFi bGUgdG8gdHJhY2ssIHNvCnRoYXQgbmVlZHMgdG8gYmUgc2VwYXJhdGUgZnJvbSB0dG0uCgo+ICAg ICAgICAgICB0dCAgICAgICAgICAgICBIb3N0IG1lbW9yeSB1c2VkIGJ5IHRoZSBkcm0gZGV2aWNl IChHVFQvR0FSVCkKPiAgICAgICAgICAgdnJhbSAgICAgICAgICAgVmlkZW8gUkFNIHVzZWQgYnkg dGhlIGRybSBkZXZpY2UKPiAgICAgICAgICAgcHJpdiAgICAgICAgICAgT3RoZXIgZHJtIGRldmlj ZSwgdmVuZG9yIHNwZWNpZmljIG1lbW9yeQoKU28gd2hhdCdzICJwcml2Ii4gSW4gZ2VuZXJhbCBJ IHRoaW5rIHdlIG5lZWQgc29tZSB3YXkgdG8gcmVnaXN0ZXIgdGhlCmRpZmZlcmVudCBraW5kcyBv ZiBtZW1vcnksIGUuZy4gc3R1ZmYgbm90IGluIHlvdXIgbGlzdDoKCi0gbXVsdGlwbGUga2luZHMg b2YgdnJhbSAobGlrZSBudW1hLXN0eWxlIGdwdXMpCi0gY21hIChmb3IgYWxsIHRob3NlIG5vbi10 dG0gZHJpdmVycyB0aGF0J3MgYSBiaWcgb25lLCBpdCdzIGxpa2Ugc3lzdGVtCiAgbWVtb3J5IGJ1 dCBhbHNvIHRvdGFsbHkgZGlmZmVyZW50KQotIGFueSBjYXJ2ZW91dHMgYW5kIHN0dWZmCj4gICAg ICAgICAgID09PT09PSAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQo+IAo+ICAgICAgICAgUmVhZGluZyByZXR1cm5zIHRoZSBmb2xsb3dpbmc6Ogo+ IAo+ICAgICAgICAgMjI2OjAgc3lzdGVtPTAgdHQ9MCB2cmFtPTAgcHJpdj0wCj4gICAgICAgICAy MjY6MSBzeXN0ZW09MCB0dD05MDM1Nzc2IHZyYW09MTc3Njg0NDggcHJpdj0xNjgwOTk4NAo+ICAg ICAgICAgMjI2OjIgc3lzdGVtPTAgdHQ9OTAzNTc3NiB2cmFtPTE3NzY4NDQ4IHByaXY9MTY4MDk5 ODQKPiAKPiBkcm0ubWVtb3J5LmV2aWN0LnN0YXRzCj4gICAgICAgICBBIHJlYWQtb25seSBmbGF0 LWtleWVkIGZpbGUgd2hpY2ggZXhpc3RzIG9uIGFsbCBjZ3JvdXBzLiAgRWFjaAo+ICAgICAgICAg ZW50cnkgaXMga2V5ZWQgYnkgdGhlIGRybSBkZXZpY2UncyBtYWpvcjptaW5vci4KPiAKPiAgICAg ICAgIFRvdGFsIG51bWJlciBvZiBldmljdGlvbnMuCj4gCj4gQ2hhbmdlLUlkOiBJY2UyYzRjYzg0 NTA1MTIyOTU0OWJlYmViNmFhMmQ3ZDYxNTNiZGY2YQo+IFNpZ25lZC1vZmYtYnk6IEtlbm55IEhv IDxLZW5ueS5Ib0BhbWQuY29tPgoKSSB0aGluayB3aXRoIGFsbCB0aGUgdHRtIHJlZmFjdG9yaW5n IGdvaW5nIG9uIEkgdGhpbmsgd2UgbmVlZCB0byBkZS10dG0KdGhlIGludGVyZmFjZSBmdW5jdGlv bnMgaGVyZSBhIGJpdC4gV2l0aCBHZXJkIEhvZmZtYW5zIHNlcmllcyB5b3UgY2FuIGp1c3QKdXNl IGEgZ2VtX2JvIHBvaW50ZXIgaGVyZSwgc28gd2hhdCdzIGxlZnQgdG8gZG8gaXMgaGF2ZSBzb21l IGV4dHJhY3RlZApzdHJ1Y3R1cmUgZm9yIHRyYWNraW5nIG1lbW9yeSB0eXBlcy4gSSB0aGluayBC cmlhbiBXZWx0eSBoYXMgc29tZSBpZGVhcwpmb3IgdGhpcywgZXZlbiBpbiBwYXRjaCBmb3JtLiBX b3VsZCBiZSBnb29kIHRvIGtlZXAgaGltIG9uIGNjIGF0IGxlYXN0IGZvcgp0aGUgbmV4dCB2ZXJz aW9uLiBXZSdkIG5lZWQgdG8gZXhwbGljaXRseSBoYW5kIGluIHRoZSB0dG1fbWVtX3JlZyAob3IK d2hhdGV2ZXIgdGhlIHNwZWNpZmljIHRoaW5nIGlzIGdvaW5nIHRvIGJlKS4KCi1EYW5pZWwKPiAt LS0KPiAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jIHwgICAzICstCj4g IGRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMgICAgICAgICAgICB8ICAzMCArKysrKysrCj4g IGRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3V0aWwuYyAgICAgICB8ICAgNCArCj4gIGluY2x1 ZGUvZHJtL2RybV9jZ3JvdXAuaCAgICAgICAgICAgICAgICB8ICAxOSArKysrCj4gIGluY2x1ZGUv ZHJtL3R0bS90dG1fYm9fYXBpLmggICAgICAgICAgICB8ICAgMiArCj4gIGluY2x1ZGUvZHJtL3R0 bS90dG1fYm9fZHJpdmVyLmggICAgICAgICB8ICAgOCArKwo+ICBpbmNsdWRlL2xpbnV4L2Nncm91 cF9kcm0uaCAgICAgICAgICAgICAgfCAgIDQgKwo+ICBrZXJuZWwvY2dyb3VwL2RybS5jICAgICAg ICAgICAgICAgICAgICAgfCAxMTMgKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDggZmlsZXMg Y2hhbmdlZCwgMTgyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiAKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jCj4gaW5kZXggZTllY2MzOTUzNjczLi5hOGRmYzc4 ZWQ0NWYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0 bS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jCj4gQEAg LTE2NzgsOCArMTY3OCw5IEBAIGludCBhbWRncHVfdHRtX2luaXQoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYpCj4gIAltdXRleF9pbml0KCZhZGV2LT5tbWFuLmd0dF93aW5kb3dfbG9jayk7Cj4g IAo+ICAJLyogTm8gb3RoZXJzIHVzZXIgb2YgYWRkcmVzcyBzcGFjZSBzbyBzZXQgaXQgdG8gMCAq Lwo+IC0JciA9IHR0bV9ib19kZXZpY2VfaW5pdCgmYWRldi0+bW1hbi5iZGV2LAo+ICsJciA9IHR0 bV9ib19kZXZpY2VfaW5pdF90bXAoJmFkZXYtPm1tYW4uYmRldiwKPiAgCQkJICAgICAgICZhbWRn cHVfYm9fZHJpdmVyLAo+ICsJCQkgICAgICAgYWRldi0+ZGRldiwKPiAgCQkJICAgICAgIGFkZXYt PmRkZXYtPmFub25faW5vZGUtPmlfbWFwcGluZywKPiAgCQkJICAgICAgIGFkZXYtPm5lZWRfZG1h MzIpOwo+ICAJaWYgKHIpIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1f Ym8uYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKPiBpbmRleCAyODQ1ZmNlYjJmYmQu LmU5ZjcwNTQ3ZjBhZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYwo+IEBAIC0zNCw2ICszNCw3IEBA Cj4gICNpbmNsdWRlIDxkcm0vdHRtL3R0bV9tb2R1bGUuaD4KPiAgI2luY2x1ZGUgPGRybS90dG0v dHRtX2JvX2RyaXZlci5oPgo+ICAjaW5jbHVkZSA8ZHJtL3R0bS90dG1fcGxhY2VtZW50Lmg+Cj4g KyNpbmNsdWRlIDxkcm0vZHJtX2Nncm91cC5oPgo+ICAjaW5jbHVkZSA8bGludXgvamlmZmllcy5o Pgo+ICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4K PiBAQCAtNDIsNiArNDMsNyBAQAo+ICAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gICNpbmNs dWRlIDxsaW51eC9hdG9taWMuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9jZ3JvdXBfZHJtLmg+Cj4gIAo+ICBzdGF0aWMgdm9pZCB0dG1fYm9f Z2xvYmFsX2tvYmpfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaik7Cj4gIAo+IEBAIC0xNTEs NiArMTUzLDEwIEBAIHN0YXRpYyB2b2lkIHR0bV9ib19yZWxlYXNlX2xpc3Qoc3RydWN0IGtyZWYg Kmxpc3Rfa3JlZikKPiAgCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gYm8tPmJkZXY7Cj4g IAlzaXplX3QgYWNjX3NpemUgPSBiby0+YWNjX3NpemU7Cj4gIAo+ICsJaWYgKGJvLT5iZGV2LT5k ZGV2ICE9IE5VTEwpIC8vIFRPRE86IHJlbW92ZSBhZnRlciBkZGV2IGluaXRpYXpsaWVkIGZvciBh bGwKPiArCQlkcm1jZ3JwX3VuY2hnX21lbShibyk7Cj4gKwlwdXRfZHJtY2dycChiby0+ZHJtY2dy cCk7Cj4gKwo+ICAJQlVHX09OKGtyZWZfcmVhZCgmYm8tPmxpc3Rfa3JlZikpOwo+ICAJQlVHX09O KGtyZWZfcmVhZCgmYm8tPmtyZWYpKTsKPiAgCUJVR19PTihhdG9taWNfcmVhZCgmYm8tPmNwdV93 cml0ZXJzKSk7Cj4gQEAgLTM1Myw2ICszNTksOCBAQCBzdGF0aWMgaW50IHR0bV9ib19oYW5kbGVf bW92ZV9tZW0oc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKPiAgCQlpZiAoYm8tPm1lbS5t ZW1fdHlwZSA9PSBUVE1fUExfU1lTVEVNKSB7Cj4gIAkJCWlmIChiZGV2LT5kcml2ZXItPm1vdmVf bm90aWZ5KQo+ICAJCQkJYmRldi0+ZHJpdmVyLT5tb3ZlX25vdGlmeShibywgZXZpY3QsIG1lbSk7 Cj4gKwkJCWlmIChiby0+YmRldi0+ZGRldiAhPSBOVUxMKSAvLyBUT0RPOiByZW1vdmUgYWZ0ZXIg ZGRldiBpbml0aWF6bGllZCBmb3IgYWxsCj4gKwkJCQlkcm1jZ3JwX21lbV90cmFja19tb3ZlKGJv LCBldmljdCwgbWVtKTsKPiAgCQkJYm8tPm1lbSA9ICptZW07Cj4gIAkJCW1lbS0+bW1fbm9kZSA9 IE5VTEw7Cj4gIAkJCWdvdG8gbW92ZWQ7Cj4gQEAgLTM2MSw2ICszNjksOCBAQCBzdGF0aWMgaW50 IHR0bV9ib19oYW5kbGVfbW92ZV9tZW0oc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKPiAg Cj4gIAlpZiAoYmRldi0+ZHJpdmVyLT5tb3ZlX25vdGlmeSkKPiAgCQliZGV2LT5kcml2ZXItPm1v dmVfbm90aWZ5KGJvLCBldmljdCwgbWVtKTsKPiArCWlmIChiby0+YmRldi0+ZGRldiAhPSBOVUxM KSAvLyBUT0RPOiByZW1vdmUgYWZ0ZXIgZGRldiBpbml0aWF6bGllZCBmb3IgYWxsCj4gKwkJZHJt Y2dycF9tZW1fdHJhY2tfbW92ZShibywgZXZpY3QsIG1lbSk7Cj4gIAo+ICAJaWYgKCEob2xkX21h bi0+ZmxhZ3MgJiBUVE1fTUVNVFlQRV9GTEFHX0ZJWEVEKSAmJgo+ICAJICAgICEobmV3X21hbi0+ ZmxhZ3MgJiBUVE1fTUVNVFlQRV9GTEFHX0ZJWEVEKSkKPiBAQCAtMzc0LDYgKzM4NCw4IEBAIHN0 YXRpYyBpbnQgdHRtX2JvX2hhbmRsZV9tb3ZlX21lbShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3Qg KmJvLAo+ICAJCWlmIChiZGV2LT5kcml2ZXItPm1vdmVfbm90aWZ5KSB7Cj4gIAkJCXN3YXAoKm1l bSwgYm8tPm1lbSk7Cj4gIAkJCWJkZXYtPmRyaXZlci0+bW92ZV9ub3RpZnkoYm8sIGZhbHNlLCBt ZW0pOwo+ICsJCQlpZiAoYm8tPmJkZXYtPmRkZXYgIT0gTlVMTCkgLy8gVE9ETzogcmVtb3ZlIGFm dGVyIGRkZXYgaW5pdGlhemxpZWQgZm9yIGFsbAo+ICsJCQkJZHJtY2dycF9tZW1fdHJhY2tfbW92 ZShibywgZXZpY3QsIG1lbSk7Cj4gIAkJCXN3YXAoKm1lbSwgYm8tPm1lbSk7Cj4gIAkJfQo+ICAK PiBAQCAtMTI3NSw2ICsxMjg3LDEwIEBAIGludCB0dG1fYm9faW5pdF9yZXNlcnZlZChzdHJ1Y3Qg dHRtX2JvX2RldmljZSAqYmRldiwKPiAgCQlXQVJOX09OKCFsb2NrZWQpOwo+ICAJfQo+ICAKPiAr CWJvLT5kcm1jZ3JwID0gZ2V0X2RybWNncnAoY3VycmVudCk7Cj4gKwlpZiAoYm8tPmJkZXYtPmRk ZXYgIT0gTlVMTCkgLy8gVE9ETzogcmVtb3ZlIGFmdGVyIGRkZXYgaW5pdGlhemxpZWQgZm9yIGFs bAo+ICsJCWRybWNncnBfY2hnX21lbShibyk7Cj4gKwo+ICAJaWYgKGxpa2VseSghcmV0KSkKPiAg CQlyZXQgPSB0dG1fYm9fdmFsaWRhdGUoYm8sIHBsYWNlbWVudCwgY3R4KTsKPiAgCj4gQEAgLTE2 NjYsNiArMTY4MiwyMCBAQCBpbnQgdHRtX2JvX2RldmljZV9pbml0KHN0cnVjdCB0dG1fYm9fZGV2 aWNlICpiZGV2LAo+ICB9Cj4gIEVYUE9SVF9TWU1CT0wodHRtX2JvX2RldmljZV9pbml0KTsKPiAg Cj4gKy8qIFRPRE8gbWVyZ2Ugd2l0aCBvZmZpY2lhbCBmdW5jdGlvbiB3aGVuIGltcGxlbWVudGF0 aW9uIGZpbmFsaXplZCovCj4gK2ludCB0dG1fYm9fZGV2aWNlX2luaXRfdG1wKHN0cnVjdCB0dG1f Ym9fZGV2aWNlICpiZGV2LAo+ICsJCXN0cnVjdCB0dG1fYm9fZHJpdmVyICpkcml2ZXIsCj4gKwkJ c3RydWN0IGRybV9kZXZpY2UgKmRkZXYsCj4gKwkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBp bmcsCj4gKwkJYm9vbCBuZWVkX2RtYTMyKQo+ICt7Cj4gKwlpbnQgcmV0ID0gdHRtX2JvX2Rldmlj ZV9pbml0KGJkZXYsIGRyaXZlciwgbWFwcGluZywgbmVlZF9kbWEzMik7Cj4gKwo+ICsJYmRldi0+ ZGRldiA9IGRkZXY7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0wodHRtX2Jv X2RldmljZV9pbml0X3RtcCk7Cj4gKwo+ICAvKgo+ICAgKiBidWZmZXIgb2JqZWN0IHZtIGZ1bmN0 aW9ucy4KPiAgICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3V0 aWwuYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3V0aWwuYwo+IGluZGV4IDg5NWQ3N2Q3 OTllNC4uNGVkNzg0N2MyMWY0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRt X2JvX3V0aWwuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3V0aWwuYwo+IEBA IC0zMiw2ICszMiw3IEBACj4gICNpbmNsdWRlIDxkcm0vdHRtL3R0bV9ib19kcml2ZXIuaD4KPiAg I2luY2x1ZGUgPGRybS90dG0vdHRtX3BsYWNlbWVudC5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV92 bWFfbWFuYWdlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jZ3JvdXAuaD4KPiAgI2luY2x1ZGUg PGxpbnV4L2lvLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+Cj4gICNpbmNsdWRlIDxs aW51eC93YWl0Lmg+Cj4gQEAgLTUyMiw2ICs1MjMsOSBAQCBzdGF0aWMgaW50IHR0bV9idWZmZXJf b2JqZWN0X3RyYW5zZmVyKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCj4gIAlyZXQgPSBy ZXNlcnZhdGlvbl9vYmplY3RfdHJ5bG9jayhmYm8tPmJhc2UucmVzdik7Cj4gIAlXQVJOX09OKCFy ZXQpOwo+ICAKPiArCWlmIChiby0+YmRldi0+ZGRldiAhPSBOVUxMKSAvLyBUT0RPOiByZW1vdmUg YWZ0ZXIgZGRldiBpbml0aWF6bGllZCBmb3IgYWxsCj4gKwkJZHJtY2dycF9jaGdfbWVtKGJvKTsK PiArCj4gIAkqbmV3X29iaiA9ICZmYm8tPmJhc2U7Cj4gIAlyZXR1cm4gMDsKPiAgfQo+IGRpZmYg LS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY2dyb3VwLmggYi9pbmNsdWRlL2RybS9kcm1fY2dyb3Vw LmgKPiBpbmRleCA4NzExYjdjNWY3YmYuLjQ4YWI1NDUwY2YxNyAxMDA2NDQKPiAtLS0gYS9pbmNs dWRlL2RybS9kcm1fY2dyb3VwLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fY2dyb3VwLmgKPiBA QCAtNSw2ICs1LDcgQEAKPiAgI2RlZmluZSBfX0RSTV9DR1JPVVBfSF9fCj4gIAo+ICAjaW5jbHVk ZSA8bGludXgvY2dyb3VwX2RybS5oPgo+ICsjaW5jbHVkZSA8ZHJtL3R0bS90dG1fYm9fYXBpLmg+ Cj4gIAo+ICAjaWZkZWYgQ09ORklHX0NHUk9VUF9EUk0KPiAgCj4gQEAgLTE4LDYgKzE5LDExIEBA IHZvaWQgZHJtY2dycF91bmNoZ19ib19hbGxvYyhzdHJ1Y3QgZHJtY2dycCAqZHJtY2dycCwgc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCQlzaXplX3Qgc2l6ZSk7Cj4gIGJvb2wgZHJtY2dycF9i b19jYW5fYWxsb2NhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAo+ICAJCXNpemVfdCBzaXplKTsKPiArdm9pZCBkcm1jZ3JwX2NoZ19tZW0oc3RydWN0 IHR0bV9idWZmZXJfb2JqZWN0ICp0Ym8pOwo+ICt2b2lkIGRybWNncnBfdW5jaGdfbWVtKHN0cnVj dCB0dG1fYnVmZmVyX29iamVjdCAqdGJvKTsKPiArdm9pZCBkcm1jZ3JwX21lbV90cmFja19tb3Zl KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqb2xkX2JvLCBib29sIGV2aWN0LAo+ICsJCXN0cnVj dCB0dG1fbWVtX3JlZyAqbmV3X21lbSk7Cj4gKwo+ICAjZWxzZQo+ICBzdGF0aWMgaW5saW5lIGlu dCBkcm1jZ3JwX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2aWNlKQo+ICB7 Cj4gQEAgLTUwLDUgKzU2LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkcm1jZ3JwX2JvX2Nhbl9h bGxvY2F0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCj4gIHsKPiAgCXJldHVybiB0cnVlOwo+ ICB9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgZHJtY2dycF9jaGdfbWVtKHN0cnVjdCB0dG1f YnVmZmVyX29iamVjdCAqdGJvKQo+ICt7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBk cm1jZ3JwX3VuY2hnX21lbShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKnRibykKPiArewo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgZHJtY2dycF9tZW1fdHJhY2tfbW92ZShzdHJ1Y3Qg dHRtX2J1ZmZlcl9vYmplY3QgKm9sZF9ibywKPiArCQlib29sIGV2aWN0LCBzdHJ1Y3QgdHRtX21l bV9yZWcgKm5ld19tZW0pCj4gK3sKPiArfQo+ICAjZW5kaWYgLyogQ09ORklHX0NHUk9VUF9EUk0g Ki8KPiAgI2VuZGlmIC8qIF9fRFJNX0NHUk9VUF9IX18gKi8KPiBkaWZmIC0tZ2l0IGEvaW5jbHVk ZS9kcm0vdHRtL3R0bV9ib19hcGkuaCBiL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fYXBpLmgKPiBp bmRleCA0OWQ5Y2RmYzU4ZjIuLmFlMWJiNmRhZWM4MSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2Ry bS90dG0vdHRtX2JvX2FwaS5oCj4gKysrIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19hcGkuaAo+ IEBAIC0xMjgsNiArMTI4LDcgQEAgc3RydWN0IHR0bV90dDsKPiAgICogc3RydWN0IHR0bV9idWZm ZXJfb2JqZWN0Cj4gICAqCj4gICAqIEBiZGV2OiBQb2ludGVyIHRvIHRoZSBidWZmZXIgb2JqZWN0 IGRldmljZSBzdHJ1Y3R1cmUuCj4gKyAqIEBkcm1jZ3JwOiBEUk0gY2dyb3VwIHRoaXMgb2JqZWN0 IGJlbG9uZ3MgdG8uCj4gICAqIEB0eXBlOiBUaGUgYm8gdHlwZS4KPiAgICogQGRlc3Ryb3k6IERl c3RydWN0aW9uIGZ1bmN0aW9uLiBJZiBOVUxMLCBrZnJlZSBpcyB1c2VkLgo+ICAgKiBAbnVtX3Bh Z2VzOiBBY3R1YWwgbnVtYmVyIG9mIHBhZ2VzLgo+IEBAIC0xNzQsNiArMTc1LDcgQEAgc3RydWN0 IHR0bV9idWZmZXJfb2JqZWN0IHsKPiAgCSAqLwo+ICAKPiAgCXN0cnVjdCB0dG1fYm9fZGV2aWNl ICpiZGV2Owo+ICsJc3RydWN0IGRybWNncnAgKmRybWNncnA7Cj4gIAllbnVtIHR0bV9ib190eXBl IHR5cGU7Cj4gIAl2b2lkICgqZGVzdHJveSkgKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqKTsK PiAgCXVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS90 dG0vdHRtX2JvX2RyaXZlci5oIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19kcml2ZXIuaAo+IGlu ZGV4IGMwMDgzNDZjMjQwMS4uNGNiY2I0MWU1YWE5IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJt L3R0bS90dG1fYm9fZHJpdmVyLmgKPiArKysgYi9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2RyaXZl ci5oCj4gQEAgLTMwLDYgKzMwLDcgQEAKPiAgI2lmbmRlZiBfVFRNX0JPX0RSSVZFUl9IXwo+ICAj ZGVmaW5lIF9UVE1fQk9fRFJJVkVSX0hfCj4gIAo+ICsjaW5jbHVkZSA8ZHJtL2RybV9kZXZpY2Uu aD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fbW0uaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fdm1hX21h bmFnZXIuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgo+IEBAIC00NDIsNiArNDQz LDcgQEAgZXh0ZXJuIHN0cnVjdCB0dG1fYm9fZ2xvYmFsIHsKPiAgICogQGRyaXZlcjogUG9pbnRl ciB0byBhIHN0cnVjdCB0dG1fYm9fZHJpdmVyIHN0cnVjdCBzZXR1cCBieSB0aGUgZHJpdmVyLgo+ ICAgKiBAbWFuOiBBbiBhcnJheSBvZiBtZW1fdHlwZV9tYW5hZ2Vycy4KPiAgICogQHZtYV9tYW5h Z2VyOiBBZGRyZXNzIHNwYWNlIG1hbmFnZXIKPiArICogQGRkZXY6IFBvaW50ZXIgdG8gc3RydWN0 IGRybV9kZXZpY2UgdGhhdCB0aGlzIHR0bV9ib19kZXZpY2UgYmVsb25ncyB0bwo+ICAgKiBscnVf bG9jazogU3BpbmxvY2sgdGhhdCBwcm90ZWN0cyB0aGUgYnVmZmVyK2RldmljZSBscnUgbGlzdHMg YW5kCj4gICAqIGRkZXN0cm95IGxpc3RzLgo+ICAgKiBAZGV2X21hcHBpbmc6IEEgcG9pbnRlciB0 byB0aGUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgcmVwcmVzZW50aW5nIHRoZQo+IEBAIC00NjAsNiAr NDYyLDcgQEAgc3RydWN0IHR0bV9ib19kZXZpY2Ugewo+ICAJc3RydWN0IHR0bV9ib19nbG9iYWwg Kmdsb2I7Cj4gIAlzdHJ1Y3QgdHRtX2JvX2RyaXZlciAqZHJpdmVyOwo+ICAJc3RydWN0IHR0bV9t ZW1fdHlwZV9tYW5hZ2VyIG1hbltUVE1fTlVNX01FTV9UWVBFU107Cj4gKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGRldjsKPiAgCj4gIAkvKgo+ICAJICogUHJvdGVjdGVkIGJ5IGludGVybmFsIGxvY2tz Lgo+IEBAIC01OTgsNiArNjAxLDExIEBAIGludCB0dG1fYm9fZGV2aWNlX2luaXQoc3RydWN0IHR0 bV9ib19kZXZpY2UgKmJkZXYsCj4gIAkJICAgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBw aW5nLAo+ICAJCSAgICAgICBib29sIG5lZWRfZG1hMzIpOwo+ICAKPiAraW50IHR0bV9ib19kZXZp Y2VfaW5pdF90bXAoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCj4gKwkJICAgICAgIHN0cnVj dCB0dG1fYm9fZHJpdmVyICpkcml2ZXIsCj4gKwkJICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpk ZGV2LAo+ICsJCSAgICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKPiArCQkgICAg ICAgYm9vbCBuZWVkX2RtYTMyKTsKPiAgLyoqCj4gICAqIHR0bV9ib191bm1hcF92aXJ0dWFsCj4g ICAqCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwX2RybS5oIGIvaW5jbHVkZS9s aW51eC9jZ3JvdXBfZHJtLmgKPiBpbmRleCBlNDQwMGIyMWFiOGUuLjE0MWJlYTA2Zjc0YyAxMDA2 NDQKPiAtLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9kcm0uaAo+ICsrKyBiL2luY2x1ZGUvbGlu dXgvY2dyb3VwX2RybS5oCj4gQEAgLTksNiArOSw3IEBACj4gICNpbmNsdWRlIDxsaW51eC9tdXRl eC5oPgo+ICAjaW5jbHVkZSA8bGludXgvY2dyb3VwLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2Zp bGUuaD4KPiArI2luY2x1ZGUgPGRybS90dG0vdHRtX3BsYWNlbWVudC5oPgo+ICAKPiAgLyogbGlt aXQgZGVmaW5lZCBwZXIgdGhlIHdheSBkcm1fbWlub3JfYWxsb2Mgb3BlcmF0ZXMgKi8KPiAgI2Rl ZmluZSBNQVhfRFJNX0RFViAoNjQgKiBEUk1fTUlOT1JfUkVOREVSKQo+IEBAIC0yMiw2ICsyMyw5 IEBAIHN0cnVjdCBkcm1jZ3JwX2RldmljZV9yZXNvdXJjZSB7Cj4gIAlzaXplX3QJCQlib19saW1p dHNfcGVha19hbGxvY2F0ZWQ7Cj4gIAo+ICAJczY0CQkJYm9fc3RhdHNfY291bnRfYWxsb2NhdGVk Owo+ICsKPiArCXM2NAkJCW1lbV9zdGF0c1tUVE1fUExfUFJJVisxXTsKPiArCXM2NAkJCW1lbV9z dGF0c19ldmljdDsKPiAgfTsKPiAgCj4gIHN0cnVjdCBkcm1jZ3JwIHsKPiBkaWZmIC0tZ2l0IGEv a2VybmVsL2Nncm91cC9kcm0uYyBiL2tlcm5lbC9jZ3JvdXAvZHJtLmMKPiBpbmRleCA5MTQ0Zjkz Yjg1MWYuLjVhZWU0MmE2MjhjMSAxMDA2NDQKPiAtLS0gYS9rZXJuZWwvY2dyb3VwL2RybS5jCj4g KysrIGIva2VybmVsL2Nncm91cC9kcm0uYwo+IEBAIC04LDYgKzgsOCBAQAo+ICAjaW5jbHVkZSA8 bGludXgvbXV0ZXguaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2Nncm91cF9kcm0uaD4KPiAgI2luY2x1 ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsjaW5jbHVkZSA8ZHJtL3R0bS90dG1fYm9fYXBpLmg+Cj4g KyNpbmNsdWRlIDxkcm0vdHRtL3R0bV9ib19kcml2ZXIuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1f ZGV2aWNlLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2lvY3RsLmg+Cj4gICNpbmNsdWRlIDxkcm0v ZHJtX2Nncm91cC5oPgo+IEBAIC0zNCw2ICszNiw4IEBAIGVudW0gZHJtY2dycF9yZXNfdHlwZSB7 Cj4gIAlEUk1DR1JQX1RZUEVfQk9fVE9UQUwsCj4gIAlEUk1DR1JQX1RZUEVfQk9fUEVBSywKPiAg CURSTUNHUlBfVFlQRV9CT19DT1VOVCwKPiArCURSTUNHUlBfVFlQRV9NRU0sCj4gKwlEUk1DR1JQ X1RZUEVfTUVNX0VWSUNULAo+ICB9Owo+ICAKPiAgZW51bSBkcm1jZ3JwX2ZpbGVfdHlwZSB7Cj4g QEAgLTQyLDYgKzQ2LDEzIEBAIGVudW0gZHJtY2dycF9maWxlX3R5cGUgewo+ICAJRFJNQ0dSUF9G VFlQRV9ERUZBVUxULAo+ICB9Owo+ICAKPiArc3RhdGljIGNoYXIgY29uc3QgKnR0bV9wbGFjZW1l bnRfbmFtZXNbXSA9IHsKPiArCVtUVE1fUExfU1lTVEVNXSA9ICJzeXN0ZW0iLAo+ICsJW1RUTV9Q TF9UVF0gICAgID0gInR0IiwKPiArCVtUVE1fUExfVlJBTV0gICA9ICJ2cmFtIiwKPiArCVtUVE1f UExfUFJJVl0gICA9ICJwcml2IiwKPiArfTsKPiArCj4gIC8qIGluZGV4ZWQgYnkgZHJtX21pbm9y IGZvciBhY2Nlc3Mgc3BlZWQgKi8KPiAgc3RhdGljIHN0cnVjdCBkcm1jZ3JwX2RldmljZQkqa25v d25fZHJtY2dycF9kZXZzW01BWF9EUk1fREVWXTsKPiAgCj4gQEAgLTEzNCw2ICsxNDUsNyBAQCBk cm1jZ3JwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcykK PiAgc3RhdGljIGlubGluZSB2b2lkIGRybWNncnBfcHJpbnRfc3RhdHMoc3RydWN0IGRybWNncnBf ZGV2aWNlX3Jlc291cmNlICpkZHIsCj4gIAkJc3RydWN0IHNlcV9maWxlICpzZiwgZW51bSBkcm1j Z3JwX3Jlc190eXBlIHR5cGUpCj4gIHsKPiArCWludCBpOwo+ICAJaWYgKGRkciA9PSBOVUxMKSB7 Cj4gIAkJc2VxX3B1dHMoc2YsICJcbiIpOwo+ICAJCXJldHVybjsKPiBAQCAtMTQ5LDYgKzE2MSwx NiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHJtY2dycF9wcmludF9zdGF0cyhzdHJ1Y3QgZHJtY2dy cF9kZXZpY2VfcmVzb3VyY2UgKmRkciwKPiAgCWNhc2UgRFJNQ0dSUF9UWVBFX0JPX0NPVU5UOgo+ ICAJCXNlcV9wcmludGYoc2YsICIlbGxkXG4iLCBkZHItPmJvX3N0YXRzX2NvdW50X2FsbG9jYXRl ZCk7Cj4gIAkJYnJlYWs7Cj4gKwljYXNlIERSTUNHUlBfVFlQRV9NRU06Cj4gKwkJZm9yIChpID0g MDsgaSA8PSBUVE1fUExfUFJJVjsgaSsrKSB7Cj4gKwkJCXNlcV9wcmludGYoc2YsICIlcz0lbGxk ICIsIHR0bV9wbGFjZW1lbnRfbmFtZXNbaV0sCj4gKwkJCQkJZGRyLT5tZW1fc3RhdHNbaV0pOwo+ ICsJCX0KPiArCQlzZXFfcHV0cyhzZiwgIlxuIik7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIERSTUNH UlBfVFlQRV9NRU1fRVZJQ1Q6Cj4gKwkJc2VxX3ByaW50ZihzZiwgIiVsbGRcbiIsIGRkci0+bWVt X3N0YXRzX2V2aWN0KTsKPiArCQlicmVhazsKPiAgCWRlZmF1bHQ6Cj4gIAkJc2VxX3B1dHMoc2Ys ICJcbiIpOwo+ICAJCWJyZWFrOwo+IEBAIC00MDYsNiArNDI4LDE4IEBAIHN0cnVjdCBjZnR5cGUg ZmlsZXNbXSA9IHsKPiAgCQkucHJpdmF0ZSA9IERSTUNHX0NURl9QUklWKERSTUNHUlBfVFlQRV9C T19DT1VOVCwKPiAgCQkJCQkJRFJNQ0dSUF9GVFlQRV9TVEFUUyksCj4gIAl9LAo+ICsJewo+ICsJ CS5uYW1lID0gIm1lbW9yeS5zdGF0cyIsCj4gKwkJLnNlcV9zaG93ID0gZHJtY2dycF9ib19zaG93 LAo+ICsJCS5wcml2YXRlID0gRFJNQ0dfQ1RGX1BSSVYoRFJNQ0dSUF9UWVBFX01FTSwKPiArCQkJ CQkJRFJNQ0dSUF9GVFlQRV9TVEFUUyksCj4gKwl9LAo+ICsJewo+ICsJCS5uYW1lID0gIm1lbW9y eS5ldmljdC5zdGF0cyIsCj4gKwkJLnNlcV9zaG93ID0gZHJtY2dycF9ib19zaG93LAo+ICsJCS5w cml2YXRlID0gRFJNQ0dfQ1RGX1BSSVYoRFJNQ0dSUF9UWVBFX01FTV9FVklDVCwKPiArCQkJCQkJ RFJNQ0dSUF9GVFlQRV9TVEFUUyksCj4gKwl9LAo+ICAJeyB9CS8qIHRlcm1pbmF0ZSAqLwo+ICB9 Owo+ICAKPiBAQCAtNTU1LDMgKzU4OSw4MiBAQCB2b2lkIGRybWNncnBfdW5jaGdfYm9fYWxsb2Mo c3RydWN0IGRybWNncnAgKmRybWNncnAsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAltdXRl eF91bmxvY2soJmtub3duX2RybWNncnBfZGV2c1tkZXZJZHhdLT5tdXRleCk7Cj4gIH0KPiAgRVhQ T1JUX1NZTUJPTChkcm1jZ3JwX3VuY2hnX2JvX2FsbG9jKTsKPiArCj4gK3ZvaWQgZHJtY2dycF9j aGdfbWVtKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqdGJvKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gdGJvLT5iZGV2LT5kZGV2Owo+ICsJc3RydWN0IGRybWNncnAgKmRybWNn cnAgPSB0Ym8tPmRybWNncnA7Cj4gKwlpbnQgZGV2SWR4ID0gZGV2LT5wcmltYXJ5LT5pbmRleDsK PiArCXM2NCBzaXplID0gKHM2NCkodGJvLT5tZW0uc2l6ZSk7Cj4gKwlpbnQgbWVtX3R5cGUgPSB0 Ym8tPm1lbS5tZW1fdHlwZTsKPiArCXN0cnVjdCBkcm1jZ3JwX2RldmljZV9yZXNvdXJjZSAqZGRy Owo+ICsKPiArCWlmIChkcm1jZ3JwID09IE5VTEwgfHwga25vd25fZHJtY2dycF9kZXZzW2Rldklk eF0gPT0gTlVMTCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJbWVtX3R5cGUgPSBtZW1fdHlwZSA+IFRU TV9QTF9QUklWID8gVFRNX1BMX1BSSVYgOiBtZW1fdHlwZTsKPiArCj4gKwltdXRleF9sb2NrKCZr bm93bl9kcm1jZ3JwX2RldnNbZGV2SWR4XS0+bXV0ZXgpOwo+ICsJZm9yICggOyBkcm1jZ3JwICE9 IE5VTEw7IGRybWNncnAgPSBwYXJlbnRfZHJtY2dycChkcm1jZ3JwKSkgewo+ICsJCWRkciA9IGRy bWNncnAtPmRldl9yZXNvdXJjZXNbZGV2SWR4XTsKPiArCQlkZHItPm1lbV9zdGF0c1ttZW1fdHlw ZV0gKz0gc2l6ZTsKPiArCX0KPiArCW11dGV4X3VubG9jaygma25vd25fZHJtY2dycF9kZXZzW2Rl dklkeF0tPm11dGV4KTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybWNncnBfY2hnX21lbSk7Cj4g Kwo+ICt2b2lkIGRybWNncnBfdW5jaGdfbWVtKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqdGJv KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gdGJvLT5iZGV2LT5kZGV2Owo+ICsJ c3RydWN0IGRybWNncnAgKmRybWNncnAgPSB0Ym8tPmRybWNncnA7Cj4gKwlpbnQgZGV2SWR4ID0g ZGV2LT5wcmltYXJ5LT5pbmRleDsKPiArCXM2NCBzaXplID0gKHM2NCkodGJvLT5tZW0uc2l6ZSk7 Cj4gKwlpbnQgbWVtX3R5cGUgPSB0Ym8tPm1lbS5tZW1fdHlwZTsKPiArCXN0cnVjdCBkcm1jZ3Jw X2RldmljZV9yZXNvdXJjZSAqZGRyOwo+ICsKPiArCWlmIChkcm1jZ3JwID09IE5VTEwgfHwga25v d25fZHJtY2dycF9kZXZzW2RldklkeF0gPT0gTlVMTCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJbWVt X3R5cGUgPSBtZW1fdHlwZSA+IFRUTV9QTF9QUklWID8gVFRNX1BMX1BSSVYgOiBtZW1fdHlwZTsK PiArCj4gKwltdXRleF9sb2NrKCZrbm93bl9kcm1jZ3JwX2RldnNbZGV2SWR4XS0+bXV0ZXgpOwo+ ICsJZm9yICggOyBkcm1jZ3JwICE9IE5VTEw7IGRybWNncnAgPSBwYXJlbnRfZHJtY2dycChkcm1j Z3JwKSkgewo+ICsJCWRkciA9IGRybWNncnAtPmRldl9yZXNvdXJjZXNbZGV2SWR4XTsKPiArCQlk ZHItPm1lbV9zdGF0c1ttZW1fdHlwZV0gLT0gc2l6ZTsKPiArCX0KPiArCW11dGV4X3VubG9jaygm a25vd25fZHJtY2dycF9kZXZzW2RldklkeF0tPm11dGV4KTsKPiArfQo+ICtFWFBPUlRfU1lNQk9M KGRybWNncnBfdW5jaGdfbWVtKTsKPiArCj4gK3ZvaWQgZHJtY2dycF9tZW1fdHJhY2tfbW92ZShz dHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKm9sZF9ibywgYm9vbCBldmljdCwKPiArCQlzdHJ1Y3Qg dHRtX21lbV9yZWcgKm5ld19tZW0pCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBv bGRfYm8tPmJkZXYtPmRkZXY7Cj4gKwlzdHJ1Y3QgZHJtY2dycCAqZHJtY2dycCA9IG9sZF9iby0+ ZHJtY2dycDsKPiArCXM2NCBtb3ZlX2luX2J5dGVzID0gKHM2NCkob2xkX2JvLT5tZW0uc2l6ZSk7 Cj4gKwlpbnQgZGV2SWR4ID0gZGV2LT5wcmltYXJ5LT5pbmRleDsKPiArCWludCBvbGRfbWVtX3R5 cGUgPSBvbGRfYm8tPm1lbS5tZW1fdHlwZTsKPiArCWludCBuZXdfbWVtX3R5cGUgPSBuZXdfbWVt LT5tZW1fdHlwZTsKPiArCXN0cnVjdCBkcm1jZ3JwX2RldmljZV9yZXNvdXJjZSAqZGRyOwo+ICsJ c3RydWN0IGRybWNncnBfZGV2aWNlICprbm93bl9kZXY7Cj4gKwo+ICsJa25vd25fZGV2ID0ga25v d25fZHJtY2dycF9kZXZzW2RldklkeF07Cj4gKwo+ICsJaWYgKGRybWNncnAgPT0gTlVMTCB8fCBr bm93bl9kZXYgPT0gTlVMTCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJb2xkX21lbV90eXBlID0gb2xk X21lbV90eXBlID4gVFRNX1BMX1BSSVYgPyBUVE1fUExfUFJJViA6IG9sZF9tZW1fdHlwZTsKPiAr CW5ld19tZW1fdHlwZSA9IG5ld19tZW1fdHlwZSA+IFRUTV9QTF9QUklWID8gVFRNX1BMX1BSSVYg OiBuZXdfbWVtX3R5cGU7Cj4gKwo+ICsJbXV0ZXhfbG9jaygma25vd25fZGV2LT5tdXRleCk7Cj4g Kwlmb3IgKCA7IGRybWNncnAgIT0gTlVMTDsgZHJtY2dycCA9IHBhcmVudF9kcm1jZ3JwKGRybWNn cnApKSB7Cj4gKwkJZGRyID0gZHJtY2dycC0+ZGV2X3Jlc291cmNlc1tkZXZJZHhdOwo+ICsJCWRk ci0+bWVtX3N0YXRzW29sZF9tZW1fdHlwZV0gLT0gbW92ZV9pbl9ieXRlczsKPiArCQlkZHItPm1l bV9zdGF0c1tuZXdfbWVtX3R5cGVdICs9IG1vdmVfaW5fYnl0ZXM7Cj4gKwo+ICsJCWlmIChldmlj dCkKPiArCQkJZGRyLT5tZW1fc3RhdHNfZXZpY3QrKzsKPiArCX0KPiArCW11dGV4X3VubG9jaygm a25vd25fZGV2LT5tdXRleCk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1jZ3JwX21lbV90cmFj a19tb3ZlKTsKPiAtLSAKPiAyLjIxLjAKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwo+IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKPiBkcmktZGV2ZWxA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2lu ZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0 CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=