From mboxrd@z Thu Jan 1 00:00:00 1970 From: Namhyung Kim Subject: Re: [PATCH 1/3] virtio: Basic implementation of virtio pstore driver Date: Fri, 16 Sep 2016 18:05:20 +0900 Message-ID: <20160916090520.GB2474@danjae.aot.lge.com> References: <20160820080744.10344-1-namhyung@kernel.org> <20160820080744.10344-2-namhyung@kernel.org> <20160913173924-mutt-send-email-mst@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: virtio-dev@lists.oasis-open.org, Tony Luck , Kees Cook , kvm@vger.kernel.org, Radim =?utf-8?B?S3LEjW3DocWZ?= , Anton Vorontsov , LKML , Steven Rostedt , qemu-devel@nongnu.org, Minchan Kim , Anthony Liguori , Colin Cross , Paolo Bonzini , virtualization@lists.linux-foundation.org, Ingo Molnar To: "Michael S. Tsirkin" Return-path: Content-Disposition: inline In-Reply-To: <20160913173924-mutt-send-email-mst@kernel.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org List-Id: kvm.vger.kernel.org SGVsbG8gTWljaGFlbCwKClRoYW5rcyBmb3IgeW91ciBkZXRhaWxlZCByZXZpZXcuICBCdHcgYXJl IHlvdSBvayB3aXRoIHRoZSBvdmVyYWxsCmRpcmVjdGlvbiBvZiB0aGUgcGF0Y2g/CgoKT24gVHVl LCBTZXAgMTMsIDIwMTYgYXQgMDY6MTk6NDFQTSArMDMwMCwgTWljaGFlbCBTLiBUc2lya2luIHdy b3RlOgo+IE9uIFNhdCwgQXVnIDIwLCAyMDE2IGF0IDA1OjA3OjQyUE0gKzA5MDAsIE5hbWh5dW5n IEtpbSB3cm90ZToKPiA+IFRoZSB2aXJ0aW8gcHN0b3JlIGRyaXZlciBwcm92aWRlcyBpbnRlcmZh Y2UgdG8gdGhlIHBzdG9yZSBzdWJzeXN0ZW0gc28KPiA+IHRoYXQgdGhlIGd1ZXN0IGtlcm5lbCdz IGxvZy9kdW1wIG1lc3NhZ2UgY2FuIGJlIHNhdmVkIG9uIHRoZSBob3N0Cj4gPiBtYWNoaW5lLiAg VXNlcnMgY2FuIGFjY2VzcyB0aGUgbG9nIGZpbGUgZGlyZWN0bHkgb24gdGhlIGhvc3QsIG9yIG9u IHRoZQo+ID4gZ3Vlc3QgYXQgdGhlIG5leHQgYm9vdCB1c2luZyBwc3RvcmUgZmlsZXN5c3RlbS4g IEl0IGN1cnJlbnRseSBkZWFscyB3aXRoCj4gPiBrZXJuZWwgbG9nIChwcmludGspIGJ1ZmZlciBv bmx5LCBidXQgd2UgY2FuIGV4dGVuZCBpdCB0byBoYXZlIG90aGVyCj4gPiBpbmZvcm1hdGlvbiAo bGlrZSBmdHJhY2UgZHVtcCkgbGF0ZXIuCj4gPiAKPiA+IEl0IHN1cHBvcnRzIGxlZ2FjeSBQQ0kg ZGV2aWNlIHVzaW5nIHNpbmdsZSBvcmRlci0yIHBhZ2UgYnVmZmVyLiAgSXQgdXNlcwo+ID4gdHdv IHZpcnRxdWV1ZXMgLSBvbmUgZm9yIChzeW5jKSByZWFkIGFuZCBhbm90aGVyIGZvciAoYXN5bmMp IHdyaXRlLgo+ID4gU2luY2UgaXQgY2Fubm90IHdhaXQgZm9yIHdyaXRlIGZpbmlzaGVkLCBpdCBz dXBwb3J0cyB1cCB0byAxMjgKPiA+IGNvbmN1cnJlbnQgSU8uICBUaGUgYnVmZmVyIHNpemUgaXMg Y29uZmlndXJhYmxlIG5vdy4KPiA+IAo+ID4gQ2M6IFBhb2xvIEJvbnppbmkgPHBib256aW5pQHJl ZGhhdC5jb20+Cj4gPiBDYzogUmFkaW0gS3LEjW3DocWZIDxya3JjbWFyQHJlZGhhdC5jb20+Cj4g PiBDYzogIk1pY2hhZWwgUy4gVHNpcmtpbiIgPG1zdEByZWRoYXQuY29tPgo+ID4gQ2M6IEFudGhv bnkgTGlndW9yaSA8YWxpZ3VvcmlAYW1hem9uLmNvbT4KPiA+IENjOiBBbnRvbiBWb3JvbnRzb3Yg PGFudG9uQGVub21zZy5vcmc+Cj4gPiBDYzogQ29saW4gQ3Jvc3MgPGNjcm9zc0BhbmRyb2lkLmNv bT4KPiA+IENjOiBLZWVzIENvb2sgPGtlZXNjb29rQGNocm9taXVtLm9yZz4KPiA+IENjOiBUb255 IEx1Y2sgPHRvbnkubHVja0BpbnRlbC5jb20+Cj4gPiBDYzogU3RldmVuIFJvc3RlZHQgPHJvc3Rl ZHRAZ29vZG1pcy5vcmc+Cj4gPiBDYzogSW5nbyBNb2xuYXIgPG1pbmdvQGtlcm5lbC5vcmc+Cj4g PiBDYzogTWluY2hhbiBLaW0gPG1pbmNoYW5Aa2VybmVsLm9yZz4KPiA+IENjOiBrdm1Admdlci5r ZXJuZWwub3JnCj4gPiBDYzogcWVtdS1kZXZlbEBub25nbnUub3JnCj4gPiBDYzogdmlydHVhbGl6 YXRpb25AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKPiA+IFNpZ25lZC1vZmYtYnk6IE5hbWh5 dW5nIEtpbSA8bmFtaHl1bmdAa2VybmVsLm9yZz4KPiA+IC0tLQo+ID4gIGRyaXZlcnMvdmlydGlv L0tjb25maWcgICAgICAgICAgICAgfCAgMTAgKwo+ID4gIGRyaXZlcnMvdmlydGlvL01ha2VmaWxl ICAgICAgICAgICAgfCAgIDEgKwo+ID4gIGRyaXZlcnMvdmlydGlvL3ZpcnRpb19wc3RvcmUuYyAg ICAgfCA0MTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gIGluY2x1 ZGUvdWFwaS9saW51eC9LYnVpbGQgICAgICAgICAgfCAgIDEgKwo+ID4gIGluY2x1ZGUvdWFwaS9s aW51eC92aXJ0aW9faWRzLmggICAgfCAgIDEgKwo+ID4gIGluY2x1ZGUvdWFwaS9saW51eC92aXJ0 aW9fcHN0b3JlLmggfCAgNzQgKysrKysrKwo+ID4gIDYgZmlsZXMgY2hhbmdlZCwgNTA0IGluc2Vy dGlvbnMoKykKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy92aXJ0aW8vdmlydGlvX3Bz dG9yZS5jCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdWFwaS9saW51eC92aXJ0aW9f cHN0b3JlLmgKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL0tjb25maWcgYi9k cml2ZXJzL3ZpcnRpby9LY29uZmlnCj4gPiBpbmRleCA3NzU5MDMyMGQ0NGMuLjhmMGU2Yzc5NmMx MiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvdmlydGlvL0tjb25maWcKPiA+ICsrKyBiL2RyaXZl cnMvdmlydGlvL0tjb25maWcKPiA+IEBAIC01OCw2ICs1OCwxNiBAQCBjb25maWcgVklSVElPX0lO UFVUCj4gPiAgCj4gPiAgCSBJZiB1bnN1cmUsIHNheSBNLgo+ID4gIAo+ID4gK2NvbmZpZyBWSVJU SU9fUFNUT1JFCj4gPiArCXRyaXN0YXRlICJWaXJ0aW8gcHN0b3JlIGRyaXZlciIKPiA+ICsJZGVw ZW5kcyBvbiBWSVJUSU8KPiA+ICsJZGVwZW5kcyBvbiBQU1RPUkUKPiA+ICsJLS0taGVscC0tLQo+ ID4gKwkgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdmlydGlvIHBzdG9yZSBkZXZpY2VzIHRvIHNhdmUv cmVzdG9yZQo+ID4gKwkgcGFuaWMgYW5kIG9vcHMgbWVzc2FnZXMgb24gdGhlIGhvc3QuCj4gPiAr Cj4gPiArCSBJZiB1bnN1cmUsIHNheSBNLgo+ID4gKwo+ID4gICBjb25maWcgVklSVElPX01NSU8K PiA+ICAJdHJpc3RhdGUgIlBsYXRmb3JtIGJ1cyBkcml2ZXIgZm9yIG1lbW9yeSBtYXBwZWQgdmly dGlvIGRldmljZXMiCj4gPiAgCWRlcGVuZHMgb24gSEFTX0lPTUVNICYmIEhBU19ETUEKPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZSBiL2RyaXZlcnMvdmlydGlvL01ha2Vm aWxlCj4gPiBpbmRleCA0MWUzMGUzZGM4NDIuLmJlZTY4Y2IyNmQ0OCAxMDA2NDQKPiA+IC0tLSBh L2RyaXZlcnMvdmlydGlvL01ha2VmaWxlCj4gPiArKysgYi9kcml2ZXJzL3ZpcnRpby9NYWtlZmls ZQo+ID4gQEAgLTUsMyArNSw0IEBAIHZpcnRpb19wY2kteSA6PSB2aXJ0aW9fcGNpX21vZGVybi5v IHZpcnRpb19wY2lfY29tbW9uLm8KPiA+ICB2aXJ0aW9fcGNpLSQoQ09ORklHX1ZJUlRJT19QQ0lf TEVHQUNZKSArPSB2aXJ0aW9fcGNpX2xlZ2FjeS5vCj4gPiAgb2JqLSQoQ09ORklHX1ZJUlRJT19C QUxMT09OKSArPSB2aXJ0aW9fYmFsbG9vbi5vCj4gPiAgb2JqLSQoQ09ORklHX1ZJUlRJT19JTlBV VCkgKz0gdmlydGlvX2lucHV0Lm8KPiA+ICtvYmotJChDT05GSUdfVklSVElPX1BTVE9SRSkgKz0g dmlydGlvX3BzdG9yZS5vCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3Bz dG9yZS5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BzdG9yZS5jCj4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4wYTYzYzdkYjQyNzgKPiA+IC0tLSAvZGV2 L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wc3RvcmUuYwo+ID4gQEAgLTAs MCArMSw0MTcgQEAKPiA+ICsjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIg Zm10Cj4gPiArCj4gPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ID4gKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvcHN0b3JlLmg+Cj4gPiArI2luY2x1 ZGUgPGxpbnV4L3ZpcnRpby5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+ Cj4gPiArI2luY2x1ZGUgPHVhcGkvbGludXgvdmlydGlvX2lkcy5oPgo+ID4gKyNpbmNsdWRlIDx1 YXBpL2xpbnV4L3ZpcnRpb19wc3RvcmUuaD4KPiA+ICsKPiA+ICsjZGVmaW5lIFZJUlRfUFNUT1JF X09SREVSICAgIDIKPiA+ICsjZGVmaW5lIFZJUlRfUFNUT1JFX0JVRlNJWkUgICg0MDk2IDw8IFZJ UlRfUFNUT1JFX09SREVSKQo+ID4gKyNkZWZpbmUgVklSVF9QU1RPUkVfTlJfUkVRICAgMTI4Cj4g Cj4gd2hlcmUgYXJlIHRoZXNlIG51bWJlcnMgZnJvbT8KClRoZSBidWZmZXIgc2l6ZSB3YXMgY2hv c2VuIHRvIGJlIGxhcmdlciB0aGFuIGRlZmF1bHQga21zZ19ieXRlcwooMTAyNDApIGluIHRoZSBw c3RvcmUgcGxhdGZvcm0gY29kZSBhbmQgdGhlIHJlcXVlc3QgY291bnQgaXMgYQphcmJpdHJhcnkg dmFsdWUuCgo+IAo+IAo+ID4gKwo+ID4gK3N0cnVjdCB2aXJ0aW9fcHN0b3JlIHsKPiA+ICsJc3Ry dWN0IHZpcnRpb19kZXZpY2UJKnZkZXY7Cj4gPiArCXN0cnVjdCB2aXJ0cXVldWUJKnZxWzJdOwo+ ID4gKwlzdHJ1Y3QgcHN0b3JlX2luZm8JIHBzdG9yZTsKPiA+ICsJc3RydWN0IHZpcnRpb19wc3Rv cmVfcmVxIHJlcVtWSVJUX1BTVE9SRV9OUl9SRVFdOwo+ID4gKwlzdHJ1Y3QgdmlydGlvX3BzdG9y ZV9yZXMgcmVzW1ZJUlRfUFNUT1JFX05SX1JFUV07Cj4gPiArCXVuc2lnbmVkIGludAkJIHJlcV9p ZDsKPiA+ICsKPiA+ICsJLyogV2FpdGluZyBmb3IgaG9zdCB0byBhY2sgKi8KPiA+ICsJd2FpdF9x dWV1ZV9oZWFkX3QJYWNrZWQ7Cj4gPiArCWludAkJCWZhaWxlZDsKPiA+ICt9Owo+ID4gKwo+ID4g KyNkZWZpbmUgVFlQRV9UQUJMRV9FTlRSWShfZW50cnkpCQkJCVwKPiA+ICsJeyBQU1RPUkVfVFlQ RV8jI19lbnRyeSwgVklSVElPX1BTVE9SRV9UWVBFXyMjX2VudHJ5IH0KPiA+ICsKPiA+ICtzdHJ1 Y3QgdHlwZV90YWJsZSB7Cj4gPiArCWludCBwc3RvcmU7Cj4gPiArCXUxNiB2aXJ0aW87Cj4gPiAr fSB0eXBlX3RhYmxlW10gPSB7Cj4gPiArCVRZUEVfVEFCTEVfRU5UUlkoRE1FU0cpLAo+ID4gK307 Cj4gPiArCj4gPiArI3VuZGVmIFRZUEVfVEFCTEVfRU5UUlkKPiAKPiBMZXQncyBub3QgcGxheSBw cmVwcm9jZXNzb3IgZ2FtZXMgdW50aWwgdGhpcyBiZWNvbWVzCj4gYSBiaWcgaXNzdWUuIFNpbXBs ZQo+IHsgUFNUT1JFX1RZUEVfRE1FU0csIFZJUlRJT19QU1RPUkVfVFlQRV9ETUVTR30KPiBkb2Vz IHRoZSB0cmljayBqdXN0IGFzIHdlbGwgZm9yIG5vdy4KPiBBbHNvIHNlZSBiZWxvdy4KPiAKPiAK PiAKPiA+ICsKPiA+ICsKPiAKPiBzaW5nbGUgZW1wdHkgbGluZSBwbHMuCgpPay4KCj4gCj4gPiAr c3RhdGljIHUxNiB0b192aXJ0aW9fdHlwZShzdHJ1Y3QgdmlydGlvX3BzdG9yZSAqdnBzLCBlbnVt IHBzdG9yZV90eXBlX2lkIHR5cGUpCj4gPiArewo+ID4gKwl1bnNpZ25lZCBpbnQgaTsKPiA+ICsK PiA+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHlwZV90YWJsZSk7IGkrKykgewo+ID4g KwkJaWYgKHR5cGUgPT0gdHlwZV90YWJsZVtpXS5wc3RvcmUpCj4gPiArCQkJcmV0dXJuIGNwdV90 b192aXJ0aW8xNih2cHMtPnZkZXYsIHR5cGVfdGFibGVbaV0udmlydGlvKTsKPiA+ICsJfQo+IAo+ IFJhdGhlciBjb21wbGV4IGZvciBzb21ldGhpbmcgdGhhdCBhbHdheXMgcmV0dXJucyBhIHNpbmds ZSB2YWx1ZS4KPiB3aHkgZG8gd2UgbmVlZCBhIHRhYmxlIGF0IGFsbD8KPiBIb3cgYWJvdXQgYSBz d2l0Y2ggc3RhdGVtZW50PwoKVGhlIHBzdG9yZSBoYXMgNCBtZXNzYWdlIHR5cGVzIGFuZCBJJ2Qg bGlrZSB0byBhZGQgYSBmZXcgbW9yZS4gIFRoaXMKcGF0Y2ggb25seSBpbXBsZW1lbnRzIHRoZSBt b3N0IHBvcHVsYXIgZG1lc2cgdHlwZSBhbmQgb3RoZXJzIHdpbGwgYmUKYWRkZWQgbGF0ZXIuCgpC dXQgSSdtIG9rIHdpdGggdGhlIHN3aXRjaCB0b28uCgo+IAo+IHN0YXRpYyB1MTYgdG9fdmlydGlv X3R5cGUoc3RydWN0IHZpcnRpb19wc3RvcmUgKnZwcywgZW51bSBwc3RvcmVfdHlwZV9pZCB0eXBl KQo+IHsKPiAgICAgc3dpdGNoICh0eXBlKSB7Cj4gICAgIGNhc2UgUFNUT1JFX1RZUEVfRE1FU0c6 Cj4gICAgICAgICByZXR1cm4gVklSVElPX1BTVE9SRV9UWVBFX0RNRVNHOwo+ICAgICBkZWZhdWx0 Ogo+ICAgICAgICAgcmV0dXJuIFZJUlRJT19QU1RPUkVfVFlQRV9VTktOT1dOOwo+ICAgICB9Cj4g fQo+IAo+IAo+ID4gKwo+ID4gKwlyZXR1cm4gY3B1X3RvX3ZpcnRpbzE2KHZwcy0+dmRldiwgVklS VElPX1BTVE9SRV9UWVBFX1VOS05PV04pOwo+ID4gK30KPiAKPiBUaGlzIHJldHVybnMgYW4gaW5j b3JyZWN0IHR5cGUuCgpSaWdodC4gIEJ1dCBpdCB3YXMgZml4ZWQgaW4gdjUgYW5kIHlvdSBzZWVt IHRvIHJldmlldyBhbiBlYXJsaWVyCnZlcnNpb24gdW5mb3J0dW5hdGVseS4KCj4gCj4gCj4gPiAr Cj4gPiArc3RhdGljIGVudW0gcHN0b3JlX3R5cGVfaWQgZnJvbV92aXJ0aW9fdHlwZShzdHJ1Y3Qg dmlydGlvX3BzdG9yZSAqdnBzLCB1MTYgdHlwZSkKPiA+ICt7Cj4gPiArCXVuc2lnbmVkIGludCBp Owo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0eXBlX3RhYmxlKTsgaSsr KSB7Cj4gPiArCQlpZiAodmlydGlvMTZfdG9fY3B1KHZwcy0+dmRldiwgdHlwZSkgPT0gdHlwZV90 YWJsZVtpXS52aXJ0aW8pCj4gPiArCQkJcmV0dXJuIHR5cGVfdGFibGVbaV0ucHN0b3JlOwo+ID4g Kwl9Cj4gPiArCj4gPiArCXJldHVybiBQU1RPUkVfVFlQRV9VTktOT1dOOwo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgdm9pZCB2aXJ0cHN0b3JlX2FjayhzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKPiA+ ICt7Cj4gPiArCXN0cnVjdCB2aXJ0aW9fcHN0b3JlICp2cHMgPSB2cS0+dmRldi0+cHJpdjsKPiA+ ICsKPiA+ICsJd2FrZV91cCgmdnBzLT5hY2tlZCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2 b2lkIHZpcnRwc3RvcmVfY2hlY2soc3RydWN0IHZpcnRxdWV1ZSAqdnEpCj4gPiArewo+ID4gKwlz dHJ1Y3QgdmlydGlvX3BzdG9yZSAqdnBzID0gdnEtPnZkZXYtPnByaXY7Cj4gPiArCXN0cnVjdCB2 aXJ0aW9fcHN0b3JlX3JlcyAqcmVzOwo+ID4gKwl1bnNpZ25lZCBpbnQgbGVuOwo+ID4gKwo+ID4g KwlyZXMgPSB2aXJ0cXVldWVfZ2V0X2J1Zih2cSwgJmxlbik7Cj4gPiArCWlmIChyZXMgPT0gTlVM TCkKPiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ICsJaWYgKHZpcnRpbzMyX3RvX2NwdSh2cS0+dmRl diwgcmVzLT5yZXQpIDwgMCkKPiA+ICsJCXZwcy0+ZmFpbGVkID0gMTsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIHZvaWQgdmlydF9wc3RvcmVfZ2V0X3JlcXMoc3RydWN0IHZpcnRpb19wc3RvcmUg KnZwcywKPiA+ICsJCQkJIHN0cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcSAqKnByZXEsCj4gPiArCQkJ CSBzdHJ1Y3QgdmlydGlvX3BzdG9yZV9yZXMgKipwcmVzKQo+ID4gK3sKPiA+ICsJdW5zaWduZWQg aW50IGlkeCA9IHZwcy0+cmVxX2lkKysgJSBWSVJUX1BTVE9SRV9OUl9SRVE7Cj4gPiArCj4gPiAr CSpwcmVxID0gJnZwcy0+cmVxW2lkeF07Cj4gPiArCSpwcmVzID0gJnZwcy0+cmVzW2lkeF07Cj4g PiArCj4gPiArCW1lbXNldCgqcHJlcSwgMCwgc2l6ZW9mKCoqcHJlcSkpOwo+ID4gKwltZW1zZXQo KnByZXMsIDAsIHNpemVvZigqKnByZXMpKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCB2 aXJ0X3BzdG9yZV9vcGVuKHN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpKQo+ID4gK3sKPiA+ICsJc3Ry dWN0IHZpcnRpb19wc3RvcmUgKnZwcyA9IHBzaS0+ZGF0YTsKPiA+ICsJc3RydWN0IHZpcnRpb19w c3RvcmVfcmVxICpyZXE7Cj4gPiArCXN0cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcyAqcmVzOwo+ID4g KwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dvWzFdLCBzZ2lbMV07Cj4gPiArCXN0cnVjdCBzY2F0dGVy bGlzdCAqc2dzWzJdID0geyBzZ28sIHNnaSB9Owo+ID4gKwl1bnNpZ25lZCBpbnQgbGVuOwo+ID4g Kwo+ID4gKwl2aXJ0X3BzdG9yZV9nZXRfcmVxcyh2cHMsICZyZXEsICZyZXMpOwo+ID4gKwo+ID4g KwlyZXEtPmNtZCA9IGNwdV90b192aXJ0aW8xNih2cHMtPnZkZXYsIFZJUlRJT19QU1RPUkVfQ01E X09QRU4pOwo+ID4gKwo+ID4gKwlzZ19pbml0X29uZShzZ28sIHJlcSwgc2l6ZW9mKCpyZXEpKTsK PiA+ICsJc2dfaW5pdF9vbmUoc2dpLCByZXMsIHNpemVvZigqcmVzKSk7Cj4gPiArCXZpcnRxdWV1 ZV9hZGRfc2dzKHZwcy0+dnFbMF0sIHNncywgMSwgMSwgdnBzLCBHRlBfS0VSTkVMKTsKPiA+ICsJ dmlydHF1ZXVlX2tpY2sodnBzLT52cVswXSk7Cj4gPiArCj4gPiArCXdhaXRfZXZlbnQodnBzLT5h Y2tlZCwgdmlydHF1ZXVlX2dldF9idWYodnBzLT52cVswXSwgJmxlbikpOwo+ID4gKwlyZXR1cm4g dmlydGlvMzJfdG9fY3B1KHZwcy0+dmRldiwgcmVzLT5yZXQpOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgaW50IHZpcnRfcHN0b3JlX2Nsb3NlKHN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpKQo+ID4g K3sKPiA+ICsJc3RydWN0IHZpcnRpb19wc3RvcmUgKnZwcyA9IHBzaS0+ZGF0YTsKPiA+ICsJc3Ry dWN0IHZpcnRpb19wc3RvcmVfcmVxICpyZXEgPSAmdnBzLT5yZXFbdnBzLT5yZXFfaWRdOwo+ID4g KwlzdHJ1Y3QgdmlydGlvX3BzdG9yZV9yZXMgKnJlcyA9ICZ2cHMtPnJlc1t2cHMtPnJlcV9pZF07 Cj4gPiArCXN0cnVjdCBzY2F0dGVybGlzdCBzZ29bMV0sIHNnaVsxXTsKPiA+ICsJc3RydWN0IHNj YXR0ZXJsaXN0ICpzZ3NbMl0gPSB7IHNnbywgc2dpIH07Cj4gPiArCXVuc2lnbmVkIGludCBsZW47 Cj4gPiArCj4gPiArCXZpcnRfcHN0b3JlX2dldF9yZXFzKHZwcywgJnJlcSwgJnJlcyk7Cj4gPiAr Cj4gPiArCXJlcS0+Y21kID0gY3B1X3RvX3ZpcnRpbzE2KHZwcy0+dmRldiwgVklSVElPX1BTVE9S RV9DTURfQ0xPU0UpOwo+ID4gKwo+ID4gKwlzZ19pbml0X29uZShzZ28sIHJlcSwgc2l6ZW9mKCpy ZXEpKTsKPiA+ICsJc2dfaW5pdF9vbmUoc2dpLCByZXMsIHNpemVvZigqcmVzKSk7Cj4gPiArCXZp cnRxdWV1ZV9hZGRfc2dzKHZwcy0+dnFbMF0sIHNncywgMSwgMSwgdnBzLCBHRlBfS0VSTkVMKTsK PiA+ICsJdmlydHF1ZXVlX2tpY2sodnBzLT52cVswXSk7Cj4gPiArCj4gPiArCXdhaXRfZXZlbnQo dnBzLT5hY2tlZCwgdmlydHF1ZXVlX2dldF9idWYodnBzLT52cVswXSwgJmxlbikpOwo+ID4gKwly ZXR1cm4gdmlydGlvMzJfdG9fY3B1KHZwcy0+dmRldiwgcmVzLT5yZXQpOwo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgc3NpemVfdCB2aXJ0X3BzdG9yZV9yZWFkKHU2NCAqaWQsIGVudW0gcHN0b3Jl X3R5cGVfaWQgKnR5cGUsCj4gPiArCQkJCWludCAqY291bnQsIHN0cnVjdCB0aW1lc3BlYyAqdGlt ZSwKPiA+ICsJCQkJY2hhciAqKmJ1ZiwgYm9vbCAqY29tcHJlc3NlZCwKPiA+ICsJCQkJc3NpemVf dCAqZWNjX25vdGljZV9zaXplLAo+ID4gKwkJCQlzdHJ1Y3QgcHN0b3JlX2luZm8gKnBzaSkKPiA+ ICt7Cj4gPiArCXN0cnVjdCB2aXJ0aW9fcHN0b3JlICp2cHMgPSBwc2ktPmRhdGE7Cj4gPiArCXN0 cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcSAqcmVxOwo+ID4gKwlzdHJ1Y3QgdmlydGlvX3BzdG9yZV9y ZXMgKnJlczsKPiA+ICsJc3RydWN0IHZpcnRpb19wc3RvcmVfZmlsZWluZm8gaW5mbzsKPiA+ICsJ c3RydWN0IHNjYXR0ZXJsaXN0IHNnb1sxXSwgc2dpWzNdOwo+ID4gKwlzdHJ1Y3Qgc2NhdHRlcmxp c3QgKnNnc1syXSA9IHsgc2dvLCBzZ2kgfTsKPiA+ICsJdW5zaWduZWQgaW50IGxlbjsKPiA+ICsJ dW5zaWduZWQgaW50IGZsYWdzOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwl2b2lkICpiZjsKPiA+ICsK PiA+ICsJdmlydF9wc3RvcmVfZ2V0X3JlcXModnBzLCAmcmVxLCAmcmVzKTsKPiA+ICsKPiA+ICsJ cmVxLT5jbWQgPSBjcHVfdG9fdmlydGlvMTYodnBzLT52ZGV2LCBWSVJUSU9fUFNUT1JFX0NNRF9S RUFEKTsKPiA+ICsKPiA+ICsJc2dfaW5pdF9vbmUoc2dvLCByZXEsIHNpemVvZigqcmVxKSk7Cj4g PiArCXNnX2luaXRfdGFibGUoc2dpLCAzKTsKPiA+ICsJc2dfc2V0X2J1Zigmc2dpWzBdLCByZXMs IHNpemVvZigqcmVzKSk7Cj4gPiArCXNnX3NldF9idWYoJnNnaVsxXSwgJmluZm8sIHNpemVvZihp bmZvKSk7Cj4gPiArCXNnX3NldF9idWYoJnNnaVsyXSwgcHNpLT5idWYsIHBzaS0+YnVmc2l6ZSk7 Cj4gPiArCXZpcnRxdWV1ZV9hZGRfc2dzKHZwcy0+dnFbMF0sIHNncywgMSwgMSwgdnBzLCBHRlBf S0VSTkVMKTsKPiA+ICsJdmlydHF1ZXVlX2tpY2sodnBzLT52cVswXSk7Cj4gPiArCj4gPiArCXdh aXRfZXZlbnQodnBzLT5hY2tlZCwgdmlydHF1ZXVlX2dldF9idWYodnBzLT52cVswXSwgJmxlbikp Owo+ID4gKwlpZiAobGVuIDwgc2l6ZW9mKCpyZXMpICsgc2l6ZW9mKGluZm8pKQo+ID4gKwkJcmV0 dXJuIC0xOwo+ID4gKwo+ID4gKwlyZXQgPSB2aXJ0aW8zMl90b19jcHUodnBzLT52ZGV2LCByZXMt PnJldCk7Cj4gPiArCWlmIChyZXQgPCAwKQo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJ bGVuID0gdmlydGlvMzJfdG9fY3B1KHZwcy0+dmRldiwgaW5mby5sZW4pOwo+ID4gKwo+ID4gKwli ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKGJmID09IE5VTEwpCj4gPiAr CQlyZXR1cm4gLUVOT01FTTsKPiA+ICsKPiA+ICsJKmlkICAgID0gdmlydGlvNjRfdG9fY3B1KHZw cy0+dmRldiwgaW5mby5pZCk7Cj4gPiArCSp0eXBlICA9IGZyb21fdmlydGlvX3R5cGUodnBzLCBp bmZvLnR5cGUpOwo+ID4gKwkqY291bnQgPSB2aXJ0aW8zMl90b19jcHUodnBzLT52ZGV2LCBpbmZv LmNvdW50KTsKPiA+ICsKPiA+ICsJZmxhZ3MgPSB2aXJ0aW8zMl90b19jcHUodnBzLT52ZGV2LCBp bmZvLmZsYWdzKTsKPiA+ICsJKmNvbXByZXNzZWQgPSBmbGFncyAmIFZJUlRJT19QU1RPUkVfRkxf Q09NUFJFU1NFRDsKPiA+ICsKPiA+ICsJdGltZS0+dHZfc2VjICA9IHZpcnRpbzY0X3RvX2NwdSh2 cHMtPnZkZXYsIGluZm8udGltZV9zZWMpOwo+ID4gKwl0aW1lLT50dl9uc2VjID0gdmlydGlvMzJf dG9fY3B1KHZwcy0+dmRldiwgaW5mby50aW1lX25zZWMpOwo+ID4gKwo+ID4gKwltZW1jcHkoYmYs IHBzaS0+YnVmLCBsZW4pOwo+ID4gKwkqYnVmID0gYmY7Cj4gPiArCj4gPiArCXJldHVybiBsZW47 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbm90cmFjZSB2aXJ0X3BzdG9yZV93cml0ZShl bnVtIHBzdG9yZV90eXBlX2lkIHR5cGUsCj4gPiArCQkJCSAgICAgZW51bSBrbXNnX2R1bXBfcmVh c29uIHJlYXNvbiwKPiA+ICsJCQkJICAgICB1NjQgKmlkLCB1bnNpZ25lZCBpbnQgcGFydCwgaW50 IGNvdW50LAo+ID4gKwkJCQkgICAgIGJvb2wgY29tcHJlc3NlZCwgc2l6ZV90IHNpemUsCj4gPiAr CQkJCSAgICAgc3RydWN0IHBzdG9yZV9pbmZvICpwc2kpCj4gPiArewo+ID4gKwlzdHJ1Y3Qgdmly dGlvX3BzdG9yZSAqdnBzID0gcHNpLT5kYXRhOwo+ID4gKwlzdHJ1Y3QgdmlydGlvX3BzdG9yZV9y ZXEgKnJlcTsKPiA+ICsJc3RydWN0IHZpcnRpb19wc3RvcmVfcmVzICpyZXM7Cj4gPiArCXN0cnVj dCBzY2F0dGVybGlzdCBzZ29bMl0sIHNnaVsxXTsKPiA+ICsJc3RydWN0IHNjYXR0ZXJsaXN0ICpz Z3NbMl0gPSB7IHNnbywgc2dpIH07Cj4gPiArCXVuc2lnbmVkIGludCBmbGFncyA9IGNvbXByZXNz ZWQgPyBWSVJUSU9fUFNUT1JFX0ZMX0NPTVBSRVNTRUQgOiAwOwo+ID4gKwo+ID4gKwlpZiAodnBz LT5mYWlsZWQpCj4gPiArCQlyZXR1cm4gLTE7Cj4gPiArCj4gPiArCSppZCA9IHZwcy0+cmVxX2lk Owo+ID4gKwl2aXJ0X3BzdG9yZV9nZXRfcmVxcyh2cHMsICZyZXEsICZyZXMpOwo+ID4gKwo+ID4g KwlyZXEtPmNtZCAgID0gY3B1X3RvX3ZpcnRpbzE2KHZwcy0+dmRldiwgVklSVElPX1BTVE9SRV9D TURfV1JJVEUpOwo+ID4gKwlyZXEtPnR5cGUgID0gdG9fdmlydGlvX3R5cGUodnBzLCB0eXBlKTsK PiA+ICsJcmVxLT5mbGFncyA9IGNwdV90b192aXJ0aW8zMih2cHMtPnZkZXYsIGZsYWdzKTsKPiA+ ICsKPiA+ICsJc2dfaW5pdF90YWJsZShzZ28sIDIpOwo+ID4gKwlzZ19zZXRfYnVmKCZzZ29bMF0s IHJlcSwgc2l6ZW9mKCpyZXEpKTsKPiA+ICsJc2dfc2V0X2J1Zigmc2dvWzFdLCBwc3RvcmVfZ2V0 X2J1Zihwc2kpLCBzaXplKTsKPiA+ICsJc2dfaW5pdF9vbmUoc2dpLCByZXMsIHNpemVvZigqcmVz KSk7Cj4gPiArCXZpcnRxdWV1ZV9hZGRfc2dzKHZwcy0+dnFbMV0sIHNncywgMSwgMSwgdnBzLCBH RlBfQVRPTUlDKTsKPiA+ICsJdmlydHF1ZXVlX2tpY2sodnBzLT52cVsxXSk7Cj4gPiArCj4gPiAr CXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHZpcnRfcHN0b3JlX2VyYXNl KGVudW0gcHN0b3JlX3R5cGVfaWQgdHlwZSwgdTY0IGlkLCBpbnQgY291bnQsCj4gPiArCQkJICAg ICBzdHJ1Y3QgdGltZXNwZWMgdGltZSwgc3RydWN0IHBzdG9yZV9pbmZvICpwc2kpCj4gPiArewo+ ID4gKwlzdHJ1Y3QgdmlydGlvX3BzdG9yZSAqdnBzID0gcHNpLT5kYXRhOwo+ID4gKwlzdHJ1Y3Qg dmlydGlvX3BzdG9yZV9yZXEgKnJlcTsKPiA+ICsJc3RydWN0IHZpcnRpb19wc3RvcmVfcmVzICpy ZXM7Cj4gPiArCXN0cnVjdCBzY2F0dGVybGlzdCBzZ29bMV0sIHNnaVsxXTsKPiA+ICsJc3RydWN0 IHNjYXR0ZXJsaXN0ICpzZ3NbMl0gPSB7IHNnbywgc2dpIH07Cj4gPiArCXVuc2lnbmVkIGludCBs ZW47Cj4gPiArCj4gPiArCXZpcnRfcHN0b3JlX2dldF9yZXFzKHZwcywgJnJlcSwgJnJlcyk7Cj4g PiArCj4gPiArCXJlcS0+Y21kICAgPSBjcHVfdG9fdmlydGlvMTYodnBzLT52ZGV2LCBWSVJUSU9f UFNUT1JFX0NNRF9FUkFTRSk7Cj4gPiArCXJlcS0+dHlwZSAgPSB0b192aXJ0aW9fdHlwZSh2cHMs IHR5cGUpOwo+ID4gKwlyZXEtPmlkCSAgID0gY3B1X3RvX3ZpcnRpbzY0KHZwcy0+dmRldiwgaWQp Owo+ID4gKwlyZXEtPmNvdW50ID0gY3B1X3RvX3ZpcnRpbzMyKHZwcy0+dmRldiwgY291bnQpOwo+ ID4gKwo+ID4gKwlzZ19pbml0X29uZShzZ28sIHJlcSwgc2l6ZW9mKCpyZXEpKTsKPiA+ICsJc2df aW5pdF9vbmUoc2dpLCByZXMsIHNpemVvZigqcmVzKSk7Cj4gPiArCXZpcnRxdWV1ZV9hZGRfc2dz KHZwcy0+dnFbMF0sIHNncywgMSwgMSwgdnBzLCBHRlBfS0VSTkVMKTsKPiA+ICsJdmlydHF1ZXVl X2tpY2sodnBzLT52cVswXSk7Cj4gPiArCj4gPiArCXdhaXRfZXZlbnQodnBzLT5hY2tlZCwgdmly dHF1ZXVlX2dldF9idWYodnBzLT52cVswXSwgJmxlbikpOwo+ID4gKwlyZXR1cm4gdmlydGlvMzJf dG9fY3B1KHZwcy0+dmRldiwgcmVzLT5yZXQpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50 IHZpcnRfcHN0b3JlX2luaXQoc3RydWN0IHZpcnRpb19wc3RvcmUgKnZwcykKPiA+ICt7Cj4gPiAr CXN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpbmZvID0gJnZwcy0+cHN0b3JlOwo+ID4gKwlpbnQgZXJy Owo+ID4gKwo+ID4gKwlpZiAoIXBzaW5mby0+YnVmc2l6ZSkKPiA+ICsJCXBzaW5mby0+YnVmc2l6 ZSA9IFZJUlRfUFNUT1JFX0JVRlNJWkU7Cj4gPiArCj4gPiArCXBzaW5mby0+YnVmID0gYWxsb2Nf cGFnZXNfZXhhY3QocHNpbmZvLT5idWZzaXplLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFwc2lu Zm8tPmJ1Zikgewo+ID4gKwkJcHJfZXJyKCJjYW5ub3QgYWxsb2NhdGUgcHN0b3JlIGJ1ZmZlclxu Iik7Cj4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlwc2luZm8tPm93 bmVyID0gVEhJU19NT0RVTEU7Cj4gPiArCXBzaW5mby0+bmFtZSAgPSAidmlydGlvIjsKPiA+ICsJ cHNpbmZvLT5vcGVuICA9IHZpcnRfcHN0b3JlX29wZW47Cj4gPiArCXBzaW5mby0+Y2xvc2UgPSB2 aXJ0X3BzdG9yZV9jbG9zZTsKPiA+ICsJcHNpbmZvLT5yZWFkICA9IHZpcnRfcHN0b3JlX3JlYWQ7 Cj4gPiArCXBzaW5mby0+ZXJhc2UgPSB2aXJ0X3BzdG9yZV9lcmFzZTsKPiA+ICsJcHNpbmZvLT53 cml0ZSA9IHZpcnRfcHN0b3JlX3dyaXRlOwo+ID4gKwlwc2luZm8tPmZsYWdzID0gUFNUT1JFX0ZM QUdTX0RNRVNHOwo+ID4gKwo+ID4gKwlwc2luZm8tPmRhdGEgID0gdnBzOwo+ID4gKwlzcGluX2xv Y2tfaW5pdCgmcHNpbmZvLT5idWZfbG9jayk7Cj4gPiArCj4gPiArCWVyciA9IHBzdG9yZV9yZWdp c3Rlcihwc2luZm8pOwo+ID4gKwlpZiAoZXJyKQo+ID4gKwkJa2ZyZWUocHNpbmZvLT5idWYpOwo+ ID4gKwo+ID4gKwlyZXR1cm4gZXJyOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHZpcnRf cHN0b3JlX2V4aXQoc3RydWN0IHZpcnRpb19wc3RvcmUgKnZwcykKPiA+ICt7Cj4gPiArCXN0cnVj dCBwc3RvcmVfaW5mbyAqcHNpbmZvID0gJnZwcy0+cHN0b3JlOwo+ID4gKwo+ID4gKwlwc3RvcmVf dW5yZWdpc3Rlcihwc2luZm8pOwo+IAo+IEkgZG9uJ3Qga25vdyBlbm91Z2ggYWJvdXQgcHN0b3Jl IC0gZG9lcyB0aGlzCj4gYWN0dWFsbHkgZW5zdXJlIHRoYXQKPiAxLiBhbGwgZXhpc3RpbmcgdXNl cnMgY2xvc2UgdGhlIGRldmljZQo+IDIuIG5vIG5ldyB1c2VycyBjYW4gb3BlbiBpdAo+IHNvbWVo b3c/CgpUaGUgcHN0b3JlIGRyaXZlciBkb2Vzbid0IGNyZWF0ZSBhIGRldmljZSBub2RlIChleGNl cHQgdGhlIHBtc2cgZGV2aWNlCndoaWNoIHRoaXMgcGF0Y2ggZG9lc24ndCBkZWFsIHdpdGgpIHNv IGl0IGRvZXNuJ3QgbmVlZCB0byB3b3JyeSBhYm91dAp0aGUgdXNlciBBRkFJSy4gIEl0IGp1c3Qg Y2FsbHMgdGhlIHBzdG9yZSBjYWxsYmFja3MgKGlmIGFueSkgb24gc29tZQpzeXN0ZW0gZXZlbnRz IChlLmcuIGttc2cgZHVtcCwgY29uc29sZSB3cml0ZSBhbmQgc28gb24pLgoKSW4gZmFjdCwgcHN0 b3JlIGlzIGEgcHNldWRvIGZpbGUgc3lzdGVtLCB3b3JrcyBhcyByZWFkLW9ubHkgbW9kZS4KCj4g Cj4gPiArCj4gPiArCWZyZWVfcGFnZXNfZXhhY3QocHNpbmZvLT5idWYsIHBzaW5mby0+YnVmc2l6 ZSk7Cj4gPiArCXBzaW5mby0+YnVmID0gTlVMTDsKPiA+ICsJcHNpbmZvLT5idWZzaXplID0gMDsK PiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgdmlydHBz dG9yZV9pbml0X3ZxcyhzdHJ1Y3QgdmlydGlvX3BzdG9yZSAqdnBzKQo+ID4gK3sKPiA+ICsJdnFf Y2FsbGJhY2tfdCAqY2FsbGJhY2tzW10gPSB7IHZpcnRwc3RvcmVfYWNrLCB2aXJ0cHN0b3JlX2No ZWNrIH07Cj4gPiArCWNvbnN0IGNoYXIgKm5hbWVzW10gPSB7ICJwc3RvcmVfcmVhZCIsICJwc3Rv cmVfd3JpdGUiIH07Cj4gPiArCj4gPiArCXJldHVybiB2cHMtPnZkZXYtPmNvbmZpZy0+ZmluZF92 cXModnBzLT52ZGV2LCAyLCB2cHMtPnZxLAo+ID4gKwkJCQkJICAgY2FsbGJhY2tzLCBuYW1lcyk7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHZpcnRwc3RvcmVfaW5pdF9jb25maWcoc3Ry dWN0IHZpcnRpb19wc3RvcmUgKnZwcykKPiA+ICt7Cj4gPiArCXUzMiBidWZzaXplOwo+ID4gKwo+ ID4gKwl2aXJ0aW9fY3JlYWQodnBzLT52ZGV2LCBzdHJ1Y3QgdmlydGlvX3BzdG9yZV9jb25maWcs IGJ1ZnNpemUsICZidWZzaXplKTsKPiA+ICsKPiA+ICsJdnBzLT5wc3RvcmUuYnVmc2l6ZSA9IFBB R0VfQUxJR04oYnVmc2l6ZSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHZpcnRwc3Rv cmVfY29uZmlybV9jb25maWcoc3RydWN0IHZpcnRpb19wc3RvcmUgKnZwcykKPiA+ICt7Cj4gPiAr CXUzMiBidWZzaXplID0gdnBzLT5wc3RvcmUuYnVmc2l6ZTsKPiA+ICsKPiA+ICsJdmlydGlvX2N3 cml0ZSh2cHMtPnZkZXYsIHN0cnVjdCB2aXJ0aW9fcHN0b3JlX2NvbmZpZywgYnVmc2l6ZSwKPiA+ ICsJCSAgICAgJmJ1ZnNpemUpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHZpcnRwc3Rv cmVfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gPiArewo+ID4gKwlzdHJ1Y3Qg dmlydGlvX3BzdG9yZSAqdnBzOwo+ID4gKwlpbnQgZXJyOwo+ID4gKwo+ID4gKwlpZiAoIXZkZXYt PmNvbmZpZy0+Z2V0KSB7Cj4gPiArCQlkZXZfZXJyKCZ2ZGV2LT5kZXYsICJkcml2ZXIgaW5pdDog Y29uZmlnIGFjY2VzcyBkaXNhYmxlZFxuIik7Cj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsJ fQo+ID4gKwo+ID4gKwl2ZGV2LT5wcml2ID0gdnBzID0ga3phbGxvYyhzaXplb2YoKnZwcyksIEdG UF9LRVJORUwpOwo+ID4gKwlpZiAoIXZwcykgewo+ID4gKwkJZXJyID0gLUVOT01FTTsKPiA+ICsJ CWdvdG8gb3V0Owo+ID4gKwl9Cj4gPiArCXZwcy0+dmRldiA9IHZkZXY7Cj4gPiArCj4gPiArCWVy ciA9IHZpcnRwc3RvcmVfaW5pdF92cXModnBzKTsKPiA+ICsJaWYgKGVyciA8IDApCj4gPiArCQln b3RvIG91dF9mcmVlOwo+ID4gKwo+ID4gKwl2aXJ0cHN0b3JlX2luaXRfY29uZmlnKHZwcyk7Cj4g PiArCj4gPiArCWVyciA9IHZpcnRfcHN0b3JlX2luaXQodnBzKTsKPiA+ICsJaWYgKGVycikKPiA+ ICsJCWdvdG8gb3V0X2RlbF92cTsKPiA+ICsKPiA+ICsJdmlydHBzdG9yZV9jb25maXJtX2NvbmZp Zyh2cHMpOwo+ID4gKwo+ID4gKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ2cHMtPmFja2VkKTsKPiA+ ICsKPiA+ICsJdmlydGlvX2RldmljZV9yZWFkeSh2ZGV2KTsKPiA+ICsKPiA+ICsJZGV2X2luZm8o JnZkZXYtPmRldiwgImRyaXZlciBpbml0OiBvayAoYnVmc2l6ZSA9ICVsdUssIGZsYWdzID0gJXgp XG4iLAo+ID4gKwkJIHZwcy0+cHN0b3JlLmJ1ZnNpemUgPj4gMTAsIHZwcy0+cHN0b3JlLmZsYWdz KTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArCj4gPiArb3V0X2RlbF92cToKPiA+ICsJdmRl di0+Y29uZmlnLT5kZWxfdnFzKHZkZXYpOwo+ID4gK291dF9mcmVlOgo+ID4gKwlrZnJlZSh2cHMp Owo+ID4gK291dDoKPiA+ICsJZGV2X2VycigmdmRldi0+ZGV2LCAiZHJpdmVyIGluaXQ6IGZhaWxl ZCB3aXRoICVkXG4iLCBlcnIpOwo+ID4gKwlyZXR1cm4gZXJyOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgdm9pZCB2aXJ0cHN0b3JlX3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikK PiA+ICt7Cj4gPiArCXN0cnVjdCB2aXJ0aW9fcHN0b3JlICp2cHMgPSB2ZGV2LT5wcml2Owo+ID4g Kwo+ID4gKwl2aXJ0X3BzdG9yZV9leGl0KHZwcyk7Cj4gPiArCj4gPiArCS8qIE5vdyB3ZSByZXNl dCB0aGUgZGV2aWNlIHNvIHdlIGNhbiBjbGVhbiB1cCB0aGUgcXVldWVzLiAqLwo+ID4gKwl2ZGV2 LT5jb25maWctPnJlc2V0KHZkZXYpOwo+ID4gKwo+ID4gKwl2ZGV2LT5jb25maWctPmRlbF92cXMo dmRldik7Cj4gPiArCj4gPiArCWtmcmVlKHZwcyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB1 bnNpZ25lZCBpbnQgZmVhdHVyZXNbXSA9IHsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1 Y3QgdmlydGlvX2RldmljZV9pZCBpZF90YWJsZVtdID0gewo+ID4gKwl7IFZJUlRJT19JRF9QU1RP UkUsIFZJUlRJT19ERVZfQU5ZX0lEIH0sCj4gPiArCXsgMCB9LAo+ID4gK307Cj4gPiArCj4gPiAr c3RhdGljIHN0cnVjdCB2aXJ0aW9fZHJpdmVyIHZpcnRpb19wc3RvcmVfZHJpdmVyID0gewo+IAo+ IFdlIG5lZWQgc29tZSB3YXkgdG8gYXZvaWQgdHJ5aW5nIHRvIGxvYWQgdGhpcwo+IGFzIGEgbGVn YWN5IGRldmljZS4gVGhlcmUgaXNuJ3QgYSB3YXkgdG8gZG8gaXQgeWV0Cj4gc28gSSB3b24ndCBi bG9jayB5b3VyIHBhdGNoIG9uIHRoaXMgYnV0IHBscyB0cnkgdG8KPiBjb21lIHVwIHdpdGggc29t ZXRoaW5nLCBhbmQgSSdsbCBkbywgdG9vLgoKSSBoYXZlIG5vIGlkZWEgd2hhdCBJIGNhbiBkby4g IEFsc28gaXQgc2VlbXMgdGhlIGt2bXRvb2xzIHN1cHBvcnRzCm9ubHkgbGVnYWN5IGRldmljZXMg KHBsZWFzZSBjb3JyZWN0IG1lIEkgd2FzIHdyb25nKS4KCgo+IAo+IAo+ID4gKwkuZHJpdmVyLm5h bWUgICAgICAgICA9IEtCVUlMRF9NT0ROQU1FLAo+ID4gKwkuZHJpdmVyLm93bmVyICAgICAgICA9 IFRISVNfTU9EVUxFLAo+ID4gKwkuZmVhdHVyZV90YWJsZSAgICAgICA9IGZlYXR1cmVzLAo+ID4g KwkuZmVhdHVyZV90YWJsZV9zaXplICA9IEFSUkFZX1NJWkUoZmVhdHVyZXMpLAo+ID4gKwkuaWRf dGFibGUgICAgICAgICAgICA9IGlkX3RhYmxlLAo+ID4gKwkucHJvYmUgICAgICAgICAgICAgICA9 IHZpcnRwc3RvcmVfcHJvYmUsCj4gPiArCS5yZW1vdmUgICAgICAgICAgICAgID0gdmlydHBzdG9y ZV9yZW1vdmUsCj4gCj4gV29uJ3QgdGhpcyBuZWVkIGZyZWV6ZS9yZXN0b3JlIGNhbGxiYWNrcz8K ClByb2JhYmx5Li4gOikgIFdpbGwgYWRkLgoKPiAKPiA+ICt9Owo+ID4gKwo+ID4gK21vZHVsZV92 aXJ0aW9fZHJpdmVyKHZpcnRpb19wc3RvcmVfZHJpdmVyKTsKPiA+ICtNT0RVTEVfREVWSUNFX1RB QkxFKHZpcnRpbywgaWRfdGFibGUpOwo+ID4gKwo+ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsK PiA+ICtNT0RVTEVfQVVUSE9SKCJOYW1oeXVuZyBLaW0gPG5hbWh5dW5nQGtlcm5lbC5vcmc+Iik7 Cj4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJWaXJ0aW8gcHN0b3JlIGRyaXZlciIpOwo+ID4gZGlm ZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9LYnVpbGQgYi9pbmNsdWRlL3VhcGkvbGludXgv S2J1aWxkCj4gPiBpbmRleCA2ZDRlOTJjY2RjOTEuLjliYmIxNTU0ZDhiMiAxMDA2NDQKPiA+IC0t LSBhL2luY2x1ZGUvdWFwaS9saW51eC9LYnVpbGQKPiA+ICsrKyBiL2luY2x1ZGUvdWFwaS9saW51 eC9LYnVpbGQKPiA+IEBAIC00NDksNiArNDQ5LDcgQEAgaGVhZGVyLXkgKz0gdmlydGlvX2lkcy5o Cj4gPiAgaGVhZGVyLXkgKz0gdmlydGlvX2lucHV0LmgKPiA+ICBoZWFkZXIteSArPSB2aXJ0aW9f bmV0LmgKPiA+ICBoZWFkZXIteSArPSB2aXJ0aW9fcGNpLmgKPiA+ICtoZWFkZXIteSArPSB2aXJ0 aW9fcHN0b3JlLmgKPiA+ICBoZWFkZXIteSArPSB2aXJ0aW9fcmluZy5oCj4gPiAgaGVhZGVyLXkg Kz0gdmlydGlvX3JuZy5oCj4gPiAgaGVhZGVyLXkgKz0gdmlydGlvX3Njc2kuaAo+ID4gZGlmZiAt LWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92aXJ0aW9faWRzLmggYi9pbmNsdWRlL3VhcGkvbGlu dXgvdmlydGlvX2lkcy5oCj4gPiBpbmRleCA3NzkyNWY1ODdiMTUuLmM3MmE5YWI1ODhjMCAxMDA2 NDQKPiA+IC0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC92aXJ0aW9faWRzLmgKPiA+ICsrKyBiL2lu Y2x1ZGUvdWFwaS9saW51eC92aXJ0aW9faWRzLmgKPiA+IEBAIC00MSw1ICs0MSw2IEBACj4gPiAg I2RlZmluZSBWSVJUSU9fSURfQ0FJRgkgICAgICAgMTIgLyogVmlydGlvIGNhaWYgKi8KPiA+ICAj ZGVmaW5lIFZJUlRJT19JRF9HUFUgICAgICAgICAgMTYgLyogdmlydGlvIEdQVSAqLwo+ID4gICNk ZWZpbmUgVklSVElPX0lEX0lOUFVUICAgICAgICAxOCAvKiB2aXJ0aW8gaW5wdXQgKi8KPiA+ICsj ZGVmaW5lIFZJUlRJT19JRF9QU1RPUkUgICAgICAgMjIgLyogdmlydGlvIHBzdG9yZSAqLwo+ID4g IAo+ID4gICNlbmRpZiAvKiBfTElOVVhfVklSVElPX0lEU19IICovCj4gPiBkaWZmIC0tZ2l0IGEv aW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19wc3RvcmUuaCBiL2luY2x1ZGUvdWFwaS9saW51eC92 aXJ0aW9fcHN0b3JlLmgKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAw MDAwMDAuLmY0YjBkMjA0ZDhhZQo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvaW5jbHVkZS91 YXBpL2xpbnV4L3ZpcnRpb19wc3RvcmUuaAo+ID4gQEAgLTAsMCArMSw3NCBAQAo+ID4gKyNpZm5k ZWYgX0xJTlVYX1ZJUlRJT19QU1RPUkVfSAo+ID4gKyNkZWZpbmUgX0xJTlVYX1ZJUlRJT19QU1RP UkVfSAo+ID4gKy8qIFRoaXMgaGVhZGVyIGlzIEJTRCBsaWNlbnNlZCBzbyBhbnlvbmUgY2FuIHVz ZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50Cj4gPiArICogY29tcGF0aWJsZSBkcml2ZXJz L3NlcnZlcnMuCj4gPiArICoKPiA+ICsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKPiA+ICsgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKPiA+ ICsgKiBhcmUgbWV0Ogo+ID4gKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gPiArICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgo+ID4gKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0Cj4gPiArICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQo+ID4gKyAqICAgIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCj4g PiArICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBJQk0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u dHJpYnV0b3JzCj4gPiArICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCj4gPiArICogICAgd2l0aG91dCBzcGVj aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCj4gPiArICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElT JycgQU5ECj4gPiArICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCj4gPiArICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKPiA+ ICsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIElCTSBPUiBDT05UUklCVVRP UlMgQkUgTElBQkxFCj4gPiArICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKPiA+ICsgKiBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUwo+ID4gKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQo+ID4gKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCj4gPiAr ICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up IEFSSVNJTkcgSU4gQU5ZIFdBWQo+ID4gKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKPiA+ICsgKiBTVUNIIERB TUFHRS4gKi8KPiA+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiA+ICsjaW5jbHVkZSA8bGlu dXgvdmlydGlvX3R5cGVzLmg+Cj4gPiArCj4gPiArI2RlZmluZSBWSVJUSU9fUFNUT1JFX0NNRF9O VUxMICAgMAo+ID4gKyNkZWZpbmUgVklSVElPX1BTVE9SRV9DTURfT1BFTiAgIDEKPiA+ICsjZGVm aW5lIFZJUlRJT19QU1RPUkVfQ01EX1JFQUQgICAyCj4gPiArI2RlZmluZSBWSVJUSU9fUFNUT1JF X0NNRF9XUklURSAgMwo+ID4gKyNkZWZpbmUgVklSVElPX1BTVE9SRV9DTURfRVJBU0UgIDQKPiA+ ICsjZGVmaW5lIFZJUlRJT19QU1RPUkVfQ01EX0NMT1NFICA1Cj4gPiArCj4gPiArI2RlZmluZSBW SVJUSU9fUFNUT1JFX1RZUEVfVU5LTk9XTiAgMAo+ID4gKyNkZWZpbmUgVklSVElPX1BTVE9SRV9U WVBFX0RNRVNHICAgIDEKPiA+ICsKPiA+ICsjZGVmaW5lIFZJUlRJT19QU1RPUkVfRkxfQ09NUFJF U1NFRCAgMQo+IAo+IE1vc3Qgb3RoZXIgaGVhZGVycyB1c2UgX0ZfIGFuZCBub3QgX0ZMXwo+IEFs c28sIHdlIHNwZWNpZnkgYml0IG51bWJlciBhbmQgbm90IHRoZQo+IGJpdG1hc2suIFNvOgo+IAo+ ICNkZWZpbmUgVklSVElPX1BTVE9SRV9GX0NPTVBSRVNTRUQgIDAKPiAKPiBhbmQKPiAKPiAoMHgx IDw8IFZJUlRJT19QU1RPUkVfRl9DT01QUkVTU0VEKQoKT2suCgo+IAo+IAo+ID4gKwo+ID4gK3N0 cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcSB7Cj4gPiArCV9fdmlydGlvMTYJCWNtZDsKPiA+ICsJX192 aXJ0aW8xNgkJdHlwZTsKPiA+ICsJX192aXJ0aW8zMgkJZmxhZ3M7Cj4gPiArCV9fdmlydGlvNjQJ CWlkOwo+ID4gKwlfX3ZpcnRpbzMyCQljb3VudDsKPiA+ICsJX192aXJ0aW8zMgkJcmVzZXJ2ZWQ7 Cj4gPiArfTsKPiA+ICsKPiA+ICtzdHJ1Y3QgdmlydGlvX3BzdG9yZV9yZXMgewo+ID4gKwlfX3Zp cnRpbzE2CQljbWQ7Cj4gPiArCV9fdmlydGlvMTYJCXR5cGU7Cj4gPiArCV9fdmlydGlvMzIJCXJl dDsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0cnVjdCB2aXJ0aW9fcHN0b3JlX2ZpbGVpbmZvIHsKPiA+ ICsJX192aXJ0aW82NAkJaWQ7Cj4gPiArCV9fdmlydGlvMzIJCWNvdW50Owo+ID4gKwlfX3ZpcnRp bzE2CQl0eXBlOwo+ID4gKwlfX3ZpcnRpbzE2CQl1bnVzZWQ7Cj4gPiArCV9fdmlydGlvMzIJCWZs YWdzOwo+ID4gKwlfX3ZpcnRpbzMyCQlsZW47Cj4gPiArCV9fdmlydGlvNjQJCXRpbWVfc2VjOwo+ ID4gKwlfX3ZpcnRpbzMyCQl0aW1lX25zZWM7Cj4gPiArCV9fdmlydGlvMzIJCXJlc2VydmVkOwo+ IAo+IEFueSByZWFzb24gb25lIGlzIHJlc2VydmVkIHRoZSBvdGhlciBpcyB1bnVzZWQ/Cj4gSWYg bm90IGp1c3QgY2FsbHMgdGhlbSBwYWQxLCBwYWQyPwoKTm8gc3BlY2lmaWMgcmVhc29uLCB3aWxs IGNoYW5nZS4KCgo+IAo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IHZpcnRpb19wc3RvcmVfY29u ZmlnIHsKPiA+ICsJX192aXJ0aW8zMgkJYnVmc2l6ZTsKPiA+ICt9Owo+ID4gKwo+IAo+IF9fdmly dGlvIHRoaW5ncyBhcmUgZm9yIGNvbXBhdGliaWxpdHkgdGhpbmdzLgo+IE5ldyBkZXZpY2VzIHNo b3VsZCBqdXN0IHVzZSBfX2xlIGV2ZXJ5d2hlcmUuCgpSaWdodC4gIEFnYWluLCBhbHJlYWR5IGZp eGVkIGluIHY1LiA6KQoKCj4gCj4gTGV0IG1lIHBvc3QgYSBwYXRjaCB0aGF0IGFkZHMgY29uZmln IHNwYWNlIGFjY2Vzc29ycwo+IHNvIHlvdSBjYW4gZG8gdGhpcy4KClBsZWFzZSBDQyBtZSBvbiB0 aGUgcGF0Y2guCgpUaGFua3MsCk5hbWh5dW5nCgo+IAo+IAo+ID4gKyNlbmRpZiAvKiBfTElOVVhf VklSVElPX1BTVE9SRV9IICovCj4gPiAtLSAKPiA+IDIuOS4zCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApW aXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxp bnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==