From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH v3.1 12/15] xen/x86: populate PVHv2 Dom0 physical memory map Date: Sat, 29 Oct 2016 10:59:58 +0200 Message-ID: <1477731601-10926-13-git-send-email-roger.pau@citrix.com> References: <1477731601-10926-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.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1c0PVP-000297-0Y for xen-devel@lists.xenproject.org; Sat, 29 Oct 2016 09:00:47 +0000 In-Reply-To: <1477731601-10926-1-git-send-email-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com Cc: Andrew Cooper , Jan Beulich , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org Q3JhZnQgdGhlIERvbTAgZTgyMCBtZW1vcnkgbWFwIGFuZCBwb3B1bGF0ZSBpdC4KClNpZ25lZC1v ZmYtYnk6IFJvZ2VyIFBhdSBNb25uw6kgPHJvZ2VyLnBhdUBjaXRyaXguY29tPgotLS0KQ2M6IEph biBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4KQ2M6IEFuZHJldyBDb29wZXIgPGFuZHJldy5j b29wZXIzQGNpdHJpeC5jb20+Ci0tLQpDaGFuZ2VzIHNpbmNlIHYyOgogLSBJbnRyb2R1Y2UgZ2V0 X29yZGVyX2Zyb21fYnl0ZXNfZmxvb3IgYXMgYSBsb2NhbCBmdW5jdGlvbiB0bwogICBkb21haW5f YnVpbGQuYy4KIC0gUmVtb3ZlIGV4dHJhIGFzc2VydHMuCiAtIE1ha2UgaHZtX3BvcHVsYXRlX21l bW9yeV9yYW5nZSByZXR1cm4gYW4gZXJyb3IgY29kZSBpbnN0ZWFkIG9mIHBhbmlja2luZy4KIC0g Rml4IGNvbW1lbnRzIGFuZCBwcmludGtzLgogLSBVc2UgVUxMIHN1Zml4IGluc3RlYWQgb2YgY2Fz dGluZyB0byB1aW50NjRfdC4KIC0gUmVuYW1lIGh2bV9zZXR1cF92bXhfdW5yZXN0cmljdGVkX2d1 ZXN0IHRvCiAgIGh2bV9zZXR1cF92bXhfcmVhbG1vZGVfaGVscGVycy4KIC0gT25seSBzdWJzdHJh Y3QgdHdvIHBhZ2VzIGZyb20gdGhlIG1lbW9yeSBjYWxjdWxhdGlvbiwgdGhhdCB3aWxsIGJlIHVz ZWQKICAgYnkgdGhlIE1BRFQgcmVwbGFjZW1lbnQuCiAtIFJlbW92ZSBzb21lIGNvbW1lbnRzLgog LSBSZW1vdmUgcHJpbnRpbmcgYWxsb2NhdGlvbiBpbmZvcm1hdGlvbi4KIC0gRG9uJ3Qgc3Rhc2gg YW55IHBhZ2VzIGZvciB0aGUgTUFEVCwgVFNTIG9yIGlkZW50IFBULCB0aG9zZSB3aWxsIGJlCiAg IHN1YnRyYWN0ZWQgZGlyZWN0bHkgZnJvbSBSQU0gcmVnaW9ucyBvZiB0aGUgbWVtb3J5IG1hcC4K IC0gQ291bnQgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIGJlZm9yZSBjYWxsaW5nIHByb2Nlc3Nf cGVuZGluZ19zb2Z0aXJxcwogICB3aGVuIHBvcHVsYXRpbmcgdGhlIG1lbW9yeSBtYXAuCiAtIE1v dmUgdGhlIGluaXRpYWwgY2FsbCB0byBwcm9jZXNzX3BlbmRpbmdfc29mdGlycXMgaW50byBjb25z dHJ1Y3RfZG9tMCwKICAgYW5kIHJlbW92ZSB0aGUgb25lcyBmcm9tIGNvbnN0cnVjdF9kb20wX2h2 bSBhbmQgY29uc3RydWN0X2RvbTBfcHYuCiAtIE1ha2UgbWVtZmxhZ3MgZ2xvYmFsIHNvIGl0IGNh biBiZSBzaGFyZWQgYmV0d2VlbiBhbGxvY19jaHVuayBhbmQKICAgaHZtX3BvcHVsYXRlX21lbW9y eV9yYW5nZS4KCkNoYW5nZXMgc2luY2UgUkZDOgogLSBVc2UgSVNfQUxJR05FRCBpbnN0ZWFkIG9m IGNoZWNraW5nIHdpdGggUEFHRV9NQVNLLgogLSBVc2UgdGhlIG5ldyAlcEIgc3BlY2lmaWVyIGlu IG9yZGVyIHRvIHByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm0uCiAtIENyZWF0ZSBh IFZNODYgVFNTIGZvciBoYXJkd2FyZSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCB1bnJlc3RyaWN0ZWQg bW9kZS4KIC0gU3VidHJhY3QgZ3Vlc3QgUkFNIGZvciB0aGUgaWRlbnRpdHkgcGFnZSB0YWJsZSBh bmQgdGhlIFZNODYgVFNTLgogLSBTcGxpdCB0aGUgY3JlYXRpb24gb2YgdGhlIHVucmVzdHJpY3Rl ZCBtb2RlIGhlbHBlciBzdHJ1Y3R1cmVzIHRvIGEKICAgc2VwYXJhdGUgZnVuY3Rpb24uCiAtIFVz ZSBwcmVlbXB0aW9uIHdpdGggcGFnaW5nX3NldF9hbGxvY2F0aW9uLgogLSBVc2UgZ2V0X29yZGVy X2Zyb21fYnl0ZXNfZmxvb3IuCi0tLQogeGVuL2FyY2gveDg2L2RvbWFpbl9idWlsZC5jIHwgMjc1 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCiAxIGZpbGUgY2hh bmdlZCwgMjY2IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEveGVu L2FyY2gveDg2L2RvbWFpbl9idWlsZC5jIGIveGVuL2FyY2gveDg2L2RvbWFpbl9idWlsZC5jCmlu ZGV4IDJjOWViZjIuLmVjMWFjODkgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9kb21haW5fYnVp bGQuYworKysgYi94ZW4vYXJjaC94ODYvZG9tYWluX2J1aWxkLmMKQEAgLTIyLDYgKzIyLDcgQEAK ICNpbmNsdWRlIDx4ZW4vY29tcGF0Lmg+CiAjaW5jbHVkZSA8eGVuL2xpYmVsZi5oPgogI2luY2x1 ZGUgPHhlbi9wZm4uaD4KKyNpbmNsdWRlIDx4ZW4vZ3Vlc3RfYWNjZXNzLmg+CiAjaW5jbHVkZSA8 YXNtL3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+ CkBAIC00Myw2ICs0NCw5IEBAIHN0YXRpYyBsb25nIF9faW5pdGRhdGEgZG9tMF9ucnBhZ2VzOwog c3RhdGljIGxvbmcgX19pbml0ZGF0YSBkb20wX21pbl9ucnBhZ2VzOwogc3RhdGljIGxvbmcgX19p bml0ZGF0YSBkb20wX21heF9ucnBhZ2VzID0gTE9OR19NQVg7CiAKKy8qIFNpemUgb2YgdGhlIFZN ODYgVFNTIGZvciB2aXJ0dWFsIDgwODYgbW9kZSB0byB1c2UuICovCisjZGVmaW5lIEhWTV9WTTg2 X1RTU19TSVpFICAgMTI4CisKIC8qCiAgKiBkb20wX21lbT1bbWluOjxtaW5fYW10PixdW21heDo8 bWF4X2FtdD4sXVs8YW10Pl0KICAqIApAQCAtMTkwLDYgKzE5NCwxNCBAQCBzdHJ1Y3QgdmNwdSAq X19pbml0IGFsbG9jX2RvbTBfdmNwdTAoc3RydWN0IGRvbWFpbiAqZG9tMCkKICAgICByZXR1cm4g c2V0dXBfZG9tMF92Y3B1KGRvbTAsIDAsIGNwdW1hc2tfZmlyc3QoJmRvbTBfY3B1cykpOwogfQog CitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBnZXRfb3JkZXJfZnJvbV9ieXRlc19mbG9vcihw YWRkcl90IHNpemUpCit7CisgICAgdW5zaWduZWQgaW50IG9yZGVyOworCisgICAgb3JkZXIgPSBn ZXRfb3JkZXJfZnJvbV9ieXRlcyhzaXplICsgMSk7CisgICAgcmV0dXJuIG9yZGVyID4gMCA/IG9y ZGVyIC0gMSA6IG9yZGVyOworfQorCiAjaWZkZWYgQ09ORklHX1NIQURPV19QQUdJTkcKIGJvb2wg X19pbml0ZGF0YSBvcHRfZG9tMF9zaGFkb3c7CiBib29sZWFuX3BhcmFtKCJkb20wX3NoYWRvdyIs IG9wdF9kb20wX3NoYWRvdyk7CkBAIC0yMTMsMTEgKzIyNSwxMiBAQCBib29sZWFuX3BhcmFtKCJy by1ocGV0Iiwgcm9faHBldCk7CiAjZGVmaW5lIHJvdW5kX3BndXAoX3ApICAgICgoKF9wKSsoUEFH RV9TSVpFLTEpKSZQQUdFX01BU0spCiAjZGVmaW5lIHJvdW5kX3BnZG93bihfcCkgICgoX3ApJlBB R0VfTUFTSykKIAorc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXRkYXRhIG1lbWZsYWdzID0gTUVN Rl9ub19kbWF8TUVNRl9leGFjdF9ub2RlOworCiBzdGF0aWMgc3RydWN0IHBhZ2VfaW5mbyAqIF9f aW5pdCBhbGxvY19jaHVuaygKICAgICBzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIG1h eF9wYWdlcykKIHsKICAgICBzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdGRhdGEgbGFzdF9vcmRl ciA9IE1BWF9PUkRFUjsKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdGRhdGEgbWVtZmxh Z3MgPSBNRU1GX25vX2RtYXxNRU1GX2V4YWN0X25vZGU7CiAgICAgc3RydWN0IHBhZ2VfaW5mbyAq cGFnZTsKICAgICB1bnNpZ25lZCBpbnQgb3JkZXIgPSBnZXRfb3JkZXJfZnJvbV9wYWdlcyhtYXhf cGFnZXMpLCBmcmVlX29yZGVyOwogCkBAIC0zMDIsNyArMzE1LDggQEAgc3RhdGljIHVuc2lnbmVk IGxvbmcgX19pbml0IGNvbXB1dGVfZG9tMF9ucl9wYWdlcygKICAgICAgICAgICAgIGF2YWlsIC09 IG1heF9wZHggPj4gczsKICAgICB9CiAKLSAgICBuZWVkX3BhZ2luZyA9IG9wdF9kb20wX3NoYWRv dyB8fCAoaXNfcHZoX2RvbWFpbihkKSAmJiAhaW9tbXVfaGFwX3B0X3NoYXJlKTsKKyAgICBuZWVk X3BhZ2luZyA9IG9wdF9kb20wX3NoYWRvdyB8fCAoaGFzX2h2bV9jb250YWluZXJfZG9tYWluKGQp ICYmCisgICAgICAgICAgICAgICAgICAoIWlvbW11X2hhcF9wdF9zaGFyZSB8fCAhcGFnaW5nX21v ZGVfaGFwKGQpKSk7CiAgICAgZm9yICggOyA7IG5lZWRfcGFnaW5nID0gMCApCiAgICAgewogICAg ICAgICBucl9wYWdlcyA9IGRvbTBfbnJwYWdlczsKQEAgLTMzNCw3ICszNDgsOCBAQCBzdGF0aWMg dW5zaWduZWQgbG9uZyBfX2luaXQgY29tcHV0ZV9kb20wX25yX3BhZ2VzKAogICAgICAgICBhdmFp bCAtPSBkb20wX3BhZ2luZ19wYWdlcyhkLCBucl9wYWdlcyk7CiAgICAgfQogCi0gICAgaWYgKCAo cGFybXMtPnAybV9iYXNlID09IFVOU0VUX0FERFIpICYmIChkb20wX25ycGFnZXMgPD0gMCkgJiYK KyAgICBpZiAoIGlzX3B2X2RvbWFpbihkKSAmJgorICAgICAgICAgKHBhcm1zLT5wMm1fYmFzZSA9 PSBVTlNFVF9BRERSKSAmJiAoZG9tMF9ucnBhZ2VzIDw9IDApICYmCiAgICAgICAgICAoKGRvbTBf bWluX25ycGFnZXMgPD0gMCkgfHwgKG5yX3BhZ2VzID4gbWluX3BhZ2VzKSkgKQogICAgIHsKICAg ICAgICAgLyoKQEAgLTU0NSwxMSArNTYwLDEyIEBAIHN0YXRpYyBfX2luaXQgdm9pZCBwdmhfbWFw X2FsbF9pb21lbShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQogICAg IEFTU0VSVChucl9ob2xlcyA9PSAwKTsKIH0KIAotc3RhdGljIF9faW5pdCB2b2lkIHB2aF9zZXR1 cF9lODIwKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCitzdGF0aWMg X19pbml0IHZvaWQgaHZtX3NldHVwX2U4MjAoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9u ZyBucl9wYWdlcykKIHsKICAgICBzdHJ1Y3QgZTgyMGVudHJ5ICplbnRyeSwgKmVudHJ5X2d1ZXN0 OwogICAgIHVuc2lnbmVkIGludCBpOwogICAgIHVuc2lnbmVkIGxvbmcgcGFnZXMsIGN1cl9wYWdl cyA9IDA7CisgICAgdWludDY0X3Qgc3RhcnQsIGVuZDsKIAogICAgIC8qCiAgICAgICogQ3JhZnQg dGhlIGU4MjAgbWVtb3J5IG1hcCBmb3IgRG9tMCBiYXNlZCBvbiB0aGUgaGFyZHdhcmUgZTgyMCBt YXAuCkBAIC01NzcsOCArNTkzLDE5IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBwdmhfc2V0dXBfZTgy MChzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQogICAgICAgICAgICAg Y29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICAqZW50cnlfZ3Vlc3QgPSAqZW50cnk7Ci0g ICAgICAgIHBhZ2VzID0gUEZOX1VQKGVudHJ5X2d1ZXN0LT5zaXplKTsKKyAgICAgICAgLyoKKyAg ICAgICAgICogTWFrZSBzdXJlIHRoZSBzdGFydCBhbmQgbGVuZ3RoIGFyZSBhbGlnbmVkIHRvIFBB R0VfU0laRSwgYmVjYXVzZQorICAgICAgICAgKiB0aGF0J3MgdGhlIG1pbmltdW0gZ3JhbnVsYXJp dHkgb2YgdGhlIDJuZCBzdGFnZSB0cmFuc2xhdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHN0 YXJ0ID0gUk9VTkRVUChlbnRyeS0+YWRkciwgUEFHRV9TSVpFKTsKKyAgICAgICAgZW5kID0gKGVu dHJ5LT5hZGRyICsgZW50cnktPnNpemUpICYgUEFHRV9NQVNLOworICAgICAgICBpZiAoIHN0YXJ0 ID49IGVuZCApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBlbnRyeV9ndWVzdC0+ dHlwZSA9IEU4MjBfUkFNOworICAgICAgICBlbnRyeV9ndWVzdC0+YWRkciA9IHN0YXJ0OworICAg ICAgICBlbnRyeV9ndWVzdC0+c2l6ZSA9IGVuZCAtIHN0YXJ0OworICAgICAgICBwYWdlcyA9IFBG Tl9ET1dOKGVudHJ5X2d1ZXN0LT5zaXplKTsKICAgICAgICAgaWYgKCAoY3VyX3BhZ2VzICsgcGFn ZXMpID4gbnJfcGFnZXMgKQogICAgICAgICB7CiAgICAgICAgICAgICAvKiBUcnVuY2F0ZSByZWdp b24gKi8KQEAgLTEwMTAsOCArMTAzNyw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGNvbnN0cnVjdF9k b20wX3B2KAogICAgIEJVR19PTihkLT52Y3B1WzBdID09IE5VTEwpOwogICAgIEJVR19PTih2LT5p c19pbml0aWFsaXNlZCk7CiAKLSAgICBwcm9jZXNzX3BlbmRpbmdfc29mdGlycXMoKTsKLQogICAg IHByaW50aygiKioqIExPQURJTkcgRE9NQUlOIDAgKioqXG4iKTsKIAogICAgIGQtPm1heF9wYWdl cyA9IH4wVTsKQEAgLTE2MzcsNyArMTY2Miw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGNvbnN0cnVj dF9kb20wX3B2KAogICAgICAgICBkb20wX3VwZGF0ZV9waHlzbWFwKGQsIHBmbiwgbWZuLCAwKTsK IAogICAgICAgICBwdmhfbWFwX2FsbF9pb21lbShkLCBucl9wYWdlcyk7Ci0gICAgICAgIHB2aF9z ZXR1cF9lODIwKGQsIG5yX3BhZ2VzKTsKKyAgICAgICAgaHZtX3NldHVwX2U4MjAoZCwgbnJfcGFn ZXMpOwogICAgIH0KIAogICAgIGlmICggZC0+ZG9tYWluX2lkID09IGhhcmR3YXJlX2RvbWlkICkK QEAgLTE2NTMsMTUgKzE2NzgsMjQ2IEBAIG91dDoKICAgICByZXR1cm4gcmM7CiB9CiAKKy8qIFBv cHVsYXRlIGFuIEhWTSBtZW1vcnkgcmFuZ2UgdXNpbmcgdGhlIGJpZ2dlc3QgcG9zc2libGUgb3Jk ZXIuICovCitzdGF0aWMgaW50IF9faW5pdCBodm1fcG9wdWxhdGVfbWVtb3J5X3JhbmdlKHN0cnVj dCBkb21haW4gKmQsIHVpbnQ2NF90IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDY0X3Qgc2l6ZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgb3Jk ZXIsIGkgPSAwOworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CisgICAgaW50IHJjOworI2Rl ZmluZSBNQVBfTUFYX0lURVIgNjQKKworICAgIEFTU0VSVChJU19BTElHTkVEKHNpemUsIFBBR0Vf U0laRSkgJiYgSVNfQUxJR05FRChzdGFydCwgUEFHRV9TSVpFKSk7CisKKyAgICBvcmRlciA9IE1B WF9PUkRFUjsKKyAgICB3aGlsZSAoIHNpemUgIT0gMCApCisgICAgeworICAgICAgICBvcmRlciA9 IG1pbihnZXRfb3JkZXJfZnJvbV9ieXRlc19mbG9vcihzaXplKSwgb3JkZXIpOworICAgICAgICBw YWdlID0gYWxsb2NfZG9taGVhcF9wYWdlcyhkLCBvcmRlciwgbWVtZmxhZ3MpOworICAgICAgICBp ZiAoIHBhZ2UgPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggb3JkZXIgPT0g MCAmJiBtZW1mbGFncyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogVHJ5IGFn YWluIHdpdGhvdXQgYW55IG1lbWZsYWdzLiAqLworICAgICAgICAgICAgICAgIG1lbWZsYWdzID0g MDsKKyAgICAgICAgICAgICAgICBvcmRlciA9IE1BWF9PUkRFUjsKKyAgICAgICAgICAgICAgICBj b250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggb3JkZXIgPT0gMCApCisg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUg bWVtb3J5IHdpdGggb3JkZXIgMCFcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVN OworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3JkZXItLTsKKyAgICAgICAgICAgIGNvbnRp bnVlOworICAgICAgICB9CisKKyAgICAgICAgcmMgPSBndWVzdF9waHlzbWFwX2FkZF9wYWdlKGQs IF9nZm4oUEZOX0RPV04oc3RhcnQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9tZm4ocGFnZV90b19tZm4ocGFnZSkpLCBvcmRlcik7CisgICAgICAgIGlmICggcmMgIT0g MCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50aygiRmFpbGVkIHRvIHBvcHVsYXRlIG1l bW9yeTogWyUiIFBSSXg2NCAiLCUiIFBSSXg2NCAiKSAlZFxuIiwKKyAgICAgICAgICAgICAgICAg ICBzdGFydCwgc3RhcnQgKyAoKDFVTEwpIDw8IChvcmRlciArIFBBR0VfU0hJRlQpKSwgcmMpOwor ICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgIH0KKyAgICAgICAgc3RhcnQgKz0g MVVMTCA8PCAob3JkZXIgKyBQQUdFX1NISUZUKTsKKyAgICAgICAgc2l6ZSAtPSAxVUxMIDw8IChv cmRlciArIFBBR0VfU0hJRlQpOworICAgICAgICBpZiAoICgrK2kgJSBNQVBfTUFYX0lURVIpID09 IDAgKQorICAgICAgICAgICAgcHJvY2Vzc19wZW5kaW5nX3NvZnRpcnFzKCk7CisgICAgfQorCisg ICAgcmV0dXJuIDA7CisjdW5kZWYgTUFQX01BWF9JVEVSCit9CisKK3N0YXRpYyBpbnQgX19pbml0 IGh2bV9zdGVhbF9yYW0oc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBzaXplLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkcl90IGxpbWl0LCBwYWRkcl90ICphZGRy KQoreworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yICggaSA9IDE7IGkgPD0gZC0+YXJj aC5ucl9lODIwOyBpKysgKQorICAgIHsKKyAgICAgICAgc3RydWN0IGU4MjBlbnRyeSAqZW50cnkg PSAmZC0+YXJjaC5lODIwW2QtPmFyY2gubnJfZTgyMCAtIGldOworCisgICAgICAgIGlmICggZW50 cnktPnR5cGUgIT0gRTgyMF9SQU0gfHwgZW50cnktPnNpemUgPCBzaXplICkKKyAgICAgICAgICAg IGNvbnRpbnVlOworCisgICAgICAgIC8qIFN1YnRyYWN0IGZyb20gdGhlIGJlZ2lubmluZy4gKi8K KyAgICAgICAgaWYgKCBlbnRyeS0+YWRkciArIHNpemUgPCBsaW1pdCAmJiBlbnRyeS0+YWRkciA+ PSBNQigxKSApCisgICAgICAgIHsKKyAgICAgICAgICAgICphZGRyID0gZW50cnktPmFkZHI7Cisg ICAgICAgICAgICBlbnRyeS0+YWRkciArPSBzaXplOworICAgICAgICAgICAgZW50cnktPnNpemUg LT0gc2l6ZTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAg cmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGh2bV9zZXR1cF92bXhfcmVh bG1vZGVfaGVscGVycyhzdHJ1Y3QgZG9tYWluICpkKQoreworICAgIHAybV90eXBlX3QgcDJtdDsK KyAgICB1aW50MzJfdCByYywgKmlkZW50X3B0OworICAgIHVpbnQ4X3QgKnRzczsKKyAgICBtZm5f dCBtZm47CisgICAgcGFkZHJfdCBnYWRkcjsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIC8q CisgICAgICogU3RlYWwgc29tZSBzcGFjZSBmcm9tIHRoZSBsYXN0IGZvdW5kIFJBTSByZWdpb24u IE9uZSBwYWdlIHdpbGwgYmUKKyAgICAgKiB1c2VkIGZvciB0aGUgaWRlbnRpdHkgcGFnZSB0YWJs ZXMsIGFuZCB0aGUgcmVtYWluaW5nIHNwYWNlIGZvciB0aGUKKyAgICAgKiBWTTg2IFRTUy4gTm90 ZSB0aGF0IGFmdGVyIHRoaXMgbm90IGFsbCBlODIwIHJlZ2lvbnMgd2lsbCBiZSBhbGlnbmVkCisg ICAgICogdG8gUEFHRV9TSVpFLgorICAgICAqLworICAgIGlmICggaHZtX3N0ZWFsX3JhbShkLCBQ QUdFX1NJWkUgKyBIVk1fVk04Nl9UU1NfU0laRSwgVUxPTkdfTUFYLCAmZ2FkZHIpICkKKyAgICB7 CisgICAgICAgIHByaW50aygiVW5hYmxlIHRvIGZpbmQgbWVtb3J5IHRvIHN0YXNoIHRoZSBpZGVu dGl0eSBtYXAgYW5kIFRTU1xuIik7CisgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgIH0KKwor ICAgIC8qCisgICAgICogSWRlbnRpdHktbWFwIHBhZ2UgdGFibGUgaXMgcmVxdWlyZWQgZm9yIHJ1 bm5pbmcgd2l0aCBDUjAuUEc9MAorICAgICAqIHdoZW4gdXNpbmcgSW50ZWwgRVBULiBDcmVhdGUg YSAzMi1iaXQgbm9uLVBBRSBwYWdlIGRpcmVjdG9yeSBvZgorICAgICAqIHN1cGVycGFnZXMuCisg ICAgICovCisgICAgaWRlbnRfcHQgPSBtYXBfZG9tYWluX2dmbihwMm1fZ2V0X2hvc3RwMm0oZCks IF9nZm4oUEZOX0RPV04oZ2FkZHIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZt Zm4sICZwMm10LCAwLCAmcmMpOworICAgIGlmICggaWRlbnRfcHQgPT0gTlVMTCApCisgICAgewor ICAgICAgICBwcmludGsoIlVuYWJsZSB0byBtYXAgaWRlbnRpdHkgcGFnZSB0YWJsZXNcbiIpOwor ICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICB9CisgICAgZm9yICggaSA9IDA7IGkgPCBQQUdF X1NJWkUgLyBzaXplb2YoKmlkZW50X3B0KTsgaSsrICkKKyAgICAgICAgaWRlbnRfcHRbaV0gPSAo KGkgPDwgMjIpIHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUiB8CisgICAg ICAgICAgICAgICAgICAgICAgIF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9Q U0UpOworICAgIHVubWFwX2RvbWFpbl9wYWdlKGlkZW50X3B0KTsKKyAgICBwdXRfcGFnZShtZm5f dG9fcGFnZShtZm5feChtZm4pKSk7CisgICAgZC0+YXJjaC5odm1fZG9tYWluLnBhcmFtc1tIVk1f UEFSQU1fSURFTlRfUFRdID0gZ2FkZHI7CisgICAgZ2FkZHIgKz0gUEFHRV9TSVpFOworICAgIEFT U0VSVChJU19BTElHTkVEKGdhZGRyLCBQQUdFX1NJWkUpKTsKKworICAgIHRzcyA9IG1hcF9kb21h aW5fZ2ZuKHAybV9nZXRfaG9zdHAybShkKSwgX2dmbihQRk5fRE9XTihnYWRkcikpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICZtZm4sICZwMm10LCAwLCAmcmMpOworICAgIGlmICggdHNzID09 IE5VTEwgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJVbmFibGUgdG8gbWFwIFZNODYgVFNTIGFy ZWFcbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBtZW1zZXQodHNzLCAwLCBI Vk1fVk04Nl9UU1NfU0laRSk7CisgICAgdW5tYXBfZG9tYWluX3BhZ2UodHNzKTsKKyAgICBwdXRf cGFnZShtZm5fdG9fcGFnZShtZm5feChtZm4pKSk7CisgICAgZC0+YXJjaC5odm1fZG9tYWluLnBh cmFtc1tIVk1fUEFSQU1fVk04Nl9UU1NdID0gZ2FkZHI7CisKKyAgICByZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBfX2luaXQgaHZtX3NldHVwX3AybShzdHJ1Y3QgZG9tYWluICpkKQoreworICAg IHN0cnVjdCB2Y3B1ICpzYXZlZF9jdXJyZW50LCAqdiA9IGQtPnZjcHVbMF07CisgICAgdW5zaWdu ZWQgbG9uZyBucl9wYWdlczsKKyAgICBpbnQgaSwgcmM7CisgICAgYm9vbCBwcmVlbXB0ZWQ7CisK KyAgICBucl9wYWdlcyA9IGNvbXB1dGVfZG9tMF9ucl9wYWdlcyhkLCBOVUxMLCAwKTsKKworICAg IGh2bV9zZXR1cF9lODIwKGQsIG5yX3BhZ2VzKTsKKyAgICBkbyB7CisgICAgICAgIHByZWVtcHRl ZCA9IGZhbHNlOworICAgICAgICBwYWdpbmdfc2V0X2FsbG9jYXRpb24oZCwgZG9tMF9wYWdpbmdf cGFnZXMoZCwgbnJfcGFnZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZWVt cHRlZCk7CisgICAgICAgIHByb2Nlc3NfcGVuZGluZ19zb2Z0aXJxcygpOworICAgIH0gd2hpbGUg KCBwcmVlbXB0ZWQgKTsKKworICAgIC8qCisgICAgICogU3BlY2lhbCB0cmVhdG1lbnQgZm9yIG1l bW9yeSA8IDFNQjoKKyAgICAgKiAgLSBDb3B5IHRoZSBkYXRhIGluIGU4MjAgcmVnaW9ucyBtYXJr ZWQgYXMgUkFNIChCREEsIEJvb3RTZWN0b3IuLi4pLgorICAgICAqICAtIElkZW50aXR5IG1hcCBl dmVyeXRoaW5nIGVsc2UuCisgICAgICogTkI6IGFsbCB0aGlzIG9ubHkgbWFrZXMgc2Vuc2UgaWYg Ym9vdGVkIGZyb20gbGVnYWN5IEJJT1Nlcy4KKyAgICAgKiBOQjI6IHJlZ2lvbnMgbWFya2VkIGFz IFJBTSBpbiB0aGUgbWVtb3J5IG1hcCBhcmUgYmFja2VkIGJ5IFJBTSBwYWdlcworICAgICAqIGlu IHRoZSBwMm0sIGFuZCB0aGUgb3JpZ2luYWwgZGF0YSBpcyBjb3BpZWQgb3Zlci4gVGhpcyBpcyBk b25lIGJlY2F1c2UKKyAgICAgKiBhdCBsZWFzdCBGcmVlQlNEIHBsYWNlcyB0aGUgQVAgYm9vdCB0 cmFtcG9saW5lIGluIGEgUkFNIHJlZ2lvbiBmb3VuZAorICAgICAqIGJlbG93IHRoZSBmaXJzdCBN QiwgYW5kIHRoZSByZWFsLW1vZGUgZW11bGF0b3IgZm91bmQgaW4gWGVuIGNhbm5vdAorICAgICAq IGRlYWwgd2l0aCBjb2RlIHRoYXQgcmVzaWRlcyBpbiBndWVzdCBwYWdlcyBtYXJrZWQgYXMgTU1J Ty4gVGhpcyBjYW4KKyAgICAgKiBjYXVzZSBwcm9ibGVtcyBpZiB0aGUgbWVtb3J5IG1hcCBpcyBu b3QgY29ycmVjdCwgYW5kIGZvciBleGFtcGxlIHRoZQorICAgICAqIEVCREEgb3IgdGhlIHZpZGVv IFJPTSByZWdpb24gaXMgbWFya2VkIGFzIFJBTS4KKyAgICAgKi8KKyAgICByYyA9IG1vZGlmeV9p ZGVudGl0eV9tbWlvKGQsIDAsIFBGTl9ET1dOKE1CKDEpKSwgdHJ1ZSk7CisgICAgaWYgKCByYyAp CisgICAgeworICAgICAgICBwcmludGsoIkZhaWxlZCB0byBpZGVudGl0eSBtYXAgbG93IDFNQjog JWRcbiIsIHJjKTsKKyAgICAgICAgcmV0dXJuIHJjOworICAgIH0KKworICAgIC8qIFBvcHVsYXRl IG1lbW9yeSBtYXAuICovCisgICAgZm9yICggaSA9IDA7IGkgPCBkLT5hcmNoLm5yX2U4MjA7IGkr KyApCisgICAgeworICAgICAgICBpZiAoIGQtPmFyY2guZTgyMFtpXS50eXBlICE9IEU4MjBfUkFN ICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJjID0gaHZtX3BvcHVsYXRlX21l bW9yeV9yYW5nZShkLCBkLT5hcmNoLmU4MjBbaV0uYWRkciwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGQtPmFyY2guZTgyMFtpXS5zaXplKTsKKyAgICAgICAgaWYgKCBy YyApCisgICAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgIGlmICggZC0+YXJjaC5lODIwW2ld LmFkZHIgPCBNQigxKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZW5k ID0gbWluX3QodW5zaWduZWQgbG9uZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5h cmNoLmU4MjBbaV0uYWRkciArIGQtPmFyY2guZTgyMFtpXS5zaXplLCBNQigxKSk7CisKKyAgICAg ICAgICAgIHNhdmVkX2N1cnJlbnQgPSBjdXJyZW50OworICAgICAgICAgICAgc2V0X2N1cnJlbnQo dik7CisgICAgICAgICAgICByYyA9IGh2bV9jb3B5X3RvX2d1ZXN0X3BoeXMoZC0+YXJjaC5lODIw W2ldLmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFkZHJf dG9fdmlydChkLT5hcmNoLmU4MjBbaV0uYWRkciksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZW5kIC0gZC0+YXJjaC5lODIwW2ldLmFkZHIpOworICAgICAgICAgICAg c2V0X2N1cnJlbnQoc2F2ZWRfY3VycmVudCk7CisgICAgICAgICAgICBpZiAoIHJjICE9IEhWTUNP UFlfb2theSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRrKCJVbmFibGUg dG8gY29weSBSQU0gcmVnaW9uICUjbHggLSAlI2x4XG4iLAorICAgICAgICAgICAgICAgICAgICAg ICBkLT5hcmNoLmU4MjBbaV0uYWRkciwgZW5kKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVG QVVMVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggY3B1X2hh c192bXggJiYgcGFnaW5nX21vZGVfaGFwKGQpICYmICF2bXhfdW5yZXN0cmljdGVkX2d1ZXN0KHYp ICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFNpbmNlIERvbTAgY2Fubm90IGJlIG1p Z3JhdGVkLCB3ZSB3aWxsIG9ubHkgc2V0dXAgdGhlCisgICAgICAgICAqIHVucmVzdHJpY3RlZCBn dWVzdCBoZWxwZXJzIGlmIHRoZXkgYXJlIG5lZWRlZCBieSB0aGUgY3VycmVudAorICAgICAgICAg KiBoYXJkd2FyZSB3ZSBhcmUgcnVubmluZyBvbi4KKyAgICAgICAgICovCisgICAgICAgIHJjID0g aHZtX3NldHVwX3ZteF9yZWFsbW9kZV9oZWxwZXJzKGQpOworICAgICAgICBpZiAoIHJjICkKKyAg ICAgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGlj IGludCBfX2luaXQgY29uc3RydWN0X2RvbTBfaHZtKHN0cnVjdCBkb21haW4gKmQsIGNvbnN0IG1v ZHVsZV90ICppbWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBsb25nIGltYWdlX2hlYWRyb29tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1vZHVsZV90ICppbml0cmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqKCpib290c3RyYXBfbWFwKShjb25zdCBtb2R1bGVfdCAqKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjbWRsaW5lKQogeworICAgIGludCBy YzsKIAogICAgIHByaW50aygiKiogQnVpbGRpbmcgYSBQVkggRG9tMCAqKlxuIik7CiAKKyAgICAv KiBTYW5pdHkhICovCisgICAgQlVHX09OKGQtPmRvbWFpbl9pZCk7CisgICAgQlVHX09OKCFkLT52 Y3B1WzBdKTsKKworICAgIGlvbW11X2h3ZG9tX2luaXQoZCk7CisKKyAgICByYyA9IGh2bV9zZXR1 cF9wMm0oZCk7CisgICAgaWYgKCByYyApCisgICAgeworICAgICAgICBwcmludGsoIkZhaWxlZCB0 byBzZXR1cCBEb20wIHBoeXNpY2FsIG1lbW9yeSBtYXBcbiIpOworICAgICAgICByZXR1cm4gcmM7 CisgICAgfQorCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE2NzAsNiArMTkyNiw3IEBAIGludCBf X2luaXQgY29uc3RydWN0X2RvbTAoc3RydWN0IGRvbWFpbiAqZCwgY29uc3QgbW9kdWxlX3QgKmlt YWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICooKmJvb3RzdHJhcF9tYXApKGNv bnN0IG1vZHVsZV90ICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjbWRsaW5l KQogeworICAgIHByb2Nlc3NfcGVuZGluZ19zb2Z0aXJxcygpOwogCiAgICAgcmV0dXJuIChpc19o dm1fZG9tYWluKGQpID8gY29uc3RydWN0X2RvbTBfaHZtIDogY29uc3RydWN0X2RvbTBfcHYpCiAg ICAgICAgICAgIChkLCBpbWFnZSwgaW1hZ2VfaGVhZHJvb20sIGluaXRyZCxib290c3RyYXBfbWFw LCBjbWRsaW5lKTsKLS0gCjIuNy40IChBcHBsZSBHaXQtNjYpCgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4t ZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==