From mboxrd@z Thu Jan 1 00:00:00 1970 From: jglisse@redhat.com Subject: [PATCH 1/2] gpu/i915: use HMM mirror instead of mmu_notifier Date: Sun, 9 Sep 2018 20:57:35 -0400 Message-ID: <20180910005736.5805-2-jglisse@redhat.com> References: <20180910005736.5805-1-jglisse@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180910005736.5805-1-jglisse@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-kernel@vger.kernel.org Cc: David Airlie , Daniel Vetter , intel-gfx@lists.freedesktop.org, =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , dri-devel@lists.freedesktop.org, Rodrigo Vivi List-Id: dri-devel@lists.freedesktop.org RnJvbTogSsOpcsO0bWUgR2xpc3NlIDxqZ2xpc3NlQHJlZGhhdC5jb20+CgpITU0gcHJvdmlkZSBh IHNldHMgb2YgaGVscGVycyB0byBhdm9pZCBpbmRpdmlkdWFsIGRyaXZlcnMgcmUtZG9pbmcKdGhl aXIgb3duLiBUaGlzIHBhdGNoIGNvbnZlcnQgdGhlIHJhZGVvbiB0byB1c2UgSE1NIG1pcnJvciB0 byB0cmFjawpDUFUgcGFnZSB0YWJsZSB1cGRhdGUgYW5kIGludmFsaWRhdGUgYWNjb3JkaW5nbHkg Zm9yIHVzZXJwdHIgb2JqZWN0LgoKU2lnbmVkLW9mZi1ieTogSsOpcsO0bWUgR2xpc3NlIDxqZ2xp c3NlQHJlZGhhdC5jb20+CkNjOiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCkNjOiBE YXZpZCBBaXJsaWUgPGFpcmxpZWRAbGludXguaWU+CkNjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwu dmV0dGVyQGZmd2xsLmNoPgpDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28u dWs+CkNjOiBMaW9uZWwgTGFuZHdlcmxpbiA8bGlvbmVsLmcubGFuZHdlcmxpbkBpbnRlbC5jb20+ CkNjOiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAbGludXguaW50ZWwuY29tPgpDYzogSm9vbmFz IExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgpDYzogUm9kcmlnbyBW aXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwuY29tPgpDYzogaW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWcgICAgICAgICAgICB8ICAg NCArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jIHwgMTg5ICsrKysr KysrKysrKy0tLS0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCA5NyBpbnNlcnRpb25zKCspLCA5 NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmln IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZwppbmRleCAzM2E0NThiN2YxZmMuLjQwYmJh MGJkODEyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmlnCkBAIC04NywxMCArODcsMTAgQEAgY29uZmlnIERS TV9JOTE1X0NPTVBSRVNTX0VSUk9SCiBjb25maWcgRFJNX0k5MTVfVVNFUlBUUgogCWJvb2wgIkFs d2F5cyBlbmFibGUgdXNlcnB0ciBzdXBwb3J0IgogCWRlcGVuZHMgb24gRFJNX0k5MTUKLQlzZWxl Y3QgTU1VX05PVElGSUVSCisJc2VsZWN0IEhNTV9NSVJST1IKIAlkZWZhdWx0IHkKIAloZWxwCi0J ICBUaGlzIG9wdGlvbiBzZWxlY3RzIENPTkZJR19NTVVfTk9USUZJRVIgaWYgaXQgaXNuJ3QgYWxy ZWFkeQorCSAgVGhpcyBvcHRpb24gc2VsZWN0cyBDT05GSUdfSE1NX01JUlJPUiBpZiBpdCBpc24n dCBhbHJlYWR5CiAJICBzZWxlY3RlZCB0byBlbmFibGVkIGZ1bGwgdXNlcnB0ciBzdXBwb3J0Lgog CiAJICBJZiBpbiBkb3VidCwgc2F5ICJZIi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX3VzZXJwdHIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Vz ZXJwdHIuYwppbmRleCAyYzliMjg0MDM2ZDEuLjVlMDliNjU0YjVhZCAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgImk5 MTVfdHJhY2UuaCIKICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKICNpbmNsdWRlIDxsaW51eC9tbXVf Y29udGV4dC5oPgotI2luY2x1ZGUgPGxpbnV4L21tdV9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxp bnV4L2htbS5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXBvbGljeS5oPgogI2luY2x1ZGUgPGxpbnV4 L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC9tbS5oPgpAQCAtMzYsMjUgKzM2LDI1IEBA CiBzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3QgewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1OwotCXN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW47 CisJc3RydWN0IGk5MTVfbWlycm9yICptaXJyb3I7CiAJc3RydWN0IGhsaXN0X25vZGUgbm9kZTsK IAlzdHJ1Y3Qga3JlZiBrcmVmOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogfTsKIAotI2lm IGRlZmluZWQoQ09ORklHX01NVV9OT1RJRklFUikKKyNpZiBkZWZpbmVkKENPTkZJR19ITU1fTUlS Uk9SKQogI2luY2x1ZGUgPGxpbnV4L2ludGVydmFsX3RyZWUuaD4KIAotc3RydWN0IGk5MTVfbW11 X25vdGlmaWVyIHsKK3N0cnVjdCBpOTE1X21pcnJvciB7CiAJc3BpbmxvY2tfdCBsb2NrOwogCXN0 cnVjdCBobGlzdF9ub2RlIG5vZGU7Ci0Jc3RydWN0IG1tdV9ub3RpZmllciBtbjsKKwlzdHJ1Y3Qg aG1tX21pcnJvciBtaXJyb3I7CiAJc3RydWN0IHJiX3Jvb3RfY2FjaGVkIG9iamVjdHM7CiAJc3Ry dWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOwogfTsKIAogc3RydWN0IGk5MTVfbW11X29iamVjdCB7 Ci0Jc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbjsKKwlzdHJ1Y3QgaTkxNV9taXJyb3IgKm1p cnJvcjsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCXN0cnVjdCBpbnRlcnZh bF90cmVlX25vZGUgaXQ7CiAJc3RydWN0IGxpc3RfaGVhZCBsaW5rOwpAQCAtOTksNyArOTksNyBA QCBzdGF0aWMgdm9pZCBhZGRfb2JqZWN0KHN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1vKQogCWlm IChtby0+YXR0YWNoZWQpCiAJCXJldHVybjsKIAotCWludGVydmFsX3RyZWVfaW5zZXJ0KCZtby0+ aXQsICZtby0+bW4tPm9iamVjdHMpOworCWludGVydmFsX3RyZWVfaW5zZXJ0KCZtby0+aXQsICZt by0+bWlycm9yLT5vYmplY3RzKTsKIAltby0+YXR0YWNoZWQgPSB0cnVlOwogfQogCkBAIC0xMDgs MzMgKzEwOCwyOSBAQCBzdGF0aWMgdm9pZCBkZWxfb2JqZWN0KHN0cnVjdCBpOTE1X21tdV9vYmpl Y3QgKm1vKQogCWlmICghbW8tPmF0dGFjaGVkKQogCQlyZXR1cm47CiAKLQlpbnRlcnZhbF90cmVl X3JlbW92ZSgmbW8tPml0LCAmbW8tPm1uLT5vYmplY3RzKTsKKwlpbnRlcnZhbF90cmVlX3JlbW92 ZSgmbW8tPml0LCAmbW8tPm1pcnJvci0+b2JqZWN0cyk7CiAJbW8tPmF0dGFjaGVkID0gZmFsc2U7 CiB9CiAKLXN0YXRpYyBpbnQgaTkxNV9nZW1fdXNlcnB0cl9tbl9pbnZhbGlkYXRlX3JhbmdlX3N0 YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXIgKl9tbiwKLQkJCQkJCSAgICAgICBzdHJ1Y3QgbW1fc3Ry dWN0ICptbSwKLQkJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCQkJICAgICAg IHVuc2lnbmVkIGxvbmcgZW5kLAotCQkJCQkJICAgICAgIGJvb2wgYmxvY2thYmxlKQorc3RhdGlj IGludCBpOTE1X3N5bmNfY3B1X2RldmljZV9wYWdldGFibGVzKHN0cnVjdCBobW1fbWlycm9yICpf bWlycm9yLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgaG1tX3VwZGF0ZSAqdXBkYXRlKQogewotCXN0 cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW4gPQotCQljb250YWluZXJfb2YoX21uLCBzdHJ1Y3Qg aTkxNV9tbXVfbm90aWZpZXIsIG1uKTsKKwlzdHJ1Y3QgaTkxNV9taXJyb3IgKm1pcnJvciA9CisJ CWNvbnRhaW5lcl9vZihfbWlycm9yLCBzdHJ1Y3QgaTkxNV9taXJyb3IsIG1pcnJvcik7CisJLyog aW50ZXJ2YWwgcmFuZ2VzIGFyZSBpbmNsdXNpdmUsIGJ1dCBpbnZhbGlkYXRlIHJhbmdlIGlzIGV4 Y2x1c2l2ZSAqLworCXVuc2lnbmVkIGxvbmcgZW5kID0gdXBkYXRlLT5lbmQgLSAxOwogCXN0cnVj dCBpOTE1X21tdV9vYmplY3QgKm1vOwogCXN0cnVjdCBpbnRlcnZhbF90cmVlX25vZGUgKml0Owog CUxJU1RfSEVBRChjYW5jZWxsZWQpOwogCi0JaWYgKFJCX0VNUFRZX1JPT1QoJm1uLT5vYmplY3Rz LnJiX3Jvb3QpKQorCWlmIChSQl9FTVBUWV9ST09UKCZtaXJyb3ItPm9iamVjdHMucmJfcm9vdCkp CiAJCXJldHVybiAwOwogCi0JLyogaW50ZXJ2YWwgcmFuZ2VzIGFyZSBpbmNsdXNpdmUsIGJ1dCBp bnZhbGlkYXRlIHJhbmdlIGlzIGV4Y2x1c2l2ZSAqLwotCWVuZC0tOwotCi0Jc3Bpbl9sb2NrKCZt bi0+bG9jayk7Ci0JaXQgPSBpbnRlcnZhbF90cmVlX2l0ZXJfZmlyc3QoJm1uLT5vYmplY3RzLCBz dGFydCwgZW5kKTsKKwlzcGluX2xvY2soJm1pcnJvci0+bG9jayk7CisJaXQgPSBpbnRlcnZhbF90 cmVlX2l0ZXJfZmlyc3QoJm1pcnJvci0+b2JqZWN0cywgdXBkYXRlLT5zdGFydCwgZW5kKTsKIAl3 aGlsZSAoaXQpIHsKLQkJaWYgKCFibG9ja2FibGUpIHsKLQkJCXNwaW5fdW5sb2NrKCZtbi0+bG9j ayk7CisJCWlmICghdXBkYXRlLT5ibG9ja2FibGUpIHsKKwkJCXNwaW5fdW5sb2NrKCZtaXJyb3It PmxvY2spOwogCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KIAkJLyogVGhlIG1tdV9vYmplY3QgaXMg cmVsZWFzZWQgbGF0ZSB3aGVuIGRlc3Ryb3lpbmcgdGhlCkBAIC0xNDgsNTAgKzE0NCw1NiBAQCBz dGF0aWMgaW50IGk5MTVfZ2VtX3VzZXJwdHJfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1 Y3QgbW11X25vdGlmaWVyICpfbW4sCiAJCSAqLwogCQltbyA9IGNvbnRhaW5lcl9vZihpdCwgc3Ry dWN0IGk5MTVfbW11X29iamVjdCwgaXQpOwogCQlpZiAoa3JlZl9nZXRfdW5sZXNzX3plcm8oJm1v LT5vYmotPmJhc2UucmVmY291bnQpKQotCQkJcXVldWVfd29yayhtbi0+d3EsICZtby0+d29yayk7 CisJCQlxdWV1ZV93b3JrKG1pcnJvci0+d3EsICZtby0+d29yayk7CiAKIAkJbGlzdF9hZGQoJm1v LT5saW5rLCAmY2FuY2VsbGVkKTsKLQkJaXQgPSBpbnRlcnZhbF90cmVlX2l0ZXJfbmV4dChpdCwg c3RhcnQsIGVuZCk7CisJCWl0ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX25leHQoaXQsIHVwZGF0ZS0+ c3RhcnQsIGVuZCk7CiAJfQogCWxpc3RfZm9yX2VhY2hfZW50cnkobW8sICZjYW5jZWxsZWQsIGxp bmspCiAJCWRlbF9vYmplY3QobW8pOwotCXNwaW5fdW5sb2NrKCZtbi0+bG9jayk7CisJc3Bpbl91 bmxvY2soJm1pcnJvci0+bG9jayk7CiAKIAlpZiAoIWxpc3RfZW1wdHkoJmNhbmNlbGxlZCkpCi0J CWZsdXNoX3dvcmtxdWV1ZShtbi0+d3EpOworCQlmbHVzaF93b3JrcXVldWUobWlycm9yLT53cSk7 CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfb3Bz IGk5MTVfZ2VtX3VzZXJwdHJfbm90aWZpZXIgPSB7Ci0JLmludmFsaWRhdGVfcmFuZ2Vfc3RhcnQg PSBpOTE1X2dlbV91c2VycHRyX21uX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQsCitzdGF0aWMgdm9p ZAoraTkxNV9taXJyb3JfcmVsZWFzZShzdHJ1Y3QgaG1tX21pcnJvciAqbWlycm9yKQoreworfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IGhtbV9taXJyb3Jfb3BzIGk5MTVfbWlycm9yX29wcyA9IHsK Kwkuc3luY19jcHVfZGV2aWNlX3BhZ2V0YWJsZXMgPSAmaTkxNV9zeW5jX2NwdV9kZXZpY2VfcGFn ZXRhYmxlcywKKwkucmVsZWFzZSA9ICZpOTE1X21pcnJvcl9yZWxlYXNlLAogfTsKIAotc3RhdGlj IHN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqCi1pOTE1X21tdV9ub3RpZmllcl9jcmVhdGUoc3Ry dWN0IG1tX3N0cnVjdCAqbW0pCitzdGF0aWMgc3RydWN0IGk5MTVfbWlycm9yKgoraTkxNV9taXJy b3JfY3JlYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewotCXN0cnVjdCBpOTE1X21tdV9ub3Rp ZmllciAqbW47CisJc3RydWN0IGk5MTVfbWlycm9yICptaXJyb3I7CiAKLQltbiA9IGttYWxsb2Mo c2l6ZW9mKCptbiksIEdGUF9LRVJORUwpOwotCWlmIChtbiA9PSBOVUxMKQorCW1pcnJvciA9IGtt YWxsb2Moc2l6ZW9mKCptaXJyb3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAobWlycm9yID09IE5VTEwp CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0Jc3Bpbl9sb2NrX2luaXQoJm1uLT5sb2Nr KTsKLQltbi0+bW4ub3BzID0gJmk5MTVfZ2VtX3VzZXJwdHJfbm90aWZpZXI7Ci0JbW4tPm9iamVj dHMgPSBSQl9ST09UX0NBQ0hFRDsKLQltbi0+d3EgPSBhbGxvY193b3JrcXVldWUoImk5MTUtdXNl cnB0ci1yZWxlYXNlIiwKLQkJCQkgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLAotCQkJCSAw KTsKLQlpZiAobW4tPndxID09IE5VTEwpIHsKLQkJa2ZyZWUobW4pOworCXNwaW5fbG9ja19pbml0 KCZtaXJyb3ItPmxvY2spOworCW1pcnJvci0+bWlycm9yLm9wcyA9ICZpOTE1X21pcnJvcl9vcHM7 CisJbWlycm9yLT5vYmplY3RzID0gUkJfUk9PVF9DQUNIRUQ7CisJbWlycm9yLT53cSA9IGFsbG9j X3dvcmtxdWV1ZSgiaTkxNS11c2VycHRyLXJlbGVhc2UiLAorCQkJCSAgICAgV1FfVU5CT1VORCB8 IFdRX01FTV9SRUNMQUlNLAorCQkJCSAgICAgMCk7CisJaWYgKG1pcnJvci0+d3EgPT0gTlVMTCkg eworCQlrZnJlZShtaXJyb3IpOwogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CiAKLQly ZXR1cm4gbW47CisJcmV0dXJuIG1pcnJvcjsKIH0KIAogc3RhdGljIHZvaWQKLWk5MTVfZ2VtX3Vz ZXJwdHJfcmVsZWFzZV9fbW11X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmopCitpOTE1X2dlbV91c2VycHRyX3JlbGVhc2VfX21pcnJvcihzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqKQogewogCXN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1vOwogCkBAIC0xOTks MzggKzIwMSwzOCBAQCBpOTE1X2dlbV91c2VycHRyX3JlbGVhc2VfX21tdV9ub3RpZmllcihzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogCWlmIChtbyA9PSBOVUxMKQogCQlyZXR1cm47 CiAKLQlzcGluX2xvY2soJm1vLT5tbi0+bG9jayk7CisJc3Bpbl9sb2NrKCZtby0+bWlycm9yLT5s b2NrKTsKIAlkZWxfb2JqZWN0KG1vKTsKLQlzcGluX3VubG9jaygmbW8tPm1uLT5sb2NrKTsKKwlz cGluX3VubG9jaygmbW8tPm1pcnJvci0+bG9jayk7CiAJa2ZyZWUobW8pOwogCiAJb2JqLT51c2Vy cHRyLm1tdV9vYmplY3QgPSBOVUxMOwogfQogCi1zdGF0aWMgc3RydWN0IGk5MTVfbW11X25vdGlm aWVyICoKLWk5MTVfbW11X25vdGlmaWVyX2ZpbmQoc3RydWN0IGk5MTVfbW1fc3RydWN0ICptbSkK K3N0YXRpYyBzdHJ1Y3QgaTkxNV9taXJyb3IgKgoraTkxNV9taXJyb3JfZmluZChzdHJ1Y3QgaTkx NV9tbV9zdHJ1Y3QgKm1tKQogewotCXN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW47CisJc3Ry dWN0IGk5MTVfbWlycm9yICptaXJyb3I7CiAJaW50IGVyciA9IDA7CiAKLQltbiA9IG1tLT5tbjsK LQlpZiAobW4pCi0JCXJldHVybiBtbjsKKwltaXJyb3IgPSBtbS0+bWlycm9yOworCWlmIChtaXJy b3IpCisJCXJldHVybiBtaXJyb3I7CiAKLQltbiA9IGk5MTVfbW11X25vdGlmaWVyX2NyZWF0ZSht bS0+bW0pOwotCWlmIChJU19FUlIobW4pKQotCQllcnIgPSBQVFJfRVJSKG1uKTsKKwltaXJyb3Ig PSBpOTE1X21pcnJvcl9jcmVhdGUobW0tPm1tKTsKKwlpZiAoSVNfRVJSKG1pcnJvcikpCisJCWVy ciA9IFBUUl9FUlIobWlycm9yKTsKIAogCWRvd25fd3JpdGUoJm1tLT5tbS0+bW1hcF9zZW0pOwog CW11dGV4X2xvY2soJm1tLT5pOTE1LT5tbV9sb2NrKTsKLQlpZiAobW0tPm1uID09IE5VTEwgJiYg IWVycikgeworCWlmIChtbS0+bWlycm9yID09IE5VTEwgJiYgIWVycikgewogCQkvKiBQcm90ZWN0 ZWQgYnkgbW1hcF9zZW0gKHdyaXRlLWxvY2spICovCi0JCWVyciA9IF9fbW11X25vdGlmaWVyX3Jl Z2lzdGVyKCZtbi0+bW4sIG1tLT5tbSk7CisJCWVyciA9IGhtbV9taXJyb3JfcmVnaXN0ZXIoJm1p cnJvci0+bWlycm9yLCBtbS0+bW0pOwogCQlpZiAoIWVycikgewogCQkJLyogUHJvdGVjdGVkIGJ5 IG1tX2xvY2sgKi8KLQkJCW1tLT5tbiA9IGZldGNoX2FuZF96ZXJvKCZtbik7CisJCQltbS0+bWly cm9yID0gZmV0Y2hfYW5kX3plcm8oJm1pcnJvcik7CiAJCX0KLQl9IGVsc2UgaWYgKG1tLT5tbikg eworCX0gZWxzZSBpZiAobW0tPm1pcnJvcikgewogCQkvKgogCQkgKiBTb21lb25lIGVsc2UgcmFj ZWQgYW5kIHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQgdGhlIG1tdQogCQkgKiBub3RpZmllciwgd2Ug Y2FuIGNhbmNlbCBvdXIgb3duIGVycm9ycy4KQEAgLTI0MCwxOSArMjQyLDE5IEBAIGk5MTVfbW11 X25vdGlmaWVyX2ZpbmQoc3RydWN0IGk5MTVfbW1fc3RydWN0ICptbSkKIAltdXRleF91bmxvY2so Jm1tLT5pOTE1LT5tbV9sb2NrKTsKIAl1cF93cml0ZSgmbW0tPm1tLT5tbWFwX3NlbSk7CiAKLQlp ZiAobW4gJiYgIUlTX0VSUihtbikpIHsKLQkJZGVzdHJveV93b3JrcXVldWUobW4tPndxKTsKLQkJ a2ZyZWUobW4pOworCWlmIChtaXJyb3IgJiYgIUlTX0VSUihtaXJyb3IpKSB7CisJCWRlc3Ryb3lf d29ya3F1ZXVlKG1pcnJvci0+d3EpOworCQlrZnJlZShtaXJyb3IpOwogCX0KIAotCXJldHVybiBl cnIgPyBFUlJfUFRSKGVycikgOiBtbS0+bW47CisJcmV0dXJuIGVyciA/IEVSUl9QVFIoZXJyKSA6 IG1tLT5taXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQKLWk5MTVfZ2VtX3VzZXJwdHJfaW5pdF9fbW11 X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCitpOTE1X2dlbV91c2Vy cHRyX2luaXRfX21pcnJvcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQkJCSAg ICB1bnNpZ25lZCBmbGFncykKIHsKLQlzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1uOworCXN0 cnVjdCBpOTE1X21pcnJvciAqbWlycm9yOwogCXN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1vOwog CiAJaWYgKGZsYWdzICYgSTkxNV9VU0VSUFRSX1VOU1lOQ0hST05JWkVEKQpAQCAtMjYxLDE1ICsy NjMsMTUgQEAgaTkxNV9nZW1fdXNlcnB0cl9pbml0X19tbXVfbm90aWZpZXIoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaiwKIAlpZiAoV0FSTl9PTihvYmotPnVzZXJwdHIubW0gPT0gTlVM TCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbW4gPSBpOTE1X21tdV9ub3RpZmllcl9maW5kKG9i ai0+dXNlcnB0ci5tbSk7Ci0JaWYgKElTX0VSUihtbikpCi0JCXJldHVybiBQVFJfRVJSKG1uKTsK KwltaXJyb3IgPSBpOTE1X21pcnJvcl9maW5kKG9iai0+dXNlcnB0ci5tbSk7CisJaWYgKElTX0VS UihtaXJyb3IpKQorCQlyZXR1cm4gUFRSX0VSUihtaXJyb3IpOwogCiAJbW8gPSBremFsbG9jKHNp emVvZigqbW8pLCBHRlBfS0VSTkVMKTsKIAlpZiAobW8gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9N RU07CiAKLQltby0+bW4gPSBtbjsKKwltby0+bWlycm9yID0gbWlycm9yOwogCW1vLT5vYmogPSBv Ymo7CiAJbW8tPml0LnN0YXJ0ID0gb2JqLT51c2VycHRyLnB0cjsKIAltby0+aXQubGFzdCA9IG9i ai0+dXNlcnB0ci5wdHIgKyBvYmotPmJhc2Uuc2l6ZSAtIDE7CkBAIC0yODAsMjYgKzI4MiwyNSBA QCBpOTE1X2dlbV91c2VycHRyX2luaXRfX21tdV9ub3RpZmllcihzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAogfQogCiBzdGF0aWMgdm9pZAotaTkxNV9tbXVfbm90aWZpZXJfZnJlZShz dHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1uLAotCQkgICAgICAgc3RydWN0IG1tX3N0cnVjdCAq bW0pCitpOTE1X21pcnJvcl9mcmVlKHN0cnVjdCBpOTE1X21pcnJvciAqbWlycm9yLCBzdHJ1Y3Qg bW1fc3RydWN0ICptbSkKIHsKLQlpZiAobW4gPT0gTlVMTCkKKwlpZiAobWlycm9yID09IE5VTEwp CiAJCXJldHVybjsKIAotCW1tdV9ub3RpZmllcl91bnJlZ2lzdGVyKCZtbi0+bW4sIG1tKTsKLQlk ZXN0cm95X3dvcmtxdWV1ZShtbi0+d3EpOwotCWtmcmVlKG1uKTsKKwlobW1fbWlycm9yX3VucmVn aXN0ZXIoJm1pcnJvci0+bWlycm9yKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShtaXJyb3ItPndxKTsK KwlrZnJlZShtaXJyb3IpOwogfQogCiAjZWxzZQogCiBzdGF0aWMgdm9pZAotaTkxNV9nZW1fdXNl cnB0cl9yZWxlYXNlX19tbXVfbm90aWZpZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aikKK2k5MTVfZ2VtX3VzZXJwdHJfcmVsZWFzZV9fbWlycm9yKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmopCiB7CiB9CiAKIHN0YXRpYyBpbnQKLWk5MTVfZ2VtX3VzZXJwdHJfaW5pdF9f bW11X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCitpOTE1X2dlbV91 c2VycHRyX2luaXRfX21pcnJvcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQkJ CSAgICB1bnNpZ25lZCBmbGFncykKIHsKIAlpZiAoKGZsYWdzICYgSTkxNV9VU0VSUFRSX1VOU1lO Q0hST05JWkVEKSA9PSAwKQpAQCAtMzEyLDggKzMxMyw4IEBAIGk5MTVfZ2VtX3VzZXJwdHJfaW5p dF9fbW11X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiB9CiAKIHN0 YXRpYyB2b2lkCi1pOTE1X21tdV9ub3RpZmllcl9mcmVlKHN0cnVjdCBpOTE1X21tdV9ub3RpZmll ciAqbW4sCi0JCSAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK2k5MTVfbWlycm9yX2ZyZWUo c3RydWN0IGk5MTVfbWlycm9yICptaXJyb3IsCisJCSBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsK IH0KIApAQCAtMzY0LDcgKzM2NSw3IEBAIGk5MTVfZ2VtX3VzZXJwdHJfaW5pdF9fbW1fc3RydWN0 KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJCW1tLT5tbSA9IGN1cnJlbnQtPm1t OwogCQltbWdyYWIoY3VycmVudC0+bW0pOwogCi0JCW1tLT5tbiA9IE5VTEw7CisJCW1tLT5taXJy b3IgPSBOVUxMOwogCiAJCS8qIFByb3RlY3RlZCBieSBkZXZfcHJpdi0+bW1fbG9jayAqLwogCQlo YXNoX2FkZChkZXZfcHJpdi0+bW1fc3RydWN0cywKQEAgLTM4Miw3ICszODMsNyBAQCBzdGF0aWMg dm9pZAogX19pOTE1X21tX3N0cnVjdF9mcmVlX193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3 b3JrKQogewogCXN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW0gPSBjb250YWluZXJfb2Yod29yaywg dHlwZW9mKCptbSksIHdvcmspOwotCWk5MTVfbW11X25vdGlmaWVyX2ZyZWUobW0tPm1uLCBtbS0+ bW0pOworCWk5MTVfbWlycm9yX2ZyZWUobW0tPm1pcnJvciwgbW0tPm1tKTsKIAltbWRyb3AobW0t Pm1tKTsKIAlrZnJlZShtbSk7CiB9CkBAIC00NzQsMTQgKzQ3NSwxNCBAQCBfX2k5MTVfZ2VtX3Vz ZXJwdHJfc2V0X2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCSAqIGEg R1RUIG1tYXBwaW5nIChwb3NzaWJsZSB3aXRoIGEgTUFQX0ZJWEVEKSAtIHRoZW4gd2hlbiB3ZSBo YXZlCiAJICogdG8gaW52YWxpZGF0ZSB0aGF0IG1tYXBpbmcsIG1tX2ludmFsaWRhdGVfcmFuZ2Ug aXMgY2FsbGVkIHdpdGgKIAkgKiB0aGUgdXNlcnB0ciBhZGRyZXNzICphbmQqIHRoZSBzdHJ1Y3Rf bXV0ZXggaGVsZC4gIFRvIHByZXZlbnQgdGhhdAotCSAqIHdlIHNldCBhIGZsYWcgdW5kZXIgdGhl IGk5MTVfbW11X25vdGlmaWVyIHNwaW5sb2NrIHRvIGluZGljYXRlCisJICogd2Ugc2V0IGEgZmxh ZyB1bmRlciB0aGUgaTkxNV9taXJyb3Igc3BpbmxvY2sgdG8gaW5kaWNhdGUKIAkgKiB3aGV0aGVy IHRoaXMgb2JqZWN0IGlzIHZhbGlkLgogCSAqLwotI2lmIGRlZmluZWQoQ09ORklHX01NVV9OT1RJ RklFUikKKyNpZiBkZWZpbmVkKENPTkZJR19ITU1fTUlSUk9SKQogCWlmIChvYmotPnVzZXJwdHIu bW11X29iamVjdCA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCXNwaW5fbG9jaygmb2JqLT51c2Vy cHRyLm1tdV9vYmplY3QtPm1uLT5sb2NrKTsKKwlzcGluX2xvY2soJm9iai0+dXNlcnB0ci5tbXVf b2JqZWN0LT5taXJyb3ItPmxvY2spOwogCS8qIEluIG9yZGVyIHRvIHNlcmlhbGlzZSBnZXRfcGFn ZXMgd2l0aCBhbiBvdXRzdGFuZGluZwogCSAqIGNhbmNlbF91c2VycHRyLCB3ZSBtdXN0IGRyb3Ag dGhlIHN0cnVjdF9tdXRleCBhbmQgdHJ5IGFnYWluLgogCSAqLwpAQCAtNDkxLDcgKzQ5Miw3IEBA IF9faTkxNV9nZW1fdXNlcnB0cl9zZXRfYWN0aXZlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCiAJCWFkZF9vYmplY3Qob2JqLT51c2VycHRyLm1tdV9vYmplY3QpOwogCWVsc2UKIAkJ cmV0ID0gLUVBR0FJTjsKLQlzcGluX3VubG9jaygmb2JqLT51c2VycHRyLm1tdV9vYmplY3QtPm1u LT5sb2NrKTsKKwlzcGluX3VubG9jaygmb2JqLT51c2VycHRyLm1tdV9vYmplY3QtPm1pcnJvci0+ bG9jayk7CiAjZW5kaWYKIAogCXJldHVybiByZXQ7CkBAIC02MjUsMTAgKzYyNiwxMCBAQCBzdGF0 aWMgaW50IGk5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmopCiAJICogdGhlIHByb2Nlc3MgbWF5IG5vdCBiZSBleHBlY3RpbmcgdGhhdCBhIHBh cnRpY3VsYXIgcGllY2Ugb2YKIAkgKiBtZW1vcnkgaXMgdGllZCB0byB0aGUgR1BVLgogCSAqCi0J ICogRm9ydHVuYXRlbHksIHdlIGNhbiBob29rIGludG8gdGhlIG1tdV9ub3RpZmllciBpbiBvcmRl ciB0bwotCSAqIGRpc2NhcmQgdGhlIHBhZ2UgcmVmZXJlbmNlcyBwcmlvciB0byBhbnl0aGluZyBu YXN0eSBoYXBwZW5pbmcKLQkgKiB0byB0aGUgdm1hIChkaXNjYXJkIG9yIGNsb25pbmcpIHdoaWNo IHNob3VsZCBwcmV2ZW50IHRoZSBtb3JlCi0JICogZWdyZWdpb3VzIGNhc2VzIGZyb20gY2F1c2lu ZyBoYXJtLgorCSAqIEZvcnR1bmF0ZWx5LCB3ZSBjYW4gaG9vayBpbnRvIG1pcnJvciBjYWxsYmFj ayBpbiBvcmRlciB0byBkaXNjYXJkCisJICogdGhlICBwYWdlIHJlZmVyZW5jZXMgcHJpb3IgdG8g YW55dGhpbmcgbmFzdHkgaGFwcGVuaW5nIHRvIHRoZSB2bWEKKwkgKiAoZGlzY2FyZCBvciBjbG9u aW5nKSB3aGljaCBzaG91bGQgcHJldmVudCB0aGUgbW9yZSBlZ3JlZ2lvdXMgY2FzZXMKKwkgKiBm cm9tIGNhdXNpbmcgaGFybS4KIAkgKi8KIAogCWlmIChvYmotPnVzZXJwdHIud29yaykgewpAQCAt NzA2LDcgKzcwNyw3IEBAIGk5MTVfZ2VtX3VzZXJwdHJfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmosCiBzdGF0aWMgdm9pZAogaTkxNV9nZW1fdXNlcnB0cl9yZWxlYXNl KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7Ci0JaTkxNV9nZW1fdXNlcnB0cl9y ZWxlYXNlX19tbXVfbm90aWZpZXIob2JqKTsKKwlpOTE1X2dlbV91c2VycHRyX3JlbGVhc2VfX21p cnJvcihvYmopOwogCWk5MTVfZ2VtX3VzZXJwdHJfcmVsZWFzZV9fbW1fc3RydWN0KG9iaik7CiB9 CiAKQEAgLTcxNiw3ICs3MTcsNyBAQCBpOTE1X2dlbV91c2VycHRyX2RtYWJ1Zl9leHBvcnQoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIAlpZiAob2JqLT51c2VycHRyLm1tdV9vYmpl Y3QpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIGk5MTVfZ2VtX3VzZXJwdHJfaW5pdF9fbW11X25v dGlmaWVyKG9iaiwgMCk7CisJcmV0dXJuIGk5MTVfZ2VtX3VzZXJwdHJfaW5pdF9fbWlycm9yKG9i aiwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMg aTkxNV9nZW1fdXNlcnB0cl9vcHMgPSB7CkBAIC04MjIsMTIgKzgyMywxMiBAQCBpOTE1X2dlbV91 c2VycHRyX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCWk5MTVfZ2VtX29iamVjdF9z ZXRfcmVhZG9ubHkob2JqKTsKIAogCS8qIEFuZCBrZWVwIGEgcG9pbnRlciB0byB0aGUgY3VycmVu dC0+bW0gZm9yIHJlc29sdmluZyB0aGUgdXNlciBwYWdlcwotCSAqIGF0IGJpbmRpbmcuIFRoaXMg bWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGhvb2sgaW50byB0aGUgbW11X25vdGlmaWVyCi0JICogaW4g b3JkZXIgdG8gZGV0ZWN0IGlmIHRoZSBtbXUgaXMgZGVzdHJveWVkLgorCSAqIGF0IGJpbmRpbmcu IFRoaXMgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGhvb2sgaW50byB0aGUgbWlycm9yIGluIG9yZGVy CisJICogdG8gZGV0ZWN0IGlmIHRoZSBtbXUgaXMgZGVzdHJveWVkLgogCSAqLwogCXJldCA9IGk5 MTVfZ2VtX3VzZXJwdHJfaW5pdF9fbW1fc3RydWN0KG9iaik7CiAJaWYgKHJldCA9PSAwKQotCQly ZXQgPSBpOTE1X2dlbV91c2VycHRyX2luaXRfX21tdV9ub3RpZmllcihvYmosIGFyZ3MtPmZsYWdz KTsKKwkJcmV0ID0gaTkxNV9nZW1fdXNlcnB0cl9pbml0X19taXJyb3Iob2JqLCBhcmdzLT5mbGFn cyk7CiAJaWYgKHJldCA9PSAwKQogCQlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZSwg Jm9iai0+YmFzZSwgJmhhbmRsZSk7CiAKLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2 ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==