From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH 3/3] x86/mm: merge ptwr and mmio_ro page fault handlers Date: Wed, 30 Aug 2017 18:11:12 +0100 Message-ID: <20170830171112.3634-4-wei.liu2@citrix.com> References: <20170830171112.3634-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.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dn6XT-0002N6-0O for xen-devel@lists.xenproject.org; Wed, 30 Aug 2017 17:12:27 +0000 In-Reply-To: <20170830171112.3634-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 IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KCnh0ZiBpcyBoYXBweSB3aXRoIHRo aXMgY2hhbmdlLiBMZXQgbWUga25vdyBpZiBtb3JlIHRlc3RzIGNhbiBiZSBkb25lLgotLS0KIHhl bi9hcmNoL3g4Ni9tbS5jICAgICAgICB8IDMxNiArKysrKysrKysrKysrKysrKysrKysrKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogeGVuL2FyY2gveDg2L3RyYXBzLmMgICAgIHwgIDIwICstLQog eGVuL2luY2x1ZGUvYXNtLXg4Ni9tbS5oIHwgICA2ICstCiAzIGZpbGVzIGNoYW5nZWQsIDE2NiBp bnNlcnRpb25zKCspLCAxNzYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2 L21tLmMgYi94ZW4vYXJjaC94ODYvbW0uYwppbmRleCA1Yjg0MGNjNjAzLi4zODc5ZDRhNTRkIDEw MDY0NAotLS0gYS94ZW4vYXJjaC94ODYvbW0uYworKysgYi94ZW4vYXJjaC94ODYvbW0uYwpAQCAt NTE2OCw5MiArNTE2OCw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIHB0 d3JfZW11bGF0ZV9vcHMgPSB7CiAgICAgLmNwdWlkICAgICAgPSBwdl9lbXVsX2NwdWlkLAogfTsK IAotLyogV3JpdGUgcGFnZSBmYXVsdCBoYW5kbGVyOiBjaGVjayBpZiBndWVzdCBpcyB0cnlpbmcg dG8gbW9kaWZ5IGEgUFRFLiAqLwotaW50IHB0d3JfZG9fcGFnZV9mYXVsdChzdHJ1Y3QgdmNwdSAq diwgdW5zaWduZWQgbG9uZyBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3B1 X3VzZXJfcmVncyAqcmVncykKLXsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gdi0+ZG9tYWluOwot ICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7Ci0gICAgbDFfcGdlbnRyeV90ICAgICAgcHRlOwot ICAgIHN0cnVjdCBwdHdyX2VtdWxhdGVfY3R4dCBwdHdyX2N0eHQ7Ci0gICAgc3RydWN0IHg4Nl9l bXVsYXRlX2N0eHQgY3R4dCA9IHsKLSAgICAgICAucmVncyA9IHJlZ3MsCi0gICAgICAgLnZlbmRv ciA9IGQtPmFyY2guY3B1aWQtPng4Nl92ZW5kb3IsCi0gICAgICAgLmFkZHJfc2l6ZSA9IGlzX3B2 XzMyYml0X2RvbWFpbihkKSA/IDMyIDogQklUU19QRVJfTE9ORywKLSAgICAgICAuc3Bfc2l6ZSAg ID0gaXNfcHZfMzJiaXRfZG9tYWluKGQpID8gMzIgOiBCSVRTX1BFUl9MT05HLAotICAgICAgIC5s bWEgICAgICAgPSAhaXNfcHZfMzJiaXRfZG9tYWluKGQpLAotICAgICAgIC5kYXRhICAgICAgPSAm cHR3cl9jdHh0LAotICAgIH07Ci0gICAgaW50IHJjOwotCi0gICAgLyogQXR0ZW1wdCB0byByZWFk IHRoZSBQVEUgdGhhdCBtYXBzIHRoZSBWQSBiZWluZyBhY2Nlc3NlZC4gKi8KLSAgICBndWVzdF9n ZXRfZWZmX2wxZShhZGRyLCAmcHRlKTsKLQotICAgIC8qIFdlIGFyZSBsb29raW5nIG9ubHkgZm9y IHJlYWQtb25seSBtYXBwaW5ncyBvZiBwLnQuIHBhZ2VzLiAqLwotICAgIGlmICggKChsMWVfZ2V0 X2ZsYWdzKHB0ZSkgJiAoX1BBR0VfUFJFU0VOVHxfUEFHRV9SVykpICE9IF9QQUdFX1BSRVNFTlQp IHx8Ci0gICAgICAgICByYW5nZXNldF9jb250YWluc19zaW5nbGV0b24obW1pb19yb19yYW5nZXMs IGwxZV9nZXRfcGZuKHB0ZSkpIHx8Ci0gICAgICAgICAhZ2V0X3BhZ2VfZnJvbV9tZm4obDFlX2dl dF9tZm4ocHRlKSwgZCkgKQotICAgICAgICBnb3RvIGJhaWw7Ci0KLSAgICBwYWdlID0gbDFlX2dl dF9wYWdlKHB0ZSk7Ci0gICAgaWYgKCAhcGFnZV9sb2NrKHBhZ2UpICkKLSAgICB7Ci0gICAgICAg IHB1dF9wYWdlKHBhZ2UpOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCi0gICAgaWYgKCAo cGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrKSAhPSBQR1RfbDFfcGFnZV90 YWJsZSApCi0gICAgewotICAgICAgICBwYWdlX3VubG9jayhwYWdlKTsKLSAgICAgICAgcHV0X3Bh Z2UocGFnZSk7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KLSAgICBwdHdyX2N0eHQgPSAo c3RydWN0IHB0d3JfZW11bGF0ZV9jdHh0KSB7Ci0gICAgICAgIC5jcjIgPSBhZGRyLAotICAgICAg ICAucHRlID0gcHRlLAotICAgICAgICAuY3R4dCA9ICZjdHh0Ci0gICAgfTsKLQotICAgIHJjID0g eDg2X2VtdWxhdGUoJmN0eHQsICZwdHdyX2VtdWxhdGVfb3BzKTsKLQotICAgIHBhZ2VfdW5sb2Nr KHBhZ2UpOwotICAgIHB1dF9wYWdlKHBhZ2UpOwotCi0gICAgc3dpdGNoICggcmMgKQotICAgIHsK LSAgICBjYXNlIFg4NkVNVUxfRVhDRVBUSU9OOgotICAgICAgICAvKgotICAgICAgICAgKiBUaGlz IGVtdWxhdGlvbiBvbmx5IGNvdmVycyB3cml0ZXMgdG8gcGFnZXRhYmxlcyB3aGljaCBhcmUgbWFy a2VkCi0gICAgICAgICAqIHJlYWQtb25seSBieSBYZW4uICBXZSB0b2xlcmF0ZSAjUEYgKGluIGNh c2UgYSBjb25jdXJyZW50IHBhZ2V0YWJsZQotICAgICAgICAgKiB1cGRhdGUgaGFzIHN1Y2NlZWRl ZCBvbiBhIGRpZmZlcmVudCB2Y3B1KS4gIEFueXRoaW5nIGVsc2UgaXMgYW4KLSAgICAgICAgICog ZW11bGF0aW9uIGJ1Zywgb3IgYSBndWVzdCBwbGF5aW5nIHdpdGggdGhlIGluc3RydWN0aW9uIHN0 cmVhbSB1bmRlcgotICAgICAgICAgKiBYZW4ncyBmZWV0LgotICAgICAgICAgKi8KLSAgICAgICAg aWYgKCBjdHh0LmV2ZW50LnR5cGUgPT0gWDg2X0VWRU5UVFlQRV9IV19FWENFUFRJT04gJiYKLSAg ICAgICAgICAgICBjdHh0LmV2ZW50LnZlY3RvciA9PSBUUkFQX3BhZ2VfZmF1bHQgKQotICAgICAg ICAgICAgcHZfaW5qZWN0X2V2ZW50KCZjdHh0LmV2ZW50KTsKLSAgICAgICAgZWxzZQotICAgICAg ICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAiVW5l eHBlY3RlZCBldmVudCAodHlwZSAldSwgdmVjdG9yICUjeCkgZnJvbSBlbXVsYXRpb25cbiIsCi0g ICAgICAgICAgICAgICAgICAgICBjdHh0LmV2ZW50LnR5cGUsIGN0eHQuZXZlbnQudmVjdG9yKTsK LQotICAgICAgICAvKiBGYWxsdGhyb3VnaCAqLwotICAgIGNhc2UgWDg2RU1VTF9PS0FZOgotCi0g ICAgICAgIGlmICggY3R4dC5yZXRpcmUuc2luZ2xlc3RlcCApCi0gICAgICAgICAgICBwdl9pbmpl Y3RfaHdfZXhjZXB0aW9uKFRSQVBfZGVidWcsIFg4Nl9FVkVOVF9OT19FQyk7Ci0KLSAgICAgICAg LyogRmFsbHRocm91Z2ggKi8KLSAgICBjYXNlIFg4NkVNVUxfUkVUUlk6Ci0gICAgICAgIHBlcmZj X2luY3IocHR3cl9lbXVsYXRpb25zKTsKLSAgICAgICAgcmV0dXJuIEVYQ1JFVF9mYXVsdF9maXhl ZDsKLSAgICB9Ci0KLSBiYWlsOgotICAgIHJldHVybiAwOwotfQotCiAvKioqKioqKioqKioqKioq KioqKioqKioqKgogICogZmF1bHQgaGFuZGxpbmcgZm9yIHJlYWQtb25seSBNTUlPIHBhZ2VzCiAg Ki8KQEAgLTUzMjYsODMgKzUyNDAsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRl X29wcyBtbWNmZ19pbnRlcmNlcHRfb3BzID0gewogICAgIC5jcHVpZCAgICAgID0gcHZfZW11bF9j cHVpZCwKIH07CiAKLS8qIENoZWNrIGlmIGd1ZXN0IGlzIHRyeWluZyB0byBtb2RpZnkgYSByL28g TU1JTyBwYWdlLiAqLwotaW50IG1taW9fcm9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgdmNwdSAqdiwg dW5zaWduZWQgbG9uZyBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3B1 X3VzZXJfcmVncyAqcmVncykKLXsKLSAgICBsMV9wZ2VudHJ5X3QgcHRlOwotICAgIHVuc2lnbmVk IGxvbmcgbWZuOwotICAgIHVuc2lnbmVkIGludCBhZGRyX3NpemUgPSBpc19wdl8zMmJpdF92Y3B1 KHYpID8gMzIgOiBCSVRTX1BFUl9MT05HOwotICAgIHN0cnVjdCBtbWlvX3JvX2VtdWxhdGVfY3R4 dCBtbWlvX3JvX2N0eHQgPSB7IC5jcjIgPSBhZGRyIH07Ci0gICAgc3RydWN0IHg4Nl9lbXVsYXRl X2N0eHQgY3R4dCA9IHsKLSAgICAgICAgLnJlZ3MgPSByZWdzLAotICAgICAgICAudmVuZG9yID0g di0+ZG9tYWluLT5hcmNoLmNwdWlkLT54ODZfdmVuZG9yLAotICAgICAgICAuYWRkcl9zaXplID0g YWRkcl9zaXplLAotICAgICAgICAuc3Bfc2l6ZSA9IGFkZHJfc2l6ZSwKLSAgICAgICAgLmxtYSA9 ICFpc19wdl8zMmJpdF92Y3B1KHYpLAotICAgICAgICAuZGF0YSA9ICZtbWlvX3JvX2N0eHQsCi0g ICAgfTsKLSAgICBpbnQgcmM7Ci0KLSAgICAvKiBBdHRlbXB0IHRvIHJlYWQgdGhlIFBURSB0aGF0 IG1hcHMgdGhlIFZBIGJlaW5nIGFjY2Vzc2VkLiAqLwotICAgIGd1ZXN0X2dldF9lZmZfbDFlKGFk ZHIsICZwdGUpOwotCi0gICAgLyogV2UgYXJlIGxvb2tpbmcgb25seSBmb3IgcmVhZC1vbmx5IG1h cHBpbmdzIG9mIE1NSU8gcGFnZXMuICovCi0gICAgaWYgKCAoKGwxZV9nZXRfZmxhZ3MocHRlKSAm IChfUEFHRV9QUkVTRU5UfF9QQUdFX1JXKSkgIT0gX1BBR0VfUFJFU0VOVCkgKQotICAgICAgICBy ZXR1cm4gMDsKLQotICAgIG1mbiA9IGwxZV9nZXRfcGZuKHB0ZSk7Ci0gICAgaWYgKCBtZm5fdmFs aWQoX21mbihtZm4pKSApCi0gICAgewotICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlID0g bWZuX3RvX3BhZ2UoX21mbihtZm4pKTsKLSAgICAgICAgc3RydWN0IGRvbWFpbiAqb3duZXIgPSBw YWdlX2dldF9vd25lcl9hbmRfcmVmZXJlbmNlKHBhZ2UpOwotCi0gICAgICAgIGlmICggb3duZXIg KQotICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgIGlmICggb3duZXIgIT0gZG9t X2lvICkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmICggIXJhbmdlc2V0 X2NvbnRhaW5zX3NpbmdsZXRvbihtbWlvX3JvX3JhbmdlcywgbWZuKSApCi0gICAgICAgIHJldHVy biAwOwotCi0gICAgaWYgKCBwY2lfcm9fbW1jZmdfZGVjb2RlKG1mbiwgJm1taW9fcm9fY3R4dC5z ZWcsICZtbWlvX3JvX2N0eHQuYmRmKSApCi0gICAgICAgIHJjID0geDg2X2VtdWxhdGUoJmN0eHQs ICZtbWNmZ19pbnRlcmNlcHRfb3BzKTsKLSAgICBlbHNlCi0gICAgICAgIHJjID0geDg2X2VtdWxh dGUoJmN0eHQsICZtbWlvX3JvX2VtdWxhdGVfb3BzKTsKLQotICAgIHN3aXRjaCAoIHJjICkKLSAg ICB7Ci0gICAgY2FzZSBYODZFTVVMX0VYQ0VQVElPTjoKLSAgICAgICAgLyoKLSAgICAgICAgICog VGhpcyBlbXVsYXRpb24gb25seSBjb3ZlcnMgd3JpdGVzIHRvIE1NQ0ZHIHNwYWNlIG9yIHJlYWQt b25seSBNRk5zLgotICAgICAgICAgKiBXZSB0b2xlcmF0ZSAjUEYgKGZyb20gaGl0dGluZyBhbiBh ZGphY2VudCBwYWdlIG9yIGEgc3VjY2Vzc2Z1bAotICAgICAgICAgKiBjb25jdXJyZW50IHBhZ2V0 YWJsZSB1cGRhdGUpLiAgQW55dGhpbmcgZWxzZSBpcyBhbiBlbXVsYXRpb24gYnVnLAotICAgICAg ICAgKiBvciBhIGd1ZXN0IHBsYXlpbmcgd2l0aCB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIHVuZGVy IFhlbidzIGZlZXQuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIGN0eHQuZXZlbnQudHlwZSA9 PSBYODZfRVZFTlRUWVBFX0hXX0VYQ0VQVElPTiAmJgotICAgICAgICAgICAgIGN0eHQuZXZlbnQu dmVjdG9yID09IFRSQVBfcGFnZV9mYXVsdCApCi0gICAgICAgICAgICBwdl9pbmplY3RfZXZlbnQo JmN0eHQuZXZlbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnZHByaW50ayhYRU5MT0df V0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGV2ZW50ICh0eXBlICV1 LCB2ZWN0b3IgJSN4KSBmcm9tIGVtdWxhdGlvblxuIiwKLSAgICAgICAgICAgICAgICAgICAgIGN0 eHQuZXZlbnQudHlwZSwgY3R4dC5ldmVudC52ZWN0b3IpOwotCi0gICAgICAgIC8qIEZhbGx0aHJv dWdoICovCi0gICAgY2FzZSBYODZFTVVMX09LQVk6Ci0KLSAgICAgICAgaWYgKCBjdHh0LnJldGly ZS5zaW5nbGVzdGVwICkKLSAgICAgICAgICAgIHB2X2luamVjdF9od19leGNlcHRpb24oVFJBUF9k ZWJ1ZywgWDg2X0VWRU5UX05PX0VDKTsKLQotICAgICAgICAvKiBGYWxsdGhyb3VnaCAqLwotICAg IGNhc2UgWDg2RU1VTF9SRVRSWToKLSAgICAgICAgcGVyZmNfaW5jcihtbWlvX3JvX2VtdWxhdGlv bnMpOwotICAgICAgICByZXR1cm4gRVhDUkVUX2ZhdWx0X2ZpeGVkOwotICAgIH0KLQotICAgIHJl dHVybiAwOwotfQotCiB2b2lkICphbGxvY194ZW5fcGFnZXRhYmxlKHZvaWQpCiB7CiAgICAgaWYg KCBzeXN0ZW1fc3RhdGUgIT0gU1lTX1NUQVRFX2Vhcmx5X2Jvb3QgKQpAQCAtNjQzNCw2ICs2Mjcx LDE1OSBAQCB2b2lkIHdyaXRlXzMyYml0X3BzZV9pZGVudG1hcCh1aW50MzJfdCAqbDIpCiAgICAg ICAgICAgICAgICAgIF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9QU0UpOwog fQogCisvKiBDaGVjayBpZiBndWVzdCBpcyB0cnlpbmcgdG8gbW9kaWZ5IGEgci9vIE1NSU8gcGFn ZS4gKi8KK3N0YXRpYyBpbnQgbW1pb19yb19kb19wYWdlX2ZhdWx0KHN0cnVjdCB4ODZfZW11bGF0 ZV9jdHh0ICpjdHh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg bG9uZyBhZGRyLCBsMV9wZ2VudHJ5X3QgcHRlKQoreworICAgIHN0cnVjdCBtbWlvX3JvX2VtdWxh dGVfY3R4dCBtbWlvX3JvX2N0eHQgPSB7IC5jcjIgPSBhZGRyIH07CisgICAgbWZuX3QgbWZuID0g bDFlX2dldF9tZm4ocHRlKTsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoIG1mbl92YWxpZChtZm4p ICkKKyAgICB7CisgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UgPSBtZm5fdG9fcGFnZSht Zm4pOworICAgICAgICBzdHJ1Y3QgZG9tYWluICpvd25lciA9IHBhZ2VfZ2V0X293bmVyX2FuZF9y ZWZlcmVuY2UocGFnZSk7CisKKyAgICAgICAgaWYgKCBvd25lciApCisgICAgICAgICAgICBwdXRf cGFnZShwYWdlKTsKKyAgICAgICAgaWYgKCBvd25lciAhPSBkb21faW8gKQorICAgICAgICAgICAg Z290byBiYWlsOworICAgIH0KKworICAgIGN0eHQtPmRhdGEgPSAmbW1pb19yb19jdHh0OworICAg IGlmICggcGNpX3JvX21tY2ZnX2RlY29kZShtZm5feChtZm4pLCAmbW1pb19yb19jdHh0LnNlZywg Jm1taW9fcm9fY3R4dC5iZGYpICkKKyAgICAgICAgcmMgPSB4ODZfZW11bGF0ZShjdHh0LCAmbW1j ZmdfaW50ZXJjZXB0X29wcyk7CisgICAgZWxzZQorICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKGN0 eHQsICZtbWlvX3JvX2VtdWxhdGVfb3BzKTsKKworICAgIHN3aXRjaCAoIHJjICkKKyAgICB7Cisg ICAgY2FzZSBYODZFTVVMX0VYQ0VQVElPTjoKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhpcyBl bXVsYXRpb24gb25seSBjb3ZlcnMgd3JpdGVzIHRvIE1NQ0ZHIHNwYWNlIG9yIHJlYWQtb25seSBN Rk5zLgorICAgICAgICAgKiBXZSB0b2xlcmF0ZSAjUEYgKGZyb20gaGl0dGluZyBhbiBhZGphY2Vu dCBwYWdlIG9yIGEgc3VjY2Vzc2Z1bAorICAgICAgICAgKiBjb25jdXJyZW50IHBhZ2V0YWJsZSB1 cGRhdGUpLiAgQW55dGhpbmcgZWxzZSBpcyBhbiBlbXVsYXRpb24gYnVnLAorICAgICAgICAgKiBv ciBhIGd1ZXN0IHBsYXlpbmcgd2l0aCB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIHVuZGVyIFhlbidz IGZlZXQuCisgICAgICAgICAqLworICAgICAgICBpZiAoIGN0eHQtPmV2ZW50LnR5cGUgPT0gWDg2 X0VWRU5UVFlQRV9IV19FWENFUFRJT04gJiYKKyAgICAgICAgICAgICBjdHh0LT5ldmVudC52ZWN0 b3IgPT0gVFJBUF9wYWdlX2ZhdWx0ICkKKyAgICAgICAgICAgIHB2X2luamVjdF9ldmVudCgmY3R4 dC0+ZXZlbnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FS TklORywKKyAgICAgICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGV2ZW50ICh0eXBlICV1LCB2 ZWN0b3IgJSN4KSBmcm9tIGVtdWxhdGlvblxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGN0eHQt PmV2ZW50LnR5cGUsIGN0eHQtPmV2ZW50LnZlY3Rvcik7CisKKyAgICAgICAgLyogRmFsbHRocm91 Z2ggKi8KKyAgICBjYXNlIFg4NkVNVUxfT0tBWToKKworICAgICAgICBpZiAoIGN0eHQtPnJldGly ZS5zaW5nbGVzdGVwICkKKyAgICAgICAgICAgIHB2X2luamVjdF9od19leGNlcHRpb24oVFJBUF9k ZWJ1ZywgWDg2X0VWRU5UX05PX0VDKTsKKworICAgICAgICAvKiBGYWxsdGhyb3VnaCAqLworICAg IGNhc2UgWDg2RU1VTF9SRVRSWToKKyAgICAgICAgcGVyZmNfaW5jcihtbWlvX3JvX2VtdWxhdGlv bnMpOworICAgICAgICByZXR1cm4gRVhDUkVUX2ZhdWx0X2ZpeGVkOworICAgIH0KKworIGJhaWw6 CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIFdyaXRlIHBhZ2UgZmF1bHQgaGFuZGxlcjogY2hlY2sg aWYgZ3Vlc3QgaXMgdHJ5aW5nIHRvIG1vZGlmeSBhIFBURS4gKi8KK3N0YXRpYyBpbnQgcHR3cl9k b19wYWdlX2ZhdWx0KHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBzdHJ1Y3QgZG9tYWlu ICpkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBs MV9wZ2VudHJ5X3QgcHRlKQoreworICAgIHN0cnVjdCBwdHdyX2VtdWxhdGVfY3R4dCBwdHdyX2N0 eHQgPSB7CisgICAgICAgIC5jcjIgPSBhZGRyLAorICAgICAgICAucHRlID0gcHRlLAorICAgICAg ICAuY3R4dCA9IGN0eHQKKyAgICB9OworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CisgICAg aW50IHJjOworCisgICAgaWYgKCAhZ2V0X3BhZ2VfZnJvbV9tZm4obDFlX2dldF9tZm4ocHRlKSwg ZCkgKQorICAgICAgICBnb3RvIGJhaWw7CisKKyAgICBwYWdlID0gbDFlX2dldF9wYWdlKHB0ZSk7 CisgICAgaWYgKCAhcGFnZV9sb2NrKHBhZ2UpICkKKyAgICB7CisgICAgICAgIHB1dF9wYWdlKHBh Z2UpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgaWYgKCAocGFnZS0+dS5pbnVz ZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrKSAhPSBQR1RfbDFfcGFnZV90YWJsZSApCisgICAg eworICAgICAgICBwYWdlX3VubG9jayhwYWdlKTsKKyAgICAgICAgcHV0X3BhZ2UocGFnZSk7Cisg ICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICBjdHh0LT5kYXRhID0gJnB0d3JfY3R4dDsK KyAgICByYyA9IHg4Nl9lbXVsYXRlKGN0eHQsICZwdHdyX2VtdWxhdGVfb3BzKTsKKworICAgIHBh Z2VfdW5sb2NrKHBhZ2UpOworICAgIHB1dF9wYWdlKHBhZ2UpOworCisgICAgc3dpdGNoICggcmMg KQorICAgIHsKKyAgICBjYXNlIFg4NkVNVUxfRVhDRVBUSU9OOgorICAgICAgICAvKgorICAgICAg ICAgKiBUaGlzIGVtdWxhdGlvbiBvbmx5IGNvdmVycyB3cml0ZXMgdG8gcGFnZXRhYmxlcyB3aGlj aCBhcmUgbWFya2VkCisgICAgICAgICAqIHJlYWQtb25seSBieSBYZW4uICBXZSB0b2xlcmF0ZSAj UEYgKGluIGNhc2UgYSBjb25jdXJyZW50IHBhZ2V0YWJsZQorICAgICAgICAgKiB1cGRhdGUgaGFz IHN1Y2NlZWRlZCBvbiBhIGRpZmZlcmVudCB2Y3B1KS4gIEFueXRoaW5nIGVsc2UgaXMgYW4KKyAg ICAgICAgICogZW11bGF0aW9uIGJ1Zywgb3IgYSBndWVzdCBwbGF5aW5nIHdpdGggdGhlIGluc3Ry dWN0aW9uIHN0cmVhbSB1bmRlcgorICAgICAgICAgKiBYZW4ncyBmZWV0LgorICAgICAgICAgKi8K KyAgICAgICAgaWYgKCBjdHh0LT5ldmVudC50eXBlID09IFg4Nl9FVkVOVFRZUEVfSFdfRVhDRVBU SU9OICYmCisgICAgICAgICAgICAgY3R4dC0+ZXZlbnQudmVjdG9yID09IFRSQVBfcGFnZV9mYXVs dCApCisgICAgICAgICAgICBwdl9pbmplY3RfZXZlbnQoJmN0eHQtPmV2ZW50KTsKKyAgICAgICAg ZWxzZQorICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAg ICAgICAgICAiVW5leHBlY3RlZCBldmVudCAodHlwZSAldSwgdmVjdG9yICUjeCkgZnJvbSBlbXVs YXRpb25cbiIsCisgICAgICAgICAgICAgICAgICAgICBjdHh0LT5ldmVudC50eXBlLCBjdHh0LT5l dmVudC52ZWN0b3IpOworCisgICAgICAgIC8qIEZhbGx0aHJvdWdoICovCisgICAgY2FzZSBYODZF TVVMX09LQVk6CisKKyAgICAgICAgaWYgKCBjdHh0LT5yZXRpcmUuc2luZ2xlc3RlcCApCisgICAg ICAgICAgICBwdl9pbmplY3RfaHdfZXhjZXB0aW9uKFRSQVBfZGVidWcsIFg4Nl9FVkVOVF9OT19F Qyk7CisKKyAgICAgICAgLyogRmFsbHRocm91Z2ggKi8KKyAgICBjYXNlIFg4NkVNVUxfUkVUUlk6 CisgICAgICAgIHBlcmZjX2luY3IocHR3cl9lbXVsYXRpb25zKTsKKyAgICAgICAgcmV0dXJuIEVY Q1JFVF9mYXVsdF9maXhlZDsKKyAgICB9CisKKyBiYWlsOgorICAgIHJldHVybiAwOworfQorCitp bnQgcHR3cl9vcl9tbWlvX3JvX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVk IGxvbmcgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3B1 X3VzZXJfcmVncyAqcmVncykKK3sKKyAgICBsMV9wZ2VudHJ5X3QgcHRlOworICAgIHN0cnVjdCBk b21haW4gKmQgPSB2LT5kb21haW47CisgICAgdW5zaWduZWQgaW50IGFkZHJfc2l6ZSA9IGlzX3B2 XzMyYml0X3ZjcHUodikgPyAzMiA6IEJJVFNfUEVSX0xPTkc7CisgICAgc3RydWN0IHg4Nl9lbXVs YXRlX2N0eHQgY3R4dCA9IHsKKyAgICAgICAgLnJlZ3MgICAgICA9IHJlZ3MsCisgICAgICAgIC52 ZW5kb3IgICAgPSBkLT5hcmNoLmNwdWlkLT54ODZfdmVuZG9yLAorICAgICAgICAuYWRkcl9zaXpl ID0gYWRkcl9zaXplLAorICAgICAgICAuc3Bfc2l6ZSAgID0gYWRkcl9zaXplLAorICAgICAgICAu bG1hICAgICAgID0gIWlzX3B2XzMyYml0X3ZjcHUodiksCisgICAgfTsKKworICAgIC8qIEF0dGVt cHQgdG8gcmVhZCB0aGUgUFRFIHRoYXQgbWFwcyB0aGUgVkEgYmVpbmcgYWNjZXNzZWQuICovCisg ICAgZ3Vlc3RfZ2V0X2VmZl9sMWUoYWRkciwgJnB0ZSk7CisKKyAgICBpZiAoICgobDFlX2dldF9m bGFncyhwdGUpICYgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVykpICE9IF9QQUdFX1BSRVNFTlQp ICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIHJhbmdlc2V0X2NvbnRhaW5zX3Npbmds ZXRvbihtbWlvX3JvX3JhbmdlcywgbDFlX2dldF9wZm4ocHRlKSkgKQorICAgICAgICByZXR1cm4g bW1pb19yb19kb19wYWdlX2ZhdWx0KCZjdHh0LCBhZGRyLCBwdGUpOworICAgIGVsc2UKKyAgICAg ICAgcmV0dXJuIHB0d3JfZG9fcGFnZV9mYXVsdCgmY3R4dCwgZCwgYWRkciwgcHRlKTsKK30KKwog LyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIG1vZGU6IEMKZGlmZiAtLWdpdCBhL3hlbi9hcmNo L3g4Ni90cmFwcy5jIGIveGVuL2FyY2gveDg2L3RyYXBzLmMKaW5kZXggZjUyNWZhMjhkMy4uNmZi YTY0Y2FjZCAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3RyYXBzLmMKKysrIGIveGVuL2FyY2gv eDg2L3RyYXBzLmMKQEAgLTEzMDgsMTYgKzEzMDgsMTggQEAgc3RhdGljIGludCBmaXh1cF9wYWdl X2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCiAg ICAgICAgICAhKHJlZ3MtPmVycm9yX2NvZGUgJiAoUEZFQ19yZXNlcnZlZF9iaXQgfCBQRkVDX2lu c25fZmV0Y2gpKSAmJgogICAgICAgICAgKHJlZ3MtPmVycm9yX2NvZGUgJiBQRkVDX3dyaXRlX2Fj Y2VzcykgKQogICAgIHsKLSAgICAgICAgaWYgKCBWTV9BU1NJU1QoZCwgd3JpdGFibGVfcGFnZXRh YmxlcykgJiYKLSAgICAgICAgICAgICAvKiBEbyBub3QgY2hlY2sgaWYgYWNjZXNzLXByb3RlY3Rp b24gZmF1bHQgc2luY2UgdGhlIHBhZ2UgbWF5Ci0gICAgICAgICAgICAgICAgbGVnaXRpbWF0ZWx5 IGJlIG5vdCBwcmVzZW50IGluIHNoYWRvdyBwYWdlIHRhYmxlcyAqLwotICAgICAgICAgICAgIChw YWdpbmdfbW9kZV9lbmFibGVkKGQpIHx8Ci0gICAgICAgICAgICAgIChyZWdzLT5lcnJvcl9jb2Rl ICYgUEZFQ19wYWdlX3ByZXNlbnQpKSAmJgotICAgICAgICAgICAgIHB0d3JfZG9fcGFnZV9mYXVs dCh2LCBhZGRyLCByZWdzKSApCi0gICAgICAgICAgICByZXR1cm4gRVhDUkVUX2ZhdWx0X2ZpeGVk OworICAgICAgICBib29sIHB0d3IsIG1taW9fcm87CisKKyAgICAgICAgcHR3ciA9IFZNX0FTU0lT VChkLCB3cml0YWJsZV9wYWdldGFibGVzKSAmJgorICAgICAgICAgICAgICAgLyogRG8gbm90IGNo ZWNrIGlmIGFjY2Vzcy1wcm90ZWN0aW9uIGZhdWx0IHNpbmNlIHRoZSBwYWdlIG1heQorICAgICAg ICAgICAgICAgICAgbGVnaXRpbWF0ZWx5IGJlIG5vdCBwcmVzZW50IGluIHNoYWRvdyBwYWdlIHRh YmxlcyAqLworICAgICAgICAgICAgICAgKHBhZ2luZ19tb2RlX2VuYWJsZWQoZCkgfHwKKyAgICAg ICAgICAgICAgICAocmVncy0+ZXJyb3JfY29kZSAmIFBGRUNfcGFnZV9wcmVzZW50KSk7CisKKyAg ICAgICAgbW1pb19ybyA9IGlzX2hhcmR3YXJlX2RvbWFpbihkKSAmJgorICAgICAgICAgICAgICAg ICAgKHJlZ3MtPmVycm9yX2NvZGUgJiBQRkVDX3BhZ2VfcHJlc2VudCk7CiAKLSAgICAgICAgaWYg KCBpc19oYXJkd2FyZV9kb21haW4oZCkgJiYgKHJlZ3MtPmVycm9yX2NvZGUgJiBQRkVDX3BhZ2Vf cHJlc2VudCkgJiYKLSAgICAgICAgICAgICBtbWlvX3JvX2RvX3BhZ2VfZmF1bHQodiwgYWRkciwg cmVncykgKQorICAgICAgICBpZiAoIChwdHdyIHx8IG1taW9fcm8pICYmIHB0d3Jfb3JfbW1pb19y b19kb19wYWdlX2ZhdWx0KHYsIGFkZHIsIHJlZ3MpICkKICAgICAgICAgICAgIHJldHVybiBFWENS RVRfZmF1bHRfZml4ZWQ7CiAgICAgfQogCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2 L21tLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L21tLmgKaW5kZXggZWM3Y2UzYzhjOC4uODVhZGFm ZGZhMiAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9tbS5oCisrKyBiL3hlbi9pbmNs dWRlL2FzbS14ODYvbW0uaApAQCAtNTExLDEwICs1MTEsOCBAQCBleHRlcm4gaW50IG1tY2ZnX2lu dGVyY2VwdF93cml0ZShlbnVtIHg4Nl9zZWdtZW50IHNlZywKIGludCBwdl9lbXVsX2NwdWlkKHVp bnQzMl90IGxlYWYsIHVpbnQzMl90IHN1YmxlYWYsCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg Y3B1aWRfbGVhZiAqcmVzLCBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCk7CiAKLWludCAg cHR3cl9kb19wYWdlX2ZhdWx0KHN0cnVjdCB2Y3B1ICosIHVuc2lnbmVkIGxvbmcsCi0gICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqKTsKLWludCAgbW1pb19yb19k b19wYWdlX2ZhdWx0KHN0cnVjdCB2Y3B1ICosIHVuc2lnbmVkIGxvbmcsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqKTsKK2ludCBwdHdyX29yX21taW9f cm9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgdmNwdSAqLCB1bnNpZ25lZCBsb25nLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjcHVfdXNlcl9yZWdzICopOwogCiBpbnQg YXVkaXRfYWRqdXN0X3BndGFibGVzKHN0cnVjdCBkb21haW4gKmQsIGludCBkaXIsIGludCBub2lz eSk7CiAKLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcK aHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=