From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: [RFC 21/22] xen/arm: p2m: Re-implement p2m_set_mem_access using p2m_{set, get}_entry Date: Thu, 28 Jul 2016 15:51:44 +0100 Message-ID: <1469717505-8026-22-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: sstabellini@kernel.org, Razvan Cojocaru , steve.capper@arm.com, proskurin@sec.in.tum.de, Julien Grall , Tamas K Lengyel , wei.chen@linaro.org List-Id: xen-devel@lists.xenproject.org VGhlIGZ1bmN0aW9uIHAybV9zZXRfbWVtX2FjY2VzcyBjYW4gYmUgcmUtaW1wbGVtZW50ZWQgdXNp bmcgdGhlIGdlbmVyaWMKZnVuY3Rpb25zIHAybV9nZXRfZW50cnkgYW5kIF9fcDJtX3NldF9lbnRy eS4KCk5vdGUgdGhhdCBiZWNhdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBwMm1fZ2V0X2Vu dHJ5LCBhIFRMQgppbnZhbGlkYXRpb24gaW5zdHJ1Y3Rpb24gd2lsbCBiZSBpc3N1ZWQgZm9yIGVh Y2ggNEtCIHBhZ2UuIFRoZXJlZm9yZSB0aGUKcGVyZm9ybWFuY2Ugb2YgbWVtYWNjZXNzIHdpbGwg YmUgaW1wYWN0ZWQsIGhvd2V2ZXIgdGhlIGZ1bmN0aW9uIGlzIG5vdwpzYWZlIG9uIGFsbCB0aGUg cHJvY2Vzc29ycy4KCkFsc28gdGhlIGZ1bmN0aW9uIGFwcGx5X3AybV9jaGFuZ2VzIGlzIGRyb3Bw ZWQgY29tcGxldGVseSBhcyBpdCBpcyBub3QKdW51c2VkIGFueW1vcmUuCgpTaWduZWQtb2ZmLWJ5 OiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29tPgpDYzogUmF6dmFuIENvam9jYXJ1 IDxyY29qb2NhcnVAYml0ZGVmZW5kZXIuY29tPgpDYzogVGFtYXMgSyBMZW5neWVsIDx0YW1hc0B0 a2xlbmd5ZWwuY29tPgoKLS0tCiAgICBJIGhhdmUgbm90IHJhbiBhbnkgcGVyZm9ybWFuY2UgdGVz dCB3aXRoIG1lbWFjY2VzcyBmb3Igbm93LCBidXQgSQogICAgZXhwZWN0IGFuIGltcG9ydGFudCBh bmQgdW5hdm9pZGFibGUgaW1wYWN0IGJlY2F1c2Ugb2YgaG93IG1lbWFjY2VzcwogICAgaGFzIGJl ZW4gZGVzaWduZWQgdG8gd29ya2Fyb3VuZCBoYXJkd2FyZSBsaW1pdGF0aW9uLiBOb3RlIHRoYXQg bWlnaHQKICAgIGJlIHBvc3NpYmxlIHRvIHJlLXdvcmsgbWVtYWNjZXNzIHdvcmsgb24gc3VwZXJw YWdlIGJ1dCB0aGlzIHNob3VsZAogICAgYmUgZG9uZSBpbiBhIHNlcGFyYXRlIHBhdGNoLgotLS0K IHhlbi9hcmNoL2FybS9wMm0uYyB8IDMyOSArKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDM4IGluc2VydGlvbnMoKyks IDI5MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vcDJtLmMgYi94ZW4v YXJjaC9hcm0vcDJtLmMKaW5kZXggNzA3YzdiZS4uMTZlZDM5MyAxMDA2NDQKLS0tIGEveGVuL2Fy Y2gvYXJtL3AybS5jCisrKyBiL3hlbi9hcmNoL2FybS9wMm0uYwpAQCAtMTA4MSwyOTUgKzEwODEs NiBAQCBzdGF0aWMgaW50IHAybV9zZXRfZW50cnkoc3RydWN0IHAybV9kb21haW4gKnAybSwKICAg ICByZXR1cm4gcmM7CiB9CiAKLSNkZWZpbmUgUDJNX09ORV9ERVNDRU5EICAgICAgICAwCi0jZGVm aW5lIFAyTV9PTkVfUFJPR1JFU1NfTk9QICAgMHgxCi0jZGVmaW5lIFAyTV9PTkVfUFJPR1JFU1Mg ICAgICAgMHgxMAotCi1zdGF0aWMgaW50IHAybV9zaGF0dGVyX3BhZ2Uoc3RydWN0IHAybV9kb21h aW4gKnAybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBscGFlX3QgKmVudHJ5LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZXZlbCkKLXsKLSAgICBjb25z dCBwYWRkcl90IGxldmVsX3NoaWZ0ID0gbGV2ZWxfc2hpZnRzW2xldmVsXTsKLSAgICBpbnQgcmMg PSBwMm1fY3JlYXRlX3RhYmxlKHAybSwgZW50cnksIGxldmVsX3NoaWZ0IC0gUEFHRV9TSElGVCk7 Ci0KLSAgICBpZiAoICFyYyApCi0gICAgewotICAgICAgICBwMm0tPnN0YXRzLnNoYXR0ZXJlZFts ZXZlbF0rKzsKLSAgICAgICAgcDJtLT5zdGF0cy5tYXBwaW5nc1tsZXZlbF0tLTsKLSAgICAgICAg cDJtLT5zdGF0cy5tYXBwaW5nc1tsZXZlbCsxXSArPSBMUEFFX0VOVFJJRVM7Ci0gICAgfQotCi0g ICAgcmV0dXJuIHJjOwotfQotCi0vKgotICogMCAgID09IChQMk1fT05FX0RFU0NFTkQpIGNvbnRp bnVlIHRvIGRlc2NlbmQgdGhlIHRyZWUKLSAqICt2ZSA9PSAoUDJNX09ORV9QUk9HUkVTU18qKSBo YW5kbGVkIGF0IHRoaXMgbGV2ZWwsIGNvbnRpbnVlLCBmbHVzaCwKLSAqICAgICAgICBlbnRyeSwg YWRkciBhbmQgbWFkZHIgdXBkYXRlZC4gIFJldHVybiB2YWx1ZSBpcyBhbgotICogICAgICAgIGlu ZGljYXRpb24gb2YgdGhlIGFtb3VudCBvZiB3b3JrIGRvbmUgKGZvciBwcmVlbXB0aW9uKS4KLSAq IC12ZSA9PSAoLUV4eHgpIGVycm9yLgotICovCi1zdGF0aWMgaW50IGFwcGx5X29uZV9sZXZlbChz dHJ1Y3QgZG9tYWluICpkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbHBhZV90ICplbnRy eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZXZlbCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVudW0gcDJtX29wZXJhdGlvbiBvcCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBhZGRyX3Qgc3RhcnRfZ3BhZGRyLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGFkZHJfdCBlbmRfZ3BhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg cGFkZHJfdCAqYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRyX3QgKm1hZGRy LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbF90ICpmbHVzaCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIHAybV90eXBlX3QgdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IHAybV9hY2Nlc3NfdCBhKQotewotICAgIGNvbnN0IHBhZGRyX3QgbGV2ZWxfc2l6ZSA9IGxldmVs X3NpemVzW2xldmVsXTsKLQotICAgIHN0cnVjdCBwMm1fZG9tYWluICpwMm0gPSAmZC0+YXJjaC5w Mm07Ci0gICAgbHBhZV90IHB0ZTsKLSAgICBjb25zdCBscGFlX3Qgb3JpZ19wdGUgPSAqZW50cnk7 Ci0gICAgaW50IHJjOwotCi0gICAgQlVHX09OKGxldmVsID4gMyk7Ci0KLSAgICBzd2l0Y2ggKCBv cCApCi0gICAgewotICAgIGNhc2UgTUVNQUNDRVNTOgotICAgICAgICBpZiAoIGxldmVsIDwgMyAp Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICggIXAybV92YWxpZChvcmlnX3B0ZSkgKQotICAg ICAgICAgICAgewotICAgICAgICAgICAgICAgICphZGRyICs9IGxldmVsX3NpemU7Ci0gICAgICAg ICAgICAgICAgcmV0dXJuIFAyTV9PTkVfUFJPR1JFU1NfTk9QOwotICAgICAgICAgICAgfQotCi0g ICAgICAgICAgICAvKiBTaGF0dGVyIGxhcmdlIHBhZ2VzIGFzIHdlIGRlc2NlbmQgKi8KLSAgICAg ICAgICAgIGlmICggcDJtX21hcHBpbmcob3JpZ19wdGUpICkKLSAgICAgICAgICAgIHsKLSAgICAg ICAgICAgICAgICByYyA9IHAybV9zaGF0dGVyX3BhZ2UocDJtLCBlbnRyeSwgbGV2ZWwpOwotICAg ICAgICAgICAgICAgIGlmICggcmMgPCAwICkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJj OwotICAgICAgICAgICAgfSAvKiBlbHNlOiBhbiBleGlzdGluZyB0YWJsZSBtYXBwaW5nIC0+IGRl c2NlbmQgKi8KLQotICAgICAgICAgICAgcmV0dXJuIFAyTV9PTkVfREVTQ0VORDsKLSAgICAgICAg fQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHB0ZSA9IG9yaWdfcHRlOwot Ci0gICAgICAgICAgICBpZiAoIHAybV92YWxpZChwdGUpICkKLSAgICAgICAgICAgIHsKLSAgICAg ICAgICAgICAgICByYyA9IHAybV9tZW1fYWNjZXNzX3JhZGl4X3NldChwMm0sIF9nZm4ocGFkZHJf dG9fcGZuKCphZGRyKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYSk7Ci0gICAgICAgICAgICAgICAgaWYgKCByYyA8IDAgKQotICAgICAgICAgICAgICAg ICAgICByZXR1cm4gcmM7Ci0KLSAgICAgICAgICAgICAgICBwMm1fc2V0X3Blcm1pc3Npb24oJnB0 ZSwgcHRlLnAybS50eXBlLCBhKTsKLSAgICAgICAgICAgICAgICBwMm1fd3JpdGVfcHRlKGVudHJ5 LCBwdGUsIHAybS0+Y2xlYW5fcHRlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgKmFk ZHIgKz0gbGV2ZWxfc2l6ZTsKLSAgICAgICAgICAgICpmbHVzaCA9IHRydWU7Ci0gICAgICAgICAg ICByZXR1cm4gUDJNX09ORV9QUk9HUkVTUzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEJVRygp OyAvKiBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KLX0KLQotLyoKLSAqIFRoZSBwYWdlIGlzIG9u bHkgdXNlZCBieSB0aGUgUDJNIGNvZGUgd2hpY2ggaXMgcHJvdGVjdGVkIGJ5IHRoZSBwMm0tPmxv Y2suCi0gKiBTbyB3ZSBjYW4gYXZvaWQgdG8gdXNlIGF0b21pYyBoZWxwZXJzLgotICovCi1zdGF0 aWMgdm9pZCB1cGRhdGVfcmVmZXJlbmNlX21hcHBpbmcoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscGFlX3Qgb2xkX2VudHJ5LAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwYWVfdCBuZXdfZW50cnkpCi17 Ci0gICAgaWYgKCBwMm1fdmFsaWQob2xkX2VudHJ5KSAmJiAhcDJtX3ZhbGlkKG5ld19lbnRyeSkg KQotICAgICAgICBwYWdlLT51LmludXNlLnAybV9yZWZjb3VudC0tOwotICAgIGVsc2UgaWYgKCAh cDJtX3ZhbGlkKG9sZF9lbnRyeSkgJiYgcDJtX3ZhbGlkKG5ld19lbnRyeSkgKQotICAgICAgICBw YWdlLT51LmludXNlLnAybV9yZWZjb3VudCsrOwotfQotCi1zdGF0aWMgaW50IGFwcGx5X3AybV9j aGFuZ2VzKHN0cnVjdCBkb21haW4gKmQsCi0gICAgICAgICAgICAgICAgICAgICBlbnVtIHAybV9v cGVyYXRpb24gb3AsCi0gICAgICAgICAgICAgICAgICAgICBnZm5fdCBzZ2ZuLAotICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBuciwKLSAgICAgICAgICAgICAgICAgICAgIG1mbl90 IHNtZm4sCi0gICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBtYXNrLAotICAgICAgICAgICAg ICAgICAgICAgcDJtX3R5cGVfdCB0LAotICAgICAgICAgICAgICAgICAgICAgcDJtX2FjY2Vzc190 IGEpCi17Ci0gICAgcGFkZHJfdCBzdGFydF9ncGFkZHIgPSBwZm5fdG9fcGFkZHIoZ2ZuX3goc2dm bikpOwotICAgIHBhZGRyX3QgZW5kX2dwYWRkciA9IHBmbl90b19wYWRkcihnZm5feChzZ2ZuKSAr IG5yKTsKLSAgICBwYWRkcl90IG1hZGRyID0gcGZuX3RvX3BhZGRyKG1mbl94KHNtZm4pKTsKLSAg ICBpbnQgcmMsIHJldDsKLSAgICBzdHJ1Y3QgcDJtX2RvbWFpbiAqcDJtID0gJmQtPmFyY2gucDJt OwotICAgIGxwYWVfdCAqbWFwcGluZ3NbNF0gPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsK LSAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlc1s0XSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCB9OwotICAgIHBhZGRyX3QgYWRkcjsKLSAgICB1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOwotICAg IHVuc2lnbmVkIGludCBjdXJfcm9vdF90YWJsZSA9IH4wOwotICAgIHVuc2lnbmVkIGludCBjdXJf b2Zmc2V0WzRdID0geyB+MCwgfjAsIH4wLCB+MCB9OwotICAgIHVuc2lnbmVkIGludCBjb3VudCA9 IDA7Ci0gICAgY29uc3QgdW5zaWduZWQgaW50IHByZWVtcHRfY291bnRfbGltaXQgPSAob3AgPT0g TUVNQUNDRVNTKSA/IDEgOiAweDIwMDA7Ci0gICAgY29uc3QgYm9vbF90IHByZWVtcHQgPSAhaXNf aWRsZV92Y3B1KGN1cnJlbnQpOwotICAgIGJvb2xfdCBmbHVzaCA9IGZhbHNlOwotICAgIFBBR0Vf TElTVF9IRUFEKGZyZWVfcGFnZXMpOwotICAgIHN0cnVjdCBwYWdlX2luZm8gKnBnOwotCi0gICAg cDJtX3dyaXRlX2xvY2socDJtKTsKLQotICAgIC8qIFN0YXRpYyBtYXBwaW5nLiBQMk1fUk9PVF9Q QUdFUyA+IDEgYXJlIGhhbmRsZWQgYmVsb3cgKi8KLSAgICBpZiAoIFAyTV9ST09UX1BBR0VTID09 IDEgKQotICAgIHsKLSAgICAgICAgbWFwcGluZ3NbUDJNX1JPT1RfTEVWRUxdID0gX19tYXBfZG9t YWluX3BhZ2UocDJtLT5yb290KTsKLSAgICAgICAgcGFnZXNbUDJNX1JPT1RfTEVWRUxdID0gcDJt LT5yb290OwotICAgIH0KLQotICAgIGFkZHIgPSBzdGFydF9ncGFkZHI7Ci0gICAgd2hpbGUgKCBh ZGRyIDwgZW5kX2dwYWRkciApCi0gICAgewotICAgICAgICBpbnQgcm9vdF90YWJsZTsKLSAgICAg ICAgY29uc3QgdW5zaWduZWQgaW50IG9mZnNldHNbNF0gPSB7Ci0gICAgICAgICAgICB6ZXJvZXRo X3RhYmxlX29mZnNldChhZGRyKSwKLSAgICAgICAgICAgIGZpcnN0X3RhYmxlX29mZnNldChhZGRy KSwKLSAgICAgICAgICAgIHNlY29uZF90YWJsZV9vZmZzZXQoYWRkciksCi0gICAgICAgICAgICB0 aGlyZF90YWJsZV9vZmZzZXQoYWRkcikKLSAgICAgICAgfTsKLQotICAgICAgICAvKgotICAgICAg ICAgKiBDaGVjayBpZiBjdXJyZW50IGl0ZXJhdGlvbiBzaG91bGQgYmUgcG9zc2libHkgcHJlZW1w dGVkLgotICAgICAgICAgKiBTaW5jZSBjb3VudCBpcyBpbml0aWFsaXNlZCB0byAwIGFib3ZlIHdl IGFyZSBndWFyYW50ZWVkIHRvCi0gICAgICAgICAqIGFsd2F5cyBtYWtlIGF0IGxlYXN0IG9uZSBw YXNzIGFzIGxvbmcgYXMgcHJlZW1wdF9jb3VudF9saW1pdCBpcwotICAgICAgICAgKiBpbml0aWFs aXplZCB3aXRoIGEgdmFsdWUgPj0gMS4KLSAgICAgICAgICovCi0gICAgICAgIGlmICggcHJlZW1w dCAmJiBjb3VudCA+PSBwcmVlbXB0X2NvdW50X2xpbWl0Ci0gICAgICAgICAgICAgJiYgaHlwZXJj YWxsX3ByZWVtcHRfY2hlY2soKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoIG9w ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgTUVNQUNDRVNTOgotICAgICAgICAg ICAgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogUHJlZW1wdCBzZXR0 aW5nIG1lbV9hY2Nlc3MgcGVybWlzc2lvbnMgYXMgcmVxdWlyZWQgYnkgWFNBLTg5LAotICAgICAg ICAgICAgICAgICAqIGlmIGl0J3Mgbm90IHRoZSBsYXN0IGl0ZXJhdGlvbi4KLSAgICAgICAgICAg ICAgICAgKi8KLSAgICAgICAgICAgICAgICB1aW50MzJfdCBwcm9ncmVzcyA9IHBhZGRyX3RvX3Bm bihhZGRyKSAtIGdmbl94KHNnZm4pICsgMTsKLQotICAgICAgICAgICAgICAgIGlmICggbnIgPiBw cm9ncmVzcyAmJiAhKHByb2dyZXNzICYgbWFzaykgKQotICAgICAgICAgICAgICAgIHsKLSAgICAg ICAgICAgICAgICAgICAgcmMgPSBwcm9ncmVzczsKLSAgICAgICAgICAgICAgICAgICAgZ290byBv dXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgfQotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgfTsKLQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFJlc2V0IGN1cnJl bnQgaXRlcmF0aW9uIGNvdW50ZXIuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNvdW50 ID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggUDJNX1JPT1RfUEFHRVMgPiAxICkKLSAg ICAgICAgewotICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAg ICogQ29uY2F0ZW5hdGVkIHJvb3QtbGV2ZWwgdGFibGVzLiBUaGUgdGFibGUgbnVtYmVyIHdpbGwg YmUgdGhlCi0gICAgICAgICAgICAgKiBvZmZzZXQgYXQgdGhlIHByZXZpb3VzIGxldmVsLiBJdCBp cyBub3QgcG9zc2libGUgdG8gY29uY2F0ZW5hdGUKLSAgICAgICAgICAgICAqIGEgbGV2ZWwtMCBy b290LgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBBU1NFUlQoUDJNX1JPT1RfTEVWRUwg PiAwKTsKLSAgICAgICAgICAgIHJvb3RfdGFibGUgPSBvZmZzZXRzW1AyTV9ST09UX0xFVkVMIC0g MV07Ci0gICAgICAgICAgICBpZiAoIHJvb3RfdGFibGUgPj0gUDJNX1JPT1RfUEFHRVMgKQotICAg ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKLSAgICAgICAgICAgICAg ICBnb3RvIG91dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCBjdXJfcm9vdF90 YWJsZSAhPSByb290X3RhYmxlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAo IG1hcHBpbmdzW1AyTV9ST09UX0xFVkVMXSApCi0gICAgICAgICAgICAgICAgICAgIHVubWFwX2Rv bWFpbl9wYWdlKG1hcHBpbmdzW1AyTV9ST09UX0xFVkVMXSk7Ci0gICAgICAgICAgICAgICAgbWFw cGluZ3NbUDJNX1JPT1RfTEVWRUxdID0KLSAgICAgICAgICAgICAgICAgICAgX19tYXBfZG9tYWlu X3BhZ2UocDJtLT5yb290ICsgcm9vdF90YWJsZSk7Ci0gICAgICAgICAgICAgICAgcGFnZXNbUDJN X1JPT1RfTEVWRUxdID0gcDJtLT5yb290ICsgcm9vdF90YWJsZTsKLSAgICAgICAgICAgICAgICBj dXJfcm9vdF90YWJsZSA9IHJvb3RfdGFibGU7Ci0gICAgICAgICAgICAgICAgLyogQW55IG1hcHBp bmcgZnVydGhlciBkb3duIGlzIG5vdyBpbnZhbGlkICovCi0gICAgICAgICAgICAgICAgZm9yICgg aSA9IFAyTV9ST09UX0xFVkVMOyBpIDwgNDsgaSsrICkKLSAgICAgICAgICAgICAgICAgICAgY3Vy X29mZnNldFtpXSA9IH4wOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9y ICggbGV2ZWwgPSBQMk1fUk9PVF9MRVZFTDsgbGV2ZWwgPCA0OyBsZXZlbCsrICkKLSAgICAgICAg ewotICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gb2Zmc2V0c1tsZXZlbF07Ci0gICAgICAg ICAgICBscGFlX3QgKmVudHJ5ID0gJm1hcHBpbmdzW2xldmVsXVtvZmZzZXRdOwotICAgICAgICAg ICAgbHBhZV90IG9sZF9lbnRyeSA9ICplbnRyeTsKLQotICAgICAgICAgICAgcmV0ID0gYXBwbHlf b25lX2xldmVsKGQsIGVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxl dmVsLCBvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9ncGFkZHIs IGVuZF9ncGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkZHIsICZt YWRkciwgJmZsdXNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQsIGEpOwot ICAgICAgICAgICAgaWYgKCByZXQgPCAwICkgeyByYyA9IHJldCA7IGdvdG8gb3V0OyB9Ci0gICAg ICAgICAgICBjb3VudCArPSByZXQ7Ci0KLSAgICAgICAgICAgIGlmICggcmV0ICE9IFAyTV9PTkVf UFJPR1JFU1NfTk9QICkKLSAgICAgICAgICAgICAgICB1cGRhdGVfcmVmZXJlbmNlX21hcHBpbmco cGFnZXNbbGV2ZWxdLCBvbGRfZW50cnksICplbnRyeSk7Ci0KLSAgICAgICAgICAgIC8qIEwzIGhh ZCBiZXR0ZXIgaGF2ZSBkb25lIHNvbWV0aGluZyEgV2UgY2Fubm90IGRlc2NlbmQgYW55IGZ1cnRo ZXIgKi8KLSAgICAgICAgICAgIEJVR19PTihsZXZlbCA9PSAzICYmIHJldCA9PSBQMk1fT05FX0RF U0NFTkQpOwotICAgICAgICAgICAgaWYgKCByZXQgIT0gUDJNX09ORV9ERVNDRU5EICkgYnJlYWs7 Ci0KLSAgICAgICAgICAgIEJVR19PTighcDJtX3ZhbGlkKCplbnRyeSkpOwotCi0gICAgICAgICAg ICBpZiAoIGN1cl9vZmZzZXRbbGV2ZWxdICE9IG9mZnNldCApCi0gICAgICAgICAgICB7Ci0gICAg ICAgICAgICAgICAgLyogVXBkYXRlIG1hcHBpbmcgZm9yIG5leHQgbGV2ZWwgKi8KLSAgICAgICAg ICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgICAgICBpZiAoIG1hcHBpbmdzW2xldmVsKzFdICkK LSAgICAgICAgICAgICAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UobWFwcGluZ3NbbGV2ZWwrMV0p OwotICAgICAgICAgICAgICAgIG1hcHBpbmdzW2xldmVsKzFdID0gbWFwX2RvbWFpbl9wYWdlKF9t Zm4oZW50cnktPnAybS5iYXNlKSk7Ci0gICAgICAgICAgICAgICAgcGFnZXNbbGV2ZWwrMV0gPSBt Zm5fdG9fcGFnZShlbnRyeS0+cDJtLmJhc2UpOwotICAgICAgICAgICAgICAgIGN1cl9vZmZzZXRb bGV2ZWxdID0gb2Zmc2V0OwotICAgICAgICAgICAgICAgIC8qIEFueSBtYXBwaW5nIGZ1cnRoZXIg ZG93biBpcyBub3cgaW52YWxpZCAqLwotICAgICAgICAgICAgICAgIGZvciAoIGkgPSBsZXZlbCsx OyBpIDwgNDsgaSsrICkKLSAgICAgICAgICAgICAgICAgICAgY3VyX29mZnNldFtpXSA9IH4wOwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogZWxzZTogbmV4dCBsZXZlbCBhbHJlYWR5IHZh bGlkICovCi0gICAgICAgIH0KLQotICAgICAgICBCVUdfT04obGV2ZWwgPiAzKTsKLSAgICB9Ci0K LSAgICByYyA9IDA7Ci0KLW91dDoKLSAgICBpZiAoIGZsdXNoICkKLSAgICB7Ci0gICAgICAgIHAy bV9mbHVzaF90bGJfc3luYygmZC0+YXJjaC5wMm0pOwotICAgICAgICByZXQgPSBpb21tdV9pb3Rs Yl9mbHVzaChkLCBnZm5feChzZ2ZuKSwgbnIpOwotICAgICAgICBpZiAoICFyYyApCi0gICAgICAg ICAgICByYyA9IHJldDsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIChwZyA9IHBhZ2VfbGlzdF9yZW1v dmVfaGVhZCgmZnJlZV9wYWdlcykpICkKLSAgICAgICAgZnJlZV9kb21oZWFwX3BhZ2UocGcpOwot Ci0gICAgZm9yICggbGV2ZWwgPSBQMk1fUk9PVF9MRVZFTDsgbGV2ZWwgPCA0OyBsZXZlbCArKyAp Ci0gICAgewotICAgICAgICBpZiAoIG1hcHBpbmdzW2xldmVsXSApCi0gICAgICAgICAgICB1bm1h cF9kb21haW5fcGFnZShtYXBwaW5nc1tsZXZlbF0pOwotICAgIH0KLQotICAgIHAybV93cml0ZV91 bmxvY2socDJtKTsKLQotICAgIHJldHVybiByYzsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgcDJt X2luc2VydF9tYXBwaW5nKHN0cnVjdCBkb21haW4gKmQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2ZuX3Qgc3RhcnRfZ2ZuLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbnIsCkBAIC0yMDY5LDYgKzE3ODAsNyBAQCBsb25n IHAybV9zZXRfbWVtX2FjY2VzcyhzdHJ1Y3QgZG9tYWluICpkLCBnZm5fdCBnZm4sIHVpbnQzMl90 IG5yLAogewogICAgIHN0cnVjdCBwMm1fZG9tYWluICpwMm0gPSBwMm1fZ2V0X2hvc3RwMm0oZCk7 CiAgICAgcDJtX2FjY2Vzc190IGE7CisgICAgdW5zaWduZWQgaW50IG9yZGVyOwogICAgIGxvbmcg cmMgPSAwOwogCiAgICAgc3RhdGljIGNvbnN0IHAybV9hY2Nlc3NfdCBtZW1hY2Nlc3NbXSA9IHsK QEAgLTIxMTEsOCArMTgyMyw0MyBAQCBsb25nIHAybV9zZXRfbWVtX2FjY2VzcyhzdHJ1Y3QgZG9t YWluICpkLCBnZm5fdCBnZm4sIHVpbnQzMl90IG5yLAogICAgICAgICByZXR1cm4gMDsKICAgICB9 CiAKLSAgICByYyA9IGFwcGx5X3AybV9jaGFuZ2VzKGQsIE1FTUFDQ0VTUywgZ2ZuX2FkZChnZm4s IHN0YXJ0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChuciAtIHN0YXJ0KSwgSU5WQUxJ RF9NRk4sIG1hc2ssIDAsIGEpOworICAgIHAybV93cml0ZV9sb2NrKHAybSk7CisKKyAgICBmb3Ig KCBnZm4gPSBnZm5fYWRkKGdmbiwgc3RhcnQpOyBuciA+IHN0YXJ0OyBnZm4gPSBnZm5fYWRkKGdm biwgMVVMIDw8IG9yZGVyKSApCisgICAgeworICAgICAgICBwMm1fdHlwZV90IHQ7CisgICAgICAg IG1mbl90IG1mbiA9IHAybV9nZXRfZW50cnkocDJtLCBnZm4sICZ0LCBOVUxMLCAmb3JkZXIpOwor CisgICAgICAgIC8qIFNraXAgaG9sZSAqLworICAgICAgICBpZiAoIG1mbl9lcShtZm4sIElOVkFM SURfTUZOKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiB0aGUg b3JkZXIgY29ycmVzcG9uZHMgdG8gdGhlIG9yZGVyIG9mIHRoZSBtYXBwaW5nIGluIHRoZQorICAg ICAgICAgICAgICogcGFnZSB0YWJsZS4gc28gd2UgbmVlZCB0byBhbGlnbiB0aGUgZ2ZuIGJlZm9y ZQorICAgICAgICAgICAgICogaW5jcmVtZW50aW5nLgorICAgICAgICAgICAgICovCisgICAgICAg ICAgICBnZm4gPSBfZ2ZuKGdmbl94KGdmbikgJiB+KCgxVUwgPDwgb3JkZXIpIC0gMSkpOworICAg ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg ICAgICAgICAgICBvcmRlciA9IDA7CisgICAgICAgICAgICByYyA9IF9fcDJtX3NldF9lbnRyeShw Mm0sIGdmbiwgMCwgbWZuLCB0LCBhKTsKKyAgICAgICAgICAgIGlmICggcmMgKQorICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3RhcnQgKz0gKDFVTCA8PCBvcmRl cik7CisgICAgICAgIC8qIENoZWNrIGZvciBjb250aW51YXRpb24gaWYgaXQgaXMgbm90IHRoZSBs YXN0IGl0ZXJhdGlvbiAqLworICAgICAgICBpZiAoIG5yID4gc3RhcnQgJiYgIShzdGFydCAmIG1h c2spICYmIGh5cGVyY2FsbF9wcmVlbXB0X2NoZWNrKCkgKQorICAgICAgICB7CisgICAgICAgICAg ICByYyA9IHN0YXJ0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAg ICBwMm1fd3JpdGVfdW5sb2NrKHAybSk7CisKICAgICBpZiAoIHJjIDwgMCApCiAgICAgICAgIHJl dHVybiByYzsKICAgICBlbHNlIGlmICggcmMgPiAwICkKLS0gCjEuOS4xCgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlz dApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVs Cg==