From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: [RFC 18/22] xen/arm: p2m: Introduce p2m_set_entry and __p2m_set_entry Date: Thu, 28 Jul 2016 15:51:41 +0100 Message-ID: <1469717505-8026-19-git-send-email-julien.grall@arm.com> References: <1469717505-8026-1-git-send-email-julien.grall@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1469717505-8026-1-git-send-email-julien.grall@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: proskurin@sec.in.tum.de, Julien Grall , sstabellini@kernel.org, steve.capper@arm.com, wei.chen@linaro.org List-Id: xen-devel@lists.xenproject.org VGhlIEFSTSBhcmNoaXRlY3R1cmUgbWFuZGF0ZXMgdG8gdXNlIG9mIGEgYnJlYWstYmVmb3JlLW1h a2Ugc2VxdWVuY2UKd2hlbiBjaGFuZ2luZyB0cmFuc2xhdGlvbiBlbnRyaWVzIGlmIHRoZSBwYWdl IHRhYmxlIGlzIHNoYXJlZCBiZXR3ZWVuCm11bHRpcGxlIENQVXMgd2hlbmV2ZXIgYSB2YWxpZCBl bnRyeSBpcyByZXBsYWNlZCBieSBhbm90aGVyIHZhbGlkIGVudHJ5CihzZWUgRDQuNy4xIGluIEFS TSBEREkgMDQ4N0EuaiBmb3IgbW9yZSBkZXRhaWxzKS4KClRoZSBicmVhay1iZWZvcmUtbWFrZSBz ZXF1ZW5jZSBjYW4gYmUgZGl2aWRlZCBpbiB0aGUgZm9sbG93aW5nIHN0ZXBzOgogICAgMSkgSW52 YWxpZGF0ZSB0aGUgb2xkIGVudHJ5IGluIHRoZSBwYWdlIHRhYmxlCiAgICAyKSBJc3N1ZSBhIFRM QiBpbnZhbGlkYXRpb24gaW5zdHJ1Y3Rpb24gZm9yIHRoZSBhZGRyZXNzIGFzc29jaWF0ZWQKICAg IHRvIHRoaXMgZW50cnkKICAgIDMpIFdyaXRlIHRoZSBuZXcgZW50cnkKClRoZSBjdXJyZW50IFAy TSBjb2RlIGltcGxlbWVudGVkIGluIGFwcGx5X29uZV9sZXZlbCBkb2VzIG5vdCByZXNwZWN0CnRo aXMgc2VxdWVuY2UgYW5kIG1heSByZXN1bHQgdG8gYnJlYWsgY29oZXJlbmN5IG9uIHNvbWUgcHJv Y2Vzc29ycy4KCkFkYXB0aW5nIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHRvIHVzZSB0aGUg YnJlYWstYmVmb3JlLW1ha2UKc2VxdWVuY2Ugd291bGQgaW1wbHkgc29tZSBjb2RlIGR1cGxpY2F0 aW9uIGFuZCBtb3JlIFRMQnMgaW52YWxpZGF0aW9uCnRoYW4gbmVjZXNzYXJ5LiBGb3IgaW5zdGFu Y2UsIGlmIHdlIGFyZSByZXBsYWNpbmcgYSA0S0IgcGFnZSBhbmQgdGhlCmN1cnJlbnQgbWFwcGlu ZyBpbiB0aGUgUDJNIGlzIHVzaW5nIGEgMUdCIHN1cGVycGFnZSwgdGhlIGZvbGxvd2luZyBzdGVw cwp3aWxsIGhhcHBlbjoKICAgIDEpIFNoYXR0ZXIgdGhlIDFHQiBzdXBlcnBhZ2UgaW50byBhIHNl cmllcyBvZiAyTUIgc3VwZXJwYWdlcwogICAgMikgU2hhdHRlciB0aGUgMk1CIHN1cGVycGFnZSBp bnRvIGEgc2VyaWVzIG9mIDRLQiBwYWdlcwogICAgMykgUmVwbGFjZSB0aGUgNEtCIHBhZ2UKCkFz IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGlzIHNoYXR0ZXJpbmcgd2hpbGUgZGVzY2VuZGlu ZyBhbmQgaW5zdGFsbAp0aGUgbWFwcGluZywgWGVuIHdvdWxkIG5lZWQgdG8gaXNzdWUgMyBUTEIg aW52YWxpZGF0aW9uIGluc3RydWN0aW9ucwp3aGljaCBpcyBjbGVhcmx5IGluZWZmaWNpZW50LgoK RnVydGhlcm1vcmUsIGFsbCB0aGUgb3BlcmF0aW9ucyB3aGljaCBtb2RpZnkgdGhlIHBhZ2UgdGFi bGUgYXJlIHVzaW5nCnRoZSBzYW1lIHNrZWxldG9uLiBJdCBpcyBtb3JlIGNvbXBsaWNhdGVkIHRv IG1haW50YWluIGRpZmZlcmVudCBjb2RlIHBhdGhzCnRoYW4gaGF2aW5nIGEgZ2VuZXJpYyBmdW5j dGlvbiB0aGF0IHNldCBhbiBlbnRyeSBhbmQgdGFrZSBjYXJlIG9mIHRoZQpicmVhay1iZWZvcmUt bWFrZSBzZXF1ZW5jZS4KClRoZSBuZXcgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gdGhlIHg4 NiBFUFQgb25lIHdoaWNoLCBJIHRoaW5rLApmaXRzIHF1aXRlIHdlbGwgZm9yIHRoZSBicmVhay1i ZWZvcmUtbWFrZSBzZXF1ZW5jZSB3aGlsc3Qga2VlcGluZwp0aGUgY29kZSBzaW1wbGUuCgpUaGUg bWFpbiBmdW5jdGlvbiBvZiB0aGUgbmV3IGltcGxlbWVudGF0aW9uIGlzIF9fcDJtX2dldF9lbnRy eS4gSXQgd2lsbApvbmx5IHdvcmsgb24gbWFwcGluZyB0aGF0IGFyZSBhbGlnbmVkIHRvIGEgYmxv Y2sgZW50cnkgaW4gdGhlIHBhZ2UgdGFibGUKKGkuZSAxR0IsIDJNQiwgNEtCIHdoZW4gdXNpbmcg YSA0S0IgZ3JhbnVsYXJpdHkpLgoKQW5vdGhlciBmdW5jdGlvbiwgcDJtX2dldF9lbnRyeSwgaXMg cHJvdmlkZWQgdG8gYnJlYWsgZG93biBpcyByZWdpb24KaW50byBtYXBwaW5nIHRoYXQgaXMgYWxp Z25lZCB0byBhIGJsb2NrIGVudHJ5LgoKTm90ZSB0aGF0IHRvIGtlZXAgdGhpcyBwYXRjaCAic21h bGwiLCB0aGVyZSBhcmUgbm8gY2FsbGVyIG9mIHRob3NlCmZ1bmN0aW9ucyBhZGRlZCBpbiB0aGlz IHBhdGNoICh0aGV5IHdpbGwgYmUgYWRkZWQgaW4gZm9sbG93LXVwIHBhdGNoZXMpLgoKU2lnbmVk LW9mZi1ieTogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KCi0tLQogICAgSSBu ZWVkIHRvIGZpbmQgdGhlIGltcGFjdCBvZiB0aGlzIG5ldyBpbXBsZW1lbnRhdGlvbiBvbiBBUk0z MiBiZWNhdXNlCiAgICB0aGUgZG9taGVhcCBpcyBub3QgYWx3YXlzIG1hcHBlZC4gVGhpcyBtZWFu cyB0aGF0IFhlbiBuZWVkcyB0byBtYXAvdW5tYXAKICAgIGV2ZXJ5dGltZSB0aGUgcGFnZSBhc3Nv Y2lhdGVkIHRvIHRoZSBwYWdlIHRhYmxlLiBJdCBtaWdodCBiZSBwb3NzaWJsZQogICAgdG8gcmUt dXNlIHNvbWUgY2FjaGluZyBzdHJ1Y3R1cmUgYXMgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24g ZG9lcwogICAgb3IgcmV3b3JrIHRoZSB3YXkgYSBkb21oZWFwIGlzIG1hcHBlZC91bm1hcHBlZC4K CiAgICBBbHNvLCB0aGlzIGNvZGUgc3RpbGwgY29udGFpbiBmZXcgVE9ET3MgbW9zdGx5IHRvIGFk ZCBzYW5pdHkKICAgIGNoZWNrcyBhbmQgZmV3IG9wdGltaXphdGlvbi4gVGhlIElPTU1VIGlzIG5v dCB5ZXQgc3VwcG9ydGVkLgotLS0KIHhlbi9hcmNoL2FybS9wMm0uYyB8IDMzNSArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5n ZWQsIDMzNSBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3AybS5jIGIv eGVuL2FyY2gvYXJtL3AybS5jCmluZGV4IGM5M2U1NTQuLjI5N2IxNzYgMTAwNjQ0Ci0tLSBhL3hl bi9hcmNoL2FybS9wMm0uYworKysgYi94ZW4vYXJjaC9hcm0vcDJtLmMKQEAgLTc1MCw2ICs3NTAs MzQxIEBAIHN0YXRpYyB2b2lkIHAybV9wdXRfbDNfcGFnZShtZm5fdCBtZm4sIHAybV90eXBlX3Qg dHlwZSkKICAgICB9CiB9CiAKKyNpZiAwCisvKiBGcmVlIGxwYWUgc3ViLXRyZWUgYmVoaW5kIGFu IGVudHJ5ICovCitzdGF0aWMgdm9pZCBwMm1fZnJlZV9lbnRyeShzdHJ1Y3QgcDJtX2RvbWFpbiAq cDJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbHBhZV90IGVudHJ5LCB1bnNpZ25lZCBp bnQgbGV2ZWwpCit7CisgICAgdW5zaWduZWQgaW50IGk7CisgICAgbHBhZV90ICp0YWJsZTsKKyAg ICBtZm5fdCBtZm47CisKKyAgICAvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZSBlbnRyeSBpcyBpbnZh bGlkIG9yIGEgc3VwZXItcGFnZSAqLworICAgIGlmICggIXAybV92YWxpZChlbnRyeSkgfHwgcDJt X2lzX3N1cGVycGFnZShlbnRyeSwgbGV2ZWwpICkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg KCBsZXZlbCA9PSAzICkKKyAgICB7CisgICAgICAgIHAybV9wdXRfbDNfcGFnZShfbWZuKGVudHJ5 LnAybS5iYXNlKSwgZW50cnkucDJtLnR5cGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg ICAgdGFibGUgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihlbnRyeS5wMm0uYmFzZSkpOworICAgIGZv ciAoIGkgPSAwOyBpIDwgTFBBRV9FTlRSSUVTOyBpKysgKQorICAgICAgICBwMm1fZnJlZV9lbnRy eShwMm0sICoodGFibGUgKyBpKSwgbGV2ZWwgKyAxKTsKKworICAgIHVubWFwX2RvbWFpbl9wYWdl KHRhYmxlKTsKKworICAgIC8qCisgICAgICogTWFrZSBzdXJlIGFsbCB0aGUgcmVmZXJlbmNlcyBp biB0aGUgVExCIGhhdmUgYmVlbiByZW1vdmVkIGJlZm9yZQorICAgICAqIGZyZWluZyB0aGUgaW50 ZXJtZWRpYXRlIHBhZ2UgdGFibGUuCisgICAgICogWFhYOiBTaG91bGQgd2UgZGVmZXIgdGhlIGZy ZWUgb2YgdGhlIHBhZ2UgdGFibGUgdG8gYXZvaWQgdGhlCisgICAgICogZmx1c2g/CisgICAgICov CisgICAgaWYgKCBwMm0tPm5lZWRfZmx1c2ggKQorICAgICAgICBwMm1fZmx1c2hfdGxiX3N5bmMo cDJtKTsKKworICAgIG1mbiA9IF9tZm4oZW50cnkucDJtLmJhc2UpOworICAgIEFTU0VSVChtZm5f dmFsaWQobWZuX3gobWZuKSkpOworCisgICAgZnJlZV9kb21oZWFwX3BhZ2UobWZuX3RvX3BhZ2Uo bWZuX3gobWZuKSkpOworfQorCitzdGF0aWMgYm9vbCBwMm1fc3BsaXRfc3VwZXJwYWdlKHN0cnVj dCBwMm1fZG9tYWluICpwMm0sIGxwYWVfdCAqZW50cnksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBsZXZlbCwgdW5zaWduZWQgaW50IHRhcmdldCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpvZmZzZXRzKQor eworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CisgICAgdW5zaWduZWQgaW50IGk7CisgICAg bHBhZV90IHB0ZSwgKnRhYmxlOworICAgIGJvb2wgcnYgPSB0cnVlOworCisgICAgLyogQ29udmVu aWVuY2UgYWxpYXNlcyAqLworICAgIHAybV90eXBlX3QgdCA9IGVudHJ5LT5wMm0udHlwZTsKKyAg ICBtZm5fdCBtZm4gPSBfbWZuKGVudHJ5LT5wMm0uYmFzZSk7CisKKyAgICAvKiBDb252ZW5pZW5j ZSBhbGlhc2VzICovCisgICAgdW5zaWduZWQgaW50IG5leHRfbGV2ZWwgPSBsZXZlbCArIDE7Cisg ICAgdW5zaWduZWQgaW50IGxldmVsX29yZGVyID0gbGV2ZWxfb3JkZXJzW25leHRfbGV2ZWxdOwor CisgICAgLyoKKyAgICAgKiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoIHRhcmdldCAh PSBsZXZlbCBhbmQgdGhlIGVudHJ5IGlzCisgICAgICogYSBzdXBlcnBhZ2UuCisgICAgICovCisg ICAgQVNTRVJUKGxldmVsIDwgdGFyZ2V0KTsKKyAgICBBU1NFUlQocDJtX2lzX3N1cGVycGFnZSgq ZW50cnksIGxldmVsKSk7CisKKyAgICBwYWdlID0gYWxsb2NfZG9taGVhcF9wYWdlKE5VTEwsIDAp OworICAgIGlmICggIXBhZ2UgKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwYWdlX2xp c3RfYWRkKHBhZ2UsICZwMm0tPnBhZ2VzKTsKKyAgICB0YWJsZSA9IF9fbWFwX2RvbWFpbl9wYWdl KHBhZ2UpOworCisgICAgLyoKKyAgICAgKiBXZSBhcmUgZWl0aGVyIHNwbGl0dGluZyBhIGZpcnN0 IGxldmVsIDFHIHBhZ2UgaW50byA1MTIgc2Vjb25kIGxldmVsCisgICAgICogMk0gcGFnZXMsIG9y IGEgc2Vjb25kIGxldmVsIDJNIHBhZ2UgaW50byA1MTIgdGhpcmQgbGV2ZWwgNEsgcGFnZXMuCisg ICAgICovCisgICAgZm9yICggaSA9IDA7IGkgPCBMUEFFX0VOVFJJRVM7IGkrKyApCisgICAgewor ICAgICAgICBscGFlX3QgKm5ld19lbnRyeSA9IHRhYmxlICsgaTsKKworICAgICAgICBwdGUgPSBt Zm5fdG9fcDJtX2VudHJ5KG1mbiwgdCwgcDJtLT5kZWZhdWx0X2FjY2Vzcyk7CisKKyAgICAgICAg bWZuID0gbWZuX2FkZChtZm4sICgxVUwgPDwgbGV2ZWxfb3JkZXIpKTsKKworICAgICAgICAvKgor ICAgICAgICAgKiBGaXJzdCBhbmQgc2Vjb25kIGxldmVsIHBhZ2VzIHNldCBwMm0udGFibGUgPSAw LCBidXQgdGhpcmQKKyAgICAgICAgICogbGV2ZWwgZW50cmllcyBzZXQgcDJtLnRhYmxlID0gMS4K KyAgICAgICAgICovCisgICAgICAgIGlmICggbmV4dF9sZXZlbCA8IDMgKQorICAgICAgICAgICAg cHRlLnAybS50YWJsZSA9IDA7CisKKyAgICAgICAgd3JpdGVfcHRlKG5ld19lbnRyeSwgcHRlKTsK KyAgICB9CisKKyAgICAvKgorICAgICAqIFNoYXR0ZXIgc3VwZXJwYWdlIGluIHRoZSBwYWdlIHRv IHRoZSBsZXZlbCB3ZSB3YW50IHRvIG1ha2UgdGhlCisgICAgICogY2hhbmdlcy4KKyAgICAgKiBU aGlzIGlzIGRvbmUgb3V0c2lkZSB0aGUgbG9vcCB0byBhdm9pZCBjaGVja2luZyB0aGUgb2Zmc2V0 IHRvCisgICAgICoga25vdyB3aGV0aGVyIHRoZSBlbnRyeSBzaG91bGQgYmUgc2hhdHRlcmVkIGZv ciBldmVyeSBlbnRyeS4KKyAgICAgKi8KKyAgICBpZiAoIG5leHRfbGV2ZWwgIT0gdGFyZ2V0ICkK KyAgICAgICAgcnYgPSBwMm1fc3BsaXRfc3VwZXJwYWdlKHAybSwgdGFibGUgKyBvZmZzZXRzW25l eHRfbGV2ZWxdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgKyAxLCB0 YXJnZXQsIG9mZnNldHMpOworCisgICAgaWYgKCBwMm0tPmNsZWFuX3B0ZSApCisgICAgICAgIGNs ZWFuX2RjYWNoZV92YV9yYW5nZSh0YWJsZSwgUEFHRV9TSVpFKTsKKworICAgIHVubWFwX2RvbWFp bl9wYWdlKHRhYmxlKTsKKworICAgIHB0ZSA9IG1mbl90b19wMm1fZW50cnkoX21mbihwYWdlX3Rv X21mbihwYWdlKSksIHAybV9pbnZhbGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcDJt LT5kZWZhdWx0X2FjY2Vzcyk7CisKKyAgICBwMm1fd3JpdGVfcHRlKGVudHJ5LCBwdGUsIHAybS0+ Y2xlYW5fcHRlKTsKKworICAgIC8qCisgICAgICogRXZlbiBpZiB3ZSBmYWlsZWQsIHdlIHNob3Vs ZCBpbnN0YWxsIHRoZSBuZXdseSBhbGxvY2F0ZWQgTFBBRQorICAgICAqIGVudHJ5LiBUaGUgY2Fs bGVyIHdpbGwgYmUgaW4gY2hhcmdlIHRvIGZyZWUgdGhlIHN1Yi10cmVlLgorICAgICAqIFhYWDog U2VlIGlmIHdlIGNhbiBmcmVlIGVudHJ5IGhlcmUuCisgICAgICovCisgICAgKmVudHJ5ID0gcHRl OworCisgICAgcmV0dXJuIHJ2OworfQorCisvKgorICogSW5zZXJ0IGFuIGVudHJ5IGluIHRoZSBw Mm0uIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIGEgbWFwcGluZworICogZXF1YWwgdG8gYSBw YWdlL3N1cGVycGFnZSAoNEssIDJNLCAxRykuCisgKi8KK3N0YXRpYyBpbnQgX19wMm1fc2V0X2Vu dHJ5KHN0cnVjdCBwMm1fZG9tYWluICpwMm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBn Zm5fdCBzZ2ZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBhZ2Vf b3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtZm5fdCBzbWZuLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgcDJtX3R5cGVfdCB0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgcDJtX2FjY2Vzc190IGEpCit7CisgICAgcGFkZHJfdCBhZGRyID0gcGZuX3RvX3BhZGRyKGdm bl94KHNnZm4pKTsKKyAgICB1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOworICAgIHVuc2lnbmVkIGlu dCB0YXJnZXQgPSAzIC0gKHBhZ2Vfb3JkZXIgLyBMUEFFX1NISUZUKTsKKyAgICBscGFlX3QgKmVu dHJ5LCAqdGFibGUsIG9yaWdfcHRlOworICAgIGludCByYzsKKworICAgIC8qIENvbnZlbmllbmNl IGFsaWFzZXMgKi8KKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgb2Zmc2V0c1s0XSA9IHsKKyAgICAg ICAgemVyb2V0aF90YWJsZV9vZmZzZXQoYWRkciksCisgICAgICAgIGZpcnN0X3RhYmxlX29mZnNl dChhZGRyKSwKKyAgICAgICAgc2Vjb25kX3RhYmxlX29mZnNldChhZGRyKSwKKyAgICAgICAgdGhp cmRfdGFibGVfb2Zmc2V0KGFkZHIpCisgICAgfTsKKworICAgIC8qIFRPRE86IENoZWNrIHRoZSB2 YWxpZGl0eSBmb3IgdGhlIGFkZHJlc3MgKi8KKworICAgIEFTU0VSVChwMm1faXNfd3JpdGVfbG9j a2VkKHAybSkpOworCisgICAgLyoKKyAgICAgKiBDaGVjayBpZiB0aGUgbGV2ZWwgdGFyZ2V0IGlz IHZhbGlkOiB3ZSBvbmx5IHN1cHBvcnQKKyAgICAgKiA0SyAtIDJNIC0gMUcgbWFwcGluZy4KKyAg ICAgKi8KKyAgICBBU1NFUlQodGFyZ2V0ID4gMCAmJiB0YXJnZXQgPD0gMyk7CisKKyAgICB0YWJs ZSA9IHAybV9nZXRfcm9vdF9wb2ludGVyKHAybSwgc2dmbik7CisgICAgaWYgKCAhdGFibGUgKQor ICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGZvciAoIGxldmVsID0gUDJNX1JPT1RfTEVW RUw7IGxldmVsIDwgdGFyZ2V0OyBsZXZlbCsrICkKKyAgICB7CisgICAgICAgIHJjID0gcDJtX25l eHRfbGV2ZWwocDJtLCBmYWxzZSwgJnRhYmxlLCBvZmZzZXRzW2xldmVsXSk7CisgICAgICAgIGlm ICggcmMgPT0gR1VFU1RfVEFCTEVfTUFQX0ZBSUxFRCApCisgICAgICAgIHsKKyAgICAgICAgICAg IHJjID0gLUVOT0VOVDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgICAg IGVsc2UgaWYgKCByYyAhPSBHVUVTVF9UQUJMRV9OT1JNQUxfUEFHRSApCisgICAgICAgICAgICBi cmVhazsKKyAgICB9CisKKyAgICBlbnRyeSA9IHRhYmxlICsgb2Zmc2V0c1tsZXZlbF07CisKKyAg ICAvKgorICAgICAqIElmIHdlIGFyZSBoZXJlIHdpdGggbGV2ZWwgPCB0YXJnZXQsIHdlIG11c3Qg YmUgYXQgYSBsZWFmIG5vZGUsCisgICAgICogYW5kIHdlIG5lZWQgdG8gYnJlYWsgdXAgdGhlIHN1 cGVycGFnZS4KKyAgICAgKi8KKyAgICBpZiAoIGxldmVsIDwgdGFyZ2V0ICkKKyAgICB7CisgICAg ICAgIC8qIFdlIG5lZWQgdG8gc3BsaXQgdGhlIG9yaWdpbmFsIHBhZ2UuICovCisgICAgICAgIGxw YWVfdCBzcGxpdF9wdGUgPSAqZW50cnk7CisKKyAgICAgICAgQVNTRVJUKHAybV9pc19zdXBlcnBh Z2UoKmVudHJ5LCBsZXZlbCkpOworCisgICAgICAgIGlmICggIXAybV9zcGxpdF9zdXBlcnBhZ2Uo cDJtLCAmc3BsaXRfcHRlLCBsZXZlbCwgdGFyZ2V0LCBvZmZzZXRzKSApCisgICAgICAgIHsKKyAg ICAgICAgICAgIHAybV9mcmVlX2VudHJ5KHAybSwgc3BsaXRfcHRlLCBsZXZlbCk7CisgICAgICAg ICAgICByYyA9IC1FTk9NRU07CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorCisg ICAgICAgIC8qCisgICAgICAgICAqIEZvbGxvdyB0aGUgYnJlYWstYmVmb3JlLXNlcXVlbmNlIHRv IHVwZGF0ZSB0aGUgZW50cnkuCisgICAgICAgICAqIEZvciBtb3JlIGRldGFpbHMgc2VlIChENC43 LjEgaW4gQVJNIERESSAwNDg3QS5qKS4KKyAgICAgICAgICogWFhYOiBDYW4gd2UgZmx1c2ggYnkg YWRkcmVzcz8KKyAgICAgICAgICovCisgICAgICAgIHAybV9yZW1vdmVfcHRlKGVudHJ5LCBwMm0t PmNsZWFuX3B0ZSk7CisgICAgICAgIHAybV9mbHVzaF90bGJfc3luYyhwMm0pOworCisgICAgICAg IHAybV93cml0ZV9wdGUoZW50cnksIHNwbGl0X3B0ZSwgcDJtLT5jbGVhbl9wdGUpOworCisgICAg ICAgIC8qIHRoZW4gbW92ZSB0byB0aGUgbGV2ZWwgd2Ugd2FudCB0byBtYWtlIHJlYWwgY2hhbmdl cyAqLworICAgICAgICBmb3IgKCA7IGxldmVsIDwgdGFyZ2V0OyBsZXZlbCsrICkKKyAgICAgICAg eworICAgICAgICAgICAgcmMgPSBwMm1fbmV4dF9sZXZlbChwMm0sIHRydWUsICZ0YWJsZSwgb2Zm c2V0c1tsZXZlbF0pOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogVGhlIGVudHJ5 IHNob3VsZCBiZSBmb3VuZCBhbmQgZWl0aGVyIGJlIGEgdGFibGUKKyAgICAgICAgICAgICAqIG9y IGEgc3VwZXJwYWdlIGlmIGxldmVsIDMgaXMgbm90IHRhcmdldGVkCisgICAgICAgICAgICAgKi8K KyAgICAgICAgICAgIEFTU0VSVChyYyA9PSBHVUVTVF9UQUJMRV9OT1JNQUxfUEFHRSB8fAorICAg ICAgICAgICAgICAgICAgIChyYyA9PSBHVUVTVF9UQUJMRV9TVVBFUl9QQUdFICYmIHRhcmdldCA8 IDMpKTsKKyAgICAgICAgfQorCisgICAgICAgIGVudHJ5ID0gdGFibGUgKyBvZmZzZXRzW2xldmVs XTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdlIHNob3VsZCBhbHdheXMgYmUgdGhlcmUgd2l0 aCB0aGUgY29ycmVjdCBsZXZlbCBiZWNhdXNlCisgICAgICogYWxsIHRoZSBpbnRlcm1lZGlhdGUg dGFibGVzIGhhdmUgYmVlbiBpbnN0YWxsZWQgaWYgbmVjZXNzYXJ5LgorICAgICAqLworICAgIEFT U0VSVChsZXZlbCA9PSB0YXJnZXQpOworCisgICAgb3JpZ19wdGUgPSAqZW50cnk7CisKKyAgICAv KgorICAgICAqIFRoZSByYWRpeC10cmVlIGNhbiBvbmx5IHdvcmsgb24gNEtCLiBUaGlzIGlzIG9u bHkgdXNlZCB3aGVuCisgICAgICogbWVtYWNjZXNzIGlzIGVuYWJsZWQuCisgICAgICovCisgICAg QVNTRVJUKCFwMm0tPm1lbV9hY2Nlc3NfZW5hYmxlZCB8fCBwYWdlX29yZGVyID09IDApOworICAg IC8qCisgICAgICogVGhlIGFjY2VzcyB0eXBlIHNob3VsZCBhbHdheXMgYmUgcDJtX2FjY2Vzc19y d3ggd2hlbiB0aGUgbWFwcGluZworICAgICAqIGlzIHJlbW92ZWQuCisgICAgICovCisgICAgQVNT RVJUKCFtZm5fZXEoSU5WQUxJRF9NRk4sIHNtZm4pIHx8IChhID09IHAybV9hY2Nlc3Nfcnd4KSk7 CisgICAgLyoKKyAgICAgKiBVcGRhdGUgdGhlIG1lbSBhY2Nlc3MgcGVybWlzc2lvbiBiZWZvcmUg dXBkYXRlIHRoZSBQMk0uIFNvIHdlCisgICAgICogZG9uJ3QgaGF2ZSB0byByZXZlcnQgdGhlIG1h cHBpbmcgaWYgaXQgaGFzIGZhaWxlZC4KKyAgICAgKi8KKyAgICByYyA9IHAybV9tZW1fYWNjZXNz X3JhZGl4X3NldChwMm0sIHNnZm4sIGEpOworICAgIGlmICggcmMgKQorICAgICAgICBnb3RvIG91 dDsKKworICAgIC8qCisgICAgICogQWx3YXlzIHJlbW92ZSB0aGUgZW50cnkgaW4gb3JkZXIgdG8g Zm9sbG93IHRoZSBicmVhay1iZWZvcmUtbWFrZQorICAgICAqIHNlcXVlbmNlIHdoZW4gdXBkYXRp bmcgdGhlIHRyYW5zbGF0aW9uIHRhYmxlIChENC43LjEgaW4gQVJNIERESQorICAgICAqIDA0ODdB LmopLgorICAgICAqLworICAgIGlmICggcDJtX3ZhbGlkKG9yaWdfcHRlKSApCisgICAgICAgIHAy bV9yZW1vdmVfcHRlKGVudHJ5LCBwMm0tPmNsZWFuX3B0ZSk7CisKKyAgICBpZiAoIG1mbl9lcShz bWZuLCBJTlZBTElEX01GTikgKQorICAgICAgICAvKiBGbHVzaCBjYW4gYmUgZGVmZXJyZWQgaWYg dGhlIGVudHJ5IGlzIHJlbW92ZWQgKi8KKyAgICAgICAgcDJtLT5uZWVkX2ZsdXNoIHw9ICEhcDJt X3ZhbGlkKG9yaWdfcHRlKTsKKyAgICBlbHNlCisgICAgeworICAgICAgICBscGFlX3QgcHRlOwor CisgICAgICAgIC8qCisgICAgICAgICAqIEZsdXNoIHRoZSBUTEIgYmVmb3JlIHdyaXRlIHRoZSBu ZXcgb25lIHRvIGtlZXAgY29oZXJlbmN5LgorICAgICAgICAgKiBYWFg6IENhbiB3ZSBmbHVzaCBi eSBhZGRyZXNzPworICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBwMm1fdmFsaWQob3JpZ19wdGUp ICkKKyAgICAgICAgICAgIHAybV9mbHVzaF90bGJfc3luYyhwMm0pOworCisgICAgICAgIHB0ZSA9 IG1mbl90b19wMm1fZW50cnkoc21mbiwgdCwgYSk7CisgICAgICAgIGlmICggbGV2ZWwgPCAzICkK KyAgICAgICAgICAgIHB0ZS5wMm0udGFibGUgPSAwOyAvKiBTdXBlcnBhZ2UgZW50cnkgKi8KKwor ICAgICAgICBwMm1fd3JpdGVfcHRlKGVudHJ5LCBwdGUsIHAybS0+Y2xlYW5fcHRlKTsKKworICAg ICAgICBwMm0tPm1heF9tYXBwZWRfZ2ZuID0gZ2ZuX21heChwMm0tPm1heF9tYXBwZWRfZ2ZuLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZm5fYWRkKHNnZm4sIDEgPDwg cGFnZV9vcmRlcikpOworICAgICAgICBwMm0tPmxvd2VzdF9tYXBwZWRfZ2ZuID0gZ2ZuX21pbihw Mm0tPmxvd2VzdF9tYXBwZWRfZ2ZuLCBzZ2ZuKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZy ZWUgdGhlIGVudHJ5IG9ubHkgaWYgdGhlIG9yaWdpbmFsIHB0ZSB3YXMgdmFsaWQgYW5kIHRoZSBi YXNlCisgICAgICogaXMgZGlmZmVyZW50ICh0byBhdm9pZCBmcmVlaW5nIHdoZW4gcGVybWlzc2lv biBpcyBjaGFuZ2VkKS4KKyAgICAgKi8KKyAgICBpZiAoIHAybV92YWxpZChvcmlnX3B0ZSkgJiYg ZW50cnktPnAybS5iYXNlICE9IG9yaWdfcHRlLnAybS5iYXNlICkKKyAgICAgICAgcDJtX2ZyZWVf ZW50cnkocDJtLCBvcmlnX3B0ZSwgbGV2ZWwpOworCisgICAgLyogWFhYOiBGbHVzaCBpb21tdSAq LworCisgICAgcmMgPSAwOworCitvdXQ6CisgICAgdW5tYXBfZG9tYWluX3BhZ2UodGFibGUpOwor CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHAybV9zZXRfZW50cnkoc3RydWN0IHAy bV9kb21haW4gKnAybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnZm5fdCBzZ2ZuLAorICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdG9kbywKKyAgICAgICAgICAgICAg ICAgICAgICAgICBtZm5fdCBzbWZuLAorICAgICAgICAgICAgICAgICAgICAgICAgIHAybV90eXBl X3QgdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwMm1fYWNjZXNzX3QgYSkKK3sKKyAgICBp bnQgcmMgPSAwOworCisgICAgd2hpbGUgKCB0b2RvICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVk IGxvbmcgbWFzayA9IGdmbl94KHNnZm4pIHwgbWZuX3goc21mbikgfCB0b2RvOworICAgICAgICB1 bnNpZ25lZCBsb25nIG9yZGVyOworCisgICAgICAgIC8qIEFsd2F5cyBtYXAgNGsgYnkgNGsgd2hl biBtZW1hY2Nlc3MgaXMgZW5hYmxlZCAqLworICAgICAgICBpZiAoIHVubGlrZWx5KHAybS0+bWVt X2FjY2Vzc19lbmFibGVkKSApCisgICAgICAgICAgICBvcmRlciA9IFRISVJEX09SREVSOworICAg ICAgICBpZiAoICEobWFzayAmICgoMVVMIDw8IEZJUlNUX09SREVSKSAtIDEpKSApCisgICAgICAg ICAgICBvcmRlciA9IEZJUlNUX09SREVSOworICAgICAgICBlbHNlIGlmICggIShtYXNrICYgKCgx VUwgPDwgU0VDT05EX09SREVSKSAtIDEpKSApCisgICAgICAgICAgICBvcmRlciA9IFNFQ09ORF9P UkRFUjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3JkZXIgPSBUSElSRF9PUkRFUjsKKwor ICAgICAgICByYyA9IF9fcDJtX3NldF9lbnRyeShwMm0sIHNnZm4sIG9yZGVyLCBzbWZuLCB0LCBh KTsKKyAgICAgICAgaWYgKCByYyApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBzZ2Zu ID0gZ2ZuX2FkZChzZ2ZuLCAoMSA8PCBvcmRlcikpOworICAgICAgICBpZiAoICFtZm5fZXEoc21m biwgSU5WQUxJRF9NRk4pICkKKyAgICAgICAgICAgc21mbiA9IG1mbl9hZGQoc21mbiwgKDEgPDwg b3JkZXIpKTsKKworICAgICAgICB0b2RvIC09ICgxIDw8IG9yZGVyKTsKKyAgICB9CisKKyAgICBy ZXR1cm4gcmM7Cit9CisjZW5kaWYKKwogLyoKICAqIFJldHVybnMgdHJ1ZSBpZiBzdGFydF9ncGFk ZHIuLmVuZF9ncGFkZHIgY29udGFpbnMgYXQgbGVhc3Qgb25lCiAgKiBzdWl0YWJseSBhbGlnbmVk IGxldmVsX3NpemUgbWFwcHBpbmcgb2YgbWFkZHIuCi0tIAoxLjkuMQoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QK WGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=