From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v3 01/19] drm: Add |struct drm_gem_vram_object| and helpers Date: Tue, 30 Apr 2019 16:27:06 +0200 Message-ID: <20190430142706.GV3271@phenom.ffwll.local> References: <20190429144341.12615-1-tzimmermann@suse.de> <20190429144341.12615-2-tzimmermann@suse.de> <20190429195855.GA6610@ravnborg.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id D1931891DC for ; Tue, 30 Apr 2019 14:27:12 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id a6so12521716edv.1 for ; Tue, 30 Apr 2019 07:27:12 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20190429195855.GA6610@ravnborg.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Sam Ravnborg Cc: Thomas Zimmermann , airlied@linux.ie, puck.chen@hisilicon.com, dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org, z.liuxinliang@hisilicon.com, hdegoede@redhat.com, kong.kongxinwei@hisilicon.com, ray.huang@amd.com, kraxel@redhat.com, zourongrong@gmail.com, Jerry.Zhang@amd.com, christian.koenig@amd.com List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCBBcHIgMjksIDIwMTkgYXQgMDk6NTg6NTVQTSArMDIwMCwgU2FtIFJhdm5ib3JnIHdy b3RlOgo+IEhpIFRob21hcy4KPiAKPiBTb21lIG1pbm9yIHRoaW5ncyBhbmQgc29tZSBiaWtlc2hl ZGRpbmcgdG9vLgo+IAo+IE9uZSBnZW5lcmFsXldiaWtlc2hlZGRpbmcgdGhpbmcgLSB1bmludDMy X3QgaXMgdXNlZCBpbiBtYW55IHBsYWNlcy4KPiBBbmQgdGhlbiBzNjQgaW4gb25lIHBsYWNlLgo+ IFNlZW1zIGxpa2UgdHdvIGNvbmNlcHRzIGFyZSBtaXhlZC4KPiBNYXliZSBiZSBjb25zaXN0ZW50 IGFuZCB1c2UgdTMyLCBzMzIgZXZlcnl3aGVyZT8KPiAKPiBJIGRpZCBub3QgcmVhZCB0aGUgY29k ZSBjYXJlZnVsbHkgZW5vdWdoIHRvIHVuZGVyc3RhbmQgaXQuCj4gSSBjYW5ub3QgZ2l2ZSBhIHIt YiBvciBhLWIgLSBhcyBJIGZlZWwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgdG8gZG8KPiBzby4K PiAKPiAJU2FtCj4gCj4gT24gTW9uLCBBcHIgMjksIDIwMTkgYXQgMDQ6NDM6MjNQTSArMDIwMCwg VGhvbWFzIFppbW1lcm1hbm4gd3JvdGU6Cj4gPiBUaGUgdHlwZSB8c3RydWN0IGRybV9nZW1fdnJh bV9vYmplY3R8IGltcGxlbWVudHMgYSBHRU0gb2JqZWN0IGZvciBzaW1wbGUKPiA+IGZyYW1lYnVm ZmVyIGRldmljZXMgd2l0aCBkZWRpY2F0ZWQgdmlkZW8gbWVtb3J5LiBUaGUgQk8gaXMgZWl0aGVy IGxvY2F0ZWQKPiA+IGluIFZSQU0gb3Igc3lzdGVtIG1lbW9yeS4KPiA+IAo+ID4gVGhlIGltcGxl bWVudGF0aW9uIGhhcyBiZWVuIGNyZWF0ZWQgZnJvbSB0aGUgcmVzcGVjdGl2ZSBjb2RlIGluIGFz dCwKPiA+IGJvY2hzIGFuZCBtZ2FnMjAwLiBUaGVzZSBkcml2ZXJzIGNvcHkgdGhlaXIgaW1wbGVt ZW50YXRpb24gZnJvbSBlYWNoCj4gPiBvdGhlcjsgZXhjZXB0IGZvciB0aGUgbmFtZXMgb2Ygc2V2 ZXJhbCBkYXRhIHR5cGVzLiBUaGUgaGVscGVycyBhcmUKPiA+IGN1cnJlbnRseSBidWlsZCB3aXRo IFRUTSwgYnV0IHRoaXMgaXMgY29uc2lkZXJlZCBhbiBpbXBsZW1lbnRhdGlvbgo+ID4gZGV0YWls IGFuZCBtYXkgY2hhbmdlIGluIGZ1dHVyZSB1cGRhdGVzLgo+ID4gCj4gPiB2MjoKPiA+IAkqIHJl bmFtZSB0byB8c3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3R8Cj4gPiAJKiBtb3ZlIGRybV9pc19n ZW1fdHRtKCkgdG8gYSBsYXRlciBwYXRjaCBpbiB0aGUgc2VyaWVzCj4gPiAJKiBhZGQgZHJtX2dl bV92cmFtX2ttYXBfYXQoKQo+ID4gCSogcmV0dXJuIGlzX2lvbWVtIGZyb20ga21hcCBmdW5jdGlv bnMKPiA+IAkqIHJlZGVmaW5lIFRUTSBwbGFjZW1lbnQgZmxhZ3MgZm9yIHB1YmxpYyBpbnRlcmZh Y2UKPiA+IAkqIGRvY3VtZW50YXRpb24gZml4ZXMKPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogVGhv bWFzIFppbW1lcm1hbm4gPHR6aW1tZXJtYW5uQHN1c2UuZGU+Cj4gPiAtLS0KPiA+ICBEb2N1bWVu dGF0aW9uL2dwdS9kcm0tbW0ucnN0ICAgICAgICAgICAgIHwgIDEyICsKPiA+ICBkcml2ZXJzL2dw dS9kcm0vS2NvbmZpZyAgICAgICAgICAgICAgICAgIHwgIDEzICsKPiA+ICBkcml2ZXJzL2dwdS9k cm0vTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICA0ICsKPiA+ICBkcml2ZXJzL2dwdS9kcm0v ZHJtX2dlbV92cmFtX2hlbHBlci5jICAgIHwgNDEwICsrKysrKysrKysrKysrKysrKysrKysrCj4g PiAgZHJpdmVycy9ncHUvZHJtL2RybV92cmFtX2hlbHBlcl9jb21tb24uYyB8ICAgNiArCj4gPiAg aW5jbHVkZS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5oICAgICAgICB8ICA5MiArKysrKwo+ID4g IDYgZmlsZXMgY2hhbmdlZCwgNTM3IGluc2VydGlvbnMoKykKPiA+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuYwo+ID4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZHJtX3ZyYW1faGVscGVyX2NvbW1vbi5jCj4gPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaAo+ID4gCj4g PiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLW1tLnJzdCBiL0RvY3VtZW50YXRp b24vZ3B1L2RybS1tbS5yc3QKPiA+IGluZGV4IDU0YTY5NmQ5NjFhNy4uZDUzMjdlZDYwOGQ3IDEw MDY0NAo+ID4gLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLW1tLnJzdAo+ID4gKysrIGIvRG9j dW1lbnRhdGlvbi9ncHUvZHJtLW1tLnJzdAo+ID4gQEAgLTM4MCw2ICszODAsMTggQEAgR0VNIENN QSBIZWxwZXIgRnVuY3Rpb25zIFJlZmVyZW5jZQo+ID4gIC4uIGtlcm5lbC1kb2M6OiBkcml2ZXJz L2dwdS9kcm0vZHJtX2dlbV9jbWFfaGVscGVyLmMKPiA+ICAgICA6ZXhwb3J0Ogo+ID4gIAo+ID4g K0dFTSBWUkFNIEhlbHBlciBGdW5jdGlvbnMgUmVmZXJlbmNlCj4gPiArLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gKwo+ID4gKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dw dS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5jCj4gPiArICAgOmRvYzogb3ZlcnZpZXcKPiA+ICsK PiA+ICsuLiBrZXJuZWwtZG9jOjogaW5jbHVkZS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5oCj4g PiArICAgOmludGVybmFsOgo+ID4gKwo+ID4gKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9k cm0vZHJtX2dlbV92cmFtX2hlbHBlci5jCj4gPiArICAgOmV4cG9ydDoKPiA+ICsKPiA+ICBWTUEg T2Zmc2V0IE1hbmFnZXIKPiA+ICA9PT09PT09PT09PT09PT09PT0KPiA+ICAKPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4g PiBpbmRleCAyMjY3ZTg0ZDVjYjQuLmMwZDQ5YTZjMDlkMiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9LY29uZmlnCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ID4g QEAgLTE2MCw2ICsxNjAsMTIgQEAgY29uZmlnIERSTV9UVE0KPiA+ICAJICBHUFUgbWVtb3J5IHR5 cGVzLiBXaWxsIGJlIGVuYWJsZWQgYXV0b21hdGljYWxseSBpZiBhIGRldmljZSBkcml2ZXIKPiA+ ICAJICB1c2VzIGl0Lgo+ID4gIAo+ID4gK2NvbmZpZyBEUk1fVlJBTV9IRUxQRVIKPiA+ICsJdHJp c3RhdGUKPiA+ICsJZGVwZW5kcyBvbiBEUk0gJiYgRFJNX1RUTQo+ID4gKwloZWxwCj4gPiArCSAg SGVscGVycyBmb3IgVlJBTSBtZW1vcnkgbWFuYWdlbWVudAo+ID4gKwo+ID4gIGNvbmZpZyBEUk1f R0VNX0NNQV9IRUxQRVIKPiA+ICAJYm9vbAo+ID4gIAlkZXBlbmRzIG9uIERSTQo+ID4gQEAgLTE3 OSw2ICsxODUsMTMgQEAgY29uZmlnIERSTV9HRU1fU0hNRU1fSEVMUEVSCj4gPiAgCWhlbHAKPiA+ ICAJICBDaG9vc2UgdGhpcyBpZiB5b3UgbmVlZCB0aGUgR0VNIHNobWVtIGhlbHBlciBmdW5jdGlv bnMKPiA+ICAKPiA+ICtjb25maWcgRFJNX0dFTV9WUkFNX0hFTFBFUgo+ID4gKwlib29sCj4gPiAr CWRlcGVuZHMgb24gRFJNCj4gPiArCXNlbGVjdCBEUk1fVlJBTV9IRUxQRVIKPiA+ICsJaGVscAo+ ID4gKwkgIENob29zZSB0aGlzIGlmIHlvdSBuZWVkIHRoZSBHRU0gVlJBTSBoZWxwZXIgZnVuY3Rp b25zCj4gPiArCj4gSSBjYW5ub3QgcmVtZW1iZXIgaG93IHNlbGVjdCB3aWxsIGRlYWwgd2l0aCBz eW1ib2xzIHdob3MgaGFzCj4gYSAgImRlcGVuZHMgb24iLgoKSXQgZG9lc24ndCwgcmFuZG9taXpl ZCBidWlsZHMgd2lsbCBnbyBrYWJvb20uCgo+IEJ1dCBpZiBJIHJlY2FsbCBjb3JyZWN0IHRoZW4g dGhlICJkZXBlbmRzIG9uIiB3aWxsIGJlIGlnbm9yZWQKPiBvciBpbiBiZXN0IGNhc2UgdHJpZ2dl ciBhIHdhcm5pbmcuCj4gSW4gb3RoZXIgd29yZHMgLSB3aGVuIHdlIGhhdmUgc3ltYm9scyB3ZSBz ZWxlY3QgdGhleSBzaG91bGQgbm90Cj4gaGF2ZSBhIGRlcGVuZHMgb24uCj4gCj4gV2hhdCBjYW4g YmUgZG9uZSBpcyBzb21ldGhpbmcgbGlrZToKPiAKPiBzeW1ib2wgZm9vCj4gCWJvb2wKPiAKPiBz eW1ib2wgYmFyCj4gCWRlcGVuZHMgb24gZm9vCj4gCj4gCj4gc3ltYm9sIGZvb2Jhcgo+IAlib29s ICJUaGlzIGlzIHdoYXQgeW91IG5lZWQgLSBzZWxlY3QgbWUiCj4gCXNlbGVjdCBmb28KPiAKPiBT byB3aGVuIG9uZSBjaG9vc2VzICJmb29iYXIiIHRoZW4gd2Ugd2lsbCBzZWxlY3QgImZvbyIgYW5k IHRoaXMgd2lsbAo+IHNhdGlzZnkgYmFyLgo+IAo+IEJ1dCBtYXliZSB0aGlzIHJhbWJsaW5nIGlz IGlycmVsZXZhbnQgLSBtYXliZSBjaGVjayB3aGF0IHdlIGRvIHdpdGgKPiBvdGhlciBzZWxlY3Rh YmxlIHN5bWJvbHMgaW4gRFJNLgoKSSdtIG5vdCBldmVuIGNsZWFyIG9uIHdoeSB5b3UgbmVlZCAy IHN5bWJvbHMgaGVyZSAuLi4gSWYgdGhlIGdvYWwgaXMgdG8KY3JlYXRlIGEgZHJtX2dlbV9oZWxw ZXIua28gbW9kdWxlLCB0aGVuIHRoYXQncyBhIGJpdCBtb3JlIHdvcmsuIFBsdXMKYW55b25lIG5l ZWRlZCBpdCB3b3VsZCBhbHdheXMgbmVlZCB0byBzZWxlY3QgYm90aCBLY29uZmlnIHN5bWJvbHMg KGJlY2F1c2UKc2VsZWN0IGlzbid0IHJlY3Vyc2l2ZSBhdCBhbGwpLgoKSSdkIGp1c3QgZGl0Y2gg b25lIG9mIHRoZW0gZm9yIG5vdyBhbmQgZ290IHdpdGggRFJNX0dFTV9WUkFNX0hFTFBFUi4KLURh bmllbAoKPiAKPiAKPiA+ICsvKioKPiA+ICsgKiBET0M6IG92ZXJ2aWV3Cj4gPiArICoKPiA+ICsg KiBUaGlzIGxpYnJhcnkgcHJvdmlkZXMgYSBHRU0gb2JqZWN0IHRoYXQgaXMgYmFja2VkIGJ5IFZS QU0uIEl0Cj4gPiArICogY2FuIGJlIHVzZWQgZm9yIHNpbXBsZSBmcmFtZWJ1ZmZlciBkZXZpY2Vz IHdpdGggZGVkaWNhdGVkIG1lbW9yeS4KPiA+ICsgKi8KPiBJdCBpcyBsaWtlbHkgb25seSBtZSwg YnV0Li4uCj4gSSBjb3VsZCB1c2UgYSBzaG9ydCBleHBsYW5hdGlvbiB3aGF0IGlzIEdFTSBhbmQg bWF5YmUgYWxzbyBWUkFNLgo+IAo+IFZSQU0gYXMgdmlkZW8gUkFNLCBidXQgbWF5YmUgdGhlcmUg aXMgbW9yZSBjb25zdHJhaW50cz8KPiAoV2hlbiBJIGZpcnN0IGxvb2tlZCBhdCBEUk0gSSB3b25k ZXJlZCB3aGF0IHlvdSB1c2VkIFZpcnR1YWwgUkFNIGZvci4KPiBCdXQgdGhhdHMgYSBsb25nIHRp bWUgYWdvIHNvIGl0IGNvdW50cyBvbmx5IGFzIGEgZnVubnkgc3RvcnkuCj4gCj4gPiArICogQnVm ZmVyLW9iamVjdHMgaGVscGVycwo+ID4gKyAqLwo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGRybV9n ZW1fdnJhbV9jbGVhbnVwKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8pCj4gPiArewo+ ID4gKwkvKiBXZSBnb3QgaGVyZSB2aWEgdHRtX2JvX3B1dCgpLCB3aGljaCBtZWFucyB0aGF0IHRo ZQo+ID4gKwkgKiBUVE0gYnVmZmVyIG9iamVjdCBpbiAnYm8nIGhhcyBhbHJlYWR5IGJlZW4gY2xl YW5lZAo+ID4gKwkgKiB1cDsgb25seSByZWxlYXNlIHRoZSBHRU0gb2JqZWN0LiAqLwo+ID4gKwlk cm1fZ2VtX29iamVjdF9yZWxlYXNlKCZnYm8tPmdlbSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyB2b2lkIGRybV9nZW1fdnJhbV9kZXN0cm95KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpn Ym8pCj4gPiArewo+ID4gKwlkcm1fZ2VtX3ZyYW1fY2xlYW51cChnYm8pOwo+ID4gKwlrZnJlZShn Ym8pOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCB0dG1fYnVmZmVyX29iamVjdF9kZXN0 cm95KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJt X2dlbV92cmFtX29iamVjdCAqZ2JvID0gZHJtX2dlbV92cmFtX29mX2JvKGJvKTsKPiA+ICsJZHJt X2dlbV92cmFtX2Rlc3Ryb3koZ2JvKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZHJt X2dlbV92cmFtX3BsYWNlbWVudChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvLCBpbnQg cGxfZmxhZykKPiA+ICt7Cj4gPiArCXVuc2lnbmVkIGludCBpOwo+ID4gKwl1bnNpZ25lZCBpbnQg YyA9IDA7Cj4gPiArCj4gPiArCWdiby0+cGxhY2VtZW50LnBsYWNlbWVudCA9IGdiby0+cGxhY2Vt ZW50czsKPiA+ICsJZ2JvLT5wbGFjZW1lbnQuYnVzeV9wbGFjZW1lbnQgPSBnYm8tPnBsYWNlbWVu dHM7Cj4gPiArCj4gPiArCWlmIChwbF9mbGFnICYgVFRNX1BMX0ZMQUdfVlJBTSkKPiA+ICsJCWdi by0+cGxhY2VtZW50c1tjKytdLmZsYWdzID0gVFRNX1BMX0ZMQUdfV0MgfAo+ID4gKwkJCQkJICAg ICBUVE1fUExfRkxBR19VTkNBQ0hFRCB8Cj4gPiArCQkJCQkgICAgIFRUTV9QTF9GTEFHX1ZSQU07 Cj4gPiArCj4gPiArCWlmIChwbF9mbGFnICYgVFRNX1BMX0ZMQUdfU1lTVEVNKQo+ID4gKwkJZ2Jv LT5wbGFjZW1lbnRzW2MrK10uZmxhZ3MgPSBUVE1fUExfTUFTS19DQUNISU5HIHwKPiA+ICsJCQkJ CSAgICAgVFRNX1BMX0ZMQUdfU1lTVEVNOwo+ID4gKwo+ID4gKwlpZiAoIWMpCj4gPiArCQlnYm8t PnBsYWNlbWVudHNbYysrXS5mbGFncyA9IFRUTV9QTF9NQVNLX0NBQ0hJTkcgfAo+ID4gKwkJCQkJ ICAgICBUVE1fUExfRkxBR19TWVNURU07Cj4gPiArCj4gPiArCWdiby0+cGxhY2VtZW50Lm51bV9w bGFjZW1lbnQgPSBjOwo+ID4gKwlnYm8tPnBsYWNlbWVudC5udW1fYnVzeV9wbGFjZW1lbnQgPSBj Owo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgYzsgKytpKSB7Cj4gPiArCQlnYm8tPnBsYWNl bWVudHNbaV0uZnBmbiA9IDA7Cj4gPiArCQlnYm8tPnBsYWNlbWVudHNbaV0ubHBmbiA9IDA7Cj4g PiArCX0KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkcm1fZ2VtX3ZyYW1faW5pdChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gKwkJCSAgICAgc3RydWN0IHR0bV9ib19kZXZpY2UgKmJk ZXYsCj4gPiArCQkJICAgICBzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvLAo+ID4gKwkJ CSAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1aW50MzJfdCBwZ19hbGlnbiwKPiA+ICsJCQkgICAg IGJvb2wgaW50ZXJydXB0aWJsZSkKPiA+ICt7Cj4gPiArCWludCByZXQ7Cj4gPiArCXNpemVfdCBh Y2Nfc2l6ZTsKPiA+ICsKPiA+ICsJcmV0ID0gZHJtX2dlbV9vYmplY3RfaW5pdChkZXYsICZnYm8t PmdlbSwgc2l6ZSk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwo+ID4g KwlhY2Nfc2l6ZSA9IHR0bV9ib19kbWFfYWNjX3NpemUoYmRldiwgc2l6ZSwgc2l6ZW9mKCpnYm8p KTsKPiA+ICsKPiA+ICsJZ2JvLT5iby5iZGV2ID0gYmRldjsKPiA+ICsJZHJtX2dlbV92cmFtX3Bs YWNlbWVudChnYm8sIFRUTV9QTF9GTEFHX1ZSQU0gfCBUVE1fUExfRkxBR19TWVNURU0pOwo+ID4g Kwo+ID4gKwlyZXQgPSB0dG1fYm9faW5pdChiZGV2LCAmZ2JvLT5ibywgc2l6ZSwgdHRtX2JvX3R5 cGVfZGV2aWNlLAo+ID4gKwkJCSAgJmdiby0+cGxhY2VtZW50LCBwZ19hbGlnbiwgaW50ZXJydXB0 aWJsZSwgYWNjX3NpemUsCj4gPiArCQkJICBOVUxMLCBOVUxMLCB0dG1fYnVmZmVyX29iamVjdF9k ZXN0cm95KTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCWdvdG8gZXJyX2RybV9nZW1fb2JqZWN0X3Jl bGVhc2U7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gKwo+ID4gK2Vycl9kcm1fZ2VtX29iamVj dF9yZWxlYXNlOgo+ID4gKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKCZnYm8tPmdlbSk7Cj4gPiAr CXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9nZW1fdnJhbV9j cmVhdGUoKSAtIENyZWF0ZXMgYSBWUkFNLWJhY2tlZCBHRU0gb2JqZWN0Cj4gPiArICogQGRldjoJ CXRoZSBEUk0gZGV2aWNlCj4gPiArICogQGJkZXY6CQl0aGUgVFRNIEJPIGRldmljZSBiYWNraW5n IHRoZSBvYmplY3QKPiA+ICsgKiBAc2l6ZToJCXRoZSBidWZmZXIgc2l6ZSBpbiBieXRlcwo+ID4g KyAqIEBwZ19hbGlnbjoJCXRoZSBidWZmZXIncyBhbGlnbm1lbnQgaW4gbXVsdGlwbGVzIG9mIHRo ZSBwYWdlIHNpemUKPiA+ICsgKiBAaW50ZXJydXB0aWJsZToJc2xlZXAgaW50ZXJydXB0aWJsZSBp ZiB3YWl0aW5nIGZvciBtZW1vcnkKPiA+ICsgKgo+ID4gKyAqIFJldHVybnM6Cj4gPiArICogQSBu ZXcgaW5zdGFuY2Ugb2YgJnN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0IG9uIHN1Y2Nlc3MsIG9y Cj4gPiArICogYW4gRVJSX1BUUigpLWVuY29kZWQgZXJyb3IgY29kZSBvdGhlcndpc2UuCj4gPiAr ICovCj4gPiArc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QqIGRybV9nZW1fdnJhbV9jcmVhdGUo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICsJCQkJCQlzdHJ1Y3QgdHRtX2JvX2RldmljZSAq YmRldiwKPiA+ICsJCQkJCQl1bnNpZ25lZCBsb25nIHNpemUsCj4gPiArCQkJCQkJdWludDMyX3Qg cGdfYWxpZ24sCj4gPiArCQkJCQkJYm9vbCBpbnRlcnJ1cHRpYmxlKQo+ID4gK3sKPiA+ICsJc3Ry dWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibzsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJ Z2JvID0ga3phbGxvYyhzaXplb2YoKmdibyksIEdGUF9LRVJORUwpOwo+ID4gKwlpZiAoIWdibykK PiA+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ID4gKwo+ID4gKwlyZXQgPSBkcm1fZ2Vt X3ZyYW1faW5pdChkZXYsIGJkZXYsIGdibywgc2l6ZSwgcGdfYWxpZ24sIGludGVycnVwdGlibGUp Owo+ID4gKwlpZiAocmV0IDwgMCkKPiA+ICsJCWdvdG8gZXJyX2tmcmVlOwo+ID4gKwo+ID4gKwly ZXR1cm4gZ2JvOwo+ID4gKwo+ID4gK2Vycl9rZnJlZToKPiA+ICsJa2ZyZWUoZ2JvKTsKPiA+ICsJ cmV0dXJuIEVSUl9QVFIocmV0KTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3Zy YW1fY3JlYXRlKTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fZ2VtX3ZyYW1fcHV0KCkgLSBS ZWxlYXNlcyBhIHJlZmVyZW5jZSB0byBhIFZSQU0tYmFja2VkIEdFTSBvYmplY3QKPiA+ICsgKiBA Z2JvOgl0aGUgR0VNIFZSQU0gb2JqZWN0Cj4gPiArICoKPiA+ICsgKiBTZWUgdHRtX2JvX3B1dCgp IGZvciBtb3JlIGluZm9ybWF0aW9uLgo+ID4gKyAqLwo+ID4gK3ZvaWQgZHJtX2dlbV92cmFtX3B1 dChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKQo+ID4gK3sKPiA+ICsJdHRtX2JvX3B1 dCgmZ2JvLT5ibyk7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2dlbV92cmFtX3B1dCk7 Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2dlbV92cmFtX3Jlc2VydmUoKSAtIFJlc2VydmVz IGEgVlJBTS1iYWNrZWQgR0VNIG9iamVjdAo+ID4gKyAqIEBnYm86CXRoZSBHRU0gVlJBTSBvYmpl Y3QKPiA+ICsgKiBAbm9fd2FpdDoJZG9uJ3Qgd2FpdCBmb3IgYnVmZmVyIG9iamVjdCB0byBiZWNv bWUgYXZhaWxhYmxlCj4gPiArICoKPiA+ICsgKiBTZWUgdHRtX2JvX3Jlc2VydmUoKSBmb3IgbW9y ZSBpbmZvcm1hdGlvbi4KPiA+ICsgKgo+ID4gKyAqIFJldHVybnM6Cj4gPiArICogMCBvbiBzdWNj ZXNzLCBvcgo+ID4gKyAqIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UKPiA+ICsgKi8K PiA+ICtpbnQgZHJtX2dlbV92cmFtX3Jlc2VydmUoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3Qg KmdibywgYm9vbCBub193YWl0KQo+ID4gK3sKPiA+ICsJcmV0dXJuIHR0bV9ib19yZXNlcnZlKCZn Ym8tPmJvLCB0cnVlLCBub193YWl0LCBOVUxMKTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChk cm1fZ2VtX3ZyYW1fcmVzZXJ2ZSk7Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2dlbV92cmFt X3VucmVzZXJ2ZSgpIC0gXAo+ID4gKwlSZWxlYXNlIGEgcmVzZXJ2YXRpb24gYWNxdWlyZWQgYnkg ZHJtX2dlbV92cmFtX3Jlc2VydmUoKQo+ID4gKyAqIEBnYm86CXRoZSBHRU0gVlJBTSBvYmplY3QK PiA+ICsgKgo+ID4gKyAqIFNlZSB0dG1fYm9fdW5yZXNlcnZlKCkgZm9yIG1vcmUgaW5mb3JtYXRp b24uCj4gPiArICovCj4gPiArdm9pZCBkcm1fZ2VtX3ZyYW1fdW5yZXNlcnZlKHN0cnVjdCBkcm1f Z2VtX3ZyYW1fb2JqZWN0ICpnYm8pCj4gPiArewo+ID4gKwl0dG1fYm9fdW5yZXNlcnZlKCZnYm8t PmJvKTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3ZyYW1fdW5yZXNlcnZlKTsK PiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fZ2VtX3ZyYW1fbW1hcF9vZmZzZXQoKSAtIFJldHVy bnMgYSBHRU0gVlJBTSBvYmplY3QncyBtbWFwIG9mZnNldAo+ID4gKyAqIEBnYm86CXRoZSBHRU0g VlJBTSBvYmplY3QKPiA+ICsgKgo+ID4gKyAqIFNlZSBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIo KSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KPiA+ICsgKgo+ID4gKyAqIFJldHVybnM6Cj4gPiArICog VGhlIGJ1ZmZlciBvYmplY3QncyBvZmZzZXQgZm9yIHVzZXJzcGFjZSBtYXBwaW5ncyBvbiBzdWNj ZXNzLCBvcgo+ID4gKyAqIDAgaWYgbm8gb2Zmc2V0IGlzIGFsbG9jYXRlZC4KPiA+ICsgKi8KPiA+ ICt1NjQgZHJtX2dlbV92cmFtX21tYXBfb2Zmc2V0KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0 ICpnYm8pCj4gPiArewo+ID4gKwlyZXR1cm4gZHJtX3ZtYV9ub2RlX29mZnNldF9hZGRyKCZnYm8t PmJvLnZtYV9ub2RlKTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3ZyYW1fbW1h cF9vZmZzZXQpOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9nZW1fdnJhbV9vZmZzZXQoKSAt IFwKPiA+ICsJUmV0dXJucyBhIEdFTSBWUkFNIG9iamVjdCdzIG9mZnNldCBpbiB2aWRlbyBtZW1v cnkKPiA+ICsgKiBAZ2JvOgl0aGUgR0VNIFZSQU0gb2JqZWN0Cj4gPiArICoKPiA+ICsgKiBUaGlz IGZ1bmN0aW9uIHJldHVybnMgdGhlIGJ1ZmZlciBvYmplY3QncyBvZmZzZXQgaW4gdGhlIGRldmlj ZSdzIHZpZGVvCj4gPiArICogbWVtb3J5LiBUaGUgYnVmZmVyIG9iamVjdCBoYXMgdG8gYmUgcGlu bmVkIHRvICVUVE1fUExfVlJBTS4KPiA+ICsgKgo+ID4gKyAqIFJldHVybnM6Cj4gPiArICogVGhl IGJ1ZmZlciBvYmplY3QncyBvZmZzZXQgaW4gdmlkZW8gbWVtb3J5IG9uIHN1Y2Nlc3MsIG9yCj4g PiArICogYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiA+ICsgKi8KPiA+ICtzNjQg ZHJtX2dlbV92cmFtX29mZnNldChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKQo+ID4g K3sKPiA+ICsJaWYgKCFnYm8tPnBpbl9jb3VudCkKPiA+ICsJCXJldHVybiAoczY0KS1FTk9ERVY7 Cj4gPiArCXJldHVybiBnYm8tPmJvLm9mZnNldDsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChk cm1fZ2VtX3ZyYW1fb2Zmc2V0KTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fZ2VtX3ZyYW1f cGluKCkgLSBQaW5zIGEgR0VNIFZSQU0gb2JqZWN0IGluIGEgcmVnaW9uLgo+ID4gKyAqIEBnYm86 CXRoZSBHRU0gVlJBTSBvYmplY3QKPiA+ICsgKiBAcGxfZmxhZzoJYSBiaXRtYXNrIG9mIHBvc3Np YmxlIG1lbW9yeSByZWdpb25zCj4gPiArICoKPiA+ICsgKiBQaW5uaW5nIGEgYnVmZmVyIG9iamVj dCBlbnN1cmVzIHRoYXQgaXQgaXMgbm90IGV2aWN0ZWQgZnJvbQo+ID4gKyAqIGEgbWVtb3J5IHJl Z2lvbi4gQSBwaW5uZWQgYnVmZmVyIG9iamVjdCBoYXMgdG8gYmUgdW5waW5uZWQgYmVmb3JlCj4g PiArICogaXQgY2FuIGJlIHBpbm5lZCB0byBhbm90aGVyIHJlZ2lvbi4KPiA+ICsgKgo+ID4gKyAq IFJldHVybnM6Cj4gPiArICogMCBvbiBzdWNjZXNzLCBvcgo+ID4gKyAqIGEgbmVnYXRpdmUgZXJy b3IgY29kZSBvdGhlcndpc2UuCj4gPiArICovCj4gPiAraW50IGRybV9nZW1fdnJhbV9waW4oc3Ry dWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywgdTMyIHBsX2ZsYWcpCj4gPiArewo+ID4gKwlp bnQgaSwgcmV0Owo+ID4gKwlzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggY3R4ID0geyBmYWxzZSwg ZmFsc2UgfTsKPiA+ICsKPiA+ICsJaWYgKGdiby0+cGluX2NvdW50KSB7Cj4gPiArCQkrK2diby0+ cGluX2NvdW50Owo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCX0KPiA+ICsKPiA+ICsJZHJtX2dlbV92 cmFtX3BsYWNlbWVudChnYm8sIHBsX2ZsYWcpOwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgZ2JvLT5w bGFjZW1lbnQubnVtX3BsYWNlbWVudDsgKytpKQo+ID4gKwkJZ2JvLT5wbGFjZW1lbnRzW2ldLmZs YWdzIHw9IFRUTV9QTF9GTEFHX05PX0VWSUNUOwo+ID4gKwo+ID4gKwlyZXQgPSB0dG1fYm9fdmFs aWRhdGUoJmdiby0+Ym8sICZnYm8tPnBsYWNlbWVudCwgJmN0eCk7Cj4gPiArCWlmIChyZXQgPCAw KQo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJZ2JvLT5waW5fY291bnQgPSAxOwo+ID4g Kwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3ZyYW1f cGluKTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fZ2VtX3ZyYW1fdW5waW4oKSAtIFVucGlu cyBhIEdFTSBWUkFNIG9iamVjdAo+ID4gKyAqIEBnYm86CXRoZSBHRU0gVlJBTSBvYmplY3QKPiA+ ICsgKgo+ID4gKyAqIFJldHVybnM6Cj4gPiArICogMCBvbiBzdWNjZXNzLCBvcgo+ID4gKyAqIGEg bmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCj4gPiArICovCj4gPiAraW50IGRybV9nZW1f dnJhbV91bnBpbihzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKQo+ID4gK3sKPiA+ICsJ aW50IGksIHJldDsKPiA+ICsJc3RydWN0IHR0bV9vcGVyYXRpb25fY3R4IGN0eCA9IHsgZmFsc2Us IGZhbHNlIH07Cj4gPiArCj4gPiArCWlmICghZ2JvLT5waW5fY291bnQpCj4gPiArCQlyZXR1cm4g MDsKPiA+ICsKPiA+ICsJLS1nYm8tPnBpbl9jb3VudDsKPiA+ICsJaWYgKGdiby0+cGluX2NvdW50 KQo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBnYm8tPnBsYWNl bWVudC5udW1fcGxhY2VtZW50IDsgKytpKQo+ID4gKwkJZ2JvLT5wbGFjZW1lbnRzW2ldLmZsYWdz ICY9IH5UVE1fUExfRkxBR19OT19FVklDVDsKPiA+ICsKPiA+ICsJcmV0ID0gdHRtX2JvX3ZhbGlk YXRlKCZnYm8tPmJvLCAmZ2JvLT5wbGFjZW1lbnQsICZjdHgpOwo+ID4gKwlpZiAocmV0IDwgMCkK PiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICtFWFBP UlRfU1lNQk9MKGRybV9nZW1fdnJhbV91bnBpbik7Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJt X2dlbV92cmFtX3B1c2hfdG9fc3lzdGVtKCkgLSBcCj4gPiArCVVucGlucyBhIEdFTSBWUkFNIG9i amVjdCBhbmQgbW92ZXMgaXQgdG8gc3lzdGVtIG1lbW9yeQo+ID4gKyAqIEBnYm86CXRoZSBHRU0g VlJBTSBvYmplY3QKPiA+ICsgKgo+ID4gKyAqIFRoaXMgb3BlcmF0aW9uIG9ubHkgd29ya3MgaWYg dGhlIGNhbGxlciBob2xkcyB0aGUgZmluYWwgcGluIG9uIHRoZQo+ID4gKyAqIGJ1ZmZlciBvYmpl Y3QuCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zOgo+ID4gKyAqIDAgb24gc3VjY2Vzcywgb3IKPiA+ ICsgKiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgo+ID4gKyAqLwo+ID4gK2ludCBk cm1fZ2VtX3ZyYW1fcHVzaF90b19zeXN0ZW0oc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdi bykKPiA+ICt7Cj4gPiArCWludCBpLCByZXQ7Cj4gPiArCXN0cnVjdCB0dG1fb3BlcmF0aW9uX2N0 eCBjdHggPSB7IGZhbHNlLCBmYWxzZSB9Owo+ID4gKwo+ID4gKwlpZiAoIWdiby0+cGluX2NvdW50 KQo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCj4gPiArCS0tZ2JvLT5waW5fY291bnQ7Cj4gPiArCWlm IChnYm8tPnBpbl9jb3VudCkKPiA+ICsJCXJldHVybiAwOwo+ID4gKwo+ID4gKwlpZiAoZ2JvLT5r bWFwLnZpcnR1YWwpCj4gPiArCQl0dG1fYm9fa3VubWFwKCZnYm8tPmttYXApOwo+ID4gKwo+ID4g Kwlkcm1fZ2VtX3ZyYW1fcGxhY2VtZW50KGdibywgVFRNX1BMX0ZMQUdfU1lTVEVNKTsKPiA+ICsJ Zm9yIChpID0gMDsgaSA8IGdiby0+cGxhY2VtZW50Lm51bV9wbGFjZW1lbnQgOyArK2kpCj4gPiAr CQlnYm8tPnBsYWNlbWVudHNbaV0uZmxhZ3MgfD0gVFRNX1BMX0ZMQUdfTk9fRVZJQ1Q7Cj4gPiAr Cj4gPiArCXJldCA9IHR0bV9ib192YWxpZGF0ZSgmZ2JvLT5ibywgJmdiby0+cGxhY2VtZW50LCAm Y3R4KTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiArCXJldHVy biAwOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9nZW1fdnJhbV9wdXNoX3RvX3N5c3Rl bSk7Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2dlbV92cmFtX2ttYXBfYXQoKSAtIE1hcHMg YSBHRU0gVlJBTSBvYmplY3QgaW50byBrZXJuZWwgYWRkcmVzcyBzcGFjZQo+ID4gKyAqIEBnYm86 CXRoZSBHRU0gVlJBTSBvYmplY3QKPiA+ICsgKiBAbWFwOgllc3RhYmxpc2ggYSBtYXBwaW5nIGlm IG5lY2Vzc2FyeQo+ID4gKyAqIEBpc19pb21lbToJcmV0dXJucyB0cnVlIGlmIHRoZSBtYXBwZWQg bWVtb3J5IGlzIEkvTyBtZW1vcnksIG9yIGZhbHNlIFwKPiA+ICsJb3RoZXJ3aXNlOyBjYW4gYmUg TlVMTAo+ID4gKyAqIEBrbWFwOgl0aGUgbWFwcGluZydzIGttYXAgb2JqZWN0Cj4gPiArICoKPiA+ ICsgKiBUaGlzIGZ1bmN0aW9uIG1hcHMgdGhlIGJ1ZmZlciBvYmplY3QgaW50byB0aGUga2VybmVs J3MgYWRkcmVzcyBzcGFjZQo+ID4gKyAqIG9yIHJldHVybnMgdGhlIGN1cnJlbnQgbWFwcGluZy4g SWYgdGhlIHBhcmFtZXRlciBtYXAgaXMgZmFsc2UsIHRoZQo+ID4gKyAqIGZ1bmN0aW9uIG9ubHkg cXVlcmllcyB0aGUgY3VycmVudCBtYXBwaW5nLCBidXQgZG9lcyBub3QgZXN0YWJsaXNoIGEKPiA+ ICsgKiBuZXcgb25lLgo+ID4gKyAqCj4gPiArICogUmV0dXJuczoKPiA+ICsgKiBUaGUgYnVmZmVy cyB2aXJ0dWFsIGFkZHJlc3MgaWYgbWFwcGVkLCBvcgo+ID4gKyAqIE5VTEwgaWYgbm90IG1hcHBl ZCwgb3IKPiA+ICsgKiBhbiBFUlJfUFRSKCktZW5jb2RlZCBlcnJvciBjb2RlIG90aGVyd2lzZS4K PiA+ICsgKi8KPiA+ICt2b2lkKiBkcm1fZ2VtX3ZyYW1fa21hcF9hdChzdHJ1Y3QgZHJtX2dlbV92 cmFtX29iamVjdCAqZ2JvLCBib29sIG1hcCwKPiA+ICsJCQkgICBib29sICppc19pb21lbSwgc3Ry dWN0IHR0bV9ib19rbWFwX29iaiAqa21hcCkKPiA+ICt7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4g PiArCWlmIChrbWFwLT52aXJ0dWFsIHx8ICFtYXApCj4gPiArCQlnb3RvIG91dDsKPiA+ICsKPiA+ ICsJcmV0ID0gdHRtX2JvX2ttYXAoJmdiby0+Ym8sIDAsIGdiby0+Ym8ubnVtX3BhZ2VzLCBrbWFw KTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gPiArCj4gPiAr b3V0Ogo+ID4gKwlpZiAoIWlzX2lvbWVtKSB7Cj4gPiArCQlyZXR1cm4ga21hcC0+dmlydHVhbDsK PiA+ICsJfQo+ID4gKwlpZiAoIWttYXAtPnZpcnR1YWwpIHsKPiA+ICsJCSppc19pb21lbSA9IGZh bHNlOwo+ID4gKwkJcmV0dXJuIE5VTEw7Cj4gPiArCX0KPiA+ICsJcmV0dXJuIHR0bV9rbWFwX29i al92aXJ0dWFsKGttYXAsIGlzX2lvbWVtKTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1f Z2VtX3ZyYW1fa21hcF9hdCk7Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2dlbV92cmFtX2tt YXAoKSAtIE1hcHMgYSBHRU0gVlJBTSBvYmplY3QgaW50byBrZXJuZWwgYWRkcmVzcyBzcGFjZQo+ ID4gKyAqIEBnYm86CXRoZSBHRU0gVlJBTSBvYmplY3QKPiA+ICsgKiBAbWFwOgllc3RhYmxpc2gg YSBtYXBwaW5nIGlmIG5lY2Vzc2FyeQo+ID4gKyAqIEBpc19pb21lbToJcmV0dXJucyB0cnVlIGlm IHRoZSBtYXBwZWQgbWVtb3J5IGlzIEkvTyBtZW1vcnksIG9yIGZhbHNlIFwKPiA+ICsJb3RoZXJ3 aXNlOyBjYW4gYmUgTlVMTAo+ID4gKyAqCj4gPiArICogVGhpcyBmdW5jdGlvbiBtYXBzIHRoZSBi dWZmZXIgb2JqZWN0IGludG8gdGhlIGtlcm5lbCdzIGFkZHJlc3Mgc3BhY2UKPiA+ICsgKiBvciBy ZXR1cm5zIHRoZSBjdXJyZW50IG1hcHBpbmcuIElmIHRoZSBwYXJhbWV0ZXIgbWFwIGlzIGZhbHNl LCB0aGUKPiA+ICsgKiBmdW5jdGlvbiBvbmx5IHF1ZXJpZXMgdGhlIGN1cnJlbnQgbWFwcGluZywg YnV0IGRvZXMgbm90IGVzdGFibGlzaCBhCj4gPiArICogbmV3IG9uZS4KPiA+ICsgKgo+ID4gKyAq IFJldHVybnM6Cj4gPiArICogVGhlIGJ1ZmZlcnMgdmlydHVhbCBhZGRyZXNzIGlmIG1hcHBlZCwg b3IKPiA+ICsgKiBOVUxMIGlmIG5vdCBtYXBwZWQsIG9yCj4gPiArICogYW4gRVJSX1BUUigpLWVu Y29kZWQgZXJyb3IgY29kZSBvdGhlcndpc2UuCj4gPiArICovCj4gPiArdm9pZCogZHJtX2dlbV92 cmFtX2ttYXAoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywgYm9vbCBtYXAsCj4gPiAr CQkJYm9vbCAqaXNfaW9tZW0pCj4gPiArewo+ID4gKwlyZXR1cm4gZHJtX2dlbV92cmFtX2ttYXBf YXQoZ2JvLCBtYXAsIGlzX2lvbWVtLCAmZ2JvLT5rbWFwKTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZ TUJPTChkcm1fZ2VtX3ZyYW1fa21hcCk7Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2dlbV92 cmFtX2t1bm1hcF9hdCgpIC0gVW5tYXBzIGEgR0VNIFZSQU0gb2JqZWN0Cj4gPiArICogQGdibzoJ dGhlIEdFTSBWUkFNIG9iamVjdAo+ID4gKyAqIEBrbWFwOgl0aGUgbWFwcGluZydzIGttYXAgb2Jq ZWN0Cj4gPiArICovCj4gPiArdm9pZCBkcm1fZ2VtX3ZyYW1fa3VubWFwX2F0KHN0cnVjdCBkcm1f Z2VtX3ZyYW1fb2JqZWN0ICpnYm8sCj4gPiArCQkJICAgIHN0cnVjdCB0dG1fYm9fa21hcF9vYmog KmttYXApCj4gPiArewo+ID4gKwlpZiAoIWttYXAtPnZpcnR1YWwpCj4gPiArCQlyZXR1cm47Cj4g PiArCj4gPiArCXR0bV9ib19rdW5tYXAoa21hcCk7Cj4gPiArCWttYXAtPnZpcnR1YWwgPSBOVUxM Owo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9nZW1fdnJhbV9rdW5tYXBfYXQpOwo+ID4g Kwo+ID4gKy8qKgo+ID4gKyAqIGRybV9nZW1fdnJhbV9rdW5tYXAoKSAtIFVubWFwcyBhIEdFTSBW UkFNIG9iamVjdAo+ID4gKyAqIEBnYm86CXRoZSBHRU0gVlJBTSBvYmplY3QKPiA+ICsgKi8KPiA+ ICt2b2lkIGRybV9nZW1fdnJhbV9rdW5tYXAoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdi bykKPiA+ICt7Cj4gPiArCWRybV9nZW1fdnJhbV9rdW5tYXBfYXQoZ2JvLCAmZ2JvLT5rbWFwKTsK PiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3ZyYW1fa3VubWFwKTsKPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZyYW1faGVscGVyX2NvbW1vbi5jIGIvZHJpdmVy cy9ncHUvZHJtL2RybV92cmFtX2hlbHBlcl9jb21tb24uYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNzZiNjU2OWM5YWFkCj4gPiAtLS0gL2Rldi9udWxs Cj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZyYW1faGVscGVyX2NvbW1vbi5jCj4gPiBA QCAtMCwwICsxLDYgQEAKPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v ci1sYXRlciAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiA+ICsKPiA+ ICtNT0RVTEVfREVTQ1JJUFRJT04oIkRSTSBWUkFNIG1lbW9yeS1tYW5hZ2VtZW50IGhlbHBlcnMi KTsKPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9k cm0vZHJtX2dlbV92cmFtX2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2dlbV92cmFtX2hlbHBl ci5oCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4xNjc2 MTZmNTUyZTUKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW1f dnJhbV9oZWxwZXIuaAo+ID4gQEAgLTAsMCArMSw5MiBAQAo+ID4gKy8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCj4gPiArCj4gPiArI2lmbmRlZiBEUk1fR0VN X1ZSQU1fSEVMUEVSX0gKPiA+ICsjZGVmaW5lIERSTV9HRU1fVlJBTV9IRUxQRVJfSAo+ID4gKwo+ ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vdHRtL3R0bV9i b19hcGkuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL3R0bS90dG1fcGxhY2VtZW50Lmg+Cj4gPiArI2lu Y2x1ZGUgPGxpbnV4L2tlcm5lbC5oPiAvKiBmb3IgY29udGFpbmVyX29mKCkgKi8KPiA+ICsKPiA+ ICtzdHJ1Y3QgZmlscDsKPiA+ICsKPiA+ICsjZGVmaW5lIERSTV9HRU1fVlJBTV9QTF9GTEFHX1ZS QU0JVFRNX1BMX0ZMQUdfVlJBTQo+ID4gKyNkZWZpbmUgRFJNX0dFTV9WUkFNX1BMX0ZMQUdfU1lT VEVNCVRUTV9QTF9GTEFHX1NZU1RFTQo+ID4gKwo+ID4gKy8qCj4gPiArICogQnVmZmVyLW9iamVj dCBoZWxwZXJzCj4gPiArICovCj4gPiArCj4gPiArLyoqCj4gPiArICogc3RydWN0IGRybV9nZW1f dnJhbV9vYmplY3QgLSBHRU0gb2JqZWN0IGJhY2tlZCBieSBWUkFNCj4gPiArICogQGdlbToJR0VN IG9iamVjdAo+ID4gKyAqIEBibzoJCVRUTSBidWZmZXIgb2JqZWN0Cj4gPiArICogQGttYXA6CU1h cHBpbmcgaW5mb3JtYXRpb24gZm9yIEBibwo+ID4gKyAqIEBwbGFjZW1lbnQ6CVRUTSBwbGFjZW1l bnQgaW5mb3JtYXRpb24uIFN1cHBvcnRlZCBwbGFjZW1lbnRzIGFyZSBcCj4gPiArCSVUVE1fUExf VlJBTSBhbmQgJVRUTV9QTF9TWVNURU0KPiA+ICsgKiBAcGxhY2VtZW50czoJVFRNIHBsYWNlbWVu dCBpbmZvcm1hdGlvbi4KPiA+ICsgKiBAcGluX2NvdW50OglQaW4gY291bnRlcgo+ID4gKyAqCj4g PiArICogVGhlIHR5cGUgc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgcmVwcmVzZW50cyBhIEdF TSBvYmplY3QgdGhhdCBpcwo+ID4gKyAqIGJhY2tlZCBieSBWUkFNLiBJdCBjYW4gYmUgdXNlZCBm b3Igc2ltcGxlIGZyYW1idWZmZXIgZGV2aWNlcyB3aXRoCj4gPiArICogZGVkaWNhdGVkIG1lbW9y eS4gVGhlIGJ1ZmZlciBvYmplY3QgY2FuIGJlIGV2aWN0ZWQgdG8gc3lzdGVtIG1lbW9yeSBpZgo+ ID4gKyAqIHZpZGVvIG1lbW9yeSBiZWNvbWVzIHNjYXJjZS4KPiA+ICsgKi8KPiA+ICtzdHJ1Y3Qg ZHJtX2dlbV92cmFtX29iamVjdCB7Cj4gPiArICAgICAgICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Z2VtOwo+ID4gKyAgICAgICAgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0IGJvOwo+ID4gKyAgICAg ICAgc3RydWN0IHR0bV9ib19rbWFwX29iaiBrbWFwOwo+ID4gKwo+ID4gKwkvKiBTdXBwb3J0ZWQg cGxhY2VtZW50cyBhcmUgJVRUTV9QTF9WUkFNIGFuZCAlVFRNX1BMX1NZU1RFTSAqLwo+ID4gKyAg ICAgICAgc3RydWN0IHR0bV9wbGFjZW1lbnQgcGxhY2VtZW50Owo+ID4gKyAgICAgICAgc3RydWN0 IHR0bV9wbGFjZSBwbGFjZW1lbnRzWzNdOwo+ID4gKwo+ID4gKyAgICAgICAgaW50IHBpbl9jb3Vu dDsKPiA+ICt9Owo+IFVzZSB0YWJzIGZvciBpbmRlbnQgLSBub3Qgc3BhY2VzLgo+IEFzayBjaGVj a3BhdGNoIGlmIGFueXRoaW5nIHNpbWlsYXIgbmVlZHMgdG8gYmUgYWRqdXN0ZWQuCj4gCj4gCj4g PiArCj4gPiArLyoqCj4gPiArICogUmV0dXJucyB0aGUgY29udGFpbmVyIG9mIHR5cGUgJnN0cnVj dCBkcm1fZ2VtX3ZyYW1fb2JqZWN0Cj4gPiArICogZm9yIGZpZWxkIGJvLgo+ID4gKyAqIEBibzoJ CXRoZSBWUkFNIGJ1ZmZlciBvYmplY3QKPiA+ICsgKiBSZXR1cm5zOglUaGUgY29udGFpbmluZyBH RU0gVlJBTSBvYmplY3QKPiA+ICsgKi8KPiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBkcm1fZ2Vt X3ZyYW1fb2JqZWN0KiBkcm1fZ2VtX3ZyYW1fb2ZfYm8oCj4gPiArCXN0cnVjdCB0dG1fYnVmZmVy X29iamVjdCAqYm8pCj4gPiArewo+ID4gKwlyZXR1cm4gY29udGFpbmVyX29mKGJvLCBzdHJ1Y3Qg ZHJtX2dlbV92cmFtX29iamVjdCwgYm8pOwo+ID4gK30KPiBJbmRlbnQgZnVubnkuIFVTZSBzYW1l IGluZGVudCBhcyB1c2VkIGluIG90aGVyIHBhcnRzIG9mIGZpbGUgZm9yCj4gZnVuY3Rpb24gYXJn dW1lbnRzLgo+IAo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIFJldHVybnMgdGhlIGNvbnRhaW5lciBv ZiB0eXBlICZzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdAo+ID4gKyAqIGZvciBmaWVsZCBnZW0u Cj4gPiArICogQGdlbToJdGhlIEdFTSBvYmplY3QKPiA+ICsgKiBSZXR1cm5zOglUaGUgY29udGFp bmluZyBHRU0gVlJBTSBvYmplY3QKPiA+ICsgKi8KPiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBk cm1fZ2VtX3ZyYW1fb2JqZWN0KiBkcm1fZ2VtX3ZyYW1fb2ZfZ2VtKAo+ID4gKwlzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKmdlbSkKPiA+ICt7Cj4gPiArCXJldHVybiBjb250YWluZXJfb2YoZ2VtLCBz dHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCwgZ2VtKTsKPiA+ICt9Cj4gZGl0dG8KPiAKPiA+ICsK PiA+ICtzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCogZHJtX2dlbV92cmFtX2NyZWF0ZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gKwkJCQkJCXN0cnVjdCB0dG1fYm9fZGV2aWNlKiBiZGV2 LAo+ID4gKwkJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwKPiA+ICsJCQkJCQl1aW50MzJfdCBwZ19h bGlnbiwKPiA+ICsJCQkJCQlib29sIGludGVycnVwdGlibGUpOwo+IAo+IEhlcmUgaXMgaXMgIm5v cm1hbCIKPiAKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jw b3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWw=