From mboxrd@z Thu Jan 1 00:00:00 1970 From: Xiaolin Zhang Subject: [PATCH v5 7/8] drm/i915/gvt: GVTg support ppgtt pv optimization Date: Mon, 29 Apr 2019 11:10:57 +0800 Message-ID: <1556507458-24684-8-git-send-email-xiaolin.zhang@intel.com> References: <1556507458-24684-1-git-send-email-xiaolin.zhang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1556507458-24684-1-git-send-email-xiaolin.zhang@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org Cc: zhenyu.z.wang@intel.com, hang.yuan@intel.com, zhiyuan.lv@intel.com List-Id: intel-gfx@lists.freedesktop.org VGhpcyBwYXRjaCBoYW5kbGVzIHBwZ3R0IHVwZGF0ZSBmcm9tIGcydiBub3RpZmljYXRpb24uCgpJ dCByZWFkIG91dCBwcGd0dCBwdGUgZW50cmllcyBmcm9tIGd1ZXN0IHB0ZSB0YWJsZXMgcGFnZSBh bmQKY29udmVydCB0aGVtIHRvIGhvc3QgcGZucy4KCkl0IGNyZWF0ZXMgbG9jYWwgcHBndHQgdGFi bGVzIGFuZCBpbnNlcnQgdGhlIGNvbnRlbnQgcGFnZXMKaW50byB0aGUgbG9jYWwgcHBndHQgdGFi bGVzIGRpcmVjdGx5LCB3aGljaCBkb2VzIG5vdCB0cmFjawp0aGUgdXNhZ2Ugb2YgZ3Vlc3QgcGFn ZSB0YWJsZSBhbmQgcmVtb3ZlcyB0aGUgY29zdCBvZiB3cml0ZQpwcm90ZWN0aW9uIGZyb20gdGhl IG9yaWdpbmFsIHNoYWRvdyBwYWdlIG1lY2hhbnNpbS4KCnYwOiBSRkMKdjE6IHJlYmFzZQp2Mjog cmViYXNlCnYzOiByZXBvcnQgcHYgcGdndHQgY2FwIHRvIGd1ZXN0CnY0OiByZW5hbWVkIFZHUFVf UFZNTUlPIHdpdGggVkdQVV9QVkNBUCBmb3IgbmFtZSBjb25zaXN0YW5jZSwgbm8gUFYKc3VwcG9y dCBpZiBnZnggdnRkIGVuYWJsZWQuCnY1OiByZWJhc2UKClNpZ25lZC1vZmYtYnk6IFhpYW9saW4g WmhhbmcgPHhpYW9saW4uemhhbmdAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d2dC9ndHQuYyAgICAgIHwgMzE3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d0dC5oICAgICAgfCAgIDkgKwogZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L2d2dC5oICAgICAgfCAgIDQgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3Z0L2hhbmRsZXJzLmMgfCAgMTIgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC92Z3B1LmMg ICAgIHwgICAzICsKIDUgZmlsZXMgY2hhbmdlZCwgMzQ0IGluc2VydGlvbnMoKyksIDEgZGVsZXRp b24oLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3R0LmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3R0LmMKaW5kZXggYzJmN2QyMC4uNTJhMDA0MiAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d0dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d2dC9ndHQuYwpAQCAtMTc1MCw2ICsxNzUwLDI1IEBAIHN0YXRpYyBpbnQgcHBndHRf aGFuZGxlX2d1ZXN0X3dyaXRlX3BhZ2VfdGFibGVfYnl0ZXMoCiAJcmV0dXJuIDA7CiB9CiAKK3N0 YXRpYyB2b2lkIGludmFsaWRhdGVfbW1fcHYoc3RydWN0IGludGVsX3ZncHVfbW0gKm1tKQorewor CXN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1ID0gbW0tPnZncHU7CisJc3RydWN0IGludGVsX2d2dCAq Z3Z0ID0gdmdwdS0+Z3Z0OworCXN0cnVjdCBpbnRlbF9ndnRfZ3R0ICpndHQgPSAmZ3Z0LT5ndHQ7 CisJc3RydWN0IGludGVsX2d2dF9ndHRfcHRlX29wcyAqb3BzID0gZ3R0LT5wdGVfb3BzOworCXN0 cnVjdCBpbnRlbF9ndnRfZ3R0X2VudHJ5IHNlOworCisJaTkxNV9wcGd0dF9wdXQobW0tPnBwZ3R0 KTsKKworCXBwZ3R0X2dldF9zaGFkb3dfcm9vdF9lbnRyeShtbSwgJnNlLCAwKTsKKwlpZiAoIW9w cy0+dGVzdF9wcmVzZW50KCZzZSkpCisJCXJldHVybjsKKwlzZS52YWw2NCA9IDA7CisJcHBndHRf c2V0X3NoYWRvd19yb290X2VudHJ5KG1tLCAmc2UsIDApOworCisJbW0tPnBwZ3R0X21tLnNoYWRv d2VkICA9IGZhbHNlOworfQorCiBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3BwZ3R0X21tKHN0cnVj dCBpbnRlbF92Z3B1X21tICptbSkKIHsKIAlzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSA9IG1tLT52 Z3B1OwpAQCAtMTc2Miw2ICsxNzgxLDExIEBAIHN0YXRpYyB2b2lkIGludmFsaWRhdGVfcHBndHRf bW0oc3RydWN0IGludGVsX3ZncHVfbW0gKm1tKQogCWlmICghbW0tPnBwZ3R0X21tLnNoYWRvd2Vk KQogCQlyZXR1cm47CiAKKwlpZiAoVkdQVV9QVkNBUChtbS0+dmdwdSwgUFZfUFBHVFRfVVBEQVRF KSkgeworCQlpbnZhbGlkYXRlX21tX3B2KG1tKTsKKwkJcmV0dXJuOworCX0KKwogCWZvciAoaW5k ZXggPSAwOyBpbmRleCA8IEFSUkFZX1NJWkUobW0tPnBwZ3R0X21tLnNoYWRvd19wZHBzKTsgaW5k ZXgrKykgewogCQlwcGd0dF9nZXRfc2hhZG93X3Jvb3RfZW50cnkobW0sICZzZSwgaW5kZXgpOwog CkBAIC0xNzc5LDYgKzE4MDMsMjYgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9wcGd0dF9tbShz dHJ1Y3QgaW50ZWxfdmdwdV9tbSAqbW0pCiAJbW0tPnBwZ3R0X21tLnNoYWRvd2VkID0gZmFsc2U7 CiB9CiAKK3N0YXRpYyBpbnQgc2hhZG93X21tX3B2KHN0cnVjdCBpbnRlbF92Z3B1X21tICptbSkK K3sKKwlzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSA9IG1tLT52Z3B1OworCXN0cnVjdCBpbnRlbF9n dnQgKmd2dCA9IHZncHUtPmd2dDsKKwlzdHJ1Y3QgaW50ZWxfZ3Z0X2d0dF9lbnRyeSBzZTsKKwor CW1tLT5wcGd0dCA9IGk5MTVfcHBndHRfY3JlYXRlKGd2dC0+ZGV2X3ByaXYpOworCWlmIChJU19F UlIobW0tPnBwZ3R0KSkgeworCQlndnRfdmdwdV9lcnIoImZhaWwgdG8gY3JlYXRlIHBwZ3R0IGZv ciBwZHAgMHglbGx4XG4iLAorCQkJCXB4X2RtYSgmbW0tPnBwZ3R0LT5wbWw0KSk7CisJCXJldHVy biBQVFJfRVJSKG1tLT5wcGd0dCk7CisJfQorCisJc2UudHlwZSA9IEdUVF9UWVBFX1BQR1RUX1JP T1RfTDRfRU5UUlk7CisJc2UudmFsNjQgPSBweF9kbWEoJm1tLT5wcGd0dC0+cG1sNCk7CisJcHBn dHRfc2V0X3NoYWRvd19yb290X2VudHJ5KG1tLCAmc2UsIDApOworCW1tLT5wcGd0dF9tbS5zaGFk b3dlZCAgPSB0cnVlOworCisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBpbnQgc2hhZG93X3BwZ3R0 X21tKHN0cnVjdCBpbnRlbF92Z3B1X21tICptbSkKIHsKQEAgLTE3OTMsNiArMTgzNyw5IEBAIHN0 YXRpYyBpbnQgc2hhZG93X3BwZ3R0X21tKHN0cnVjdCBpbnRlbF92Z3B1X21tICptbSkKIAlpZiAo bW0tPnBwZ3R0X21tLnNoYWRvd2VkKQogCQlyZXR1cm4gMDsKIAorCWlmIChWR1BVX1BWQ0FQKG1t LT52Z3B1LCBQVl9QUEdUVF9VUERBVEUpKQorCQlyZXR1cm4gc2hhZG93X21tX3B2KG1tKTsKKwog CW1tLT5wcGd0dF9tbS5zaGFkb3dlZCA9IHRydWU7CiAKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXgg PCBBUlJBWV9TSVpFKG1tLT5wcGd0dF9tbS5ndWVzdF9wZHBzKTsgaW5kZXgrKykgewpAQCAtMjc5 MywzICsyODQwLDI3MyBAQCB2b2lkIGludGVsX3ZncHVfcmVzZXRfZ3R0KHN0cnVjdCBpbnRlbF92 Z3B1ICp2Z3B1KQogCWludGVsX3ZncHVfZGVzdHJveV9hbGxfcHBndHRfbW0odmdwdSk7CiAJaW50 ZWxfdmdwdV9yZXNldF9nZ3R0KHZncHUsIHRydWUpOwogfQorCitpbnQgaW50ZWxfdmdwdV9nMnZf cHZfcHBndHRfYWxsb2NfNGx2bChzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwKKwkJdTY0IHBkcHNb XSkKK3sKKwlzdHJ1Y3QgaW50ZWxfdmdwdV9tbSAqbW07CisJaW50IHJldCA9IDA7CisJdTMyIG9m ZnNldDsKKwlzdHJ1Y3QgcHZfcHBndHRfdXBkYXRlIHB2X3BwZ3R0OworCisJb2Zmc2V0ID0gb2Zm c2V0b2Yoc3RydWN0IGd2dF9zaGFyZWRfcGFnZSwgcHZfcHBndHQpOworCWludGVsX2d2dF9yZWFk X3NoYXJlZF9wYWdlKHZncHUsIG9mZnNldCwgJnB2X3BwZ3R0LCBzaXplb2YocHZfcHBndHQpKTsK KworCW1tID0gaW50ZWxfdmdwdV9maW5kX3BwZ3R0X21tKHZncHUsICZwdl9wcGd0dC5wZHApOwor CWlmICghbW0pIHsKKwkJZ3Z0X3ZncHVfZXJyKCJmYWlsZWQgdG8gZmluZCBwZHAgMHglbGx4XG4i LCBwdl9wcGd0dC5wZHApOworCQlyZXQgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCXJldCA9IG1t LT5wcGd0dC0+dm0uYWxsb2NhdGVfdmFfcmFuZ2UoJm1tLT5wcGd0dC0+dm0sCisJCQlwdl9wcGd0 dC5zdGFydCwgcHZfcHBndHQubGVuZ3RoKTsKKwkJaWYgKHJldCkKKwkJCWd2dF92Z3B1X2Vycigi ZmFpbGVkIHRvIGFsbG9jICVsbHhcbiIsIHB2X3BwZ3R0LnBkcCk7CisJfQorCisJcmV0dXJuIHJl dDsKK30KKworaW50IGludGVsX3ZncHVfZzJ2X3B2X3BwZ3R0X2NsZWFyXzRsdmwoc3RydWN0IGlu dGVsX3ZncHUgKnZncHUsCisJCXU2NCBwZHBzW10pCit7CisJc3RydWN0IGludGVsX3ZncHVfbW0g Km1tOworCWludCByZXQgPSAwOworCXUzMiBvZmZzZXQ7CisJc3RydWN0IHB2X3BwZ3R0X3VwZGF0 ZSBwdl9wcGd0dDsKKworCW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBndnRfc2hhcmVkX3BhZ2Us IHB2X3BwZ3R0KTsKKwlpbnRlbF9ndnRfcmVhZF9zaGFyZWRfcGFnZSh2Z3B1LCBvZmZzZXQsICZw dl9wcGd0dCwgc2l6ZW9mKHB2X3BwZ3R0KSk7CisJbW0gPSBpbnRlbF92Z3B1X2ZpbmRfcHBndHRf bW0odmdwdSwgJnB2X3BwZ3R0LnBkcCk7CisJaWYgKCFtbSkgeworCQlndnRfdmdwdV9lcnIoImZh aWxlZCB0byBmaW5kIHBkcCAweCVsbHhcbiIsIHB2X3BwZ3R0LnBkcCk7CisJCXJldCA9IC1FSU5W QUw7CisJfSBlbHNlIHsKKwkJbW0tPnBwZ3R0LT52bS5jbGVhcl9yYW5nZSgmbW0tPnBwZ3R0LT52 bSwKKwkJCXB2X3BwZ3R0LnN0YXJ0LCBwdl9wcGd0dC5sZW5ndGgpOworCX0KKworCXJldHVybiBy ZXQ7Cit9CisKKyNkZWZpbmUgR0VOOF9QTUw0RV9TSVpFCQkoMVVMIDw8IEdFTjhfUE1MNEVfU0hJ RlQpCisjZGVmaW5lIEdFTjhfUE1MNEVfU0laRV9NQVNLCSh+KEdFTjhfUE1MNEVfU0laRSAtIDEp KQorI2RlZmluZSBHRU44X1BEUEVfU0laRQkJKDFVTCA8PCBHRU44X1BEUEVfU0hJRlQpCisjZGVm aW5lIEdFTjhfUERQRV9TSVpFX01BU0sJKH4oR0VOOF9QRFBFX1NJWkUgLSAxKSkKKyNkZWZpbmUg R0VOOF9QREVfU0laRQkJKDFVTCA8PCBHRU44X1BERV9TSElGVCkKKyNkZWZpbmUgR0VOOF9QREVf U0laRV9NQVNLCSh+KEdFTjhfUERFX1NJWkUgLSAxKSkKKworI2RlZmluZSBwbWw0X2FkZHJfZW5k KGFkZHIsIGVuZCkJCQkJCVwKKyh7CXVuc2lnbmVkIGxvbmcgX19ib3VuZGFyeSA9IFwKKwkJCSgo YWRkcikgKyBHRU44X1BNTDRFX1NJWkUpICYgR0VOOF9QTUw0RV9TSVpFX01BU0s7IFwKKwkoX19i b3VuZGFyeSA8IChlbmQpKSA/IF9fYm91bmRhcnkgOiAoZW5kKTsJCVwKK30pCisKKyNkZWZpbmUg cGRwX2FkZHJfZW5kKGFkZHIsIGVuZCkJCQkJCQlcCisoewl1bnNpZ25lZCBsb25nIF9fYm91bmRh cnkgPSBcCisJCQkoKGFkZHIpICsgR0VOOF9QRFBFX1NJWkUpICYgR0VOOF9QRFBFX1NJWkVfTUFT SzsgXAorCShfX2JvdW5kYXJ5IDwgKGVuZCkpID8gX19ib3VuZGFyeSA6IChlbmQpOwkJXAorfSkK KworI2RlZmluZSBwZF9hZGRyX2VuZChhZGRyLCBlbmQpCQkJCQkJXAorKHsJdW5zaWduZWQgbG9u ZyBfX2JvdW5kYXJ5ID0gXAorCQkJKChhZGRyKSArIEdFTjhfUERFX1NJWkUpICYgR0VOOF9QREVf U0laRV9NQVNLOwlcCisJKF9fYm91bmRhcnkgPCAoZW5kKSkgPyBfX2JvdW5kYXJ5IDogKGVuZCk7 CQlcCit9KQorCitzdHJ1Y3QgcHBndHRfd2FsayB7CisJdW5zaWduZWQgbG9uZyAqbWZuczsKKwlp bnQgbWZuX2luZGV4OworCXVuc2lnbmVkIGxvbmcgKnB0OworfTsKKworc3RhdGljIGludCB3YWxr X3B0X3JhbmdlKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1LCB1NjQgcHQsCisJCQkJdTY0IHN0YXJ0 LCB1NjQgZW5kLCBzdHJ1Y3QgcHBndHRfd2FsayAqd2FsaykKK3sKKwljb25zdCBzdHJ1Y3QgaW50 ZWxfZ3Z0X2RldmljZV9pbmZvICppbmZvID0gJnZncHUtPmd2dC0+ZGV2aWNlX2luZm87CisJc3Ry dWN0IGludGVsX2d2dF9ndHRfZ21hX29wcyAqZ21hX29wcyA9IHZncHUtPmd2dC0+Z3R0LmdtYV9v cHM7CisJdW5zaWduZWQgbG9uZyBzdGFydF9pbmRleCwgZW5kX2luZGV4OworCWludCByZXQ7CisJ aW50IGk7CisJdW5zaWduZWQgbG9uZyBtZm4sIGdmbjsKKworCXN0YXJ0X2luZGV4ID0gZ21hX29w cy0+Z21hX3RvX3B0ZV9pbmRleChzdGFydCk7CisJZW5kX2luZGV4ID0gKChlbmQgLSBzdGFydCkg Pj4gUEFHRV9TSElGVCkgKyBzdGFydF9pbmRleDsKKworCXJldCA9IGludGVsX2d2dF9oeXBlcnZp c29yX3JlYWRfZ3BhKHZncHUsCisJCShwdCAmIFBBR0VfTUFTSykgKyAoc3RhcnRfaW5kZXggPDwg aW5mby0+Z3R0X2VudHJ5X3NpemVfc2hpZnQpLAorCQl3YWxrLT5wdCArIHN0YXJ0X2luZGV4LAor CQkoZW5kX2luZGV4IC0gc3RhcnRfaW5kZXgpIDw8IGluZm8tPmd0dF9lbnRyeV9zaXplX3NoaWZ0 KTsKKwlpZiAocmV0KSB7CisJCWd2dF92Z3B1X2VycigiZmFpbCB0byByZWFkIGdwYSAlbGx4XG4i LCBwdCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChpID0gc3RhcnRfaW5kZXg7IGkgPCBl bmRfaW5kZXg7IGkrKykgeworCQlnZm4gPSB3YWxrLT5wdFtpXSA+PiBQQUdFX1NISUZUOworCQlt Zm4gPSBpbnRlbF9ndnRfaHlwZXJ2aXNvcl9nZm5fdG9fbWZuKHZncHUsIGdmbik7CisJCWlmICht Zm4gPT0gSU5URUxfR1ZUX0lOVkFMSURfQUREUikgeworCQkJZ3Z0X3ZncHVfZXJyKCJmYWlsIHRv IHRyYW5zbGF0ZSBnZm46IDB4JWx4XG4iLCBnZm4pOworCQkJcmV0dXJuIC1FTlhJTzsKKwkJfQor CQl3YWxrLT5tZm5zW3dhbGstPm1mbl9pbmRleCsrXSA9IG1mbiA8PCBQQUdFX1NISUZUOworCX0K KworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgd2Fsa19wZF9yYW5nZShzdHJ1Y3QgaW50 ZWxfdmdwdSAqdmdwdSwgdTY0IHBkLAorCQkJCXU2NCBzdGFydCwgdTY0IGVuZCwgc3RydWN0IHBw Z3R0X3dhbGsgKndhbGspCit7CisJY29uc3Qgc3RydWN0IGludGVsX2d2dF9kZXZpY2VfaW5mbyAq aW5mbyA9ICZ2Z3B1LT5ndnQtPmRldmljZV9pbmZvOworCXN0cnVjdCBpbnRlbF9ndnRfZ3R0X2dt YV9vcHMgKmdtYV9vcHMgPSB2Z3B1LT5ndnQtPmd0dC5nbWFfb3BzOworCXVuc2lnbmVkIGxvbmcg aW5kZXg7CisJdTY0IHB0LCBuZXh0OworCWludCByZXQgID0gMDsKKworCWRvIHsKKwkJaW5kZXgg PSBnbWFfb3BzLT5nbWFfdG9fcGRlX2luZGV4KHN0YXJ0KTsKKworCQlyZXQgPSBpbnRlbF9ndnRf aHlwZXJ2aXNvcl9yZWFkX2dwYSh2Z3B1LAorCQkJKHBkICYgUEFHRV9NQVNLKSArIChpbmRleCA8 PAorCQkJaW5mby0+Z3R0X2VudHJ5X3NpemVfc2hpZnQpLCAmcHQsIDgpOworCQlpZiAocmV0KQor CQkJcmV0dXJuIHJldDsKKwkJbmV4dCA9IHBkX2FkZHJfZW5kKHN0YXJ0LCBlbmQpOworCQl3YWxr X3B0X3JhbmdlKHZncHUsIHB0LCBzdGFydCwgbmV4dCwgd2Fsayk7CisKKwkJc3RhcnQgPSBuZXh0 OworCX0gd2hpbGUgKHN0YXJ0ICE9IGVuZCk7CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRp YyBpbnQgd2Fsa19wZHBfcmFuZ2Uoc3RydWN0IGludGVsX3ZncHUgKnZncHUsIHU2NCBwZHAsCisJ CQkJICB1NjQgc3RhcnQsIHU2NCBlbmQsIHN0cnVjdCBwcGd0dF93YWxrICp3YWxrKQoreworCWNv bnN0IHN0cnVjdCBpbnRlbF9ndnRfZGV2aWNlX2luZm8gKmluZm8gPSAmdmdwdS0+Z3Z0LT5kZXZp Y2VfaW5mbzsKKwlzdHJ1Y3QgaW50ZWxfZ3Z0X2d0dF9nbWFfb3BzICpnbWFfb3BzID0gdmdwdS0+ Z3Z0LT5ndHQuZ21hX29wczsKKwl1bnNpZ25lZCBsb25nIGluZGV4OworCXU2NCBwZCwgbmV4dDsK KwlpbnQgcmV0ICA9IDA7CisKKwlkbyB7CisJCWluZGV4ID0gZ21hX29wcy0+Z21hX3RvX2w0X3Bk cF9pbmRleChzdGFydCk7CisKKwkJcmV0ID0gaW50ZWxfZ3Z0X2h5cGVydmlzb3JfcmVhZF9ncGEo dmdwdSwKKwkJCShwZHAgJiBQQUdFX01BU0spICsgKGluZGV4IDw8CisJCQlpbmZvLT5ndHRfZW50 cnlfc2l6ZV9zaGlmdCksICZwZCwgOCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlu ZXh0ID0gcGRwX2FkZHJfZW5kKHN0YXJ0LCBlbmQpOworCQl3YWxrX3BkX3JhbmdlKHZncHUsIHBk LCBzdGFydCwgbmV4dCwgd2Fsayk7CisJCXN0YXJ0ID0gbmV4dDsKKwl9IHdoaWxlIChzdGFydCAh PSBlbmQpOworCisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50IHdhbGtfcG1sNF9yYW5n ZShzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwgdTY0IHBtbDQsCisJCQkJdTY0IHN0YXJ0LCB1NjQg ZW5kLCBzdHJ1Y3QgcHBndHRfd2FsayAqd2FsaykKK3sKKwljb25zdCBzdHJ1Y3QgaW50ZWxfZ3Z0 X2RldmljZV9pbmZvICppbmZvID0gJnZncHUtPmd2dC0+ZGV2aWNlX2luZm87CisJc3RydWN0IGlu dGVsX2d2dF9ndHRfZ21hX29wcyAqZ21hX29wcyA9IHZncHUtPmd2dC0+Z3R0LmdtYV9vcHM7CisJ dW5zaWduZWQgbG9uZyBpbmRleDsKKwl1NjQgcGRwLCBuZXh0OworCWludCByZXQgID0gMDsKKwor CWRvIHsKKwkJaW5kZXggPSBnbWFfb3BzLT5nbWFfdG9fcG1sNF9pbmRleChzdGFydCk7CisJCXJl dCA9IGludGVsX2d2dF9oeXBlcnZpc29yX3JlYWRfZ3BhKHZncHUsCisJCQkocG1sNCAmIFBBR0Vf TUFTSykgKyAoaW5kZXggPDwKKwkJCWluZm8tPmd0dF9lbnRyeV9zaXplX3NoaWZ0KSwgJnBkcCwg OCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQluZXh0ID0gcG1sNF9hZGRyX2VuZChz dGFydCwgZW5kKTsKKwkJd2Fsa19wZHBfcmFuZ2UodmdwdSwgcGRwLCBzdGFydCwgbmV4dCwgd2Fs ayk7CisJCXN0YXJ0ID0gbmV4dDsKKwl9IHdoaWxlIChzdGFydCAhPSBlbmQpOworCisJcmV0dXJu IHJldDsKK30KKworaW50IGludGVsX3ZncHVfZzJ2X3B2X3BwZ3R0X2luc2VydF80bHZsKHN0cnVj dCBpbnRlbF92Z3B1ICp2Z3B1LAorCQl1NjQgcGRwc1tdKQoreworCXN0cnVjdCBpbnRlbF92Z3B1 X21tICptbTsKKwl1NjQgcG1sNCwgc3RhcnQsIGxlbmd0aDsKKwl1MzIgY2FjaGVfbGV2ZWw7CisJ aW50IHJldCA9IDA7CisJc3RydWN0IHNnX3RhYmxlIHN0OworCXN0cnVjdCBzY2F0dGVybGlzdCAq c2cgPSBOVUxMOworCWludCBudW1fcGFnZXM7CisJc3RydWN0IGk5MTVfdm1hIHZtYTsKKwlzdHJ1 Y3QgcHBndHRfd2FsayB3YWxrOworCWludCBpOworCXUzMiBvZmZzZXQ7CisJc3RydWN0IHB2X3Bw Z3R0X3VwZGF0ZSBwdl9wcGd0dDsKKworCW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBndnRfc2hh cmVkX3BhZ2UsIHB2X3BwZ3R0KTsKKwlpbnRlbF9ndnRfcmVhZF9zaGFyZWRfcGFnZSh2Z3B1LCBv ZmZzZXQsICZwdl9wcGd0dCwgc2l6ZW9mKHB2X3BwZ3R0KSk7CisJcG1sNCA9IHB2X3BwZ3R0LnBk cDsKKwlzdGFydCA9IHB2X3BwZ3R0LnN0YXJ0OworCWxlbmd0aCA9IHB2X3BwZ3R0Lmxlbmd0aDsK KwljYWNoZV9sZXZlbCA9IHB2X3BwZ3R0LmNhY2hlX2xldmVsOworCW51bV9wYWdlcyA9IGxlbmd0 aCA+PiBQQUdFX1NISUZUOworCisJbW0gPSBpbnRlbF92Z3B1X2ZpbmRfcHBndHRfbW0odmdwdSwg JnBtbDQpOworCWlmICghbW0pIHsKKwkJZ3Z0X3ZncHVfZXJyKCJmYWlsIHRvIGZpbmQgbW0gZm9y IHBtbDQgMHglbGx4XG4iLCBwbWw0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd2Fsay5t Zm5faW5kZXggPSAwOworCXdhbGsubWZucyA9IE5VTEw7CisJd2Fsay5wdCA9IE5VTEw7CisKKwl3 YWxrLm1mbnMgPSBrbWFsbG9jX2FycmF5KG51bV9wYWdlcywKKwkJCXNpemVvZih1bnNpZ25lZCBs b25nKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3YWxrLm1mbnMpIHsKKwkJcmV0ID0gLUVOT01FTTsK KwkJZ290byBmYWlsOworCX0KKworCXdhbGsucHQgPSAodW5zaWduZWQgbG9uZyAqKV9fZ2V0X2Zy ZWVfcGFnZXMoR0ZQX0tFUk5FTCwgMCk7CisJaWYgKCF3YWxrLnB0KSB7CisJCXJldCA9IC1FTk9N RU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAoc2dfYWxsb2NfdGFibGUoJnN0LCBudW1fcGFn ZXMsIEdGUF9LRVJORUwpKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisK KwlyZXQgPSB3YWxrX3BtbDRfcmFuZ2UodmdwdSwgcG1sNCwgc3RhcnQsIHN0YXJ0ICsgbGVuZ3Ro LCAmd2Fsayk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsX2ZyZWVfc2c7CisKKwlXQVJOX09OKG51 bV9wYWdlcyAhPSB3YWxrLm1mbl9pbmRleCk7CisKKwlmb3JfZWFjaF9zZyhzdC5zZ2wsIHNnLCBu dW1fcGFnZXMsIGkpIHsKKwkJc2ctPm9mZnNldCA9IDA7CisJCXNnLT5sZW5ndGggPSBQQUdFX1NJ WkU7CisJCXNnX2RtYV9hZGRyZXNzKHNnKSA9IHdhbGsubWZuc1tpXTsKKwkJc2dfZG1hX2xlbihz ZykgPSBQQUdFX1NJWkU7CisJfQorCisJbWVtc2V0KCZ2bWEsIDAsIHNpemVvZih2bWEpKTsKKwl2 bWEubm9kZS5zdGFydCA9IHN0YXJ0OworCXZtYS5wYWdlcyA9ICZzdDsKKwltbS0+cHBndHQtPnZt Lmluc2VydF9lbnRyaWVzKCZtbS0+cHBndHQtPnZtLCAmdm1hLCBjYWNoZV9sZXZlbCwgMCk7CisK K2ZhaWxfZnJlZV9zZzoKKwlzZ19mcmVlX3RhYmxlKCZzdCk7CitmYWlsOgorCWtmcmVlKHdhbGsu bWZucyk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXdhbGsucHQpOworCisJcmV0dXJuIHJl dDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndHQuaCBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d2dC9ndHQuaAppbmRleCAzMmM1NzNhLi41NzFhNWM0IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3R0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Z0L2d0dC5oCkBAIC0xNDEsNiArMTQxLDcgQEAgc3RydWN0IGludGVsX2d2dF9wYXJ0 aWFsX3B0ZSB7CiAKIHN0cnVjdCBpbnRlbF92Z3B1X21tIHsKIAllbnVtIGludGVsX2d2dF9tbV90 eXBlIHR5cGU7CisJc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0OwogCXN0cnVjdCBpbnRlbF92 Z3B1ICp2Z3B1OwogCiAJc3RydWN0IGtyZWYgcmVmOwpAQCAtMjc3LDQgKzI3OCwxMiBAQCBpbnQg aW50ZWxfdmdwdV9lbXVsYXRlX2dndHRfbW1pb19yZWFkKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1 LAogaW50IGludGVsX3ZncHVfZW11bGF0ZV9nZ3R0X21taW9fd3JpdGUoc3RydWN0IGludGVsX3Zn cHUgKnZncHUsCiAJdW5zaWduZWQgaW50IG9mZiwgdm9pZCAqcF9kYXRhLCB1bnNpZ25lZCBpbnQg Ynl0ZXMpOwogCitpbnQgaW50ZWxfdmdwdV9nMnZfcHZfcHBndHRfYWxsb2NfNGx2bChzdHJ1Y3Qg aW50ZWxfdmdwdSAqdmdwdSwKKwkJdTY0IHBkcHNbXSk7CisKK2ludCBpbnRlbF92Z3B1X2cydl9w dl9wcGd0dF9jbGVhcl80bHZsKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1LAorCQl1NjQgcGRwc1td KTsKKworaW50IGludGVsX3ZncHVfZzJ2X3B2X3BwZ3R0X2luc2VydF80bHZsKHN0cnVjdCBpbnRl bF92Z3B1ICp2Z3B1LAorCQl1NjQgcGRwc1tdKTsKICNlbmRpZiAvKiBfR1ZUX0dUVF9IXyAqLwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Z0L2d2dC5oCmluZGV4IDZkYmUzMGIuLjcxMDE1YTAgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dnQvZ3Z0LmgKQEAgLTUzLDYgKzUzLDEwIEBACiAKICNkZWZpbmUgR1ZUX01BWF9WR1BVIDgKIAor I2RlZmluZSBWR1BVX1BWQ0FQKHZncHUsIGNhcCkJXAorCSgodmdwdV92cmVnX3QodmdwdSwgdmd0 aWZfcmVnKHB2X2NhcHMpKSAmIChjYXApKSBcCisJCQkmJiB2Z3B1LT5zaGFyZWRfcGFnZV9lbmFi bGVkKQorCiBzdHJ1Y3QgaW50ZWxfZ3Z0X2hvc3QgewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAli b29sIGluaXRpYWxpemVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2hh bmRsZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvaGFuZGxlcnMuYwppbmRleCAzZjk0 MjYzLi40NjQ4ZDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvaGFuZGxl cnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvaGFuZGxlcnMuYwpAQCAtMTIxMyw2 ICsxMjEzLDcgQEAgc3RhdGljIGludCBoYW5kbGVfZzJ2X25vdGlmaWNhdGlvbihzdHJ1Y3QgaW50 ZWxfdmdwdSAqdmdwdSwgaW50IG5vdGlmaWNhdGlvbikKIAlzdHJ1Y3QgaW50ZWxfdmdwdV9tbSAq bW07CiAJdTY0ICpwZHBzOwogCXVuc2lnbmVkIGxvbmcgZ3BhLCBnZm47CisJaW50IHJldCA9IDA7 CiAKIAlwZHBzID0gKHU2NCAqKSZ2Z3B1X3ZyZWc2NF90KHZncHUsIHZndGlmX3JlZyhwZHBbMF0p KTsKIApAQCAtMTIzNiw2ICsxMjM3LDE1IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2cydl9ub3RpZmlj YXRpb24oc3RydWN0IGludGVsX3ZncHUgKnZncHUsIGludCBub3RpZmljYXRpb24pCiAJCXZncHUt PnNoYXJlZF9wYWdlX2dwYSA9IGdwYTsKIAkJdmdwdS0+c2hhcmVkX3BhZ2VfZW5hYmxlZCA9IHRy dWU7CiAJCWJyZWFrOworCWNhc2UgVkdUX0cyVl9QUEdUVF9MNF9BTExPQzoKKwkJcmV0ID0gaW50 ZWxfdmdwdV9nMnZfcHZfcHBndHRfYWxsb2NfNGx2bCh2Z3B1LCBwZHBzKTsKKwkJCWJyZWFrOwor CWNhc2UgVkdUX0cyVl9QUEdUVF9MNF9JTlNFUlQ6CisJCXJldCA9IGludGVsX3ZncHVfZzJ2X3B2 X3BwZ3R0X2luc2VydF80bHZsKHZncHUsIHBkcHMpOworCQlicmVhazsKKwljYXNlIFZHVF9HMlZf UFBHVFRfTDRfQ0xFQVI6CisJCXJldCA9IGludGVsX3ZncHVfZzJ2X3B2X3BwZ3R0X2NsZWFyXzRs dmwodmdwdSwgcGRwcyk7CisJCWJyZWFrOwogCWNhc2UgVkdUX0cyVl9FWEVDTElTVF9DT05URVhU X0NSRUFURToKIAljYXNlIFZHVF9HMlZfRVhFQ0xJU1RfQ09OVEVYVF9ERVNUUk9ZOgogCWNhc2Ug MToJLyogUmVtb3ZlIHRoaXMgaW4gZ3Vlc3QgZHJpdmVyLiAqLwpAQCAtMTI0Myw3ICsxMjUzLDcg QEAgc3RhdGljIGludCBoYW5kbGVfZzJ2X25vdGlmaWNhdGlvbihzdHJ1Y3QgaW50ZWxfdmdwdSAq dmdwdSwgaW50IG5vdGlmaWNhdGlvbikKIAlkZWZhdWx0OgogCQlndnRfdmdwdV9lcnIoIkludmFs aWQgUFYgbm90aWZpY2F0aW9uICVkXG4iLCBub3RpZmljYXRpb24pOwogCX0KLQlyZXR1cm4gMDsK KwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHNlbmRfZGlzcGxheV9yZWFkeV91ZXZlbnQo c3RydWN0IGludGVsX3ZncHUgKnZncHUsIGludCByZWFkeSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC92Z3B1LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvdmdwdS5j CmluZGV4IDA2NjNiM2UuLmRkODljMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d2dC92Z3B1LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3ZncHUuYwpAQCAtNDks NiArNDksOSBAQCB2b2lkIHBvcHVsYXRlX3B2aW5mb19wYWdlKHN0cnVjdCBpbnRlbF92Z3B1ICp2 Z3B1KQogCXZncHVfdnJlZ190KHZncHUsIHZndGlmX3JlZyh2Z3RfY2FwcykpIHw9IFZHVF9DQVBT X0hVR0VfR1RUOwogCXZncHVfdnJlZ190KHZncHUsIHZndGlmX3JlZyh2Z3RfY2FwcykpIHw9IFZH VF9DQVBTX1BWOwogCisJaWYgKCFpbnRlbF92dGRfYWN0aXZlKCkpCisJCXZncHVfdnJlZ190KHZn cHUsIHZndGlmX3JlZyhwdl9jYXBzKSkgPSBQVl9QUEdUVF9VUERBVEU7CisKIAl2Z3B1X3ZyZWdf dCh2Z3B1LCB2Z3RpZl9yZWcoYXZhaWxfcnMubWFwcGFibGVfZ21hZHIuYmFzZSkpID0KIAkJdmdw dV9hcGVydHVyZV9nbWFkcl9iYXNlKHZncHUpOwogCXZncHVfdnJlZ190KHZncHUsIHZndGlmX3Jl ZyhhdmFpbF9ycy5tYXBwYWJsZV9nbWFkci5zaXplKSkgPQotLSAKMi43LjQKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxp c3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==