From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: [for-4.8][PATCH v2 21/23] xen/arm: p2m: Re-implement p2m_set_mem_access using p2m_{set, get}_entry Date: Thu, 15 Sep 2016 12:28:37 +0100 Message-ID: <1473938919-31976-22-git-send-email-julien.grall@arm.com> References: <1473938919-31976-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: <1473938919-31976-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 eS4KCkFsc28gdGhlIGZ1bmN0aW9uIGFwcGx5X3AybV9jaGFuZ2VzIGlzIGRyb3BwZWQgY29tcGxl dGVseSBhcyBpdCBpcyBub3QKdXNlZCBhbnltb3JlLgoKU2lnbmVkLW9mZi1ieTogSnVsaWVuIEdy YWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KUmV2aWV3ZWQtYnk6IFN0ZWZhbm8gU3RhYmVsbGlu aSA8c3N0YWJlbGxpbmlAa2VybmVsLm9yZz4KQ2M6IFJhenZhbiBDb2pvY2FydSA8cmNvam9jYXJ1 QGJpdGRlZmVuZGVyLmNvbT4KQ2M6IFRhbWFzIEsgTGVuZ3llbCA8dGFtYXNAdGtsZW5neWVsLmNv bT4KCi0tLQogICAgQ2hhbmdlcyBpbiB2MjoKICAgICAgICAtIFJlbW92ZSBsZXZlbF9zaGlmdHMg YXMgaXQgaXMgbm90IHVzZWQgYW55bW9yZQogICAgICAgIC0gRml4IG11bHRpcGxlIGJ1Z3MgaW4g dGhlIGNvZGUKICAgICAgICAtIFVzZSBnZm5fbmV4dF9ib3VuZGFyeQogICAgICAgIC0gRHJvcCB0 aGUgcGFyYWdyYXBoIGFib3V0IHBlcmZvcm1hbmNlIGlzc3VlIGFzCiAgICAgICAgQnJlYWstQmVm b3JlLU1ha2UgaXMgbm90IHJlcXVpcmVkIHdoZW4gb25seSB0aGUgcGVybWlzc2lvbiBhcmUKICAg ICAgICBjaGFuZ2VkLgotLS0KIHhlbi9hcmNoL2FybS9wMm0uYyB8IDMyNyArKysrKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs IDI5IGluc2VydGlvbnMoKyksIDI5OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS94ZW4vYXJj aC9hcm0vcDJtLmMgYi94ZW4vYXJjaC9hcm0vcDJtLmMKaW5kZXggNzM0OTIzYi4uYWE3NDBjMiAx MDA2NDQKLS0tIGEveGVuL2FyY2gvYXJtL3AybS5jCisrKyBiL3hlbi9hcmNoL2FybS9wMm0uYwpA QCAtMzQsOCArMzQsNiBAQCBzdGF0aWMgY29uc3QgcGFkZHJfdCBsZXZlbF9zaXplc1tdID0KICAg ICB7IFpFUk9FVEhfU0laRSwgRklSU1RfU0laRSwgU0VDT05EX1NJWkUsIFRISVJEX1NJWkUgfTsK IHN0YXRpYyBjb25zdCBwYWRkcl90IGxldmVsX21hc2tzW10gPQogICAgIHsgWkVST0VUSF9NQVNL LCBGSVJTVF9NQVNLLCBTRUNPTkRfTUFTSywgVEhJUkRfTUFTSyB9Owotc3RhdGljIGNvbnN0IHVp bnQ4X3QgbGV2ZWxfc2hpZnRzW10gPQotICAgIHsgWkVST0VUSF9TSElGVCwgRklSU1RfU0hJRlQs IFNFQ09ORF9TSElGVCwgVEhJUkRfU0hJRlQgfTsKIHN0YXRpYyBjb25zdCB1aW50OF90IGxldmVs X29yZGVyc1tdID0KICAgICB7IFpFUk9FVEhfT1JERVIsIEZJUlNUX09SREVSLCBTRUNPTkRfT1JE RVIsIFRISVJEX09SREVSIH07CiAKQEAgLTExNTQsMjk1ICsxMTUyLDYgQEAgaW50IHAybV9zZXRf ZW50cnkoc3RydWN0IHAybV9kb21haW4gKnAybSwKICAgICByZXR1cm4gcmM7CiB9CiAKLSNkZWZp bmUgUDJNX09ORV9ERVNDRU5EICAgICAgICAwCi0jZGVmaW5lIFAyTV9PTkVfUFJPR1JFU1NfTk9Q ICAgMHgxCi0jZGVmaW5lIFAyTV9PTkVfUFJPR1JFU1MgICAgICAgMHgxMAotCi1zdGF0aWMgaW50 IHAybV9zaGF0dGVyX3BhZ2Uoc3RydWN0IHAybV9kb21haW4gKnAybSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBscGFlX3QgKmVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBsZXZlbCkKLXsKLSAgICBjb25zdCB1aW50OF90IGxldmVsX3NoaWZ0ID0g bGV2ZWxfc2hpZnRzW2xldmVsXTsKLSAgICBpbnQgcmMgPSBwMm1fY3JlYXRlX3RhYmxlKHAybSwg ZW50cnksIGxldmVsX3NoaWZ0IC0gUEFHRV9TSElGVCk7Ci0KLSAgICBpZiAoICFyYyApCi0gICAg ewotICAgICAgICBwMm0tPnN0YXRzLnNoYXR0ZXJlZFtsZXZlbF0rKzsKLSAgICAgICAgcDJtLT5z dGF0cy5tYXBwaW5nc1tsZXZlbF0tLTsKLSAgICAgICAgcDJtLT5zdGF0cy5tYXBwaW5nc1tsZXZl bCsxXSArPSBMUEFFX0VOVFJJRVM7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJjOwotfQotCi0vKgot ICogMCAgID09IChQMk1fT05FX0RFU0NFTkQpIGNvbnRpbnVlIHRvIGRlc2NlbmQgdGhlIHRyZWUK LSAqICt2ZSA9PSAoUDJNX09ORV9QUk9HUkVTU18qKSBoYW5kbGVkIGF0IHRoaXMgbGV2ZWwsIGNv bnRpbnVlLCBmbHVzaCwKLSAqICAgICAgICBlbnRyeSwgYWRkciBhbmQgbWFkZHIgdXBkYXRlZC4g IFJldHVybiB2YWx1ZSBpcyBhbgotICogICAgICAgIGluZGljYXRpb24gb2YgdGhlIGFtb3VudCBv ZiB3b3JrIGRvbmUgKGZvciBwcmVlbXB0aW9uKS4KLSAqIC12ZSA9PSAoLUV4eHgpIGVycm9yLgot ICovCi1zdGF0aWMgaW50IGFwcGx5X29uZV9sZXZlbChzdHJ1Y3QgZG9tYWluICpkLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgbHBhZV90ICplbnRyeSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu dW0gcDJtX29wZXJhdGlvbiBvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRyX3Qg c3RhcnRfZ3BhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZHJfdCBlbmRfZ3Bh ZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZHJfdCAqYWRkciwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBhZGRyX3QgKm1hZGRyLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgYm9vbF90ICpmbHVzaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHAybV90eXBl X3QgdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHAybV9hY2Nlc3NfdCBhKQotewotICAg IGNvbnN0IHBhZGRyX3QgbGV2ZWxfc2l6ZSA9IGxldmVsX3NpemVzW2xldmVsXTsKLQotICAgIHN0 cnVjdCBwMm1fZG9tYWluICpwMm0gPSAmZC0+YXJjaC5wMm07Ci0gICAgbHBhZV90IHB0ZTsKLSAg ICBjb25zdCBscGFlX3Qgb3JpZ19wdGUgPSAqZW50cnk7Ci0gICAgaW50IHJjOwotCi0gICAgQlVH X09OKGxldmVsID4gMyk7Ci0KLSAgICBzd2l0Y2ggKCBvcCApCi0gICAgewotICAgIGNhc2UgTUVN QUNDRVNTOgotICAgICAgICBpZiAoIGxldmVsIDwgMyApCi0gICAgICAgIHsKLSAgICAgICAgICAg IGlmICggIXAybV92YWxpZChvcmlnX3B0ZSkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAg ICAgICphZGRyICs9IGxldmVsX3NpemU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFAyTV9PTkVf UFJPR1JFU1NfTk9QOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBTaGF0dGVyIGxh cmdlIHBhZ2VzIGFzIHdlIGRlc2NlbmQgKi8KLSAgICAgICAgICAgIGlmICggcDJtX21hcHBpbmco b3JpZ19wdGUpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByYyA9IHAybV9zaGF0 dGVyX3BhZ2UocDJtLCBlbnRyeSwgbGV2ZWwpOwotICAgICAgICAgICAgICAgIGlmICggcmMgPCAw ICkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJjOwotICAgICAgICAgICAgfSAvKiBlbHNl OiBhbiBleGlzdGluZyB0YWJsZSBtYXBwaW5nIC0+IGRlc2NlbmQgKi8KLQotICAgICAgICAgICAg cmV0dXJuIFAyTV9PTkVfREVTQ0VORDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAg IHsKLSAgICAgICAgICAgIHB0ZSA9IG9yaWdfcHRlOwotCi0gICAgICAgICAgICBpZiAoIHAybV92 YWxpZChwdGUpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByYyA9IHAybV9tZW1f YWNjZXNzX3JhZGl4X3NldChwMm0sIF9nZm4ocGFkZHJfdG9fcGZuKCphZGRyKSksCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSk7Ci0gICAgICAgICAgICAg ICAgaWYgKCByYyA8IDAgKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmM7Ci0KLSAgICAg ICAgICAgICAgICBwMm1fc2V0X3Blcm1pc3Npb24oJnB0ZSwgcHRlLnAybS50eXBlLCBhKTsKLSAg ICAgICAgICAgICAgICBwMm1fd3JpdGVfcHRlKGVudHJ5LCBwdGUsIHAybS0+Y2xlYW5fcHRlKTsK LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgKmFkZHIgKz0gbGV2ZWxfc2l6ZTsKLSAgICAg ICAgICAgICpmbHVzaCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gUDJNX09ORV9QUk9HUkVT UzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEJVRygpOyAvKiBTaG91bGQgbmV2ZXIgZ2V0IGhl cmUgKi8KLX0KLQotLyoKLSAqIFRoZSBwYWdlIGlzIG9ubHkgdXNlZCBieSB0aGUgUDJNIGNvZGUg d2hpY2ggaXMgcHJvdGVjdGVkIGJ5IHRoZSBwMm0tPmxvY2suCi0gKiBTbyB3ZSBjYW4gYXZvaWQg dG8gdXNlIGF0b21pYyBoZWxwZXJzLgotICovCi1zdGF0aWMgdm9pZCB1cGRhdGVfcmVmZXJlbmNl X21hcHBpbmcoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBscGFlX3Qgb2xkX2VudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxwYWVfdCBuZXdfZW50cnkpCi17Ci0gICAgaWYgKCBwMm1fdmFsaWQob2xk X2VudHJ5KSAmJiAhcDJtX3ZhbGlkKG5ld19lbnRyeSkgKQotICAgICAgICBwYWdlLT51LmludXNl LnAybV9yZWZjb3VudC0tOwotICAgIGVsc2UgaWYgKCAhcDJtX3ZhbGlkKG9sZF9lbnRyeSkgJiYg cDJtX3ZhbGlkKG5ld19lbnRyeSkgKQotICAgICAgICBwYWdlLT51LmludXNlLnAybV9yZWZjb3Vu dCsrOwotfQotCi1zdGF0aWMgaW50IGFwcGx5X3AybV9jaGFuZ2VzKHN0cnVjdCBkb21haW4gKmQs Ci0gICAgICAgICAgICAgICAgICAgICBlbnVtIHAybV9vcGVyYXRpb24gb3AsCi0gICAgICAgICAg ICAgICAgICAgICBnZm5fdCBzZ2ZuLAotICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9u ZyBuciwKLSAgICAgICAgICAgICAgICAgICAgIG1mbl90IHNtZm4sCi0gICAgICAgICAgICAgICAg ICAgICB1aW50MzJfdCBtYXNrLAotICAgICAgICAgICAgICAgICAgICAgcDJtX3R5cGVfdCB0LAot ICAgICAgICAgICAgICAgICAgICAgcDJtX2FjY2Vzc190IGEpCi17Ci0gICAgcGFkZHJfdCBzdGFy dF9ncGFkZHIgPSBwZm5fdG9fcGFkZHIoZ2ZuX3goc2dmbikpOwotICAgIHBhZGRyX3QgZW5kX2dw YWRkciA9IHBmbl90b19wYWRkcihnZm5feChzZ2ZuKSArIG5yKTsKLSAgICBwYWRkcl90IG1hZGRy ID0gcGZuX3RvX3BhZGRyKG1mbl94KHNtZm4pKTsKLSAgICBpbnQgcmMsIHJldDsKLSAgICBzdHJ1 Y3QgcDJtX2RvbWFpbiAqcDJtID0gJmQtPmFyY2gucDJtOwotICAgIGxwYWVfdCAqbWFwcGluZ3Nb NF0gPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKLSAgICBzdHJ1Y3QgcGFnZV9pbmZvICpw YWdlc1s0XSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OwotICAgIHBhZGRyX3QgYWRkcjsK LSAgICB1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOwotICAgIHVuc2lnbmVkIGludCBjdXJfcm9vdF90 YWJsZSA9IH4wOwotICAgIHVuc2lnbmVkIGludCBjdXJfb2Zmc2V0WzRdID0geyB+MCwgfjAsIH4w LCB+MCB9OwotICAgIHVuc2lnbmVkIGludCBjb3VudCA9IDA7Ci0gICAgY29uc3QgdW5zaWduZWQg aW50IHByZWVtcHRfY291bnRfbGltaXQgPSAob3AgPT0gTUVNQUNDRVNTKSA/IDEgOiAweDIwMDA7 Ci0gICAgY29uc3QgYm9vbF90IHByZWVtcHQgPSAhaXNfaWRsZV92Y3B1KGN1cnJlbnQpOwotICAg IGJvb2xfdCBmbHVzaCA9IGZhbHNlOwotICAgIFBBR0VfTElTVF9IRUFEKGZyZWVfcGFnZXMpOwot ICAgIHN0cnVjdCBwYWdlX2luZm8gKnBnOwotCi0gICAgcDJtX3dyaXRlX2xvY2socDJtKTsKLQot ICAgIC8qIFN0YXRpYyBtYXBwaW5nLiBQMk1fUk9PVF9QQUdFUyA+IDEgYXJlIGhhbmRsZWQgYmVs b3cgKi8KLSAgICBpZiAoIFAyTV9ST09UX1BBR0VTID09IDEgKQotICAgIHsKLSAgICAgICAgbWFw cGluZ3NbUDJNX1JPT1RfTEVWRUxdID0gX19tYXBfZG9tYWluX3BhZ2UocDJtLT5yb290KTsKLSAg ICAgICAgcGFnZXNbUDJNX1JPT1RfTEVWRUxdID0gcDJtLT5yb290OwotICAgIH0KLQotICAgIGFk ZHIgPSBzdGFydF9ncGFkZHI7Ci0gICAgd2hpbGUgKCBhZGRyIDwgZW5kX2dwYWRkciApCi0gICAg ewotICAgICAgICBpbnQgcm9vdF90YWJsZTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG9m ZnNldHNbNF0gPSB7Ci0gICAgICAgICAgICB6ZXJvZXRoX3RhYmxlX29mZnNldChhZGRyKSwKLSAg ICAgICAgICAgIGZpcnN0X3RhYmxlX29mZnNldChhZGRyKSwKLSAgICAgICAgICAgIHNlY29uZF90 YWJsZV9vZmZzZXQoYWRkciksCi0gICAgICAgICAgICB0aGlyZF90YWJsZV9vZmZzZXQoYWRkcikK LSAgICAgICAgfTsKLQotICAgICAgICAvKgotICAgICAgICAgKiBDaGVjayBpZiBjdXJyZW50IGl0 ZXJhdGlvbiBzaG91bGQgYmUgcG9zc2libHkgcHJlZW1wdGVkLgotICAgICAgICAgKiBTaW5jZSBj b3VudCBpcyBpbml0aWFsaXNlZCB0byAwIGFib3ZlIHdlIGFyZSBndWFyYW50ZWVkIHRvCi0gICAg ICAgICAqIGFsd2F5cyBtYWtlIGF0IGxlYXN0IG9uZSBwYXNzIGFzIGxvbmcgYXMgcHJlZW1wdF9j b3VudF9saW1pdCBpcwotICAgICAgICAgKiBpbml0aWFsaXplZCB3aXRoIGEgdmFsdWUgPj0gMS4K LSAgICAgICAgICovCi0gICAgICAgIGlmICggcHJlZW1wdCAmJiBjb3VudCA+PSBwcmVlbXB0X2Nv dW50X2xpbWl0Ci0gICAgICAgICAgICAgJiYgaHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKSApCi0g ICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoIG9wICkKLSAgICAgICAgICAgIHsKLSAgICAg ICAgICAgIGNhc2UgTUVNQUNDRVNTOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8q Ci0gICAgICAgICAgICAgICAgICogUHJlZW1wdCBzZXR0aW5nIG1lbV9hY2Nlc3MgcGVybWlzc2lv bnMgYXMgcmVxdWlyZWQgYnkgWFNBLTg5LAotICAgICAgICAgICAgICAgICAqIGlmIGl0J3Mgbm90 IHRoZSBsYXN0IGl0ZXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAg ICB1aW50MzJfdCBwcm9ncmVzcyA9IHBhZGRyX3RvX3BmbihhZGRyKSAtIGdmbl94KHNnZm4pICsg MTsKLQotICAgICAgICAgICAgICAgIGlmICggbnIgPiBwcm9ncmVzcyAmJiAhKHByb2dyZXNzICYg bWFzaykgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmMgPSBwcm9n cmVzczsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZWZh dWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAg ICAgLyoKLSAgICAgICAgICAgICAqIFJlc2V0IGN1cnJlbnQgaXRlcmF0aW9uIGNvdW50ZXIuCi0g ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNvdW50ID0gMDsKLSAgICAgICAgfQotCi0gICAg ICAgIGlmICggUDJNX1JPT1RfUEFHRVMgPiAxICkKLSAgICAgICAgewotICAgICAgICAgICAgaW50 IGk7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogQ29uY2F0ZW5hdGVkIHJvb3QtbGV2 ZWwgdGFibGVzLiBUaGUgdGFibGUgbnVtYmVyIHdpbGwgYmUgdGhlCi0gICAgICAgICAgICAgKiBv ZmZzZXQgYXQgdGhlIHByZXZpb3VzIGxldmVsLiBJdCBpcyBub3QgcG9zc2libGUgdG8gY29uY2F0 ZW5hdGUKLSAgICAgICAgICAgICAqIGEgbGV2ZWwtMCByb290LgotICAgICAgICAgICAgICovCi0g ICAgICAgICAgICBBU1NFUlQoUDJNX1JPT1RfTEVWRUwgPiAwKTsKLSAgICAgICAgICAgIHJvb3Rf dGFibGUgPSBvZmZzZXRzW1AyTV9ST09UX0xFVkVMIC0gMV07Ci0gICAgICAgICAgICBpZiAoIHJv b3RfdGFibGUgPj0gUDJNX1JPT1RfUEFHRVMgKQotICAgICAgICAgICAgewotICAgICAgICAgICAg ICAgIHJjID0gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgICAg IH0KLQotICAgICAgICAgICAgaWYgKCBjdXJfcm9vdF90YWJsZSAhPSByb290X3RhYmxlICkKLSAg ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIG1hcHBpbmdzW1AyTV9ST09UX0xFVkVM XSApCi0gICAgICAgICAgICAgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKG1hcHBpbmdzW1AyTV9S T09UX0xFVkVMXSk7Ci0gICAgICAgICAgICAgICAgbWFwcGluZ3NbUDJNX1JPT1RfTEVWRUxdID0K LSAgICAgICAgICAgICAgICAgICAgX19tYXBfZG9tYWluX3BhZ2UocDJtLT5yb290ICsgcm9vdF90 YWJsZSk7Ci0gICAgICAgICAgICAgICAgcGFnZXNbUDJNX1JPT1RfTEVWRUxdID0gcDJtLT5yb290 ICsgcm9vdF90YWJsZTsKLSAgICAgICAgICAgICAgICBjdXJfcm9vdF90YWJsZSA9IHJvb3RfdGFi bGU7Ci0gICAgICAgICAgICAgICAgLyogQW55IG1hcHBpbmcgZnVydGhlciBkb3duIGlzIG5vdyBp bnZhbGlkICovCi0gICAgICAgICAgICAgICAgZm9yICggaSA9IFAyTV9ST09UX0xFVkVMOyBpIDwg NDsgaSsrICkKLSAgICAgICAgICAgICAgICAgICAgY3VyX29mZnNldFtpXSA9IH4wOwotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICggbGV2ZWwgPSBQMk1fUk9PVF9MRVZF TDsgbGV2ZWwgPCA0OyBsZXZlbCsrICkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQg b2Zmc2V0ID0gb2Zmc2V0c1tsZXZlbF07Ci0gICAgICAgICAgICBscGFlX3QgKmVudHJ5ID0gJm1h cHBpbmdzW2xldmVsXVtvZmZzZXRdOwotICAgICAgICAgICAgbHBhZV90IG9sZF9lbnRyeSA9ICpl bnRyeTsKLQotICAgICAgICAgICAgcmV0ID0gYXBwbHlfb25lX2xldmVsKGQsIGVudHJ5LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsLCBvcCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdGFydF9ncGFkZHIsIGVuZF9ncGFkZHIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmFkZHIsICZtYWRkciwgJmZsdXNoLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHQsIGEpOwotICAgICAgICAgICAgaWYgKCByZXQgPCAw ICkgeyByYyA9IHJldCA7IGdvdG8gb3V0OyB9Ci0gICAgICAgICAgICBjb3VudCArPSByZXQ7Ci0K LSAgICAgICAgICAgIGlmICggcmV0ICE9IFAyTV9PTkVfUFJPR1JFU1NfTk9QICkKLSAgICAgICAg ICAgICAgICB1cGRhdGVfcmVmZXJlbmNlX21hcHBpbmcocGFnZXNbbGV2ZWxdLCBvbGRfZW50cnks ICplbnRyeSk7Ci0KLSAgICAgICAgICAgIC8qIEwzIGhhZCBiZXR0ZXIgaGF2ZSBkb25lIHNvbWV0 aGluZyEgV2UgY2Fubm90IGRlc2NlbmQgYW55IGZ1cnRoZXIgKi8KLSAgICAgICAgICAgIEJVR19P TihsZXZlbCA9PSAzICYmIHJldCA9PSBQMk1fT05FX0RFU0NFTkQpOwotICAgICAgICAgICAgaWYg KCByZXQgIT0gUDJNX09ORV9ERVNDRU5EICkgYnJlYWs7Ci0KLSAgICAgICAgICAgIEJVR19PTigh cDJtX3ZhbGlkKCplbnRyeSkpOwotCi0gICAgICAgICAgICBpZiAoIGN1cl9vZmZzZXRbbGV2ZWxd ICE9IG9mZnNldCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogVXBkYXRlIG1h cHBpbmcgZm9yIG5leHQgbGV2ZWwgKi8KLSAgICAgICAgICAgICAgICBpbnQgaTsKLSAgICAgICAg ICAgICAgICBpZiAoIG1hcHBpbmdzW2xldmVsKzFdICkKLSAgICAgICAgICAgICAgICAgICAgdW5t YXBfZG9tYWluX3BhZ2UobWFwcGluZ3NbbGV2ZWwrMV0pOwotICAgICAgICAgICAgICAgIG1hcHBp bmdzW2xldmVsKzFdID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4oZW50cnktPnAybS5iYXNlKSk7Ci0g ICAgICAgICAgICAgICAgcGFnZXNbbGV2ZWwrMV0gPSBtZm5fdG9fcGFnZShlbnRyeS0+cDJtLmJh c2UpOwotICAgICAgICAgICAgICAgIGN1cl9vZmZzZXRbbGV2ZWxdID0gb2Zmc2V0OwotICAgICAg ICAgICAgICAgIC8qIEFueSBtYXBwaW5nIGZ1cnRoZXIgZG93biBpcyBub3cgaW52YWxpZCAqLwot ICAgICAgICAgICAgICAgIGZvciAoIGkgPSBsZXZlbCsxOyBpIDwgNDsgaSsrICkKLSAgICAgICAg ICAgICAgICAgICAgY3VyX29mZnNldFtpXSA9IH4wOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgLyogZWxzZTogbmV4dCBsZXZlbCBhbHJlYWR5IHZhbGlkICovCi0gICAgICAgIH0KLQotICAg ICAgICBCVUdfT04obGV2ZWwgPiAzKTsKLSAgICB9Ci0KLSAgICByYyA9IDA7Ci0KLW91dDoKLSAg ICBpZiAoIGZsdXNoICkKLSAgICB7Ci0gICAgICAgIHAybV9mbHVzaF90bGJfc3luYygmZC0+YXJj aC5wMm0pOwotICAgICAgICByZXQgPSBpb21tdV9pb3RsYl9mbHVzaChkLCBnZm5feChzZ2ZuKSwg bnIpOwotICAgICAgICBpZiAoICFyYyApCi0gICAgICAgICAgICByYyA9IHJldDsKLSAgICB9Ci0K LSAgICB3aGlsZSAoIChwZyA9IHBhZ2VfbGlzdF9yZW1vdmVfaGVhZCgmZnJlZV9wYWdlcykpICkK LSAgICAgICAgZnJlZV9kb21oZWFwX3BhZ2UocGcpOwotCi0gICAgZm9yICggbGV2ZWwgPSBQMk1f Uk9PVF9MRVZFTDsgbGV2ZWwgPCA0OyBsZXZlbCArKyApCi0gICAgewotICAgICAgICBpZiAoIG1h cHBpbmdzW2xldmVsXSApCi0gICAgICAgICAgICB1bm1hcF9kb21haW5fcGFnZShtYXBwaW5nc1ts ZXZlbF0pOwotICAgIH0KLQotICAgIHAybV93cml0ZV91bmxvY2socDJtKTsKLQotICAgIHJldHVy biByYzsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgcDJtX2luc2VydF9tYXBwaW5nKHN0cnVjdCBk b21haW4gKmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ZuX3Qgc3Rh cnRfZ2ZuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxv bmcgbnIsCkBAIC0yMTM5LDYgKzE4NDgsNyBAQCBsb25nIHAybV9zZXRfbWVtX2FjY2VzcyhzdHJ1 Y3QgZG9tYWluICpkLCBnZm5fdCBnZm4sIHVpbnQzMl90IG5yLAogewogICAgIHN0cnVjdCBwMm1f ZG9tYWluICpwMm0gPSBwMm1fZ2V0X2hvc3RwMm0oZCk7CiAgICAgcDJtX2FjY2Vzc190IGE7Cisg ICAgdW5zaWduZWQgaW50IG9yZGVyOwogICAgIGxvbmcgcmMgPSAwOwogCiAgICAgc3RhdGljIGNv bnN0IHAybV9hY2Nlc3NfdCBtZW1hY2Nlc3NbXSA9IHsKQEAgLTIxODEsMTQgKzE4OTEsMzUgQEAg bG9uZyBwMm1fc2V0X21lbV9hY2Nlc3Moc3RydWN0IGRvbWFpbiAqZCwgZ2ZuX3QgZ2ZuLCB1aW50 MzJfdCBuciwKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgcmMgPSBhcHBseV9wMm1f Y2hhbmdlcyhkLCBNRU1BQ0NFU1MsIGdmbl9hZGQoZ2ZuLCBzdGFydCksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAobnIgLSBzdGFydCksIElOVkFMSURfTUZOLCBtYXNrLCAwLCBhKTsKLSAg ICBpZiAoIHJjIDwgMCApCi0gICAgICAgIHJldHVybiByYzsKLSAgICBlbHNlIGlmICggcmMgPiAw ICkKLSAgICAgICAgcmV0dXJuIHN0YXJ0ICsgcmM7CisgICAgcDJtX3dyaXRlX2xvY2socDJtKTsK IAotICAgIHJldHVybiAwOworICAgIGZvciAoIGdmbiA9IGdmbl9hZGQoZ2ZuLCBzdGFydCk7IG5y ID4gc3RhcnQ7CisgICAgICAgICAgZ2ZuID0gZ2ZuX25leHRfYm91bmRhcnkoZ2ZuLCBvcmRlcikg KQorICAgIHsKKyAgICAgICAgcDJtX3R5cGVfdCB0OworICAgICAgICBtZm5fdCBtZm4gPSBwMm1f Z2V0X2VudHJ5KHAybSwgZ2ZuLCAmdCwgTlVMTCwgJm9yZGVyKTsKKworCisgICAgICAgIGlmICgg IW1mbl9lcShtZm4sIElOVkFMSURfTUZOKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9yZGVy ID0gMDsKKyAgICAgICAgICAgIHJjID0gX19wMm1fc2V0X2VudHJ5KHAybSwgZ2ZuLCAwLCBtZm4s IHQsIGEpOworICAgICAgICAgICAgaWYgKCByYyApCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKworICAgICAgICBzdGFydCArPSBnZm5feChnZm5fbmV4dF9ib3VuZGFyeShnZm4s IG9yZGVyKSkgLSBnZm5feChnZm4pOworICAgICAgICAvKiBDaGVjayBmb3IgY29udGludWF0aW9u IGlmIGl0IGlzIG5vdCB0aGUgbGFzdCBpdGVyYXRpb24gKi8KKyAgICAgICAgaWYgKCBuciA+IHN0 YXJ0ICYmICEoc3RhcnQgJiBtYXNrKSAmJiBoeXBlcmNhbGxfcHJlZW1wdF9jaGVjaygpICkKKyAg ICAgICAgeworICAgICAgICAgICAgcmMgPSBzdGFydDsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICB9CisgICAgfQorCisgICAgcDJtX3dyaXRlX3VubG9jayhwMm0pOworCisgICAgcmV0dXJu IHJjOwogfQogCiBpbnQgcDJtX2dldF9tZW1fYWNjZXNzKHN0cnVjdCBkb21haW4gKmQsIGdmbl90 IGdmbiwKLS0gCjEuOS4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpo dHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==