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: Sat, 20 Aug 2016 17:07:42 +0900 Message-ID: <20160820080744.10344-2-namhyung@kernel.org> References: <20160820080744.10344-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 , LKML , Steven Rostedt , Minchan Kim , Anthony Liguori , Colin Cross , Paolo Bonzini , Ingo Molnar To: virtio-dev@lists.oasis-open.org, kvm@vger.kernel.org, qemu-devel@nongnu.org, virtualization@lists.linux-foundation.org Return-path: In-Reply-To: <20160820080744.10344-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+CkNjOiBrdm1A dmdlci5rZXJuZWwub3JnCkNjOiBxZW11LWRldmVsQG5vbmdudS5vcmcKQ2M6IHZpcnR1YWxpemF0 aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnClNpZ25lZC1vZmYtYnk6IE5hbWh5dW5nIEtp bSA8bmFtaHl1bmdAa2VybmVsLm9yZz4KLS0tCiBkcml2ZXJzL3ZpcnRpby9LY29uZmlnICAgICAg ICAgICAgIHwgIDEwICsKIGRyaXZlcnMvdmlydGlvL01ha2VmaWxlICAgICAgICAgICAgfCAgIDEg KwogZHJpdmVycy92aXJ0aW8vdmlydGlvX3BzdG9yZS5jICAgICB8IDQxNyArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiBpbmNsdWRlL3VhcGkvbGludXgvS2J1aWxkICAgICAg ICAgIHwgICAxICsKIGluY2x1ZGUvdWFwaS9saW51eC92aXJ0aW9faWRzLmggICAgfCAgIDEgKwog aW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19wc3RvcmUuaCB8ICA3NCArKysrKysrCiA2IGZpbGVz IGNoYW5nZWQsIDUwNCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy92 aXJ0aW8vdmlydGlvX3BzdG9yZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91YXBpL2xp bnV4L3ZpcnRpb19wc3RvcmUuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL0tjb25maWcg Yi9kcml2ZXJzL3ZpcnRpby9LY29uZmlnCmluZGV4IDc3NTkwMzIwZDQ0Yy4uOGYwZTZjNzk2YzEy IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlydGlv L0tjb25maWcKQEAgLTU4LDYgKzU4LDE2IEBAIGNvbmZpZyBWSVJUSU9fSU5QVVQKIAogCSBJZiB1 bnN1cmUsIHNheSBNLgogCitjb25maWcgVklSVElPX1BTVE9SRQorCXRyaXN0YXRlICJWaXJ0aW8g cHN0b3JlIGRyaXZlciIKKwlkZXBlbmRzIG9uIFZJUlRJTworCWRlcGVuZHMgb24gUFNUT1JFCisJ LS0taGVscC0tLQorCSBUaGlzIGRyaXZlciBzdXBwb3J0cyB2aXJ0aW8gcHN0b3JlIGRldmljZXMg dG8gc2F2ZS9yZXN0b3JlCisJIHBhbmljIGFuZCBvb3BzIG1lc3NhZ2VzIG9uIHRoZSBob3N0Lgor CisJIElmIHVuc3VyZSwgc2F5IE0uCisKICBjb25maWcgVklSVElPX01NSU8KIAl0cmlzdGF0ZSAi UGxhdGZvcm0gYnVzIGRyaXZlciBmb3IgbWVtb3J5IG1hcHBlZCB2aXJ0aW8gZGV2aWNlcyIKIAlk ZXBlbmRzIG9uIEhBU19JT01FTSAmJiBIQVNfRE1BCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRp by9NYWtlZmlsZSBiL2RyaXZlcnMvdmlydGlvL01ha2VmaWxlCmluZGV4IDQxZTMwZTNkYzg0Mi4u YmVlNjhjYjI2ZDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZQorKysgYi9k cml2ZXJzL3ZpcnRpby9NYWtlZmlsZQpAQCAtNSwzICs1LDQgQEAgdmlydGlvX3BjaS15IDo9IHZp cnRpb19wY2lfbW9kZXJuLm8gdmlydGlvX3BjaV9jb21tb24ubwogdmlydGlvX3BjaS0kKENPTkZJ R19WSVJUSU9fUENJX0xFR0FDWSkgKz0gdmlydGlvX3BjaV9sZWdhY3kubwogb2JqLSQoQ09ORklH X1ZJUlRJT19CQUxMT09OKSArPSB2aXJ0aW9fYmFsbG9vbi5vCiBvYmotJChDT05GSUdfVklSVElP X0lOUFVUKSArPSB2aXJ0aW9faW5wdXQubworb2JqLSQoQ09ORklHX1ZJUlRJT19QU1RPUkUpICs9 IHZpcnRpb19wc3RvcmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BzdG9y ZS5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BzdG9yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uMGE2M2M3ZGI0Mjc4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy92aXJ0aW8vdmlydGlvX3BzdG9yZS5jCkBAIC0wLDAgKzEsNDE3IEBACisjZGVmaW5lIHBy X2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9rZXJu ZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wc3RvcmUu aD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29u ZmlnLmg+CisjaW5jbHVkZSA8dWFwaS9saW51eC92aXJ0aW9faWRzLmg+CisjaW5jbHVkZSA8dWFw aS9saW51eC92aXJ0aW9fcHN0b3JlLmg+CisKKyNkZWZpbmUgVklSVF9QU1RPUkVfT1JERVIgICAg MgorI2RlZmluZSBWSVJUX1BTVE9SRV9CVUZTSVpFICAoNDA5NiA8PCBWSVJUX1BTVE9SRV9PUkRF UikKKyNkZWZpbmUgVklSVF9QU1RPUkVfTlJfUkVRICAgMTI4CisKK3N0cnVjdCB2aXJ0aW9fcHN0 b3JlIHsKKwlzdHJ1Y3QgdmlydGlvX2RldmljZQkqdmRldjsKKwlzdHJ1Y3QgdmlydHF1ZXVlCSp2 cVsyXTsKKwlzdHJ1Y3QgcHN0b3JlX2luZm8JIHBzdG9yZTsKKwlzdHJ1Y3QgdmlydGlvX3BzdG9y ZV9yZXEgcmVxW1ZJUlRfUFNUT1JFX05SX1JFUV07CisJc3RydWN0IHZpcnRpb19wc3RvcmVfcmVz IHJlc1tWSVJUX1BTVE9SRV9OUl9SRVFdOworCXVuc2lnbmVkIGludAkJIHJlcV9pZDsKKworCS8q IFdhaXRpbmcgZm9yIGhvc3QgdG8gYWNrICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJYWNrZWQ7CisJ aW50CQkJZmFpbGVkOworfTsKKworI2RlZmluZSBUWVBFX1RBQkxFX0VOVFJZKF9lbnRyeSkJCQkJ XAorCXsgUFNUT1JFX1RZUEVfIyNfZW50cnksIFZJUlRJT19QU1RPUkVfVFlQRV8jI19lbnRyeSB9 CisKK3N0cnVjdCB0eXBlX3RhYmxlIHsKKwlpbnQgcHN0b3JlOworCXUxNiB2aXJ0aW87Cit9IHR5 cGVfdGFibGVbXSA9IHsKKwlUWVBFX1RBQkxFX0VOVFJZKERNRVNHKSwKK307CisKKyN1bmRlZiBU WVBFX1RBQkxFX0VOVFJZCisKKworc3RhdGljIHUxNiB0b192aXJ0aW9fdHlwZShzdHJ1Y3Qgdmly dGlvX3BzdG9yZSAqdnBzLCBlbnVtIHBzdG9yZV90eXBlX2lkIHR5cGUpCit7CisJdW5zaWduZWQg aW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0eXBlX3RhYmxlKTsgaSsrKSB7 CisJCWlmICh0eXBlID09IHR5cGVfdGFibGVbaV0ucHN0b3JlKQorCQkJcmV0dXJuIGNwdV90b192 aXJ0aW8xNih2cHMtPnZkZXYsIHR5cGVfdGFibGVbaV0udmlydGlvKTsKKwl9CisKKwlyZXR1cm4g Y3B1X3RvX3ZpcnRpbzE2KHZwcy0+dmRldiwgVklSVElPX1BTVE9SRV9UWVBFX1VOS05PV04pOwor fQorCitzdGF0aWMgZW51bSBwc3RvcmVfdHlwZV9pZCBmcm9tX3ZpcnRpb190eXBlKHN0cnVjdCB2 aXJ0aW9fcHN0b3JlICp2cHMsIHUxNiB0eXBlKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHlwZV90YWJsZSk7IGkrKykgeworCQlpZiAodmlydGlv MTZfdG9fY3B1KHZwcy0+dmRldiwgdHlwZSkgPT0gdHlwZV90YWJsZVtpXS52aXJ0aW8pCisJCQly ZXR1cm4gdHlwZV90YWJsZVtpXS5wc3RvcmU7CisJfQorCisJcmV0dXJuIFBTVE9SRV9UWVBFX1VO S05PV047Cit9CisKK3N0YXRpYyB2b2lkIHZpcnRwc3RvcmVfYWNrKHN0cnVjdCB2aXJ0cXVldWUg KnZxKQoreworCXN0cnVjdCB2aXJ0aW9fcHN0b3JlICp2cHMgPSB2cS0+dmRldi0+cHJpdjsKKwor CXdha2VfdXAoJnZwcy0+YWNrZWQpOworfQorCitzdGF0aWMgdm9pZCB2aXJ0cHN0b3JlX2NoZWNr KHN0cnVjdCB2aXJ0cXVldWUgKnZxKQoreworCXN0cnVjdCB2aXJ0aW9fcHN0b3JlICp2cHMgPSB2 cS0+dmRldi0+cHJpdjsKKwlzdHJ1Y3QgdmlydGlvX3BzdG9yZV9yZXMgKnJlczsKKwl1bnNpZ25l ZCBpbnQgbGVuOworCisJcmVzID0gdmlydHF1ZXVlX2dldF9idWYodnEsICZsZW4pOworCWlmIChy ZXMgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKHZpcnRpbzMyX3RvX2NwdSh2cS0+dmRldiwg cmVzLT5yZXQpIDwgMCkKKwkJdnBzLT5mYWlsZWQgPSAxOworfQorCitzdGF0aWMgdm9pZCB2aXJ0 X3BzdG9yZV9nZXRfcmVxcyhzdHJ1Y3QgdmlydGlvX3BzdG9yZSAqdnBzLAorCQkJCSBzdHJ1Y3Qg dmlydGlvX3BzdG9yZV9yZXEgKipwcmVxLAorCQkJCSBzdHJ1Y3QgdmlydGlvX3BzdG9yZV9yZXMg KipwcmVzKQoreworCXVuc2lnbmVkIGludCBpZHggPSB2cHMtPnJlcV9pZCsrICUgVklSVF9QU1RP UkVfTlJfUkVROworCisJKnByZXEgPSAmdnBzLT5yZXFbaWR4XTsKKwkqcHJlcyA9ICZ2cHMtPnJl c1tpZHhdOworCisJbWVtc2V0KCpwcmVxLCAwLCBzaXplb2YoKipwcmVxKSk7CisJbWVtc2V0KCpw cmVzLCAwLCBzaXplb2YoKipwcmVzKSk7Cit9CisKK3N0YXRpYyBpbnQgdmlydF9wc3RvcmVfb3Bl bihzdHJ1Y3QgcHN0b3JlX2luZm8gKnBzaSkKK3sKKwlzdHJ1Y3QgdmlydGlvX3BzdG9yZSAqdnBz ID0gcHNpLT5kYXRhOworCXN0cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcSAqcmVxOworCXN0cnVjdCB2 aXJ0aW9fcHN0b3JlX3JlcyAqcmVzOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ29bMV0sIHNnaVsx XTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnc1syXSA9IHsgc2dvLCBzZ2kgfTsKKwl1bnNpZ25l ZCBpbnQgbGVuOworCisJdmlydF9wc3RvcmVfZ2V0X3JlcXModnBzLCAmcmVxLCAmcmVzKTsKKwor CXJlcS0+Y21kID0gY3B1X3RvX3ZpcnRpbzE2KHZwcy0+dmRldiwgVklSVElPX1BTVE9SRV9DTURf T1BFTik7CisKKwlzZ19pbml0X29uZShzZ28sIHJlcSwgc2l6ZW9mKCpyZXEpKTsKKwlzZ19pbml0 X29uZShzZ2ksIHJlcywgc2l6ZW9mKCpyZXMpKTsKKwl2aXJ0cXVldWVfYWRkX3Nncyh2cHMtPnZx WzBdLCBzZ3MsIDEsIDEsIHZwcywgR0ZQX0tFUk5FTCk7CisJdmlydHF1ZXVlX2tpY2sodnBzLT52 cVswXSk7CisKKwl3YWl0X2V2ZW50KHZwcy0+YWNrZWQsIHZpcnRxdWV1ZV9nZXRfYnVmKHZwcy0+ dnFbMF0sICZsZW4pKTsKKwlyZXR1cm4gdmlydGlvMzJfdG9fY3B1KHZwcy0+dmRldiwgcmVzLT5y ZXQpOworfQorCitzdGF0aWMgaW50IHZpcnRfcHN0b3JlX2Nsb3NlKHN0cnVjdCBwc3RvcmVfaW5m byAqcHNpKQoreworCXN0cnVjdCB2aXJ0aW9fcHN0b3JlICp2cHMgPSBwc2ktPmRhdGE7CisJc3Ry dWN0IHZpcnRpb19wc3RvcmVfcmVxICpyZXEgPSAmdnBzLT5yZXFbdnBzLT5yZXFfaWRdOworCXN0 cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcyAqcmVzID0gJnZwcy0+cmVzW3Zwcy0+cmVxX2lkXTsKKwlz dHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dvWzFdLCBzZ2lbMV07CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpz Z3NbMl0gPSB7IHNnbywgc2dpIH07CisJdW5zaWduZWQgaW50IGxlbjsKKworCXZpcnRfcHN0b3Jl X2dldF9yZXFzKHZwcywgJnJlcSwgJnJlcyk7CisKKwlyZXEtPmNtZCA9IGNwdV90b192aXJ0aW8x Nih2cHMtPnZkZXYsIFZJUlRJT19QU1RPUkVfQ01EX0NMT1NFKTsKKworCXNnX2luaXRfb25lKHNn bywgcmVxLCBzaXplb2YoKnJlcSkpOworCXNnX2luaXRfb25lKHNnaSwgcmVzLCBzaXplb2YoKnJl cykpOworCXZpcnRxdWV1ZV9hZGRfc2dzKHZwcy0+dnFbMF0sIHNncywgMSwgMSwgdnBzLCBHRlBf S0VSTkVMKTsKKwl2aXJ0cXVldWVfa2ljayh2cHMtPnZxWzBdKTsKKworCXdhaXRfZXZlbnQodnBz LT5hY2tlZCwgdmlydHF1ZXVlX2dldF9idWYodnBzLT52cVswXSwgJmxlbikpOworCXJldHVybiB2 aXJ0aW8zMl90b19jcHUodnBzLT52ZGV2LCByZXMtPnJldCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90 IHZpcnRfcHN0b3JlX3JlYWQodTY0ICppZCwgZW51bSBwc3RvcmVfdHlwZV9pZCAqdHlwZSwKKwkJ CQlpbnQgKmNvdW50LCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWUsCisJCQkJY2hhciAqKmJ1ZiwgYm9v bCAqY29tcHJlc3NlZCwKKwkJCQlzc2l6ZV90ICplY2Nfbm90aWNlX3NpemUsCisJCQkJc3RydWN0 IHBzdG9yZV9pbmZvICpwc2kpCit7CisJc3RydWN0IHZpcnRpb19wc3RvcmUgKnZwcyA9IHBzaS0+ ZGF0YTsKKwlzdHJ1Y3QgdmlydGlvX3BzdG9yZV9yZXEgKnJlcTsKKwlzdHJ1Y3QgdmlydGlvX3Bz dG9yZV9yZXMgKnJlczsKKwlzdHJ1Y3QgdmlydGlvX3BzdG9yZV9maWxlaW5mbyBpbmZvOworCXN0 cnVjdCBzY2F0dGVybGlzdCBzZ29bMV0sIHNnaVszXTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNn c1syXSA9IHsgc2dvLCBzZ2kgfTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCXVuc2lnbmVkIGludCBm bGFnczsKKwlpbnQgcmV0OworCXZvaWQgKmJmOworCisJdmlydF9wc3RvcmVfZ2V0X3JlcXModnBz LCAmcmVxLCAmcmVzKTsKKworCXJlcS0+Y21kID0gY3B1X3RvX3ZpcnRpbzE2KHZwcy0+dmRldiwg VklSVElPX1BTVE9SRV9DTURfUkVBRCk7CisKKwlzZ19pbml0X29uZShzZ28sIHJlcSwgc2l6ZW9m KCpyZXEpKTsKKwlzZ19pbml0X3RhYmxlKHNnaSwgMyk7CisJc2dfc2V0X2J1Zigmc2dpWzBdLCBy ZXMsIHNpemVvZigqcmVzKSk7CisJc2dfc2V0X2J1Zigmc2dpWzFdLCAmaW5mbywgc2l6ZW9mKGlu Zm8pKTsKKwlzZ19zZXRfYnVmKCZzZ2lbMl0sIHBzaS0+YnVmLCBwc2ktPmJ1ZnNpemUpOworCXZp cnRxdWV1ZV9hZGRfc2dzKHZwcy0+dnFbMF0sIHNncywgMSwgMSwgdnBzLCBHRlBfS0VSTkVMKTsK Kwl2aXJ0cXVldWVfa2ljayh2cHMtPnZxWzBdKTsKKworCXdhaXRfZXZlbnQodnBzLT5hY2tlZCwg dmlydHF1ZXVlX2dldF9idWYodnBzLT52cVswXSwgJmxlbikpOworCWlmIChsZW4gPCBzaXplb2Yo KnJlcykgKyBzaXplb2YoaW5mbykpCisJCXJldHVybiAtMTsKKworCXJldCA9IHZpcnRpbzMyX3Rv X2NwdSh2cHMtPnZkZXYsIHJlcy0+cmV0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsK KworCWxlbiA9IHZpcnRpbzMyX3RvX2NwdSh2cHMtPnZkZXYsIGluZm8ubGVuKTsKKworCWJmID0g a21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmIChiZiA9PSBOVUxMKQorCQlyZXR1cm4gLUVO T01FTTsKKworCSppZCAgICA9IHZpcnRpbzY0X3RvX2NwdSh2cHMtPnZkZXYsIGluZm8uaWQpOwor CSp0eXBlICA9IGZyb21fdmlydGlvX3R5cGUodnBzLCBpbmZvLnR5cGUpOworCSpjb3VudCA9IHZp cnRpbzMyX3RvX2NwdSh2cHMtPnZkZXYsIGluZm8uY291bnQpOworCisJZmxhZ3MgPSB2aXJ0aW8z Ml90b19jcHUodnBzLT52ZGV2LCBpbmZvLmZsYWdzKTsKKwkqY29tcHJlc3NlZCA9IGZsYWdzICYg VklSVElPX1BTVE9SRV9GTF9DT01QUkVTU0VEOworCisJdGltZS0+dHZfc2VjICA9IHZpcnRpbzY0 X3RvX2NwdSh2cHMtPnZkZXYsIGluZm8udGltZV9zZWMpOworCXRpbWUtPnR2X25zZWMgPSB2aXJ0 aW8zMl90b19jcHUodnBzLT52ZGV2LCBpbmZvLnRpbWVfbnNlYyk7CisKKwltZW1jcHkoYmYsIHBz aS0+YnVmLCBsZW4pOworCSpidWYgPSBiZjsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBp bnQgbm90cmFjZSB2aXJ0X3BzdG9yZV93cml0ZShlbnVtIHBzdG9yZV90eXBlX2lkIHR5cGUsCisJ CQkJICAgICBlbnVtIGttc2dfZHVtcF9yZWFzb24gcmVhc29uLAorCQkJCSAgICAgdTY0ICppZCwg dW5zaWduZWQgaW50IHBhcnQsIGludCBjb3VudCwKKwkJCQkgICAgIGJvb2wgY29tcHJlc3NlZCwg c2l6ZV90IHNpemUsCisJCQkJICAgICBzdHJ1Y3QgcHN0b3JlX2luZm8gKnBzaSkKK3sKKwlzdHJ1 Y3QgdmlydGlvX3BzdG9yZSAqdnBzID0gcHNpLT5kYXRhOworCXN0cnVjdCB2aXJ0aW9fcHN0b3Jl X3JlcSAqcmVxOworCXN0cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcyAqcmVzOworCXN0cnVjdCBzY2F0 dGVybGlzdCBzZ29bMl0sIHNnaVsxXTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnc1syXSA9IHsg c2dvLCBzZ2kgfTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBjb21wcmVzc2VkID8gVklSVElPX1BT VE9SRV9GTF9DT01QUkVTU0VEIDogMDsKKworCWlmICh2cHMtPmZhaWxlZCkKKwkJcmV0dXJuIC0x OworCisJKmlkID0gdnBzLT5yZXFfaWQ7CisJdmlydF9wc3RvcmVfZ2V0X3JlcXModnBzLCAmcmVx LCAmcmVzKTsKKworCXJlcS0+Y21kICAgPSBjcHVfdG9fdmlydGlvMTYodnBzLT52ZGV2LCBWSVJU SU9fUFNUT1JFX0NNRF9XUklURSk7CisJcmVxLT50eXBlICA9IHRvX3ZpcnRpb190eXBlKHZwcywg dHlwZSk7CisJcmVxLT5mbGFncyA9IGNwdV90b192aXJ0aW8zMih2cHMtPnZkZXYsIGZsYWdzKTsK KworCXNnX2luaXRfdGFibGUoc2dvLCAyKTsKKwlzZ19zZXRfYnVmKCZzZ29bMF0sIHJlcSwgc2l6 ZW9mKCpyZXEpKTsKKwlzZ19zZXRfYnVmKCZzZ29bMV0sIHBzdG9yZV9nZXRfYnVmKHBzaSksIHNp emUpOworCXNnX2luaXRfb25lKHNnaSwgcmVzLCBzaXplb2YoKnJlcykpOworCXZpcnRxdWV1ZV9h ZGRfc2dzKHZwcy0+dnFbMV0sIHNncywgMSwgMSwgdnBzLCBHRlBfQVRPTUlDKTsKKwl2aXJ0cXVl dWVfa2ljayh2cHMtPnZxWzFdKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpcnRf cHN0b3JlX2VyYXNlKGVudW0gcHN0b3JlX3R5cGVfaWQgdHlwZSwgdTY0IGlkLCBpbnQgY291bnQs CisJCQkgICAgIHN0cnVjdCB0aW1lc3BlYyB0aW1lLCBzdHJ1Y3QgcHN0b3JlX2luZm8gKnBzaSkK K3sKKwlzdHJ1Y3QgdmlydGlvX3BzdG9yZSAqdnBzID0gcHNpLT5kYXRhOworCXN0cnVjdCB2aXJ0 aW9fcHN0b3JlX3JlcSAqcmVxOworCXN0cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcyAqcmVzOworCXN0 cnVjdCBzY2F0dGVybGlzdCBzZ29bMV0sIHNnaVsxXTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNn c1syXSA9IHsgc2dvLCBzZ2kgfTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJdmlydF9wc3RvcmVf Z2V0X3JlcXModnBzLCAmcmVxLCAmcmVzKTsKKworCXJlcS0+Y21kICAgPSBjcHVfdG9fdmlydGlv MTYodnBzLT52ZGV2LCBWSVJUSU9fUFNUT1JFX0NNRF9FUkFTRSk7CisJcmVxLT50eXBlICA9IHRv X3ZpcnRpb190eXBlKHZwcywgdHlwZSk7CisJcmVxLT5pZAkgICA9IGNwdV90b192aXJ0aW82NCh2 cHMtPnZkZXYsIGlkKTsKKwlyZXEtPmNvdW50ID0gY3B1X3RvX3ZpcnRpbzMyKHZwcy0+dmRldiwg Y291bnQpOworCisJc2dfaW5pdF9vbmUoc2dvLCByZXEsIHNpemVvZigqcmVxKSk7CisJc2dfaW5p dF9vbmUoc2dpLCByZXMsIHNpemVvZigqcmVzKSk7CisJdmlydHF1ZXVlX2FkZF9zZ3ModnBzLT52 cVswXSwgc2dzLCAxLCAxLCB2cHMsIEdGUF9LRVJORUwpOworCXZpcnRxdWV1ZV9raWNrKHZwcy0+ dnFbMF0pOworCisJd2FpdF9ldmVudCh2cHMtPmFja2VkLCB2aXJ0cXVldWVfZ2V0X2J1Zih2cHMt PnZxWzBdLCAmbGVuKSk7CisJcmV0dXJuIHZpcnRpbzMyX3RvX2NwdSh2cHMtPnZkZXYsIHJlcy0+ cmV0KTsKK30KKworc3RhdGljIGludCB2aXJ0X3BzdG9yZV9pbml0KHN0cnVjdCB2aXJ0aW9fcHN0 b3JlICp2cHMpCit7CisJc3RydWN0IHBzdG9yZV9pbmZvICpwc2luZm8gPSAmdnBzLT5wc3RvcmU7 CisJaW50IGVycjsKKworCWlmICghcHNpbmZvLT5idWZzaXplKQorCQlwc2luZm8tPmJ1ZnNpemUg PSBWSVJUX1BTVE9SRV9CVUZTSVpFOworCisJcHNpbmZvLT5idWYgPSBhbGxvY19wYWdlc19leGFj dChwc2luZm8tPmJ1ZnNpemUsIEdGUF9LRVJORUwpOworCWlmICghcHNpbmZvLT5idWYpIHsKKwkJ cHJfZXJyKCJjYW5ub3QgYWxsb2NhdGUgcHN0b3JlIGJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5P TUVNOworCX0KKworCXBzaW5mby0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlwc2luZm8tPm5hbWUg ID0gInZpcnRpbyI7CisJcHNpbmZvLT5vcGVuICA9IHZpcnRfcHN0b3JlX29wZW47CisJcHNpbmZv LT5jbG9zZSA9IHZpcnRfcHN0b3JlX2Nsb3NlOworCXBzaW5mby0+cmVhZCAgPSB2aXJ0X3BzdG9y ZV9yZWFkOworCXBzaW5mby0+ZXJhc2UgPSB2aXJ0X3BzdG9yZV9lcmFzZTsKKwlwc2luZm8tPndy aXRlID0gdmlydF9wc3RvcmVfd3JpdGU7CisJcHNpbmZvLT5mbGFncyA9IFBTVE9SRV9GTEFHU19E TUVTRzsKKworCXBzaW5mby0+ZGF0YSAgPSB2cHM7CisJc3Bpbl9sb2NrX2luaXQoJnBzaW5mby0+ YnVmX2xvY2spOworCisJZXJyID0gcHN0b3JlX3JlZ2lzdGVyKHBzaW5mbyk7CisJaWYgKGVycikK KwkJa2ZyZWUocHNpbmZvLT5idWYpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB2 aXJ0X3BzdG9yZV9leGl0KHN0cnVjdCB2aXJ0aW9fcHN0b3JlICp2cHMpCit7CisJc3RydWN0IHBz dG9yZV9pbmZvICpwc2luZm8gPSAmdnBzLT5wc3RvcmU7CisKKwlwc3RvcmVfdW5yZWdpc3Rlcihw c2luZm8pOworCisJZnJlZV9wYWdlc19leGFjdChwc2luZm8tPmJ1ZiwgcHNpbmZvLT5idWZzaXpl KTsKKwlwc2luZm8tPmJ1ZiA9IE5VTEw7CisJcHNpbmZvLT5idWZzaXplID0gMDsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IHZpcnRwc3RvcmVfaW5pdF92cXMoc3RydWN0IHZpcnRpb19w c3RvcmUgKnZwcykKK3sKKwl2cV9jYWxsYmFja190ICpjYWxsYmFja3NbXSA9IHsgdmlydHBzdG9y ZV9hY2ssIHZpcnRwc3RvcmVfY2hlY2sgfTsKKwljb25zdCBjaGFyICpuYW1lc1tdID0geyAicHN0 b3JlX3JlYWQiLCAicHN0b3JlX3dyaXRlIiB9OworCisJcmV0dXJuIHZwcy0+dmRldi0+Y29uZmln LT5maW5kX3Zxcyh2cHMtPnZkZXYsIDIsIHZwcy0+dnEsCisJCQkJCSAgIGNhbGxiYWNrcywgbmFt ZXMpOworfQorCitzdGF0aWMgdm9pZCB2aXJ0cHN0b3JlX2luaXRfY29uZmlnKHN0cnVjdCB2aXJ0 aW9fcHN0b3JlICp2cHMpCit7CisJdTMyIGJ1ZnNpemU7CisKKwl2aXJ0aW9fY3JlYWQodnBzLT52 ZGV2LCBzdHJ1Y3QgdmlydGlvX3BzdG9yZV9jb25maWcsIGJ1ZnNpemUsICZidWZzaXplKTsKKwor CXZwcy0+cHN0b3JlLmJ1ZnNpemUgPSBQQUdFX0FMSUdOKGJ1ZnNpemUpOworfQorCitzdGF0aWMg dm9pZCB2aXJ0cHN0b3JlX2NvbmZpcm1fY29uZmlnKHN0cnVjdCB2aXJ0aW9fcHN0b3JlICp2cHMp Cit7CisJdTMyIGJ1ZnNpemUgPSB2cHMtPnBzdG9yZS5idWZzaXplOworCisJdmlydGlvX2N3cml0 ZSh2cHMtPnZkZXYsIHN0cnVjdCB2aXJ0aW9fcHN0b3JlX2NvbmZpZywgYnVmc2l6ZSwKKwkJICAg ICAmYnVmc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgdmlydHBzdG9yZV9wcm9iZShzdHJ1Y3Qgdmly dGlvX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgdmlydGlvX3BzdG9yZSAqdnBzOworCWludCBl cnI7CisKKwlpZiAoIXZkZXYtPmNvbmZpZy0+Z2V0KSB7CisJCWRldl9lcnIoJnZkZXYtPmRldiwg ImRyaXZlciBpbml0OiBjb25maWcgYWNjZXNzIGRpc2FibGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJdmRldi0+cHJpdiA9IHZwcyA9IGt6YWxsb2Moc2l6ZW9mKCp2cHMpLCBHRlBf S0VSTkVMKTsKKwlpZiAoIXZwcykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9 CisJdnBzLT52ZGV2ID0gdmRldjsKKworCWVyciA9IHZpcnRwc3RvcmVfaW5pdF92cXModnBzKTsK KwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXRfZnJlZTsKKworCXZpcnRwc3RvcmVfaW5pdF9jb25m aWcodnBzKTsKKworCWVyciA9IHZpcnRfcHN0b3JlX2luaXQodnBzKTsKKwlpZiAoZXJyKQorCQln b3RvIG91dF9kZWxfdnE7CisKKwl2aXJ0cHN0b3JlX2NvbmZpcm1fY29uZmlnKHZwcyk7CisKKwlp bml0X3dhaXRxdWV1ZV9oZWFkKCZ2cHMtPmFja2VkKTsKKworCXZpcnRpb19kZXZpY2VfcmVhZHko dmRldik7CisKKwlkZXZfaW5mbygmdmRldi0+ZGV2LCAiZHJpdmVyIGluaXQ6IG9rIChidWZzaXpl ID0gJWx1SywgZmxhZ3MgPSAleClcbiIsCisJCSB2cHMtPnBzdG9yZS5idWZzaXplID4+IDEwLCB2 cHMtPnBzdG9yZS5mbGFncyk7CisKKwlyZXR1cm4gMDsKKworb3V0X2RlbF92cToKKwl2ZGV2LT5j b25maWctPmRlbF92cXModmRldik7CitvdXRfZnJlZToKKwlrZnJlZSh2cHMpOworb3V0OgorCWRl dl9lcnIoJnZkZXYtPmRldiwgImRyaXZlciBpbml0OiBmYWlsZWQgd2l0aCAlZFxuIiwgZXJyKTsK KwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCB2aXJ0cHN0b3JlX3JlbW92ZShzdHJ1Y3Qg dmlydGlvX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgdmlydGlvX3BzdG9yZSAqdnBzID0gdmRl di0+cHJpdjsKKworCXZpcnRfcHN0b3JlX2V4aXQodnBzKTsKKworCS8qIE5vdyB3ZSByZXNldCB0 aGUgZGV2aWNlIHNvIHdlIGNhbiBjbGVhbiB1cCB0aGUgcXVldWVzLiAqLworCXZkZXYtPmNvbmZp Zy0+cmVzZXQodmRldik7CisKKwl2ZGV2LT5jb25maWctPmRlbF92cXModmRldik7CisKKwlrZnJl ZSh2cHMpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGZlYXR1cmVzW10gPSB7Cit9OworCitz dGF0aWMgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKKwl7IFZJUlRJT19J RF9QU1RPUkUsIFZJUlRJT19ERVZfQU5ZX0lEIH0sCisJeyAwIH0sCit9OworCitzdGF0aWMgc3Ry dWN0IHZpcnRpb19kcml2ZXIgdmlydGlvX3BzdG9yZV9kcml2ZXIgPSB7CisJLmRyaXZlci5uYW1l ICAgICAgICAgPSBLQlVJTERfTU9ETkFNRSwKKwkuZHJpdmVyLm93bmVyICAgICAgICA9IFRISVNf TU9EVUxFLAorCS5mZWF0dXJlX3RhYmxlICAgICAgID0gZmVhdHVyZXMsCisJLmZlYXR1cmVfdGFi bGVfc2l6ZSAgPSBBUlJBWV9TSVpFKGZlYXR1cmVzKSwKKwkuaWRfdGFibGUgICAgICAgICAgICA9 IGlkX3RhYmxlLAorCS5wcm9iZSAgICAgICAgICAgICAgID0gdmlydHBzdG9yZV9wcm9iZSwKKwku cmVtb3ZlICAgICAgICAgICAgICA9IHZpcnRwc3RvcmVfcmVtb3ZlLAorfTsKKworbW9kdWxlX3Zp cnRpb19kcml2ZXIodmlydGlvX3BzdG9yZV9kcml2ZXIpOworTU9EVUxFX0RFVklDRV9UQUJMRSh2 aXJ0aW8sIGlkX3RhYmxlKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhP UigiTmFtaHl1bmcgS2ltIDxuYW1oeXVuZ0BrZXJuZWwub3JnPiIpOworTU9EVUxFX0RFU0NSSVBU SU9OKCJWaXJ0aW8gcHN0b3JlIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xp bnV4L0tidWlsZCBiL2luY2x1ZGUvdWFwaS9saW51eC9LYnVpbGQKaW5kZXggNmQ0ZTkyY2NkYzkx Li45YmJiMTU1NGQ4YjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9LYnVpbGQKKysr IGIvaW5jbHVkZS91YXBpL2xpbnV4L0tidWlsZApAQCAtNDQ5LDYgKzQ0OSw3IEBAIGhlYWRlci15 ICs9IHZpcnRpb19pZHMuaAogaGVhZGVyLXkgKz0gdmlydGlvX2lucHV0LmgKIGhlYWRlci15ICs9 IHZpcnRpb19uZXQuaAogaGVhZGVyLXkgKz0gdmlydGlvX3BjaS5oCitoZWFkZXIteSArPSB2aXJ0 aW9fcHN0b3JlLmgKIGhlYWRlci15ICs9IHZpcnRpb19yaW5nLmgKIGhlYWRlci15ICs9IHZpcnRp b19ybmcuaAogaGVhZGVyLXkgKz0gdmlydGlvX3Njc2kuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91 YXBpL2xpbnV4L3ZpcnRpb19pZHMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC92aXJ0aW9faWRzLmgK aW5kZXggNzc5MjVmNTg3YjE1Li5jNzJhOWFiNTg4YzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFw aS9saW51eC92aXJ0aW9faWRzLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19pZHMu aApAQCAtNDEsNSArNDEsNiBAQAogI2RlZmluZSBWSVJUSU9fSURfQ0FJRgkgICAgICAgMTIgLyog VmlydGlvIGNhaWYgKi8KICNkZWZpbmUgVklSVElPX0lEX0dQVSAgICAgICAgICAxNiAvKiB2aXJ0 aW8gR1BVICovCiAjZGVmaW5lIFZJUlRJT19JRF9JTlBVVCAgICAgICAgMTggLyogdmlydGlvIGlu cHV0ICovCisjZGVmaW5lIFZJUlRJT19JRF9QU1RPUkUgICAgICAgMjIgLyogdmlydGlvIHBzdG9y ZSAqLwogCiAjZW5kaWYgLyogX0xJTlVYX1ZJUlRJT19JRFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5j bHVkZS91YXBpL2xpbnV4L3ZpcnRpb19wc3RvcmUuaCBiL2luY2x1ZGUvdWFwaS9saW51eC92aXJ0 aW9fcHN0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mNGIw ZDIwNGQ4YWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX3Bz dG9yZS5oCkBAIC0wLDAgKzEsNzQgQEAKKyNpZm5kZWYgX0xJTlVYX1ZJUlRJT19QU1RPUkVfSAor I2RlZmluZSBfTElOVVhfVklSVElPX1BTVE9SRV9ICisvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGlj ZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAorICog Y29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBu YW1lIG9mIElCTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBi ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB TkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgSUJNIE9S IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VT IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg SU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuICovCisjaW5jbHVk ZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9fdHlwZXMuaD4KKworI2Rl ZmluZSBWSVJUSU9fUFNUT1JFX0NNRF9OVUxMICAgMAorI2RlZmluZSBWSVJUSU9fUFNUT1JFX0NN RF9PUEVOICAgMQorI2RlZmluZSBWSVJUSU9fUFNUT1JFX0NNRF9SRUFEICAgMgorI2RlZmluZSBW SVJUSU9fUFNUT1JFX0NNRF9XUklURSAgMworI2RlZmluZSBWSVJUSU9fUFNUT1JFX0NNRF9FUkFT RSAgNAorI2RlZmluZSBWSVJUSU9fUFNUT1JFX0NNRF9DTE9TRSAgNQorCisjZGVmaW5lIFZJUlRJ T19QU1RPUkVfVFlQRV9VTktOT1dOICAwCisjZGVmaW5lIFZJUlRJT19QU1RPUkVfVFlQRV9ETUVT RyAgICAxCisKKyNkZWZpbmUgVklSVElPX1BTVE9SRV9GTF9DT01QUkVTU0VEICAxCisKK3N0cnVj dCB2aXJ0aW9fcHN0b3JlX3JlcSB7CisJX192aXJ0aW8xNgkJY21kOworCV9fdmlydGlvMTYJCXR5 cGU7CisJX192aXJ0aW8zMgkJZmxhZ3M7CisJX192aXJ0aW82NAkJaWQ7CisJX192aXJ0aW8zMgkJ Y291bnQ7CisJX192aXJ0aW8zMgkJcmVzZXJ2ZWQ7Cit9OworCitzdHJ1Y3QgdmlydGlvX3BzdG9y ZV9yZXMgeworCV9fdmlydGlvMTYJCWNtZDsKKwlfX3ZpcnRpbzE2CQl0eXBlOworCV9fdmlydGlv MzIJCXJldDsKK307CisKK3N0cnVjdCB2aXJ0aW9fcHN0b3JlX2ZpbGVpbmZvIHsKKwlfX3ZpcnRp bzY0CQlpZDsKKwlfX3ZpcnRpbzMyCQljb3VudDsKKwlfX3ZpcnRpbzE2CQl0eXBlOworCV9fdmly dGlvMTYJCXVudXNlZDsKKwlfX3ZpcnRpbzMyCQlmbGFnczsKKwlfX3ZpcnRpbzMyCQlsZW47CisJ X192aXJ0aW82NAkJdGltZV9zZWM7CisJX192aXJ0aW8zMgkJdGltZV9uc2VjOworCV9fdmlydGlv MzIJCXJlc2VydmVkOworfTsKKworc3RydWN0IHZpcnRpb19wc3RvcmVfY29uZmlnIHsKKwlfX3Zp cnRpbzMyCQlidWZzaXplOworfTsKKworI2VuZGlmIC8qIF9MSU5VWF9WSVJUSU9fUFNUT1JFX0gg Ki8KLS0gCjIuOS4zCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpWaXJ0dWFsaXphdGlvbiBtYWlsaW5nIGxpc3QKVmlydHVhbGl6YXRpb25AbGlzdHMubGlu dXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxt YW4vbGlzdGluZm8vdmlydHVhbGl6YXRpb24=