From mboxrd@z Thu Jan 1 00:00:00 1970 From: Xiaolin Zhang Subject: [PATCH v6 7/8] drm/i915/gvt: GVTg support ppgtt pv optimization Date: Mon, 3 Jun 2019 14:02:48 +0800 Message-ID: <1559541769-25279-8-git-send-email-xiaolin.zhang@intel.com> References: <1559541769-25279-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: <1559541769-25279-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 IG9yaWdpbmFsIHNoYWRvdyBwYWdlIG1lY2hhbnNpbS4KCnYwOiBSRkMuCnYxOiByZWJhc2UuCnYy OiByZWJhc2UuCnYzOiByZXBvcnQgcHYgcGdndHQgY2FwIHRvIGd1ZXN0Lgp2NDogcmVuYW1lZCBW R1BVX1BWTU1JTyB3aXRoIFZHUFVfUFZDQVAgZm9yIG5hbWUgY29uc2lzdGFuY2UsIG5vIFBWCnN1 cHBvcnQgaWYgZ2Z4IHZ0ZCBlbmFibGVkLgp2NTogcmViYXNlLgp2NjogcmViYXNlLgoKU2lnbmVk LW9mZi1ieTogWGlhb2xpbiBaaGFuZyA8eGlhb2xpbi56aGFuZ0BpbnRlbC5jb20+Ci0tLQogZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d0dC5jICAgICAgfCAzMTcgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3R0LmggICAgICB8 ICAgOSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmggICAgICB8ICAgNCArCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvaGFuZGxlcnMuYyB8ICAxMiArLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Z0L3ZncHUuYyAgICAgfCAgIDMgKwogNSBmaWxlcyBjaGFuZ2VkLCAzNDQgaW5zZXJ0 aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d2dC9ndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndHQuYwppbmRleCBkNzY3YzQ1 Li5iNzhiODcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3R0LmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d0dC5jCkBAIC0xNzYxLDYgKzE3NjEsMjUgQEAg c3RhdGljIGludCBwcGd0dF9oYW5kbGVfZ3Vlc3Rfd3JpdGVfcGFnZV90YWJsZV9ieXRlcygKIAly ZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9tbV9wdihzdHJ1Y3QgaW50ZWxf dmdwdV9tbSAqbW0pCit7CisJc3RydWN0IGludGVsX3ZncHUgKnZncHUgPSBtbS0+dmdwdTsKKwlz dHJ1Y3QgaW50ZWxfZ3Z0ICpndnQgPSB2Z3B1LT5ndnQ7CisJc3RydWN0IGludGVsX2d2dF9ndHQg Kmd0dCA9ICZndnQtPmd0dDsKKwlzdHJ1Y3QgaW50ZWxfZ3Z0X2d0dF9wdGVfb3BzICpvcHMgPSBn dHQtPnB0ZV9vcHM7CisJc3RydWN0IGludGVsX2d2dF9ndHRfZW50cnkgc2U7CisKKwlpOTE1X3Bw Z3R0X3B1dChtbS0+cHBndHQpOworCisJcHBndHRfZ2V0X3NoYWRvd19yb290X2VudHJ5KG1tLCAm c2UsIDApOworCWlmICghb3BzLT50ZXN0X3ByZXNlbnQoJnNlKSkKKwkJcmV0dXJuOworCXNlLnZh bDY0ID0gMDsKKwlwcGd0dF9zZXRfc2hhZG93X3Jvb3RfZW50cnkobW0sICZzZSwgMCk7CisKKwlt bS0+cHBndHRfbW0uc2hhZG93ZWQgID0gZmFsc2U7Cit9CisKIHN0YXRpYyB2b2lkIGludmFsaWRh dGVfcHBndHRfbW0oc3RydWN0IGludGVsX3ZncHVfbW0gKm1tKQogewogCXN0cnVjdCBpbnRlbF92 Z3B1ICp2Z3B1ID0gbW0tPnZncHU7CkBAIC0xNzczLDYgKzE3OTIsMTEgQEAgc3RhdGljIHZvaWQg aW52YWxpZGF0ZV9wcGd0dF9tbShzdHJ1Y3QgaW50ZWxfdmdwdV9tbSAqbW0pCiAJaWYgKCFtbS0+ cHBndHRfbW0uc2hhZG93ZWQpCiAJCXJldHVybjsKIAorCWlmIChWR1BVX1BWQ0FQKG1tLT52Z3B1 LCBQVl9QUEdUVF9VUERBVEUpKSB7CisJCWludmFsaWRhdGVfbW1fcHYobW0pOworCQlyZXR1cm47 CisJfQorCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgQVJSQVlfU0laRShtbS0+cHBndHRfbW0u c2hhZG93X3BkcHMpOyBpbmRleCsrKSB7CiAJCXBwZ3R0X2dldF9zaGFkb3dfcm9vdF9lbnRyeSht bSwgJnNlLCBpbmRleCk7CiAKQEAgLTE3OTAsNiArMTgxNCwyNiBAQCBzdGF0aWMgdm9pZCBpbnZh bGlkYXRlX3BwZ3R0X21tKHN0cnVjdCBpbnRlbF92Z3B1X21tICptbSkKIAltbS0+cHBndHRfbW0u c2hhZG93ZWQgPSBmYWxzZTsKIH0KIAorc3RhdGljIGludCBzaGFkb3dfbW1fcHYoc3RydWN0IGlu dGVsX3ZncHVfbW0gKm1tKQoreworCXN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1ID0gbW0tPnZncHU7 CisJc3RydWN0IGludGVsX2d2dCAqZ3Z0ID0gdmdwdS0+Z3Z0OworCXN0cnVjdCBpbnRlbF9ndnRf Z3R0X2VudHJ5IHNlOworCisJbW0tPnBwZ3R0ID0gaTkxNV9wcGd0dF9jcmVhdGUoZ3Z0LT5kZXZf cHJpdik7CisJaWYgKElTX0VSUihtbS0+cHBndHQpKSB7CisJCWd2dF92Z3B1X2VycigiZmFpbCB0 byBjcmVhdGUgcHBndHQgZm9yIHBkcCAweCVsbHhcbiIsCisJCQkJcHhfZG1hKCZtbS0+cHBndHQt PnBtbDQpKTsKKwkJcmV0dXJuIFBUUl9FUlIobW0tPnBwZ3R0KTsKKwl9CisKKwlzZS50eXBlID0g R1RUX1RZUEVfUFBHVFRfUk9PVF9MNF9FTlRSWTsKKwlzZS52YWw2NCA9IHB4X2RtYSgmbW0tPnBw Z3R0LT5wbWw0KTsKKwlwcGd0dF9zZXRfc2hhZG93X3Jvb3RfZW50cnkobW0sICZzZSwgMCk7CisJ bW0tPnBwZ3R0X21tLnNoYWRvd2VkICA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KIAogc3RhdGlj IGludCBzaGFkb3dfcHBndHRfbW0oc3RydWN0IGludGVsX3ZncHVfbW0gKm1tKQogewpAQCAtMTgw NCw2ICsxODQ4LDkgQEAgc3RhdGljIGludCBzaGFkb3dfcHBndHRfbW0oc3RydWN0IGludGVsX3Zn cHVfbW0gKm1tKQogCWlmIChtbS0+cHBndHRfbW0uc2hhZG93ZWQpCiAJCXJldHVybiAwOwogCisJ aWYgKFZHUFVfUFZDQVAobW0tPnZncHUsIFBWX1BQR1RUX1VQREFURSkpCisJCXJldHVybiBzaGFk b3dfbW1fcHYobW0pOworCiAJbW0tPnBwZ3R0X21tLnNoYWRvd2VkID0gdHJ1ZTsKIAogCWZvciAo aW5kZXggPSAwOyBpbmRleCA8IEFSUkFZX1NJWkUobW0tPnBwZ3R0X21tLmd1ZXN0X3BkcHMpOyBp bmRleCsrKSB7CkBAIC0yODA2LDMgKzI4NTMsMjczIEBAIHZvaWQgaW50ZWxfdmdwdV9yZXNldF9n dHQoc3RydWN0IGludGVsX3ZncHUgKnZncHUpCiAJaW50ZWxfdmdwdV9kZXN0cm95X2FsbF9wcGd0 dF9tbSh2Z3B1KTsKIAlpbnRlbF92Z3B1X3Jlc2V0X2dndHQodmdwdSwgdHJ1ZSk7CiB9CisKK2lu dCBpbnRlbF92Z3B1X2cydl9wdl9wcGd0dF9hbGxvY180bHZsKHN0cnVjdCBpbnRlbF92Z3B1ICp2 Z3B1LAorCQl1NjQgcGRwc1tdKQoreworCXN0cnVjdCBpbnRlbF92Z3B1X21tICptbTsKKwlpbnQg cmV0ID0gMDsKKwl1MzIgb2Zmc2V0OworCXN0cnVjdCBwdl9wcGd0dF91cGRhdGUgcHZfcHBndHQ7 CisKKwlvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgZ3Z0X3NoYXJlZF9wYWdlLCBidWYucHZfcHBn dHQpOworCWludGVsX2d2dF9yZWFkX3NoYXJlZF9wYWdlKHZncHUsIG9mZnNldCwgJnB2X3BwZ3R0 LCBzaXplb2YocHZfcHBndHQpKTsKKworCW1tID0gaW50ZWxfdmdwdV9maW5kX3BwZ3R0X21tKHZn cHUsICZwdl9wcGd0dC5wZHApOworCWlmICghbW0pIHsKKwkJZ3Z0X3ZncHVfZXJyKCJmYWlsZWQg dG8gZmluZCBwZHAgMHglbGx4XG4iLCBwdl9wcGd0dC5wZHApOworCQlyZXQgPSAtRUlOVkFMOwor CX0gZWxzZSB7CisJCXJldCA9IG1tLT5wcGd0dC0+dm0uYWxsb2NhdGVfdmFfcmFuZ2UoJm1tLT5w cGd0dC0+dm0sCisJCQlwdl9wcGd0dC5zdGFydCwgcHZfcHBndHQubGVuZ3RoKTsKKwkJaWYgKHJl dCkKKwkJCWd2dF92Z3B1X2VycigiZmFpbGVkIHRvIGFsbG9jICVsbHhcbiIsIHB2X3BwZ3R0LnBk cCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IGludGVsX3ZncHVfZzJ2X3B2X3BwZ3R0 X2NsZWFyXzRsdmwoc3RydWN0IGludGVsX3ZncHUgKnZncHUsCisJCXU2NCBwZHBzW10pCit7CisJ c3RydWN0IGludGVsX3ZncHVfbW0gKm1tOworCWludCByZXQgPSAwOworCXUzMiBvZmZzZXQ7CisJ c3RydWN0IHB2X3BwZ3R0X3VwZGF0ZSBwdl9wcGd0dDsKKworCW9mZnNldCA9IG9mZnNldG9mKHN0 cnVjdCBndnRfc2hhcmVkX3BhZ2UsIGJ1Zi5wdl9wcGd0dCk7CisJaW50ZWxfZ3Z0X3JlYWRfc2hh cmVkX3BhZ2UodmdwdSwgb2Zmc2V0LCAmcHZfcHBndHQsIHNpemVvZihwdl9wcGd0dCkpOworCW1t ID0gaW50ZWxfdmdwdV9maW5kX3BwZ3R0X21tKHZncHUsICZwdl9wcGd0dC5wZHApOworCWlmICgh bW0pIHsKKwkJZ3Z0X3ZncHVfZXJyKCJmYWlsZWQgdG8gZmluZCBwZHAgMHglbGx4XG4iLCBwdl9w cGd0dC5wZHApOworCQlyZXQgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCW1tLT5wcGd0dC0+dm0u Y2xlYXJfcmFuZ2UoJm1tLT5wcGd0dC0+dm0sCisJCQlwdl9wcGd0dC5zdGFydCwgcHZfcHBndHQu bGVuZ3RoKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIEdFTjhfUE1MNEVfU0la RQkJKDFVTCA8PCBHRU44X1BNTDRFX1NISUZUKQorI2RlZmluZSBHRU44X1BNTDRFX1NJWkVfTUFT SwkofihHRU44X1BNTDRFX1NJWkUgLSAxKSkKKyNkZWZpbmUgR0VOOF9QRFBFX1NJWkUJCSgxVUwg PDwgR0VOOF9QRFBFX1NISUZUKQorI2RlZmluZSBHRU44X1BEUEVfU0laRV9NQVNLCSh+KEdFTjhf UERQRV9TSVpFIC0gMSkpCisjZGVmaW5lIEdFTjhfUERFX1NJWkUJCSgxVUwgPDwgR0VOOF9QREVf U0hJRlQpCisjZGVmaW5lIEdFTjhfUERFX1NJWkVfTUFTSwkofihHRU44X1BERV9TSVpFIC0gMSkp CisKKyNkZWZpbmUgcG1sNF9hZGRyX2VuZChhZGRyLCBlbmQpCQkJCQlcCisoewl1bnNpZ25lZCBs b25nIF9fYm91bmRhcnkgPSBcCisJCQkoKGFkZHIpICsgR0VOOF9QTUw0RV9TSVpFKSAmIEdFTjhf UE1MNEVfU0laRV9NQVNLOyBcCisJKF9fYm91bmRhcnkgPCAoZW5kKSkgPyBfX2JvdW5kYXJ5IDog KGVuZCk7CQlcCit9KQorCisjZGVmaW5lIHBkcF9hZGRyX2VuZChhZGRyLCBlbmQpCQkJCQkJXAor KHsJdW5zaWduZWQgbG9uZyBfX2JvdW5kYXJ5ID0gXAorCQkJKChhZGRyKSArIEdFTjhfUERQRV9T SVpFKSAmIEdFTjhfUERQRV9TSVpFX01BU0s7IFwKKwkoX19ib3VuZGFyeSA8IChlbmQpKSA/IF9f Ym91bmRhcnkgOiAoZW5kKTsJCVwKK30pCisKKyNkZWZpbmUgcGRfYWRkcl9lbmQoYWRkciwgZW5k KQkJCQkJCVwKKyh7CXVuc2lnbmVkIGxvbmcgX19ib3VuZGFyeSA9IFwKKwkJCSgoYWRkcikgKyBH RU44X1BERV9TSVpFKSAmIEdFTjhfUERFX1NJWkVfTUFTSzsJXAorCShfX2JvdW5kYXJ5IDwgKGVu ZCkpID8gX19ib3VuZGFyeSA6IChlbmQpOwkJXAorfSkKKworc3RydWN0IHBwZ3R0X3dhbGsgewor CXVuc2lnbmVkIGxvbmcgKm1mbnM7CisJaW50IG1mbl9pbmRleDsKKwl1bnNpZ25lZCBsb25nICpw dDsKK307CisKK3N0YXRpYyBpbnQgd2Fsa19wdF9yYW5nZShzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdw dSwgdTY0IHB0LAorCQkJCXU2NCBzdGFydCwgdTY0IGVuZCwgc3RydWN0IHBwZ3R0X3dhbGsgKndh bGspCit7CisJY29uc3Qgc3RydWN0IGludGVsX2d2dF9kZXZpY2VfaW5mbyAqaW5mbyA9ICZ2Z3B1 LT5ndnQtPmRldmljZV9pbmZvOworCXN0cnVjdCBpbnRlbF9ndnRfZ3R0X2dtYV9vcHMgKmdtYV9v cHMgPSB2Z3B1LT5ndnQtPmd0dC5nbWFfb3BzOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfaW5kZXgs IGVuZF9pbmRleDsKKwlpbnQgcmV0OworCWludCBpOworCXVuc2lnbmVkIGxvbmcgbWZuLCBnZm47 CisKKwlzdGFydF9pbmRleCA9IGdtYV9vcHMtPmdtYV90b19wdGVfaW5kZXgoc3RhcnQpOworCWVu ZF9pbmRleCA9ICgoZW5kIC0gc3RhcnQpID4+IFBBR0VfU0hJRlQpICsgc3RhcnRfaW5kZXg7CisK KwlyZXQgPSBpbnRlbF9ndnRfaHlwZXJ2aXNvcl9yZWFkX2dwYSh2Z3B1LAorCQkocHQgJiBQQUdF X01BU0spICsgKHN0YXJ0X2luZGV4IDw8IGluZm8tPmd0dF9lbnRyeV9zaXplX3NoaWZ0KSwKKwkJ d2Fsay0+cHQgKyBzdGFydF9pbmRleCwKKwkJKGVuZF9pbmRleCAtIHN0YXJ0X2luZGV4KSA8PCBp bmZvLT5ndHRfZW50cnlfc2l6ZV9zaGlmdCk7CisJaWYgKHJldCkgeworCQlndnRfdmdwdV9lcnIo ImZhaWwgdG8gcmVhZCBncGEgJWxseFxuIiwgcHQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWZv ciAoaSA9IHN0YXJ0X2luZGV4OyBpIDwgZW5kX2luZGV4OyBpKyspIHsKKwkJZ2ZuID0gd2Fsay0+ cHRbaV0gPj4gUEFHRV9TSElGVDsKKwkJbWZuID0gaW50ZWxfZ3Z0X2h5cGVydmlzb3JfZ2ZuX3Rv X21mbih2Z3B1LCBnZm4pOworCQlpZiAobWZuID09IElOVEVMX0dWVF9JTlZBTElEX0FERFIpIHsK KwkJCWd2dF92Z3B1X2VycigiZmFpbCB0byB0cmFuc2xhdGUgZ2ZuOiAweCVseFxuIiwgZ2ZuKTsK KwkJCXJldHVybiAtRU5YSU87CisJCX0KKwkJd2Fsay0+bWZuc1t3YWxrLT5tZm5faW5kZXgrK10g PSBtZm4gPDwgUEFHRV9TSElGVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50 IHdhbGtfcGRfcmFuZ2Uoc3RydWN0IGludGVsX3ZncHUgKnZncHUsIHU2NCBwZCwKKwkJCQl1NjQg c3RhcnQsIHU2NCBlbmQsIHN0cnVjdCBwcGd0dF93YWxrICp3YWxrKQoreworCWNvbnN0IHN0cnVj dCBpbnRlbF9ndnRfZGV2aWNlX2luZm8gKmluZm8gPSAmdmdwdS0+Z3Z0LT5kZXZpY2VfaW5mbzsK KwlzdHJ1Y3QgaW50ZWxfZ3Z0X2d0dF9nbWFfb3BzICpnbWFfb3BzID0gdmdwdS0+Z3Z0LT5ndHQu Z21hX29wczsKKwl1bnNpZ25lZCBsb25nIGluZGV4OworCXU2NCBwdCwgbmV4dDsKKwlpbnQgcmV0 ICA9IDA7CisKKwlkbyB7CisJCWluZGV4ID0gZ21hX29wcy0+Z21hX3RvX3BkZV9pbmRleChzdGFy dCk7CisKKwkJcmV0ID0gaW50ZWxfZ3Z0X2h5cGVydmlzb3JfcmVhZF9ncGEodmdwdSwKKwkJCShw ZCAmIFBBR0VfTUFTSykgKyAoaW5kZXggPDwKKwkJCWluZm8tPmd0dF9lbnRyeV9zaXplX3NoaWZ0 KSwgJnB0LCA4KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCW5leHQgPSBwZF9hZGRy X2VuZChzdGFydCwgZW5kKTsKKwkJd2Fsa19wdF9yYW5nZSh2Z3B1LCBwdCwgc3RhcnQsIG5leHQs IHdhbGspOworCisJCXN0YXJ0ID0gbmV4dDsKKwl9IHdoaWxlIChzdGFydCAhPSBlbmQpOworCisJ cmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50IHdhbGtfcGRwX3JhbmdlKHN0cnVjdCBpbnRl bF92Z3B1ICp2Z3B1LCB1NjQgcGRwLAorCQkJCSAgdTY0IHN0YXJ0LCB1NjQgZW5kLCBzdHJ1Y3Qg cHBndHRfd2FsayAqd2FsaykKK3sKKwljb25zdCBzdHJ1Y3QgaW50ZWxfZ3Z0X2RldmljZV9pbmZv ICppbmZvID0gJnZncHUtPmd2dC0+ZGV2aWNlX2luZm87CisJc3RydWN0IGludGVsX2d2dF9ndHRf Z21hX29wcyAqZ21hX29wcyA9IHZncHUtPmd2dC0+Z3R0LmdtYV9vcHM7CisJdW5zaWduZWQgbG9u ZyBpbmRleDsKKwl1NjQgcGQsIG5leHQ7CisJaW50IHJldCAgPSAwOworCisJZG8geworCQlpbmRl eCA9IGdtYV9vcHMtPmdtYV90b19sNF9wZHBfaW5kZXgoc3RhcnQpOworCisJCXJldCA9IGludGVs X2d2dF9oeXBlcnZpc29yX3JlYWRfZ3BhKHZncHUsCisJCQkocGRwICYgUEFHRV9NQVNLKSArIChp bmRleCA8PAorCQkJaW5mby0+Z3R0X2VudHJ5X3NpemVfc2hpZnQpLCAmcGQsIDgpOworCQlpZiAo cmV0KQorCQkJcmV0dXJuIHJldDsKKwkJbmV4dCA9IHBkcF9hZGRyX2VuZChzdGFydCwgZW5kKTsK KwkJd2Fsa19wZF9yYW5nZSh2Z3B1LCBwZCwgc3RhcnQsIG5leHQsIHdhbGspOworCQlzdGFydCA9 IG5leHQ7CisJfSB3aGlsZSAoc3RhcnQgIT0gZW5kKTsKKworCXJldHVybiByZXQ7Cit9CisKKwor c3RhdGljIGludCB3YWxrX3BtbDRfcmFuZ2Uoc3RydWN0IGludGVsX3ZncHUgKnZncHUsIHU2NCBw bWw0LAorCQkJCXU2NCBzdGFydCwgdTY0IGVuZCwgc3RydWN0IHBwZ3R0X3dhbGsgKndhbGspCit7 CisJY29uc3Qgc3RydWN0IGludGVsX2d2dF9kZXZpY2VfaW5mbyAqaW5mbyA9ICZ2Z3B1LT5ndnQt PmRldmljZV9pbmZvOworCXN0cnVjdCBpbnRlbF9ndnRfZ3R0X2dtYV9vcHMgKmdtYV9vcHMgPSB2 Z3B1LT5ndnQtPmd0dC5nbWFfb3BzOworCXVuc2lnbmVkIGxvbmcgaW5kZXg7CisJdTY0IHBkcCwg bmV4dDsKKwlpbnQgcmV0ICA9IDA7CisKKwlkbyB7CisJCWluZGV4ID0gZ21hX29wcy0+Z21hX3Rv X3BtbDRfaW5kZXgoc3RhcnQpOworCQlyZXQgPSBpbnRlbF9ndnRfaHlwZXJ2aXNvcl9yZWFkX2dw YSh2Z3B1LAorCQkJKHBtbDQgJiBQQUdFX01BU0spICsgKGluZGV4IDw8CisJCQlpbmZvLT5ndHRf ZW50cnlfc2l6ZV9zaGlmdCksICZwZHAsIDgpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsK KwkJbmV4dCA9IHBtbDRfYWRkcl9lbmQoc3RhcnQsIGVuZCk7CisJCXdhbGtfcGRwX3JhbmdlKHZn cHUsIHBkcCwgc3RhcnQsIG5leHQsIHdhbGspOworCQlzdGFydCA9IG5leHQ7CisJfSB3aGlsZSAo c3RhcnQgIT0gZW5kKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBpbnRlbF92Z3B1X2cydl9w dl9wcGd0dF9pbnNlcnRfNGx2bChzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwKKwkJdTY0IHBkcHNb XSkKK3sKKwlzdHJ1Y3QgaW50ZWxfdmdwdV9tbSAqbW07CisJdTY0IHBtbDQsIHN0YXJ0LCBsZW5n dGg7CisJdTMyIGNhY2hlX2xldmVsOworCWludCByZXQgPSAwOworCXN0cnVjdCBzZ190YWJsZSBz dDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gTlVMTDsKKwlpbnQgbnVtX3BhZ2VzOworCXN0 cnVjdCBpOTE1X3ZtYSB2bWE7CisJc3RydWN0IHBwZ3R0X3dhbGsgd2FsazsKKwlpbnQgaTsKKwl1 MzIgb2Zmc2V0OworCXN0cnVjdCBwdl9wcGd0dF91cGRhdGUgcHZfcHBndHQ7CisKKwlvZmZzZXQg PSBvZmZzZXRvZihzdHJ1Y3QgZ3Z0X3NoYXJlZF9wYWdlLCBidWYucHZfcHBndHQpOworCWludGVs X2d2dF9yZWFkX3NoYXJlZF9wYWdlKHZncHUsIG9mZnNldCwgJnB2X3BwZ3R0LCBzaXplb2YocHZf cHBndHQpKTsKKwlwbWw0ID0gcHZfcHBndHQucGRwOworCXN0YXJ0ID0gcHZfcHBndHQuc3RhcnQ7 CisJbGVuZ3RoID0gcHZfcHBndHQubGVuZ3RoOworCWNhY2hlX2xldmVsID0gcHZfcHBndHQuY2Fj aGVfbGV2ZWw7CisJbnVtX3BhZ2VzID0gbGVuZ3RoID4+IFBBR0VfU0hJRlQ7CisKKwltbSA9IGlu dGVsX3ZncHVfZmluZF9wcGd0dF9tbSh2Z3B1LCAmcG1sNCk7CisJaWYgKCFtbSkgeworCQlndnRf dmdwdV9lcnIoImZhaWwgdG8gZmluZCBtbSBmb3IgcG1sNCAweCVsbHhcbiIsIHBtbDQpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3YWxrLm1mbl9pbmRleCA9IDA7CisJd2Fsay5tZm5zID0g TlVMTDsKKwl3YWxrLnB0ID0gTlVMTDsKKworCXdhbGsubWZucyA9IGttYWxsb2NfYXJyYXkobnVt X3BhZ2VzLAorCQkJc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdh bGsubWZucykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJd2Fsay5w dCA9ICh1bnNpZ25lZCBsb25nICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCAwKTsKKwlp ZiAoIXdhbGsucHQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCWlm IChzZ19hbGxvY190YWJsZSgmc3QsIG51bV9wYWdlcywgR0ZQX0tFUk5FTCkpIHsKKwkJcmV0ID0g LUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCXJldCA9IHdhbGtfcG1sNF9yYW5nZSh2Z3B1 LCBwbWw0LCBzdGFydCwgc3RhcnQgKyBsZW5ndGgsICZ3YWxrKTsKKwlpZiAocmV0KQorCQlnb3Rv IGZhaWxfZnJlZV9zZzsKKworCVdBUk5fT04obnVtX3BhZ2VzICE9IHdhbGsubWZuX2luZGV4KTsK KworCWZvcl9lYWNoX3NnKHN0LnNnbCwgc2csIG51bV9wYWdlcywgaSkgeworCQlzZy0+b2Zmc2V0 ID0gMDsKKwkJc2ctPmxlbmd0aCA9IFBBR0VfU0laRTsKKwkJc2dfZG1hX2FkZHJlc3Moc2cpID0g d2Fsay5tZm5zW2ldOworCQlzZ19kbWFfbGVuKHNnKSA9IFBBR0VfU0laRTsKKwl9CisKKwltZW1z ZXQoJnZtYSwgMCwgc2l6ZW9mKHZtYSkpOworCXZtYS5ub2RlLnN0YXJ0ID0gc3RhcnQ7CisJdm1h LnBhZ2VzID0gJnN0OworCW1tLT5wcGd0dC0+dm0uaW5zZXJ0X2VudHJpZXMoJm1tLT5wcGd0dC0+ dm0sICZ2bWEsIGNhY2hlX2xldmVsLCAwKTsKKworZmFpbF9mcmVlX3NnOgorCXNnX2ZyZWVfdGFi bGUoJnN0KTsKK2ZhaWw6CisJa2ZyZWUod2Fsay5tZm5zKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVk IGxvbmcpd2Fsay5wdCk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L2d0dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d0dC5oCmlu ZGV4IDQyZDAzOTQuLjMxOTI2Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2 dC9ndHQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3R0LmgKQEAgLTE0MSw2ICsx NDEsNyBAQCBzdHJ1Y3QgaW50ZWxfZ3Z0X3BhcnRpYWxfcHRlIHsKIAogc3RydWN0IGludGVsX3Zn cHVfbW0gewogCWVudW0gaW50ZWxfZ3Z0X21tX3R5cGUgdHlwZTsKKwlzdHJ1Y3QgaTkxNV9od19w cGd0dCAqcHBndHQ7CiAJc3RydWN0IGludGVsX3ZncHUgKnZncHU7CiAKIAlzdHJ1Y3Qga3JlZiBy ZWY7CkBAIC0yNzcsNCArMjc4LDEyIEBAIGludCBpbnRlbF92Z3B1X2VtdWxhdGVfZ2d0dF9tbWlv X3JlYWQoc3RydWN0IGludGVsX3ZncHUgKnZncHUsCiBpbnQgaW50ZWxfdmdwdV9lbXVsYXRlX2dn dHRfbW1pb193cml0ZShzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwKIAl1bnNpZ25lZCBpbnQgb2Zm LCB2b2lkICpwX2RhdGEsIHVuc2lnbmVkIGludCBieXRlcyk7CiAKK2ludCBpbnRlbF92Z3B1X2cy dl9wdl9wcGd0dF9hbGxvY180bHZsKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1LAorCQl1NjQgcGRw c1tdKTsKKworaW50IGludGVsX3ZncHVfZzJ2X3B2X3BwZ3R0X2NsZWFyXzRsdmwoc3RydWN0IGlu dGVsX3ZncHUgKnZncHUsCisJCXU2NCBwZHBzW10pOworCitpbnQgaW50ZWxfdmdwdV9nMnZfcHZf cHBndHRfaW5zZXJ0XzRsdmwoc3RydWN0IGludGVsX3ZncHUgKnZncHUsCisJCXU2NCBwZHBzW10p OwogI2VuZGlmIC8qIF9HVlRfR1RUX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndnQvZ3Z0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgKaW5kZXggMWVm YmY2OC4uYmEwNWJjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5o CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuaApAQCAtNTMsNiArNTMsMTAgQEAK IAogI2RlZmluZSBHVlRfTUFYX1ZHUFUgOAogCisjZGVmaW5lIFZHUFVfUFZDQVAodmdwdSwgY2Fw KQlcCisJKCh2Z3B1X3ZyZWdfdCh2Z3B1LCB2Z3RpZl9yZWcocHZfY2FwcykpICYgKGNhcCkpIFwK KwkJCSYmIHZncHUtPnNoYXJlZF9wYWdlX2VuYWJsZWQpCisKIHN0cnVjdCBpbnRlbF9ndnRfaG9z dCB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCWJvb2wgaW5pdGlhbGl6ZWQ7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvaGFuZGxlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d2dC9oYW5kbGVycy5jCmluZGV4IDc5Njc5ZGEuLjFlMDljMjMgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9oYW5kbGVycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d2dC9oYW5kbGVycy5jCkBAIC0xMjE3LDYgKzEyMTcsNyBAQCBzdGF0aWMgaW50IGhhbmRs ZV9nMnZfbm90aWZpY2F0aW9uKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1LCBpbnQgbm90aWZpY2F0 aW9uKQogCXVuc2lnbmVkIGxvbmcgZ3BhLCBnZm47CiAJdTE2IHZlcl9tYWpvciA9IFBWX01BSk9S OwogCXUxNiB2ZXJfbWlub3IgPSBQVl9NSU5PUjsKKwlpbnQgcmV0ID0gMDsKIAogCXBkcHMgPSAo dTY0ICopJnZncHVfdnJlZzY0X3QodmdwdSwgdmd0aWZfcmVnKHBkcFswXSkpOwogCkBAIC0xMjQz LDYgKzEyNDQsMTUgQEAgc3RhdGljIGludCBoYW5kbGVfZzJ2X25vdGlmaWNhdGlvbihzdHJ1Y3Qg aW50ZWxfdmdwdSAqdmdwdSwgaW50IG5vdGlmaWNhdGlvbikKIAkJaW50ZWxfZ3Z0X3dyaXRlX3No YXJlZF9wYWdlKHZncHUsIDAsICZ2ZXJfbWFqb3IsIDIpOwogCQlpbnRlbF9ndnRfd3JpdGVfc2hh cmVkX3BhZ2UodmdwdSwgMiwgJnZlcl9taW5vciwgMik7CiAJCWJyZWFrOworCWNhc2UgVkdUX0cy Vl9QUEdUVF9MNF9BTExPQzoKKwkJcmV0ID0gaW50ZWxfdmdwdV9nMnZfcHZfcHBndHRfYWxsb2Nf NGx2bCh2Z3B1LCBwZHBzKTsKKwkJCWJyZWFrOworCWNhc2UgVkdUX0cyVl9QUEdUVF9MNF9JTlNF UlQ6CisJCXJldCA9IGludGVsX3ZncHVfZzJ2X3B2X3BwZ3R0X2luc2VydF80bHZsKHZncHUsIHBk cHMpOworCQlicmVhazsKKwljYXNlIFZHVF9HMlZfUFBHVFRfTDRfQ0xFQVI6CisJCXJldCA9IGlu dGVsX3ZncHVfZzJ2X3B2X3BwZ3R0X2NsZWFyXzRsdmwodmdwdSwgcGRwcyk7CisJCWJyZWFrOwog CWNhc2UgVkdUX0cyVl9FWEVDTElTVF9DT05URVhUX0NSRUFURToKIAljYXNlIFZHVF9HMlZfRVhF Q0xJU1RfQ09OVEVYVF9ERVNUUk9ZOgogCWNhc2UgMToJLyogUmVtb3ZlIHRoaXMgaW4gZ3Vlc3Qg ZHJpdmVyLiAqLwpAQCAtMTI1MCw3ICsxMjYwLDcgQEAgc3RhdGljIGludCBoYW5kbGVfZzJ2X25v dGlmaWNhdGlvbihzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwgaW50IG5vdGlmaWNhdGlvbikKIAlk ZWZhdWx0OgogCQlndnRfdmdwdV9lcnIoIkludmFsaWQgUFYgbm90aWZpY2F0aW9uICVkXG4iLCBu b3RpZmljYXRpb24pOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMg aW50IHNlbmRfZGlzcGxheV9yZWFkeV91ZXZlbnQoc3RydWN0IGludGVsX3ZncHUgKnZncHUsIGlu dCByZWFkeSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC92Z3B1LmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvdmdwdS5jCmluZGV4IDhjYmEzMGQuLjU3ZWFmNTYgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC92Z3B1LmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Z0L3ZncHUuYwpAQCAtNDksNiArNDksOSBAQCB2b2lkIHBvcHVsYXRlX3B2 aW5mb19wYWdlKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1KQogCXZncHVfdnJlZ190KHZncHUsIHZn dGlmX3JlZyh2Z3RfY2FwcykpIHw9IFZHVF9DQVBTX0hVR0VfR1RUOwogCXZncHVfdnJlZ190KHZn cHUsIHZndGlmX3JlZyh2Z3RfY2FwcykpIHw9IFZHVF9DQVBTX1BWOwogCisJaWYgKCFpbnRlbF92 dGRfYWN0aXZlKCkpCisJCXZncHVfdnJlZ190KHZncHUsIHZndGlmX3JlZyhwdl9jYXBzKSkgPSBQ Vl9QUEdUVF9VUERBVEU7CisKIAl2Z3B1X3ZyZWdfdCh2Z3B1LCB2Z3RpZl9yZWcoYXZhaWxfcnMu bWFwcGFibGVfZ21hZHIuYmFzZSkpID0KIAkJdmdwdV9hcGVydHVyZV9nbWFkcl9iYXNlKHZncHUp OwogCXZncHVfdnJlZ190KHZncHUsIHZndGlmX3JlZyhhdmFpbF9ycy5tYXBwYWJsZV9nbWFkci5z aXplKSkgPQotLSAKMi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lu dGVsLWdmeA==