From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Jones Subject: [kvm-unit-tests PATCH v6 09/11] arm/arm64: add initial gicv3 support Date: Mon, 14 Nov 2016 22:08:37 +0100 Message-ID: <1479157719-31021-10-git-send-email-drjones@redhat.com> References: <1479157719-31021-1-git-send-email-drjones@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: marc.zyngier@arm.com, andre.przywara@arm.com, pbonzini@redhat.com To: kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu, qemu-devel@nongnu.org, qemu-arm@nongnu.org Return-path: In-Reply-To: <1479157719-31021-1-git-send-email-drjones@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu List-Id: kvm.vger.kernel.org UmV2aWV3ZWQtYnk6IEFsZXggQmVubsOpZSA8YWxleC5iZW5uZWVAbGluYXJvLm9yZz4KU2lnbmVk LW9mZi1ieTogQW5kcmV3IEpvbmVzIDxkcmpvbmVzQHJlZGhhdC5jb20+CgotLS0KdjY6CiAtIGFk ZGVkIGNvbW1lbnRzIFtBbGV4XQogLSBhZGRlZCBzdHJpZGUgcGFyYW1ldGVyIHRvIGdpY3YzX3Nl dF9yZWRpc3RfYmFzZSBbQW5kcmVdCiAtIHJlZGlzdC13YWl0IHMvcndwL3V3cC8gYW5kIGNvbW1l bnQgW0FuZHJlXQogLSByZW1vdmVkIHVubmVjZXNzYXJ5IHdhaXQtZm9yLXJ3cHMgW0FuZHJlXQp2 NTogdXNlIG1vZGVybiByZWdpc3RlciBuYW1lcyBbQW5kcmVdCnY0OgogLSBvbmx5IHRha2UgZGVm aW5lcyBmcm9tIGtlcm5lbCB3ZSBuZWVkIG5vdyBbQW5kcmVdCiAtIHNpbXBsaWZ5IGVuYWJsZSBi eSBub3QgY2FyaW5nIGlmIHdlIHJlaW5pdCB0aGUgZGlzdHJpYnV0b3IgW2RyZXddCnYyOgogLSBj b25maWd1cmUgaXJxcyBhcyBOUyBHUlAxCi0tLQogbGliL2FybS9hc20vYXJjaF9naWN2My5oICAg fCAgNDcgKysrKysrKysrKysrKysrKysrKysKIGxpYi9hcm0vYXNtL2dpYy12My5oICAgICAgIHwg MTA0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliL2Fy bS9hc20vZ2ljLmggICAgICAgICAgfCAgIDUgKystCiBsaWIvYXJtL2dpYy5jICAgICAgICAgICAg ICB8ICA2NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWIvYXJtNjQvYXNtL2FyY2hf Z2ljdjMuaCB8ICA0NCArKysrKysrKysrKysrKysrKysrCiBsaWIvYXJtNjQvYXNtL2dpYy12My5o ICAgICB8ICAgMSArCiBsaWIvYXJtNjQvYXNtL3N5c3JlZy5oICAgICB8ICA0NCArKysrKysrKysr KysrKysrKysrCiA3IGZpbGVzIGNoYW5nZWQsIDMwOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9u KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2FybS9hc20vYXJjaF9naWN2My5oCiBjcmVhdGUg bW9kZSAxMDA2NDQgbGliL2FybS9hc20vZ2ljLXYzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIv YXJtNjQvYXNtL2FyY2hfZ2ljdjMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9hcm02NC9hc20v Z2ljLXYzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvYXJtNjQvYXNtL3N5c3JlZy5oCgpkaWZm IC0tZ2l0IGEvbGliL2FybS9hc20vYXJjaF9naWN2My5oIGIvbGliL2FybS9hc20vYXJjaF9naWN2 My5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjc2NTc3NDUyYTE0 Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2FybS9hc20vYXJjaF9naWN2My5oCkBAIC0wLDAgKzEs NDcgQEAKKy8qCisgKiBBbGwgcmlwcGVkIG9mZiBmcm9tIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2Fy Y2hfZ2ljdjMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNiwgUmVkIEhhdCBJbmMsIEFuZHJl dyBKb25lcyA8ZHJqb25lc0ByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgd29yayBpcyBsaWNlbnNl ZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMR1BMLCB2ZXJzaW9uIDIuCisgKi8KKyNpZm5k ZWYgX0FTTUFSTV9BUkNIX0dJQ1YzX0hfCisjZGVmaW5lIF9BU01BUk1fQVJDSF9HSUNWM19IXwor CisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpYmNmbGF0Lmg+CisjaW5jbHVkZSA8 YXNtL2JhcnJpZXIuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBfX3N0cmluZ2lm eSB4c3RyCisKKyNkZWZpbmUgX19BQ0NFU1NfQ1AxNShDUm4sIE9wMSwgQ1JtLCBPcDIpCXAxNSwg T3AxLCAlMCwgQ1JuLCBDUm0sIE9wMgorCisjZGVmaW5lIElDQ19QTVIJCQkJX19BQ0NFU1NfQ1Ax NShjNCwgMCwgYzYsIDApCisjZGVmaW5lIElDQ19JR1JQRU4xCQkJX19BQ0NFU1NfQ1AxNShjMTIs IDAsIGMxMiwgNykKKworc3RhdGljIGlubGluZSB2b2lkIGdpY3YzX3dyaXRlX3Btcih1MzIgdmFs KQoreworCWFzbSB2b2xhdGlsZSgibWNyICIgX19zdHJpbmdpZnkoSUNDX1BNUikgOiA6ICJyIiAo dmFsKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnaWN2M193cml0ZV9ncnBlbjEodTMyIHZh bCkKK3sKKwlhc20gdm9sYXRpbGUoIm1jciAiIF9fc3RyaW5naWZ5KElDQ19JR1JQRU4xKSA6IDog InIiICh2YWwpKTsKKwlpc2IoKTsKK30KKworLyoKKyAqIFdlIG1heSBhY2Nlc3MgR0lDUl9UWVBF UiBhbmQgR0lUU19UWVBFUiBieSByZWFkaW5nIGJvdGggdGhlIFRZUEVSCisgKiBvZmZzZXQgYW5k IHRoZSBmb2xsb3dpbmcgb2Zmc2V0ICgrIDQpIGFuZCB0aGVuIGNvbWJpbmluZyB0aGVtIHRvCisg KiBmb3JtIGEgNjQtYml0IGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0IGdpY3YzX3Jl YWRfdHlwZXIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXU2NCB2YWwg PSByZWFkbChhZGRyKTsKKwl2YWwgfD0gKHU2NClyZWFkbChhZGRyICsgNCkgPDwgMzI7CisJcmV0 dXJuIHZhbDsKK30KKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfQVNN QVJNX0FSQ0hfR0lDVjNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYi9hcm0vYXNtL2dpYy12My5oIGIv bGliL2FybS9hc20vZ2ljLXYzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi43M2FkZTQ2ODFkMjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYXJtL2FzbS9naWMtdjMu aApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIEFsbCBHSUMqIGRlZmluZXMgYXJlIGxpZnRlZCBm cm9tIGluY2x1ZGUvbGludXgvaXJxY2hpcC9hcm0tZ2ljLXYzLmgKKyAqCisgKiBDb3B5cmlnaHQg KEMpIDIwMTYsIFJlZCBIYXQgSW5jLCBBbmRyZXcgSm9uZXMgPGRyam9uZXNAcmVkaGF0LmNvbT4K KyAqCisgKiBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg TEdQTCwgdmVyc2lvbiAyLgorICovCisjaWZuZGVmIF9BU01BUk1fR0lDX1YzX0hfCisjZGVmaW5l IF9BU01BUk1fR0lDX1YzX0hfCisKKyNpZm5kZWYgX0FTTUFSTV9HSUNfSF8KKyNlcnJvciBEbyBu b3QgZGlyZWN0bHkgaW5jbHVkZSA8YXNtL2dpYy12My5oPi4gSW5jbHVkZSA8YXNtL2dpYy5oPgor I2VuZGlmCisKKy8qCisgKiBEaXN0cmlidXRvciByZWdpc3RlcnMKKyAqCisgKiBXZSBleHBlY3Qg dG8gYmUgcnVuIGluIE5vbi1zZWN1cmUgbW9kZSwgdGh1cyB3ZSBkZWZpbmUgdGhlCisgKiBncm91 cDEgZW5hYmxlIGJpdHMgd2l0aCByZXNwZWN0IHRvIHRoYXQgdmlldy4KKyAqLworI2RlZmluZSBH SUNEX0NUTFJfUldQCQkJKDFVIDw8IDMxKQorI2RlZmluZSBHSUNEX0NUTFJfQVJFX05TCQkoMVUg PDwgNCkKKyNkZWZpbmUgR0lDRF9DVExSX0VOQUJMRV9HMUEJCSgxVSA8PCAxKQorI2RlZmluZSBH SUNEX0NUTFJfRU5BQkxFX0cxCQkoMVUgPDwgMCkKKworLyogUmUtRGlzdHJpYnV0b3IgcmVnaXN0 ZXJzLCBvZmZzZXRzIGZyb20gUkRfYmFzZSAqLworI2RlZmluZSBHSUNSX1RZUEVSCQkJMHgwMDA4 CisKKyNkZWZpbmUgR0lDUl9UWVBFUl9MQVNUCQkJKDFVIDw8IDQpCisKKy8qIFJlLURpc3RyaWJ1 dG9yIHJlZ2lzdGVycywgb2Zmc2V0cyBmcm9tIFNHSV9iYXNlICovCisjZGVmaW5lIEdJQ1JfSUdS T1VQUjAJCQlHSUNEX0lHUk9VUFIKKyNkZWZpbmUgR0lDUl9JU0VOQUJMRVIwCQkJR0lDRF9JU0VO QUJMRVIKKyNkZWZpbmUgR0lDUl9JUFJJT1JJVFlSMAkJR0lDRF9JUFJJT1JJVFlSCisKKyNpbmNs dWRlIDxhc20vYXJjaF9naWN2My5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUg PGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vz c29yLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK3N0cnVjdCBnaWN2M19kYXRhIHsKKwl2b2lk ICpkaXN0X2Jhc2U7CisJdm9pZCAqcmVkaXN0X2Jhc2VbTlJfQ1BVU107CisJdW5zaWduZWQgaW50 IGlycV9ucjsKK307CitleHRlcm4gc3RydWN0IGdpY3YzX2RhdGEgZ2ljdjNfZGF0YTsKKworI2Rl ZmluZSBnaWN2M19kaXN0X2Jhc2UoKQkJKGdpY3YzX2RhdGEuZGlzdF9iYXNlKQorI2RlZmluZSBn aWN2M19yZWRpc3RfYmFzZSgpCQkoZ2ljdjNfZGF0YS5yZWRpc3RfYmFzZVtzbXBfcHJvY2Vzc29y X2lkKCldKQorI2RlZmluZSBnaWN2M19zZ2lfYmFzZSgpCQkoZ2ljdjNfZGF0YS5yZWRpc3RfYmFz ZVtzbXBfcHJvY2Vzc29yX2lkKCldICsgU1pfNjRLKQorCitleHRlcm4gaW50IGdpY3YzX2luaXQo dm9pZCk7CitleHRlcm4gdm9pZCBnaWN2M19lbmFibGVfZGVmYXVsdHModm9pZCk7CitleHRlcm4g dm9pZCBnaWN2M19zZXRfcmVkaXN0X2Jhc2Uoc2l6ZV90IHN0cmlkZSk7CisKK3N0YXRpYyBpbmxp bmUgdm9pZCBnaWN2M19kb193YWl0X2Zvcl9yd3Aodm9pZCAqYmFzZSkKK3sKKwlpbnQgY291bnQg PSAxMDAwMDA7CS8qIDFzICovCisKKwl3aGlsZSAocmVhZGwoYmFzZSArIEdJQ0RfQ1RMUikgJiBH SUNEX0NUTFJfUldQKSB7CisJCWlmICghLS1jb3VudCkgeworCQkJcHJpbnRmKCJHSUN2MzogUldQ IHRpbWVvdXQhXG4iKTsKKwkJCWFib3J0KCk7CisJCX0KKwkJY3B1X3JlbGF4KCk7CisJCXVkZWxh eSgxMCk7CisJfTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdpY3YzX2Rpc3Rfd2FpdF9mb3Jf cndwKHZvaWQpCit7CisJZ2ljdjNfZG9fd2FpdF9mb3JfcndwKGdpY3YzX2Rpc3RfYmFzZSgpKTsK K30KKworc3RhdGljIGlubGluZSB2b2lkIGdpY3YzX3JlZGlzdF93YWl0X2Zvcl91d3Aodm9pZCkK K3sKKwkvKgorCSAqIFdlIGNhbiBidWlsZCBvbiBnaWNfZG9fd2FpdF9mb3JfcndwLCB3aGljaCB1 c2VzIEdJQ0RfIHJlZ2lzdGVycworCSAqIGJlY2F1c2UgR0lDRF9DVExSID09IEdJQ1JfQ1RMUiBh bmQgR0lDRF9DVExSX1JXUCA9PSBHSUNSX0NUTFJfVVdQCisJICovCisJZ2ljdjNfZG9fd2FpdF9m b3JfcndwKGdpY3YzX3JlZGlzdF9iYXNlKCkpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBtcGlk cl9jb21wcmVzcyh1NjQgbXBpZHIpCit7CisJdTY0IGNvbXByZXNzZWQgPSBtcGlkciAmIE1QSURS X0hXSURfQklUTUFTSzsKKworCWNvbXByZXNzZWQgPSAoKChjb21wcmVzc2VkID4+IDMyKSAmIDB4 ZmYpIDw8IDI0KSB8IGNvbXByZXNzZWQ7CisJcmV0dXJuIGNvbXByZXNzZWQ7Cit9CisKK3N0YXRp YyBpbmxpbmUgdTY0IG1waWRyX3VuY29tcHJlc3ModTMyIGNvbXByZXNzZWQpCit7CisJdTY0IG1w aWRyID0gKCh1NjQpY29tcHJlc3NlZCA+PiAyNCkgPDwgMzI7CisKKwltcGlkciB8PSBjb21wcmVz c2VkICYgTVBJRFJfSFdJRF9CSVRNQVNLOworCXJldHVybiBtcGlkcjsKK30KKworI2VuZGlmIC8q ICFfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBfQVNNQVJNX0dJQ19WM19IXyAqLwpkaWZmIC0t Z2l0IGEvbGliL2FybS9hc20vZ2ljLmggYi9saWIvYXJtL2FzbS9naWMuaAppbmRleCBkODE2Yjk2 ZTQ2YjQuLjIxNTExOTk3ZjJhOSAxMDA2NDQKLS0tIGEvbGliL2FybS9hc20vZ2ljLmgKKysrIGIv bGliL2FybS9hc20vZ2ljLmgKQEAgLTYsMTEgKzYsMTEgQEAKICNpZm5kZWYgX0FTTUFSTV9HSUNf SF8KICNkZWZpbmUgX0FTTUFSTV9HSUNfSF8KIAotI2luY2x1ZGUgPGFzbS9naWMtdjIuaD4KIAog LyogRGlzdHJpYnV0b3IgcmVnaXN0ZXJzICovCiAjZGVmaW5lIEdJQ0RfQ1RMUgkJCTB4MDAwMAog I2RlZmluZSBHSUNEX1RZUEVSCQkJMHgwMDA0CisjZGVmaW5lIEdJQ0RfSUdST1VQUgkJCTB4MDA4 MAogI2RlZmluZSBHSUNEX0lTRU5BQkxFUgkJCTB4MDEwMAogI2RlZmluZSBHSUNEX0lQUklPUklU WVIJCQkweDA0MDAKICNkZWZpbmUgR0lDRF9TR0lSCQkJMHgwZjAwCkBAIC0yOCw2ICsyOCw5IEBA CiAjZGVmaW5lIEdJQ0NfSU5UX1BSSV9USFJFU0hPTEQJCTB4ZjAKICNkZWZpbmUgR0lDQ19JTlRf U1BVUklPVVMJCTB4M2ZmCiAKKyNpbmNsdWRlIDxhc20vZ2ljLXYyLmg+CisjaW5jbHVkZSA8YXNt L2dpYy12My5oPgorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAvKgpkaWZmIC0tZ2l0IGEvbGli L2FybS9naWMuYyBiL2xpYi9hcm0vZ2ljLmMKaW5kZXggZDY1NTEwNWUwNThiLi5kNzAzYWQ5NmEz N2UgMTAwNjQ0Ci0tLSBhL2xpYi9hcm0vZ2ljLmMKKysrIGIvbGliL2FybS9naWMuYwpAQCAtOCw5 ICs4LDExIEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIHN0cnVjdCBnaWN2Ml9kYXRhIGdpY3Yy X2RhdGE7CitzdHJ1Y3QgZ2ljdjNfZGF0YSBnaWN2M19kYXRhOwogCiAvKgogICogRG9jdW1lbnRh dGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybSxnaWMudHh0 CisgKiBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xs ZXIvYXJtLGdpYy12My50eHQKICAqLwogc3RhdGljIGJvb2wKIGdpY19nZXRfZHRfYmFzZXMoY29u c3QgY2hhciAqY29tcGF0aWJsZSwgdm9pZCAqKmJhc2UxLCB2b2lkICoqYmFzZTIpCkBAIC00OCwx MCArNTAsMTggQEAgaW50IGdpY3YyX2luaXQodm9pZCkKIAkJCSZnaWN2Ml9kYXRhLmRpc3RfYmFz ZSwgJmdpY3YyX2RhdGEuY3B1X2Jhc2UpOwogfQogCitpbnQgZ2ljdjNfaW5pdCh2b2lkKQorewor CXJldHVybiBnaWNfZ2V0X2R0X2Jhc2VzKCJhcm0sZ2ljLXYzIiwgJmdpY3YzX2RhdGEuZGlzdF9i YXNlLAorCQkJJmdpY3YzX2RhdGEucmVkaXN0X2Jhc2VbMF0pOworfQorCiBpbnQgZ2ljX2luaXQo dm9pZCkKIHsKIAlpZiAoZ2ljdjJfaW5pdCgpKQogCQlyZXR1cm4gMjsKKwllbHNlIGlmIChnaWN2 M19pbml0KCkpCisJCXJldHVybiAzOwogCXJldHVybiAwOwogfQogCkBAIC03NCwzICs4NCw1NyBA QCB2b2lkIGdpY3YyX2VuYWJsZV9kZWZhdWx0cyh2b2lkKQogCXdyaXRlbChHSUNDX0lOVF9QUklf VEhSRVNIT0xELCBjcHVfYmFzZSArIEdJQ0NfUE1SKTsKIAl3cml0ZWwoR0lDQ19FTkFCTEUsIGNw dV9iYXNlICsgR0lDQ19DVExSKTsKIH0KKwordm9pZCBnaWN2M19zZXRfcmVkaXN0X2Jhc2Uoc2l6 ZV90IHN0cmlkZSkKK3sKKwl1MzIgYWZmID0gbXBpZHJfY29tcHJlc3MoZ2V0X21waWRyKCkpOwor CXZvaWQgKnB0ciA9IGdpY3YzX2RhdGEucmVkaXN0X2Jhc2VbMF07CisJdTY0IHR5cGVyOworCisJ ZG8geworCQl0eXBlciA9IGdpY3YzX3JlYWRfdHlwZXIocHRyICsgR0lDUl9UWVBFUik7CisJCWlm ICgodHlwZXIgPj4gMzIpID09IGFmZikgeworCQkJZ2ljdjNfcmVkaXN0X2Jhc2UoKSA9IHB0cjsK KwkJCXJldHVybjsKKwkJfQorCQlwdHIgKz0gc3RyaWRlOyAvKiBza2lwIFJEX2Jhc2UsIFNHSV9i YXNlLCBldGMuICovCisJfSB3aGlsZSAoISh0eXBlciAmIEdJQ1JfVFlQRVJfTEFTVCkpOworCisJ Lyogc2hvdWxkIG5ldmVyIHJlYWNoIGhlcmUgKi8KKwlhc3NlcnQoMCk7Cit9CisKK3ZvaWQgZ2lj djNfZW5hYmxlX2RlZmF1bHRzKHZvaWQpCit7CisJdm9pZCAqZGlzdCA9IGdpY3YzX2Rpc3RfYmFz ZSgpOworCXZvaWQgKnNnaV9iYXNlOworCXVuc2lnbmVkIGludCBpOworCisJZ2ljdjNfZGF0YS5p cnFfbnIgPSBHSUNEX1RZUEVSX0lSUVMocmVhZGwoZGlzdCArIEdJQ0RfVFlQRVIpKTsKKwlpZiAo Z2ljdjNfZGF0YS5pcnFfbnIgPiAxMDIwKQorCQlnaWN2M19kYXRhLmlycV9uciA9IDEwMjA7CisK Kwl3cml0ZWwoMCwgZGlzdCArIEdJQ0RfQ1RMUik7CisJZ2ljdjNfZGlzdF93YWl0X2Zvcl9yd3Ao KTsKKworCXdyaXRlbChHSUNEX0NUTFJfQVJFX05TIHwgR0lDRF9DVExSX0VOQUJMRV9HMUEgfCBH SUNEX0NUTFJfRU5BQkxFX0cxLAorCSAgICAgICBkaXN0ICsgR0lDRF9DVExSKTsKKwlnaWN2M19k aXN0X3dhaXRfZm9yX3J3cCgpOworCisJZm9yIChpID0gMDsgaSA8IGdpY3YzX2RhdGEuaXJxX25y OyBpICs9IDQpCisJCXdyaXRlbCh+MCwgZGlzdCArIEdJQ0RfSUdST1VQUiArIGkpOworCisJaWYg KCFnaWN2M19yZWRpc3RfYmFzZSgpKQorCQlnaWN2M19zZXRfcmVkaXN0X2Jhc2UoU1pfNjRLICog Mik7CisJc2dpX2Jhc2UgPSBnaWN2M19zZ2lfYmFzZSgpOworCisJd3JpdGVsKH4wLCBzZ2lfYmFz ZSArIEdJQ1JfSUdST1VQUjApOworCisJZm9yIChpID0gMDsgaSA8IDE2OyBpICs9IDQpCisJCXdy aXRlbChHSUNEX0lOVF9ERUZfUFJJX1g0LCBzZ2lfYmFzZSArIEdJQ1JfSVBSSU9SSVRZUjAgKyBp KTsKKworCXdyaXRlbChHSUNEX0lOVF9FTl9TRVRfU0dJLCBzZ2lfYmFzZSArIEdJQ1JfSVNFTkFC TEVSMCk7CisKKwlnaWN2M193cml0ZV9wbXIoR0lDQ19JTlRfUFJJX1RIUkVTSE9MRCk7CisJZ2lj djNfd3JpdGVfZ3JwZW4xKDEpOworfQpkaWZmIC0tZ2l0IGEvbGliL2FybTY0L2FzbS9hcmNoX2dp Y3YzLmggYi9saWIvYXJtNjQvYXNtL2FyY2hfZ2ljdjMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLjZkMzUzNTY3ZjU2YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9h cm02NC9hc20vYXJjaF9naWN2My5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBBbGwgcmlwcGVk IG9mZiBmcm9tIGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vYXJjaF9naWN2My5oCisgKgorICogQ29w eXJpZ2h0IChDKSAyMDE2LCBSZWQgSGF0IEluYywgQW5kcmV3IEpvbmVzIDxkcmpvbmVzQHJlZGhh dC5jb20+CisgKgorICogVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIExHUEwsIHZlcnNpb24gMi4KKyAqLworI2lmbmRlZiBfQVNNQVJNNjRfQVJDSF9HSUNW M19IXworI2RlZmluZSBfQVNNQVJNNjRfQVJDSF9HSUNWM19IXworCisjaW5jbHVkZSA8YXNtL3N5 c3JlZy5oPgorCisjZGVmaW5lIElDQ19QTVJfRUwxCQkJc3lzX3JlZygzLCAwLCA0LCA2LCAwKQor I2RlZmluZSBJQ0NfR1JQRU4xX0VMMQkJCXN5c19yZWcoMywgMCwgMTIsIDEyLCA3KQorCisjaWZu ZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGliY2ZsYXQuaD4KKyNpbmNsdWRlIDxhc20v YmFycmllci5oPgorCisjZGVmaW5lIF9fc3RyaW5naWZ5IHhzdHIKKworLyoKKyAqIExvdy1sZXZl bCBhY2Nlc3NvcnMKKyAqCisgKiBUaGVzZSBzeXN0ZW0gcmVnaXN0ZXJzIGFyZSAzMiBiaXRzLCBi dXQgd2UgbWFrZSBzdXJlIHRoYXQgdGhlIGNvbXBpbGVyCisgKiBzZXRzIHRoZSBHUCByZWdpc3Rl cidzIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyB0byAwIHdpdGggYW4gZXhwbGljaXQgY2FzdC4KKyAq LworCitzdGF0aWMgaW5saW5lIHZvaWQgZ2ljdjNfd3JpdGVfcG1yKHUzMiB2YWwpCit7CisJYXNt IHZvbGF0aWxlKCJtc3JfcyAiIF9fc3RyaW5naWZ5KElDQ19QTVJfRUwxKSAiLCAlMCIgOiA6ICJy IiAoKHU2NCl2YWwpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdpY3YzX3dyaXRlX2dycGVu MSh1MzIgdmFsKQoreworCWFzbSB2b2xhdGlsZSgibXNyX3MgIiBfX3N0cmluZ2lmeShJQ0NfR1JQ RU4xX0VMMSkgIiwgJTAiIDogOiAiciIgKCh1NjQpdmFsKSk7CisJaXNiKCk7Cit9CisKKyNkZWZp bmUgZ2ljdjNfcmVhZF90eXBlcihjKQkJcmVhZHEoYykKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlf XyAqLworI2VuZGlmIC8qIF9BU01BUk02NF9BUkNIX0dJQ1YzX0hfICovCmRpZmYgLS1naXQgYS9s aWIvYXJtNjQvYXNtL2dpYy12My5oIGIvbGliL2FybTY0L2FzbS9naWMtdjMuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhlZTVkNGQ5YzE4MQotLS0gL2Rldi9udWxs CisrKyBiL2xpYi9hcm02NC9hc20vZ2ljLXYzLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgIi4u Ly4uL2FybS9hc20vZ2ljLXYzLmgiCmRpZmYgLS1naXQgYS9saWIvYXJtNjQvYXNtL3N5c3JlZy5o IGIvbGliL2FybTY0L2FzbS9zeXNyZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLjU0NGE0NmNiOGNjNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9hcm02NC9hc20v c3lzcmVnLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIFJpcHBlZCBvZmYgZnJvbSBhcmNoL2Fy bTY0L2luY2x1ZGUvYXNtL3N5c3JlZy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE2LCBSZWQg SGF0IEluYywgQW5kcmV3IEpvbmVzIDxkcmpvbmVzQHJlZGhhdC5jb20+CisgKgorICogVGhpcyB3 b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExHUEwsIHZlcnNpb24g Mi4KKyAqLworI2lmbmRlZiBfQVNNQVJNNjRfU1lTUkVHX0hfCisjZGVmaW5lIF9BU01BUk02NF9T WVNSRUdfSF8KKworI2RlZmluZSBzeXNfcmVnKG9wMCwgb3AxLCBjcm4sIGNybSwgb3AyKSBcCisJ KCgoKG9wMCkmMyk8PDE5KXwoKG9wMSk8PDE2KXwoKGNybik8PDEyKXwoKGNybSk8PDgpfCgob3Ay KTw8NSkpCisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKwkuaXJwCW51bSwwLDEsMiwzLDQsNSw2LDcs OCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3 LDI4LDI5LDMwCisJLmVxdQkuTF9fcmVnX251bV94XG51bSwgXG51bQorCS5lbmRyCisJLmVxdQku TF9fcmVnX251bV94enIsIDMxCisKKwkubWFjcm8JbXJzX3MsIHJ0LCBzcmVnCisJLmluc3QJMHhk NTIwMDAwMHwoXHNyZWcpfCguTF9fcmVnX251bV9ccnQpCisJLmVuZG0KKworCS5tYWNybwltc3Jf cywgc3JlZywgcnQKKwkuaW5zdAkweGQ1MDAwMDAwfChcc3JlZyl8KC5MX19yZWdfbnVtX1xydCkK KwkuZW5kbQorI2Vsc2UKK2FzbSgKKyIJLmlycAludW0sMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwx MSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwz MFxuIgorIgkuZXF1CS5MX19yZWdfbnVtX3hcXG51bSwgXFxudW1cbiIKKyIJLmVuZHJcbiIKKyIJ LmVxdQkuTF9fcmVnX251bV94enIsIDMxXG4iCisiXG4iCisiCS5tYWNybwltcnNfcywgcnQsIHNy ZWdcbiIKKyIJLmluc3QJMHhkNTIwMDAwMHwoXFxzcmVnKXwoLkxfX3JlZ19udW1fXFxydClcbiIK KyIJLmVuZG1cbiIKKyJcbiIKKyIJLm1hY3JvCW1zcl9zLCBzcmVnLCBydFxuIgorIgkuaW5zdAkw eGQ1MDAwMDAwfChcXHNyZWcpfCguTF9fcmVnX251bV9cXHJ0KVxuIgorIgkuZW5kbVxuIgorKTsK KyNlbmRpZgorCisjZW5kaWYgLyogX0FTTUFSTTY0X1NZU1JFR19IXyAqLwotLSAKMi43LjQKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmt2bWFybSBtYWls aW5nIGxpc3QKa3ZtYXJtQGxpc3RzLmNzLmNvbHVtYmlhLmVkdQpodHRwczovL2xpc3RzLmNzLmNv bHVtYmlhLmVkdS9tYWlsbWFuL2xpc3RpbmZvL2t2bWFybQo=