From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Gunthorpe Subject: [PATCH v3 02/14] mm/mmu_notifier: add an interval tree notifier Date: Tue, 12 Nov 2019 16:22:19 -0400 Message-ID: <20191112202231.3856-3-jgg@ziepe.ca> References: <20191112202231.3856-1-jgg@ziepe.ca> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20191112202231.3856-1-jgg@ziepe.ca> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: linux-mm@kvack.org, Jerome Glisse , Ralph Campbell , John Hubbard , Felix.Kuehling@amd.com Cc: Juergen Gross , David Zhou , Mike Marciniszyn , Stefano Stabellini , Philip Yang , Oleksandr Andrushchenko , linux-rdma@vger.kernel.org, nouveau@lists.freedesktop.org, Dennis Dalessandro , amd-gfx@lists.freedesktop.org, Christoph Hellwig , Jason Gunthorpe , dri-devel@lists.freedesktop.org, Alex Deucher , xen-devel@lists.xenproject.org, Boris Ostrovsky , Petr Cvek , =?UTF-8?q?Christian=20K=C3=B6nig?= , Ben Skeggs List-Id: amd-gfx.lists.freedesktop.org RnJvbTogSmFzb24gR3VudGhvcnBlIDxqZ2dAbWVsbGFub3guY29tPgoKT2YgdGhlIDEzIHVzZXJz IG9mIG1tdV9ub3RpZmllcnMsIDggb2YgdGhlbSB1c2Ugb25seQppbnZhbGlkYXRlX3JhbmdlX3N0 YXJ0L2VuZCgpIGFuZCBpbW1lZGlhdGVseSBpbnRlcnNlY3QgdGhlCm1tdV9ub3RpZmllcl9yYW5n ZSB3aXRoIHNvbWUga2luZCBvZiBpbnRlcm5hbCBsaXN0IG9mIFZBcy4gIDQgdXNlIGFuCmludGVy dmFsIHRyZWUgKGk5MTVfZ2VtLCByYWRlb25fbW4sIHVtZW1fb2RwLCBoZmkxKS4gNCB1c2UgYSBs aW5rZWQgbGlzdApvZiBzb21lIGtpbmQgKHNjaWZfZG1hLCB2aG9zdCwgZ250ZGV2LCBobW0pCgpB bmQgdGhlIHJlbWFpbmluZyA1IGVpdGhlciBkb24ndCB1c2UgaW52YWxpZGF0ZV9yYW5nZV9zdGFy dCgpIG9yIGRvIHNvbWUKc3BlY2lhbCB0aGluZyB3aXRoIGl0LgoKSXQgdHVybnMgb3V0IHRoYXQg YnVpbGRpbmcgYSBjb3JyZWN0IHNjaGVtZSB3aXRoIGFuIGludGVydmFsIHRyZWUgaXMKcHJldHR5 IGNvbXBsaWNhdGVkLCBwYXJ0aWN1bGFybHkgaWYgdGhlIHVzZSBjYXNlIGlzIHN5bmNocm9uaXpp bmcgYWdhaW5zdAphbm90aGVyIHRocmVhZCBkb2luZyBnZXRfdXNlcl9wYWdlcygpLiAgTWFueSBv ZiB0aGVzZSBpbXBsZW1lbnRhdGlvbnMgaGF2ZQp2YXJpb3VzIHN1YnRsZSBhbmQgZGlmZmljdWx0 IHRvIGZpeCByYWNlcy4KClRoaXMgYXBwcm9hY2ggcHV0cyB0aGUgaW50ZXJ2YWwgdHJlZSBhcyBj b21tb24gY29kZSBhdCB0aGUgdG9wIG9mIHRoZSBtbXUKbm90aWZpZXIgY2FsbCB0cmVlIGFuZCBp bXBsZW1lbnRzIGEgc2hhcmVhYmxlIGxvY2tpbmcgc2NoZW1lLgoKSXQgaW5jbHVkZXM6CiAtIEFu IGludGVydmFsIHRyZWUgdHJhY2tpbmcgVkEgcmFuZ2VzLCB3aXRoIHBlci1yYW5nZSBjYWxsYmFj a3MKIC0gQSByZWFkL3dyaXRlIGxvY2tpbmcgc2NoZW1lIGZvciB0aGUgaW50ZXJ2YWwgdHJlZSB0 aGF0IGF2b2lkcwogICBzbGVlcGluZyBpbiB0aGUgbm90aWZpZXIgcGF0aCAoZm9yIE9PTSBraWxs ZXIpCiAtIEEgc2VxdWVuY2UgY291bnRlciBiYXNlZCBjb2xsaXNpb24tcmV0cnkgbG9ja2luZyBz Y2hlbWUgdG8gdGVsbAogICBkZXZpY2UgcGFnZSBmYXVsdCB0aGF0IGEgVkEgcmFuZ2UgaXMgYmVp bmcgY29uY3VycmVudGx5IGludmFsaWRhdGVkLgoKVGhpcyBpcyBiYXNlZCBvbiB2YXJpb3VzIGlk ZWFzOgotIGhtbSBhY2N1bXVsYXRlcyBpbnZhbGlkYXRlZCBWQSByYW5nZXMgYW5kIHJlbGVhc2Vz IHRoZW0gd2hlbiBhbGwKICBpbnZhbGlkYXRlcyBhcmUgZG9uZSwgdmlhIGFjdGl2ZV9pbnZhbGlk YXRlX3JhbmdlcyBjb3VudC4KICBUaGlzIGFwcHJvYWNoIGF2b2lkcyBoYXZpbmcgdG8gaW50ZXJz ZWN0IHRoZSBpbnRlcnZhbCB0cmVlIHR3aWNlIChhcwogIHVtZW1fb2RwIGRvZXMpIGF0IHRoZSBw b3RlbnRpYWwgY29zdCBvZiBhIGxvbmdlciBkZXZpY2UgcGFnZSBmYXVsdC4KCi0ga3ZtL3VtZW1f b2RwIHVzZSBhIHNlcXVlbmNlIGNvdW50ZXIgdG8gZHJpdmUgdGhlIGNvbGxpc2lvbiByZXRyeSwK ICB2aWEgaW52YWxpZGF0ZV9zZXEKCi0gYSBkZWZlcnJlZCB3b3JrIHRvZG8gbGlzdCBvbiB1bmxv Y2sgc2NoZW1lIGxpa2UgUlROTCwgdmlhIGRlZmVycmVkX2xpc3QuCiAgVGhpcyBtYWtlcyBhZGRp bmcvcmVtb3ZpbmcgaW50ZXJ2YWwgdHJlZSBtZW1iZXJzIG1vcmUgZGV0ZXJtaW5pc3RpYwoKLSBz ZXFsb2NrLCBleGNlcHQgdGhpcyB2ZXJzaW9uIG1ha2VzIHRoZSBzZXFsb2NrIGlkZWEgbXVsdGkt aG9sZGVyIG9uIHRoZQogIHdyaXRlIHNpZGUgYnkgcHJvdGVjdGluZyBpdCB3aXRoIGFjdGl2ZV9p bnZhbGlkYXRlX3JhbmdlcyBhbmQgYSBzcGlubG9jawoKVG8gbWluaW1pemUgTU0gb3ZlcmhlYWQg d2hlbiBvbmx5IHRoZSBpbnRlcnZhbCB0cmVlIGlzIGJlaW5nIHVzZWQsIHRoZQplbnRpcmUgU1JD VSBhbmQgaGxpc3Qgb3ZlcmhlYWRzIGFyZSBkcm9wcGVkIHVzaW5nIHNvbWUgc2ltcGxlCmJyYW5j aGVzLiBTaW1pbGFybHkgdGhlIGludGVydmFsIHRyZWUgb3ZlcmhlYWQgaXMgZHJvcHBlZCB3aGVu IGluIGhsaXN0Cm1vZGUuCgpUaGUgb3ZlcmhlYWQgZnJvbSB0aGUgbWFuZGF0b3J5IHNwaW5sb2Nr IGlzIGJyb2FkbHkgdGhlIHNhbWUgYXMgbW9zdCBvZgpleGlzdGluZyB1c2VycyB3aGljaCBhbHJl YWR5IGhhZCBhIGxvY2sgKG9yIHR3bykgb2Ygc29tZSBzb3J0IG9uIHRoZQppbnZhbGlkYXRpb24g cGF0aC4KCkFja2VkLWJ5OiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5j b20+ClRlc3RlZC1ieTogUGhpbGlwIFlhbmcgPFBoaWxpcC5ZYW5nQGFtZC5jb20+ClRlc3RlZC1i eTogUmFscGggQ2FtcGJlbGwgPHJjYW1wYmVsbEBudmlkaWEuY29tPgpSZXZpZXdlZC1ieTogSm9o biBIdWJiYXJkIDxqaHViYmFyZEBudmlkaWEuY29tPgpTaWduZWQtb2ZmLWJ5OiBKYXNvbiBHdW50 aG9ycGUgPGpnZ0BtZWxsYW5veC5jb20+Ci0tLQogaW5jbHVkZS9saW51eC9tbXVfbm90aWZpZXIu aCB8IDEwMSArKysrKysrCiBtbS9LY29uZmlnICAgICAgICAgICAgICAgICAgIHwgICAxICsKIG1t L21tdV9ub3RpZmllci5jICAgICAgICAgICAgfCA1NTIgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrLS0KIDMgZmlsZXMgY2hhbmdlZCwgNjI4IGluc2VydGlvbnMoKyksIDI2IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW11X25vdGlmaWVyLmggYi9pbmNs dWRlL2xpbnV4L21tdV9ub3RpZmllci5oCmluZGV4IDEyYmQ2MDNkMzE4Y2U3Li45ZTZjYWE4ZWNk MTkzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXVfbm90aWZpZXIuaAorKysgYi9pbmNs dWRlL2xpbnV4L21tdV9ub3RpZmllci5oCkBAIC02LDEwICs2LDEyIEBACiAjaW5jbHVkZSA8bGlu dXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tbV90eXBlcy5oPgogI2luY2x1ZGUgPGxp bnV4L3NyY3UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnZhbF90cmVlLmg+CiAKIHN0cnVjdCBt bXVfbm90aWZpZXJfbW07CiBzdHJ1Y3QgbW11X25vdGlmaWVyOwogc3RydWN0IG1tdV9ub3RpZmll cl9yYW5nZTsKK3N0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXI7CiAKIC8qKgogICogZW51bSBt bXVfbm90aWZpZXJfZXZlbnQgLSByZWFzb24gZm9yIHRoZSBtbXUgbm90aWZpZXIgY2FsbGJhY2sK QEAgLTMyLDYgKzM0LDkgQEAgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZTsKICAqIGFjY2VzcyBm bGFncykuIFVzZXIgc2hvdWxkIHNvZnQgZGlydHkgdGhlIHBhZ2UgaW4gdGhlIGVuZCBjYWxsYmFj ayB0byBtYWtlCiAgKiBzdXJlIHRoYXQgYW55b25lIHJlbHlpbmcgb24gc29mdCBkaXJ0eW5lc3Mg Y2F0Y2ggcGFnZXMgdGhhdCBtaWdodCBiZSB3cml0dGVuCiAgKiB0aHJvdWdoIG5vbiBDUFUgbWFw cGluZ3MuCisgKgorICogQE1NVV9OT1RJRllfUkVMRUFTRTogdXNlZCBkdXJpbmcgbW11X2ludGVy dmFsX25vdGlmaWVyIGludmFsaWRhdGUgdG8gc2lnbmFsCisgKiB0aGF0IHRoZSBtbSByZWZjb3Vu dCBpcyB6ZXJvIGFuZCB0aGUgcmFuZ2UgaXMgbm8gbG9uZ2VyIGFjY2Vzc2libGUuCiAgKi8KIGVu dW0gbW11X25vdGlmaWVyX2V2ZW50IHsKIAlNTVVfTk9USUZZX1VOTUFQID0gMCwKQEAgLTM5LDYg KzQ0LDcgQEAgZW51bSBtbXVfbm90aWZpZXJfZXZlbnQgewogCU1NVV9OT1RJRllfUFJPVEVDVElP Tl9WTUEsCiAJTU1VX05PVElGWV9QUk9URUNUSU9OX1BBR0UsCiAJTU1VX05PVElGWV9TT0ZUX0RJ UlRZLAorCU1NVV9OT1RJRllfUkVMRUFTRSwKIH07CiAKICNkZWZpbmUgTU1VX05PVElGSUVSX1JB TkdFX0JMT0NLQUJMRSAoMSA8PCAwKQpAQCAtMjIyLDYgKzIyOCwyNiBAQCBzdHJ1Y3QgbW11X25v dGlmaWVyIHsKIAl1bnNpZ25lZCBpbnQgdXNlcnM7CiB9OwogCisvKioKKyAqIHN0cnVjdCBtbXVf aW50ZXJ2YWxfbm90aWZpZXJfb3BzCisgKiBAaW52YWxpZGF0ZTogVXBvbiByZXR1cm4gdGhlIGNh bGxlciBtdXN0IHN0b3AgdXNpbmcgYW55IFNQVEVzIHdpdGhpbiB0aGlzCisgKiAgICAgICAgICAg ICAgcmFuZ2UuIFRoaXMgZnVuY3Rpb24gY2FuIHNsZWVwLiBSZXR1cm4gZmFsc2Ugb25seSBpZiBz bGVlcGluZworICogICAgICAgICAgICAgIHdhcyByZXF1aXJlZCBidXQgbW11X25vdGlmaWVyX3Jh bmdlX2Jsb2NrYWJsZShyYW5nZSkgaXMgZmFsc2UuCisgKi8KK3N0cnVjdCBtbXVfaW50ZXJ2YWxf bm90aWZpZXJfb3BzIHsKKwlib29sICgqaW52YWxpZGF0ZSkoc3RydWN0IG1tdV9pbnRlcnZhbF9u b3RpZmllciAqbW5pLAorCQkJICAgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFu Z2UsCisJCQkgICB1bnNpZ25lZCBsb25nIGN1cl9zZXEpOworfTsKKworc3RydWN0IG1tdV9pbnRl cnZhbF9ub3RpZmllciB7CisJc3RydWN0IGludGVydmFsX3RyZWVfbm9kZSBpbnRlcnZhbF90cmVl OworCWNvbnN0IHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfb3BzICpvcHM7CisJc3RydWN0 IG1tX3N0cnVjdCAqbW07CisJc3RydWN0IGhsaXN0X25vZGUgZGVmZXJyZWRfaXRlbTsKKwl1bnNp Z25lZCBsb25nIGludmFsaWRhdGVfc2VxOworfTsKKwogI2lmZGVmIENPTkZJR19NTVVfTk9USUZJ RVIKIAogI2lmZGVmIENPTkZJR19MT0NLREVQCkBAIC0yNjMsNiArMjg5LDgxIEBAIGV4dGVybiBp bnQgX19tbXVfbm90aWZpZXJfcmVnaXN0ZXIoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sCiAJCQkJ ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogZXh0ZXJuIHZvaWQgbW11X25vdGlmaWVyX3VucmVn aXN0ZXIoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sCiAJCQkJICAgIHN0cnVjdCBtbV9zdHJ1Y3Qg Km1tKTsKKwordW5zaWduZWQgbG9uZyBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihzdHJ1Y3QgbW11 X2ludGVydmFsX25vdGlmaWVyICptbmkpOworaW50IG1tdV9pbnRlcnZhbF9ub3RpZmllcl9pbnNl cnQoc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbW5pLAorCQkJCSBzdHJ1Y3QgbW1fc3Ry dWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkgdW5zaWduZWQgbG9uZyBsZW5ndGgs CisJCQkJIGNvbnN0IHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfb3BzICpvcHMpOworaW50 IG1tdV9pbnRlcnZhbF9ub3RpZmllcl9pbnNlcnRfbG9ja2VkKAorCXN0cnVjdCBtbXVfaW50ZXJ2 YWxfbm90aWZpZXIgKm1uaSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJdW5zaWduZWQgbG9uZyBz dGFydCwgdW5zaWduZWQgbG9uZyBsZW5ndGgsCisJY29uc3Qgc3RydWN0IG1tdV9pbnRlcnZhbF9u b3RpZmllcl9vcHMgKm9wcyk7Cit2b2lkIG1tdV9pbnRlcnZhbF9ub3RpZmllcl9yZW1vdmUoc3Ry dWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbW5pKTsKKworLyoqCisgKiBtbXVfaW50ZXJ2YWxf c2V0X3NlcSAtIFNhdmUgdGhlIGludmFsaWRhdGlvbiBzZXF1ZW5jZQorICogQG1uaSAtIFRoZSBt bmkgcGFzc2VkIHRvIGludmFsaWRhdGUKKyAqIEBjdXJfc2VxIC0gVGhlIGN1cl9zZXEgcGFzc2Vk IHRvIHRoZSBpbnZhbGlkYXRlKCkgY2FsbGJhY2sKKyAqCisgKiBUaGlzIG11c3QgYmUgY2FsbGVk IHVuY29uZGl0aW9uYWxseSBmcm9tIHRoZSBpbnZhbGlkYXRlIGNhbGxiYWNrIG9mIGEKKyAqIHN0 cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfb3BzIHVuZGVyIHRoZSBzYW1lIGxvY2sgdGhhdCBp cyB1c2VkIHRvIGNhbGwKKyAqIG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCkuIEl0IHVwZGF0ZXMg dGhlIHNlcXVlbmNlIG51bWJlciBmb3IgbGF0ZXIgdXNlIGJ5CisgKiBtbXVfaW50ZXJ2YWxfcmVh ZF9yZXRyeSgpLiBUaGUgcHJvdmlkZWQgY3VyX3NlcSB3aWxsIGFsd2F5cyBiZSBvZGQuCisgKgor ICogSWYgdGhlIGNhbGxlciBkb2VzIG5vdCBjYWxsIG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKCkg b3IKKyAqIG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCkgdGhlbiB0aGlzIGNhbGwgaXMgbm90IHJl cXVpcmVkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbW11X2ludGVydmFsX3NldF9zZXEoc3Ry dWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbW5pLAorCQkJCQl1bnNpZ25lZCBsb25nIGN1cl9z ZXEpCit7CisJV1JJVEVfT05DRShtbmktPmludmFsaWRhdGVfc2VxLCBjdXJfc2VxKTsKK30KKwor LyoqCisgKiBtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeSAtIEVuZCBhIHJlYWQgc2lkZSBjcml0aWNh bCBzZWN0aW9uIGFnYWluc3QgYSBWQSByYW5nZQorICogbW5pOiBUaGUgcmFuZ2UKKyAqIHNlcTog VGhlIHJldHVybiBvZiB0aGUgcGFpcmVkIG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKCkKKyAqCisg KiBUaGlzIE1VU1QgYmUgY2FsbGVkIHVuZGVyIGEgdXNlciBwcm92aWRlZCBsb2NrIHRoYXQgaXMg YWxzbyBoZWxkCisgKiB1bmNvbmRpdGlvbmFsbHkgYnkgb3AtPmludmFsaWRhdGUoKSB3aGVuIGl0 IGNhbGxzIG1tdV9pbnRlcnZhbF9zZXRfc2VxKCkuCisgKgorICogRWFjaCBjYWxsIHNob3VsZCBi ZSBwYWlyZWQgd2l0aCBhIHNpbmdsZSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbigpIGFuZAorICog c2hvdWxkIGJlIHVzZWQgdG8gY29uY2x1ZGUgdGhlIHJlYWQgc2lkZS4KKyAqCisgKiBSZXR1cm5z IHRydWUgaWYgYW4gaW52YWxpZGF0aW9uIGNvbGxpZGVkIHdpdGggdGhpcyBjcml0aWNhbCBzZWN0 aW9uLCBhbmQKKyAqIHRoZSBjYWxsZXIgc2hvdWxkIHJldHJ5LgorICovCitzdGF0aWMgaW5saW5l IGJvb2wgbW11X2ludGVydmFsX3JlYWRfcmV0cnkoc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmll ciAqbW5pLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHNlcSkKK3sKKwlyZXR1cm4gbW5pLT5pbnZh bGlkYXRlX3NlcSAhPSBzZXE7Cit9CisKKy8qKgorICogbW11X2ludGVydmFsX2NoZWNrX3JldHJ5 IC0gVGVzdCBpZiBhIGNvbGxpc2lvbiBoYXMgb2NjdXJyZWQKKyAqIG1uaTogVGhlIHJhbmdlCisg KiBzZXE6IFRoZSByZXR1cm4gb2YgdGhlIG1hdGNoaW5nIG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2lu KCkKKyAqCisgKiBUaGlzIGNhbiBiZSB1c2VkIGluIHRoZSBjcml0aWNhbCBzZWN0aW9uIGJldHdl ZW4gbW11X2ludGVydmFsX3JlYWRfYmVnaW4oKQorICogYW5kIG1tdV9pbnRlcnZhbF9yZWFkX3Jl dHJ5KCkuICBBIHJldHVybiBvZiB0cnVlIGluZGljYXRlcyBhbiBpbnZhbGlkYXRpb24KKyAqIGhh cyBjb2xsaWRlZCB3aXRoIHRoaXMgY3JpdGljYWwgcmVnaW9uIGFuZCBhIGZ1dHVyZQorICogbW11 X2ludGVydmFsX3JlYWRfcmV0cnkoKSB3aWxsIHJldHVybiB0cnVlLgorICoKKyAqIEZhbHNlIGlz IG5vdCByZWxpYWJsZSBhbmQgb25seSBzdWdnZXN0cyBhIGNvbGxpc2lvbiBtYXkgbm90IGhhdmUK KyAqIG9jY3VyZWQuIEl0IGNhbiBiZSBjYWxsZWQgbWFueSB0aW1lcyBhbmQgZG9lcyBub3QgaGF2 ZSB0byBob2xkIHRoZSB1c2VyCisgKiBwcm92aWRlZCBsb2NrLgorICoKKyAqIFRoaXMgY2FsbCBj YW4gYmUgdXNlZCBhcyBwYXJ0IG9mIGxvb3BzIGFuZCBvdGhlciBleHBlbnNpdmUgb3BlcmF0aW9u cyB0bworICogZXhwZWRpdGUgYSByZXRyeS4KKyAqLworc3RhdGljIGlubGluZSBib29sIG1tdV9p bnRlcnZhbF9jaGVja19yZXRyeShzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyICptbmksCisJ CQkJCSAgICB1bnNpZ25lZCBsb25nIHNlcSkKK3sKKwkvKiBQYWlycyB3aXRoIHRoZSBXUklURV9P TkNFIGluIG1tdV9pbnRlcnZhbF9zZXRfc2VxKCkgKi8KKwlyZXR1cm4gUkVBRF9PTkNFKG1uaS0+ aW52YWxpZGF0ZV9zZXEpICE9IHNlcTsKK30KKwogZXh0ZXJuIHZvaWQgX19tbXVfbm90aWZpZXJf bW1fZGVzdHJveShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiBleHRlcm4gdm9pZCBfX21tdV9ub3Rp Zmllcl9yZWxlYXNlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKIGV4dGVybiBpbnQgX19tbXVfbm90 aWZpZXJfY2xlYXJfZmx1c2hfeW91bmcoc3RydWN0IG1tX3N0cnVjdCAqbW0sCmRpZmYgLS1naXQg YS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCBhNWRhZTlhN2ViNTEwYS4uZDBiNTA0NmQ5 YWVmZmQgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKKysrIGIvbW0vS2NvbmZpZwpAQCAtMjg0LDYg KzI4NCw3IEBAIGNvbmZpZyBWSVJUX1RPX0JVUwogY29uZmlnIE1NVV9OT1RJRklFUgogCWJvb2wK IAlzZWxlY3QgU1JDVQorCXNlbGVjdCBJTlRFUlZBTF9UUkVFCiAKIGNvbmZpZyBLU00KIAlib29s ICJFbmFibGUgS1NNIGZvciBwYWdlIG1lcmdpbmciCmRpZmYgLS1naXQgYS9tbS9tbXVfbm90aWZp ZXIuYyBiL21tL21tdV9ub3RpZmllci5jCmluZGV4IDM2NzY3MGNmZDAyYjdiLi44Y2NhZmIxMmY1 NjIyOCAxMDA2NDQKLS0tIGEvbW0vbW11X25vdGlmaWVyLmMKKysrIGIvbW0vbW11X25vdGlmaWVy LmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KICNpbmNsdWRl IDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lu dGVydmFsX3RyZWUuaD4KICNpbmNsdWRlIDxsaW51eC9zcmN1Lmg+CiAjaW5jbHVkZSA8bGludXgv cmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMzYsMTAgKzM3LDI1MyBA QCBzdHJ1Y3QgbG9ja2RlcF9tYXAgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFy dF9tYXAgPSB7CiBzdHJ1Y3QgbW11X25vdGlmaWVyX21tIHsKIAkvKiBhbGwgbW11IG5vdGlmaWVy cyByZWdpc3RlcmVkIGluIHRoaXMgbW0gYXJlIHF1ZXVlZCBpbiB0aGlzIGxpc3QgKi8KIAlzdHJ1 Y3QgaGxpc3RfaGVhZCBsaXN0OworCWJvb2wgaGFzX2l0cmVlOwogCS8qIHRvIHNlcmlhbGl6ZSB0 aGUgbGlzdCBtb2RpZmljYXRpb25zIGFuZCBobGlzdF91bmhhc2hlZCAqLwogCXNwaW5sb2NrX3Qg bG9jazsKKwl1bnNpZ25lZCBsb25nIGludmFsaWRhdGVfc2VxOworCXVuc2lnbmVkIGxvbmcgYWN0 aXZlX2ludmFsaWRhdGVfcmFuZ2VzOworCXN0cnVjdCByYl9yb290X2NhY2hlZCBpdHJlZTsKKwl3 YWl0X3F1ZXVlX2hlYWRfdCB3cTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCBkZWZlcnJlZF9saXN0Owog fTsKIAorLyoKKyAqIFRoaXMgaXMgYSBjb2xsaXNpb24tcmV0cnkgcmVhZC1zaWRlL3dyaXRlLXNp ZGUgJ2xvY2snLCBhIGxvdCBsaWtlIGEKKyAqIHNlcWNvdW50LCBob3dldmVyIHRoaXMgYWxsb3dz IG11bHRpcGxlIHdyaXRlLXNpZGVzIHRvIGhvbGQgaXQgYXQKKyAqIG9uY2UuIENvbmNlcHR1YWxs eSB0aGUgd3JpdGUgc2lkZSBpcyBwcm90ZWN0aW5nIHRoZSB2YWx1ZXMgb2YgdGhlIFBURXMgaW4K KyAqIHRoaXMgbW0sIHN1Y2ggdGhhdCBQVEVTIGNhbm5vdCBiZSByZWFkIGludG8gU1BURXMgKHNo YWRvdyBQVEVzKSB3aGlsZSBhbnkKKyAqIHdyaXRlciBleGlzdHMuCisgKgorICogTm90ZSB0aGF0 IHRoZSBjb3JlIG1tIGNyZWF0ZXMgbmVzdGVkIGludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKS9lbmQo KSByZWdpb25zCisgKiB3aXRoaW4gdGhlIHNhbWUgdGhyZWFkLCBhbmQgcnVucyBpbnZhbGlkYXRl X3JhbmdlX3N0YXJ0KCkvZW5kKCkgaW4gcGFyYWxsZWwKKyAqIG9uIG11bHRpcGxlIENQVXMuIFRo aXMgaXMgZGVzaWduZWQgdG8gbm90IHJlZHVjZSBjb25jdXJyZW5jeSBvciBibG9jaworICogcHJv Z3Jlc3Mgb24gdGhlIG1tIHNpZGUuCisgKgorICogQXMgYSBzZWNvbmRhcnkgZnVuY3Rpb24sIGhv bGRpbmcgdGhlIGZ1bGwgd3JpdGUgc2lkZSBhbHNvIHNlcnZlcyB0byBwcmV2ZW50CisgKiB3cml0 ZXJzIGZvciB0aGUgaXRyZWUsIHRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHRvIGF2b2lkIGV4dHJh IGxvY2tpbmcKKyAqIGR1cmluZyBpbnZhbGlkYXRlX3JhbmdlX3N0YXJ0L2VuZCBub3RpZmllcnMu CisgKgorICogVGhlIHdyaXRlIHNpZGUgaGFzIHR3byBzdGF0ZXMsIGZ1bGx5IGV4Y2x1ZGVkOgor ICogIC0gbW0tPmFjdGl2ZV9pbnZhbGlkYXRlX3JhbmdlcyAhPSAwCisgKiAgLSBtbm4tPmludmFs aWRhdGVfc2VxICYgMSA9PSBUcnVlIChvZGQpCisgKiAgLSBzb21lIHJhbmdlIG9uIHRoZSBtbV9z dHJ1Y3QgaXMgYmVpbmcgaW52YWxpZGF0ZWQKKyAqICAtIHRoZSBpdHJlZSBpcyBub3QgYWxsb3dl ZCB0byBjaGFuZ2UKKyAqCisgKiBBbmQgcGFydGlhbGx5IGV4Y2x1ZGVkOgorICogIC0gbW0tPmFj dGl2ZV9pbnZhbGlkYXRlX3JhbmdlcyAhPSAwCisgKiAgLSBtbm4tPmludmFsaWRhdGVfc2VxICYg MSA9PSBGYWxzZSAoZXZlbikKKyAqICAtIHNvbWUgcmFuZ2Ugb24gdGhlIG1tX3N0cnVjdCBpcyBi ZWluZyBpbnZhbGlkYXRlZAorICogIC0gdGhlIGl0cmVlIGlzIGFsbG93ZWQgdG8gY2hhbmdlCisg KgorICogT3BlcmF0aW9ucyBvbiBtbXVfbm90aWZpZXJfbW0tPmludmFsaWRhdGVfc2VxICh1bmRl ciBzcGlubG9jayk6CisgKiAgICBzZXEgfD0gMSAgIyBCZWdpbiB3cml0aW5nCisgKiAgICBzZXEr KyAgICAgIyBSZWxlYXNlIHRoZSB3cml0aW5nIHN0YXRlCisgKiAgICBzZXEgJiAxICAgIyBUcnVl IGlmIGEgd3JpdGVyIGV4aXN0cworICoKKyAqIFRoZSBsYXRlciBzdGF0ZSBhdm9pZHMgc29tZSBl eHBlbnNpdmUgd29yayBvbiBpbnZfZW5kIGluIHRoZSBjb21tb24gY2FzZSBvZgorICogbm8gbW5p IG1vbml0b3JpbmcgdGhlIFZBLgorICovCitzdGF0aWMgYm9vbCBtbl9pdHJlZV9pc19pbnZhbGlk YXRpbmcoc3RydWN0IG1tdV9ub3RpZmllcl9tbSAqbW1uX21tKQoreworCWxvY2tkZXBfYXNzZXJ0 X2hlbGQoJm1tbl9tbS0+bG9jayk7CisJcmV0dXJuIG1tbl9tbS0+aW52YWxpZGF0ZV9zZXEgJiAx OworfQorCitzdGF0aWMgc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqCittbl9pdHJlZV9p bnZfc3RhcnRfcmFuZ2Uoc3RydWN0IG1tdV9ub3RpZmllcl9tbSAqbW1uX21tLAorCQkJIGNvbnN0 IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlLAorCQkJIHVuc2lnbmVkIGxvbmcgKnNl cSkKK3sKKwlzdHJ1Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlICpub2RlOworCXN0cnVjdCBtbXVfaW50 ZXJ2YWxfbm90aWZpZXIgKnJlcyA9IE5VTEw7CisKKwlzcGluX2xvY2soJm1tbl9tbS0+bG9jayk7 CisJbW1uX21tLT5hY3RpdmVfaW52YWxpZGF0ZV9yYW5nZXMrKzsKKwlub2RlID0gaW50ZXJ2YWxf dHJlZV9pdGVyX2ZpcnN0KCZtbW5fbW0tPml0cmVlLCByYW5nZS0+c3RhcnQsCisJCQkJCXJhbmdl LT5lbmQgLSAxKTsKKwlpZiAobm9kZSkgeworCQltbW5fbW0tPmludmFsaWRhdGVfc2VxIHw9IDE7 CisJCXJlcyA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVy LAorCQkJCSAgIGludGVydmFsX3RyZWUpOworCX0KKworCSpzZXEgPSBtbW5fbW0tPmludmFsaWRh dGVfc2VxOworCXNwaW5fdW5sb2NrKCZtbW5fbW0tPmxvY2spOworCXJldHVybiByZXM7Cit9CisK K3N0YXRpYyBzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyICoKK21uX2l0cmVlX2ludl9uZXh0 KHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgKm1uaSwKKwkJICBjb25zdCBzdHJ1Y3QgbW11 X25vdGlmaWVyX3JhbmdlICpyYW5nZSkKK3sKKwlzdHJ1Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlICpu b2RlOworCisJbm9kZSA9IGludGVydmFsX3RyZWVfaXRlcl9uZXh0KCZtbmktPmludGVydmFsX3Ry ZWUsIHJhbmdlLT5zdGFydCwKKwkJCQkgICAgICAgcmFuZ2UtPmVuZCAtIDEpOworCWlmICghbm9k ZSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgbW11 X2ludGVydmFsX25vdGlmaWVyLCBpbnRlcnZhbF90cmVlKTsKK30KKworc3RhdGljIHZvaWQgbW5f aXRyZWVfaW52X2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyX21tICptbW5fbW0pCit7CisJc3RydWN0 IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbW5pOworCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0Owor CWJvb2wgbmVlZF93YWtlID0gZmFsc2U7CisKKwlzcGluX2xvY2soJm1tbl9tbS0+bG9jayk7CisJ aWYgKC0tbW1uX21tLT5hY3RpdmVfaW52YWxpZGF0ZV9yYW5nZXMgfHwKKwkgICAgIW1uX2l0cmVl X2lzX2ludmFsaWRhdGluZyhtbW5fbW0pKSB7CisJCXNwaW5fdW5sb2NrKCZtbW5fbW0tPmxvY2sp OworCQlyZXR1cm47CisJfQorCisJLyogTWFrZSBpbnZhbGlkYXRlX3NlcSBldmVuICovCisJbW1u X21tLT5pbnZhbGlkYXRlX3NlcSsrOworCW5lZWRfd2FrZSA9IHRydWU7CisKKwkvKgorCSAqIFRo ZSBpbnZfZW5kIGluY29ycG9yYXRlcyBhIGRlZmVycmVkIG1lY2hhbmlzbSBsaWtlCisJICogcnRu bF91bmxvY2soKS4gQWRkcyBhbmQgcmVtb3ZlcyBhcmUgcXVldWVkIHVudGlsIHRoZSBmaW5hbCBp bnZfZW5kCisJICogaGFwcGVucyB0aGVuIHRoZXkgYXJlIHByb2dyZXNzZWQuIFRoaXMgYXJyYW5n ZW1lbnQgZm9yIHRyZWUgdXBkYXRlcworCSAqIGlzIHVzZWQgdG8gYXZvaWQgdXNpbmcgYSBibG9j a2luZyBsb2NrIGR1cmluZworCSAqIGludmFsaWRhdGVfcmFuZ2Vfc3RhcnQuCisJICovCisJaGxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZShtbmksIG5leHQsICZtbW5fbW0tPmRlZmVycmVkX2xpc3Qs CisJCQkJICBkZWZlcnJlZF9pdGVtKSB7CisJCWlmIChSQl9FTVBUWV9OT0RFKCZtbmktPmludGVy dmFsX3RyZWUucmIpKQorCQkJaW50ZXJ2YWxfdHJlZV9pbnNlcnQoJm1uaS0+aW50ZXJ2YWxfdHJl ZSwKKwkJCQkJICAgICAmbW1uX21tLT5pdHJlZSk7CisJCWVsc2UKKwkJCWludGVydmFsX3RyZWVf cmVtb3ZlKCZtbmktPmludGVydmFsX3RyZWUsCisJCQkJCSAgICAgJm1tbl9tbS0+aXRyZWUpOwor CQlobGlzdF9kZWwoJm1uaS0+ZGVmZXJyZWRfaXRlbSk7CisJfQorCXNwaW5fdW5sb2NrKCZtbW5f bW0tPmxvY2spOworCisJLyoKKwkgKiBUT0RPOiBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSBzcGlu bG9jayBhYm92ZSwgdGhpcyB3b3VsZCBiZSBmYXN0ZXIKKwkgKiBhcyB3YWtlX3VwX3EKKwkgKi8K KwlpZiAobmVlZF93YWtlKQorCQl3YWtlX3VwX2FsbCgmbW1uX21tLT53cSk7Cit9CisKKy8qKgor ICogbW11X2ludGVydmFsX3JlYWRfYmVnaW4gLSBCZWdpbiBhIHJlYWQgc2lkZSBjcml0aWNhbCBz ZWN0aW9uIGFnYWluc3QgYSBWQQorICogICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZQor ICogbW5pOiBUaGUgcmFuZ2UgdG8gdXNlCisgKgorICogbW11X2l0ZXJ2YWxfcmVhZF9iZWdpbigp L21tdV9pdGVydmFsX3JlYWRfcmV0cnkoKSBpbXBsZW1lbnQgYQorICogY29sbGlzaW9uLXJldHJ5 IHNjaGVtZSBzaW1pbGFyIHRvIHNlcWNvdW50IGZvciB0aGUgVkEgcmFuZ2UgdW5kZXIgbW5pLiBJ ZgorICogdGhlIG1tIGludm9rZXMgaW52YWxpZGF0aW9uIGR1cmluZyB0aGUgY3JpdGljYWwgc2Vj dGlvbiB0aGVuCisgKiBtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeSgpIHdpbGwgcmV0dXJuIHRydWUu CisgKgorICogVGhpcyBpcyB1c2VmdWwgdG8gb2J0YWluIHNoYWRvdyBQVEVzIHdoZXJlIHRlYXJk b3duIG9yIHNldHVwIG9mIHRoZSBTUFRFcworICogcmVxdWlyZSBhIGJsb2NraW5nIGNvbnRleHQu ICBUaGUgY3JpdGljYWwgcmVnaW9uIGZvcm1lZCBieSB0aGlzIGNhbiBzbGVlcCwKKyAqIGFuZCB0 aGUgcmVxdWlyZWQgJ3VzZXJfbG9jaycgY2FuIGFsc28gYmUgYSBzbGVlcGluZyBsb2NrLgorICoK KyAqIFRoZSBjYWxsZXIgaXMgcmVxdWlyZWQgdG8gcHJvdmlkZSBhICd1c2VyX2xvY2snIHRvIHNl cmlhbGl6ZSBib3RoIHRlYXJkb3duCisgKiBhbmQgc2V0dXAuCisgKgorICogVGhlIHJldHVybiB2 YWx1ZSBzaG91bGQgYmUgcGFzc2VkIHRvIG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCkuCisgKi8K K3Vuc2lnbmVkIGxvbmcgbW11X2ludGVydmFsX3JlYWRfYmVnaW4oc3RydWN0IG1tdV9pbnRlcnZh bF9ub3RpZmllciAqbW5pKQoreworCXN0cnVjdCBtbXVfbm90aWZpZXJfbW0gKm1tbl9tbSA9IG1u aS0+bW0tPm1tdV9ub3RpZmllcl9tbTsKKwl1bnNpZ25lZCBsb25nIHNlcTsKKwlib29sIGlzX2lu dmFsaWRhdGluZzsKKworCS8qCisJICogSWYgdGhlIG1uaSBoYXMgYSBkaWZmZXJlbnQgc2VxIHZh bHVlIHVuZGVyIHRoZSB1c2VyX2xvY2sgdGhhbiB3ZQorCSAqIHN0YXJ0ZWQgd2l0aCB0aGVuIGl0 IGhhcyBjb2xsaWRlZC4KKwkgKgorCSAqIElmIHRoZSBtbmkgY3VycmVudGx5IGhhcyB0aGUgc2Ft ZSBzZXEgdmFsdWUgYXMgdGhlIG1tbl9tbSBzZXEsIHRoZW4KKwkgKiBpdCBpcyBjdXJyZW50bHkg YmV0d2VlbiBpbnZhbGlkYXRlX3N0YXJ0L2VuZCBhbmQgaXMgY29sbGlkaW5nLgorCSAqCisJICog VGhlIGxvY2tpbmcgbG9va3MgYnJvYWRseSBsaWtlIHRoaXM6CisJICogICBtbl90cmVlX2ludmFs aWRhdGVfc3RhcnQoKTogICAgICAgICAgbW11X2ludGVydmFsX3JlYWRfYmVnaW4oKToKKwkgKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl9sb2NrCisJICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXEgPSBSRUFEX09OQ0UobW5p LT5pbnZhbGlkYXRlX3NlcSk7CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzZXEgPT0gbW1uX21tLT5pbnZhbGlkYXRlX3NlcQorCSAqICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzcGluX3VubG9jaworCSAqICAgIHNwaW5fbG9jawor CSAqICAgICBzZXEgPSArK21tbl9tbS0+aW52YWxpZGF0ZV9zZXEKKwkgKiAgICBzcGluX3VubG9j aworCSAqICAgICBvcC0+aW52YWxpZGF0ZV9yYW5nZSgpOgorCSAqICAgICAgIHVzZXJfbG9jawor CSAqICAgICAgICBtbXVfaW50ZXJ2YWxfc2V0X3NlcSgpCisJICogICAgICAgICBtbmktPmludmFs aWRhdGVfc2VxID0gc2VxCisJICogICAgICAgdXNlcl91bmxvY2sKKwkgKgorCSAqICAgICAgICAg ICAgICAgICAgICAgICAgICBbUmVxdWlyZWQ6IG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCkgPT0g dHJ1ZV0KKwkgKgorCSAqICAgbW5faXRyZWVfaW52X2VuZCgpOgorCSAqICAgIHNwaW5fbG9jawor CSAqICAgICBzZXEgPSArK21tbl9tbS0+aW52YWxpZGF0ZV9zZXEKKwkgKiAgICBzcGluX3VubG9j aworCSAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9s b2NrCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1tdV9pbnRl cnZhbF9yZWFkX3JldHJ5KCk6CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtbmktPmludmFsaWRhdGVfc2VxICE9IHNlcQorCSAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVzZXJfdW5sb2NrCisJICoKKwkgKiBCYXJyaWVycyBhcmUg bm90IG5lZWRlZCBoZXJlIGFzIGFueSByYWNlcyBoZXJlIGFyZSBjbG9zZWQgYnkgYW4KKwkgKiBl dmVudHVhbCBtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeSgpLCB3aGljaCBwcm92aWRlcyBhIGJhcnJp ZXIgdmlhIHRoZQorCSAqIHVzZXJfbG9jay4KKwkgKi8KKwlzcGluX2xvY2soJm1tbl9tbS0+bG9j ayk7CisJLyogUGFpcnMgd2l0aCB0aGUgV1JJVEVfT05DRSBpbiBtbXVfaW50ZXJ2YWxfc2V0X3Nl cSgpICovCisJc2VxID0gUkVBRF9PTkNFKG1uaS0+aW52YWxpZGF0ZV9zZXEpOworCWlzX2ludmFs aWRhdGluZyA9IHNlcSA9PSBtbW5fbW0tPmludmFsaWRhdGVfc2VxOworCXNwaW5fdW5sb2NrKCZt bW5fbW0tPmxvY2spOworCisJLyoKKwkgKiBtbmktPmludmFsaWRhdGVfc2VxIG11c3QgYWx3YXlz IGJlIHNldCB0byBhbiBvZGQgdmFsdWUgdmlhCisJICogbW11X2ludGVydmFsX3NldF9zZXEoKSB1 c2luZyB0aGUgcHJvdmlkZWQgY3VyX3NlcSBmcm9tCisJICogbW5faXRyZWVfaW52X3N0YXJ0X3Jh bmdlKCkuIFRoaXMgZW5zdXJlcyB0aGF0IGlmIHNlcSBkb2VzIHdyYXAgd2UKKwkgKiB3aWxsIGFs d2F5cyBjbGVhciB0aGUgYmVsb3cgc2xlZXAgaW4gc29tZSByZWFzb25hYmxlIHRpbWUgYXMKKwkg KiBtbW5fbW0tPmludmFsaWRhdGVfc2VxIGlzIGV2ZW4gaW4gdGhlIGlkbGUgc3RhdGUuCisJICov CisJbG9ja19tYXBfYWNxdWlyZSgmX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFy dF9tYXApOworCWxvY2tfbWFwX3JlbGVhc2UoJl9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFu Z2Vfc3RhcnRfbWFwKTsKKwlpZiAoaXNfaW52YWxpZGF0aW5nKQorCQl3YWl0X2V2ZW50KG1tbl9t bS0+d3EsCisJCQkgICBSRUFEX09OQ0UobW1uX21tLT5pbnZhbGlkYXRlX3NlcSkgIT0gc2VxKTsK KworCS8qCisJICogTm90aWNlIHRoYXQgbW11X2ludGVydmFsX3JlYWRfcmV0cnkoKSBjYW4gYWxy ZWFkeSBiZSB0cnVlIGF0IHRoaXMKKwkgKiBwb2ludCwgYXZvaWRpbmcgbG9vcHMgaGVyZSBhbGxv d3MgdGhlIGNhbGxlciB0byBwcm92aWRlIGEgZ2xvYmFsCisJICogdGltZSBib3VuZC4KKwkgKi8K KworCXJldHVybiBzZXE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtbXVfaW50ZXJ2YWxfcmVhZF9i ZWdpbik7CisKK3N0YXRpYyB2b2lkIG1uX2l0cmVlX3JlbGVhc2Uoc3RydWN0IG1tdV9ub3RpZmll cl9tbSAqbW1uX21tLAorCQkJICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlzdHJ1Y3Qg bW11X25vdGlmaWVyX3JhbmdlIHJhbmdlID0geworCQkuZmxhZ3MgPSBNTVVfTk9USUZJRVJfUkFO R0VfQkxPQ0tBQkxFLAorCQkuZXZlbnQgPSBNTVVfTk9USUZZX1JFTEVBU0UsCisJCS5tbSA9IG1t LAorCQkuc3RhcnQgPSAwLAorCQkuZW5kID0gVUxPTkdfTUFYLAorCX07CisJc3RydWN0IG1tdV9p bnRlcnZhbF9ub3RpZmllciAqbW5pOworCXVuc2lnbmVkIGxvbmcgY3VyX3NlcTsKKwlib29sIHJl dDsKKworCWZvciAobW5pID0gbW5faXRyZWVfaW52X3N0YXJ0X3JhbmdlKG1tbl9tbSwgJnJhbmdl LCAmY3VyX3NlcSk7IG1uaTsKKwkgICAgIG1uaSA9IG1uX2l0cmVlX2ludl9uZXh0KG1uaSwgJnJh bmdlKSkgeworCQlyZXQgPSBtbmktPm9wcy0+aW52YWxpZGF0ZShtbmksICZyYW5nZSwgY3VyX3Nl cSk7CisJCVdBUk5fT04oIXJldCk7CisJfQorCisJbW5faXRyZWVfaW52X2VuZChtbW5fbW0pOwor fQorCiAvKgogICogVGhpcyBmdW5jdGlvbiBjYW4ndCBydW4gY29uY3VycmVudGx5IGFnYWluc3Qg bW11X25vdGlmaWVyX3JlZ2lzdGVyCiAgKiBiZWNhdXNlIG1tLT5tbV91c2VycyA+IDAgZHVyaW5n IG1tdV9ub3RpZmllcl9yZWdpc3RlciBhbmQgZXhpdF9tbWFwCkBAIC01Miw3ICsyOTYsOCBAQCBz dHJ1Y3QgbW11X25vdGlmaWVyX21tIHsKICAqIGNhbid0IGdvIGF3YXkgZnJvbSB1bmRlciB1cyBh cyBleGl0X21tYXAgaG9sZHMgYW4gbW1fY291bnQgcGluCiAgKiBpdHNlbGYuCiAgKi8KLXZvaWQg X19tbXVfbm90aWZpZXJfcmVsZWFzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3N0YXRpYyB2b2lk IG1uX2hsaXN0X3JlbGVhc2Uoc3RydWN0IG1tdV9ub3RpZmllcl9tbSAqbW1uX21tLAorCQkJICAg ICBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlzdHJ1Y3QgbW11X25vdGlmaWVyICptbjsKIAlp bnQgaWQ7CkBAIC02Miw3ICszMDcsNyBAQCB2b2lkIF9fbW11X25vdGlmaWVyX3JlbGVhc2Uoc3Ry dWN0IG1tX3N0cnVjdCAqbW0pCiAJICogLT5yZWxlYXNlIHJldHVybnMuCiAJICovCiAJaWQgPSBz cmN1X3JlYWRfbG9jaygmc3JjdSk7Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG1uLCAmbW0t Pm1tdV9ub3RpZmllcl9tbS0+bGlzdCwgaGxpc3QpCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1 KG1uLCAmbW1uX21tLT5saXN0LCBobGlzdCkKIAkJLyoKIAkJICogSWYgLT5yZWxlYXNlIHJ1bnMg YmVmb3JlIG1tdV9ub3RpZmllcl91bnJlZ2lzdGVyIGl0IG11c3QgYmUKIAkJICogaGFuZGxlZCwg YXMgaXQncyB0aGUgb25seSB3YXkgZm9yIHRoZSBkcml2ZXIgdG8gZmx1c2ggYWxsCkBAIC03Miwx MCArMzE3LDkgQEAgdm9pZCBfX21tdV9ub3RpZmllcl9yZWxlYXNlKHN0cnVjdCBtbV9zdHJ1Y3Qg Km1tKQogCQlpZiAobW4tPm9wcy0+cmVsZWFzZSkKIAkJCW1uLT5vcHMtPnJlbGVhc2UobW4sIG1t KTsKIAotCXNwaW5fbG9jaygmbW0tPm1tdV9ub3RpZmllcl9tbS0+bG9jayk7Ci0Jd2hpbGUgKHVu bGlrZWx5KCFobGlzdF9lbXB0eSgmbW0tPm1tdV9ub3RpZmllcl9tbS0+bGlzdCkpKSB7Ci0JCW1u ID0gaGxpc3RfZW50cnkobW0tPm1tdV9ub3RpZmllcl9tbS0+bGlzdC5maXJzdCwKLQkJCQkgc3Ry dWN0IG1tdV9ub3RpZmllciwKKwlzcGluX2xvY2soJm1tbl9tbS0+bG9jayk7CisJd2hpbGUgKHVu bGlrZWx5KCFobGlzdF9lbXB0eSgmbW1uX21tLT5saXN0KSkpIHsKKwkJbW4gPSBobGlzdF9lbnRy eShtbW5fbW0tPmxpc3QuZmlyc3QsIHN0cnVjdCBtbXVfbm90aWZpZXIsCiAJCQkJIGhsaXN0KTsK IAkJLyoKIAkJICogV2UgYXJyaXZlZCBiZWZvcmUgbW11X25vdGlmaWVyX3VucmVnaXN0ZXIgc28K QEAgLTg1LDcgKzMyOSw3IEBAIHZvaWQgX19tbXVfbm90aWZpZXJfcmVsZWFzZShzdHJ1Y3QgbW1f c3RydWN0ICptbSkKIAkJICovCiAJCWhsaXN0X2RlbF9pbml0X3JjdSgmbW4tPmhsaXN0KTsKIAl9 Ci0Jc3Bpbl91bmxvY2soJm1tLT5tbXVfbm90aWZpZXJfbW0tPmxvY2spOworCXNwaW5fdW5sb2Nr KCZtbW5fbW0tPmxvY2spOwogCXNyY3VfcmVhZF91bmxvY2soJnNyY3UsIGlkKTsKIAogCS8qCkBA IC0xMDAsNiArMzQ0LDE3IEBAIHZvaWQgX19tbXVfbm90aWZpZXJfcmVsZWFzZShzdHJ1Y3QgbW1f c3RydWN0ICptbSkKIAlzeW5jaHJvbml6ZV9zcmN1KCZzcmN1KTsKIH0KIAordm9pZCBfX21tdV9u b3RpZmllcl9yZWxlYXNlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXN0cnVjdCBtbXVfbm90 aWZpZXJfbW0gKm1tbl9tbSA9IG1tLT5tbXVfbm90aWZpZXJfbW07CisKKwlpZiAobW1uX21tLT5o YXNfaXRyZWUpCisJCW1uX2l0cmVlX3JlbGVhc2UobW1uX21tLCBtbSk7CisKKwlpZiAoIWhsaXN0 X2VtcHR5KCZtbW5fbW0tPmxpc3QpKQorCQltbl9obGlzdF9yZWxlYXNlKG1tbl9tbSwgbW0pOwor fQorCiAvKgogICogSWYgbm8geW91bmcgYml0ZmxhZyBpcyBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3 YXJlLCAtPmNsZWFyX2ZsdXNoX3lvdW5nIGNhbgogICogdW5tYXAgdGhlIGFkZHJlc3MgYW5kIHJl dHVybiAxIG9yIDAgZGVwZW5kaW5nIGlmIHRoZSBtYXBwaW5nIHByZXZpb3VzbHkKQEAgLTE3Miwx NCArNDI3LDQzIEBAIHZvaWQgX19tbXVfbm90aWZpZXJfY2hhbmdlX3B0ZShzdHJ1Y3QgbW1fc3Ry dWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCXNyY3VfcmVhZF91bmxvY2soJnNyY3Us IGlkKTsKIH0KIAotaW50IF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3Ry dWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UpCitzdGF0aWMgaW50IG1uX2l0cmVlX2ludmFs aWRhdGUoc3RydWN0IG1tdV9ub3RpZmllcl9tbSAqbW1uX21tLAorCQkJICAgICAgIGNvbnN0IHN0 cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlKQoreworCXN0cnVjdCBtbXVfaW50ZXJ2YWxf bm90aWZpZXIgKm1uaTsKKwl1bnNpZ25lZCBsb25nIGN1cl9zZXE7CisKKwlmb3IgKG1uaSA9IG1u X2l0cmVlX2ludl9zdGFydF9yYW5nZShtbW5fbW0sIHJhbmdlLCAmY3VyX3NlcSk7IG1uaTsKKwkg ICAgIG1uaSA9IG1uX2l0cmVlX2ludl9uZXh0KG1uaSwgcmFuZ2UpKSB7CisJCWJvb2wgcmV0Owor CisJCXJldCA9IG1uaS0+b3BzLT5pbnZhbGlkYXRlKG1uaSwgcmFuZ2UsIGN1cl9zZXEpOworCQlp ZiAoIXJldCkgeworCQkJaWYgKFdBUk5fT04obW11X25vdGlmaWVyX3JhbmdlX2Jsb2NrYWJsZShy YW5nZSkpKQorCQkJCWNvbnRpbnVlOworCQkJZ290byBvdXRfd291bGRfYmxvY2s7CisJCX0KKwl9 CisJcmV0dXJuIDA7CisKK291dF93b3VsZF9ibG9jazoKKwkvKgorCSAqIE9uIC1FQUdBSU4gdGhl IG5vbi1ibG9ja2luZyBjYWxsZXIgaXMgbm90IGFsbG93ZWQgdG8gY2FsbAorCSAqIGludmFsaWRh dGVfcmFuZ2VfZW5kKCkKKwkgKi8KKwltbl9pdHJlZV9pbnZfZW5kKG1tbl9tbSk7CisJcmV0dXJu IC1FQUdBSU47Cit9CisKK3N0YXRpYyBpbnQgbW5faGxpc3RfaW52YWxpZGF0ZV9yYW5nZV9zdGFy dChzdHJ1Y3QgbW11X25vdGlmaWVyX21tICptbW5fbW0sCisJCQkJCSAgIHN0cnVjdCBtbXVfbm90 aWZpZXJfcmFuZ2UgKnJhbmdlKQogewogCXN0cnVjdCBtbXVfbm90aWZpZXIgKm1uOwogCWludCBy ZXQgPSAwOwogCWludCBpZDsKIAogCWlkID0gc3JjdV9yZWFkX2xvY2soJnNyY3UpOwotCWhsaXN0 X2Zvcl9lYWNoX2VudHJ5X3JjdShtbiwgJnJhbmdlLT5tbS0+bW11X25vdGlmaWVyX21tLT5saXN0 LCBobGlzdCkgeworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShtbiwgJm1tbl9tbS0+bGlzdCwg aGxpc3QpIHsKIAkJaWYgKG1uLT5vcHMtPmludmFsaWRhdGVfcmFuZ2Vfc3RhcnQpIHsKIAkJCWlu dCBfcmV0OwogCkBAIC0yMDMsMTUgKzQ4NywzMCBAQCBpbnQgX19tbXVfbm90aWZpZXJfaW52YWxp ZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpyYW5nZSkKIAlyZXR1 cm4gcmV0OwogfQogCi12b2lkIF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0 cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlLAotCQkJCQkgYm9vbCBvbmx5X2VuZCkKK2lu dCBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZp ZXJfcmFuZ2UgKnJhbmdlKQoreworCXN0cnVjdCBtbXVfbm90aWZpZXJfbW0gKm1tbl9tbSA9IHJh bmdlLT5tbS0+bW11X25vdGlmaWVyX21tOworCWludCByZXQ7CisKKwlpZiAobW1uX21tLT5oYXNf aXRyZWUpIHsKKwkJcmV0ID0gbW5faXRyZWVfaW52YWxpZGF0ZShtbW5fbW0sIHJhbmdlKTsKKwkJ aWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCWlmICghaGxpc3RfZW1wdHkoJm1tbl9tbS0+ bGlzdCkpCisJCXJldHVybiBtbl9obGlzdF9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KG1tbl9tbSwg cmFuZ2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtbl9obGlzdF9pbnZhbGlkYXRl X2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyX21tICptbW5fbW0sCisJCQkJICAgIHN0cnVjdCBtbXVf bm90aWZpZXJfcmFuZ2UgKnJhbmdlLAorCQkJCSAgICBib29sIG9ubHlfZW5kKQogewogCXN0cnVj dCBtbXVfbm90aWZpZXIgKm1uOwogCWludCBpZDsKIAotCWxvY2tfbWFwX2FjcXVpcmUoJl9fbW11 X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbWFwKTsKIAlpZCA9IHNyY3VfcmVhZF9s b2NrKCZzcmN1KTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobW4sICZyYW5nZS0+bW0tPm1t dV9ub3RpZmllcl9tbS0+bGlzdCwgaGxpc3QpIHsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uo bW4sICZtbW5fbW0tPmxpc3QsIGhsaXN0KSB7CiAJCS8qCiAJCSAqIENhbGwgaW52YWxpZGF0ZV9y YW5nZSBoZXJlIHRvbyB0byBhdm9pZCB0aGUgbmVlZCBmb3IgdGhlCiAJCSAqIHN1YnN5c3RlbSBv ZiBoYXZpbmcgdG8gcmVnaXN0ZXIgYW4gaW52YWxpZGF0ZV9yYW5nZV9lbmQKQEAgLTIzOCw2ICs1 MzcsMTkgQEAgdm9pZCBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChzdHJ1Y3Qg bW11X25vdGlmaWVyX3JhbmdlICpyYW5nZSwKIAkJfQogCX0KIAlzcmN1X3JlYWRfdW5sb2NrKCZz cmN1LCBpZCk7Cit9CisKK3ZvaWQgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQo c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UsCisJCQkJCSBib29sIG9ubHlfZW5kKQor eworCXN0cnVjdCBtbXVfbm90aWZpZXJfbW0gKm1tbl9tbSA9IHJhbmdlLT5tbS0+bW11X25vdGlm aWVyX21tOworCisJbG9ja19tYXBfYWNxdWlyZSgmX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9y YW5nZV9zdGFydF9tYXApOworCWlmIChtbW5fbW0tPmhhc19pdHJlZSkKKwkJbW5faXRyZWVfaW52 X2VuZChtbW5fbW0pOworCisJaWYgKCFobGlzdF9lbXB0eSgmbW1uX21tLT5saXN0KSkKKwkJbW5f aGxpc3RfaW52YWxpZGF0ZV9lbmQobW1uX21tLCByYW5nZSwgb25seV9lbmQpOwogCWxvY2tfbWFw X3JlbGVhc2UoJl9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbWFwKTsKIH0K IApAQCAtMjU2LDggKzU2OCw5IEBAIHZvaWQgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5n ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIH0KIAogLyoKLSAqIFNhbWUgYXMgbW11X25vdGlmaWVy X3JlZ2lzdGVyIGJ1dCBoZXJlIHRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZQotICogbW1hcF9zZW0g aW4gd3JpdGUgbW9kZS4KKyAqIFNhbWUgYXMgbW11X25vdGlmaWVyX3JlZ2lzdGVyIGJ1dCBoZXJl IHRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBtbWFwX3NlbSBpbgorICogd3JpdGUgbW9kZS4gQSBO VUxMIG1uIHNpZ25hbHMgdGhlIG5vdGlmaWVyIGlzIGJlaW5nIHJlZ2lzdGVyZWQgZm9yIGl0cmVl CisgKiBtb2RlLgogICovCiBpbnQgX19tbXVfbm90aWZpZXJfcmVnaXN0ZXIoc3RydWN0IG1tdV9u b3RpZmllciAqbW4sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewpAQCAtMjc0LDkgKzU4Nyw2IEBA IGludCBfX21tdV9ub3RpZmllcl9yZWdpc3RlcihzdHJ1Y3QgbW11X25vdGlmaWVyICptbiwgc3Ry dWN0IG1tX3N0cnVjdCAqbW0pCiAJCWZzX3JlY2xhaW1fcmVsZWFzZShHRlBfS0VSTkVMKTsKIAl9 CiAKLQltbi0+bW0gPSBtbTsKLQltbi0+dXNlcnMgPSAxOwotCiAJaWYgKCFtbS0+bW11X25vdGlm aWVyX21tKSB7CiAJCS8qCiAJCSAqIGttYWxsb2MgY2Fubm90IGJlIGNhbGxlZCB1bmRlciBtbV90 YWtlX2FsbF9sb2NrcygpLCBidXQgd2UKQEAgLTI4NCwyMSArNTk0LDIyIEBAIGludCBfX21tdV9u b3RpZmllcl9yZWdpc3RlcihzdHJ1Y3QgbW11X25vdGlmaWVyICptbiwgc3RydWN0IG1tX3N0cnVj dCAqbW0pCiAJCSAqIHRoZSB3cml0ZSBzaWRlIG9mIHRoZSBtbWFwX3NlbS4KIAkJICovCiAJCW1t dV9ub3RpZmllcl9tbSA9Ci0JCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbW11X25vdGlmaWVyX21t KSwgR0ZQX0tFUk5FTCk7CisJCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgbW11X25vdGlmaWVyX21t KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghbW11X25vdGlmaWVyX21tKQogCQkJcmV0dXJuIC1FTk9N RU07CiAKIAkJSU5JVF9ITElTVF9IRUFEKCZtbXVfbm90aWZpZXJfbW0tPmxpc3QpOwogCQlzcGlu X2xvY2tfaW5pdCgmbW11X25vdGlmaWVyX21tLT5sb2NrKTsKKwkJbW11X25vdGlmaWVyX21tLT5p bnZhbGlkYXRlX3NlcSA9IDI7CisJCW1tdV9ub3RpZmllcl9tbS0+aXRyZWUgPSBSQl9ST09UX0NB Q0hFRDsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmbW11X25vdGlmaWVyX21tLT53cSk7CisJCUlO SVRfSExJU1RfSEVBRCgmbW11X25vdGlmaWVyX21tLT5kZWZlcnJlZF9saXN0KTsKIAl9CiAKIAly ZXQgPSBtbV90YWtlX2FsbF9sb2NrcyhtbSk7CiAJaWYgKHVubGlrZWx5KHJldCkpCiAJCWdvdG8g b3V0X2NsZWFuOwogCi0JLyogUGFpcnMgd2l0aCB0aGUgbW1kcm9wIGluIG1tdV9ub3RpZmllcl91 bnJlZ2lzdGVyXyogKi8KLQltbWdyYWIobW0pOwotCiAJLyoKIAkgKiBTZXJpYWxpemUgdGhlIHVw ZGF0ZSBhZ2FpbnN0IG1tdV9ub3RpZmllcl91bnJlZ2lzdGVyLiBBCiAJICogc2lkZSBub3RlOiBt bXVfbm90aWZpZXJfcmVsZWFzZSBjYW4ndCBydW4gY29uY3VycmVudGx5IHdpdGgKQEAgLTMwNiwx MyArNjE3LDI4IEBAIGludCBfX21tdV9ub3RpZmllcl9yZWdpc3RlcihzdHJ1Y3QgbW11X25vdGlm aWVyICptbiwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJICogY3VycmVudC0+bW0gb3IgZXhwbGlj aXRseSB3aXRoIGdldF90YXNrX21tKCkgb3Igc2ltaWxhcikuCiAJICogV2UgY2FuJ3QgcmFjZSBh Z2FpbnN0IGFueSBvdGhlciBtbXUgbm90aWZpZXIgbWV0aG9kIGVpdGhlcgogCSAqIHRoYW5rcyB0 byBtbV90YWtlX2FsbF9sb2NrcygpLgorCSAqCisJICogcmVsZWFzZSBzZW1hbnRpY3Mgb24gdGhl IGluaXRpYWxpemF0aW9uIG9mIHRoZSBtbXVfbm90aWZpZXJfbW0ncworICAgICAgICAgKiBjb250 ZW50cyBhcmUgcHJvdmlkZWQgZm9yIHVubG9ja2VkIHJlYWRlcnMuICBhY3F1aXJlIGNhbiBvbmx5 IGJlCisgICAgICAgICAqIHVzZWQgd2hpbGUgaG9sZGluZyB0aGUgbW1ncmFiIG9yIG1tZ2V0LCBh bmQgaXMgc2FmZSBiZWNhdXNlIG9uY2UKKyAgICAgICAgICogY3JlYXRlZCB0aGUgbW11X25vdGlm aWZlcl9tbSBpcyBub3QgZnJlZWQgdW50aWwgdGhlIG1tIGlzCisgICAgICAgICAqIGRlc3Ryb3ll ZC4gIEFzIGFib3ZlLCB1c2VycyBob2xkaW5nIHRoZSBtbWFwX3NlbSBvciBvbmUgb2YgdGhlCisg ICAgICAgICAqIG1tX3Rha2VfYWxsX2xvY2tzKCkgZG8gbm90IG5lZWQgdG8gdXNlIGFjcXVpcmUg c2VtYW50aWNzLgogCSAqLwogCWlmIChtbXVfbm90aWZpZXJfbW0pCi0JCW1tLT5tbXVfbm90aWZp ZXJfbW0gPSBtbXVfbm90aWZpZXJfbW07CisJCXNtcF9zdG9yZV9yZWxlYXNlKCZtbS0+bW11X25v dGlmaWVyX21tLCBtbXVfbm90aWZpZXJfbW0pOwogCi0Jc3Bpbl9sb2NrKCZtbS0+bW11X25vdGlm aWVyX21tLT5sb2NrKTsKLQlobGlzdF9hZGRfaGVhZF9yY3UoJm1uLT5obGlzdCwgJm1tLT5tbXVf bm90aWZpZXJfbW0tPmxpc3QpOwotCXNwaW5fdW5sb2NrKCZtbS0+bW11X25vdGlmaWVyX21tLT5s b2NrKTsKKwlpZiAobW4pIHsKKwkJLyogUGFpcnMgd2l0aCB0aGUgbW1kcm9wIGluIG1tdV9ub3Rp Zmllcl91bnJlZ2lzdGVyXyogKi8KKwkJbW1ncmFiKG1tKTsKKwkJbW4tPm1tID0gbW07CisJCW1u LT51c2VycyA9IDE7CisKKwkJc3Bpbl9sb2NrKCZtbS0+bW11X25vdGlmaWVyX21tLT5sb2NrKTsK KwkJaGxpc3RfYWRkX2hlYWRfcmN1KCZtbi0+aGxpc3QsICZtbS0+bW11X25vdGlmaWVyX21tLT5s aXN0KTsKKwkJc3Bpbl91bmxvY2soJm1tLT5tbXVfbm90aWZpZXJfbW0tPmxvY2spOworCX0gZWxz ZQorCQltbS0+bW11X25vdGlmaWVyX21tLT5oYXNfaXRyZWUgPSB0cnVlOwogCiAJbW1fZHJvcF9h bGxfbG9ja3MobW0pOwogCUJVR19PTihhdG9taWNfcmVhZCgmbW0tPm1tX3VzZXJzKSA8PSAwKTsK QEAgLTUyOSw2ICs4NTUsMTgwIEBAIHZvaWQgbW11X25vdGlmaWVyX3B1dChzdHJ1Y3QgbW11X25v dGlmaWVyICptbikKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1tdV9ub3RpZmllcl9wdXQpOwogCitz dGF0aWMgaW50IF9fbW11X2ludGVydmFsX25vdGlmaWVyX2luc2VydCgKKwlzdHJ1Y3QgbW11X2lu dGVydmFsX25vdGlmaWVyICptbmksIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCXN0cnVjdCBtbXVf bm90aWZpZXJfbW0gKm1tbl9tbSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwl1bnNpZ25lZCBsb25n IGxlbmd0aCwgY29uc3Qgc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllcl9vcHMgKm9wcykKK3sK KwltbmktPm1tID0gbW07CisJbW5pLT5vcHMgPSBvcHM7CisJUkJfQ0xFQVJfTk9ERSgmbW5pLT5p bnRlcnZhbF90cmVlLnJiKTsKKwltbmktPmludGVydmFsX3RyZWUuc3RhcnQgPSBzdGFydDsKKwkv KgorCSAqIE5vdGUgdGhhdCB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVydmFscyBpbiB0 aGUgaW50ZXJ2YWwgdHJlZQorCSAqIGNvbnNpZGVycyB0aGUgZW5kaW5nIHBvaW50IGFzIGNvbnRh aW5lZCBpbiB0aGUgaW50ZXJ2YWwuCisJICovCisJaWYgKGxlbmd0aCA9PSAwIHx8CisJICAgIGNo ZWNrX2FkZF9vdmVyZmxvdyhzdGFydCwgbGVuZ3RoIC0gMSwgJm1uaS0+aW50ZXJ2YWxfdHJlZS5s YXN0KSkKKwkJcmV0dXJuIC1FT1ZFUkZMT1c7CisKKwkvKiBNdXN0IGNhbGwgd2l0aCBhIG1tZ2V0 KCkgaGVsZCAqLworCWlmIChXQVJOX09OKGF0b21pY19yZWFkKCZtbS0+bW1fY291bnQpIDw9IDAp KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHBhaXJzIHdpdGggbW1kcm9wIGluIG1tdV9pbnRl cnZhbF9ub3RpZmllcl9yZW1vdmUoKSAqLworCW1tZ3JhYihtbSk7CisKKwkvKgorCSAqIElmIHNv bWUgaW52YWxpZGF0ZV9yYW5nZV9zdGFydC9lbmQgcmVnaW9uIGlzIGdvaW5nIG9uIGluIHBhcmFs bGVsCisJICogd2UgZG9uJ3Qga25vdyB3aGF0IFZBIHJhbmdlcyBhcmUgYWZmZWN0ZWQsIHNvIHdl IG11c3QgYXNzdW1lIHRoaXMKKwkgKiBuZXcgcmFuZ2UgaXMgaW5jbHVkZWQuCisJICoKKwkgKiBJ ZiB0aGUgaXRyZWUgaXMgaW52YWxpZGF0aW5nIHRoZW4gd2UgYXJlIG5vdCBhbGxvd2VkIHRvIGNo YW5nZQorCSAqIGl0LiBSZXRyeWluZyB1bnRpbCBpbnZhbGlkYXRpb24gaXMgZG9uZSBpcyB0cmlj a3kgZHVlIHRvIHRoZQorCSAqIHBvc3NpYmlsaXR5IGZvciBsaXZlIGxvY2ssIGluc3RlYWQgZGVm ZXIgdGhlIGFkZCB0bworCSAqIG1uX2l0cmVlX2ludl9lbmQoKSBzbyB0aGlzIGFsZ29yaXRobSBp cyBkZXRlcm1pbmlzdGljLgorCSAqCisJICogSW4gYWxsIGNhc2VzIHRoZSB2YWx1ZSBmb3IgdGhl IG1uaS0+bXJfaW52YWxpZGF0ZV9zZXEgc2hvdWxkIGJlCisJICogb2RkLCBzZWUgbW11X2ludGVy dmFsX3JlYWRfYmVnaW4oKQorCSAqLworCXNwaW5fbG9jaygmbW1uX21tLT5sb2NrKTsKKwlpZiAo bW1uX21tLT5hY3RpdmVfaW52YWxpZGF0ZV9yYW5nZXMpIHsKKwkJaWYgKG1uX2l0cmVlX2lzX2lu dmFsaWRhdGluZyhtbW5fbW0pKQorCQkJaGxpc3RfYWRkX2hlYWQoJm1uaS0+ZGVmZXJyZWRfaXRl bSwKKwkJCQkgICAgICAgJm1tbl9tbS0+ZGVmZXJyZWRfbGlzdCk7CisJCWVsc2UgeworCQkJbW1u X21tLT5pbnZhbGlkYXRlX3NlcSB8PSAxOworCQkJaW50ZXJ2YWxfdHJlZV9pbnNlcnQoJm1uaS0+ aW50ZXJ2YWxfdHJlZSwKKwkJCQkJICAgICAmbW1uX21tLT5pdHJlZSk7CisJCX0KKwkJbW5pLT5p bnZhbGlkYXRlX3NlcSA9IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXE7CisJfSBlbHNlIHsKKwkJV0FS Tl9PTihtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcobW1uX21tKSk7CisJCS8qCisJCSAqIFRoZSBz dGFydGluZyBzZXEgZm9yIGEgbW5pIG5vdCB1bmRlciBpbnZhbGlkYXRpb24gc2hvdWxkIGJlCisJ CSAqIG9kZCwgbm90IGVxdWFsIHRvIHRoZSBjdXJyZW50IGludmFsaWRhdGVfc2VxIGFuZAorCQkg KiBpbnZhbGlkYXRlX3NlcSBzaG91bGQgbm90ICd3cmFwJyB0byB0aGUgbmV3IHNlcSBhbnkgdGlt ZQorCQkgKiBzb29uLgorCQkgKi8KKwkJbW5pLT5pbnZhbGlkYXRlX3NlcSA9IG1tbl9tbS0+aW52 YWxpZGF0ZV9zZXEgLSAxOworCQlpbnRlcnZhbF90cmVlX2luc2VydCgmbW5pLT5pbnRlcnZhbF90 cmVlLCAmbW1uX21tLT5pdHJlZSk7CisJfQorCXNwaW5fdW5sb2NrKCZtbW5fbW0tPmxvY2spOwor CXJldHVybiAwOworfQorCisvKioKKyAqIG1tdV9pbnRlcnZhbF9ub3RpZmllcl9pbnNlcnQgLSBJ bnNlcnQgYW4gaW50ZXJ2YWwgbm90aWZpZXIKKyAqIEBtbmk6IEludGVydmFsIG5vdGlmaWVyIHRv IHJlZ2lzdGVyCisgKiBAc3RhcnQ6IFN0YXJ0aW5nIHZpcnR1YWwgYWRkcmVzcyB0byBtb25pdG9y CisgKiBAbGVuZ3RoOiBMZW5ndGggb2YgdGhlIHJhbmdlIHRvIG1vbml0b3IKKyAqIEBtbSA6IG1t X3N0cnVjdCB0byBhdHRhY2ggdG8KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHN1YnNjcmliZXMgdGhl IGludGVydmFsIG5vdGlmaWVyIGZvciBub3RpZmljYXRpb25zIGZyb20gdGhlCisgKiBtbS4gIFVw b24gcmV0dXJuIHRoZSBvcHMgcmVsYXRlZCB0byBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgd2lsbCBi ZSBjYWxsZWQKKyAqIHdoZW5ldmVyIGFuIGV2ZW50IHRoYXQgaW50ZXJzZWN0cyB3aXRoIHRoZSBn aXZlbiByYW5nZSBvY2N1cnMuCisgKgorICogVXBvbiByZXR1cm4gdGhlIHJhbmdlX25vdGlmaWVy IG1heSBub3QgYmUgcHJlc2VudCBpbiB0aGUgaW50ZXJ2YWwgdHJlZSB5ZXQuCisgKiBUaGUgY2Fs bGVyIG11c3QgdXNlIHRoZSBub3JtYWwgaW50ZXJ2YWwgbm90aWZpZXIgcmVhZCBmbG93IHZpYQor ICogbW11X2ludGVydmFsX3JlYWRfYmVnaW4oKSB0byBlc3RhYmxpc2ggU1BURXMgZm9yIHRoaXMg cmFuZ2UuCisgKi8KK2ludCBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfaW5zZXJ0KHN0cnVjdCBtbXVf aW50ZXJ2YWxfbm90aWZpZXIgKm1uaSwKKwkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2ln bmVkIGxvbmcgc3RhcnQsCisJCQkJIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLAorCQkJCSBjb25zdCBz dHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyX29wcyAqb3BzKQoreworCXN0cnVjdCBtbXVfbm90 aWZpZXJfbW0gKm1tbl9tbTsKKwlpbnQgcmV0OworCisJbWlnaHRfbG9jaygmbW0tPm1tYXBfc2Vt KTsKKworCW1tbl9tbSA9IHNtcF9sb2FkX2FjcXVpcmUoJm1tLT5tbXVfbm90aWZpZXJfbW0pOwor CWlmICghbW1uX21tIHx8ICFtbW5fbW0tPmhhc19pdHJlZSkgeworCQlyZXQgPSBtbXVfbm90aWZp ZXJfcmVnaXN0ZXIoTlVMTCwgbW0pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJbW1u X21tID0gbW0tPm1tdV9ub3RpZmllcl9tbTsKKwl9CisJcmV0dXJuIF9fbW11X2ludGVydmFsX25v dGlmaWVyX2luc2VydChtbmksIG1tLCBtbW5fbW0sIHN0YXJ0LCBsZW5ndGgsCisJCQkJCSAgICAg IG9wcyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtbXVfaW50ZXJ2YWxfbm90aWZpZXJfaW5zZXJ0 KTsKKworaW50IG1tdV9pbnRlcnZhbF9ub3RpZmllcl9pbnNlcnRfbG9ja2VkKAorCXN0cnVjdCBt bXVfaW50ZXJ2YWxfbm90aWZpZXIgKm1uaSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJdW5zaWdu ZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW5ndGgsCisJY29uc3Qgc3RydWN0IG1tdV9p bnRlcnZhbF9ub3RpZmllcl9vcHMgKm9wcykKK3sKKwlzdHJ1Y3QgbW11X25vdGlmaWVyX21tICpt bW5fbW07CisJaW50IHJldDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoJm1tLT5tbWFw X3NlbSk7CisKKwltbW5fbW0gPSBtbS0+bW11X25vdGlmaWVyX21tOworCWlmICghbW1uX21tIHx8 ICFtbW5fbW0tPmhhc19pdHJlZSkgeworCQlyZXQgPSBfX21tdV9ub3RpZmllcl9yZWdpc3RlcihO VUxMLCBtbSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQltbW5fbW0gPSBtbS0+bW11 X25vdGlmaWVyX21tOworCX0KKwlyZXR1cm4gX19tbXVfaW50ZXJ2YWxfbm90aWZpZXJfaW5zZXJ0 KG1uaSwgbW0sIG1tbl9tbSwgc3RhcnQsIGxlbmd0aCwKKwkJCQkJICAgICAgb3BzKTsKK30KK0VY UE9SVF9TWU1CT0xfR1BMKG1tdV9pbnRlcnZhbF9ub3RpZmllcl9pbnNlcnRfbG9ja2VkKTsKKwor LyoqCisgKiBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfcmVtb3ZlIC0gUmVtb3ZlIGEgaW50ZXJ2YWwg bm90aWZpZXIKKyAqIEBtbmk6IEludGVydmFsIG5vdGlmaWVyIHRvIHVucmVnaXN0ZXIKKyAqCisg KiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcGFpcmVkIHdpdGggbW11X2ludGVydmFsX25vdGlmaWVy X2luc2VydCgpLiBJdCBjYW5ub3QgYmUKKyAqIGNhbGxlZCBmcm9tIGFueSBvcHMgY2FsbGJhY2su CisgKgorICogT25jZSB0aGlzIHJldHVybnMgb3BzIGNhbGxiYWNrcyBhcmUgbm8gbG9uZ2VyIHJ1 bm5pbmcgb24gb3RoZXIgQ1BVcyBhbmQKKyAqIHdpbGwgbm90IGJlIGNhbGxlZCBpbiBmdXR1cmUu CisgKi8KK3ZvaWQgbW11X2ludGVydmFsX25vdGlmaWVyX3JlbW92ZShzdHJ1Y3QgbW11X2ludGVy dmFsX25vdGlmaWVyICptbmkpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBtbmktPm1tOwor CXN0cnVjdCBtbXVfbm90aWZpZXJfbW0gKm1tbl9tbSA9IG1tLT5tbXVfbm90aWZpZXJfbW07CisJ dW5zaWduZWQgbG9uZyBzZXEgPSAwOworCisJbWlnaHRfc2xlZXAoKTsKKworCXNwaW5fbG9jaygm bW1uX21tLT5sb2NrKTsKKwlpZiAobW5faXRyZWVfaXNfaW52YWxpZGF0aW5nKG1tbl9tbSkpIHsK KwkJLyoKKwkJICogcmVtb3ZlIGlzIGJlaW5nIGNhbGxlZCBhZnRlciBpbnNlcnQgcHV0IHRoaXMg b24gdGhlCisJCSAqIGRlZmVycmVkIGxpc3QsIGJ1dCBiZWZvcmUgdGhlIGRlZmVycmVkIGxpc3Qg d2FzIHByb2Nlc3NlZC4KKwkJICovCisJCWlmIChSQl9FTVBUWV9OT0RFKCZtbmktPmludGVydmFs X3RyZWUucmIpKSB7CisJCQlobGlzdF9kZWwoJm1uaS0+ZGVmZXJyZWRfaXRlbSk7CisJCX0gZWxz ZSB7CisJCQlobGlzdF9hZGRfaGVhZCgmbW5pLT5kZWZlcnJlZF9pdGVtLAorCQkJCSAgICAgICAm bW1uX21tLT5kZWZlcnJlZF9saXN0KTsKKwkJCXNlcSA9IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXE7 CisJCX0KKwl9IGVsc2UgeworCQlXQVJOX09OKFJCX0VNUFRZX05PREUoJm1uaS0+aW50ZXJ2YWxf dHJlZS5yYikpOworCQlpbnRlcnZhbF90cmVlX3JlbW92ZSgmbW5pLT5pbnRlcnZhbF90cmVlLCAm bW1uX21tLT5pdHJlZSk7CisJfQorCXNwaW5fdW5sb2NrKCZtbW5fbW0tPmxvY2spOworCisJLyoK KwkgKiBUaGUgcG9zc2libGUgc2xlZXAgb24gcHJvZ3Jlc3MgaW4gdGhlIGludmFsaWRhdGlvbiBy ZXF1aXJlcyB0aGUKKwkgKiBjYWxsZXIgbm90IGhvbGQgYW55IGxvY2tzIGhlbGQgYnkgaW52YWxp ZGF0aW9uIGNhbGxiYWNrcy4KKwkgKi8KKwlsb2NrX21hcF9hY3F1aXJlKCZfX21tdV9ub3RpZmll cl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X21hcCk7CisJbG9ja19tYXBfcmVsZWFzZSgmX19tbXVf bm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9tYXApOworCWlmIChzZXEpCisJCXdhaXRf ZXZlbnQobW1uX21tLT53cSwKKwkJCSAgIFJFQURfT05DRShtbW5fbW0tPmludmFsaWRhdGVfc2Vx KSAhPSBzZXEpOworCisJLyogcGFpcnMgd2l0aCBtbWdyYWIgaW4gbW11X2ludGVydmFsX25vdGlm aWVyX2luc2VydCgpICovCisJbW1kcm9wKG1tKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1tdV9p bnRlcnZhbF9ub3RpZmllcl9yZW1vdmUpOworCiAvKioKICAqIG1tdV9ub3RpZmllcl9zeW5jaHJv bml6ZSAtIEVuc3VyZSBhbGwgbW11X25vdGlmaWVycyBhcmUgZnJlZWQKICAqCi0tIAoyLjI0LjAK CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2 ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 079DBC43331 for ; Tue, 12 Nov 2019 20:46:49 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D8D062067B for ; Tue, 12 Nov 2019 20:46:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D8D062067B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ziepe.ca Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=amd-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 7BF9D6EBE2; Tue, 12 Nov 2019 20:46:44 +0000 (UTC) Received: from mail-qt1-x843.google.com (mail-qt1-x843.google.com [IPv6:2607:f8b0:4864:20::843]) by gabe.freedesktop.org (Postfix) with ESMTPS id 06EFD6E432 for ; Tue, 12 Nov 2019 20:22:52 +0000 (UTC) Received: by mail-qt1-x843.google.com with SMTP id t8so21258821qtc.6 for ; Tue, 12 Nov 2019 12:22:51 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=AohGCprkDkOOMUYunK/FtQ4kWdIHsBqP71f8TbLipXw=; b=MFP6V0CVVufTAPpLiGLugCTOZ4TKJCumW+CbDPnbw0O1Js7OEdjYNfrWzP50WrfYSm WNueiNwNbuk0Rv8JdDVEKa4gSdt8W0p/1FRoAagHO6WG3D7COM4uSZ8K1oCfm3SvnUkE ok3e5gYDw/WDP56iQ/bijcgbkhPMYNyKtQ9WSOXj1vSxoymqTyaUtwCHcNVOdtJQ2Pcv ML6Zkz7BkeYmtUAOWu95hizR5OhWfqABB1W4XO0yLQx0EUAzg94yWxfBck4SuDXocpEC XTLXb5rvg4UsovNtOX+aBgy1hO9DbiSM8WobHjVkxsevxr8UqXCYRV1MuqYbrUgGvR29 xlOA== X-Gm-Message-State: APjAAAX/kyTwzmiC5x8DKUMoz+p/XjvBYe44KecaXseW2Rdo4CKLmpxQ sg2r7tneEqcM0ZDJTo1wag6uMw== X-Google-Smtp-Source: APXvYqyzRgnuxF6MTWdwAX3i+6gm7pQR3HJZHmzuGmXJFaM4kcxjZGjbdUgF3CJjBakscZI6XxWBuw== X-Received: by 2002:aed:26e2:: with SMTP id q89mr17779688qtd.391.1573590170602; Tue, 12 Nov 2019 12:22:50 -0800 (PST) Received: from ziepe.ca (hlfxns017vw-142-162-113-180.dhcp-dynamic.fibreop.ns.bellaliant.net. [142.162.113.180]) by smtp.gmail.com with ESMTPSA id e17sm11976084qtk.65.2019.11.12.12.22.47 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 12 Nov 2019 12:22:48 -0800 (PST) Received: from jgg by mlx.ziepe.ca with local (Exim 4.90_1) (envelope-from ) id 1iUcgZ-0003jg-6u; Tue, 12 Nov 2019 16:22:47 -0400 From: Jason Gunthorpe To: linux-mm@kvack.org, Jerome Glisse , Ralph Campbell , John Hubbard , Felix.Kuehling@amd.com Subject: [PATCH v3 02/14] mm/mmu_notifier: add an interval tree notifier Date: Tue, 12 Nov 2019 16:22:19 -0400 Message-Id: <20191112202231.3856-3-jgg@ziepe.ca> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191112202231.3856-1-jgg@ziepe.ca> References: <20191112202231.3856-1-jgg@ziepe.ca> MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 12 Nov 2019 20:46:43 +0000 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ziepe.ca; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=AohGCprkDkOOMUYunK/FtQ4kWdIHsBqP71f8TbLipXw=; b=CfIn8g3m3gJmBOSym4g6ANgmGqb0E39HTiSkdTTuMr/hLmR88KgXDzT9ShhwV/GFkj CV/NNpgC+CtKQxRHdfqyDYF9EQDvtqDwnkc7qcCqX66Zb0hrse8N8xqAvEh4Z7C8md3B LwrsmwpIS5J/B7Ww+SL2zRtWwJ/wj6JkNJvFQLTD3qunUa6EFXhWSiXH5uwus2vXqfjf 0rPU5ArUsuEnlGLBL/DgVmVHh7b62kLdHWKgVHAhrpbphs7Q+jzAUsNR9Q7kEOh+T0bC 0wj605m5TYYJqYFgcmtP+kDcCGCBcenuhv5EAYeDRnzSyXKokBxSXSSx/5UtdRMrof4p iAOw== X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Juergen Gross , David Zhou , Mike Marciniszyn , Stefano Stabellini , Philip Yang , Oleksandr Andrushchenko , linux-rdma@vger.kernel.org, nouveau@lists.freedesktop.org, Dennis Dalessandro , amd-gfx@lists.freedesktop.org, Christoph Hellwig , Jason Gunthorpe , dri-devel@lists.freedesktop.org, Alex Deucher , xen-devel@lists.xenproject.org, Boris Ostrovsky , Petr Cvek , =?UTF-8?q?Christian=20K=C3=B6nig?= , Ben Skeggs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" Message-ID: <20191112202219.K9H6bDLFcak4gTa_jincfReO7JOFdCyiKj05aARFFPM@z> RnJvbTogSmFzb24gR3VudGhvcnBlIDxqZ2dAbWVsbGFub3guY29tPgoKT2YgdGhlIDEzIHVzZXJz IG9mIG1tdV9ub3RpZmllcnMsIDggb2YgdGhlbSB1c2Ugb25seQppbnZhbGlkYXRlX3JhbmdlX3N0 YXJ0L2VuZCgpIGFuZCBpbW1lZGlhdGVseSBpbnRlcnNlY3QgdGhlCm1tdV9ub3RpZmllcl9yYW5n ZSB3aXRoIHNvbWUga2luZCBvZiBpbnRlcm5hbCBsaXN0IG9mIFZBcy4gIDQgdXNlIGFuCmludGVy dmFsIHRyZWUgKGk5MTVfZ2VtLCByYWRlb25fbW4sIHVtZW1fb2RwLCBoZmkxKS4gNCB1c2UgYSBs aW5rZWQgbGlzdApvZiBzb21lIGtpbmQgKHNjaWZfZG1hLCB2aG9zdCwgZ250ZGV2LCBobW0pCgpB bmQgdGhlIHJlbWFpbmluZyA1IGVpdGhlciBkb24ndCB1c2UgaW52YWxpZGF0ZV9yYW5nZV9zdGFy dCgpIG9yIGRvIHNvbWUKc3BlY2lhbCB0aGluZyB3aXRoIGl0LgoKSXQgdHVybnMgb3V0IHRoYXQg YnVpbGRpbmcgYSBjb3JyZWN0IHNjaGVtZSB3aXRoIGFuIGludGVydmFsIHRyZWUgaXMKcHJldHR5 IGNvbXBsaWNhdGVkLCBwYXJ0aWN1bGFybHkgaWYgdGhlIHVzZSBjYXNlIGlzIHN5bmNocm9uaXpp bmcgYWdhaW5zdAphbm90aGVyIHRocmVhZCBkb2luZyBnZXRfdXNlcl9wYWdlcygpLiAgTWFueSBv ZiB0aGVzZSBpbXBsZW1lbnRhdGlvbnMgaGF2ZQp2YXJpb3VzIHN1YnRsZSBhbmQgZGlmZmljdWx0 IHRvIGZpeCByYWNlcy4KClRoaXMgYXBwcm9hY2ggcHV0cyB0aGUgaW50ZXJ2YWwgdHJlZSBhcyBj b21tb24gY29kZSBhdCB0aGUgdG9wIG9mIHRoZSBtbXUKbm90aWZpZXIgY2FsbCB0cmVlIGFuZCBp bXBsZW1lbnRzIGEgc2hhcmVhYmxlIGxvY2tpbmcgc2NoZW1lLgoKSXQgaW5jbHVkZXM6CiAtIEFu IGludGVydmFsIHRyZWUgdHJhY2tpbmcgVkEgcmFuZ2VzLCB3aXRoIHBlci1yYW5nZSBjYWxsYmFj a3MKIC0gQSByZWFkL3dyaXRlIGxvY2tpbmcgc2NoZW1lIGZvciB0aGUgaW50ZXJ2YWwgdHJlZSB0 aGF0IGF2b2lkcwogICBzbGVlcGluZyBpbiB0aGUgbm90aWZpZXIgcGF0aCAoZm9yIE9PTSBraWxs ZXIpCiAtIEEgc2VxdWVuY2UgY291bnRlciBiYXNlZCBjb2xsaXNpb24tcmV0cnkgbG9ja2luZyBz Y2hlbWUgdG8gdGVsbAogICBkZXZpY2UgcGFnZSBmYXVsdCB0aGF0IGEgVkEgcmFuZ2UgaXMgYmVp bmcgY29uY3VycmVudGx5IGludmFsaWRhdGVkLgoKVGhpcyBpcyBiYXNlZCBvbiB2YXJpb3VzIGlk ZWFzOgotIGhtbSBhY2N1bXVsYXRlcyBpbnZhbGlkYXRlZCBWQSByYW5nZXMgYW5kIHJlbGVhc2Vz IHRoZW0gd2hlbiBhbGwKICBpbnZhbGlkYXRlcyBhcmUgZG9uZSwgdmlhIGFjdGl2ZV9pbnZhbGlk YXRlX3JhbmdlcyBjb3VudC4KICBUaGlzIGFwcHJvYWNoIGF2b2lkcyBoYXZpbmcgdG8gaW50ZXJz ZWN0IHRoZSBpbnRlcnZhbCB0cmVlIHR3aWNlIChhcwogIHVtZW1fb2RwIGRvZXMpIGF0IHRoZSBw b3RlbnRpYWwgY29zdCBvZiBhIGxvbmdlciBkZXZpY2UgcGFnZSBmYXVsdC4KCi0ga3ZtL3VtZW1f b2RwIHVzZSBhIHNlcXVlbmNlIGNvdW50ZXIgdG8gZHJpdmUgdGhlIGNvbGxpc2lvbiByZXRyeSwK ICB2aWEgaW52YWxpZGF0ZV9zZXEKCi0gYSBkZWZlcnJlZCB3b3JrIHRvZG8gbGlzdCBvbiB1bmxv Y2sgc2NoZW1lIGxpa2UgUlROTCwgdmlhIGRlZmVycmVkX2xpc3QuCiAgVGhpcyBtYWtlcyBhZGRp bmcvcmVtb3ZpbmcgaW50ZXJ2YWwgdHJlZSBtZW1iZXJzIG1vcmUgZGV0ZXJtaW5pc3RpYwoKLSBz ZXFsb2NrLCBleGNlcHQgdGhpcyB2ZXJzaW9uIG1ha2VzIHRoZSBzZXFsb2NrIGlkZWEgbXVsdGkt aG9sZGVyIG9uIHRoZQogIHdyaXRlIHNpZGUgYnkgcHJvdGVjdGluZyBpdCB3aXRoIGFjdGl2ZV9p bnZhbGlkYXRlX3JhbmdlcyBhbmQgYSBzcGlubG9jawoKVG8gbWluaW1pemUgTU0gb3ZlcmhlYWQg d2hlbiBvbmx5IHRoZSBpbnRlcnZhbCB0cmVlIGlzIGJlaW5nIHVzZWQsIHRoZQplbnRpcmUgU1JD VSBhbmQgaGxpc3Qgb3ZlcmhlYWRzIGFyZSBkcm9wcGVkIHVzaW5nIHNvbWUgc2ltcGxlCmJyYW5j aGVzLiBTaW1pbGFybHkgdGhlIGludGVydmFsIHRyZWUgb3ZlcmhlYWQgaXMgZHJvcHBlZCB3aGVu IGluIGhsaXN0Cm1vZGUuCgpUaGUgb3ZlcmhlYWQgZnJvbSB0aGUgbWFuZGF0b3J5IHNwaW5sb2Nr IGlzIGJyb2FkbHkgdGhlIHNhbWUgYXMgbW9zdCBvZgpleGlzdGluZyB1c2VycyB3aGljaCBhbHJl YWR5IGhhZCBhIGxvY2sgKG9yIHR3bykgb2Ygc29tZSBzb3J0IG9uIHRoZQppbnZhbGlkYXRpb24g cGF0aC4KCkFja2VkLWJ5OiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5j b20+ClRlc3RlZC1ieTogUGhpbGlwIFlhbmcgPFBoaWxpcC5ZYW5nQGFtZC5jb20+ClRlc3RlZC1i eTogUmFscGggQ2FtcGJlbGwgPHJjYW1wYmVsbEBudmlkaWEuY29tPgpSZXZpZXdlZC1ieTogSm9o biBIdWJiYXJkIDxqaHViYmFyZEBudmlkaWEuY29tPgpTaWduZWQtb2ZmLWJ5OiBKYXNvbiBHdW50 aG9ycGUgPGpnZ0BtZWxsYW5veC5jb20+Ci0tLQogaW5jbHVkZS9saW51eC9tbXVfbm90aWZpZXIu aCB8IDEwMSArKysrKysrCiBtbS9LY29uZmlnICAgICAgICAgICAgICAgICAgIHwgICAxICsKIG1t L21tdV9ub3RpZmllci5jICAgICAgICAgICAgfCA1NTIgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrLS0KIDMgZmlsZXMgY2hhbmdlZCwgNjI4IGluc2VydGlvbnMoKyksIDI2IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW11X25vdGlmaWVyLmggYi9pbmNs dWRlL2xpbnV4L21tdV9ub3RpZmllci5oCmluZGV4IDEyYmQ2MDNkMzE4Y2U3Li45ZTZjYWE4ZWNk MTkzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXVfbm90aWZpZXIuaAorKysgYi9pbmNs dWRlL2xpbnV4L21tdV9ub3RpZmllci5oCkBAIC02LDEwICs2LDEyIEBACiAjaW5jbHVkZSA8bGlu dXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tbV90eXBlcy5oPgogI2luY2x1ZGUgPGxp bnV4L3NyY3UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnZhbF90cmVlLmg+CiAKIHN0cnVjdCBt bXVfbm90aWZpZXJfbW07CiBzdHJ1Y3QgbW11X25vdGlmaWVyOwogc3RydWN0IG1tdV9ub3RpZmll cl9yYW5nZTsKK3N0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXI7CiAKIC8qKgogICogZW51bSBt bXVfbm90aWZpZXJfZXZlbnQgLSByZWFzb24gZm9yIHRoZSBtbXUgbm90aWZpZXIgY2FsbGJhY2sK QEAgLTMyLDYgKzM0LDkgQEAgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZTsKICAqIGFjY2VzcyBm bGFncykuIFVzZXIgc2hvdWxkIHNvZnQgZGlydHkgdGhlIHBhZ2UgaW4gdGhlIGVuZCBjYWxsYmFj ayB0byBtYWtlCiAgKiBzdXJlIHRoYXQgYW55b25lIHJlbHlpbmcgb24gc29mdCBkaXJ0eW5lc3Mg Y2F0Y2ggcGFnZXMgdGhhdCBtaWdodCBiZSB3cml0dGVuCiAgKiB0aHJvdWdoIG5vbiBDUFUgbWFw cGluZ3MuCisgKgorICogQE1NVV9OT1RJRllfUkVMRUFTRTogdXNlZCBkdXJpbmcgbW11X2ludGVy dmFsX25vdGlmaWVyIGludmFsaWRhdGUgdG8gc2lnbmFsCisgKiB0aGF0IHRoZSBtbSByZWZjb3Vu dCBpcyB6ZXJvIGFuZCB0aGUgcmFuZ2UgaXMgbm8gbG9uZ2VyIGFjY2Vzc2libGUuCiAgKi8KIGVu dW0gbW11X25vdGlmaWVyX2V2ZW50IHsKIAlNTVVfTk9USUZZX1VOTUFQID0gMCwKQEAgLTM5LDYg KzQ0LDcgQEAgZW51bSBtbXVfbm90aWZpZXJfZXZlbnQgewogCU1NVV9OT1RJRllfUFJPVEVDVElP Tl9WTUEsCiAJTU1VX05PVElGWV9QUk9URUNUSU9OX1BBR0UsCiAJTU1VX05PVElGWV9TT0ZUX0RJ UlRZLAorCU1NVV9OT1RJRllfUkVMRUFTRSwKIH07CiAKICNkZWZpbmUgTU1VX05PVElGSUVSX1JB TkdFX0JMT0NLQUJMRSAoMSA8PCAwKQpAQCAtMjIyLDYgKzIyOCwyNiBAQCBzdHJ1Y3QgbW11X25v dGlmaWVyIHsKIAl1bnNpZ25lZCBpbnQgdXNlcnM7CiB9OwogCisvKioKKyAqIHN0cnVjdCBtbXVf aW50ZXJ2YWxfbm90aWZpZXJfb3BzCisgKiBAaW52YWxpZGF0ZTogVXBvbiByZXR1cm4gdGhlIGNh bGxlciBtdXN0IHN0b3AgdXNpbmcgYW55IFNQVEVzIHdpdGhpbiB0aGlzCisgKiAgICAgICAgICAg ICAgcmFuZ2UuIFRoaXMgZnVuY3Rpb24gY2FuIHNsZWVwLiBSZXR1cm4gZmFsc2Ugb25seSBpZiBz bGVlcGluZworICogICAgICAgICAgICAgIHdhcyByZXF1aXJlZCBidXQgbW11X25vdGlmaWVyX3Jh bmdlX2Jsb2NrYWJsZShyYW5nZSkgaXMgZmFsc2UuCisgKi8KK3N0cnVjdCBtbXVfaW50ZXJ2YWxf bm90aWZpZXJfb3BzIHsKKwlib29sICgqaW52YWxpZGF0ZSkoc3RydWN0IG1tdV9pbnRlcnZhbF9u b3RpZmllciAqbW5pLAorCQkJICAgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFu Z2UsCisJCQkgICB1bnNpZ25lZCBsb25nIGN1cl9zZXEpOworfTsKKworc3RydWN0IG1tdV9pbnRl cnZhbF9ub3RpZmllciB7CisJc3RydWN0IGludGVydmFsX3RyZWVfbm9kZSBpbnRlcnZhbF90cmVl OworCWNvbnN0IHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfb3BzICpvcHM7CisJc3RydWN0 IG1tX3N0cnVjdCAqbW07CisJc3RydWN0IGhsaXN0X25vZGUgZGVmZXJyZWRfaXRlbTsKKwl1bnNp Z25lZCBsb25nIGludmFsaWRhdGVfc2VxOworfTsKKwogI2lmZGVmIENPTkZJR19NTVVfTk9USUZJ RVIKIAogI2lmZGVmIENPTkZJR19MT0NLREVQCkBAIC0yNjMsNiArMjg5LDgxIEBAIGV4dGVybiBp bnQgX19tbXVfbm90aWZpZXJfcmVnaXN0ZXIoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sCiAJCQkJ ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogZXh0ZXJuIHZvaWQgbW11X25vdGlmaWVyX3VucmVn aXN0ZXIoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sCiAJCQkJICAgIHN0cnVjdCBtbV9zdHJ1Y3Qg Km1tKTsKKwordW5zaWduZWQgbG9uZyBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihzdHJ1Y3QgbW11 X2ludGVydmFsX25vdGlmaWVyICptbmkpOworaW50IG1tdV9pbnRlcnZhbF9ub3RpZmllcl9pbnNl cnQoc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbW5pLAorCQkJCSBzdHJ1Y3QgbW1fc3Ry dWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkgdW5zaWduZWQgbG9uZyBsZW5ndGgs CisJCQkJIGNvbnN0IHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfb3BzICpvcHMpOworaW50 IG1tdV9pbnRlcnZhbF9ub3RpZmllcl9pbnNlcnRfbG9ja2VkKAorCXN0cnVjdCBtbXVfaW50ZXJ2 YWxfbm90aWZpZXIgKm1uaSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJdW5zaWduZWQgbG9uZyBz dGFydCwgdW5zaWduZWQgbG9uZyBsZW5ndGgsCisJY29uc3Qgc3RydWN0IG1tdV9pbnRlcnZhbF9u b3RpZmllcl9vcHMgKm9wcyk7Cit2b2lkIG1tdV9pbnRlcnZhbF9ub3RpZmllcl9yZW1vdmUoc3Ry dWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbW5pKTsKKworLyoqCisgKiBtbXVfaW50ZXJ2YWxf c2V0X3NlcSAtIFNhdmUgdGhlIGludmFsaWRhdGlvbiBzZXF1ZW5jZQorICogQG1uaSAtIFRoZSBt bmkgcGFzc2VkIHRvIGludmFsaWRhdGUKKyAqIEBjdXJfc2VxIC0gVGhlIGN1cl9zZXEgcGFzc2Vk IHRvIHRoZSBpbnZhbGlkYXRlKCkgY2FsbGJhY2sKKyAqCisgKiBUaGlzIG11c3QgYmUgY2FsbGVk IHVuY29uZGl0aW9uYWxseSBmcm9tIHRoZSBpbnZhbGlkYXRlIGNhbGxiYWNrIG9mIGEKKyAqIHN0 cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfb3BzIHVuZGVyIHRoZSBzYW1lIGxvY2sgdGhhdCBp cyB1c2VkIHRvIGNhbGwKKyAqIG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCkuIEl0IHVwZGF0ZXMg dGhlIHNlcXVlbmNlIG51bWJlciBmb3IgbGF0ZXIgdXNlIGJ5CisgKiBtbXVfaW50ZXJ2YWxfcmVh ZF9yZXRyeSgpLiBUaGUgcHJvdmlkZWQgY3VyX3NlcSB3aWxsIGFsd2F5cyBiZSBvZGQuCisgKgor ICogSWYgdGhlIGNhbGxlciBkb2VzIG5vdCBjYWxsIG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKCkg b3IKKyAqIG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCkgdGhlbiB0aGlzIGNhbGwgaXMgbm90IHJl cXVpcmVkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbW11X2ludGVydmFsX3NldF9zZXEoc3Ry dWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbW5pLAorCQkJCQl1bnNpZ25lZCBsb25nIGN1cl9z ZXEpCit7CisJV1JJVEVfT05DRShtbmktPmludmFsaWRhdGVfc2VxLCBjdXJfc2VxKTsKK30KKwor LyoqCisgKiBtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeSAtIEVuZCBhIHJlYWQgc2lkZSBjcml0aWNh bCBzZWN0aW9uIGFnYWluc3QgYSBWQSByYW5nZQorICogbW5pOiBUaGUgcmFuZ2UKKyAqIHNlcTog VGhlIHJldHVybiBvZiB0aGUgcGFpcmVkIG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKCkKKyAqCisg KiBUaGlzIE1VU1QgYmUgY2FsbGVkIHVuZGVyIGEgdXNlciBwcm92aWRlZCBsb2NrIHRoYXQgaXMg YWxzbyBoZWxkCisgKiB1bmNvbmRpdGlvbmFsbHkgYnkgb3AtPmludmFsaWRhdGUoKSB3aGVuIGl0 IGNhbGxzIG1tdV9pbnRlcnZhbF9zZXRfc2VxKCkuCisgKgorICogRWFjaCBjYWxsIHNob3VsZCBi ZSBwYWlyZWQgd2l0aCBhIHNpbmdsZSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbigpIGFuZAorICog c2hvdWxkIGJlIHVzZWQgdG8gY29uY2x1ZGUgdGhlIHJlYWQgc2lkZS4KKyAqCisgKiBSZXR1cm5z IHRydWUgaWYgYW4gaW52YWxpZGF0aW9uIGNvbGxpZGVkIHdpdGggdGhpcyBjcml0aWNhbCBzZWN0 aW9uLCBhbmQKKyAqIHRoZSBjYWxsZXIgc2hvdWxkIHJldHJ5LgorICovCitzdGF0aWMgaW5saW5l IGJvb2wgbW11X2ludGVydmFsX3JlYWRfcmV0cnkoc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmll ciAqbW5pLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHNlcSkKK3sKKwlyZXR1cm4gbW5pLT5pbnZh bGlkYXRlX3NlcSAhPSBzZXE7Cit9CisKKy8qKgorICogbW11X2ludGVydmFsX2NoZWNrX3JldHJ5 IC0gVGVzdCBpZiBhIGNvbGxpc2lvbiBoYXMgb2NjdXJyZWQKKyAqIG1uaTogVGhlIHJhbmdlCisg KiBzZXE6IFRoZSByZXR1cm4gb2YgdGhlIG1hdGNoaW5nIG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2lu KCkKKyAqCisgKiBUaGlzIGNhbiBiZSB1c2VkIGluIHRoZSBjcml0aWNhbCBzZWN0aW9uIGJldHdl ZW4gbW11X2ludGVydmFsX3JlYWRfYmVnaW4oKQorICogYW5kIG1tdV9pbnRlcnZhbF9yZWFkX3Jl dHJ5KCkuICBBIHJldHVybiBvZiB0cnVlIGluZGljYXRlcyBhbiBpbnZhbGlkYXRpb24KKyAqIGhh cyBjb2xsaWRlZCB3aXRoIHRoaXMgY3JpdGljYWwgcmVnaW9uIGFuZCBhIGZ1dHVyZQorICogbW11 X2ludGVydmFsX3JlYWRfcmV0cnkoKSB3aWxsIHJldHVybiB0cnVlLgorICoKKyAqIEZhbHNlIGlz IG5vdCByZWxpYWJsZSBhbmQgb25seSBzdWdnZXN0cyBhIGNvbGxpc2lvbiBtYXkgbm90IGhhdmUK KyAqIG9jY3VyZWQuIEl0IGNhbiBiZSBjYWxsZWQgbWFueSB0aW1lcyBhbmQgZG9lcyBub3QgaGF2 ZSB0byBob2xkIHRoZSB1c2VyCisgKiBwcm92aWRlZCBsb2NrLgorICoKKyAqIFRoaXMgY2FsbCBj YW4gYmUgdXNlZCBhcyBwYXJ0IG9mIGxvb3BzIGFuZCBvdGhlciBleHBlbnNpdmUgb3BlcmF0aW9u cyB0bworICogZXhwZWRpdGUgYSByZXRyeS4KKyAqLworc3RhdGljIGlubGluZSBib29sIG1tdV9p bnRlcnZhbF9jaGVja19yZXRyeShzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyICptbmksCisJ CQkJCSAgICB1bnNpZ25lZCBsb25nIHNlcSkKK3sKKwkvKiBQYWlycyB3aXRoIHRoZSBXUklURV9P TkNFIGluIG1tdV9pbnRlcnZhbF9zZXRfc2VxKCkgKi8KKwlyZXR1cm4gUkVBRF9PTkNFKG1uaS0+ aW52YWxpZGF0ZV9zZXEpICE9IHNlcTsKK30KKwogZXh0ZXJuIHZvaWQgX19tbXVfbm90aWZpZXJf bW1fZGVzdHJveShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiBleHRlcm4gdm9pZCBfX21tdV9ub3Rp Zmllcl9yZWxlYXNlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKIGV4dGVybiBpbnQgX19tbXVfbm90 aWZpZXJfY2xlYXJfZmx1c2hfeW91bmcoc3RydWN0IG1tX3N0cnVjdCAqbW0sCmRpZmYgLS1naXQg YS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCBhNWRhZTlhN2ViNTEwYS4uZDBiNTA0NmQ5 YWVmZmQgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKKysrIGIvbW0vS2NvbmZpZwpAQCAtMjg0LDYg KzI4NCw3IEBAIGNvbmZpZyBWSVJUX1RPX0JVUwogY29uZmlnIE1NVV9OT1RJRklFUgogCWJvb2wK IAlzZWxlY3QgU1JDVQorCXNlbGVjdCBJTlRFUlZBTF9UUkVFCiAKIGNvbmZpZyBLU00KIAlib29s ICJFbmFibGUgS1NNIGZvciBwYWdlIG1lcmdpbmciCmRpZmYgLS1naXQgYS9tbS9tbXVfbm90aWZp ZXIuYyBiL21tL21tdV9ub3RpZmllci5jCmluZGV4IDM2NzY3MGNmZDAyYjdiLi44Y2NhZmIxMmY1 NjIyOCAxMDA2NDQKLS0tIGEvbW0vbW11X25vdGlmaWVyLmMKKysrIGIvbW0vbW11X25vdGlmaWVy LmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KICNpbmNsdWRl IDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lu dGVydmFsX3RyZWUuaD4KICNpbmNsdWRlIDxsaW51eC9zcmN1Lmg+CiAjaW5jbHVkZSA8bGludXgv cmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMzYsMTAgKzM3LDI1MyBA QCBzdHJ1Y3QgbG9ja2RlcF9tYXAgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFy dF9tYXAgPSB7CiBzdHJ1Y3QgbW11X25vdGlmaWVyX21tIHsKIAkvKiBhbGwgbW11IG5vdGlmaWVy cyByZWdpc3RlcmVkIGluIHRoaXMgbW0gYXJlIHF1ZXVlZCBpbiB0aGlzIGxpc3QgKi8KIAlzdHJ1 Y3QgaGxpc3RfaGVhZCBsaXN0OworCWJvb2wgaGFzX2l0cmVlOwogCS8qIHRvIHNlcmlhbGl6ZSB0 aGUgbGlzdCBtb2RpZmljYXRpb25zIGFuZCBobGlzdF91bmhhc2hlZCAqLwogCXNwaW5sb2NrX3Qg bG9jazsKKwl1bnNpZ25lZCBsb25nIGludmFsaWRhdGVfc2VxOworCXVuc2lnbmVkIGxvbmcgYWN0 aXZlX2ludmFsaWRhdGVfcmFuZ2VzOworCXN0cnVjdCByYl9yb290X2NhY2hlZCBpdHJlZTsKKwl3 YWl0X3F1ZXVlX2hlYWRfdCB3cTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCBkZWZlcnJlZF9saXN0Owog fTsKIAorLyoKKyAqIFRoaXMgaXMgYSBjb2xsaXNpb24tcmV0cnkgcmVhZC1zaWRlL3dyaXRlLXNp ZGUgJ2xvY2snLCBhIGxvdCBsaWtlIGEKKyAqIHNlcWNvdW50LCBob3dldmVyIHRoaXMgYWxsb3dz IG11bHRpcGxlIHdyaXRlLXNpZGVzIHRvIGhvbGQgaXQgYXQKKyAqIG9uY2UuIENvbmNlcHR1YWxs eSB0aGUgd3JpdGUgc2lkZSBpcyBwcm90ZWN0aW5nIHRoZSB2YWx1ZXMgb2YgdGhlIFBURXMgaW4K KyAqIHRoaXMgbW0sIHN1Y2ggdGhhdCBQVEVTIGNhbm5vdCBiZSByZWFkIGludG8gU1BURXMgKHNo YWRvdyBQVEVzKSB3aGlsZSBhbnkKKyAqIHdyaXRlciBleGlzdHMuCisgKgorICogTm90ZSB0aGF0 IHRoZSBjb3JlIG1tIGNyZWF0ZXMgbmVzdGVkIGludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKS9lbmQo KSByZWdpb25zCisgKiB3aXRoaW4gdGhlIHNhbWUgdGhyZWFkLCBhbmQgcnVucyBpbnZhbGlkYXRl X3JhbmdlX3N0YXJ0KCkvZW5kKCkgaW4gcGFyYWxsZWwKKyAqIG9uIG11bHRpcGxlIENQVXMuIFRo aXMgaXMgZGVzaWduZWQgdG8gbm90IHJlZHVjZSBjb25jdXJyZW5jeSBvciBibG9jaworICogcHJv Z3Jlc3Mgb24gdGhlIG1tIHNpZGUuCisgKgorICogQXMgYSBzZWNvbmRhcnkgZnVuY3Rpb24sIGhv bGRpbmcgdGhlIGZ1bGwgd3JpdGUgc2lkZSBhbHNvIHNlcnZlcyB0byBwcmV2ZW50CisgKiB3cml0 ZXJzIGZvciB0aGUgaXRyZWUsIHRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHRvIGF2b2lkIGV4dHJh IGxvY2tpbmcKKyAqIGR1cmluZyBpbnZhbGlkYXRlX3JhbmdlX3N0YXJ0L2VuZCBub3RpZmllcnMu CisgKgorICogVGhlIHdyaXRlIHNpZGUgaGFzIHR3byBzdGF0ZXMsIGZ1bGx5IGV4Y2x1ZGVkOgor ICogIC0gbW0tPmFjdGl2ZV9pbnZhbGlkYXRlX3JhbmdlcyAhPSAwCisgKiAgLSBtbm4tPmludmFs aWRhdGVfc2VxICYgMSA9PSBUcnVlIChvZGQpCisgKiAgLSBzb21lIHJhbmdlIG9uIHRoZSBtbV9z dHJ1Y3QgaXMgYmVpbmcgaW52YWxpZGF0ZWQKKyAqICAtIHRoZSBpdHJlZSBpcyBub3QgYWxsb3dl ZCB0byBjaGFuZ2UKKyAqCisgKiBBbmQgcGFydGlhbGx5IGV4Y2x1ZGVkOgorICogIC0gbW0tPmFj dGl2ZV9pbnZhbGlkYXRlX3JhbmdlcyAhPSAwCisgKiAgLSBtbm4tPmludmFsaWRhdGVfc2VxICYg MSA9PSBGYWxzZSAoZXZlbikKKyAqICAtIHNvbWUgcmFuZ2Ugb24gdGhlIG1tX3N0cnVjdCBpcyBi ZWluZyBpbnZhbGlkYXRlZAorICogIC0gdGhlIGl0cmVlIGlzIGFsbG93ZWQgdG8gY2hhbmdlCisg KgorICogT3BlcmF0aW9ucyBvbiBtbXVfbm90aWZpZXJfbW0tPmludmFsaWRhdGVfc2VxICh1bmRl ciBzcGlubG9jayk6CisgKiAgICBzZXEgfD0gMSAgIyBCZWdpbiB3cml0aW5nCisgKiAgICBzZXEr KyAgICAgIyBSZWxlYXNlIHRoZSB3cml0aW5nIHN0YXRlCisgKiAgICBzZXEgJiAxICAgIyBUcnVl IGlmIGEgd3JpdGVyIGV4aXN0cworICoKKyAqIFRoZSBsYXRlciBzdGF0ZSBhdm9pZHMgc29tZSBl eHBlbnNpdmUgd29yayBvbiBpbnZfZW5kIGluIHRoZSBjb21tb24gY2FzZSBvZgorICogbm8gbW5p IG1vbml0b3JpbmcgdGhlIFZBLgorICovCitzdGF0aWMgYm9vbCBtbl9pdHJlZV9pc19pbnZhbGlk YXRpbmcoc3RydWN0IG1tdV9ub3RpZmllcl9tbSAqbW1uX21tKQoreworCWxvY2tkZXBfYXNzZXJ0 X2hlbGQoJm1tbl9tbS0+bG9jayk7CisJcmV0dXJuIG1tbl9tbS0+aW52YWxpZGF0ZV9zZXEgJiAx OworfQorCitzdGF0aWMgc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqCittbl9pdHJlZV9p bnZfc3RhcnRfcmFuZ2Uoc3RydWN0IG1tdV9ub3RpZmllcl9tbSAqbW1uX21tLAorCQkJIGNvbnN0 IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlLAorCQkJIHVuc2lnbmVkIGxvbmcgKnNl cSkKK3sKKwlzdHJ1Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlICpub2RlOworCXN0cnVjdCBtbXVfaW50 ZXJ2YWxfbm90aWZpZXIgKnJlcyA9IE5VTEw7CisKKwlzcGluX2xvY2soJm1tbl9tbS0+bG9jayk7 CisJbW1uX21tLT5hY3RpdmVfaW52YWxpZGF0ZV9yYW5nZXMrKzsKKwlub2RlID0gaW50ZXJ2YWxf dHJlZV9pdGVyX2ZpcnN0KCZtbW5fbW0tPml0cmVlLCByYW5nZS0+c3RhcnQsCisJCQkJCXJhbmdl LT5lbmQgLSAxKTsKKwlpZiAobm9kZSkgeworCQltbW5fbW0tPmludmFsaWRhdGVfc2VxIHw9IDE7 CisJCXJlcyA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVy LAorCQkJCSAgIGludGVydmFsX3RyZWUpOworCX0KKworCSpzZXEgPSBtbW5fbW0tPmludmFsaWRh dGVfc2VxOworCXNwaW5fdW5sb2NrKCZtbW5fbW0tPmxvY2spOworCXJldHVybiByZXM7Cit9CisK K3N0YXRpYyBzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyICoKK21uX2l0cmVlX2ludl9uZXh0 KHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgKm1uaSwKKwkJICBjb25zdCBzdHJ1Y3QgbW11 X25vdGlmaWVyX3JhbmdlICpyYW5nZSkKK3sKKwlzdHJ1Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlICpu b2RlOworCisJbm9kZSA9IGludGVydmFsX3RyZWVfaXRlcl9uZXh0KCZtbmktPmludGVydmFsX3Ry ZWUsIHJhbmdlLT5zdGFydCwKKwkJCQkgICAgICAgcmFuZ2UtPmVuZCAtIDEpOworCWlmICghbm9k ZSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgbW11 X2ludGVydmFsX25vdGlmaWVyLCBpbnRlcnZhbF90cmVlKTsKK30KKworc3RhdGljIHZvaWQgbW5f aXRyZWVfaW52X2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyX21tICptbW5fbW0pCit7CisJc3RydWN0 IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbW5pOworCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0Owor CWJvb2wgbmVlZF93YWtlID0gZmFsc2U7CisKKwlzcGluX2xvY2soJm1tbl9tbS0+bG9jayk7CisJ aWYgKC0tbW1uX21tLT5hY3RpdmVfaW52YWxpZGF0ZV9yYW5nZXMgfHwKKwkgICAgIW1uX2l0cmVl X2lzX2ludmFsaWRhdGluZyhtbW5fbW0pKSB7CisJCXNwaW5fdW5sb2NrKCZtbW5fbW0tPmxvY2sp OworCQlyZXR1cm47CisJfQorCisJLyogTWFrZSBpbnZhbGlkYXRlX3NlcSBldmVuICovCisJbW1u X21tLT5pbnZhbGlkYXRlX3NlcSsrOworCW5lZWRfd2FrZSA9IHRydWU7CisKKwkvKgorCSAqIFRo ZSBpbnZfZW5kIGluY29ycG9yYXRlcyBhIGRlZmVycmVkIG1lY2hhbmlzbSBsaWtlCisJICogcnRu bF91bmxvY2soKS4gQWRkcyBhbmQgcmVtb3ZlcyBhcmUgcXVldWVkIHVudGlsIHRoZSBmaW5hbCBp bnZfZW5kCisJICogaGFwcGVucyB0aGVuIHRoZXkgYXJlIHByb2dyZXNzZWQuIFRoaXMgYXJyYW5n ZW1lbnQgZm9yIHRyZWUgdXBkYXRlcworCSAqIGlzIHVzZWQgdG8gYXZvaWQgdXNpbmcgYSBibG9j a2luZyBsb2NrIGR1cmluZworCSAqIGludmFsaWRhdGVfcmFuZ2Vfc3RhcnQuCisJICovCisJaGxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZShtbmksIG5leHQsICZtbW5fbW0tPmRlZmVycmVkX2xpc3Qs CisJCQkJICBkZWZlcnJlZF9pdGVtKSB7CisJCWlmIChSQl9FTVBUWV9OT0RFKCZtbmktPmludGVy dmFsX3RyZWUucmIpKQorCQkJaW50ZXJ2YWxfdHJlZV9pbnNlcnQoJm1uaS0+aW50ZXJ2YWxfdHJl ZSwKKwkJCQkJICAgICAmbW1uX21tLT5pdHJlZSk7CisJCWVsc2UKKwkJCWludGVydmFsX3RyZWVf cmVtb3ZlKCZtbmktPmludGVydmFsX3RyZWUsCisJCQkJCSAgICAgJm1tbl9tbS0+aXRyZWUpOwor CQlobGlzdF9kZWwoJm1uaS0+ZGVmZXJyZWRfaXRlbSk7CisJfQorCXNwaW5fdW5sb2NrKCZtbW5f bW0tPmxvY2spOworCisJLyoKKwkgKiBUT0RPOiBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSBzcGlu bG9jayBhYm92ZSwgdGhpcyB3b3VsZCBiZSBmYXN0ZXIKKwkgKiBhcyB3YWtlX3VwX3EKKwkgKi8K KwlpZiAobmVlZF93YWtlKQorCQl3YWtlX3VwX2FsbCgmbW1uX21tLT53cSk7Cit9CisKKy8qKgor ICogbW11X2ludGVydmFsX3JlYWRfYmVnaW4gLSBCZWdpbiBhIHJlYWQgc2lkZSBjcml0aWNhbCBz ZWN0aW9uIGFnYWluc3QgYSBWQQorICogICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZQor ICogbW5pOiBUaGUgcmFuZ2UgdG8gdXNlCisgKgorICogbW11X2l0ZXJ2YWxfcmVhZF9iZWdpbigp L21tdV9pdGVydmFsX3JlYWRfcmV0cnkoKSBpbXBsZW1lbnQgYQorICogY29sbGlzaW9uLXJldHJ5 IHNjaGVtZSBzaW1pbGFyIHRvIHNlcWNvdW50IGZvciB0aGUgVkEgcmFuZ2UgdW5kZXIgbW5pLiBJ ZgorICogdGhlIG1tIGludm9rZXMgaW52YWxpZGF0aW9uIGR1cmluZyB0aGUgY3JpdGljYWwgc2Vj dGlvbiB0aGVuCisgKiBtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeSgpIHdpbGwgcmV0dXJuIHRydWUu CisgKgorICogVGhpcyBpcyB1c2VmdWwgdG8gb2J0YWluIHNoYWRvdyBQVEVzIHdoZXJlIHRlYXJk b3duIG9yIHNldHVwIG9mIHRoZSBTUFRFcworICogcmVxdWlyZSBhIGJsb2NraW5nIGNvbnRleHQu ICBUaGUgY3JpdGljYWwgcmVnaW9uIGZvcm1lZCBieSB0aGlzIGNhbiBzbGVlcCwKKyAqIGFuZCB0 aGUgcmVxdWlyZWQgJ3VzZXJfbG9jaycgY2FuIGFsc28gYmUgYSBzbGVlcGluZyBsb2NrLgorICoK KyAqIFRoZSBjYWxsZXIgaXMgcmVxdWlyZWQgdG8gcHJvdmlkZSBhICd1c2VyX2xvY2snIHRvIHNl cmlhbGl6ZSBib3RoIHRlYXJkb3duCisgKiBhbmQgc2V0dXAuCisgKgorICogVGhlIHJldHVybiB2 YWx1ZSBzaG91bGQgYmUgcGFzc2VkIHRvIG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCkuCisgKi8K K3Vuc2lnbmVkIGxvbmcgbW11X2ludGVydmFsX3JlYWRfYmVnaW4oc3RydWN0IG1tdV9pbnRlcnZh bF9ub3RpZmllciAqbW5pKQoreworCXN0cnVjdCBtbXVfbm90aWZpZXJfbW0gKm1tbl9tbSA9IG1u aS0+bW0tPm1tdV9ub3RpZmllcl9tbTsKKwl1bnNpZ25lZCBsb25nIHNlcTsKKwlib29sIGlzX2lu dmFsaWRhdGluZzsKKworCS8qCisJICogSWYgdGhlIG1uaSBoYXMgYSBkaWZmZXJlbnQgc2VxIHZh bHVlIHVuZGVyIHRoZSB1c2VyX2xvY2sgdGhhbiB3ZQorCSAqIHN0YXJ0ZWQgd2l0aCB0aGVuIGl0 IGhhcyBjb2xsaWRlZC4KKwkgKgorCSAqIElmIHRoZSBtbmkgY3VycmVudGx5IGhhcyB0aGUgc2Ft ZSBzZXEgdmFsdWUgYXMgdGhlIG1tbl9tbSBzZXEsIHRoZW4KKwkgKiBpdCBpcyBjdXJyZW50bHkg YmV0d2VlbiBpbnZhbGlkYXRlX3N0YXJ0L2VuZCBhbmQgaXMgY29sbGlkaW5nLgorCSAqCisJICog VGhlIGxvY2tpbmcgbG9va3MgYnJvYWRseSBsaWtlIHRoaXM6CisJICogICBtbl90cmVlX2ludmFs aWRhdGVfc3RhcnQoKTogICAgICAgICAgbW11X2ludGVydmFsX3JlYWRfYmVnaW4oKToKKwkgKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl9sb2NrCisJICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXEgPSBSRUFEX09OQ0UobW5p LT5pbnZhbGlkYXRlX3NlcSk7CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzZXEgPT0gbW1uX21tLT5pbnZhbGlkYXRlX3NlcQorCSAqICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzcGluX3VubG9jaworCSAqICAgIHNwaW5fbG9jawor CSAqICAgICBzZXEgPSArK21tbl9tbS0+aW52YWxpZGF0ZV9zZXEKKwkgKiAgICBzcGluX3VubG9j aworCSAqICAgICBvcC0+aW52YWxpZGF0ZV9yYW5nZSgpOgorCSAqICAgICAgIHVzZXJfbG9jawor CSAqICAgICAgICBtbXVfaW50ZXJ2YWxfc2V0X3NlcSgpCisJICogICAgICAgICBtbmktPmludmFs aWRhdGVfc2VxID0gc2VxCisJICogICAgICAgdXNlcl91bmxvY2sKKwkgKgorCSAqICAgICAgICAg ICAgICAgICAgICAgICAgICBbUmVxdWlyZWQ6IG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCkgPT0g dHJ1ZV0KKwkgKgorCSAqICAgbW5faXRyZWVfaW52X2VuZCgpOgorCSAqICAgIHNwaW5fbG9jawor CSAqICAgICBzZXEgPSArK21tbl9tbS0+aW52YWxpZGF0ZV9zZXEKKwkgKiAgICBzcGluX3VubG9j aworCSAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9s b2NrCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1tdV9pbnRl cnZhbF9yZWFkX3JldHJ5KCk6CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtbmktPmludmFsaWRhdGVfc2VxICE9IHNlcQorCSAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVzZXJfdW5sb2NrCisJICoKKwkgKiBCYXJyaWVycyBhcmUg bm90IG5lZWRlZCBoZXJlIGFzIGFueSByYWNlcyBoZXJlIGFyZSBjbG9zZWQgYnkgYW4KKwkgKiBl dmVudHVhbCBtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeSgpLCB3aGljaCBwcm92aWRlcyBhIGJhcnJp ZXIgdmlhIHRoZQorCSAqIHVzZXJfbG9jay4KKwkgKi8KKwlzcGluX2xvY2soJm1tbl9tbS0+bG9j ayk7CisJLyogUGFpcnMgd2l0aCB0aGUgV1JJVEVfT05DRSBpbiBtbXVfaW50ZXJ2YWxfc2V0X3Nl cSgpICovCisJc2VxID0gUkVBRF9PTkNFKG1uaS0+aW52YWxpZGF0ZV9zZXEpOworCWlzX2ludmFs aWRhdGluZyA9IHNlcSA9PSBtbW5fbW0tPmludmFsaWRhdGVfc2VxOworCXNwaW5fdW5sb2NrKCZt bW5fbW0tPmxvY2spOworCisJLyoKKwkgKiBtbmktPmludmFsaWRhdGVfc2VxIG11c3QgYWx3YXlz IGJlIHNldCB0byBhbiBvZGQgdmFsdWUgdmlhCisJICogbW11X2ludGVydmFsX3NldF9zZXEoKSB1 c2luZyB0aGUgcHJvdmlkZWQgY3VyX3NlcSBmcm9tCisJICogbW5faXRyZWVfaW52X3N0YXJ0X3Jh bmdlKCkuIFRoaXMgZW5zdXJlcyB0aGF0IGlmIHNlcSBkb2VzIHdyYXAgd2UKKwkgKiB3aWxsIGFs d2F5cyBjbGVhciB0aGUgYmVsb3cgc2xlZXAgaW4gc29tZSByZWFzb25hYmxlIHRpbWUgYXMKKwkg KiBtbW5fbW0tPmludmFsaWRhdGVfc2VxIGlzIGV2ZW4gaW4gdGhlIGlkbGUgc3RhdGUuCisJICov CisJbG9ja19tYXBfYWNxdWlyZSgmX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFy dF9tYXApOworCWxvY2tfbWFwX3JlbGVhc2UoJl9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFu Z2Vfc3RhcnRfbWFwKTsKKwlpZiAoaXNfaW52YWxpZGF0aW5nKQorCQl3YWl0X2V2ZW50KG1tbl9t bS0+d3EsCisJCQkgICBSRUFEX09OQ0UobW1uX21tLT5pbnZhbGlkYXRlX3NlcSkgIT0gc2VxKTsK KworCS8qCisJICogTm90aWNlIHRoYXQgbW11X2ludGVydmFsX3JlYWRfcmV0cnkoKSBjYW4gYWxy ZWFkeSBiZSB0cnVlIGF0IHRoaXMKKwkgKiBwb2ludCwgYXZvaWRpbmcgbG9vcHMgaGVyZSBhbGxv d3MgdGhlIGNhbGxlciB0byBwcm92aWRlIGEgZ2xvYmFsCisJICogdGltZSBib3VuZC4KKwkgKi8K KworCXJldHVybiBzZXE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtbXVfaW50ZXJ2YWxfcmVhZF9i ZWdpbik7CisKK3N0YXRpYyB2b2lkIG1uX2l0cmVlX3JlbGVhc2Uoc3RydWN0IG1tdV9ub3RpZmll cl9tbSAqbW1uX21tLAorCQkJICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlzdHJ1Y3Qg bW11X25vdGlmaWVyX3JhbmdlIHJhbmdlID0geworCQkuZmxhZ3MgPSBNTVVfTk9USUZJRVJfUkFO R0VfQkxPQ0tBQkxFLAorCQkuZXZlbnQgPSBNTVVfTk9USUZZX1JFTEVBU0UsCisJCS5tbSA9IG1t LAorCQkuc3RhcnQgPSAwLAorCQkuZW5kID0gVUxPTkdfTUFYLAorCX07CisJc3RydWN0IG1tdV9p bnRlcnZhbF9ub3RpZmllciAqbW5pOworCXVuc2lnbmVkIGxvbmcgY3VyX3NlcTsKKwlib29sIHJl dDsKKworCWZvciAobW5pID0gbW5faXRyZWVfaW52X3N0YXJ0X3JhbmdlKG1tbl9tbSwgJnJhbmdl LCAmY3VyX3NlcSk7IG1uaTsKKwkgICAgIG1uaSA9IG1uX2l0cmVlX2ludl9uZXh0KG1uaSwgJnJh bmdlKSkgeworCQlyZXQgPSBtbmktPm9wcy0+aW52YWxpZGF0ZShtbmksICZyYW5nZSwgY3VyX3Nl cSk7CisJCVdBUk5fT04oIXJldCk7CisJfQorCisJbW5faXRyZWVfaW52X2VuZChtbW5fbW0pOwor fQorCiAvKgogICogVGhpcyBmdW5jdGlvbiBjYW4ndCBydW4gY29uY3VycmVudGx5IGFnYWluc3Qg bW11X25vdGlmaWVyX3JlZ2lzdGVyCiAgKiBiZWNhdXNlIG1tLT5tbV91c2VycyA+IDAgZHVyaW5n IG1tdV9ub3RpZmllcl9yZWdpc3RlciBhbmQgZXhpdF9tbWFwCkBAIC01Miw3ICsyOTYsOCBAQCBz dHJ1Y3QgbW11X25vdGlmaWVyX21tIHsKICAqIGNhbid0IGdvIGF3YXkgZnJvbSB1bmRlciB1cyBh cyBleGl0X21tYXAgaG9sZHMgYW4gbW1fY291bnQgcGluCiAgKiBpdHNlbGYuCiAgKi8KLXZvaWQg X19tbXVfbm90aWZpZXJfcmVsZWFzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3N0YXRpYyB2b2lk IG1uX2hsaXN0X3JlbGVhc2Uoc3RydWN0IG1tdV9ub3RpZmllcl9tbSAqbW1uX21tLAorCQkJICAg ICBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlzdHJ1Y3QgbW11X25vdGlmaWVyICptbjsKIAlp bnQgaWQ7CkBAIC02Miw3ICszMDcsNyBAQCB2b2lkIF9fbW11X25vdGlmaWVyX3JlbGVhc2Uoc3Ry dWN0IG1tX3N0cnVjdCAqbW0pCiAJICogLT5yZWxlYXNlIHJldHVybnMuCiAJICovCiAJaWQgPSBz cmN1X3JlYWRfbG9jaygmc3JjdSk7Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG1uLCAmbW0t Pm1tdV9ub3RpZmllcl9tbS0+bGlzdCwgaGxpc3QpCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1 KG1uLCAmbW1uX21tLT5saXN0LCBobGlzdCkKIAkJLyoKIAkJICogSWYgLT5yZWxlYXNlIHJ1bnMg YmVmb3JlIG1tdV9ub3RpZmllcl91bnJlZ2lzdGVyIGl0IG11c3QgYmUKIAkJICogaGFuZGxlZCwg YXMgaXQncyB0aGUgb25seSB3YXkgZm9yIHRoZSBkcml2ZXIgdG8gZmx1c2ggYWxsCkBAIC03Miwx MCArMzE3LDkgQEAgdm9pZCBfX21tdV9ub3RpZmllcl9yZWxlYXNlKHN0cnVjdCBtbV9zdHJ1Y3Qg Km1tKQogCQlpZiAobW4tPm9wcy0+cmVsZWFzZSkKIAkJCW1uLT5vcHMtPnJlbGVhc2UobW4sIG1t KTsKIAotCXNwaW5fbG9jaygmbW0tPm1tdV9ub3RpZmllcl9tbS0+bG9jayk7Ci0Jd2hpbGUgKHVu bGlrZWx5KCFobGlzdF9lbXB0eSgmbW0tPm1tdV9ub3RpZmllcl9tbS0+bGlzdCkpKSB7Ci0JCW1u ID0gaGxpc3RfZW50cnkobW0tPm1tdV9ub3RpZmllcl9tbS0+bGlzdC5maXJzdCwKLQkJCQkgc3Ry dWN0IG1tdV9ub3RpZmllciwKKwlzcGluX2xvY2soJm1tbl9tbS0+bG9jayk7CisJd2hpbGUgKHVu bGlrZWx5KCFobGlzdF9lbXB0eSgmbW1uX21tLT5saXN0KSkpIHsKKwkJbW4gPSBobGlzdF9lbnRy eShtbW5fbW0tPmxpc3QuZmlyc3QsIHN0cnVjdCBtbXVfbm90aWZpZXIsCiAJCQkJIGhsaXN0KTsK IAkJLyoKIAkJICogV2UgYXJyaXZlZCBiZWZvcmUgbW11X25vdGlmaWVyX3VucmVnaXN0ZXIgc28K QEAgLTg1LDcgKzMyOSw3IEBAIHZvaWQgX19tbXVfbm90aWZpZXJfcmVsZWFzZShzdHJ1Y3QgbW1f c3RydWN0ICptbSkKIAkJICovCiAJCWhsaXN0X2RlbF9pbml0X3JjdSgmbW4tPmhsaXN0KTsKIAl9 Ci0Jc3Bpbl91bmxvY2soJm1tLT5tbXVfbm90aWZpZXJfbW0tPmxvY2spOworCXNwaW5fdW5sb2Nr KCZtbW5fbW0tPmxvY2spOwogCXNyY3VfcmVhZF91bmxvY2soJnNyY3UsIGlkKTsKIAogCS8qCkBA IC0xMDAsNiArMzQ0LDE3IEBAIHZvaWQgX19tbXVfbm90aWZpZXJfcmVsZWFzZShzdHJ1Y3QgbW1f c3RydWN0ICptbSkKIAlzeW5jaHJvbml6ZV9zcmN1KCZzcmN1KTsKIH0KIAordm9pZCBfX21tdV9u b3RpZmllcl9yZWxlYXNlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXN0cnVjdCBtbXVfbm90 aWZpZXJfbW0gKm1tbl9tbSA9IG1tLT5tbXVfbm90aWZpZXJfbW07CisKKwlpZiAobW1uX21tLT5o YXNfaXRyZWUpCisJCW1uX2l0cmVlX3JlbGVhc2UobW1uX21tLCBtbSk7CisKKwlpZiAoIWhsaXN0 X2VtcHR5KCZtbW5fbW0tPmxpc3QpKQorCQltbl9obGlzdF9yZWxlYXNlKG1tbl9tbSwgbW0pOwor fQorCiAvKgogICogSWYgbm8geW91bmcgYml0ZmxhZyBpcyBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3 YXJlLCAtPmNsZWFyX2ZsdXNoX3lvdW5nIGNhbgogICogdW5tYXAgdGhlIGFkZHJlc3MgYW5kIHJl dHVybiAxIG9yIDAgZGVwZW5kaW5nIGlmIHRoZSBtYXBwaW5nIHByZXZpb3VzbHkKQEAgLTE3Miwx NCArNDI3LDQzIEBAIHZvaWQgX19tbXVfbm90aWZpZXJfY2hhbmdlX3B0ZShzdHJ1Y3QgbW1fc3Ry dWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCXNyY3VfcmVhZF91bmxvY2soJnNyY3Us IGlkKTsKIH0KIAotaW50IF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3Ry dWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UpCitzdGF0aWMgaW50IG1uX2l0cmVlX2ludmFs aWRhdGUoc3RydWN0IG1tdV9ub3RpZmllcl9tbSAqbW1uX21tLAorCQkJICAgICAgIGNvbnN0IHN0 cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlKQoreworCXN0cnVjdCBtbXVfaW50ZXJ2YWxf bm90aWZpZXIgKm1uaTsKKwl1bnNpZ25lZCBsb25nIGN1cl9zZXE7CisKKwlmb3IgKG1uaSA9IG1u X2l0cmVlX2ludl9zdGFydF9yYW5nZShtbW5fbW0sIHJhbmdlLCAmY3VyX3NlcSk7IG1uaTsKKwkg ICAgIG1uaSA9IG1uX2l0cmVlX2ludl9uZXh0KG1uaSwgcmFuZ2UpKSB7CisJCWJvb2wgcmV0Owor CisJCXJldCA9IG1uaS0+b3BzLT5pbnZhbGlkYXRlKG1uaSwgcmFuZ2UsIGN1cl9zZXEpOworCQlp ZiAoIXJldCkgeworCQkJaWYgKFdBUk5fT04obW11X25vdGlmaWVyX3JhbmdlX2Jsb2NrYWJsZShy YW5nZSkpKQorCQkJCWNvbnRpbnVlOworCQkJZ290byBvdXRfd291bGRfYmxvY2s7CisJCX0KKwl9 CisJcmV0dXJuIDA7CisKK291dF93b3VsZF9ibG9jazoKKwkvKgorCSAqIE9uIC1FQUdBSU4gdGhl IG5vbi1ibG9ja2luZyBjYWxsZXIgaXMgbm90IGFsbG93ZWQgdG8gY2FsbAorCSAqIGludmFsaWRh dGVfcmFuZ2VfZW5kKCkKKwkgKi8KKwltbl9pdHJlZV9pbnZfZW5kKG1tbl9tbSk7CisJcmV0dXJu IC1FQUdBSU47Cit9CisKK3N0YXRpYyBpbnQgbW5faGxpc3RfaW52YWxpZGF0ZV9yYW5nZV9zdGFy dChzdHJ1Y3QgbW11X25vdGlmaWVyX21tICptbW5fbW0sCisJCQkJCSAgIHN0cnVjdCBtbXVfbm90 aWZpZXJfcmFuZ2UgKnJhbmdlKQogewogCXN0cnVjdCBtbXVfbm90aWZpZXIgKm1uOwogCWludCBy ZXQgPSAwOwogCWludCBpZDsKIAogCWlkID0gc3JjdV9yZWFkX2xvY2soJnNyY3UpOwotCWhsaXN0 X2Zvcl9lYWNoX2VudHJ5X3JjdShtbiwgJnJhbmdlLT5tbS0+bW11X25vdGlmaWVyX21tLT5saXN0 LCBobGlzdCkgeworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShtbiwgJm1tbl9tbS0+bGlzdCwg aGxpc3QpIHsKIAkJaWYgKG1uLT5vcHMtPmludmFsaWRhdGVfcmFuZ2Vfc3RhcnQpIHsKIAkJCWlu dCBfcmV0OwogCkBAIC0yMDMsMTUgKzQ4NywzMCBAQCBpbnQgX19tbXVfbm90aWZpZXJfaW52YWxp ZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpyYW5nZSkKIAlyZXR1 cm4gcmV0OwogfQogCi12b2lkIF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0 cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlLAotCQkJCQkgYm9vbCBvbmx5X2VuZCkKK2lu dCBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZp ZXJfcmFuZ2UgKnJhbmdlKQoreworCXN0cnVjdCBtbXVfbm90aWZpZXJfbW0gKm1tbl9tbSA9IHJh bmdlLT5tbS0+bW11X25vdGlmaWVyX21tOworCWludCByZXQ7CisKKwlpZiAobW1uX21tLT5oYXNf aXRyZWUpIHsKKwkJcmV0ID0gbW5faXRyZWVfaW52YWxpZGF0ZShtbW5fbW0sIHJhbmdlKTsKKwkJ aWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCWlmICghaGxpc3RfZW1wdHkoJm1tbl9tbS0+ bGlzdCkpCisJCXJldHVybiBtbl9obGlzdF9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KG1tbl9tbSwg cmFuZ2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtbl9obGlzdF9pbnZhbGlkYXRl X2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyX21tICptbW5fbW0sCisJCQkJICAgIHN0cnVjdCBtbXVf bm90aWZpZXJfcmFuZ2UgKnJhbmdlLAorCQkJCSAgICBib29sIG9ubHlfZW5kKQogewogCXN0cnVj dCBtbXVfbm90aWZpZXIgKm1uOwogCWludCBpZDsKIAotCWxvY2tfbWFwX2FjcXVpcmUoJl9fbW11 X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbWFwKTsKIAlpZCA9IHNyY3VfcmVhZF9s b2NrKCZzcmN1KTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobW4sICZyYW5nZS0+bW0tPm1t dV9ub3RpZmllcl9tbS0+bGlzdCwgaGxpc3QpIHsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uo bW4sICZtbW5fbW0tPmxpc3QsIGhsaXN0KSB7CiAJCS8qCiAJCSAqIENhbGwgaW52YWxpZGF0ZV9y YW5nZSBoZXJlIHRvbyB0byBhdm9pZCB0aGUgbmVlZCBmb3IgdGhlCiAJCSAqIHN1YnN5c3RlbSBv ZiBoYXZpbmcgdG8gcmVnaXN0ZXIgYW4gaW52YWxpZGF0ZV9yYW5nZV9lbmQKQEAgLTIzOCw2ICs1 MzcsMTkgQEAgdm9pZCBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChzdHJ1Y3Qg bW11X25vdGlmaWVyX3JhbmdlICpyYW5nZSwKIAkJfQogCX0KIAlzcmN1X3JlYWRfdW5sb2NrKCZz cmN1LCBpZCk7Cit9CisKK3ZvaWQgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQo c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UsCisJCQkJCSBib29sIG9ubHlfZW5kKQor eworCXN0cnVjdCBtbXVfbm90aWZpZXJfbW0gKm1tbl9tbSA9IHJhbmdlLT5tbS0+bW11X25vdGlm aWVyX21tOworCisJbG9ja19tYXBfYWNxdWlyZSgmX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9y YW5nZV9zdGFydF9tYXApOworCWlmIChtbW5fbW0tPmhhc19pdHJlZSkKKwkJbW5faXRyZWVfaW52 X2VuZChtbW5fbW0pOworCisJaWYgKCFobGlzdF9lbXB0eSgmbW1uX21tLT5saXN0KSkKKwkJbW5f aGxpc3RfaW52YWxpZGF0ZV9lbmQobW1uX21tLCByYW5nZSwgb25seV9lbmQpOwogCWxvY2tfbWFw X3JlbGVhc2UoJl9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbWFwKTsKIH0K IApAQCAtMjU2LDggKzU2OCw5IEBAIHZvaWQgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5n ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIH0KIAogLyoKLSAqIFNhbWUgYXMgbW11X25vdGlmaWVy X3JlZ2lzdGVyIGJ1dCBoZXJlIHRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZQotICogbW1hcF9zZW0g aW4gd3JpdGUgbW9kZS4KKyAqIFNhbWUgYXMgbW11X25vdGlmaWVyX3JlZ2lzdGVyIGJ1dCBoZXJl IHRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBtbWFwX3NlbSBpbgorICogd3JpdGUgbW9kZS4gQSBO VUxMIG1uIHNpZ25hbHMgdGhlIG5vdGlmaWVyIGlzIGJlaW5nIHJlZ2lzdGVyZWQgZm9yIGl0cmVl CisgKiBtb2RlLgogICovCiBpbnQgX19tbXVfbm90aWZpZXJfcmVnaXN0ZXIoc3RydWN0IG1tdV9u b3RpZmllciAqbW4sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewpAQCAtMjc0LDkgKzU4Nyw2IEBA IGludCBfX21tdV9ub3RpZmllcl9yZWdpc3RlcihzdHJ1Y3QgbW11X25vdGlmaWVyICptbiwgc3Ry dWN0IG1tX3N0cnVjdCAqbW0pCiAJCWZzX3JlY2xhaW1fcmVsZWFzZShHRlBfS0VSTkVMKTsKIAl9 CiAKLQltbi0+bW0gPSBtbTsKLQltbi0+dXNlcnMgPSAxOwotCiAJaWYgKCFtbS0+bW11X25vdGlm aWVyX21tKSB7CiAJCS8qCiAJCSAqIGttYWxsb2MgY2Fubm90IGJlIGNhbGxlZCB1bmRlciBtbV90 YWtlX2FsbF9sb2NrcygpLCBidXQgd2UKQEAgLTI4NCwyMSArNTk0LDIyIEBAIGludCBfX21tdV9u b3RpZmllcl9yZWdpc3RlcihzdHJ1Y3QgbW11X25vdGlmaWVyICptbiwgc3RydWN0IG1tX3N0cnVj dCAqbW0pCiAJCSAqIHRoZSB3cml0ZSBzaWRlIG9mIHRoZSBtbWFwX3NlbS4KIAkJICovCiAJCW1t dV9ub3RpZmllcl9tbSA9Ci0JCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbW11X25vdGlmaWVyX21t KSwgR0ZQX0tFUk5FTCk7CisJCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgbW11X25vdGlmaWVyX21t KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghbW11X25vdGlmaWVyX21tKQogCQkJcmV0dXJuIC1FTk9N RU07CiAKIAkJSU5JVF9ITElTVF9IRUFEKCZtbXVfbm90aWZpZXJfbW0tPmxpc3QpOwogCQlzcGlu X2xvY2tfaW5pdCgmbW11X25vdGlmaWVyX21tLT5sb2NrKTsKKwkJbW11X25vdGlmaWVyX21tLT5p bnZhbGlkYXRlX3NlcSA9IDI7CisJCW1tdV9ub3RpZmllcl9tbS0+aXRyZWUgPSBSQl9ST09UX0NB Q0hFRDsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmbW11X25vdGlmaWVyX21tLT53cSk7CisJCUlO SVRfSExJU1RfSEVBRCgmbW11X25vdGlmaWVyX21tLT5kZWZlcnJlZF9saXN0KTsKIAl9CiAKIAly ZXQgPSBtbV90YWtlX2FsbF9sb2NrcyhtbSk7CiAJaWYgKHVubGlrZWx5KHJldCkpCiAJCWdvdG8g b3V0X2NsZWFuOwogCi0JLyogUGFpcnMgd2l0aCB0aGUgbW1kcm9wIGluIG1tdV9ub3RpZmllcl91 bnJlZ2lzdGVyXyogKi8KLQltbWdyYWIobW0pOwotCiAJLyoKIAkgKiBTZXJpYWxpemUgdGhlIHVw ZGF0ZSBhZ2FpbnN0IG1tdV9ub3RpZmllcl91bnJlZ2lzdGVyLiBBCiAJICogc2lkZSBub3RlOiBt bXVfbm90aWZpZXJfcmVsZWFzZSBjYW4ndCBydW4gY29uY3VycmVudGx5IHdpdGgKQEAgLTMwNiwx MyArNjE3LDI4IEBAIGludCBfX21tdV9ub3RpZmllcl9yZWdpc3RlcihzdHJ1Y3QgbW11X25vdGlm aWVyICptbiwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJICogY3VycmVudC0+bW0gb3IgZXhwbGlj aXRseSB3aXRoIGdldF90YXNrX21tKCkgb3Igc2ltaWxhcikuCiAJICogV2UgY2FuJ3QgcmFjZSBh Z2FpbnN0IGFueSBvdGhlciBtbXUgbm90aWZpZXIgbWV0aG9kIGVpdGhlcgogCSAqIHRoYW5rcyB0 byBtbV90YWtlX2FsbF9sb2NrcygpLgorCSAqCisJICogcmVsZWFzZSBzZW1hbnRpY3Mgb24gdGhl IGluaXRpYWxpemF0aW9uIG9mIHRoZSBtbXVfbm90aWZpZXJfbW0ncworICAgICAgICAgKiBjb250 ZW50cyBhcmUgcHJvdmlkZWQgZm9yIHVubG9ja2VkIHJlYWRlcnMuICBhY3F1aXJlIGNhbiBvbmx5 IGJlCisgICAgICAgICAqIHVzZWQgd2hpbGUgaG9sZGluZyB0aGUgbW1ncmFiIG9yIG1tZ2V0LCBh bmQgaXMgc2FmZSBiZWNhdXNlIG9uY2UKKyAgICAgICAgICogY3JlYXRlZCB0aGUgbW11X25vdGlm aWZlcl9tbSBpcyBub3QgZnJlZWQgdW50aWwgdGhlIG1tIGlzCisgICAgICAgICAqIGRlc3Ryb3ll ZC4gIEFzIGFib3ZlLCB1c2VycyBob2xkaW5nIHRoZSBtbWFwX3NlbSBvciBvbmUgb2YgdGhlCisg ICAgICAgICAqIG1tX3Rha2VfYWxsX2xvY2tzKCkgZG8gbm90IG5lZWQgdG8gdXNlIGFjcXVpcmUg c2VtYW50aWNzLgogCSAqLwogCWlmIChtbXVfbm90aWZpZXJfbW0pCi0JCW1tLT5tbXVfbm90aWZp ZXJfbW0gPSBtbXVfbm90aWZpZXJfbW07CisJCXNtcF9zdG9yZV9yZWxlYXNlKCZtbS0+bW11X25v dGlmaWVyX21tLCBtbXVfbm90aWZpZXJfbW0pOwogCi0Jc3Bpbl9sb2NrKCZtbS0+bW11X25vdGlm aWVyX21tLT5sb2NrKTsKLQlobGlzdF9hZGRfaGVhZF9yY3UoJm1uLT5obGlzdCwgJm1tLT5tbXVf bm90aWZpZXJfbW0tPmxpc3QpOwotCXNwaW5fdW5sb2NrKCZtbS0+bW11X25vdGlmaWVyX21tLT5s b2NrKTsKKwlpZiAobW4pIHsKKwkJLyogUGFpcnMgd2l0aCB0aGUgbW1kcm9wIGluIG1tdV9ub3Rp Zmllcl91bnJlZ2lzdGVyXyogKi8KKwkJbW1ncmFiKG1tKTsKKwkJbW4tPm1tID0gbW07CisJCW1u LT51c2VycyA9IDE7CisKKwkJc3Bpbl9sb2NrKCZtbS0+bW11X25vdGlmaWVyX21tLT5sb2NrKTsK KwkJaGxpc3RfYWRkX2hlYWRfcmN1KCZtbi0+aGxpc3QsICZtbS0+bW11X25vdGlmaWVyX21tLT5s aXN0KTsKKwkJc3Bpbl91bmxvY2soJm1tLT5tbXVfbm90aWZpZXJfbW0tPmxvY2spOworCX0gZWxz ZQorCQltbS0+bW11X25vdGlmaWVyX21tLT5oYXNfaXRyZWUgPSB0cnVlOwogCiAJbW1fZHJvcF9h bGxfbG9ja3MobW0pOwogCUJVR19PTihhdG9taWNfcmVhZCgmbW0tPm1tX3VzZXJzKSA8PSAwKTsK QEAgLTUyOSw2ICs4NTUsMTgwIEBAIHZvaWQgbW11X25vdGlmaWVyX3B1dChzdHJ1Y3QgbW11X25v dGlmaWVyICptbikKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1tdV9ub3RpZmllcl9wdXQpOwogCitz dGF0aWMgaW50IF9fbW11X2ludGVydmFsX25vdGlmaWVyX2luc2VydCgKKwlzdHJ1Y3QgbW11X2lu dGVydmFsX25vdGlmaWVyICptbmksIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCXN0cnVjdCBtbXVf bm90aWZpZXJfbW0gKm1tbl9tbSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwl1bnNpZ25lZCBsb25n IGxlbmd0aCwgY29uc3Qgc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllcl9vcHMgKm9wcykKK3sK KwltbmktPm1tID0gbW07CisJbW5pLT5vcHMgPSBvcHM7CisJUkJfQ0xFQVJfTk9ERSgmbW5pLT5p bnRlcnZhbF90cmVlLnJiKTsKKwltbmktPmludGVydmFsX3RyZWUuc3RhcnQgPSBzdGFydDsKKwkv KgorCSAqIE5vdGUgdGhhdCB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVydmFscyBpbiB0 aGUgaW50ZXJ2YWwgdHJlZQorCSAqIGNvbnNpZGVycyB0aGUgZW5kaW5nIHBvaW50IGFzIGNvbnRh aW5lZCBpbiB0aGUgaW50ZXJ2YWwuCisJICovCisJaWYgKGxlbmd0aCA9PSAwIHx8CisJICAgIGNo ZWNrX2FkZF9vdmVyZmxvdyhzdGFydCwgbGVuZ3RoIC0gMSwgJm1uaS0+aW50ZXJ2YWxfdHJlZS5s YXN0KSkKKwkJcmV0dXJuIC1FT1ZFUkZMT1c7CisKKwkvKiBNdXN0IGNhbGwgd2l0aCBhIG1tZ2V0 KCkgaGVsZCAqLworCWlmIChXQVJOX09OKGF0b21pY19yZWFkKCZtbS0+bW1fY291bnQpIDw9IDAp KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHBhaXJzIHdpdGggbW1kcm9wIGluIG1tdV9pbnRl cnZhbF9ub3RpZmllcl9yZW1vdmUoKSAqLworCW1tZ3JhYihtbSk7CisKKwkvKgorCSAqIElmIHNv bWUgaW52YWxpZGF0ZV9yYW5nZV9zdGFydC9lbmQgcmVnaW9uIGlzIGdvaW5nIG9uIGluIHBhcmFs bGVsCisJICogd2UgZG9uJ3Qga25vdyB3aGF0IFZBIHJhbmdlcyBhcmUgYWZmZWN0ZWQsIHNvIHdl IG11c3QgYXNzdW1lIHRoaXMKKwkgKiBuZXcgcmFuZ2UgaXMgaW5jbHVkZWQuCisJICoKKwkgKiBJ ZiB0aGUgaXRyZWUgaXMgaW52YWxpZGF0aW5nIHRoZW4gd2UgYXJlIG5vdCBhbGxvd2VkIHRvIGNo YW5nZQorCSAqIGl0LiBSZXRyeWluZyB1bnRpbCBpbnZhbGlkYXRpb24gaXMgZG9uZSBpcyB0cmlj a3kgZHVlIHRvIHRoZQorCSAqIHBvc3NpYmlsaXR5IGZvciBsaXZlIGxvY2ssIGluc3RlYWQgZGVm ZXIgdGhlIGFkZCB0bworCSAqIG1uX2l0cmVlX2ludl9lbmQoKSBzbyB0aGlzIGFsZ29yaXRobSBp cyBkZXRlcm1pbmlzdGljLgorCSAqCisJICogSW4gYWxsIGNhc2VzIHRoZSB2YWx1ZSBmb3IgdGhl IG1uaS0+bXJfaW52YWxpZGF0ZV9zZXEgc2hvdWxkIGJlCisJICogb2RkLCBzZWUgbW11X2ludGVy dmFsX3JlYWRfYmVnaW4oKQorCSAqLworCXNwaW5fbG9jaygmbW1uX21tLT5sb2NrKTsKKwlpZiAo bW1uX21tLT5hY3RpdmVfaW52YWxpZGF0ZV9yYW5nZXMpIHsKKwkJaWYgKG1uX2l0cmVlX2lzX2lu dmFsaWRhdGluZyhtbW5fbW0pKQorCQkJaGxpc3RfYWRkX2hlYWQoJm1uaS0+ZGVmZXJyZWRfaXRl bSwKKwkJCQkgICAgICAgJm1tbl9tbS0+ZGVmZXJyZWRfbGlzdCk7CisJCWVsc2UgeworCQkJbW1u X21tLT5pbnZhbGlkYXRlX3NlcSB8PSAxOworCQkJaW50ZXJ2YWxfdHJlZV9pbnNlcnQoJm1uaS0+ aW50ZXJ2YWxfdHJlZSwKKwkJCQkJICAgICAmbW1uX21tLT5pdHJlZSk7CisJCX0KKwkJbW5pLT5p bnZhbGlkYXRlX3NlcSA9IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXE7CisJfSBlbHNlIHsKKwkJV0FS Tl9PTihtbl9pdHJlZV9pc19pbnZhbGlkYXRpbmcobW1uX21tKSk7CisJCS8qCisJCSAqIFRoZSBz dGFydGluZyBzZXEgZm9yIGEgbW5pIG5vdCB1bmRlciBpbnZhbGlkYXRpb24gc2hvdWxkIGJlCisJ CSAqIG9kZCwgbm90IGVxdWFsIHRvIHRoZSBjdXJyZW50IGludmFsaWRhdGVfc2VxIGFuZAorCQkg KiBpbnZhbGlkYXRlX3NlcSBzaG91bGQgbm90ICd3cmFwJyB0byB0aGUgbmV3IHNlcSBhbnkgdGlt ZQorCQkgKiBzb29uLgorCQkgKi8KKwkJbW5pLT5pbnZhbGlkYXRlX3NlcSA9IG1tbl9tbS0+aW52 YWxpZGF0ZV9zZXEgLSAxOworCQlpbnRlcnZhbF90cmVlX2luc2VydCgmbW5pLT5pbnRlcnZhbF90 cmVlLCAmbW1uX21tLT5pdHJlZSk7CisJfQorCXNwaW5fdW5sb2NrKCZtbW5fbW0tPmxvY2spOwor CXJldHVybiAwOworfQorCisvKioKKyAqIG1tdV9pbnRlcnZhbF9ub3RpZmllcl9pbnNlcnQgLSBJ bnNlcnQgYW4gaW50ZXJ2YWwgbm90aWZpZXIKKyAqIEBtbmk6IEludGVydmFsIG5vdGlmaWVyIHRv IHJlZ2lzdGVyCisgKiBAc3RhcnQ6IFN0YXJ0aW5nIHZpcnR1YWwgYWRkcmVzcyB0byBtb25pdG9y CisgKiBAbGVuZ3RoOiBMZW5ndGggb2YgdGhlIHJhbmdlIHRvIG1vbml0b3IKKyAqIEBtbSA6IG1t X3N0cnVjdCB0byBhdHRhY2ggdG8KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHN1YnNjcmliZXMgdGhl IGludGVydmFsIG5vdGlmaWVyIGZvciBub3RpZmljYXRpb25zIGZyb20gdGhlCisgKiBtbS4gIFVw b24gcmV0dXJuIHRoZSBvcHMgcmVsYXRlZCB0byBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgd2lsbCBi ZSBjYWxsZWQKKyAqIHdoZW5ldmVyIGFuIGV2ZW50IHRoYXQgaW50ZXJzZWN0cyB3aXRoIHRoZSBn aXZlbiByYW5nZSBvY2N1cnMuCisgKgorICogVXBvbiByZXR1cm4gdGhlIHJhbmdlX25vdGlmaWVy IG1heSBub3QgYmUgcHJlc2VudCBpbiB0aGUgaW50ZXJ2YWwgdHJlZSB5ZXQuCisgKiBUaGUgY2Fs bGVyIG11c3QgdXNlIHRoZSBub3JtYWwgaW50ZXJ2YWwgbm90aWZpZXIgcmVhZCBmbG93IHZpYQor ICogbW11X2ludGVydmFsX3JlYWRfYmVnaW4oKSB0byBlc3RhYmxpc2ggU1BURXMgZm9yIHRoaXMg cmFuZ2UuCisgKi8KK2ludCBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfaW5zZXJ0KHN0cnVjdCBtbXVf aW50ZXJ2YWxfbm90aWZpZXIgKm1uaSwKKwkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2ln bmVkIGxvbmcgc3RhcnQsCisJCQkJIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLAorCQkJCSBjb25zdCBz dHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyX29wcyAqb3BzKQoreworCXN0cnVjdCBtbXVfbm90 aWZpZXJfbW0gKm1tbl9tbTsKKwlpbnQgcmV0OworCisJbWlnaHRfbG9jaygmbW0tPm1tYXBfc2Vt KTsKKworCW1tbl9tbSA9IHNtcF9sb2FkX2FjcXVpcmUoJm1tLT5tbXVfbm90aWZpZXJfbW0pOwor CWlmICghbW1uX21tIHx8ICFtbW5fbW0tPmhhc19pdHJlZSkgeworCQlyZXQgPSBtbXVfbm90aWZp ZXJfcmVnaXN0ZXIoTlVMTCwgbW0pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJbW1u X21tID0gbW0tPm1tdV9ub3RpZmllcl9tbTsKKwl9CisJcmV0dXJuIF9fbW11X2ludGVydmFsX25v dGlmaWVyX2luc2VydChtbmksIG1tLCBtbW5fbW0sIHN0YXJ0LCBsZW5ndGgsCisJCQkJCSAgICAg IG9wcyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtbXVfaW50ZXJ2YWxfbm90aWZpZXJfaW5zZXJ0 KTsKKworaW50IG1tdV9pbnRlcnZhbF9ub3RpZmllcl9pbnNlcnRfbG9ja2VkKAorCXN0cnVjdCBt bXVfaW50ZXJ2YWxfbm90aWZpZXIgKm1uaSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJdW5zaWdu ZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW5ndGgsCisJY29uc3Qgc3RydWN0IG1tdV9p bnRlcnZhbF9ub3RpZmllcl9vcHMgKm9wcykKK3sKKwlzdHJ1Y3QgbW11X25vdGlmaWVyX21tICpt bW5fbW07CisJaW50IHJldDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoJm1tLT5tbWFw X3NlbSk7CisKKwltbW5fbW0gPSBtbS0+bW11X25vdGlmaWVyX21tOworCWlmICghbW1uX21tIHx8 ICFtbW5fbW0tPmhhc19pdHJlZSkgeworCQlyZXQgPSBfX21tdV9ub3RpZmllcl9yZWdpc3RlcihO VUxMLCBtbSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQltbW5fbW0gPSBtbS0+bW11 X25vdGlmaWVyX21tOworCX0KKwlyZXR1cm4gX19tbXVfaW50ZXJ2YWxfbm90aWZpZXJfaW5zZXJ0 KG1uaSwgbW0sIG1tbl9tbSwgc3RhcnQsIGxlbmd0aCwKKwkJCQkJICAgICAgb3BzKTsKK30KK0VY UE9SVF9TWU1CT0xfR1BMKG1tdV9pbnRlcnZhbF9ub3RpZmllcl9pbnNlcnRfbG9ja2VkKTsKKwor LyoqCisgKiBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfcmVtb3ZlIC0gUmVtb3ZlIGEgaW50ZXJ2YWwg bm90aWZpZXIKKyAqIEBtbmk6IEludGVydmFsIG5vdGlmaWVyIHRvIHVucmVnaXN0ZXIKKyAqCisg KiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcGFpcmVkIHdpdGggbW11X2ludGVydmFsX25vdGlmaWVy X2luc2VydCgpLiBJdCBjYW5ub3QgYmUKKyAqIGNhbGxlZCBmcm9tIGFueSBvcHMgY2FsbGJhY2su CisgKgorICogT25jZSB0aGlzIHJldHVybnMgb3BzIGNhbGxiYWNrcyBhcmUgbm8gbG9uZ2VyIHJ1 bm5pbmcgb24gb3RoZXIgQ1BVcyBhbmQKKyAqIHdpbGwgbm90IGJlIGNhbGxlZCBpbiBmdXR1cmUu CisgKi8KK3ZvaWQgbW11X2ludGVydmFsX25vdGlmaWVyX3JlbW92ZShzdHJ1Y3QgbW11X2ludGVy dmFsX25vdGlmaWVyICptbmkpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBtbmktPm1tOwor CXN0cnVjdCBtbXVfbm90aWZpZXJfbW0gKm1tbl9tbSA9IG1tLT5tbXVfbm90aWZpZXJfbW07CisJ dW5zaWduZWQgbG9uZyBzZXEgPSAwOworCisJbWlnaHRfc2xlZXAoKTsKKworCXNwaW5fbG9jaygm bW1uX21tLT5sb2NrKTsKKwlpZiAobW5faXRyZWVfaXNfaW52YWxpZGF0aW5nKG1tbl9tbSkpIHsK KwkJLyoKKwkJICogcmVtb3ZlIGlzIGJlaW5nIGNhbGxlZCBhZnRlciBpbnNlcnQgcHV0IHRoaXMg b24gdGhlCisJCSAqIGRlZmVycmVkIGxpc3QsIGJ1dCBiZWZvcmUgdGhlIGRlZmVycmVkIGxpc3Qg d2FzIHByb2Nlc3NlZC4KKwkJICovCisJCWlmIChSQl9FTVBUWV9OT0RFKCZtbmktPmludGVydmFs X3RyZWUucmIpKSB7CisJCQlobGlzdF9kZWwoJm1uaS0+ZGVmZXJyZWRfaXRlbSk7CisJCX0gZWxz ZSB7CisJCQlobGlzdF9hZGRfaGVhZCgmbW5pLT5kZWZlcnJlZF9pdGVtLAorCQkJCSAgICAgICAm bW1uX21tLT5kZWZlcnJlZF9saXN0KTsKKwkJCXNlcSA9IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXE7 CisJCX0KKwl9IGVsc2UgeworCQlXQVJOX09OKFJCX0VNUFRZX05PREUoJm1uaS0+aW50ZXJ2YWxf dHJlZS5yYikpOworCQlpbnRlcnZhbF90cmVlX3JlbW92ZSgmbW5pLT5pbnRlcnZhbF90cmVlLCAm bW1uX21tLT5pdHJlZSk7CisJfQorCXNwaW5fdW5sb2NrKCZtbW5fbW0tPmxvY2spOworCisJLyoK KwkgKiBUaGUgcG9zc2libGUgc2xlZXAgb24gcHJvZ3Jlc3MgaW4gdGhlIGludmFsaWRhdGlvbiBy ZXF1aXJlcyB0aGUKKwkgKiBjYWxsZXIgbm90IGhvbGQgYW55IGxvY2tzIGhlbGQgYnkgaW52YWxp ZGF0aW9uIGNhbGxiYWNrcy4KKwkgKi8KKwlsb2NrX21hcF9hY3F1aXJlKCZfX21tdV9ub3RpZmll cl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X21hcCk7CisJbG9ja19tYXBfcmVsZWFzZSgmX19tbXVf bm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9tYXApOworCWlmIChzZXEpCisJCXdhaXRf ZXZlbnQobW1uX21tLT53cSwKKwkJCSAgIFJFQURfT05DRShtbW5fbW0tPmludmFsaWRhdGVfc2Vx KSAhPSBzZXEpOworCisJLyogcGFpcnMgd2l0aCBtbWdyYWIgaW4gbW11X2ludGVydmFsX25vdGlm aWVyX2luc2VydCgpICovCisJbW1kcm9wKG1tKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1tdV9p bnRlcnZhbF9ub3RpZmllcl9yZW1vdmUpOworCiAvKioKICAqIG1tdV9ub3RpZmllcl9zeW5jaHJv bml6ZSAtIEVuc3VyZSBhbGwgbW11X25vdGlmaWVycyBhcmUgZnJlZWQKICAqCi0tIAoyLjI0LjAK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZngg bWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeA==