From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH RFC v1 05/13] libxc: introduce a domain loader for HVM guest firmware Date: Mon, 22 Jun 2015 18:11:19 +0200 Message-ID: <1434989487-74940-6-git-send-email-roger.pau@citrix.com> References: <1434989487-74940-1-git-send-email-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1Z74KB-00089g-0g for xen-devel@lists.xenproject.org; Mon, 22 Jun 2015 16:11:55 +0000 In-Reply-To: <1434989487-74940-1-git-send-email-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: Elena Ufimtseva , Wei Liu , Ian Campbell , Stefano Stabellini , Andrew Cooper , Ian Jackson , Jan Beulich , Boris Ostrovsky , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org SW50cm9kdWNlIGEgdmVyeSBzaW1wbGUgKGFuZCBkdW1teSkgZG9tYWluIGxvYWRlciB0byBiZSB1 c2VkIHRvIGxvYWQgdGhlCmZpcm13YXJlIChodm1sb2FkZXIpIGludG8gSFZNIGd1ZXN0cy4gU2lu Y2UgaG12bG9hZGVyIGlzIGp1c3QgYSAzMmJpdCBlbGYKZXhlY3V0YWJsZSB0aGUgbG9hZGVyIGlz IGZhaXJseSBzaW1wbGUuCgpTaWduZWQtb2ZmLWJ5OiBSb2dlciBQYXUgTW9ubsOpIDxyb2dlci5w YXVAY2l0cml4LmNvbT4KQ2M6IElhbiBKYWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29t PgpDYzogU3RlZmFubyBTdGFiZWxsaW5pIDxzdGVmYW5vLnN0YWJlbGxpbmlAZXUuY2l0cml4LmNv bT4KQ2M6IElhbiBDYW1wYmVsbCA8aWFuLmNhbXBiZWxsQGNpdHJpeC5jb20+CkNjOiBXZWkgTGl1 IDx3ZWkubGl1MkBjaXRyaXguY29tPgpDYzogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29t PgpDYzogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KQ2M6IEJvcmlz IE9zdHJvdnNreSA8Ym9yaXMub3N0cm92c2t5QG9yYWNsZS5jb20+CkNjOiBLb25yYWQgUnplc3p1 dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5jb20+CkNjOiBFbGVuYSBVZmltdHNldmEgPGVs ZW5hLnVmaW10c2V2YUBvcmFjbGUuY29tPgotLS0KIHRvb2xzL2xpYnhjL01ha2VmaWxlICAgICAg ICAgICB8ICAgMSArCiB0b29scy9saWJ4Yy9pbmNsdWRlL3hjX2RvbS5oICAgfCAgIDcgKwogdG9v bHMvbGlieGMveGNfZG9tX2h2bWxvYWRlci5jIHwgMzE2ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiB4ZW4vaW5jbHVkZS94ZW4vbGliZWxmLmggICAgICAgfCAgIDEg KwogNCBmaWxlcyBjaGFuZ2VkLCAzMjUgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHRvb2xzL2xpYnhjL3hjX2RvbV9odm1sb2FkZXIuYwoKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhj L01ha2VmaWxlIGIvdG9vbHMvbGlieGMvTWFrZWZpbGUKaW5kZXggNTU3ODJjOC4uN2Y4NjBkNyAx MDA2NDQKLS0tIGEvdG9vbHMvbGlieGMvTWFrZWZpbGUKKysrIGIvdG9vbHMvbGlieGMvTWFrZWZp bGUKQEAgLTg2LDYgKzg2LDcgQEAgR1VFU1RfU1JDUy15ICAgICAgICAgICAgICAgICArPSB4Y19k b21fY29yZS5jIHhjX2RvbV9ib290LmMKIEdVRVNUX1NSQ1MteSAgICAgICAgICAgICAgICAgKz0g eGNfZG9tX2VsZmxvYWRlci5jCiBHVUVTVF9TUkNTLSQoQ09ORklHX1g4NikgICAgICs9IHhjX2Rv bV9iemltYWdlbG9hZGVyLmMKIEdVRVNUX1NSQ1MtJChDT05GSUdfWDg2KSAgICAgKz0geGNfZG9t X2RlY29tcHJlc3NfbHo0LmMKK0dVRVNUX1NSQ1MtJChDT05GSUdfWDg2KSAgICAgKz0geGNfZG9t X2h2bWxvYWRlci5jCiBHVUVTVF9TUkNTLSQoQ09ORklHX0FSTSkgICAgICs9IHhjX2RvbV9hcm16 aW1hZ2Vsb2FkZXIuYwogR1VFU1RfU1JDUy15ICAgICAgICAgICAgICAgICArPSB4Y19kb21fYmlu bG9hZGVyLmMKIEdVRVNUX1NSQ1MteSAgICAgICAgICAgICAgICAgKz0geGNfZG9tX2NvbXBhdF9s aW51eC5jCmRpZmYgLS1naXQgYS90b29scy9saWJ4Yy9pbmNsdWRlL3hjX2RvbS5oIGIvdG9vbHMv bGlieGMvaW5jbHVkZS94Y19kb20uaAppbmRleCAwNTFhN2RlLi5jYWViMWM4IDEwMDY0NAotLS0g YS90b29scy9saWJ4Yy9pbmNsdWRlL3hjX2RvbS5oCisrKyBiL3Rvb2xzL2xpYnhjL2luY2x1ZGUv eGNfZG9tLmgKQEAgLTE1LDYgKzE1LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8eGVuL2xpYmVsZi9s aWJlbGYuaD4KKyNpbmNsdWRlIDx4ZW5ndWVzdC5oPgogCiAjZGVmaW5lIElOVkFMSURfUDJNX0VO VFJZICAgKCh4ZW5fcGZuX3QpLTEpCiAKQEAgLTE5NCw2ICsxOTUsMTIgQEAgc3RydWN0IHhjX2Rv bV9pbWFnZSB7CiAgICAgeGVuX3Bmbl90IGxvd21lbV9lbmQ7CiAgICAgeGVuX3Bmbl90IGhpZ2ht ZW1fZW5kOwogICAgIGludCB2Z2FfaG9sZTsKKworICAgIC8qIEV4dHJhIEFDUEkgdGFibGVzIHBh c3NlZCB0byBIVk1MT0FERVIgKi8KKyAgICBzdHJ1Y3QgeGNfaHZtX2Zpcm13YXJlX21vZHVsZSBh Y3BpX21vZHVsZTsKKworICAgIC8qIEV4dHJhIFNNQklPUyBzdHJ1Y3R1cmVzIHBhc3NlZCB0byBI Vk1MT0FERVIgKi8KKyAgICBzdHJ1Y3QgeGNfaHZtX2Zpcm13YXJlX21vZHVsZSBzbWJpb3NfbW9k dWxlOwogfTsKIAogLyogLS0tIHBsdWdnYWJsZSBrZXJuZWwgbG9hZGVyIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL3hjX2Rv bV9odm1sb2FkZXIuYyBiL3Rvb2xzL2xpYnhjL3hjX2RvbV9odm1sb2FkZXIuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjI3MGM5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9v bHMvbGlieGMveGNfZG9tX2h2bWxvYWRlci5jCkBAIC0wLDAgKzEsMzE2IEBACisvKgorICogWGVu IGRvbWFpbiBidWlsZGVyIC0tIEhWTSBzcGVjaWZpYyBiaXRzLgorICoKKyAqIFBhcnNlIGFuZCBs b2FkIEVMRiBmaXJtd2FyZSBpbWFnZXMgZm9yIEhWTSBkb21haW5zLgorICoKKyAqIFRoaXMgbGli cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247CisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIGxpYnJhcnkg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9u LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx MC0xMzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3Rk bGliLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNs dWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgInhnX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJ4Y19k b20uaCIKKyNpbmNsdWRlICJ4Y19iaXRvcHMuaCIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisv KiBwYXJzZSBlbGYgYmluYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKi8KKworc3RhdGljIGVsZl9uZWdlcnJub3ZhbCBjaGVja19lbGZf a2VybmVsKHN0cnVjdCB4Y19kb21faW1hZ2UgKmRvbSwgYm9vbCB2ZXJib3NlKQoreworICAgIGlm ICggZG9tLT5rZXJuZWxfYmxvYiA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIGlmICggdmVyYm9z ZSApCisgICAgICAgICAgICB4Y19kb21fcGFuaWMoZG9tLT54Y2gsCisgICAgICAgICAgICAgICAg ICAgICAgICAgWENfSU5URVJOQUxfRVJST1IsICIlczogbm8ga2VybmVsIGltYWdlIGxvYWRlZCIs CisgICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fKTsKKyAgICAgICAgcmV0dXJu IC1FSU5WQUw7CisgICAgfQorCisgICAgaWYgKCAhZWxmX2lzX2VsZmJpbmFyeShkb20tPmtlcm5l bF9ibG9iLCBkb20tPmtlcm5lbF9zaXplKSApCisgICAgeworICAgICAgICBpZiAoIHZlcmJvc2Ug KQorICAgICAgICAgICAgeGNfZG9tX3BhbmljKGRvbS0+eGNoLAorICAgICAgICAgICAgICAgICAg ICAgICAgIFhDX0lOVkFMSURfS0VSTkVMLCAiJXM6IGtlcm5lbCBpcyBub3QgYW4gRUxGIGltYWdl IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18pOworICAgICAgICByZXR1 cm4gLUVJTlZBTDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbGZfbmVnZXJy bm92YWwgeGNfZG9tX3Byb2JlX2h2bV9rZXJuZWwoc3RydWN0IHhjX2RvbV9pbWFnZSAqZG9tKQor eworICAgIHN0cnVjdCBlbGZfYmluYXJ5IGVsZjsKKyAgICBpbnQgcmM7CisKKyAgICAvKiBUaGlz IGxvYWRlciBpcyBkZXNpZ25lZCBmb3IgSFZNIGd1ZXN0IGZpcm13YXJlLiAqLworICAgIGlmICgg ZG9tLT5jb250YWluZXJfdHlwZSAhPSBYQ19ET01fSFZNX0NPTlRBSU5FUiApCisgICAgICAgIHJl dHVybiAtRUlOVkFMOworCisgICAgcmMgPSBjaGVja19lbGZfa2VybmVsKGRvbSwgMCk7CisgICAg aWYgKCByYyAhPSAwICkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmMgPSBlbGZfaW5pdCgm ZWxmLCBkb20tPmtlcm5lbF9ibG9iLCBkb20tPmtlcm5lbF9zaXplKTsKKyAgICBpZiAoIHJjICE9 IDAgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICAvKgorICAgICAqIFdlIG5lZWQgdG8gY2hl Y2sgdGhhdCB0aGVyZSBhcmUgbm8gWGVuIEVMRk5PVEVTLCBvcgorICAgICAqIGVsc2Ugd2UgbWln aHQgYmUgdHJ5aW5nIHRvIGxvYWQgYSBQViBrZXJuZWwuCisgICAgICovCisgICAgZWxmX3BhcnNl X2JpbmFyeSgmZWxmKTsKKyAgICByYyA9IGVsZl94ZW5fcGFyc2UoJmVsZiwgJmRvbS0+cGFybXMp OworICAgIGlmICggcmMgPT0gMCApCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBlbGZfZXJyb3JzdGF0dXMgeGNfZG9tX3BhcnNlX2h2bV9rZXJu ZWwoc3RydWN0IHhjX2RvbV9pbWFnZSAqZG9tKQorICAgIC8qCisgICAgICogVGhpcyBmdW5jdGlv biBzb21ldGltZXMgcmV0dXJucyAtMSBmb3IgZXJyb3IgYW5kIHNvbWV0aW1lcworICAgICAqIGFu IGVycm5vIHZhbHVlLiAgPyE/IQorICAgICAqLworeworICAgIHN0cnVjdCBlbGZfYmluYXJ5ICpl bGY7CisgICAgZWxmX2Vycm9yc3RhdHVzIHJjOworCisgICAgcmMgPSBjaGVja19lbGZfa2VybmVs KGRvbSwgMSk7CisgICAgaWYgKCByYyAhPSAwICkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAg ZWxmID0geGNfZG9tX21hbGxvYyhkb20sIHNpemVvZigqZWxmKSk7CisgICAgaWYgKCBlbGYgPT0g TlVMTCApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBkb20tPnByaXZhdGVfbG9hZGVyID0gZWxm OworICAgIHJjID0gZWxmX2luaXQoZWxmLCBkb20tPmtlcm5lbF9ibG9iLCBkb20tPmtlcm5lbF9z aXplKTsKKyAgICB4Y19lbGZfc2V0X2xvZ2ZpbGUoZG9tLT54Y2gsIGVsZiwgMSk7CisgICAgaWYg KCByYyAhPSAwICkKKyAgICB7CisgICAgICAgIHhjX2RvbV9wYW5pYyhkb20tPnhjaCwgWENfSU5W QUxJRF9LRVJORUwsICIlczogY29ycnVwdGVkIEVMRiBpbWFnZSIsCisgICAgICAgICAgICAgICAg ICAgICBfX0ZVTkNUSU9OX18pOworICAgICAgICByZXR1cm4gcmM7CisgICAgfQorCisgICAgaWYg KCAhZWxmXzMyYml0KGVsZikgKQorICAgIHsKKyAgICAgICAgeGNfZG9tX3BhbmljKGRvbS0+eGNo LCBYQ19JTlZBTElEX0tFUk5FTCwgIiVzOiBFTEYgaW1hZ2UgaXMgbm90IDMyYml0IiwKKyAgICAg ICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOwor ICAgIH0KKworICAgIC8qIHBhcnNlIGJpbmFyeSBhbmQgZ2V0IHhlbiBtZXRhIGluZm8gKi8KKyAg ICBlbGZfcGFyc2VfYmluYXJ5KGVsZik7CisKKyAgICAvKiBmaW5kIGtlcm5lbCBzZWdtZW50ICov CisgICAgZG9tLT5rZXJuZWxfc2VnLnZzdGFydCA9IGVsZi0+cHN0YXJ0OworICAgIGRvbS0+a2Vy bmVsX3NlZy52ZW5kICAgPSBlbGYtPnBlbmQ7CisKKyAgICBkb20tPmd1ZXN0X3R5cGUgPSAiaHZt LTMuMC14ODZfMzIiOworCisgICAgaWYgKCBlbGZfY2hlY2tfYnJva2VuKGVsZikgKQorICAgICAg ICBET01QUklOVEYoIiVzOiBFTEYgYnJva2VuOiAlcyIsIF9fRlVOQ1RJT05fXywKKyAgICAgICAg ICAgICAgICAgIGVsZl9jaGVja19icm9rZW4oZWxmKSk7CisKKyAgICByZXR1cm4gcmM7Cit9CisK K3N0YXRpYyBpbnQgbW9kdWxlc19pbml0KHN0cnVjdCB4Y19kb21faW1hZ2UgKmRvbSwKKyAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHZlbmQsIHN0cnVjdCBlbGZfYmluYXJ5ICplbGYs CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCAqbXN0YXJ0X291dCwgdWludDY0X3Qg Km1lbmRfb3V0KQoreworI2RlZmluZSBNT0RVTEVfQUxJR04gMVVMIDw8IDcKKyNkZWZpbmUgTUJf QUxJR04gICAgIDFVTCA8PCAyMAorI2RlZmluZSBNS0FMSUdOKHgsIGEpICgoKHVpbnQ2NF90KSh4 KSArIChhKSAtIDEpICYgfih1aW50NjRfdCkoKGEpIC0gMSkpCisgICAgdWludDY0X3QgdG90YWxf bGVuID0gMCwgb2Zmc2V0MSA9IDA7CisKKyAgICBpZiAoIChkb20tPmFjcGlfbW9kdWxlLmxlbmd0 aCA9PSAwKSAmJiAoZG9tLT5zbWJpb3NfbW9kdWxlLmxlbmd0aCA9PSAwKSApCisgICAgICAgIHJl dHVybiAwOworCisgICAgLyogRmluZCB0aGUgdG90YWwgbGVuZ3RoIGZvciB0aGUgZmlybXdhcmUg bW9kdWxlcyB3aXRoIGEgcmVhc29uYWJsZSBsYXJnZQorICAgICAqIGFsaWdubWVudCBzaXplIHRv IGFsaWduIGVhY2ggdGhlIG1vZHVsZXMuCisgICAgICovCisgICAgdG90YWxfbGVuID0gTUtBTElH Tihkb20tPmFjcGlfbW9kdWxlLmxlbmd0aCwgTU9EVUxFX0FMSUdOKTsKKyAgICBvZmZzZXQxID0g dG90YWxfbGVuOworICAgIHRvdGFsX2xlbiArPSBNS0FMSUdOKGRvbS0+c21iaW9zX21vZHVsZS5s ZW5ndGgsIE1PRFVMRV9BTElHTik7CisKKyAgICAvKiBXYW50IHRvIHBsYWNlIHRoZSBtb2R1bGVz IDFNYitjaGFuZ2UgYmVoaW5kIHRoZSBsb2FkZXIgaW1hZ2UuICovCisgICAgKm1zdGFydF9vdXQg PSBNS0FMSUdOKGVsZi0+cGVuZCwgTUJfQUxJR04pICsgKE1CX0FMSUdOKTsKKyAgICAqbWVuZF9v dXQgPSAqbXN0YXJ0X291dCArIHRvdGFsX2xlbjsKKworICAgIGlmICggKm1lbmRfb3V0ID4gdmVu ZCApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICggZG9tLT5hY3BpX21vZHVsZS5sZW5n dGggIT0gMCApCisgICAgICAgIGRvbS0+YWNwaV9tb2R1bGUuZ3Vlc3RfYWRkcl9vdXQgPSAqbXN0 YXJ0X291dDsKKyAgICBpZiAoIGRvbS0+c21iaW9zX21vZHVsZS5sZW5ndGggIT0gMCApCisgICAg ICAgIGRvbS0+c21iaW9zX21vZHVsZS5ndWVzdF9hZGRyX291dCA9ICptc3RhcnRfb3V0ICsgb2Zm c2V0MTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvYWRtb2R1bGVzKHN0cnVj dCB4Y19kb21faW1hZ2UgKmRvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbXN0 YXJ0LCB1aW50NjRfdCBtZW5kLAorICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkb21p ZCkKK3sKKyAgICBwcml2Y21kX21tYXBfZW50cnlfdCAqZW50cmllcyA9IE5VTEw7CisgICAgdW5z aWduZWQgbG9uZyBwZm5fc3RhcnQ7CisgICAgdW5zaWduZWQgbG9uZyBwZm5fZW5kOworICAgIHNp emVfdCBwYWdlczsKKyAgICB1aW50MzJfdCBpOworICAgIHVpbnQ4X3QgKmRlc3Q7CisgICAgaW50 IHJjID0gLTE7CisgICAgeGNfaW50ZXJmYWNlICp4Y2ggPSBkb20tPnhjaDsKKworICAgIGlmICgg KG1zdGFydCA9PSAwKXx8KG1lbmQgPT0gMCkgKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHBm bl9zdGFydCA9ICh1bnNpZ25lZCBsb25nKShtc3RhcnQgPj4gUEFHRV9TSElGVCk7CisgICAgcGZu X2VuZCA9ICh1bnNpZ25lZCBsb25nKSgobWVuZCArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJ RlQpOworICAgIHBhZ2VzID0gcGZuX2VuZCAtIHBmbl9zdGFydDsKKworICAgIC8qIE1hcCBhZGRy ZXNzIHNwYWNlIGZvciBtb2R1bGUgbGlzdC4gKi8KKyAgICBlbnRyaWVzID0gY2FsbG9jKHBhZ2Vz LCBzaXplb2YocHJpdmNtZF9tbWFwX2VudHJ5X3QpKTsKKyAgICBpZiAoIGVudHJpZXMgPT0gTlVM TCApCisgICAgICAgIGdvdG8gZXJyb3Jfb3V0OworCisgICAgZm9yICggaSA9IDA7IGkgPCBwYWdl czsgaSsrICkKKyAgICAgICAgZW50cmllc1tpXS5tZm4gPSAobXN0YXJ0ID4+IFBBR0VfU0hJRlQp ICsgaTsKKworICAgIGRlc3QgPSB4Y19tYXBfZm9yZWlnbl9yYW5nZXMoCisgICAgICAgIHhjaCwg ZG9taWQsIHBhZ2VzIDw8IFBBR0VfU0hJRlQsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIDEgPDwg UEFHRV9TSElGVCwKKyAgICAgICAgZW50cmllcywgcGFnZXMpOworICAgIGlmICggZGVzdCA9PSBO VUxMICkKKyAgICAgICAgZ290byBlcnJvcl9vdXQ7CisKKyAgICAvKiBaZXJvIHRoZSByYW5nZSBz byBwYWRkaW5nIGlzIGNsZWFyIGJldHdlZW4gbW9kdWxlcyAqLworICAgIG1lbXNldChkZXN0LCAw LCBwYWdlcyA8PCBQQUdFX1NISUZUKTsKKworICAgIC8qIExvYWQgbW9kdWxlcyBpbnRvIHJhbmdl ICovCisgICAgaWYgKCBkb20tPmFjcGlfbW9kdWxlLmxlbmd0aCAhPSAwICkKKyAgICB7CisgICAg ICAgIG1lbWNweShkZXN0LAorICAgICAgICAgICAgICAgZG9tLT5hY3BpX21vZHVsZS5kYXRhLAor ICAgICAgICAgICAgICAgZG9tLT5hY3BpX21vZHVsZS5sZW5ndGgpOworICAgIH0KKyAgICBpZiAo IGRvbS0+c21iaW9zX21vZHVsZS5sZW5ndGggIT0gMCApCisgICAgeworICAgICAgICBtZW1jcHko ZGVzdCArIChkb20tPnNtYmlvc19tb2R1bGUuZ3Vlc3RfYWRkcl9vdXQgLSBtc3RhcnQpLAorICAg ICAgICAgICAgICAgZG9tLT5zbWJpb3NfbW9kdWxlLmRhdGEsCisgICAgICAgICAgICAgICBkb20t PnNtYmlvc19tb2R1bGUubGVuZ3RoKTsKKyAgICB9CisKKyAgICBtdW5tYXAoZGVzdCwgcGFnZXMg PDwgUEFHRV9TSElGVCk7CisgICAgcmMgPSAwOworCisgZXJyb3Jfb3V0OgorICAgIGZyZWUoZW50 cmllcyk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBlbGZfZXJyb3JzdGF0dXMgeGNf ZG9tX2xvYWRfaHZtX2tlcm5lbChzdHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20pCit7CisgICAgc3Ry dWN0IGVsZl9iaW5hcnkgKmVsZiA9IGRvbS0+cHJpdmF0ZV9sb2FkZXI7CisgICAgcHJpdmNtZF9t bWFwX2VudHJ5X3QgKmVudHJpZXMgPSBOVUxMOworICAgIHNpemVfdCBwYWdlcyA9IChlbGYtPnBl bmQgLSBlbGYtPnBzdGFydCArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7CisgICAgZWxm X2Vycm9yc3RhdHVzIHJjOworICAgIHVpbnQ2NF90IG1fc3RhcnQgPSAwLCBtX2VuZCA9IDA7Cisg ICAgaW50IGk7CisKKyAgICAvKiBNYXAgYWRkcmVzcyBzcGFjZSBmb3IgaW5pdGlhbCBlbGYgaW1h Z2UuICovCisgICAgZW50cmllcyA9IGNhbGxvYyhwYWdlcywgc2l6ZW9mKHByaXZjbWRfbW1hcF9l bnRyeV90KSk7CisgICAgaWYgKCBlbnRyaWVzID09IE5VTEwgKQorICAgICAgICByZXR1cm4gLUVO T01FTTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgcGFnZXM7IGkrKyApCisgICAgICAgIGVudHJp ZXNbaV0ubWZuID0gKGVsZi0+cHN0YXJ0ID4+IFBBR0VfU0hJRlQpICsgaTsKKworICAgIGVsZi0+ ZGVzdF9iYXNlID0geGNfbWFwX2ZvcmVpZ25fcmFuZ2VzKAorICAgICAgICBkb20tPnhjaCwgZG9t LT5ndWVzdF9kb21pZCwgcGFnZXMgPDwgUEFHRV9TSElGVCwKKyAgICAgICAgUFJPVF9SRUFEIHwg UFJPVF9XUklURSwgMSA8PCBQQUdFX1NISUZULAorICAgICAgICBlbnRyaWVzLCBwYWdlcyk7Cisg ICAgaWYgKCBlbGYtPmRlc3RfYmFzZSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIERPTVBSSU5U RigiJXM6IHVuYWJsZSB0byBtYXAgZ3Vlc3QgbWVtb3J5IHNwYWNlIiwgX19GVU5DVElPTl9fKTsK KyAgICAgICAgcmMgPSAtRUZBVUxUOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAg IGVsZi0+ZGVzdF9zaXplID0gcGFnZXMgKiBYQ19ET01fUEFHRV9TSVpFKGRvbSk7CisKKyAgICBy YyA9IGVsZl9sb2FkX2JpbmFyeShlbGYpOworICAgIGlmICggcmMgPCAwICkKKyAgICB7CisgICAg ICAgIERPTVBSSU5URigiJXM6IGZhaWxlZCB0byBsb2FkIGVsZiBiaW5hcnkiLCBfX0ZVTkNUSU9O X18pOworICAgICAgICByZXR1cm4gcmM7CisgICAgfQorCisgICAgbXVubWFwKGVsZi0+ZGVzdF9i YXNlLCBlbGYtPmRlc3Rfc2l6ZSk7CisKKyAgICByYyA9IG1vZHVsZXNfaW5pdChkb20sIGRvbS0+ dG90YWxfcGFnZXMgPDwgUEFHRV9TSElGVCwgZWxmLCAmbV9zdGFydCwKKyAgICAgICAgICAgICAg ICAgICAgICAmbV9lbmQpOworICAgIGlmICggcmMgIT0gMCApCisgICAgeworICAgICAgICBET01Q UklOVEYoIiVzOiBpbnN1ZmZpY2llbnQgc3BhY2UgdG8gbG9hZCBtb2R1bGVzLiIsIF9fRlVOQ1RJ T05fXyk7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICByYyA9IGxvYWRtb2R1bGVz KGRvbSwgbV9zdGFydCwgbV9lbmQsIGRvbS0+Z3Vlc3RfZG9taWQpOworICAgIGlmICggcmMgIT0g MCApCisgICAgeworICAgICAgICBET01QUklOVEYoIiVzOiB1bmFibGUgdG8gbG9hZCBtb2R1bGVz LiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICBkb20t PnBhcm1zLnBoeXNfZW50cnkgPSBlbGZfdXZhbChlbGYsIGVsZi0+ZWhkciwgZV9lbnRyeSk7CisK KyAgICBmcmVlKGVudHJpZXMpOworICAgIHJldHVybiAwOworCitlcnJvcjoKKyAgICBhc3NlcnQo cmMgIT0gMCk7CisgICAgZnJlZShlbnRyaWVzKTsKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSAqLworCitzdHJ1Y3QgeGNfZG9tX2xvYWRlciBodm1fbG9hZGVyID0gewor ICAgIC5uYW1lID0gIkhWTS1nZW5lcmljIiwKKyAgICAucHJvYmUgPSB4Y19kb21fcHJvYmVfaHZt X2tlcm5lbCwKKyAgICAucGFyc2VyID0geGNfZG9tX3BhcnNlX2h2bV9rZXJuZWwsCisgICAgLmxv YWRlciA9IHhjX2RvbV9sb2FkX2h2bV9rZXJuZWwsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQg cmVnaXN0ZXJfbG9hZGVyKHZvaWQpCit7CisgICAgeGNfZG9tX3JlZ2lzdGVyX2xvYWRlcigmaHZt X2xvYWRlcik7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBj LWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0 CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEveGVu L2luY2x1ZGUveGVuL2xpYmVsZi5oIGIveGVuL2luY2x1ZGUveGVuL2xpYmVsZi5oCmluZGV4IDYz OTMwNDAuLjAzZDQ0OWUgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL3hlbi9saWJlbGYuaAorKysg Yi94ZW4vaW5jbHVkZS94ZW4vbGliZWxmLmgKQEAgLTQyNCw2ICs0MjQsNyBAQCBzdHJ1Y3QgZWxm X2RvbV9wYXJtcyB7CiAgICAgdWludDY0X3QgZWxmX3BhZGRyX29mZnNldDsKICAgICB1aW50MzJf dCBmX3N1cHBvcnRlZFtYRU5GRUFUX05SX1NVQk1BUFNdOwogICAgIHVpbnQzMl90IGZfcmVxdWly ZWRbWEVORkVBVF9OUl9TVUJNQVBTXTsKKyAgICB1aW50MzJfdCBwaHlzX2VudHJ5OwogCiAgICAg LyogY2FsY3VsYXRlZCAqLwogICAgIHVpbnQ2NF90IHZpcnRfb2Zmc2V0OwotLSAKMS45LjUgKEFw cGxlIEdpdC01MC4zKQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0 cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==