From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v4 12/31] x86/mm: split out readonly MMIO emulation code Date: Thu, 17 Aug 2017 15:44:37 +0100 Message-ID: <20170817144456.18989-13-wei.liu2@citrix.com> References: <20170817144456.18989-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1diM5A-0002rp-0E for xen-devel@lists.xenproject.org; Thu, 17 Aug 2017 14:47:36 +0000 In-Reply-To: <20170817144456.18989-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: George Dunlap , Andrew Cooper , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org TW92ZSB0aGUgY29kZSB0byBwdi9lbXVsLW1taW8tb3AuYy4gRml4IGNvZGluZyBzdHlsZSBpc3N1 ZXMgd2hpbGUKbW92aW5nLgoKTm90ZSB0aGF0IG1taW9fcm9fZW11bGF0ZWRfd3JpdGUgaXMgbmVl ZGVkIGJ5IGJvdGggUFYgYW5kIEhWTSwgc28gaXQKaXMgbGVmdCBpbiB4ODYvbW0uYy4KClNpZ25l ZC1vZmYtYnk6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+Ci0tLQogeGVuL2FyY2gveDg2 L21tLmMgICAgICAgICAgICAgIHwgMTI5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiB4ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUgICAgICAgfCAgIDEgKwogeGVuL2FyY2gveDg2L3B2 L2VtdWwtbW1pby1vcC5jIHwgMTY2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDE2NyBpbnNlcnRpb25zKCspLCAxMjkgZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2FyY2gveDg2L3B2L2VtdWwtbW1pby1vcC5jCgpk aWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L21tLmMgYi94ZW4vYXJjaC94ODYvbW0uYwppbmRleCAz YzBhYTUyZjM4Li5hNDI3MjBjOGQxIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvbW0uYworKysg Yi94ZW4vYXJjaC94ODYvbW0uYwpAQCAtNDc4NSwxMSArNDc4NSw2IEBAIGxvbmcgYXJjaF9tZW1v cnlfb3AodW5zaWduZWQgbG9uZyBjbWQsIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odm9pZCkgYXJn KQogICAgIHJldHVybiAwOwogfQogCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBm YXVsdCBoYW5kbGluZyBmb3IgcmVhZC1vbmx5IE1NSU8gcGFnZXMKLSAqLwotCiBpbnQgbW1pb19y b19lbXVsYXRlZF93cml0ZSgKICAgICBlbnVtIHg4Nl9zZWdtZW50IHNlZywKICAgICB1bnNpZ25l ZCBsb25nIG9mZnNldCwKQEAgLTQ4MTEsMTMwICs0ODA2LDYgQEAgaW50IG1taW9fcm9fZW11bGF0 ZWRfd3JpdGUoCiAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKIH0KIAotc3RhdGljIGNvbnN0IHN0 cnVjdCB4ODZfZW11bGF0ZV9vcHMgbW1pb19yb19lbXVsYXRlX29wcyA9IHsKLSAgICAucmVhZCAg ICAgICA9IHg4NmVtdWxfdW5oYW5kbGVhYmxlX3J3LAotICAgIC5pbnNuX2ZldGNoID0gcHZfZW11 bF9wdHdyX3JlYWQsCi0gICAgLndyaXRlICAgICAgPSBtbWlvX3JvX2VtdWxhdGVkX3dyaXRlLAot ICAgIC52YWxpZGF0ZSAgID0gcHZfZW11bF9pc19tZW1fd3JpdGUsCi0gICAgLmNwdWlkICAgICAg PSBwdl9lbXVsX2NwdWlkLAotfTsKLQotaW50IG1tY2ZnX2ludGVyY2VwdF93cml0ZSgKLSAgICBl bnVtIHg4Nl9zZWdtZW50IHNlZywKLSAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKLSAgICB2b2lk ICpwX2RhdGEsCi0gICAgdW5zaWduZWQgaW50IGJ5dGVzLAotICAgIHN0cnVjdCB4ODZfZW11bGF0 ZV9jdHh0ICpjdHh0KQotewotICAgIHN0cnVjdCBtbWlvX3JvX2VtdWxhdGVfY3R4dCAqbW1pb19j dHh0ID0gY3R4dC0+ZGF0YTsKLQotICAgIC8qCi0gICAgICogT25seSBhbGxvdyBuYXR1cmFsbHkt YWxpZ25lZCBzdG9yZXMgbm8gd2lkZXIgdGhhbiA0IGJ5dGVzIHRvIHRoZQotICAgICAqIG9yaWdp bmFsICVjcjIgYWRkcmVzcy4KLSAgICAgKi8KLSAgICBpZiAoICgoYnl0ZXMgfCBvZmZzZXQpICYg KGJ5dGVzIC0gMSkpIHx8IGJ5dGVzID4gNCB8fCAhYnl0ZXMgfHwKLSAgICAgICAgIG9mZnNldCAh PSBtbWlvX2N0eHQtPmNyMiApCi0gICAgewotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklO RywgImJhZCB3cml0ZSAoY3IyPSVseCwgYWRkcj0lbHgsIGJ5dGVzPSV1KVxuIiwKLSAgICAgICAg ICAgICAgICBtbWlvX2N0eHQtPmNyMiwgb2Zmc2V0LCBieXRlcyk7Ci0gICAgICAgIHJldHVybiBY ODZFTVVMX1VOSEFORExFQUJMRTsKLSAgICB9Ci0KLSAgICBvZmZzZXQgJj0gMHhmZmY7Ci0gICAg aWYgKCBwY2lfY29uZl93cml0ZV9pbnRlcmNlcHQobW1pb19jdHh0LT5zZWcsIG1taW9fY3R4dC0+ YmRmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCwgYnl0ZXMsIHBf ZGF0YSkgPj0gMCApCi0gICAgICAgIHBjaV9tbWNmZ193cml0ZShtbWlvX2N0eHQtPnNlZywgUENJ X0JVUyhtbWlvX2N0eHQtPmJkZiksCi0gICAgICAgICAgICAgICAgICAgICAgICBQQ0lfREVWRk4y KG1taW9fY3R4dC0+YmRmKSwgb2Zmc2V0LCBieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAg ICoodWludDMyX3QgKilwX2RhdGEpOwotCi0gICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLX0KLQot c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgbW1jZmdfaW50ZXJjZXB0X29wcyA9 IHsKLSAgICAucmVhZCAgICAgICA9IHg4NmVtdWxfdW5oYW5kbGVhYmxlX3J3LAotICAgIC5pbnNu X2ZldGNoID0gcHZfZW11bF9wdHdyX3JlYWQsCi0gICAgLndyaXRlICAgICAgPSBtbWNmZ19pbnRl cmNlcHRfd3JpdGUsCi0gICAgLnZhbGlkYXRlICAgPSBwdl9lbXVsX2lzX21lbV93cml0ZSwKLSAg ICAuY3B1aWQgICAgICA9IHB2X2VtdWxfY3B1aWQsCi19OwotCi0vKiBDaGVjayBpZiBndWVzdCBp cyB0cnlpbmcgdG8gbW9kaWZ5IGEgci9vIE1NSU8gcGFnZS4gKi8KLWludCBtbWlvX3JvX2RvX3Bh Z2VfZmF1bHQoc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGxvbmcgYWRkciwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCi17Ci0gICAgbDFfcGdl bnRyeV90IHB0ZTsKLSAgICB1bnNpZ25lZCBsb25nIG1mbjsKLSAgICB1bnNpZ25lZCBpbnQgYWRk cl9zaXplID0gaXNfcHZfMzJiaXRfdmNwdSh2KSA/IDMyIDogQklUU19QRVJfTE9ORzsKLSAgICBz dHJ1Y3QgbW1pb19yb19lbXVsYXRlX2N0eHQgbW1pb19yb19jdHh0ID0geyAuY3IyID0gYWRkciB9 OwotICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0IGN0eHQgPSB7Ci0gICAgICAgIC5yZWdzID0g cmVncywKLSAgICAgICAgLnZlbmRvciA9IHYtPmRvbWFpbi0+YXJjaC5jcHVpZC0+eDg2X3ZlbmRv ciwKLSAgICAgICAgLmFkZHJfc2l6ZSA9IGFkZHJfc2l6ZSwKLSAgICAgICAgLnNwX3NpemUgPSBh ZGRyX3NpemUsCi0gICAgICAgIC5sbWEgPSAhaXNfcHZfMzJiaXRfdmNwdSh2KSwKLSAgICAgICAg LmRhdGEgPSAmbW1pb19yb19jdHh0LAotICAgIH07Ci0gICAgaW50IHJjOwotCi0gICAgLyogQXR0 ZW1wdCB0byByZWFkIHRoZSBQVEUgdGhhdCBtYXBzIHRoZSBWQSBiZWluZyBhY2Nlc3NlZC4gKi8K LSAgICBwdl9nZXRfZ3Vlc3RfZWZmX2wxZShhZGRyLCAmcHRlKTsKLQotICAgIC8qIFdlIGFyZSBs b29raW5nIG9ubHkgZm9yIHJlYWQtb25seSBtYXBwaW5ncyBvZiBNTUlPIHBhZ2VzLiAqLwotICAg IGlmICggKChsMWVfZ2V0X2ZsYWdzKHB0ZSkgJiAoX1BBR0VfUFJFU0VOVHxfUEFHRV9SVykpICE9 IF9QQUdFX1BSRVNFTlQpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBtZm4gPSBsMWVfZ2V0 X3BmbihwdGUpOwotICAgIGlmICggbWZuX3ZhbGlkKF9tZm4obWZuKSkgKQotICAgIHsKLSAgICAg ICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSA9IG1mbl90b19wYWdlKG1mbik7Ci0gICAgICAgIHN0 cnVjdCBkb21haW4gKm93bmVyID0gcGFnZV9nZXRfb3duZXJfYW5kX3JlZmVyZW5jZShwYWdlKTsK LQotICAgICAgICBpZiAoIG93bmVyICkKLSAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOwotICAg ICAgICBpZiAoIG93bmVyICE9IGRvbV9pbyApCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9 Ci0KLSAgICBpZiAoICFyYW5nZXNldF9jb250YWluc19zaW5nbGV0b24obW1pb19yb19yYW5nZXMs IG1mbikgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICggcGNpX3JvX21tY2ZnX2RlY29k ZShtZm4sICZtbWlvX3JvX2N0eHQuc2VnLCAmbW1pb19yb19jdHh0LmJkZikgKQotICAgICAgICBy YyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmbW1jZmdfaW50ZXJjZXB0X29wcyk7Ci0gICAgZWxzZQot ICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmbW1pb19yb19lbXVsYXRlX29wcyk7Ci0K LSAgICBzd2l0Y2ggKCByYyApCi0gICAgewotICAgIGNhc2UgWDg2RU1VTF9FWENFUFRJT046Ci0g ICAgICAgIC8qCi0gICAgICAgICAqIFRoaXMgZW11bGF0aW9uIG9ubHkgY292ZXJzIHdyaXRlcyB0 byBNTUNGRyBzcGFjZSBvciByZWFkLW9ubHkgTUZOcy4KLSAgICAgICAgICogV2UgdG9sZXJhdGUg I1BGIChmcm9tIGhpdHRpbmcgYW4gYWRqYWNlbnQgcGFnZSBvciBhIHN1Y2Nlc3NmdWwKLSAgICAg ICAgICogY29uY3VycmVudCBwYWdldGFibGUgdXBkYXRlKS4gIEFueXRoaW5nIGVsc2UgaXMgYW4g ZW11bGF0aW9uIGJ1ZywKLSAgICAgICAgICogb3IgYSBndWVzdCBwbGF5aW5nIHdpdGggdGhlIGlu c3RydWN0aW9uIHN0cmVhbSB1bmRlciBYZW4ncyBmZWV0LgotICAgICAgICAgKi8KLSAgICAgICAg aWYgKCBjdHh0LmV2ZW50LnR5cGUgPT0gWDg2X0VWRU5UVFlQRV9IV19FWENFUFRJT04gJiYKLSAg ICAgICAgICAgICBjdHh0LmV2ZW50LnZlY3RvciA9PSBUUkFQX3BhZ2VfZmF1bHQgKQotICAgICAg ICAgICAgcHZfaW5qZWN0X2V2ZW50KCZjdHh0LmV2ZW50KTsKLSAgICAgICAgZWxzZQotICAgICAg ICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAiVW5l eHBlY3RlZCBldmVudCAodHlwZSAldSwgdmVjdG9yICUjeCkgZnJvbSBlbXVsYXRpb25cbiIsCi0g ICAgICAgICAgICAgICAgICAgICBjdHh0LmV2ZW50LnR5cGUsIGN0eHQuZXZlbnQudmVjdG9yKTsK LQotICAgICAgICAvKiBGYWxsdGhyb3VnaCAqLwotICAgIGNhc2UgWDg2RU1VTF9PS0FZOgotCi0g ICAgICAgIGlmICggY3R4dC5yZXRpcmUuc2luZ2xlc3RlcCApCi0gICAgICAgICAgICBwdl9pbmpl Y3RfaHdfZXhjZXB0aW9uKFRSQVBfZGVidWcsIFg4Nl9FVkVOVF9OT19FQyk7Ci0KLSAgICAgICAg LyogRmFsbHRocm91Z2ggKi8KLSAgICBjYXNlIFg4NkVNVUxfUkVUUlk6Ci0gICAgICAgIHBlcmZj X2luY3IocHR3cl9lbXVsYXRpb25zKTsKLSAgICAgICAgcmV0dXJuIEVYQ1JFVF9mYXVsdF9maXhl ZDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQogdm9pZCAqYWxsb2NfeGVuX3BhZ2V0YWJs ZSh2b2lkKQogewogICAgIGlmICggc3lzdGVtX3N0YXRlICE9IFNZU19TVEFURV9lYXJseV9ib290 ICkKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9wdi9NYWtlZmlsZSBiL3hlbi9hcmNoL3g4Ni9w di9NYWtlZmlsZQppbmRleCBjYmQ4OTBjNWYyLi4wMTZiMWI2ZThmIDEwMDY0NAotLS0gYS94ZW4v YXJjaC94ODYvcHYvTWFrZWZpbGUKKysrIGIveGVuL2FyY2gveDg2L3B2L01ha2VmaWxlCkBAIC0z LDYgKzMsNyBAQCBvYmoteSArPSBkb21haW4ubwogb2JqLXkgKz0gZW11bGF0ZS5vCiBvYmoteSAr PSBlbXVsLWdhdGUtb3Aubwogb2JqLXkgKz0gZW11bC1pbnYtb3Aubworb2JqLXkgKz0gZW11bC1t bWlvLW9wLm8KIG9iai15ICs9IGVtdWwtcHJpdi1vcC5vCiBvYmoteSArPSBlbXVsLXB0d3Itb3Au bwogb2JqLXkgKz0gaHlwZXJjYWxsLm8KZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9wdi9lbXVs LW1taW8tb3AuYyBiL3hlbi9hcmNoL3g4Ni9wdi9lbXVsLW1taW8tb3AuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lZTVjNjg0Nzc3Ci0tLSAvZGV2L251bGwKKysrIGIv eGVuL2FyY2gveDg2L3B2L2VtdWwtbW1pby1vcC5jCkBAIC0wLDAgKzEsMTY2IEBACisvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCisgKiBhcmNoL3g4Ni9lbXVsLW1taW8tb3AuYworICoKKyAqIFJlYWRv bmx5IE1NSU8gZW11bGF0aW9uIGZvciBQViBndWVzdHMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw MDItMjAwNSBLIEEgRnJhc2VyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgQ2hyaXN0aWFuIExpbXBh Y2gKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPHhl bi9yYW5nZXNldC5oPgorI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgorCisjaW5jbHVkZSA8YXNtL2Rv bWFpbi5oPgorI2luY2x1ZGUgPGFzbS9tbS5oPgorI2luY2x1ZGUgPGFzbS9wY2kuaD4KKyNpbmNs dWRlIDxhc20vcHYvbW0uaD4KKworI2luY2x1ZGUgImVtdWxhdGUuaCIKKworLyoqKioqKioqKioq KioqKioqKioqKioqKioKKyAqIGZhdWx0IGhhbmRsaW5nIGZvciByZWFkLW9ubHkgTU1JTyBwYWdl cworICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIG1taW9fcm9fZW11 bGF0ZV9vcHMgPSB7CisgICAgLnJlYWQgICAgICAgPSB4ODZlbXVsX3VuaGFuZGxlYWJsZV9ydywK KyAgICAuaW5zbl9mZXRjaCA9IHB2X2VtdWxfcHR3cl9yZWFkLAorICAgIC53cml0ZSAgICAgID0g bW1pb19yb19lbXVsYXRlZF93cml0ZSwKKyAgICAudmFsaWRhdGUgICA9IHB2X2VtdWxfaXNfbWVt X3dyaXRlLAorICAgIC5jcHVpZCAgICAgID0gcHZfZW11bF9jcHVpZCwKK307CisKK2ludCBtbWNm Z19pbnRlcmNlcHRfd3JpdGUoZW51bSB4ODZfc2VnbWVudCBzZWcsIHVuc2lnbmVkIGxvbmcgb2Zm c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwX2RhdGEsIHVuc2lnbmVkIGlu dCBieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0 eHQgKmN0eHQpCit7CisgICAgc3RydWN0IG1taW9fcm9fZW11bGF0ZV9jdHh0ICptbWlvX2N0eHQg PSBjdHh0LT5kYXRhOworCisgICAgLyoKKyAgICAgKiBPbmx5IGFsbG93IG5hdHVyYWxseS1hbGln bmVkIHN0b3JlcyBubyB3aWRlciB0aGFuIDQgYnl0ZXMgdG8gdGhlCisgICAgICogb3JpZ2luYWwg JWNyMiBhZGRyZXNzLgorICAgICAqLworICAgIGlmICggKChieXRlcyB8IG9mZnNldCkgJiAoYnl0 ZXMgLSAxKSkgfHwgYnl0ZXMgPiA0IHx8ICFieXRlcyB8fAorICAgICAgICAgb2Zmc2V0ICE9IG1t aW9fY3R4dC0+Y3IyICkKKyAgICB7CisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAi YmFkIHdyaXRlIChjcjI9JWx4LCBhZGRyPSVseCwgYnl0ZXM9JXUpXG4iLAorICAgICAgICAgICAg ICAgIG1taW9fY3R4dC0+Y3IyLCBvZmZzZXQsIGJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIFg4NkVN VUxfVU5IQU5ETEVBQkxFOworICAgIH0KKworICAgIG9mZnNldCAmPSAweGZmZjsKKyAgICBpZiAo IHBjaV9jb25mX3dyaXRlX2ludGVyY2VwdChtbWlvX2N0eHQtPnNlZywgbW1pb19jdHh0LT5iZGYs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBieXRlcywgcF9kYXRh KSA+PSAwICkKKyAgICAgICAgcGNpX21tY2ZnX3dyaXRlKG1taW9fY3R4dC0+c2VnLCBQQ0lfQlVT KG1taW9fY3R4dC0+YmRmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9ERVZGTjIobW1p b19jdHh0LT5iZGYpLCBvZmZzZXQsIGJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgKih1 aW50MzJfdCAqKXBfZGF0YSk7CisKKyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBtbWNmZ19pbnRlcmNlcHRfb3BzID0gewor ICAgIC5yZWFkICAgICAgID0geDg2ZW11bF91bmhhbmRsZWFibGVfcncsCisgICAgLmluc25fZmV0 Y2ggPSBwdl9lbXVsX3B0d3JfcmVhZCwKKyAgICAud3JpdGUgICAgICA9IG1tY2ZnX2ludGVyY2Vw dF93cml0ZSwKKyAgICAudmFsaWRhdGUgICA9IHB2X2VtdWxfaXNfbWVtX3dyaXRlLAorICAgIC5j cHVpZCAgICAgID0gcHZfZW11bF9jcHVpZCwKK307CisKKy8qIENoZWNrIGlmIGd1ZXN0IGlzIHRy eWluZyB0byBtb2RpZnkgYSByL28gTU1JTyBwYWdlLiAqLworaW50IG1taW9fcm9fZG9fcGFnZV9m YXVsdChzdHJ1Y3QgdmNwdSAqdiwgdW5zaWduZWQgbG9uZyBhZGRyLAorICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKK3sKKyAgICBsMV9wZ2VudHJ5 X3QgcHRlOworICAgIHVuc2lnbmVkIGxvbmcgbWZuOworICAgIHVuc2lnbmVkIGludCBhZGRyX3Np emUgPSBpc19wdl8zMmJpdF92Y3B1KHYpID8gMzIgOiBCSVRTX1BFUl9MT05HOworICAgIHN0cnVj dCBtbWlvX3JvX2VtdWxhdGVfY3R4dCBtbWlvX3JvX2N0eHQgPSB7IC5jcjIgPSBhZGRyIH07Cisg ICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgY3R4dCA9IHsKKyAgICAgICAgLnJlZ3MgPSByZWdz LAorICAgICAgICAudmVuZG9yID0gdi0+ZG9tYWluLT5hcmNoLmNwdWlkLT54ODZfdmVuZG9yLAor ICAgICAgICAuYWRkcl9zaXplID0gYWRkcl9zaXplLAorICAgICAgICAuc3Bfc2l6ZSA9IGFkZHJf c2l6ZSwKKyAgICAgICAgLmxtYSA9ICFpc19wdl8zMmJpdF92Y3B1KHYpLAorICAgICAgICAuZGF0 YSA9ICZtbWlvX3JvX2N0eHQsCisgICAgfTsKKyAgICBpbnQgcmM7CisKKyAgICAvKiBBdHRlbXB0 IHRvIHJlYWQgdGhlIFBURSB0aGF0IG1hcHMgdGhlIFZBIGJlaW5nIGFjY2Vzc2VkLiAqLworICAg IHB2X2dldF9ndWVzdF9lZmZfbDFlKGFkZHIsICZwdGUpOworCisgICAgLyogV2UgYXJlIGxvb2tp bmcgb25seSBmb3IgcmVhZC1vbmx5IG1hcHBpbmdzIG9mIE1NSU8gcGFnZXMuICovCisgICAgaWYg KCAoKGwxZV9nZXRfZmxhZ3MocHRlKSAmIChfUEFHRV9QUkVTRU5UfF9QQUdFX1JXKSkgIT0gX1BB R0VfUFJFU0VOVCkgKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG1mbiA9IGwxZV9nZXRfcGZu KHB0ZSk7CisgICAgaWYgKCBtZm5fdmFsaWQoX21mbihtZm4pKSApCisgICAgeworICAgICAgICBz dHJ1Y3QgcGFnZV9pbmZvICpwYWdlID0gbWZuX3RvX3BhZ2UobWZuKTsKKyAgICAgICAgc3RydWN0 IGRvbWFpbiAqb3duZXIgPSBwYWdlX2dldF9vd25lcl9hbmRfcmVmZXJlbmNlKHBhZ2UpOworCisg ICAgICAgIGlmICggb3duZXIgKQorICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7CisgICAgICAg IGlmICggb3duZXIgIT0gZG9tX2lvICkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKwor ICAgIGlmICggIXJhbmdlc2V0X2NvbnRhaW5zX3NpbmdsZXRvbihtbWlvX3JvX3JhbmdlcywgbWZu KSApCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCBwY2lfcm9fbW1jZmdfZGVjb2RlKG1m biwgJm1taW9fcm9fY3R4dC5zZWcsICZtbWlvX3JvX2N0eHQuYmRmKSApCisgICAgICAgIHJjID0g eDg2X2VtdWxhdGUoJmN0eHQsICZtbWNmZ19pbnRlcmNlcHRfb3BzKTsKKyAgICBlbHNlCisgICAg ICAgIHJjID0geDg2X2VtdWxhdGUoJmN0eHQsICZtbWlvX3JvX2VtdWxhdGVfb3BzKTsKKworICAg IHN3aXRjaCAoIHJjICkKKyAgICB7CisgICAgY2FzZSBYODZFTVVMX0VYQ0VQVElPTjoKKyAgICAg ICAgLyoKKyAgICAgICAgICogVGhpcyBlbXVsYXRpb24gb25seSBjb3ZlcnMgd3JpdGVzIHRvIE1N Q0ZHIHNwYWNlIG9yIHJlYWQtb25seSBNRk5zLgorICAgICAgICAgKiBXZSB0b2xlcmF0ZSAjUEYg KGZyb20gaGl0dGluZyBhbiBhZGphY2VudCBwYWdlIG9yIGEgc3VjY2Vzc2Z1bAorICAgICAgICAg KiBjb25jdXJyZW50IHBhZ2V0YWJsZSB1cGRhdGUpLiAgQW55dGhpbmcgZWxzZSBpcyBhbiBlbXVs YXRpb24gYnVnLAorICAgICAgICAgKiBvciBhIGd1ZXN0IHBsYXlpbmcgd2l0aCB0aGUgaW5zdHJ1 Y3Rpb24gc3RyZWFtIHVuZGVyIFhlbidzIGZlZXQuCisgICAgICAgICAqLworICAgICAgICBpZiAo IGN0eHQuZXZlbnQudHlwZSA9PSBYODZfRVZFTlRUWVBFX0hXX0VYQ0VQVElPTiAmJgorICAgICAg ICAgICAgIGN0eHQuZXZlbnQudmVjdG9yID09IFRSQVBfcGFnZV9mYXVsdCApCisgICAgICAgICAg ICBwdl9pbmplY3RfZXZlbnQoJmN0eHQuZXZlbnQpOworICAgICAgICBlbHNlCisgICAgICAgICAg ICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICJVbmV4cGVj dGVkIGV2ZW50ICh0eXBlICV1LCB2ZWN0b3IgJSN4KSBmcm9tIGVtdWxhdGlvblxuIiwKKyAgICAg ICAgICAgICAgICAgICAgIGN0eHQuZXZlbnQudHlwZSwgY3R4dC5ldmVudC52ZWN0b3IpOworCisg ICAgICAgIC8qIEZhbGx0aHJvdWdoICovCisgICAgY2FzZSBYODZFTVVMX09LQVk6CisKKyAgICAg ICAgaWYgKCBjdHh0LnJldGlyZS5zaW5nbGVzdGVwICkKKyAgICAgICAgICAgIHB2X2luamVjdF9o d19leGNlcHRpb24oVFJBUF9kZWJ1ZywgWDg2X0VWRU5UX05PX0VDKTsKKworICAgICAgICAvKiBG YWxsdGhyb3VnaCAqLworICAgIGNhc2UgWDg2RU1VTF9SRVRSWToKKyAgICAgICAgcGVyZmNfaW5j cihwdHdyX2VtdWxhdGlvbnMpOworICAgICAgICByZXR1cm4gRVhDUkVUX2ZhdWx0X2ZpeGVkOwor ICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICog bW9kZTogQworICogYy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAq IHRhYi13aWR0aDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KLS0g CjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Clhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9s aXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=