From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Adalbert=20Laz=C4=83r?= Subject: [RFC PATCH v6 23/92] kvm: page track: add support for preread, prewrite and preexec Date: Fri, 9 Aug 2019 18:59:38 +0300 Message-ID: <20190809160047.8319-24-alazar@bitdefender.com> References: <20190809160047.8319-1-alazar@bitdefender.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190809160047.8319-1-alazar@bitdefender.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: kvm@vger.kernel.org Cc: Tamas K Lengyel , Weijiang Yang , Yu C , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Jan Kiszka , =?UTF-8?q?Samuel=20Laur=C3=A9n?= , Konrad Rzeszutek Wilk , Sean Christopherson , virtualization@lists.linux-foundation.org, =?UTF-8?q?Adalbert=20Laz=C4=83r?= , linux-mm@kvack.org, Patrick Colp , Xiao Guangrong , Mathieu Tarral , Stefan Hajnoczi , Paolo Bonzini , Zhang@mail.linuxfoundation.org, =?UTF-8?q?Mihai=20Don=C8=9Bu?= List-Id: virtualization@lists.linuxfoundation.org RnJvbTogTWloYWkgRG9uyJt1IDxtZG9udHVAYml0ZGVmZW5kZXIuY29tPgoKVGhlc2UgY2FsbGJh Y2tzIHJldHVybiBhIGJvb2xlYW4gdmFsdWUuIElmIGZhbHNlLCB0aGUgZW11bGF0aW9uIHNob3Vs ZApzdG9wIGFuZCB0aGUgaW5zdHJ1Y3Rpb24gc2hvdWxkIGJlIHJlZXhlY3V0ZWQgaW4gZ3Vlc3Qu IFRoZSBwcmVyZWFkCmNhbGxiYWNrIGNhbiByZXR1cm4gdGhlIGJ5dGVzIG5lZWRlZCBieSB0aGUg cmVhZCBvcGVyYXRpb24uCgpDQzogWGlhbyBHdWFuZ3JvbmcgPGd1YW5ncm9uZy54aWFvQGdtYWls LmNvbT4KQ0M6IFNlYW4gQ2hyaXN0b3BoZXJzb24gPHNlYW4uai5jaHJpc3RvcGhlcnNvbkBpbnRl bC5jb20+ClNpZ25lZC1vZmYtYnk6IE1paGFpIERvbsibdSA8bWRvbnR1QGJpdGRlZmVuZGVyLmNv bT4KU2lnbmVkLW9mZi1ieTogQWRhbGJlcnQgTGF6xINyIDxhbGF6YXJAYml0ZGVmZW5kZXIuY29t PgotLS0KIGFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmggfCAgMTkgKysrLQog YXJjaC94ODYva3ZtL21tdS5jICAgICAgICAgICAgICAgICAgICB8ICA4MSArKysrKysrKysrKysr KysrKwogYXJjaC94ODYva3ZtL21tdS5oICAgICAgICAgICAgICAgICAgICB8ICAgNCArCiBhcmNo L3g4Ni9rdm0vcGFnZV90cmFjay5jICAgICAgICAgICAgIHwgMTIzICsrKysrKysrKysrKysrKysr KysrKysrKy0tCiA0IGZpbGVzIGNoYW5nZWQsIDIxNyBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFnZV90cmFjay5o IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhZ2VfdHJhY2suaAppbmRleCAwNDkyYTg1ZjNh NDQuLmE0MzFlNWUxZTVjYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3Bh Z2VfdHJhY2suaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFnZV90cmFjay5oCkBA IC0zLDcgKzMsMTAgQEAKICNkZWZpbmUgX0FTTV9YODZfS1ZNX1BBR0VfVFJBQ0tfSAogCiBlbnVt IGt2bV9wYWdlX3RyYWNrX21vZGUgeworCUtWTV9QQUdFX1RSQUNLX1BSRVJFQUQsCisJS1ZNX1BB R0VfVFJBQ0tfUFJFV1JJVEUsCiAJS1ZNX1BBR0VfVFJBQ0tfV1JJVEUsCisJS1ZNX1BBR0VfVFJB Q0tfUFJFRVhFQywKIAlLVk1fUEFHRV9UUkFDS19NQVgsCiB9OwogCkBAIC0yMiw2ICsyNSwxMyBA QCBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfaGVhZCB7CiBzdHJ1Y3Qga3ZtX3BhZ2Vf dHJhY2tfbm90aWZpZXJfbm9kZSB7CiAJc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKIAorCWJvb2wg KCp0cmFja19wcmVyZWFkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgZ3ZhX3Qg Z3ZhLAorCQkJICAgICAgdTggKm5ldywgaW50IGJ5dGVzLAorCQkJICAgICAgc3RydWN0IGt2bV9w YWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm5vZGUsCisJCQkgICAgICBib29sICpkYXRhX3JlYWR5 KTsKKwlib29sICgqdHJhY2tfcHJld3JpdGUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3Qg Z3BhLCBndmFfdCBndmEsCisJCQkgICAgICAgY29uc3QgdTggKm5ldywgaW50IGJ5dGVzLAorCQkJ ICAgICAgIHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpub2RlKTsKIAkvKgog CSAqIEl0IGlzIGNhbGxlZCB3aGVuIGd1ZXN0IGlzIHdyaXRpbmcgdGhlIHdyaXRlLXRyYWNrZWQg cGFnZQogCSAqIGFuZCB3cml0ZSBlbXVsYXRpb24gaXMgZmluaXNoZWQgYXQgdGhhdCB0aW1lLgpA QCAtMzUsMTIgKzQ1LDE0IEBAIHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlIHsK IAl2b2lkICgqdHJhY2tfd3JpdGUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCBn dmFfdCBndmEsCiAJCQkgICAgY29uc3QgdTggKm5ldywgaW50IGJ5dGVzLAogCQkJICAgIHN0cnVj dCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpub2RlKTsKKwlib29sICgqdHJhY2tfcHJl ZXhlYykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIGd2YV90IGd2YSwKKwkJCSAg ICAgIHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpub2RlKTsKIAl2b2lkICgq dHJhY2tfY3JlYXRlX3Nsb3QpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xv dCAqc2xvdCwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLAogCQkJCSAgc3RydWN0IGt2bV9w YWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm5vZGUpOwogCS8qCiAJICogSXQgaXMgY2FsbGVkIHdo ZW4gbWVtb3J5IHNsb3QgaXMgYmVpbmcgbW92ZWQgb3IgcmVtb3ZlZAotCSAqIHVzZXJzIGNhbiBk cm9wIHdyaXRlLXByb3RlY3Rpb24gZm9yIHRoZSBwYWdlcyBpbiB0aGF0IG1lbW9yeSBzbG90CisJ ICogdXNlcnMgY2FuIGRyb3AgYWN0aXZlIHByb3RlY3Rpb24gZm9yIHRoZSBwYWdlcyBpbiB0aGF0 IG1lbW9yeSBzbG90CiAJICoKIAkgKiBAa3ZtOiB0aGUga3ZtIHdoZXJlIG1lbW9yeSBzbG90IGJl aW5nIG1vdmVkIG9yIHJlbW92ZWQKIAkgKiBAc2xvdDogdGhlIG1lbW9yeSBzbG90IGJlaW5nIG1v dmVkIG9yIHJlbW92ZWQKQEAgLTczLDcgKzg1LDEyIEBAIGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVy X25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwKIHZvaWQKIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0 ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLAogCQkJCSAgIHN0cnVjdCBrdm1fcGFnZV90cmFj a19ub3RpZmllcl9ub2RlICpuKTsKK2Jvb2wga3ZtX3BhZ2VfdHJhY2tfcHJlcmVhZChzdHJ1Y3Qg a3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgZ3ZhX3QgZ3ZhLAorCQkJICAgIHU4ICpuZXcsIGlu dCBieXRlcywgYm9vbCAqZGF0YV9yZWFkeSk7Citib29sIGt2bV9wYWdlX3RyYWNrX3ByZXdyaXRl KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCBndmFfdCBndmEsCisJCQkgICAgIGNv bnN0IHU4ICpuZXcsIGludCBieXRlcyk7CiB2b2lkIGt2bV9wYWdlX3RyYWNrX3dyaXRlKHN0cnVj dCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCBndmFfdCBndmEsCiAJCQkgIGNvbnN0IHU4ICpu ZXcsIGludCBieXRlcyk7Citib29sIGt2bV9wYWdlX3RyYWNrX3ByZWV4ZWMoc3RydWN0IGt2bV92 Y3B1ICp2Y3B1LCBncGFfdCBncGEsIGd2YV90IGd2YSk7CiB2b2lkIGt2bV9wYWdlX3RyYWNrX2Zs dXNoX3Nsb3Qoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KTsK ICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5jIGIvYXJjaC94ODYva3ZtL21t dS5jCmluZGV4IDk4OThkODYzYjZiNi4uYTg2YjE2NWNmNmRkIDEwMDY0NAotLS0gYS9hcmNoL3g4 Ni9rdm0vbW11LmMKKysrIGIvYXJjaC94ODYva3ZtL21tdS5jCkBAIC0xNTIzLDYgKzE1MjMsMzEg QEAgc3RhdGljIGJvb2wgc3B0ZV93cml0ZV9wcm90ZWN0KHU2NCAqc3B0ZXAsIGJvb2wgcHRfcHJv dGVjdCkKIAlyZXR1cm4gbW11X3NwdGVfdXBkYXRlKHNwdGVwLCBzcHRlKTsKIH0KIAorc3RhdGlj IGJvb2wgc3B0ZV9yZWFkX3Byb3RlY3QodTY0ICpzcHRlcCkKK3sKKwl1NjQgc3B0ZSA9ICpzcHRl cDsKKwlib29sIGV4ZWNfb25seV9zdXBwb3J0ZWQgPSAoc2hhZG93X3ByZXNlbnRfbWFzayA9PSAw dWxsKTsKKworCXJtYXBfcHJpbnRrKCJybWFwX3JlYWRfcHJvdGVjdDogc3B0ZSAlcCAlbGx4XG4i LCBzcHRlcCwgKnNwdGVwKTsKKworCVdBUk5fT05fT05DRSghZXhlY19vbmx5X3N1cHBvcnRlZCk7 CisKKwlzcHRlID0gc3B0ZSAmIH4oUFRfV1JJVEFCTEVfTUFTSyB8IFBUX1BSRVNFTlRfTUFTSyk7 CisKKwlyZXR1cm4gbW11X3NwdGVfdXBkYXRlKHNwdGVwLCBzcHRlKTsKK30KKworc3RhdGljIGJv b2wgc3B0ZV9leGVjX3Byb3RlY3QodTY0ICpzcHRlcCkKK3sKKwl1NjQgc3B0ZSA9ICpzcHRlcDsK KworCXJtYXBfcHJpbnRrKCJybWFwX2V4ZWNfcHJvdGVjdDogc3B0ZSAlcCAlbGx4XG4iLCBzcHRl cCwgKnNwdGVwKTsKKworCXNwdGUgPSBzcHRlICYgflBUX1VTRVJfTUFTSzsKKworCXJldHVybiBt bXVfc3B0ZV91cGRhdGUoc3B0ZXAsIHNwdGUpOworfQorCiBzdGF0aWMgYm9vbCBfX3JtYXBfd3Jp dGVfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJIHN0cnVjdCBrdm1fcm1hcF9oZWFkICpy bWFwX2hlYWQsCiAJCQkJIGJvb2wgcHRfcHJvdGVjdCkKQEAgLTE1MzcsNiArMTU2MiwzMiBAQCBz dGF0aWMgYm9vbCBfX3JtYXBfd3JpdGVfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sCiAJcmV0dXJu IGZsdXNoOwogfQogCitzdGF0aWMgYm9vbCBfX3JtYXBfcmVhZF9wcm90ZWN0KHN0cnVjdCBrdm0g Kmt2bSwKKwkJCQlzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkKQoreworCXU2NCAqc3B0 ZXA7CisJc3RydWN0IHJtYXBfaXRlcmF0b3IgaXRlcjsKKwlib29sIGZsdXNoID0gZmFsc2U7CisK Kwlmb3JfZWFjaF9ybWFwX3NwdGUocm1hcF9oZWFkLCAmaXRlciwgc3B0ZXApCisJCWZsdXNoIHw9 IHNwdGVfcmVhZF9wcm90ZWN0KHNwdGVwKTsKKworCXJldHVybiBmbHVzaDsKK30KKworc3RhdGlj IGJvb2wgX19ybWFwX2V4ZWNfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sCisJCQkJc3RydWN0IGt2 bV9ybWFwX2hlYWQgKnJtYXBfaGVhZCkKK3sKKwl1NjQgKnNwdGVwOworCXN0cnVjdCBybWFwX2l0 ZXJhdG9yIGl0ZXI7CisJYm9vbCBmbHVzaCA9IGZhbHNlOworCisJZm9yX2VhY2hfcm1hcF9zcHRl KHJtYXBfaGVhZCwgJml0ZXIsIHNwdGVwKQorCQlmbHVzaCB8PSBzcHRlX2V4ZWNfcHJvdGVjdChz cHRlcCk7CisKKwlyZXR1cm4gZmx1c2g7Cit9CisKIHN0YXRpYyBib29sIHNwdGVfY2xlYXJfZGly dHkodTY0ICpzcHRlcCkKIHsKIAl1NjQgc3B0ZSA9ICpzcHRlcDsKQEAgLTE3MDcsNiArMTc1OCwz NiBAQCBib29sIGt2bV9tbXVfc2xvdF9nZm5fd3JpdGVfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0s CiAJcmV0dXJuIHdyaXRlX3Byb3RlY3RlZDsKIH0KIAorYm9vbCBrdm1fbW11X3Nsb3RfZ2ZuX3Jl YWRfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sCisJCQkJICAgc3RydWN0IGt2bV9tZW1vcnlfc2xv dCAqc2xvdCwgdTY0IGdmbikKK3sKKwlzdHJ1Y3Qga3ZtX3JtYXBfaGVhZCAqcm1hcF9oZWFkOwor CWludCBpOworCWJvb2wgcmVhZF9wcm90ZWN0ZWQgPSBmYWxzZTsKKworCWZvciAoaSA9IFBUX1BB R0VfVEFCTEVfTEVWRUw7IGkgPD0gUFRfTUFYX0hVR0VQQUdFX0xFVkVMOyArK2kpIHsKKwkJcm1h cF9oZWFkID0gX19nZm5fdG9fcm1hcChnZm4sIGksIHNsb3QpOworCQlyZWFkX3Byb3RlY3RlZCB8 PSBfX3JtYXBfcmVhZF9wcm90ZWN0KGt2bSwgcm1hcF9oZWFkKTsKKwl9CisKKwlyZXR1cm4gcmVh ZF9wcm90ZWN0ZWQ7Cit9CisKK2Jvb2wga3ZtX21tdV9zbG90X2dmbl9leGVjX3Byb3RlY3Qoc3Ry dWN0IGt2bSAqa3ZtLAorCQkJCSAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIHU2NCBn Zm4pCit7CisJc3RydWN0IGt2bV9ybWFwX2hlYWQgKnJtYXBfaGVhZDsKKwlpbnQgaTsKKwlib29s IGV4ZWNfcHJvdGVjdGVkID0gZmFsc2U7CisKKwlmb3IgKGkgPSBQVF9QQUdFX1RBQkxFX0xFVkVM OyBpIDw9IFBUX01BWF9IVUdFUEFHRV9MRVZFTDsgKytpKSB7CisJCXJtYXBfaGVhZCA9IF9fZ2Zu X3RvX3JtYXAoZ2ZuLCBpLCBzbG90KTsKKwkJZXhlY19wcm90ZWN0ZWQgfD0gX19ybWFwX2V4ZWNf cHJvdGVjdChrdm0sIHJtYXBfaGVhZCk7CisJfQorCisJcmV0dXJuIGV4ZWNfcHJvdGVjdGVkOwor fQorCiBzdGF0aWMgYm9vbCBybWFwX3dyaXRlX3Byb3RlY3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1 LCB1NjQgZ2ZuKQogewogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CmRpZmYgLS1naXQg YS9hcmNoL3g4Ni9rdm0vbW11LmggYi9hcmNoL3g4Ni9rdm0vbW11LmgKaW5kZXggYzdiMzMzMTQ3 YzRhLi40NTk0OGRhYmUwYjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUuaAorKysgYi9h cmNoL3g4Ni9rdm0vbW11LmgKQEAgLTIxMCw1ICsyMTAsOSBAQCB2b2lkIGt2bV9tbXVfZ2ZuX2Rp c2FsbG93X2xwYWdlKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IGdmbik7CiB2 b2lkIGt2bV9tbXVfZ2ZuX2FsbG93X2xwYWdlKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Qs IGdmbl90IGdmbik7CiBib29sIGt2bV9tbXVfc2xvdF9nZm5fd3JpdGVfcHJvdGVjdChzdHJ1Y3Qg a3ZtICprdm0sCiAJCQkJICAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIHU2NCBnZm4p OworYm9vbCBrdm1fbW11X3Nsb3RfZ2ZuX3JlYWRfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sCisJ CQkJICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgdTY0IGdmbik7Citib29sIGt2bV9t bXVfc2xvdF9nZm5fZXhlY19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSwKKwkJCQkgICBzdHJ1Y3Qg a3ZtX21lbW9yeV9zbG90ICpzbG90LCB1NjQgZ2ZuKTsKIGludCBrdm1fYXJjaF93cml0ZV9sb2df ZGlydHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94 ODYva3ZtL3BhZ2VfdHJhY2suYyBiL2FyY2gveDg2L2t2bS9wYWdlX3RyYWNrLmMKaW5kZXggZmY3 ZGVmYjRhMWQyLi5mYzc5MjkzOWEwNWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9wYWdlX3Ry YWNrLmMKKysrIGIvYXJjaC94ODYva3ZtL3BhZ2VfdHJhY2suYwpAQCAtMSw1ICsxLDUgQEAKIC8q Ci0gKiBTdXBwb3J0IEtWTSBndXN0IHBhZ2UgdHJhY2tpbmcKKyAqIFN1cHBvcnQgS1ZNIGd1ZXN0 IHBhZ2UgdHJhY2tpbmcKICAqCiAgKiBUaGlzIGZlYXR1cmUgYWxsb3dzIHVzIHRvIHRyYWNrIHBh Z2UgYWNjZXNzIGluIGd1ZXN0LiBDdXJyZW50bHksIG9ubHkKICAqIHdyaXRlIGFjY2VzcyBpcyB0 cmFja2VkLgpAQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9nZm5fdHJhY2so c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3QgZ2ZuLAogICogQGt2bTogdGhlIGd1 ZXN0IGluc3RhbmNlIHdlIGFyZSBpbnRlcmVzdGVkIGluLgogICogQHNsb3Q6IHRoZSBAZ2ZuIGJl bG9uZ3MgdG8uCiAgKiBAZ2ZuOiB0aGUgZ3Vlc3QgcGFnZS4KLSAqIEBtb2RlOiB0cmFja2luZyBt b2RlLCBjdXJyZW50bHkgb25seSB3cml0ZSB0cmFjayBpcyBzdXBwb3J0ZWQuCisgKiBAbW9kZTog dHJhY2tpbmcgbW9kZS4KICAqLwogdm9pZCBrdm1fc2xvdF9wYWdlX3RyYWNrX2FkZF9wYWdlKHN0 cnVjdCBrdm0gKmt2bSwKIAkJCQkgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90 IGdmbiwKQEAgLTExOSw5ICsxMTksMTYgQEAgdm9pZCBrdm1fc2xvdF9wYWdlX3RyYWNrX2FkZF9w YWdlKHN0cnVjdCBrdm0gKmt2bSwKIAkgKi8KIAlrdm1fbW11X2dmbl9kaXNhbGxvd19scGFnZShz bG90LCBnZm4pOwogCi0JaWYgKG1vZGUgPT0gS1ZNX1BBR0VfVFJBQ0tfV1JJVEUpCisJaWYgKG1v ZGUgPT0gS1ZNX1BBR0VfVFJBQ0tfUFJFV1JJVEUgfHwgbW9kZSA9PSBLVk1fUEFHRV9UUkFDS19X UklURSkgewogCQlpZiAoa3ZtX21tdV9zbG90X2dmbl93cml0ZV9wcm90ZWN0KGt2bSwgc2xvdCwg Z2ZuKSkKIAkJCWt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pOworCX0gZWxzZSBpZiAobW9kZSA9 PSBLVk1fUEFHRV9UUkFDS19QUkVSRUFEKSB7CisJCWlmIChrdm1fbW11X3Nsb3RfZ2ZuX3JlYWRf cHJvdGVjdChrdm0sIHNsb3QsIGdmbikpCisJCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsK Kwl9IGVsc2UgaWYgKG1vZGUgPT0gS1ZNX1BBR0VfVFJBQ0tfUFJFRVhFQykgeworCQlpZiAoa3Zt X21tdV9zbG90X2dmbl9leGVjX3Byb3RlY3Qoa3ZtLCBzbG90LCBnZm4pKQorCQkJa3ZtX2ZsdXNo X3JlbW90ZV90bGJzKGt2bSk7CisJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3Nsb3RfcGFn ZV90cmFja19hZGRfcGFnZSk7CiAKQEAgLTEzNiw3ICsxNDMsNyBAQCBFWFBPUlRfU1lNQk9MX0dQ TChrdm1fc2xvdF9wYWdlX3RyYWNrX2FkZF9wYWdlKTsKICAqIEBrdm06IHRoZSBndWVzdCBpbnN0 YW5jZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbi4KICAqIEBzbG90OiB0aGUgQGdmbiBiZWxvbmdzIHRv LgogICogQGdmbjogdGhlIGd1ZXN0IHBhZ2UuCi0gKiBAbW9kZTogdHJhY2tpbmcgbW9kZSwgY3Vy cmVudGx5IG9ubHkgd3JpdGUgdHJhY2sgaXMgc3VwcG9ydGVkLgorICogQG1vZGU6IHRyYWNraW5n IG1vZGUuCiAgKi8KIHZvaWQga3ZtX3Nsb3RfcGFnZV90cmFja19yZW1vdmVfcGFnZShzdHJ1Y3Qg a3ZtICprdm0sCiAJCQkJICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBn Zm4sCkBAIC0yMjksMTIgKzIzNiw4MSBAQCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlm aWVyKHN0cnVjdCBrdm0gKmt2bSwKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9wYWdlX3RyYWNr X3VucmVnaXN0ZXJfbm90aWZpZXIpOwogCisvKgorICogTm90aWZ5IHRoZSBub2RlIHRoYXQgYSBy ZWFkIGFjY2VzcyBpcyBhYm91dCB0byBoYXBwZW4uIFJldHVybmluZyBmYWxzZQorICogZG9lc24n dCBzdG9wIHRoZSBvdGhlciBub2RlcyBmcm9tIGJlaW5nIGNhbGxlZCwgYnV0IGl0IHdpbGwgc3Rv cAorICogdGhlIGVtdWxhdGlvbi4KKyAqCisgKiBUaGUgbm9kZSBzaG91bGQgZmlndXJlIG91dCBp ZiB0aGUgd3JpdHRlbiBwYWdlIGlzIHRoZSBvbmUgdGhhdCB0aGUgbm9kZQorICogaXMgaW50ZXJl c3RlZCBpbiBieSBpdHNlbGYuCisgKgorICogVGhlIG5vZGVzIHdpbGwgYWx3YXlzIGJlIGluIGNv bmZsaWN0IGlmIHRoZXkgdHJhY2sgdGhlIHNhbWUgcGFnZToKKyAqIC0gYWNjZXB0aW5nIGEgcmVh ZCB3b24ndCBndWFyYW50ZWUgdGhhdCB0aGUgbmV4dCBub2RlIHdpbGwgbm90IG92ZXJyaWRlCisg KiAgIHRoZSBkYXRhIChmaWxsaW5nIG5ldy9ieXRlcyBhbmQgc2V0dGluZyBkYXRhX3JlYWR5KQor ICogLSBmaWxsaW5nIG5ldy9ieXRlcyB3aXRoIGN1c3RvbSBkYXRhIHdvbid0IGd1YXJhbnRlZSB0 aGF0IHRoZSBuZXh0IG5vZGUKKyAqICAgd2lsbCBub3Qgb3ZlcnJpZGUgdGhhdAorICovCitib29s IGt2bV9wYWdlX3RyYWNrX3ByZXJlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEs IGd2YV90IGd2YSwKKwkJCSAgICB1OCAqbmV3LCBpbnQgYnl0ZXMsIGJvb2wgKmRhdGFfcmVhZHkp Cit7CisJc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7CisJc3RydWN0 IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm47CisJaW50IGlkeDsKKwlib29sIHJldCA9 IHRydWU7CisKKwkqZGF0YV9yZWFkeSA9IGZhbHNlOworCisJaGVhZCA9ICZ2Y3B1LT5rdm0tPmFy Y2gudHJhY2tfbm90aWZpZXJfaGVhZDsKKworCWlmIChobGlzdF9lbXB0eSgmaGVhZC0+dHJhY2tf bm90aWZpZXJfbGlzdCkpCisJCXJldHVybiByZXQ7CisKKwlpZHggPSBzcmN1X3JlYWRfbG9jaygm aGVhZC0+dHJhY2tfc3JjdSk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG4sICZoZWFkLT50 cmFja19ub3RpZmllcl9saXN0LCBub2RlKQorCQlpZiAobi0+dHJhY2tfcHJlcmVhZCkKKwkJCWlm ICghbi0+dHJhY2tfcHJlcmVhZCh2Y3B1LCBncGEsIGd2YSwgbmV3LCBieXRlcywgbiwKKwkJCQkJ ICAgICAgIGRhdGFfcmVhZHkpKQorCQkJCXJldCA9IGZhbHNlOworCXNyY3VfcmVhZF91bmxvY2so JmhlYWQtPnRyYWNrX3NyY3UsIGlkeCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIE5vdGlm eSB0aGUgbm9kZSB0aGF0IGEgd3JpdGUgYWNjZXNzIGlzIGFib3V0IHRvIGhhcHBlbi4gUmV0dXJu aW5nIGZhbHNlCisgKiBkb2Vzbid0IHN0b3AgdGhlIG90aGVyIG5vZGVzIGZyb20gYmVpbmcgY2Fs bGVkLCBidXQgaXQgd2lsbCBzdG9wCisgKiB0aGUgZW11bGF0aW9uLgorICoKKyAqIFRoZSBub2Rl IHNob3VsZCBmaWd1cmUgb3V0IGlmIHRoZSB3cml0dGVuIHBhZ2UgaXMgdGhlIG9uZSB0aGF0IHRo ZSBub2RlCisgKiBpcyBpbnRlcmVzdGVkIGluIGJ5IGl0c2VsZi4KKyAqLworYm9vbCBrdm1fcGFn ZV90cmFja19wcmV3cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgZ3ZhX3Qg Z3ZhLAorCQkJICAgICBjb25zdCB1OCAqbmV3LCBpbnQgYnl0ZXMpCit7CisJc3RydWN0IGt2bV9w YWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7CisJc3RydWN0IGt2bV9wYWdlX3RyYWNrX25v dGlmaWVyX25vZGUgKm47CisJaW50IGlkeDsKKwlib29sIHJldCA9IHRydWU7CisKKwloZWFkID0g JnZjcHUtPmt2bS0+YXJjaC50cmFja19ub3RpZmllcl9oZWFkOworCisJaWYgKGhsaXN0X2VtcHR5 KCZoZWFkLT50cmFja19ub3RpZmllcl9saXN0KSkKKwkJcmV0dXJuIHJldDsKKworCWlkeCA9IHNy Y3VfcmVhZF9sb2NrKCZoZWFkLT50cmFja19zcmN1KTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9y Y3UobiwgJmhlYWQtPnRyYWNrX25vdGlmaWVyX2xpc3QsIG5vZGUpCisJCWlmIChuLT50cmFja19w cmV3cml0ZSkKKwkJCWlmICghbi0+dHJhY2tfcHJld3JpdGUodmNwdSwgZ3BhLCBndmEsIG5ldywg Ynl0ZXMsIG4pKQorCQkJCXJldCA9IGZhbHNlOworCXNyY3VfcmVhZF91bmxvY2soJmhlYWQtPnRy YWNrX3NyY3UsIGlkeCk7CisJcmV0dXJuIHJldDsKK30KKwogLyoKICAqIE5vdGlmeSB0aGUgbm9k ZSB0aGF0IHdyaXRlIGFjY2VzcyBpcyBpbnRlcmNlcHRlZCBhbmQgd3JpdGUgZW11bGF0aW9uIGlz CiAgKiBmaW5pc2hlZCBhdCB0aGlzIHRpbWUuCiAgKgotICogVGhlIG5vZGUgc2hvdWxkIGZpZ3Vy ZSBvdXQgaWYgdGhlIHdyaXR0ZW4gcGFnZSBpcyB0aGUgb25lIHRoYXQgbm9kZSBpcwotICogaW50 ZXJlc3RlZCBpbiBieSBpdHNlbGYuCisgKiBUaGUgbm9kZSBzaG91bGQgZmlndXJlIG91dCBpZiB0 aGUgd3JpdHRlbiBwYWdlIGlzIHRoZSBvbmUgdGhhdCB0aGUgbm9kZQorICogaXMgaW50ZXJlc3Rl ZCBpbiBieSBpdHNlbGYuCiAgKi8KIHZvaWQga3ZtX3BhZ2VfdHJhY2tfd3JpdGUoc3RydWN0IGt2 bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIGd2YV90IGd2YSwKIAkJCSAgY29uc3QgdTggKm5ldywg aW50IGJ5dGVzKQpAQCAtMjU1LDEyICszMzEsNDEgQEAgdm9pZCBrdm1fcGFnZV90cmFja193cml0 ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgZ3ZhX3QgZ3ZhLAogCXNyY3VfcmVh ZF91bmxvY2soJmhlYWQtPnRyYWNrX3NyY3UsIGlkeCk7CiB9CiAKKy8qCisgKiBOb3RpZnkgdGhl IG5vZGUgdGhhdCBhbiBpbnN0cnVjdGlvbiBpcyBhYm91dCB0byBiZSBleGVjdXRlZC4KKyAqIFJl dHVybmluZyBmYWxzZSBkb2Vzbid0IHN0b3AgdGhlIG90aGVyIG5vZGVzIGZyb20gYmVpbmcgY2Fs bGVkLAorICogYnV0IGl0IHdpbGwgc3RvcCB0aGUgZW11bGF0aW9uIHdpdGggWDg2RU1VTF9SRVRS WV9JTlNUUi4KKyAqCisgKiBUaGUgbm9kZSBzaG91bGQgZmlndXJlIG91dCBpZiB0aGUgd3JpdHRl biBwYWdlIGlzIHRoZSBvbmUgdGhhdCB0aGUgbm9kZQorICogaXMgaW50ZXJlc3RlZCBpbiBieSBp dHNlbGYuCisgKi8KK2Jvb2wga3ZtX3BhZ2VfdHJhY2tfcHJlZXhlYyhzdHJ1Y3Qga3ZtX3ZjcHUg KnZjcHUsIGdwYV90IGdwYSwgZ3ZhX3QgZ3ZhKQoreworCXN0cnVjdCBrdm1fcGFnZV90cmFja19u b3RpZmllcl9oZWFkICpoZWFkOworCXN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2Rl ICpuOworCWludCBpZHg7CisJYm9vbCByZXQgPSB0cnVlOworCisJaGVhZCA9ICZ2Y3B1LT5rdm0t PmFyY2gudHJhY2tfbm90aWZpZXJfaGVhZDsKKworCWlmIChobGlzdF9lbXB0eSgmaGVhZC0+dHJh Y2tfbm90aWZpZXJfbGlzdCkpCisJCXJldHVybiByZXQ7CisKKwlpZHggPSBzcmN1X3JlYWRfbG9j aygmaGVhZC0+dHJhY2tfc3JjdSk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG4sICZoZWFk LT50cmFja19ub3RpZmllcl9saXN0LCBub2RlKQorCQlpZiAobi0+dHJhY2tfcHJlZXhlYykKKwkJ CWlmICghbi0+dHJhY2tfcHJlZXhlYyh2Y3B1LCBncGEsIGd2YSwgbikpCisJCQkJcmV0ID0gZmFs c2U7CisJc3JjdV9yZWFkX3VubG9jaygmaGVhZC0+dHJhY2tfc3JjdSwgaWR4KTsKKwlyZXR1cm4g cmV0OworfQorCiAvKgogICogTm90aWZ5IHRoZSBub2RlIHRoYXQgbWVtb3J5IHNsb3QgaXMgYmVp bmcgcmVtb3ZlZCBvciBtb3ZlZCBzbyB0aGF0IGl0IGNhbgotICogZHJvcCB3cml0ZS1wcm90ZWN0 aW9uIGZvciB0aGUgcGFnZXMgaW4gdGhlIG1lbW9yeSBzbG90LgorICogZHJvcCBhY3RpdmUgcHJv dGVjdGlvbiBmb3IgdGhlIHBhZ2VzIGluIHRoZSBtZW1vcnkgc2xvdC4KICAqCi0gKiBUaGUgbm9k ZSBzaG91bGQgZmlndXJlIG91dCBpdCBoYXMgYW55IHdyaXRlLXByb3RlY3RlZCBwYWdlcyBpbiB0 aGlzIHNsb3QKLSAqIGJ5IGl0c2VsZi4KKyAqIFRoZSBub2RlIHNob3VsZCBmaWd1cmUgb3V0IGlm IHRoZSB3cml0dGVuIHBhZ2UgaXMgdGhlIG9uZSB0aGF0IHRoZSBub2RlCisgKiBpcyBpbnRlcmVz dGVkIGluIGJ5IGl0c2VsZi4KICAqLwogdm9pZCBrdm1fcGFnZV90cmFja19mbHVzaF9zbG90KHN0 cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCkKIHsKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVmlydHVhbGl6YXRpb24gbWFp bGluZyBsaXN0ClZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBz Oi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3ZpcnR1YWxpemF0 aW9u