From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: Re: [PATCH 1/3] virtio: Basic implementation of virtio pstore driver Date: Tue, 15 Nov 2016 07:06:28 +0200 Message-ID: <20161115065658-mutt-send-email-mst@kernel.org> References: <20160820080744.10344-1-namhyung@kernel.org> <20160820080744.10344-2-namhyung@kernel.org> <20161110182611-mutt-send-email-mst@kernel.org> <20161115045021.GA15992@danjae.aot.lge.com> 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: Namhyung Kim Return-path: Content-Disposition: inline In-Reply-To: <20161115045021.GA15992@danjae.aot.lge.com> 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 T24gVHVlLCBOb3YgMTUsIDIwMTYgYXQgMDE6NTA6MjFQTSArMDkwMCwgTmFtaHl1bmcgS2ltIHdy b3RlOgo+IEhpIE1pY2hhZWwsCj4gCj4gT24gVGh1LCBOb3YgMTAsIDIwMTYgYXQgMDY6Mzk6NTVQ TSArMDIwMCwgTWljaGFlbCBTLiBUc2lya2luIHdyb3RlOgo+ID4gT24gU2F0LCBBdWcgMjAsIDIw MTYgYXQgMDU6MDc6NDJQTSArMDkwMCwgTmFtaHl1bmcgS2ltIHdyb3RlOgo+ID4gPiBUaGUgdmly dGlvIHBzdG9yZSBkcml2ZXIgcHJvdmlkZXMgaW50ZXJmYWNlIHRvIHRoZSBwc3RvcmUgc3Vic3lz dGVtIHNvCj4gPiA+IHRoYXQgdGhlIGd1ZXN0IGtlcm5lbCdzIGxvZy9kdW1wIG1lc3NhZ2UgY2Fu IGJlIHNhdmVkIG9uIHRoZSBob3N0Cj4gPiA+IG1hY2hpbmUuICBVc2VycyBjYW4gYWNjZXNzIHRo ZSBsb2cgZmlsZSBkaXJlY3RseSBvbiB0aGUgaG9zdCwgb3Igb24gdGhlCj4gPiA+IGd1ZXN0IGF0 IHRoZSBuZXh0IGJvb3QgdXNpbmcgcHN0b3JlIGZpbGVzeXN0ZW0uICBJdCBjdXJyZW50bHkgZGVh bHMgd2l0aAo+ID4gPiBrZXJuZWwgbG9nIChwcmludGspIGJ1ZmZlciBvbmx5LCBidXQgd2UgY2Fu IGV4dGVuZCBpdCB0byBoYXZlIG90aGVyCj4gPiA+IGluZm9ybWF0aW9uIChsaWtlIGZ0cmFjZSBk dW1wKSBsYXRlci4KPiA+ID4gCj4gPiA+IEl0IHN1cHBvcnRzIGxlZ2FjeSBQQ0kgZGV2aWNlIHVz aW5nIHNpbmdsZSBvcmRlci0yIHBhZ2UgYnVmZmVyLgo+ID4gCj4gPiBEbyB5b3UgbWVhbiBhIGxl Z2FjeSB2aXJ0aW8gZGV2aWNlPyBJIGRvbid0IHNlZSB3aHkKPiA+IHlvdSB3b3VsZCB3YW50IHRv IHN1cHBvcnQgcHJlLTEuMCBtb2RlLgo+ID4gSWYgeW91IGRyb3AgdGhhdCwgeW91IGNhbiBkcm9w IGFsbCBjcHVfdG9fdmlydGlvIHRoaW5ncwo+ID4gYW5kIGp1c3QgdXNlIF9fbGUgYWNjZXNzb3Jz Lgo+IAo+IEkgd2FzIHRoaW5raW5nIGFib3V0IHRoZSBrdm10b29scyB3aGljaCBsYWNrcyAxLjAg c3VwcG9ydCBBRkFJSy4KClVubGVzcyBrdm10b29scyB3YW50cyB0byBiZSBsZWZ0IGJlaGluZCBp dCBoYXMgdG8gZ28gMS4wLgoKPiAgQnV0Cj4gSSB0aGluayBpdCdkIGJlIGJldHRlciB0byBhbHdh eXMgdXNlIF9fbGUgdHlwZSBhbnl3YXkuICBXaWxsIGNoYW5nZS4KPiAKPiAKPiA+IAo+ID4gPiBJ dCB1c2VzCj4gPiA+IHR3byB2aXJ0cXVldWVzIC0gb25lIGZvciAoc3luYykgcmVhZCBhbmQgYW5v dGhlciBmb3IgKGFzeW5jKSB3cml0ZS4KPiA+ID4gU2luY2UgaXQgY2Fubm90IHdhaXQgZm9yIHdy aXRlIGZpbmlzaGVkLCBpdCBzdXBwb3J0cyB1cCB0byAxMjgKPiA+ID4gY29uY3VycmVudCBJTy4g IFRoZSBidWZmZXIgc2l6ZSBpcyBjb25maWd1cmFibGUgbm93Lgo+ID4gPiAKPiA+ID4gQ2M6IFBh b2xvIEJvbnppbmkgPHBib256aW5pQHJlZGhhdC5jb20+Cj4gPiA+IENjOiBSYWRpbSBLcsSNbcOh xZkgPHJrcmNtYXJAcmVkaGF0LmNvbT4KPiA+ID4gQ2M6ICJNaWNoYWVsIFMuIFRzaXJraW4iIDxt c3RAcmVkaGF0LmNvbT4KPiA+ID4gQ2M6IEFudGhvbnkgTGlndW9yaSA8YWxpZ3VvcmlAYW1hem9u LmNvbT4KPiA+ID4gQ2M6IEFudG9uIFZvcm9udHNvdiA8YW50b25AZW5vbXNnLm9yZz4KPiA+ID4g Q2M6IENvbGluIENyb3NzIDxjY3Jvc3NAYW5kcm9pZC5jb20+Cj4gPiA+IENjOiBLZWVzIENvb2sg PGtlZXNjb29rQGNocm9taXVtLm9yZz4KPiA+ID4gQ2M6IFRvbnkgTHVjayA8dG9ueS5sdWNrQGlu dGVsLmNvbT4KPiA+ID4gQ2M6IFN0ZXZlbiBSb3N0ZWR0IDxyb3N0ZWR0QGdvb2RtaXMub3JnPgo+ ID4gPiBDYzogSW5nbyBNb2xuYXIgPG1pbmdvQGtlcm5lbC5vcmc+Cj4gPiA+IENjOiBNaW5jaGFu IEtpbSA8bWluY2hhbkBrZXJuZWwub3JnPgo+ID4gPiBDYzoga3ZtQHZnZXIua2VybmVsLm9yZwo+ ID4gPiBDYzogcWVtdS1kZXZlbEBub25nbnUub3JnCj4gPiA+IENjOiB2aXJ0dWFsaXphdGlvbkBs aXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBOYW1oeXVuZyBL aW0gPG5hbWh5dW5nQGtlcm5lbC5vcmc+Cj4gPiA+IC0tLQo+ID4gPiAgZHJpdmVycy92aXJ0aW8v S2NvbmZpZyAgICAgICAgICAgICB8ICAxMCArCj4gPiA+ICBkcml2ZXJzL3ZpcnRpby9NYWtlZmls ZSAgICAgICAgICAgIHwgICAxICsKPiA+ID4gIGRyaXZlcnMvdmlydGlvL3ZpcnRpb19wc3RvcmUu YyAgICAgfCA0MTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gPiAg aW5jbHVkZS91YXBpL2xpbnV4L0tidWlsZCAgICAgICAgICB8ICAgMSArCj4gPiA+ICBpbmNsdWRl L3VhcGkvbGludXgvdmlydGlvX2lkcy5oICAgIHwgICAxICsKPiA+ID4gIGluY2x1ZGUvdWFwaS9s aW51eC92aXJ0aW9fcHN0b3JlLmggfCAgNzQgKysrKysrKwo+ID4gPiAgNiBmaWxlcyBjaGFuZ2Vk LCA1MDQgaW5zZXJ0aW9ucygrKQo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdmly dGlvL3ZpcnRpb19wc3RvcmUuYwo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdWFw aS9saW51eC92aXJ0aW9fcHN0b3JlLmgKPiA+ID4gCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3ZpcnRpby9LY29uZmlnIGIvZHJpdmVycy92aXJ0aW8vS2NvbmZpZwo+ID4gPiBpbmRleCA3NzU5 MDMyMGQ0NGMuLjhmMGU2Yzc5NmMxMiAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy92aXJ0aW8v S2NvbmZpZwo+ID4gPiArKysgYi9kcml2ZXJzL3ZpcnRpby9LY29uZmlnCj4gPiA+IEBAIC01OCw2 ICs1OCwxNiBAQCBjb25maWcgVklSVElPX0lOUFVUCj4gPiA+ICAKPiA+ID4gIAkgSWYgdW5zdXJl LCBzYXkgTS4KPiA+ID4gIAo+ID4gPiArY29uZmlnIFZJUlRJT19QU1RPUkUKPiA+ID4gKwl0cmlz dGF0ZSAiVmlydGlvIHBzdG9yZSBkcml2ZXIiCj4gPiA+ICsJZGVwZW5kcyBvbiBWSVJUSU8KPiA+ ID4gKwlkZXBlbmRzIG9uIFBTVE9SRQo+ID4gPiArCS0tLWhlbHAtLS0KPiA+ID4gKwkgVGhpcyBk cml2ZXIgc3VwcG9ydHMgdmlydGlvIHBzdG9yZSBkZXZpY2VzIHRvIHNhdmUvcmVzdG9yZQo+ID4g PiArCSBwYW5pYyBhbmQgb29wcyBtZXNzYWdlcyBvbiB0aGUgaG9zdC4KPiA+ID4gKwo+ID4gPiAr CSBJZiB1bnN1cmUsIHNheSBNLgo+ID4gPiArCj4gPiA+ICAgY29uZmlnIFZJUlRJT19NTUlPCj4g PiA+ICAJdHJpc3RhdGUgIlBsYXRmb3JtIGJ1cyBkcml2ZXIgZm9yIG1lbW9yeSBtYXBwZWQgdmly dGlvIGRldmljZXMiCj4gPiA+ICAJZGVwZW5kcyBvbiBIQVNfSU9NRU0gJiYgSEFTX0RNQQo+ID4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vTWFrZWZpbGUgYi9kcml2ZXJzL3ZpcnRpby9N YWtlZmlsZQo+ID4gPiBpbmRleCA0MWUzMGUzZGM4NDIuLmJlZTY4Y2IyNmQ0OCAxMDA2NDQKPiA+ ID4gLS0tIGEvZHJpdmVycy92aXJ0aW8vTWFrZWZpbGUKPiA+ID4gKysrIGIvZHJpdmVycy92aXJ0 aW8vTWFrZWZpbGUKPiA+ID4gQEAgLTUsMyArNSw0IEBAIHZpcnRpb19wY2kteSA6PSB2aXJ0aW9f cGNpX21vZGVybi5vIHZpcnRpb19wY2lfY29tbW9uLm8KPiA+ID4gIHZpcnRpb19wY2ktJChDT05G SUdfVklSVElPX1BDSV9MRUdBQ1kpICs9IHZpcnRpb19wY2lfbGVnYWN5Lm8KPiA+ID4gIG9iai0k KENPTkZJR19WSVJUSU9fQkFMTE9PTikgKz0gdmlydGlvX2JhbGxvb24ubwo+ID4gPiAgb2JqLSQo Q09ORklHX1ZJUlRJT19JTlBVVCkgKz0gdmlydGlvX2lucHV0Lm8KPiA+ID4gK29iai0kKENPTkZJ R19WSVJUSU9fUFNUT1JFKSArPSB2aXJ0aW9fcHN0b3JlLm8KPiA+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvdmlydGlvL3ZpcnRpb19wc3RvcmUuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wc3Rv cmUuYwo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAu LjBhNjNjN2RiNDI3OAo+ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ICsrKyBiL2RyaXZlcnMvdmly dGlvL3ZpcnRpb19wc3RvcmUuYwo+ID4gPiBAQCAtMCwwICsxLDQxNyBAQAo+ID4gPiArI2RlZmlu ZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAo+ID4gPiArCj4gPiA+ICsjaW5j bHVkZSA8bGludXgva2VybmVsLmg+Cj4gPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4g PiA+ICsjaW5jbHVkZSA8bGludXgvcHN0b3JlLmg+Cj4gPiA+ICsjaW5jbHVkZSA8bGludXgvdmly dGlvLmg+Cj4gPiA+ICsjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgo+ID4gPiArI2lu Y2x1ZGUgPHVhcGkvbGludXgvdmlydGlvX2lkcy5oPgo+ID4gPiArI2luY2x1ZGUgPHVhcGkvbGlu dXgvdmlydGlvX3BzdG9yZS5oPgo+ID4gPiArCj4gPiA+ICsjZGVmaW5lIFZJUlRfUFNUT1JFX09S REVSICAgIDIKPiA+ID4gKyNkZWZpbmUgVklSVF9QU1RPUkVfQlVGU0laRSAgKDQwOTYgPDwgVklS VF9QU1RPUkVfT1JERVIpCj4gPiA+ICsjZGVmaW5lIFZJUlRfUFNUT1JFX05SX1JFUSAgIDEyOAo+ ID4gPiArCj4gPiA+ICtzdHJ1Y3QgdmlydGlvX3BzdG9yZSB7Cj4gPiA+ICsJc3RydWN0IHZpcnRp b19kZXZpY2UJKnZkZXY7Cj4gPiA+ICsJc3RydWN0IHZpcnRxdWV1ZQkqdnFbMl07Cj4gPiAKPiA+ IEknZCBhZGQgbmFtZWQgZmllbGRzIGluc3RlYWQgb2YgYW4gYXJyYXkgaGVyZSwgdnFbMF0KPiA+ IHZxWzFdIGFsbCBvdmVyIHRoZSBwbGFjZSBpcyBoYXJkIHRvIHJlYWQuCj4gCj4gV2lsbCBjaGFu Z2UuCj4gCj4gPiAKPiA+ID4gKwlzdHJ1Y3QgcHN0b3JlX2luZm8JIHBzdG9yZTsKPiA+ID4gKwlz dHJ1Y3QgdmlydGlvX3BzdG9yZV9yZXEgcmVxW1ZJUlRfUFNUT1JFX05SX1JFUV07Cj4gPiA+ICsJ c3RydWN0IHZpcnRpb19wc3RvcmVfcmVzIHJlc1tWSVJUX1BTVE9SRV9OUl9SRVFdOwo+ID4gPiAr CXVuc2lnbmVkIGludAkJIHJlcV9pZDsKPiA+ID4gKwo+ID4gPiArCS8qIFdhaXRpbmcgZm9yIGhv c3QgdG8gYWNrICovCj4gPiA+ICsJd2FpdF9xdWV1ZV9oZWFkX3QJYWNrZWQ7Cj4gPiA+ICsJaW50 CQkJZmFpbGVkOwo+ID4gPiArfTsKPiA+ID4gKwo+ID4gPiArI2RlZmluZSBUWVBFX1RBQkxFX0VO VFJZKF9lbnRyeSkJCQkJXAo+ID4gPiArCXsgUFNUT1JFX1RZUEVfIyNfZW50cnksIFZJUlRJT19Q U1RPUkVfVFlQRV8jI19lbnRyeSB9Cj4gPiA+ICsKPiA+ID4gK3N0cnVjdCB0eXBlX3RhYmxlIHsK PiA+ID4gKwlpbnQgcHN0b3JlOwo+ID4gPiArCXUxNiB2aXJ0aW87Cj4gPiA+ICt9IHR5cGVfdGFi bGVbXSA9IHsKPiA+ID4gKwlUWVBFX1RBQkxFX0VOVFJZKERNRVNHKSwKPiA+ID4gK307Cj4gPiA+ ICsKPiA+ID4gKyN1bmRlZiBUWVBFX1RBQkxFX0VOVFJZCj4gPiAKPiA+IGxldCdzIGF2b2lkIG1h Y3JvcyBmb3Igbm93IHBscy4gSW4gZmFjdCwgSSB3b3VsZCBqdXN0IG9wZW4tY29kZSB0aGlzCj4g PiBpbiB0b192aXJ0aW9fdHlwZSBiZWxvdy4gV2UgY2FuIGFsd2F5cyBjaGFuZ2Ugb3VyIG1pbmRz IGxhdGVyIGlmCj4gPiBsb3RzIG9mIHR5cGVzIGFyZSBhZGRlZC4KPiAKPiBZZXAuCj4gCj4gPiAK PiA+ID4gKwo+ID4gPiArCj4gPiAKPiA+IHNpbmdsZSBlbW90eSBsaW5lIHBscwo+IAo+IE9rLgo+ IAo+ID4gCj4gPiA+ICtzdGF0aWMgdTE2IHRvX3ZpcnRpb190eXBlKHN0cnVjdCB2aXJ0aW9fcHN0 b3JlICp2cHMsIGVudW0gcHN0b3JlX3R5cGVfaWQgdHlwZSkKPiA+ID4gK3sKPiA+ID4gKwl1bnNp Z25lZCBpbnQgaTsKPiA+ID4gKwo+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHR5 cGVfdGFibGUpOyBpKyspIHsKPiA+ID4gKwkJaWYgKHR5cGUgPT0gdHlwZV90YWJsZVtpXS5wc3Rv cmUpCj4gPiA+ICsJCQlyZXR1cm4gY3B1X3RvX3ZpcnRpbzE2KHZwcy0+dmRldiwgdHlwZV90YWJs ZVtpXS52aXJ0aW8pOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCXJldHVybiBjcHVfdG9fdmly dGlvMTYodnBzLT52ZGV2LCBWSVJUSU9fUFNUT1JFX1RZUEVfVU5LTk9XTik7Cj4gPiAKPiA+IFRo aXMgYXNzaWducyB1MTYgdG8gX192aXJ0aW8gdHlwZSwgc3BhcnNlIHdpbGwgd2Fybgo+ID4gaWYg eW91IGVuYWJsZSBlbmRpYW4tbmVzcyBjaGVja3MuCj4gPiBQbHMgZml4IHRoYXQgYW5kIGdlbmVy YWxseSwgcGxlYXNlIG1ha2Ugc3VyZSB0aGlzIGlzCj4gPiBjbGVhbiBmcm9tIHNwYXJzZSB3YXJu aW5ncy4KPiAKPiBJJ2xsIHJ1biBzcGFyc2UgYmVmb3JlIHNlbmRpbmcgcGF0Y2ggbmV4dCB0aW1l Lgo+IAo+ID4gCj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBlbnVtIHBzdG9yZV90eXBl X2lkIGZyb21fdmlydGlvX3R5cGUoc3RydWN0IHZpcnRpb19wc3RvcmUgKnZwcywgdTE2IHR5cGUp Cj4gPiA+ICt7Cj4gPiA+ICsJdW5zaWduZWQgaW50IGk7Cj4gPiA+ICsKPiA+ID4gKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRSh0eXBlX3RhYmxlKTsgaSsrKSB7Cj4gPiA+ICsJCWlmICh2aXJ0 aW8xNl90b19jcHUodnBzLT52ZGV2LCB0eXBlKSA9PSB0eXBlX3RhYmxlW2ldLnZpcnRpbykKPiA+ ID4gKwkJCXJldHVybiB0eXBlX3RhYmxlW2ldLnBzdG9yZTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ ID4gKwlyZXR1cm4gUFNUT1JFX1RZUEVfVU5LTk9XTjsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiAr c3RhdGljIHZvaWQgdmlydHBzdG9yZV9hY2soc3RydWN0IHZpcnRxdWV1ZSAqdnEpCj4gPiA+ICt7 Cj4gPiA+ICsJc3RydWN0IHZpcnRpb19wc3RvcmUgKnZwcyA9IHZxLT52ZGV2LT5wcml2Owo+ID4g PiArCj4gPiA+ICsJd2FrZV91cCgmdnBzLT5hY2tlZCk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4g K3N0YXRpYyB2b2lkIHZpcnRwc3RvcmVfY2hlY2soc3RydWN0IHZpcnRxdWV1ZSAqdnEpCj4gPiA+ ICt7Cj4gPiA+ICsJc3RydWN0IHZpcnRpb19wc3RvcmUgKnZwcyA9IHZxLT52ZGV2LT5wcml2Owo+ ID4gPiArCXN0cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcyAqcmVzOwo+ID4gPiArCXVuc2lnbmVkIGlu dCBsZW47Cj4gPiA+ICsKPiA+ID4gKwlyZXMgPSB2aXJ0cXVldWVfZ2V0X2J1Zih2cSwgJmxlbik7 Cj4gPiA+ICsJaWYgKHJlcyA9PSBOVUxMKQo+ID4gPiArCQlyZXR1cm47Cj4gPiA+ICsKPiA+ID4g KwlpZiAodmlydGlvMzJfdG9fY3B1KHZxLT52ZGV2LCByZXMtPnJldCkgPCAwKQo+ID4gPiArCQl2 cHMtPmZhaWxlZCA9IDE7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkIHZpcnRf cHN0b3JlX2dldF9yZXFzKHN0cnVjdCB2aXJ0aW9fcHN0b3JlICp2cHMsCj4gPiA+ICsJCQkJIHN0 cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcSAqKnByZXEsCj4gPiA+ICsJCQkJIHN0cnVjdCB2aXJ0aW9f cHN0b3JlX3JlcyAqKnByZXMpCj4gPiA+ICt7Cj4gPiA+ICsJdW5zaWduZWQgaW50IGlkeCA9IHZw cy0+cmVxX2lkKysgJSBWSVJUX1BTVE9SRV9OUl9SRVE7Cj4gPiA+ICsKPiA+ID4gKwkqcHJlcSA9 ICZ2cHMtPnJlcVtpZHhdOwo+ID4gPiArCSpwcmVzID0gJnZwcy0+cmVzW2lkeF07Cj4gPiA+ICsK PiA+ID4gKwltZW1zZXQoKnByZXEsIDAsIHNpemVvZigqKnByZXEpKTsKPiA+ID4gKwltZW1zZXQo KnByZXMsIDAsIHNpemVvZigqKnByZXMpKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGlj IGludCB2aXJ0X3BzdG9yZV9vcGVuKHN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpKQo+ID4gPiArewo+ ID4gPiArCXN0cnVjdCB2aXJ0aW9fcHN0b3JlICp2cHMgPSBwc2ktPmRhdGE7Cj4gPiA+ICsJc3Ry dWN0IHZpcnRpb19wc3RvcmVfcmVxICpyZXE7Cj4gPiA+ICsJc3RydWN0IHZpcnRpb19wc3RvcmVf cmVzICpyZXM7Cj4gPiA+ICsJc3RydWN0IHNjYXR0ZXJsaXN0IHNnb1sxXSwgc2dpWzFdOwo+ID4g PiArCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dzWzJdID0geyBzZ28sIHNnaSB9Owo+ID4gPiArCXVu c2lnbmVkIGludCBsZW47Cj4gPiA+ICsKPiA+ID4gKwl2aXJ0X3BzdG9yZV9nZXRfcmVxcyh2cHMs ICZyZXEsICZyZXMpOwo+ID4gPiArCj4gPiA+ICsJcmVxLT5jbWQgPSBjcHVfdG9fdmlydGlvMTYo dnBzLT52ZGV2LCBWSVJUSU9fUFNUT1JFX0NNRF9PUEVOKTsKPiA+ID4gKwo+ID4gPiArCXNnX2lu aXRfb25lKHNnbywgcmVxLCBzaXplb2YoKnJlcSkpOwo+ID4gPiArCXNnX2luaXRfb25lKHNnaSwg cmVzLCBzaXplb2YoKnJlcykpOwo+ID4gPiArCXZpcnRxdWV1ZV9hZGRfc2dzKHZwcy0+dnFbMF0s IHNncywgMSwgMSwgdnBzLCBHRlBfS0VSTkVMKTsKPiA+ID4gKwl2aXJ0cXVldWVfa2ljayh2cHMt PnZxWzBdKTsKPiA+ID4gKwo+ID4gPiArCXdhaXRfZXZlbnQodnBzLT5hY2tlZCwgdmlydHF1ZXVl X2dldF9idWYodnBzLT52cVswXSwgJmxlbikpOwo+ID4gCj4gPiBEb2VzIHRoaXMgYmxvY2sgdXNl cnNwYWNlIGluIGFuIHVuaW50ZXJydXB0aWJsZSB3YWl0IGlmCj4gPiBoYXJkd2FyZSBpcyBzbG93 PyBUaGF0J3Mgbm90IG5pY2UuCj4gCj4gWWVzLCBidXQgaXQncyBub3QgYSBjb21tb24gb3BlcmF0 aW9uIGFuZCBJIGp1c3Qgd2FudGVkIHRvIG1ha2UgaXQKPiBzaW1wbGUuCj4gCj4gCj4gPiAKPiA+ ID4gKwlyZXR1cm4gdmlydGlvMzJfdG9fY3B1KHZwcy0+dmRldiwgcmVzLT5yZXQpOwo+ID4gPiAr fQo+ID4gPiArCj4gCj4gW1NOSVBdCj4gPiA+ICtzdHJ1Y3QgdmlydGlvX3BzdG9yZV9maWxlaW5m byB7Cj4gPiA+ICsJX192aXJ0aW82NAkJaWQ7Cj4gPiA+ICsJX192aXJ0aW8zMgkJY291bnQ7Cj4g PiA+ICsJX192aXJ0aW8xNgkJdHlwZTsKPiA+ID4gKwlfX3ZpcnRpbzE2CQl1bnVzZWQ7Cj4gPiA+ ICsJX192aXJ0aW8zMgkJZmxhZ3M7Cj4gPiA+ICsJX192aXJ0aW8zMgkJbGVuOwo+ID4gPiArCV9f dmlydGlvNjQJCXRpbWVfc2VjOwo+ID4gPiArCV9fdmlydGlvMzIJCXRpbWVfbnNlYzsKPiA+ID4g KwlfX3ZpcnRpbzMyCQlyZXNlcnZlZDsKPiA+ID4gK307Cj4gPiA+ICsKPiA+ID4gK3N0cnVjdCB2 aXJ0aW9fcHN0b3JlX2NvbmZpZyB7Cj4gPiA+ICsJX192aXJ0aW8zMgkJYnVmc2l6ZTsKPiA+ID4g K307Cj4gPiA+ICsKPiA+IAo+ID4gV2hhdCBleGFjdGx5IGRvZXMgZWFjaCBmaWVsZCBtZWFuPyBJ J20gZXNwZWNpYWxseQo+ID4gaW50ZXJlc3RlZCBpbiB0aW1lIGZpZWxkcyAtIG1haW50YWluaW5n IGEgY29uc2lzdGVudAo+ID4gdGltZSBiZXR3ZWVuIGhvc3QgYW5kIGd1ZXN0IGlzIG5vdCBhIHNp bXBsZSBwcm9ibGVtLgo+IAo+IFRoZXNlIGFyZSByZXF1aXJlZCBieSBwc3RvcmUgYW5kIHdpbGwg YmUgdXNlZCB0byBjcmVhdGUgY29ycmVzcG9uZGluZwo+IGZpbGVzIGluIHRoZSBwc3RvcmUgZmls ZXN5c3RlbS4gIFRoZSB0aW1lIGZpZWxkcyBhcmUgZm9yIG10aW1lIGFuZAo+IGN0aW1lIGFuZCwg SSB0aGluaywgaXQncyBqdXN0IGEgaGludCBmb3IgdXNlciBhbmQgZG9lc24ndCByZXF1aXJlCj4g c3RyaWN0IGNvbnNpc3RlbmN5LgoKUGxzIGFkZCBkb2N1bWVudGF0aW9uLiBJIHdvdWxkIGp1c3Qg ZHJvcCBoaW50cyBmb3Igbm93LgoKPiAKPiBUaGFua3MgZm9yIHlvdXIgcmV2aWV3IQo+IE5hbWh5 dW5nCj4gCj4gPiAKPiA+ID4gKyNlbmRpZiAvKiBfTElOVVhfVklSVElPX1BTVE9SRV9IICovCj4g PiA+IC0tIAo+ID4gPiAyLjkuMwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpWaXJ0dWFsaXphdGlvbiBtYWlsaW5nIGxpc3QKVmlydHVhbGl6YXRpb25AbGlz dHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3Jn L21haWxtYW4vbGlzdGluZm8vdmlydHVhbGl6YXRpb24=