From mboxrd@z Thu Jan 1 00:00:00 1970 From: Namhyung Kim Subject: [PATCH 1/3] virtio: Basic implementation of virtio pstore driver Date: Wed, 31 Aug 2016 17:08:00 +0900 Message-ID: <20160831080802.13408-2-namhyung@kernel.org> References: <20160831080802.13408-1-namhyung@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Tony Luck , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Kees Cook , "Michael S. Tsirkin" , Anton Vorontsov , Will Deacon , LKML , Steven Rostedt , Minchan Kim , Anthony Liguori , Colin Cross , Paolo Bonzini , Ingo Molnar To: virtio-dev@lists.oasis-open.org, virtualization@lists.linux-foundation.org, kvm@vger.kernel.org, qemu-devel@nongnu.org Return-path: In-Reply-To: <20160831080802.13408-1-namhyung@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 VGhlIHZpcnRpbyBwc3RvcmUgZHJpdmVyIHByb3ZpZGVzIGludGVyZmFjZSB0byB0aGUgcHN0b3Jl IHN1YnN5c3RlbSBzbwp0aGF0IHRoZSBndWVzdCBrZXJuZWwncyBsb2cvZHVtcCBtZXNzYWdlIGNh biBiZSBzYXZlZCBvbiB0aGUgaG9zdAptYWNoaW5lLiAgVXNlcnMgY2FuIGFjY2VzcyB0aGUgbG9n IGZpbGUgZGlyZWN0bHkgb24gdGhlIGhvc3QsIG9yIG9uIHRoZQpndWVzdCBhdCB0aGUgbmV4dCBi b290IHVzaW5nIHBzdG9yZSBmaWxlc3lzdGVtLiAgSXQgY3VycmVudGx5IGRlYWxzIHdpdGgKa2Vy bmVsIGxvZyAocHJpbnRrKSBidWZmZXIgb25seSwgYnV0IHdlIGNhbiBleHRlbmQgaXQgdG8gaGF2 ZSBvdGhlcgppbmZvcm1hdGlvbiAobGlrZSBmdHJhY2UgZHVtcCkgbGF0ZXIuCgpJdCBzdXBwb3J0 cyBsZWdhY3kgUENJIGRldmljZSB1c2luZyBzaW5nbGUgb3JkZXItMiBwYWdlIGJ1ZmZlci4gIEl0 IHVzZXMKdHdvIHZpcnRxdWV1ZXMgLSBvbmUgZm9yIChzeW5jKSByZWFkIGFuZCBhbm90aGVyIGZv ciAoYXN5bmMpIHdyaXRlLgpTaW5jZSBpdCBjYW5ub3Qgd2FpdCBmb3Igd3JpdGUgZmluaXNoZWQs IGl0IHN1cHBvcnRzIHVwIHRvIDEyOApjb25jdXJyZW50IElPLiAgVGhlIGJ1ZmZlciBzaXplIGlz IGNvbmZpZ3VyYWJsZSBub3cuCgpDYzogUGFvbG8gQm9uemluaSA8cGJvbnppbmlAcmVkaGF0LmNv bT4KQ2M6IFJhZGltIEtyxI1tw6HFmSA8cmtyY21hckByZWRoYXQuY29tPgpDYzogIk1pY2hhZWwg Uy4gVHNpcmtpbiIgPG1zdEByZWRoYXQuY29tPgpDYzogQW50aG9ueSBMaWd1b3JpIDxhbGlndW9y aUBhbWF6b24uY29tPgpDYzogQW50b24gVm9yb250c292IDxhbnRvbkBlbm9tc2cub3JnPgpDYzog Q29saW4gQ3Jvc3MgPGNjcm9zc0BhbmRyb2lkLmNvbT4KQ2M6IEtlZXMgQ29vayA8a2Vlc2Nvb2tA Y2hyb21pdW0ub3JnPgpDYzogVG9ueSBMdWNrIDx0b255Lmx1Y2tAaW50ZWwuY29tPgpDYzogU3Rl dmVuIFJvc3RlZHQgPHJvc3RlZHRAZ29vZG1pcy5vcmc+CkNjOiBJbmdvIE1vbG5hciA8bWluZ29A a2VybmVsLm9yZz4KQ2M6IE1pbmNoYW4gS2ltIDxtaW5jaGFuQGtlcm5lbC5vcmc+CkNjOiBXaWxs IERlYWNvbiA8d2lsbC5kZWFjb25AYXJtLmNvbT4KQ2M6IGt2bUB2Z2VyLmtlcm5lbC5vcmcKQ2M6 IHFlbXUtZGV2ZWxAbm9uZ251Lm9yZwpDYzogdmlydHVhbGl6YXRpb25AbGlzdHMubGludXgtZm91 bmRhdGlvbi5vcmcKQ2M6IHZpcnRpby1kZXZAbGlzdHMub2FzaXMtb3Blbi5vcmcKU2lnbmVkLW9m Zi1ieTogTmFtaHl1bmcgS2ltIDxuYW1oeXVuZ0BrZXJuZWwub3JnPgotLS0KIGRyaXZlcnMvdmly dGlvL0tjb25maWcgICAgICAgICAgICAgfCAgMTAgKwogZHJpdmVycy92aXJ0aW8vTWFrZWZpbGUg ICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL3ZpcnRpby92aXJ0aW9fcHN0b3JlLmMgICAgIHwg NDE3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvdWFwaS9s aW51eC9LYnVpbGQgICAgICAgICAgfCAgIDEgKwogaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19p ZHMuaCAgICB8ICAgMSArCiBpbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX3BzdG9yZS5oIHwgIDc0 ICsrKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgNTA0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL3ZpcnRpby92aXJ0aW9fcHN0b3JlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBpbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX3BzdG9yZS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy92aXJ0aW8vS2NvbmZpZyBiL2RyaXZlcnMvdmlydGlvL0tjb25maWcKaW5kZXggNzc1OTAzMjBk NDRjLi44ZjBlNmM3OTZjMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL0tjb25maWcKKysr IGIvZHJpdmVycy92aXJ0aW8vS2NvbmZpZwpAQCAtNTgsNiArNTgsMTYgQEAgY29uZmlnIFZJUlRJ T19JTlBVVAogCiAJIElmIHVuc3VyZSwgc2F5IE0uCiAKK2NvbmZpZyBWSVJUSU9fUFNUT1JFCisJ dHJpc3RhdGUgIlZpcnRpbyBwc3RvcmUgZHJpdmVyIgorCWRlcGVuZHMgb24gVklSVElPCisJZGVw ZW5kcyBvbiBQU1RPUkUKKwktLS1oZWxwLS0tCisJIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHZpcnRp byBwc3RvcmUgZGV2aWNlcyB0byBzYXZlL3Jlc3RvcmUKKwkgcGFuaWMgYW5kIG9vcHMgbWVzc2Fn ZXMgb24gdGhlIGhvc3QuCisKKwkgSWYgdW5zdXJlLCBzYXkgTS4KKwogIGNvbmZpZyBWSVJUSU9f TU1JTwogCXRyaXN0YXRlICJQbGF0Zm9ybSBidXMgZHJpdmVyIGZvciBtZW1vcnkgbWFwcGVkIHZp cnRpbyBkZXZpY2VzIgogCWRlcGVuZHMgb24gSEFTX0lPTUVNICYmIEhBU19ETUEKZGlmZiAtLWdp dCBhL2RyaXZlcnMvdmlydGlvL01ha2VmaWxlIGIvZHJpdmVycy92aXJ0aW8vTWFrZWZpbGUKaW5k ZXggNDFlMzBlM2RjODQyLi5iZWU2OGNiMjZkNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlv L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdmlydGlvL01ha2VmaWxlCkBAIC01LDMgKzUsNCBAQCB2 aXJ0aW9fcGNpLXkgOj0gdmlydGlvX3BjaV9tb2Rlcm4ubyB2aXJ0aW9fcGNpX2NvbW1vbi5vCiB2 aXJ0aW9fcGNpLSQoQ09ORklHX1ZJUlRJT19QQ0lfTEVHQUNZKSArPSB2aXJ0aW9fcGNpX2xlZ2Fj eS5vCiBvYmotJChDT05GSUdfVklSVElPX0JBTExPT04pICs9IHZpcnRpb19iYWxsb29uLm8KIG9i ai0kKENPTkZJR19WSVJUSU9fSU5QVVQpICs9IHZpcnRpb19pbnB1dC5vCitvYmotJChDT05GSUdf VklSVElPX1BTVE9SRSkgKz0gdmlydGlvX3BzdG9yZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zp cnRpby92aXJ0aW9fcHN0b3JlLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcHN0b3JlLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lYzQxZjBkMmYwYjcKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcHN0b3JlLmMKQEAgLTAsMCArMSw0 MTcgQEAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKworI2lu Y2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1 ZGUgPGxpbnV4L3BzdG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgorI2luY2x1ZGUg PGxpbnV4L3ZpcnRpb19jb25maWcuaD4KKyNpbmNsdWRlIDx1YXBpL2xpbnV4L3ZpcnRpb19pZHMu aD4KKyNpbmNsdWRlIDx1YXBpL2xpbnV4L3ZpcnRpb19wc3RvcmUuaD4KKworI2RlZmluZSBWSVJU X1BTVE9SRV9PUkRFUiAgICAyCisjZGVmaW5lIFZJUlRfUFNUT1JFX0JVRlNJWkUgICg0MDk2IDw8 IFZJUlRfUFNUT1JFX09SREVSKQorI2RlZmluZSBWSVJUX1BTVE9SRV9OUl9SRVEgICAxMjgKKwor c3RydWN0IHZpcnRpb19wc3RvcmUgeworCXN0cnVjdCB2aXJ0aW9fZGV2aWNlCSp2ZGV2OworCXN0 cnVjdCB2aXJ0cXVldWUJKnZxWzJdOworCXN0cnVjdCBwc3RvcmVfaW5mbwkgcHN0b3JlOworCXN0 cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcSByZXFbVklSVF9QU1RPUkVfTlJfUkVRXTsKKwlzdHJ1Y3Qg dmlydGlvX3BzdG9yZV9yZXMgcmVzW1ZJUlRfUFNUT1JFX05SX1JFUV07CisJdW5zaWduZWQgaW50 CQkgcmVxX2lkOworCisJLyogV2FpdGluZyBmb3IgaG9zdCB0byBhY2sgKi8KKwl3YWl0X3F1ZXVl X2hlYWRfdAlhY2tlZDsKKwlpbnQJCQlmYWlsZWQ7Cit9OworCisjZGVmaW5lIFRZUEVfVEFCTEVf RU5UUlkoX2VudHJ5KQkJCQlcCisJeyBQU1RPUkVfVFlQRV8jI19lbnRyeSwgVklSVElPX1BTVE9S RV9UWVBFXyMjX2VudHJ5IH0KKworc3RydWN0IHR5cGVfdGFibGUgeworCWludCBwc3RvcmU7CisJ dTE2IHZpcnRpbzsKK30gdHlwZV90YWJsZVtdID0geworCVRZUEVfVEFCTEVfRU5UUlkoRE1FU0cp LAorfTsKKworI3VuZGVmIFRZUEVfVEFCTEVfRU5UUlkKKworCitzdGF0aWMgdTE2IHRvX3ZpcnRp b190eXBlKHN0cnVjdCB2aXJ0aW9fcHN0b3JlICp2cHMsIGVudW0gcHN0b3JlX3R5cGVfaWQgdHlw ZSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHR5 cGVfdGFibGUpOyBpKyspIHsKKwkJaWYgKHR5cGUgPT0gdHlwZV90YWJsZVtpXS5wc3RvcmUpCisJ CQlyZXR1cm4gY3B1X3RvX3ZpcnRpbzE2KHZwcy0+dmRldiwgdHlwZV90YWJsZVtpXS52aXJ0aW8p OworCX0KKworCXJldHVybiBjcHVfdG9fdmlydGlvMTYodnBzLT52ZGV2LCBWSVJUSU9fUFNUT1JF X1RZUEVfVU5LTk9XTik7Cit9CisKK3N0YXRpYyBlbnVtIHBzdG9yZV90eXBlX2lkIGZyb21fdmly dGlvX3R5cGUoc3RydWN0IHZpcnRpb19wc3RvcmUgKnZwcywgdTE2IHR5cGUpCit7CisJdW5zaWdu ZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0eXBlX3RhYmxlKTsgaSsr KSB7CisJCWlmICh2aXJ0aW8xNl90b19jcHUodnBzLT52ZGV2LCB0eXBlKSA9PSB0eXBlX3RhYmxl W2ldLnZpcnRpbykKKwkJCXJldHVybiB0eXBlX3RhYmxlW2ldLnBzdG9yZTsKKwl9CisKKwlyZXR1 cm4gUFNUT1JFX1RZUEVfVU5LTk9XTjsKK30KKworc3RhdGljIHZvaWQgdmlydHBzdG9yZV9hY2so c3RydWN0IHZpcnRxdWV1ZSAqdnEpCit7CisJc3RydWN0IHZpcnRpb19wc3RvcmUgKnZwcyA9IHZx LT52ZGV2LT5wcml2OworCisJd2FrZV91cCgmdnBzLT5hY2tlZCk7Cit9CisKK3N0YXRpYyB2b2lk IHZpcnRwc3RvcmVfY2hlY2soc3RydWN0IHZpcnRxdWV1ZSAqdnEpCit7CisJc3RydWN0IHZpcnRp b19wc3RvcmUgKnZwcyA9IHZxLT52ZGV2LT5wcml2OworCXN0cnVjdCB2aXJ0aW9fcHN0b3JlX3Jl cyAqcmVzOworCXVuc2lnbmVkIGludCBsZW47CisKKwlyZXMgPSB2aXJ0cXVldWVfZ2V0X2J1Zih2 cSwgJmxlbik7CisJaWYgKHJlcyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAodmlydGlvMzJf dG9fY3B1KHZxLT52ZGV2LCByZXMtPnJldCkgPCAwKQorCQl2cHMtPmZhaWxlZCA9IDE7Cit9CisK K3N0YXRpYyB2b2lkIHZpcnRfcHN0b3JlX2dldF9yZXFzKHN0cnVjdCB2aXJ0aW9fcHN0b3JlICp2 cHMsCisJCQkJIHN0cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcSAqKnByZXEsCisJCQkJIHN0cnVjdCB2 aXJ0aW9fcHN0b3JlX3JlcyAqKnByZXMpCit7CisJdW5zaWduZWQgaW50IGlkeCA9IHZwcy0+cmVx X2lkKysgJSBWSVJUX1BTVE9SRV9OUl9SRVE7CisKKwkqcHJlcSA9ICZ2cHMtPnJlcVtpZHhdOwor CSpwcmVzID0gJnZwcy0+cmVzW2lkeF07CisKKwltZW1zZXQoKnByZXEsIDAsIHNpemVvZigqKnBy ZXEpKTsKKwltZW1zZXQoKnByZXMsIDAsIHNpemVvZigqKnByZXMpKTsKK30KKworc3RhdGljIGlu dCB2aXJ0X3BzdG9yZV9vcGVuKHN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpKQoreworCXN0cnVjdCB2 aXJ0aW9fcHN0b3JlICp2cHMgPSBwc2ktPmRhdGE7CisJc3RydWN0IHZpcnRpb19wc3RvcmVfcmVx ICpyZXE7CisJc3RydWN0IHZpcnRpb19wc3RvcmVfcmVzICpyZXM7CisJc3RydWN0IHNjYXR0ZXJs aXN0IHNnb1sxXSwgc2dpWzFdOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dzWzJdID0geyBzZ28s IHNnaSB9OworCXVuc2lnbmVkIGludCBsZW47CisKKwl2aXJ0X3BzdG9yZV9nZXRfcmVxcyh2cHMs ICZyZXEsICZyZXMpOworCisJcmVxLT5jbWQgPSBjcHVfdG9fdmlydGlvMTYodnBzLT52ZGV2LCBW SVJUSU9fUFNUT1JFX0NNRF9PUEVOKTsKKworCXNnX2luaXRfb25lKHNnbywgcmVxLCBzaXplb2Yo KnJlcSkpOworCXNnX2luaXRfb25lKHNnaSwgcmVzLCBzaXplb2YoKnJlcykpOworCXZpcnRxdWV1 ZV9hZGRfc2dzKHZwcy0+dnFbMF0sIHNncywgMSwgMSwgdnBzLCBHRlBfS0VSTkVMKTsKKwl2aXJ0 cXVldWVfa2ljayh2cHMtPnZxWzBdKTsKKworCXdhaXRfZXZlbnQodnBzLT5hY2tlZCwgdmlydHF1 ZXVlX2dldF9idWYodnBzLT52cVswXSwgJmxlbikpOworCXJldHVybiB2aXJ0aW8zMl90b19jcHUo dnBzLT52ZGV2LCByZXMtPnJldCk7Cit9CisKK3N0YXRpYyBpbnQgdmlydF9wc3RvcmVfY2xvc2Uo c3RydWN0IHBzdG9yZV9pbmZvICpwc2kpCit7CisJc3RydWN0IHZpcnRpb19wc3RvcmUgKnZwcyA9 IHBzaS0+ZGF0YTsKKwlzdHJ1Y3QgdmlydGlvX3BzdG9yZV9yZXEgKnJlcSA9ICZ2cHMtPnJlcVt2 cHMtPnJlcV9pZF07CisJc3RydWN0IHZpcnRpb19wc3RvcmVfcmVzICpyZXMgPSAmdnBzLT5yZXNb dnBzLT5yZXFfaWRdOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ29bMV0sIHNnaVsxXTsKKwlzdHJ1 Y3Qgc2NhdHRlcmxpc3QgKnNnc1syXSA9IHsgc2dvLCBzZ2kgfTsKKwl1bnNpZ25lZCBpbnQgbGVu OworCisJdmlydF9wc3RvcmVfZ2V0X3JlcXModnBzLCAmcmVxLCAmcmVzKTsKKworCXJlcS0+Y21k ID0gY3B1X3RvX3ZpcnRpbzE2KHZwcy0+dmRldiwgVklSVElPX1BTVE9SRV9DTURfQ0xPU0UpOwor CisJc2dfaW5pdF9vbmUoc2dvLCByZXEsIHNpemVvZigqcmVxKSk7CisJc2dfaW5pdF9vbmUoc2dp LCByZXMsIHNpemVvZigqcmVzKSk7CisJdmlydHF1ZXVlX2FkZF9zZ3ModnBzLT52cVswXSwgc2dz LCAxLCAxLCB2cHMsIEdGUF9LRVJORUwpOworCXZpcnRxdWV1ZV9raWNrKHZwcy0+dnFbMF0pOwor CisJd2FpdF9ldmVudCh2cHMtPmFja2VkLCB2aXJ0cXVldWVfZ2V0X2J1Zih2cHMtPnZxWzBdLCAm bGVuKSk7CisJcmV0dXJuIHZpcnRpbzMyX3RvX2NwdSh2cHMtPnZkZXYsIHJlcy0+cmV0KTsKK30K Kworc3RhdGljIHNzaXplX3QgdmlydF9wc3RvcmVfcmVhZCh1NjQgKmlkLCBlbnVtIHBzdG9yZV90 eXBlX2lkICp0eXBlLAorCQkJCWludCAqY291bnQsIHN0cnVjdCB0aW1lc3BlYyAqdGltZSwKKwkJ CQljaGFyICoqYnVmLCBib29sICpjb21wcmVzc2VkLAorCQkJCXNzaXplX3QgKmVjY19ub3RpY2Vf c2l6ZSwKKwkJCQlzdHJ1Y3QgcHN0b3JlX2luZm8gKnBzaSkKK3sKKwlzdHJ1Y3QgdmlydGlvX3Bz dG9yZSAqdnBzID0gcHNpLT5kYXRhOworCXN0cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcSAqcmVxOwor CXN0cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcyAqcmVzOworCXN0cnVjdCB2aXJ0aW9fcHN0b3JlX2Zp bGVpbmZvIGluZm87CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnb1sxXSwgc2dpWzNdOworCXN0cnVj dCBzY2F0dGVybGlzdCAqc2dzWzJdID0geyBzZ28sIHNnaSB9OworCXVuc2lnbmVkIGludCBsZW47 CisJdW5zaWduZWQgaW50IGZsYWdzOworCWludCByZXQ7CisJdm9pZCAqYmY7CisKKwl2aXJ0X3Bz dG9yZV9nZXRfcmVxcyh2cHMsICZyZXEsICZyZXMpOworCisJcmVxLT5jbWQgPSBjcHVfdG9fdmly dGlvMTYodnBzLT52ZGV2LCBWSVJUSU9fUFNUT1JFX0NNRF9SRUFEKTsKKworCXNnX2luaXRfb25l KHNnbywgcmVxLCBzaXplb2YoKnJlcSkpOworCXNnX2luaXRfdGFibGUoc2dpLCAzKTsKKwlzZ19z ZXRfYnVmKCZzZ2lbMF0sIHJlcywgc2l6ZW9mKCpyZXMpKTsKKwlzZ19zZXRfYnVmKCZzZ2lbMV0s ICZpbmZvLCBzaXplb2YoaW5mbykpOworCXNnX3NldF9idWYoJnNnaVsyXSwgcHNpLT5idWYsIHBz aS0+YnVmc2l6ZSk7CisJdmlydHF1ZXVlX2FkZF9zZ3ModnBzLT52cVswXSwgc2dzLCAxLCAxLCB2 cHMsIEdGUF9LRVJORUwpOworCXZpcnRxdWV1ZV9raWNrKHZwcy0+dnFbMF0pOworCisJd2FpdF9l dmVudCh2cHMtPmFja2VkLCB2aXJ0cXVldWVfZ2V0X2J1Zih2cHMtPnZxWzBdLCAmbGVuKSk7CisJ aWYgKGxlbiA8IHNpemVvZigqcmVzKSArIHNpemVvZihpbmZvKSkKKwkJcmV0dXJuIC0xOworCisJ cmV0ID0gdmlydGlvMzJfdG9fY3B1KHZwcy0+dmRldiwgcmVzLT5yZXQpOworCWlmIChyZXQgPCAw KQorCQlyZXR1cm4gcmV0OworCisJbGVuID0gdmlydGlvMzJfdG9fY3B1KHZwcy0+dmRldiwgaW5m by5sZW4pOworCisJYmYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKGJmID09IE5V TEwpCisJCXJldHVybiAtRU5PTUVNOworCisJKmlkICAgID0gdmlydGlvNjRfdG9fY3B1KHZwcy0+ dmRldiwgaW5mby5pZCk7CisJKnR5cGUgID0gZnJvbV92aXJ0aW9fdHlwZSh2cHMsIGluZm8udHlw ZSk7CisJKmNvdW50ID0gdmlydGlvMzJfdG9fY3B1KHZwcy0+dmRldiwgaW5mby5jb3VudCk7CisK KwlmbGFncyA9IHZpcnRpbzMyX3RvX2NwdSh2cHMtPnZkZXYsIGluZm8uZmxhZ3MpOworCSpjb21w cmVzc2VkID0gZmxhZ3MgJiBWSVJUSU9fUFNUT1JFX0ZMX0NPTVBSRVNTRUQ7CisKKwl0aW1lLT50 dl9zZWMgID0gdmlydGlvNjRfdG9fY3B1KHZwcy0+dmRldiwgaW5mby50aW1lX3NlYyk7CisJdGlt ZS0+dHZfbnNlYyA9IHZpcnRpbzMyX3RvX2NwdSh2cHMtPnZkZXYsIGluZm8udGltZV9uc2VjKTsK KworCW1lbWNweShiZiwgcHNpLT5idWYsIGxlbik7CisJKmJ1ZiA9IGJmOworCisJcmV0dXJuIGxl bjsKK30KKworc3RhdGljIGludCBub3RyYWNlIHZpcnRfcHN0b3JlX3dyaXRlKGVudW0gcHN0b3Jl X3R5cGVfaWQgdHlwZSwKKwkJCQkgICAgIGVudW0ga21zZ19kdW1wX3JlYXNvbiByZWFzb24sCisJ CQkJICAgICB1NjQgKmlkLCB1bnNpZ25lZCBpbnQgcGFydCwgaW50IGNvdW50LAorCQkJCSAgICAg Ym9vbCBjb21wcmVzc2VkLCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgIHN0cnVjdCBwc3RvcmVfaW5m byAqcHNpKQoreworCXN0cnVjdCB2aXJ0aW9fcHN0b3JlICp2cHMgPSBwc2ktPmRhdGE7CisJc3Ry dWN0IHZpcnRpb19wc3RvcmVfcmVxICpyZXE7CisJc3RydWN0IHZpcnRpb19wc3RvcmVfcmVzICpy ZXM7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnb1syXSwgc2dpWzFdOworCXN0cnVjdCBzY2F0dGVy bGlzdCAqc2dzWzJdID0geyBzZ28sIHNnaSB9OworCXVuc2lnbmVkIGludCBmbGFncyA9IGNvbXBy ZXNzZWQgPyBWSVJUSU9fUFNUT1JFX0ZMX0NPTVBSRVNTRUQgOiAwOworCisJaWYgKHZwcy0+ZmFp bGVkKQorCQlyZXR1cm4gLTE7CisKKwkqaWQgPSB2cHMtPnJlcV9pZDsKKwl2aXJ0X3BzdG9yZV9n ZXRfcmVxcyh2cHMsICZyZXEsICZyZXMpOworCisJcmVxLT5jbWQgICA9IGNwdV90b192aXJ0aW8x Nih2cHMtPnZkZXYsIFZJUlRJT19QU1RPUkVfQ01EX1dSSVRFKTsKKwlyZXEtPnR5cGUgID0gdG9f dmlydGlvX3R5cGUodnBzLCB0eXBlKTsKKwlyZXEtPmZsYWdzID0gY3B1X3RvX3ZpcnRpbzMyKHZw cy0+dmRldiwgZmxhZ3MpOworCisJc2dfaW5pdF90YWJsZShzZ28sIDIpOworCXNnX3NldF9idWYo JnNnb1swXSwgcmVxLCBzaXplb2YoKnJlcSkpOworCXNnX3NldF9idWYoJnNnb1sxXSwgcHNpLT5i dWYsIHNpemUpOworCXNnX2luaXRfb25lKHNnaSwgcmVzLCBzaXplb2YoKnJlcykpOworCXZpcnRx dWV1ZV9hZGRfc2dzKHZwcy0+dnFbMV0sIHNncywgMSwgMSwgdnBzLCBHRlBfQVRPTUlDKTsKKwl2 aXJ0cXVldWVfa2ljayh2cHMtPnZxWzFdKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IHZpcnRfcHN0b3JlX2VyYXNlKGVudW0gcHN0b3JlX3R5cGVfaWQgdHlwZSwgdTY0IGlkLCBpbnQg Y291bnQsCisJCQkgICAgIHN0cnVjdCB0aW1lc3BlYyB0aW1lLCBzdHJ1Y3QgcHN0b3JlX2luZm8g KnBzaSkKK3sKKwlzdHJ1Y3QgdmlydGlvX3BzdG9yZSAqdnBzID0gcHNpLT5kYXRhOworCXN0cnVj dCB2aXJ0aW9fcHN0b3JlX3JlcSAqcmVxOworCXN0cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcyAqcmVz OworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ29bMV0sIHNnaVsxXTsKKwlzdHJ1Y3Qgc2NhdHRlcmxp c3QgKnNnc1syXSA9IHsgc2dvLCBzZ2kgfTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJdmlydF9w c3RvcmVfZ2V0X3JlcXModnBzLCAmcmVxLCAmcmVzKTsKKworCXJlcS0+Y21kICAgPSBjcHVfdG9f dmlydGlvMTYodnBzLT52ZGV2LCBWSVJUSU9fUFNUT1JFX0NNRF9FUkFTRSk7CisJcmVxLT50eXBl ICA9IHRvX3ZpcnRpb190eXBlKHZwcywgdHlwZSk7CisJcmVxLT5pZAkgICA9IGNwdV90b192aXJ0 aW82NCh2cHMtPnZkZXYsIGlkKTsKKwlyZXEtPmNvdW50ID0gY3B1X3RvX3ZpcnRpbzMyKHZwcy0+ dmRldiwgY291bnQpOworCisJc2dfaW5pdF9vbmUoc2dvLCByZXEsIHNpemVvZigqcmVxKSk7CisJ c2dfaW5pdF9vbmUoc2dpLCByZXMsIHNpemVvZigqcmVzKSk7CisJdmlydHF1ZXVlX2FkZF9zZ3Mo dnBzLT52cVswXSwgc2dzLCAxLCAxLCB2cHMsIEdGUF9LRVJORUwpOworCXZpcnRxdWV1ZV9raWNr KHZwcy0+dnFbMF0pOworCisJd2FpdF9ldmVudCh2cHMtPmFja2VkLCB2aXJ0cXVldWVfZ2V0X2J1 Zih2cHMtPnZxWzBdLCAmbGVuKSk7CisJcmV0dXJuIHZpcnRpbzMyX3RvX2NwdSh2cHMtPnZkZXYs IHJlcy0+cmV0KTsKK30KKworc3RhdGljIGludCB2aXJ0X3BzdG9yZV9pbml0KHN0cnVjdCB2aXJ0 aW9fcHN0b3JlICp2cHMpCit7CisJc3RydWN0IHBzdG9yZV9pbmZvICpwc2luZm8gPSAmdnBzLT5w c3RvcmU7CisJaW50IGVycjsKKworCWlmICghcHNpbmZvLT5idWZzaXplKQorCQlwc2luZm8tPmJ1 ZnNpemUgPSBWSVJUX1BTVE9SRV9CVUZTSVpFOworCisJcHNpbmZvLT5idWYgPSBhbGxvY19wYWdl c19leGFjdChwc2luZm8tPmJ1ZnNpemUsIEdGUF9LRVJORUwpOworCWlmICghcHNpbmZvLT5idWYp IHsKKwkJcHJfZXJyKCJjYW5ub3QgYWxsb2NhdGUgcHN0b3JlIGJ1ZmZlclxuIik7CisJCXJldHVy biAtRU5PTUVNOworCX0KKworCXBzaW5mby0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlwc2luZm8t Pm5hbWUgID0gInZpcnRpbyI7CisJcHNpbmZvLT5vcGVuICA9IHZpcnRfcHN0b3JlX29wZW47CisJ cHNpbmZvLT5jbG9zZSA9IHZpcnRfcHN0b3JlX2Nsb3NlOworCXBzaW5mby0+cmVhZCAgPSB2aXJ0 X3BzdG9yZV9yZWFkOworCXBzaW5mby0+ZXJhc2UgPSB2aXJ0X3BzdG9yZV9lcmFzZTsKKwlwc2lu Zm8tPndyaXRlID0gdmlydF9wc3RvcmVfd3JpdGU7CisJcHNpbmZvLT5mbGFncyA9IFBTVE9SRV9G TEFHU19GUkFHSUxFOworCisJcHNpbmZvLT5kYXRhICA9IHZwczsKKwlzcGluX2xvY2tfaW5pdCgm cHNpbmZvLT5idWZfbG9jayk7CisKKwllcnIgPSBwc3RvcmVfcmVnaXN0ZXIocHNpbmZvKTsKKwlp ZiAoZXJyKQorCQlrZnJlZShwc2luZm8tPmJ1Zik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0 aWMgaW50IHZpcnRfcHN0b3JlX2V4aXQoc3RydWN0IHZpcnRpb19wc3RvcmUgKnZwcykKK3sKKwlz dHJ1Y3QgcHN0b3JlX2luZm8gKnBzaW5mbyA9ICZ2cHMtPnBzdG9yZTsKKworCXBzdG9yZV91bnJl Z2lzdGVyKHBzaW5mbyk7CisKKwlmcmVlX3BhZ2VzX2V4YWN0KHBzaW5mby0+YnVmLCBwc2luZm8t PmJ1ZnNpemUpOworCXBzaW5mby0+YnVmID0gTlVMTDsKKwlwc2luZm8tPmJ1ZnNpemUgPSAwOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlydHBzdG9yZV9pbml0X3ZxcyhzdHJ1Y3Qg dmlydGlvX3BzdG9yZSAqdnBzKQoreworCXZxX2NhbGxiYWNrX3QgKmNhbGxiYWNrc1tdID0geyB2 aXJ0cHN0b3JlX2FjaywgdmlydHBzdG9yZV9jaGVjayB9OworCWNvbnN0IGNoYXIgKm5hbWVzW10g PSB7ICJwc3RvcmVfcmVhZCIsICJwc3RvcmVfd3JpdGUiIH07CisKKwlyZXR1cm4gdnBzLT52ZGV2 LT5jb25maWctPmZpbmRfdnFzKHZwcy0+dmRldiwgMiwgdnBzLT52cSwKKwkJCQkJICAgY2FsbGJh Y2tzLCBuYW1lcyk7Cit9CisKK3N0YXRpYyB2b2lkIHZpcnRwc3RvcmVfaW5pdF9jb25maWcoc3Ry dWN0IHZpcnRpb19wc3RvcmUgKnZwcykKK3sKKwl1MzIgYnVmc2l6ZTsKKworCXZpcnRpb19jcmVh ZCh2cHMtPnZkZXYsIHN0cnVjdCB2aXJ0aW9fcHN0b3JlX2NvbmZpZywgYnVmc2l6ZSwgJmJ1ZnNp emUpOworCisJdnBzLT5wc3RvcmUuYnVmc2l6ZSA9IFBBR0VfQUxJR04oYnVmc2l6ZSk7Cit9CisK K3N0YXRpYyB2b2lkIHZpcnRwc3RvcmVfY29uZmlybV9jb25maWcoc3RydWN0IHZpcnRpb19wc3Rv cmUgKnZwcykKK3sKKwl1MzIgYnVmc2l6ZSA9IHZwcy0+cHN0b3JlLmJ1ZnNpemU7CisKKwl2aXJ0 aW9fY3dyaXRlKHZwcy0+dmRldiwgc3RydWN0IHZpcnRpb19wc3RvcmVfY29uZmlnLCBidWZzaXpl LAorCQkgICAgICZidWZzaXplKTsKK30KKworc3RhdGljIGludCB2aXJ0cHN0b3JlX3Byb2JlKHN0 cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQoreworCXN0cnVjdCB2aXJ0aW9fcHN0b3JlICp2cHM7 CisJaW50IGVycjsKKworCWlmICghdmRldi0+Y29uZmlnLT5nZXQpIHsKKwkJZGV2X2VycigmdmRl di0+ZGV2LCAiZHJpdmVyIGluaXQ6IGNvbmZpZyBhY2Nlc3MgZGlzYWJsZWRcbiIpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwl2ZGV2LT5wcml2ID0gdnBzID0ga3phbGxvYyhzaXplb2YoKnZw cyksIEdGUF9LRVJORUwpOworCWlmICghdnBzKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8g b3V0OworCX0KKwl2cHMtPnZkZXYgPSB2ZGV2OworCisJZXJyID0gdmlydHBzdG9yZV9pbml0X3Zx cyh2cHMpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dF9mcmVlOworCisJdmlydHBzdG9yZV9p bml0X2NvbmZpZyh2cHMpOworCisJZXJyID0gdmlydF9wc3RvcmVfaW5pdCh2cHMpOworCWlmIChl cnIpCisJCWdvdG8gb3V0X2RlbF92cTsKKworCXZpcnRwc3RvcmVfY29uZmlybV9jb25maWcodnBz KTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnZwcy0+YWNrZWQpOworCisJdmlydGlvX2Rldmlj ZV9yZWFkeSh2ZGV2KTsKKworCWRldl9pbmZvKCZ2ZGV2LT5kZXYsICJkcml2ZXIgaW5pdDogb2sg KGJ1ZnNpemUgPSAlbHVLLCBmbGFncyA9ICV4KVxuIiwKKwkJIHZwcy0+cHN0b3JlLmJ1ZnNpemUg Pj4gMTAsIHZwcy0+cHN0b3JlLmZsYWdzKTsKKworCXJldHVybiAwOworCitvdXRfZGVsX3ZxOgor CXZkZXYtPmNvbmZpZy0+ZGVsX3Zxcyh2ZGV2KTsKK291dF9mcmVlOgorCWtmcmVlKHZwcyk7Citv dXQ6CisJZGV2X2VycigmdmRldi0+ZGV2LCAiZHJpdmVyIGluaXQ6IGZhaWxlZCB3aXRoICVkXG4i LCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHZpcnRwc3RvcmVfcmVtb3Zl KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQoreworCXN0cnVjdCB2aXJ0aW9fcHN0b3JlICp2 cHMgPSB2ZGV2LT5wcml2OworCisJdmlydF9wc3RvcmVfZXhpdCh2cHMpOworCisJLyogTm93IHdl IHJlc2V0IHRoZSBkZXZpY2Ugc28gd2UgY2FuIGNsZWFuIHVwIHRoZSBxdWV1ZXMuICovCisJdmRl di0+Y29uZmlnLT5yZXNldCh2ZGV2KTsKKworCXZkZXYtPmNvbmZpZy0+ZGVsX3Zxcyh2ZGV2KTsK KworCWtmcmVlKHZwcyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmVhdHVyZXNbXSA9IHsK K307CisKK3N0YXRpYyBzdHJ1Y3QgdmlydGlvX2RldmljZV9pZCBpZF90YWJsZVtdID0geworCXsg VklSVElPX0lEX1BTVE9SRSwgVklSVElPX0RFVl9BTllfSUQgfSwKKwl7IDAgfSwKK307CisKK3N0 YXRpYyBzdHJ1Y3QgdmlydGlvX2RyaXZlciB2aXJ0aW9fcHN0b3JlX2RyaXZlciA9IHsKKwkuZHJp dmVyLm5hbWUgICAgICAgICA9IEtCVUlMRF9NT0ROQU1FLAorCS5kcml2ZXIub3duZXIgICAgICAg ID0gVEhJU19NT0RVTEUsCisJLmZlYXR1cmVfdGFibGUgICAgICAgPSBmZWF0dXJlcywKKwkuZmVh dHVyZV90YWJsZV9zaXplICA9IEFSUkFZX1NJWkUoZmVhdHVyZXMpLAorCS5pZF90YWJsZSAgICAg ICAgICAgID0gaWRfdGFibGUsCisJLnByb2JlICAgICAgICAgICAgICAgPSB2aXJ0cHN0b3JlX3By b2JlLAorCS5yZW1vdmUgICAgICAgICAgICAgID0gdmlydHBzdG9yZV9yZW1vdmUsCit9OworCitt b2R1bGVfdmlydGlvX2RyaXZlcih2aXJ0aW9fcHN0b3JlX2RyaXZlcik7CitNT0RVTEVfREVWSUNF X1RBQkxFKHZpcnRpbywgaWRfdGFibGUpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RV TEVfQVVUSE9SKCJOYW1oeXVuZyBLaW0gPG5hbWh5dW5nQGtlcm5lbC5vcmc+Iik7CitNT0RVTEVf REVTQ1JJUFRJT04oIlZpcnRpbyBwc3RvcmUgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9pbmNsdWRl L3VhcGkvbGludXgvS2J1aWxkIGIvaW5jbHVkZS91YXBpL2xpbnV4L0tidWlsZAppbmRleCA2ZDRl OTJjY2RjOTEuLjliYmIxNTU0ZDhiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L0ti dWlsZAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvS2J1aWxkCkBAIC00NDksNiArNDQ5LDcgQEAg aGVhZGVyLXkgKz0gdmlydGlvX2lkcy5oCiBoZWFkZXIteSArPSB2aXJ0aW9faW5wdXQuaAogaGVh ZGVyLXkgKz0gdmlydGlvX25ldC5oCiBoZWFkZXIteSArPSB2aXJ0aW9fcGNpLmgKK2hlYWRlci15 ICs9IHZpcnRpb19wc3RvcmUuaAogaGVhZGVyLXkgKz0gdmlydGlvX3JpbmcuaAogaGVhZGVyLXkg Kz0gdmlydGlvX3JuZy5oCiBoZWFkZXIteSArPSB2aXJ0aW9fc2NzaS5oCmRpZmYgLS1naXQgYS9p bmNsdWRlL3VhcGkvbGludXgvdmlydGlvX2lkcy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRp b19pZHMuaAppbmRleCA3NzkyNWY1ODdiMTUuLmM3MmE5YWI1ODhjMCAxMDA2NDQKLS0tIGEvaW5j bHVkZS91YXBpL2xpbnV4L3ZpcnRpb19pZHMuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmly dGlvX2lkcy5oCkBAIC00MSw1ICs0MSw2IEBACiAjZGVmaW5lIFZJUlRJT19JRF9DQUlGCSAgICAg ICAxMiAvKiBWaXJ0aW8gY2FpZiAqLwogI2RlZmluZSBWSVJUSU9fSURfR1BVICAgICAgICAgIDE2 IC8qIHZpcnRpbyBHUFUgKi8KICNkZWZpbmUgVklSVElPX0lEX0lOUFVUICAgICAgICAxOCAvKiB2 aXJ0aW8gaW5wdXQgKi8KKyNkZWZpbmUgVklSVElPX0lEX1BTVE9SRSAgICAgICAyMiAvKiB2aXJ0 aW8gcHN0b3JlICovCiAKICNlbmRpZiAvKiBfTElOVVhfVklSVElPX0lEU19IICovCmRpZmYgLS1n aXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX3BzdG9yZS5oIGIvaW5jbHVkZS91YXBpL2xp bnV4L3ZpcnRpb19wc3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLmY0YjBkMjA0ZDhhZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC92 aXJ0aW9fcHN0b3JlLmgKQEAgLTAsMCArMSw3NCBAQAorI2lmbmRlZiBfTElOVVhfVklSVElPX1BT VE9SRV9ICisjZGVmaW5lIF9MSU5VWF9WSVJUSU9fUFNUT1JFX0gKKy8qIFRoaXMgaGVhZGVyIGlz IEJTRCBsaWNlbnNlZCBzbyBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVt ZW50CisgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRo ZXIgdGhlIG5hbWUgb2YgSUJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICog ICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI T0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBJQk0gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAq IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisg KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg QVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4gKi8K KyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb190eXBlcy5o PgorCisjZGVmaW5lIFZJUlRJT19QU1RPUkVfQ01EX05VTEwgICAwCisjZGVmaW5lIFZJUlRJT19Q U1RPUkVfQ01EX09QRU4gICAxCisjZGVmaW5lIFZJUlRJT19QU1RPUkVfQ01EX1JFQUQgICAyCisj ZGVmaW5lIFZJUlRJT19QU1RPUkVfQ01EX1dSSVRFICAzCisjZGVmaW5lIFZJUlRJT19QU1RPUkVf Q01EX0VSQVNFICA0CisjZGVmaW5lIFZJUlRJT19QU1RPUkVfQ01EX0NMT1NFICA1CisKKyNkZWZp bmUgVklSVElPX1BTVE9SRV9UWVBFX1VOS05PV04gIDAKKyNkZWZpbmUgVklSVElPX1BTVE9SRV9U WVBFX0RNRVNHICAgIDEKKworI2RlZmluZSBWSVJUSU9fUFNUT1JFX0ZMX0NPTVBSRVNTRUQgIDEK Kworc3RydWN0IHZpcnRpb19wc3RvcmVfcmVxIHsKKwlfX3ZpcnRpbzE2CQljbWQ7CisJX192aXJ0 aW8xNgkJdHlwZTsKKwlfX3ZpcnRpbzMyCQlmbGFnczsKKwlfX3ZpcnRpbzY0CQlpZDsKKwlfX3Zp cnRpbzMyCQljb3VudDsKKwlfX3ZpcnRpbzMyCQlyZXNlcnZlZDsKK307CisKK3N0cnVjdCB2aXJ0 aW9fcHN0b3JlX3JlcyB7CisJX192aXJ0aW8xNgkJY21kOworCV9fdmlydGlvMTYJCXR5cGU7CisJ X192aXJ0aW8zMgkJcmV0OworfTsKKworc3RydWN0IHZpcnRpb19wc3RvcmVfZmlsZWluZm8gewor CV9fdmlydGlvNjQJCWlkOworCV9fdmlydGlvMzIJCWNvdW50OworCV9fdmlydGlvMTYJCXR5cGU7 CisJX192aXJ0aW8xNgkJdW51c2VkOworCV9fdmlydGlvMzIJCWZsYWdzOworCV9fdmlydGlvMzIJ CWxlbjsKKwlfX3ZpcnRpbzY0CQl0aW1lX3NlYzsKKwlfX3ZpcnRpbzMyCQl0aW1lX25zZWM7CisJ X192aXJ0aW8zMgkJcmVzZXJ2ZWQ7Cit9OworCitzdHJ1Y3QgdmlydGlvX3BzdG9yZV9jb25maWcg eworCV9fdmlydGlvMzIJCWJ1ZnNpemU7Cit9OworCisjZW5kaWYgLyogX0xJTlVYX1ZJUlRJT19Q U1RPUkVfSCAqLwotLSAKMi45LjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlvbkBs aXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5v cmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==