From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v2 2/2] x86/mm: merge ptwr and mmio_ro page fault handlers Date: Thu, 31 Aug 2017 12:22:23 +0100 Message-ID: <20170831112223.24761-3-wei.liu2@citrix.com> References: <20170831112223.24761-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 1dnNYQ-0002Tw-4k for xen-devel@lists.xenproject.org; Thu, 31 Aug 2017 11:22:34 +0000 In-Reply-To: <20170831112223.24761-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: Andrew Cooper , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org UHJvdmlkZSBhIHVuaWZpZWQgZW50cnkgdG8gYXZvaWQgZ29pbmcgdGhyb3VnaCBwdGUgbG9vay11 cCwgZGVjb2RlIGFuZAplbXVsYXRpb24gY3ljbGUgbW9yZSB0aGFuIG5lY2Vzc2FyeS4gVGhlIHBh dGggdGFrZW4gaXMgZGV0ZXJtaW5lZCBieQp0aGUgZmF1bHRpbmcgYWRkcmVzcy4KCk5vdGUgdGhh dCB0aGUgb3JkZXIgb2YgY2hlY2tzIGlzIGNoYW5nZWQgaW4gdGhlIG5ldyBmdW5jdGlvbiwgYnV0 IHRoZQpvcmRlciBvZiB0aGUgY2hlY2tzIGlzIHBlcmZvcm1lZCBzaG91bGRuJ3QgbWF0dGVyLgoK VGhlIHNvbGUgY2FsbGVyIGlzIGNoYW5nZWQgdG8gdXNlIHRoZSBuZXcgZnVuY3Rpb24uCgpObyBm dW5jdGlvbmFsIGNoYW5nZS4KClNpZ25lZC1vZmYtYnk6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJp eC5jb20+Ci0tLQpDYzogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgpDYzogQW5kcmV3 IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KCnYyOiByZWJhc2UgYW5kIChzb3J0 YSkgbWVyZ2UgQW5kcmV3J3MgY2hhbmdlcwoKRG9tMCBib290cyBmaW5lLiAgWFRGIGlzIGhhcHB5 IHdpdGggdGhpcyBjaGFuZ2UuIExldCBtZSBrbm93IGlmIG1vcmUKdGVzdHMgY2FuIGJlIGRvbmUu Ci0tLQogeGVuL2FyY2gveDg2L21tLmMgICAgICAgIHwgMjkwICsrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB4ZW4vYXJjaC94ODYvdHJhcHMuYyAgICAgfCAg MjAgKystLQogeGVuL2luY2x1ZGUvYXNtLXg4Ni9tbS5oIHwgICA1ICstCiAzIGZpbGVzIGNoYW5n ZWQsIDE0MCBpbnNlcnRpb25zKCspLCAxNzUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEveGVu L2FyY2gveDg2L21tLmMgYi94ZW4vYXJjaC94ODYvbW0uYwppbmRleCAzMzA2MDg4MjU1Li40Mjk0 NDJhYTFkIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvbW0uYworKysgYi94ZW4vYXJjaC94ODYv bW0uYwpAQCAtNTE3Niw5MSArNTE3Niw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxh dGVfb3BzIHB0d3JfZW11bGF0ZV9vcHMgPSB7CiAgICAgLmNwdWlkICAgICAgPSBwdl9lbXVsX2Nw dWlkLAogfTsKIAotLyogV3JpdGUgcGFnZSBmYXVsdCBoYW5kbGVyOiBjaGVjayBpZiBndWVzdCBp cyB0cnlpbmcgdG8gbW9kaWZ5IGEgUFRFLiAqLwotaW50IHB0d3JfZG9fcGFnZV9mYXVsdChzdHJ1 Y3QgdmNwdSAqdiwgdW5zaWduZWQgbG9uZyBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKLXsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gdi0+ ZG9tYWluOwotICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7Ci0gICAgbDFfcGdlbnRyeV90ICAg ICAgcHRlOwotICAgIHN0cnVjdCBwdHdyX2VtdWxhdGVfY3R4dCBwdHdyX2N0eHQ7Ci0gICAgc3Ry dWN0IHg4Nl9lbXVsYXRlX2N0eHQgY3R4dCA9IHsKLSAgICAgICAucmVncyA9IHJlZ3MsCi0gICAg ICAgLnZlbmRvciA9IGQtPmFyY2guY3B1aWQtPng4Nl92ZW5kb3IsCi0gICAgICAgLmFkZHJfc2l6 ZSA9IGlzX3B2XzMyYml0X2RvbWFpbihkKSA/IDMyIDogQklUU19QRVJfTE9ORywKLSAgICAgICAu c3Bfc2l6ZSAgID0gaXNfcHZfMzJiaXRfZG9tYWluKGQpID8gMzIgOiBCSVRTX1BFUl9MT05HLAot ICAgICAgIC5sbWEgICAgICAgPSAhaXNfcHZfMzJiaXRfZG9tYWluKGQpLAotICAgICAgIC5kYXRh ICAgICAgPSAmcHR3cl9jdHh0LAotICAgIH07Ci0gICAgaW50IHJjOwotCi0gICAgLyogQXR0ZW1w dCB0byByZWFkIHRoZSBQVEUgdGhhdCBtYXBzIHRoZSBWQSBiZWluZyBhY2Nlc3NlZC4gKi8KLSAg ICBwdGUgPSBndWVzdF9nZXRfZWZmX2wxZShhZGRyKTsKLQotICAgIC8qIFdlIGFyZSBsb29raW5n IG9ubHkgZm9yIHJlYWQtb25seSBtYXBwaW5ncyBvZiBwLnQuIHBhZ2VzLiAqLwotICAgIGlmICgg KChsMWVfZ2V0X2ZsYWdzKHB0ZSkgJiAoX1BBR0VfUFJFU0VOVHxfUEFHRV9SVykpICE9IF9QQUdF X1BSRVNFTlQpIHx8Ci0gICAgICAgICByYW5nZXNldF9jb250YWluc19zaW5nbGV0b24obW1pb19y b19yYW5nZXMsIGwxZV9nZXRfcGZuKHB0ZSkpIHx8Ci0gICAgICAgICAhZ2V0X3BhZ2VfZnJvbV9t Zm4obDFlX2dldF9tZm4ocHRlKSwgZCkgKQotICAgICAgICBnb3RvIGJhaWw7Ci0KLSAgICBwYWdl ID0gbDFlX2dldF9wYWdlKHB0ZSk7Ci0gICAgaWYgKCAhcGFnZV9sb2NrKHBhZ2UpICkKLSAgICB7 Ci0gICAgICAgIHB1dF9wYWdlKHBhZ2UpOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0g ICAgaWYgKCAocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrKSAhPSBQR1Rf bDFfcGFnZV90YWJsZSApCi0gICAgewotICAgICAgICBwYWdlX3VubG9jayhwYWdlKTsKLSAgICAg ICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBwdHdy X2N0eHQgPSAoc3RydWN0IHB0d3JfZW11bGF0ZV9jdHh0KSB7Ci0gICAgICAgIC5jcjIgPSBhZGRy LAotICAgICAgICAucHRlID0gcHRlLAotICAgIH07Ci0KLSAgICByYyA9IHg4Nl9lbXVsYXRlKCZj dHh0LCAmcHR3cl9lbXVsYXRlX29wcyk7Ci0KLSAgICBwYWdlX3VubG9jayhwYWdlKTsKLSAgICBw dXRfcGFnZShwYWdlKTsKLQotICAgIHN3aXRjaCAoIHJjICkKLSAgICB7Ci0gICAgY2FzZSBYODZF TVVMX0VYQ0VQVElPTjoKLSAgICAgICAgLyoKLSAgICAgICAgICogVGhpcyBlbXVsYXRpb24gb25s eSBjb3ZlcnMgd3JpdGVzIHRvIHBhZ2V0YWJsZXMgd2hpY2ggYXJlIG1hcmtlZAotICAgICAgICAg KiByZWFkLW9ubHkgYnkgWGVuLiAgV2UgdG9sZXJhdGUgI1BGIChpbiBjYXNlIGEgY29uY3VycmVu dCBwYWdldGFibGUKLSAgICAgICAgICogdXBkYXRlIGhhcyBzdWNjZWVkZWQgb24gYSBkaWZmZXJl bnQgdmNwdSkuICBBbnl0aGluZyBlbHNlIGlzIGFuCi0gICAgICAgICAqIGVtdWxhdGlvbiBidWcs IG9yIGEgZ3Vlc3QgcGxheWluZyB3aXRoIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0gdW5kZXIKLSAg ICAgICAgICogWGVuJ3MgZmVldC4KLSAgICAgICAgICovCi0gICAgICAgIGlmICggY3R4dC5ldmVu dC50eXBlID09IFg4Nl9FVkVOVFRZUEVfSFdfRVhDRVBUSU9OICYmCi0gICAgICAgICAgICAgY3R4 dC5ldmVudC52ZWN0b3IgPT0gVFJBUF9wYWdlX2ZhdWx0ICkKLSAgICAgICAgICAgIHB2X2luamVj dF9ldmVudCgmY3R4dC5ldmVudCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdkcHJpbnRr KFhFTkxPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZXZlbnQg KHR5cGUgJXUsIHZlY3RvciAlI3gpIGZyb20gZW11bGF0aW9uXG4iLAotICAgICAgICAgICAgICAg ICAgICAgY3R4dC5ldmVudC50eXBlLCBjdHh0LmV2ZW50LnZlY3Rvcik7Ci0KLSAgICAgICAgLyog RmFsbHRocm91Z2ggKi8KLSAgICBjYXNlIFg4NkVNVUxfT0tBWToKLQotICAgICAgICBpZiAoIGN0 eHQucmV0aXJlLnNpbmdsZXN0ZXAgKQotICAgICAgICAgICAgcHZfaW5qZWN0X2h3X2V4Y2VwdGlv bihUUkFQX2RlYnVnLCBYODZfRVZFTlRfTk9fRUMpOwotCi0gICAgICAgIC8qIEZhbGx0aHJvdWdo ICovCi0gICAgY2FzZSBYODZFTVVMX1JFVFJZOgotICAgICAgICBwZXJmY19pbmNyKHB0d3JfZW11 bGF0aW9ucyk7Ci0gICAgICAgIHJldHVybiBFWENSRVRfZmF1bHRfZml4ZWQ7Ci0gICAgfQotCi0g YmFpbDoKLSAgICByZXR1cm4gMDsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioKICAq IGZhdWx0IGhhbmRsaW5nIGZvciByZWFkLW9ubHkgTU1JTyBwYWdlcwogICovCkBAIC01MzMzLDgz ICs1MjQ4LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgbW1jZmdfaW50 ZXJjZXB0X29wcyA9IHsKICAgICAuY3B1aWQgICAgICA9IHB2X2VtdWxfY3B1aWQsCiB9OwogCi0v KiBDaGVjayBpZiBndWVzdCBpcyB0cnlpbmcgdG8gbW9kaWZ5IGEgci9vIE1NSU8gcGFnZS4gKi8K LWludCBtbWlvX3JvX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGxvbmcg YWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJl Z3MpCi17Ci0gICAgbDFfcGdlbnRyeV90IHB0ZTsKLSAgICB1bnNpZ25lZCBsb25nIG1mbjsKLSAg ICB1bnNpZ25lZCBpbnQgYWRkcl9zaXplID0gaXNfcHZfMzJiaXRfdmNwdSh2KSA/IDMyIDogQklU U19QRVJfTE9ORzsKLSAgICBzdHJ1Y3QgbW1pb19yb19lbXVsYXRlX2N0eHQgbW1pb19yb19jdHh0 ID0geyAuY3IyID0gYWRkciB9OwotICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0IGN0eHQgPSB7 Ci0gICAgICAgIC5yZWdzID0gcmVncywKLSAgICAgICAgLnZlbmRvciA9IHYtPmRvbWFpbi0+YXJj aC5jcHVpZC0+eDg2X3ZlbmRvciwKLSAgICAgICAgLmFkZHJfc2l6ZSA9IGFkZHJfc2l6ZSwKLSAg ICAgICAgLnNwX3NpemUgPSBhZGRyX3NpemUsCi0gICAgICAgIC5sbWEgPSAhaXNfcHZfMzJiaXRf dmNwdSh2KSwKLSAgICAgICAgLmRhdGEgPSAmbW1pb19yb19jdHh0LAotICAgIH07Ci0gICAgaW50 IHJjOwotCi0gICAgLyogQXR0ZW1wdCB0byByZWFkIHRoZSBQVEUgdGhhdCBtYXBzIHRoZSBWQSBi ZWluZyBhY2Nlc3NlZC4gKi8KLSAgICBwdGUgPSBndWVzdF9nZXRfZWZmX2wxZShhZGRyKTsKLQot ICAgIC8qIFdlIGFyZSBsb29raW5nIG9ubHkgZm9yIHJlYWQtb25seSBtYXBwaW5ncyBvZiBNTUlP IHBhZ2VzLiAqLwotICAgIGlmICggKChsMWVfZ2V0X2ZsYWdzKHB0ZSkgJiAoX1BBR0VfUFJFU0VO VHxfUEFHRV9SVykpICE9IF9QQUdFX1BSRVNFTlQpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg ICBtZm4gPSBsMWVfZ2V0X3BmbihwdGUpOwotICAgIGlmICggbWZuX3ZhbGlkKF9tZm4obWZuKSkg KQotICAgIHsKLSAgICAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSA9IG1mbl90b19wYWdlKF9t Zm4obWZuKSk7Ci0gICAgICAgIHN0cnVjdCBkb21haW4gKm93bmVyID0gcGFnZV9nZXRfb3duZXJf YW5kX3JlZmVyZW5jZShwYWdlKTsKLQotICAgICAgICBpZiAoIG93bmVyICkKLSAgICAgICAgICAg IHB1dF9wYWdlKHBhZ2UpOwotICAgICAgICBpZiAoIG93bmVyICE9IGRvbV9pbyApCi0gICAgICAg ICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoICFyYW5nZXNldF9jb250YWluc19zaW5n bGV0b24obW1pb19yb19yYW5nZXMsIG1mbikgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlm ICggcGNpX3JvX21tY2ZnX2RlY29kZShtZm4sICZtbWlvX3JvX2N0eHQuc2VnLCAmbW1pb19yb19j dHh0LmJkZikgKQotICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmbW1jZmdfaW50ZXJj ZXB0X29wcyk7Ci0gICAgZWxzZQotICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmbW1p b19yb19lbXVsYXRlX29wcyk7Ci0KLSAgICBzd2l0Y2ggKCByYyApCi0gICAgewotICAgIGNhc2Ug WDg2RU1VTF9FWENFUFRJT046Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFRoaXMgZW11bGF0aW9u IG9ubHkgY292ZXJzIHdyaXRlcyB0byBNTUNGRyBzcGFjZSBvciByZWFkLW9ubHkgTUZOcy4KLSAg ICAgICAgICogV2UgdG9sZXJhdGUgI1BGIChmcm9tIGhpdHRpbmcgYW4gYWRqYWNlbnQgcGFnZSBv ciBhIHN1Y2Nlc3NmdWwKLSAgICAgICAgICogY29uY3VycmVudCBwYWdldGFibGUgdXBkYXRlKS4g IEFueXRoaW5nIGVsc2UgaXMgYW4gZW11bGF0aW9uIGJ1ZywKLSAgICAgICAgICogb3IgYSBndWVz dCBwbGF5aW5nIHdpdGggdGhlIGluc3RydWN0aW9uIHN0cmVhbSB1bmRlciBYZW4ncyBmZWV0Lgot ICAgICAgICAgKi8KLSAgICAgICAgaWYgKCBjdHh0LmV2ZW50LnR5cGUgPT0gWDg2X0VWRU5UVFlQ RV9IV19FWENFUFRJT04gJiYKLSAgICAgICAgICAgICBjdHh0LmV2ZW50LnZlY3RvciA9PSBUUkFQ X3BhZ2VfZmF1bHQgKQotICAgICAgICAgICAgcHZfaW5qZWN0X2V2ZW50KCZjdHh0LmV2ZW50KTsK LSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAg ICAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBldmVudCAodHlwZSAldSwgdmVjdG9yICUjeCkg ZnJvbSBlbXVsYXRpb25cbiIsCi0gICAgICAgICAgICAgICAgICAgICBjdHh0LmV2ZW50LnR5cGUs IGN0eHQuZXZlbnQudmVjdG9yKTsKLQotICAgICAgICAvKiBGYWxsdGhyb3VnaCAqLwotICAgIGNh c2UgWDg2RU1VTF9PS0FZOgotCi0gICAgICAgIGlmICggY3R4dC5yZXRpcmUuc2luZ2xlc3RlcCAp Ci0gICAgICAgICAgICBwdl9pbmplY3RfaHdfZXhjZXB0aW9uKFRSQVBfZGVidWcsIFg4Nl9FVkVO VF9OT19FQyk7Ci0KLSAgICAgICAgLyogRmFsbHRocm91Z2ggKi8KLSAgICBjYXNlIFg4NkVNVUxf UkVUUlk6Ci0gICAgICAgIHBlcmZjX2luY3IobW1pb19yb19lbXVsYXRpb25zKTsKLSAgICAgICAg cmV0dXJuIEVYQ1JFVF9mYXVsdF9maXhlZDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQog dm9pZCAqYWxsb2NfeGVuX3BhZ2V0YWJsZSh2b2lkKQogewogICAgIGlmICggc3lzdGVtX3N0YXRl ICE9IFNZU19TVEFURV9lYXJseV9ib290ICkKQEAgLTY0NDEsNiArNjI3OSwxMzQgQEAgdm9pZCB3 cml0ZV8zMmJpdF9wc2VfaWRlbnRtYXAodWludDMyX3QgKmwyKQogICAgICAgICAgICAgICAgICBf UEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfUFNFKTsKIH0KIAorLyogQ2hlY2sg aWYgZ3Vlc3QgaXMgdHJ5aW5nIHRvIG1vZGlmeSBhIHIvbyBNTUlPIHBhZ2UuICovCitzdGF0aWMg aW50IG1taW9fcm9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgbDFf cGdlbnRyeV90IHB0ZSkKK3sKKyAgICBzdHJ1Y3QgbW1pb19yb19lbXVsYXRlX2N0eHQgbW1pb19y b19jdHh0ID0geyAuY3IyID0gYWRkciB9OworICAgIG1mbl90IG1mbiA9IGwxZV9nZXRfbWZuKHB0 ZSk7CisKKyAgICBpZiAoIG1mbl92YWxpZChtZm4pICkKKyAgICB7CisgICAgICAgIHN0cnVjdCBw YWdlX2luZm8gKnBhZ2UgPSBtZm5fdG9fcGFnZShtZm4pOworICAgICAgICBzdHJ1Y3QgZG9tYWlu ICpvd25lciA9IHBhZ2VfZ2V0X293bmVyX2FuZF9yZWZlcmVuY2UocGFnZSk7CisKKyAgICAgICAg aWYgKCBvd25lciApCisgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKKyAgICAgICAgaWYgKCBv d25lciAhPSBkb21faW8gKQorICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxF OworICAgIH0KKworICAgIGN0eHQtPmRhdGEgPSAmbW1pb19yb19jdHh0OworICAgIGlmICggcGNp X3JvX21tY2ZnX2RlY29kZShtZm5feChtZm4pLCAmbW1pb19yb19jdHh0LnNlZywgJm1taW9fcm9f Y3R4dC5iZGYpICkKKyAgICAgICAgcmV0dXJuIHg4Nl9lbXVsYXRlKGN0eHQsICZtbWNmZ19pbnRl cmNlcHRfb3BzKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiB4ODZfZW11bGF0ZShjdHh0LCAm bW1pb19yb19lbXVsYXRlX29wcyk7Cit9CisKKy8qIFdyaXRlIHBhZ2UgZmF1bHQgaGFuZGxlcjog Y2hlY2sgaWYgZ3Vlc3QgaXMgdHJ5aW5nIHRvIG1vZGlmeSBhIFBURS4gKi8KK3N0YXRpYyBpbnQg cHR3cl9kb19wYWdlX2ZhdWx0KHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBzdHJ1Y3Qg ZG9tYWluICpkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBh ZGRyLCBsMV9wZ2VudHJ5X3QgcHRlKQoreworICAgIHN0cnVjdCBwdHdyX2VtdWxhdGVfY3R4dCBw dHdyX2N0eHQgPSB7CisgICAgICAgIC5jcjIgPSBhZGRyLAorICAgICAgICAucHRlID0gcHRlLAor ICAgIH07CisgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKKyAgICBpbnQgcmMgPSBYODZFTVVM X1VOSEFORExFQUJMRTsKKworICAgIGlmICggIWdldF9wYWdlX2Zyb21fbWZuKGwxZV9nZXRfbWZu KHB0ZSksIGQpICkKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICBwYWdlID0gbDFlX2dldF9wYWdl KHB0ZSk7CisgICAgaWYgKCAhcGFnZV9sb2NrKHBhZ2UpICkKKyAgICB7CisgICAgICAgIHB1dF9w YWdlKHBhZ2UpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBpZiAoIChwYWdlLT51 LmludXNlLnR5cGVfaW5mbyAmIFBHVF90eXBlX21hc2spICE9IFBHVF9sMV9wYWdlX3RhYmxlICkK KyAgICB7CisgICAgICAgIHBhZ2VfdW5sb2NrKHBhZ2UpOworICAgICAgICBwdXRfcGFnZShwYWdl KTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgY3R4dC0+ZGF0YSA9ICZwdHdyX2N0 eHQ7CisgICAgcmMgPSB4ODZfZW11bGF0ZShjdHh0LCAmcHR3cl9lbXVsYXRlX29wcyk7CisKKyAg ICBwYWdlX3VubG9jayhwYWdlKTsKKyAgICBwdXRfcGFnZShwYWdlKTsKKworIG91dDoKKyAgICBy ZXR1cm4gcmM7Cit9CisKK2ludCBwdl9yb19wYWdlX2ZhdWx0KHN0cnVjdCB2Y3B1ICp2LCB1bnNp Z25lZCBsb25nIGFkZHIsCisgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVn cyAqcmVncykKK3sKKyAgICBsMV9wZ2VudHJ5X3QgcHRlOworICAgIHN0cnVjdCBkb21haW4gKmQg PSB2LT5kb21haW47CisgICAgdW5zaWduZWQgaW50IGFkZHJfc2l6ZSA9IGlzX3B2XzMyYml0X3Zj cHUodikgPyAzMiA6IEJJVFNfUEVSX0xPTkc7CisgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQg Y3R4dCA9IHsKKyAgICAgICAgLnJlZ3MgICAgICA9IHJlZ3MsCisgICAgICAgIC52ZW5kb3IgICAg PSBkLT5hcmNoLmNwdWlkLT54ODZfdmVuZG9yLAorICAgICAgICAuYWRkcl9zaXplID0gYWRkcl9z aXplLAorICAgICAgICAuc3Bfc2l6ZSAgID0gYWRkcl9zaXplLAorICAgICAgICAubG1hICAgICAg ID0gIWlzX3B2XzMyYml0X3ZjcHUodiksCisgICAgfTsKKyAgICBpbnQgcmM7CisgICAgYm9vbCBt bWlvX3JvOworCisgICAgLyogQXR0ZW1wdCB0byByZWFkIHRoZSBQVEUgdGhhdCBtYXBzIHRoZSBW QSBiZWluZyBhY2Nlc3NlZC4gKi8KKyAgICBwdGUgPSBndWVzdF9nZXRfZWZmX2wxZShhZGRyKTsK KworICAgIC8qIFdlIGFyZSBvbmx5IGxvb2tpbmcgZm9yIHJlYWQtb25seSBtYXBwaW5ncyAqLwor ICAgIGlmICggKChsMWVfZ2V0X2ZsYWdzKHB0ZSkgJiAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JX KSkgIT0gX1BBR0VfUFJFU0VOVCkgKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG1taW9fcm8g PSByYW5nZXNldF9jb250YWluc19zaW5nbGV0b24obW1pb19yb19yYW5nZXMsIGwxZV9nZXRfcGZu KHB0ZSkpOworICAgIGlmICggbW1pb19ybyApCisgICAgICAgIHJjID0gbW1pb19yb19kb19wYWdl X2ZhdWx0KCZjdHh0LCBhZGRyLCBwdGUpOworICAgIGVsc2UKKyAgICAgICAgcmMgPSBwdHdyX2Rv X3BhZ2VfZmF1bHQoJmN0eHQsIGQsIGFkZHIsIHB0ZSk7CisKKyAgICBzd2l0Y2ggKCByYyApCisg ICAgeworICAgIGNhc2UgWDg2RU1VTF9FWENFUFRJT046CisgICAgICAgIC8qCisgICAgICAgICAq IFRoaXMgZW11bGF0aW9uIGNvdmVycyB3cml0ZXMgdG86CisgICAgICAgICAqICAtIEwxIHBhZ2V0 YWJsZXMuCisgICAgICAgICAqICAtIE1NQ0ZHIHNwYWNlIG9yIHJlYWQtb25seSBNRk5zLgorICAg ICAgICAgKiBXZSB0b2xlcmF0ZSAjUEYgKGZyb20gaGl0dGluZyBhbiBhZGphY2VudCBwYWdlIG9y IGEgc3VjY2Vzc2Z1bAorICAgICAgICAgKiBjb25jdXJyZW50IHBhZ2V0YWJsZSB1cGRhdGUpLiAg QW55dGhpbmcgZWxzZSBpcyBhbiBlbXVsYXRpb24gYnVnLAorICAgICAgICAgKiBvciBhIGd1ZXN0 IHBsYXlpbmcgd2l0aCB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIHVuZGVyIFhlbidzIGZlZXQuCisg ICAgICAgICAqLworICAgICAgICBpZiAoIGN0eHQuZXZlbnQudHlwZSA9PSBYODZfRVZFTlRUWVBF X0hXX0VYQ0VQVElPTiAmJgorICAgICAgICAgICAgIGN0eHQuZXZlbnQudmVjdG9yID09IFRSQVBf cGFnZV9mYXVsdCApCisgICAgICAgICAgICBwdl9pbmplY3RfZXZlbnQoJmN0eHQuZXZlbnQpOwor ICAgICAgICBlbHNlCisgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAg ICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGV2ZW50ICh0eXBlICV1LCB2ZWN0b3IgJSN4KSBm cm9tIGVtdWxhdGlvblxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGN0eHQuZXZlbnQudHlwZSwg Y3R4dC5ldmVudC52ZWN0b3IpOworCisgICAgICAgIC8qIEZhbGx0aHJvdWdoICovCisgICAgY2Fz ZSBYODZFTVVMX09LQVk6CisgICAgICAgIGlmICggY3R4dC5yZXRpcmUuc2luZ2xlc3RlcCApCisg ICAgICAgICAgICBwdl9pbmplY3RfaHdfZXhjZXB0aW9uKFRSQVBfZGVidWcsIFg4Nl9FVkVOVF9O T19FQyk7CisKKyAgICAgICAgLyogRmFsbHRocm91Z2ggKi8KKyAgICBjYXNlIFg4NkVNVUxfUkVU Ulk6CisgICAgICAgIGlmICggbW1pb19ybyApCisgICAgICAgICAgICBwZXJmY19pbmNyKG1taW9f cm9fZW11bGF0aW9ucyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBlcmZjX2luY3IocHR3 cl9lbXVsYXRpb25zKTsKKyAgICAgICAgcmV0dXJuIEVYQ1JFVF9mYXVsdF9maXhlZDsKKyAgICB9 CisKKyAgICByZXR1cm4gMDsKK30KKwogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIG1vZGU6 IEMKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni90cmFwcy5jIGIveGVuL2FyY2gveDg2L3RyYXBz LmMKaW5kZXggZjUyNWZhMjhkMy4uOGNkZDNjODkyYSAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2 L3RyYXBzLmMKKysrIGIveGVuL2FyY2gveDg2L3RyYXBzLmMKQEAgLTEzMDgsMTYgKzEzMDgsMTgg QEAgc3RhdGljIGludCBmaXh1cF9wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0 IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCiAgICAgICAgICAhKHJlZ3MtPmVycm9yX2NvZGUgJiAoUEZF Q19yZXNlcnZlZF9iaXQgfCBQRkVDX2luc25fZmV0Y2gpKSAmJgogICAgICAgICAgKHJlZ3MtPmVy cm9yX2NvZGUgJiBQRkVDX3dyaXRlX2FjY2VzcykgKQogICAgIHsKLSAgICAgICAgaWYgKCBWTV9B U1NJU1QoZCwgd3JpdGFibGVfcGFnZXRhYmxlcykgJiYKLSAgICAgICAgICAgICAvKiBEbyBub3Qg Y2hlY2sgaWYgYWNjZXNzLXByb3RlY3Rpb24gZmF1bHQgc2luY2UgdGhlIHBhZ2UgbWF5Ci0gICAg ICAgICAgICAgICAgbGVnaXRpbWF0ZWx5IGJlIG5vdCBwcmVzZW50IGluIHNoYWRvdyBwYWdlIHRh YmxlcyAqLwotICAgICAgICAgICAgIChwYWdpbmdfbW9kZV9lbmFibGVkKGQpIHx8Ci0gICAgICAg ICAgICAgIChyZWdzLT5lcnJvcl9jb2RlICYgUEZFQ19wYWdlX3ByZXNlbnQpKSAmJgotICAgICAg ICAgICAgIHB0d3JfZG9fcGFnZV9mYXVsdCh2LCBhZGRyLCByZWdzKSApCi0gICAgICAgICAgICBy ZXR1cm4gRVhDUkVUX2ZhdWx0X2ZpeGVkOworICAgICAgICBib29sIHB0d3IsIG1taW9fcm87CisK KyAgICAgICAgcHR3ciA9IFZNX0FTU0lTVChkLCB3cml0YWJsZV9wYWdldGFibGVzKSAmJgorICAg ICAgICAgICAgICAgLyogRG8gbm90IGNoZWNrIGlmIGFjY2Vzcy1wcm90ZWN0aW9uIGZhdWx0IHNp bmNlIHRoZSBwYWdlIG1heQorICAgICAgICAgICAgICAgICAgbGVnaXRpbWF0ZWx5IGJlIG5vdCBw cmVzZW50IGluIHNoYWRvdyBwYWdlIHRhYmxlcyAqLworICAgICAgICAgICAgICAgKHBhZ2luZ19t b2RlX2VuYWJsZWQoZCkgfHwKKyAgICAgICAgICAgICAgICAocmVncy0+ZXJyb3JfY29kZSAmIFBG RUNfcGFnZV9wcmVzZW50KSk7CisKKyAgICAgICAgbW1pb19ybyA9IGlzX2hhcmR3YXJlX2RvbWFp bihkKSAmJgorICAgICAgICAgICAgICAgICAgKHJlZ3MtPmVycm9yX2NvZGUgJiBQRkVDX3BhZ2Vf cHJlc2VudCk7CiAKLSAgICAgICAgaWYgKCBpc19oYXJkd2FyZV9kb21haW4oZCkgJiYgKHJlZ3Mt PmVycm9yX2NvZGUgJiBQRkVDX3BhZ2VfcHJlc2VudCkgJiYKLSAgICAgICAgICAgICBtbWlvX3Jv X2RvX3BhZ2VfZmF1bHQodiwgYWRkciwgcmVncykgKQorICAgICAgICBpZiAoIChwdHdyIHx8IG1t aW9fcm8pICYmIHB2X3JvX3BhZ2VfZmF1bHQodiwgYWRkciwgcmVncykgKQogICAgICAgICAgICAg cmV0dXJuIEVYQ1JFVF9mYXVsdF9maXhlZDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3hlbi9pbmNs dWRlL2FzbS14ODYvbW0uaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvbW0uaAppbmRleCA0YzAzYTMz ZTc5Li4yZGM0ODk4YmVkIDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L21tLmgKKysr IGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9tbS5oCkBAIC01MTEsMTAgKzUxMSw3IEBAIGV4dGVybiBp bnQgbW1jZmdfaW50ZXJjZXB0X3dyaXRlKGVudW0geDg2X3NlZ21lbnQgc2VnLAogaW50IHB2X2Vt dWxfY3B1aWQodWludDMyX3QgbGVhZiwgdWludDMyX3Qgc3VibGVhZiwKICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBjcHVpZF9sZWFmICpyZXMsIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0 KTsKIAotaW50ICBwdHdyX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHZjcHUgKiwgdW5zaWduZWQgbG9u ZywKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjcHVfdXNlcl9yZWdzICopOwotaW50 ICBtbWlvX3JvX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHZjcHUgKiwgdW5zaWduZWQgbG9uZywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjcHVfdXNlcl9yZWdzICopOworaW50IHB2 X3JvX3BhZ2VfZmF1bHQoc3RydWN0IHZjcHUgKiwgdW5zaWduZWQgbG9uZywgc3RydWN0IGNwdV91 c2VyX3JlZ3MgKik7CiAKIGludCBhdWRpdF9hZGp1c3RfcGd0YWJsZXMoc3RydWN0IGRvbWFpbiAq ZCwgaW50IGRpciwgaW50IG5vaXN5KTsKIAotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4t ZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==