From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH v4] drm/i915: Implement inter-engine read-read optimisations Date: Thu, 19 Mar 2015 08:59:44 +0000 Message-ID: <1426755584-24895-1-git-send-email-chris@chris-wilson.co.uk> References: <1426586098-12124-1-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from relay.fireflyinternet.com (hostedrelay.fireflyinternet.com [109.228.30.76]) by gabe.freedesktop.org (Postfix) with ESMTP id 631B0890ED for ; Thu, 19 Mar 2015 01:59:59 -0700 (PDT) In-Reply-To: <1426586098-12124-1-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Lionel Landwerlin List-Id: intel-gfx@lists.freedesktop.org Q3VycmVudGx5LCB3ZSBvbmx5IHRyYWNrIHRoZSBsYXN0IHJlcXVlc3QgZ2xvYmFsbHkgYWNyb3Nz IGFsbCBlbmdpbmVzLgpUaGlzIHByZXZlbnRzIHVzIGZyb20gaXNzdWluZyBjb25jdXJyZW50IHJl YWQgcmVxdWVzdHMgb24gZS5nLiB0aGUgUkNTCmFuZCBCQ1MgZW5naW5lcyAob3IgbW9yZSBsaWtl bHkgdGhlIHJlbmRlciBhbmQgbWVkaWEgZW5naW5lcykuIFdpdGhvdXQKc2VtYXBob3Jlcywgd2Ug aW5jdXIgY29zdGx5IHN0YWxscyBhcyB3ZSBzeW5jaHJvbmlzZSBiZXR3ZWVuIHJpbmdzIC0KZ3Jl YXRseSBpbXBhY3RpbmcgdGhlIGN1cnJlbnQgcGVyZm9ybWFuY2Ugb2YgQnJvYWR3ZWxsIHZlcnN1 cyBIYXN3ZWxsIGluCmNlcnRhaW4gd29ya2xvYWRzIChsaWtlIHZpZGVvIGRlY29kZSkuIFdpdGgg dGhlIGludHJvZHVjdGlvbiBvZgpyZWZlcmVuY2UgY291bnRlZCByZXF1ZXN0cywgaXQgaXMgbXVj aCBlYXNpZXIgdG8gdHJhY2sgdGhlIGxhc3QgcmVxdWVzdApwZXIgcmluZywgYXMgd2VsbCBhcyB0 aGUgbGFzdCBnbG9iYWwgd3JpdGUgcmVxdWVzdCBzbyB0aGF0IHdlIGNhbgpvcHRpbWlzZSBpbnRl ci1lbmdpbmUgcmVhZCByZWFkIHJlcXVlc3RzIChhcyB3ZWxsIGFzIGJldHRlciBvcHRpbWlzZQpj ZXJ0YWluIENQVSB3YWl0cykuCgp2MjogRml4IGludmVydGVkIHJlYWRvbmx5IGNvbmRpdGlvbiBm b3Igbm9uYmxvY2tpbmcgd2FpdHMuCnYzOiBIYW5kbGUgbm9uLWNvbnRpbmd1b3VzIGVuZ2luZSBh cnJheSBhZnRlciB3YWl0cwp2NDogUmViYXNlLCB0aWR5LCByZXdyaXRlIHJpbmcgbGlzdCBkZWJ1 Z2dpbmcKCkJlbmNobWFyazogaWd0L2dlbV9yZWFkX3JlYWRfc3BlZWQKaHN3Omd0M2UgKHdpdGgg c2VtYXBob3Jlcyk6CkJlZm9yZTogVGltZSB0byByZWFkLXJlYWQgMTAyNGs6CQkyNzUuNzk0wrVz CkFmdGVyOiAgVGltZSB0byByZWFkLXJlYWQgMTAyNGs6CQkxMjMuMjYwwrVzCgpoc3c6Z3QzZSAo dy9vIHNlbWFwaG9yZXMpOgpCZWZvcmU6IFRpbWUgdG8gcmVhZC1yZWFkIDEwMjRrOgkJMjMwLjQz M8K1cwpBZnRlcjogIFRpbWUgdG8gcmVhZC1yZWFkIDEwMjRrOgkJMTI0LjU5M8K1cwoKYmR3LXUg KHcvbyBzZW1hcGhvcmVzKTogICAgICAgICAgICAgQmVmb3JlICAgICAgICAgIEFmdGVyClRpbWUg dG8gcmVhZC1yZWFkIDF4MTogICAgICAgICAgICAyNi4yNzTCtXMgICAgICAgMTAuMzUwwrVzClRp bWUgdG8gcmVhZC1yZWFkIDEyOHgxMjg6ICAgICAgICA0MC4wOTfCtXMgICAgICAgMjEuMzY2wrVz ClRpbWUgdG8gcmVhZC1yZWFkIDI1NngyNTY6ICAgICAgICA3Ny4wODfCtXMgICAgICAgNDIuNjA4 wrVzClRpbWUgdG8gcmVhZC1yZWFkIDUxMng1MTI6ICAgICAgIDI4MS45OTnCtXMgICAgICAxODEu MTU1wrVzClRpbWUgdG8gcmVhZC1yZWFkIDEwMjR4MTAyNDogICAgMTE5Ni4xNDHCtXMgICAgIDEx MTguMjIzwrVzClRpbWUgdG8gcmVhZC1yZWFkIDIwNDh4MjA0ODogICAgNTYzOS4wNzLCtXMgICAg IDUyMjUuODM3wrVzClRpbWUgdG8gcmVhZC1yZWFkIDQwOTZ4NDA5NjogICAyMjQwMS42NjLCtXMg ICAgMjExMzcuMDY3wrVzClRpbWUgdG8gcmVhZC1yZWFkIDgxOTJ4ODE5MjogICA4OTYxNy43MzXC tXMgICAgODU2MzcuNjgxwrVzCgpUZXN0Y2FzZTogaWd0L2dlbV9jb25jdXJyZW50X2JsaXQgKHJl YWQtcmVhZCBhbmQgZnJpZW5kcykKQ2M6IExpb25lbCBMYW5kd2VybGluIDxsaW9uZWwuZy5sYW5k d2VybGluQGxpbnV4LmludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJp c0BjaHJpcy13aWxzb24uY28udWs+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1 Z2ZzLmMgICAgIHwgIDE2ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAg ICAgfCAgMTEgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAgICAgICB8IDQy NyArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fY29udGV4dC5jIHwgICAyIC0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2RlYnVnLmMgICB8IDEwMCArKystLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVf ZXJyb3IuYyAgIHwgIDE5ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMg ICAgfCAgIDQgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCB8ICAg MSArCiA4IGZpbGVzIGNoYW5nZWQsIDMyMSBpbnNlcnRpb25zKCspLCAyNTkgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwppbmRleCA3ZWY2Mjk1NDM4ZTkuLjVjZWE5 YTljMWNiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKQEAgLTEyMCwxMCArMTIw LDEzIEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqZ2V0X2dsb2JhbF9mbGFnKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiBzdGF0aWMgdm9pZAogZGVzY3JpYmVfb2JqKHN0cnVj dCBzZXFfZmlsZSAqbSwgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOwor CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmc7CiAJc3RydWN0IGk5MTVfdm1hICp2bWE7CiAJ aW50IHBpbl9jb3VudCA9IDA7CisJaW50IGk7CiAKLQlzZXFfcHJpbnRmKG0sICIlcEs6ICVzJXMl cyVzICU4emRLaUIgJTAyeCAlMDJ4ICV4ICV4ICV4JXMlcyVzIiwKKwlzZXFfcHJpbnRmKG0sICIl cEs6ICVzJXMlcyVzICU4emRLaUIgJTAyeCAlMDJ4IFsgIiwKIAkJICAgJm9iai0+YmFzZSwKIAkJ ICAgb2JqLT5hY3RpdmUgPyAiKiIgOiAiICIsCiAJCSAgIGdldF9waW5fZmxhZyhvYmopLApAQCAt MTMxLDggKzEzNCwxMSBAQCBkZXNjcmliZV9vYmooc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogCQkgICBnZXRfZ2xvYmFsX2ZsYWcob2JqKSwKIAkJ ICAgb2JqLT5iYXNlLnNpemUgLyAxMDI0LAogCQkgICBvYmotPmJhc2UucmVhZF9kb21haW5zLAot CQkgICBvYmotPmJhc2Uud3JpdGVfZG9tYWluLAotCQkgICBpOTE1X2dlbV9yZXF1ZXN0X2dldF9z ZXFubyhvYmotPmxhc3RfcmVhZF9yZXEpLAorCQkgICBvYmotPmJhc2Uud3JpdGVfZG9tYWluKTsK Kwlmb3JfZWFjaF9yaW5nKHJpbmcsIGRldl9wcml2LCBpKQorCQlzZXFfcHJpbnRmKG0sICIleCAi LAorCQkJCWk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3NlcW5vKG9iai0+bGFzdF9yZWFkX3JlcVtpXSkp OworCXNlcV9wcmludGYobSwgIl0gJXggJXglcyVzJXMiLAogCQkgICBpOTE1X2dlbV9yZXF1ZXN0 X2dldF9zZXFubyhvYmotPmxhc3Rfd3JpdGVfcmVxKSwKIAkJICAgaTkxNV9nZW1fcmVxdWVzdF9n ZXRfc2Vxbm8ob2JqLT5sYXN0X2ZlbmNlZF9yZXEpLAogCQkgICBpOTE1X2NhY2hlX2xldmVsX3N0 cih0b19pOTE1KG9iai0+YmFzZS5kZXYpLCBvYmotPmNhY2hlX2xldmVsKSwKQEAgLTE2OSw5ICsx NzUsOSBAQCBkZXNjcmliZV9vYmooc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqKQogCQkqdCA9ICdcMCc7CiAJCXNlcV9wcmludGYobSwgIiAoJXMgbWFw cGFibGUpIiwgcyk7CiAJfQotCWlmIChvYmotPmxhc3RfcmVhZF9yZXEgIT0gTlVMTCkKKwlpZiAo b2JqLT5sYXN0X3dyaXRlX3JlcSAhPSBOVUxMKQogCQlzZXFfcHJpbnRmKG0sICIgKCVzKSIsCi0J CQkgICBpOTE1X2dlbV9yZXF1ZXN0X2dldF9yaW5nKG9iai0+bGFzdF9yZWFkX3JlcSktPm5hbWUp OworCQkJICAgaTkxNV9nZW1fcmVxdWVzdF9nZXRfcmluZyhvYmotPmxhc3Rfd3JpdGVfcmVxKS0+ bmFtZSk7CiAJaWYgKG9iai0+ZnJvbnRidWZmZXJfYml0cykKIAkJc2VxX3ByaW50ZihtLCAiIChm cm9udGJ1ZmZlcjogMHglMDN4KSIsIG9iai0+ZnJvbnRidWZmZXJfYml0cyk7CiB9CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaAppbmRleCA4MTk1MDNlNmMzZDQuLjQ0MzZjMWNhMjQ3ZCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oCkBAIC00OTgsNyArNDk4LDcgQEAgc3RydWN0IGRybV9pOTE1X2Vycm9y X3N0YXRlIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfYnVmZmVyIHsKIAkJdTMyIHNpemU7CiAJ CXUzMiBuYW1lOwotCQl1MzIgcnNlcW5vLCB3c2Vxbm87CisJCXUzMiByc2Vxbm9bSTkxNV9OVU1f UklOR1NdLCB3c2Vxbm87CiAJCXUzMiBndHRfb2Zmc2V0OwogCQl1MzIgcmVhZF9kb21haW5zOwog CQl1MzIgd3JpdGVfZG9tYWluOwpAQCAtMTkwMyw3ICsxOTAzLDcgQEAgc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgewogCXN0cnVjdCBkcm1fbW1fbm9kZSAqc3RvbGVuOwogCXN0cnVjdCBsaXN0 X2hlYWQgZ2xvYmFsX2xpc3Q7CiAKLQlzdHJ1Y3QgbGlzdF9oZWFkIHJpbmdfbGlzdDsKKwlzdHJ1 Y3QgbGlzdF9oZWFkIHJpbmdfbGlzdFtJOTE1X05VTV9SSU5HU107CiAJLyoqIFVzZWQgaW4gZXhl Y2J1ZiB0byB0ZW1wb3JhcmlseSBob2xkIGEgcmVmICovCiAJc3RydWN0IGxpc3RfaGVhZCBvYmpf ZXhlY19saW5rOwogCkBAIC0xOTE0LDcgKzE5MTQsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCB7CiAJICogcmVuZGVyaW5nIGFuZCBzbyBhIG5vbi16ZXJvIHNlcW5vKSwgYW5kIGlzIG5v dCBzZXQgaWYgaXQgaSBzIG9uCiAJICogaW5hY3RpdmUgKHJlYWR5IHRvIGJlIHVuYm91bmQpIGxp c3QuCiAJICovCi0JdW5zaWduZWQgaW50IGFjdGl2ZToxOworCXVuc2lnbmVkIGludCBhY3RpdmU6 STkxNV9NQVhfUklOR19CSVQ7CiAKIAkvKioKIAkgKiBUaGlzIGlzIHNldCBpZiB0aGUgb2JqZWN0 IGhhcyBiZWVuIHdyaXR0ZW4gdG8gc2luY2UgbGFzdCBib3VuZApAQCAtMTk4Miw3ICsxOTgyLDcg QEAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgewogCWludCB2bWFwcGluZ19jb3VudDsKIAog CS8qKiBCcmVhZGNydW1iIG9mIGxhc3QgcmVuZGVyaW5nIHRvIHRoZSBidWZmZXIuICovCi0Jc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpsYXN0X3JlYWRfcmVxOworCXN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqbGFzdF9yZWFkX3JlcVtJOTE1X05VTV9SSU5HU107CiAJc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICpsYXN0X3dyaXRlX3JlcTsKIAkvKiogQnJlYWRjcnVtYiBvZiBs YXN0IGZlbmNlZCBHUFUgYWNjZXNzIHRvIHRoZSBidWZmZXIuICovCiAJc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICpsYXN0X2ZlbmNlZF9yZXE7CkBAIC0yMTIwLDEwICsyMTIwLDExIEBAIGk5 MTVfZ2VtX3JlcXVlc3RfZ2V0X3Jpbmcoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEp CiAJcmV0dXJuIHJlcSA/IHJlcS0+cmluZyA6IE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9p ZAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKgogaTkxNV9nZW1f cmVxdWVzdF9yZWZlcmVuY2Uoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCiB7CiAJ a3JlZl9nZXQoJnJlcS0+cmVmKTsKKwlyZXR1cm4gcmVxOwogfQogCiBzdGF0aWMgaW5saW5lIHZv aWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDNkNmQzY2VjNWEwNi4uYmNhNDMzYTI3OWY2 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTQwLDEyICs0MCwxMyBAQAogCiBzdGF0aWMg dm9pZCBpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3R0X3dyaXRlX2RvbWFpbihzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKTsKIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX29iamVjdF9mbHVzaF9j cHVfd3JpdGVfZG9tYWluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOworc3RhdGlj IHZvaWQKK2k5MTVfZ2VtX29iamVjdF9yZXRpcmVfX3dyaXRlKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmopOworc3RhdGljIHZvaWQKK2k5MTVfZ2VtX29iamVjdF9yZXRpcmVfX3JlYWQo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgaW50IHJpbmcpOwogc3RhdGljIF9fbXVz dF9jaGVjayBpbnQKIGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLAogCQkJICAgICAgIGJvb2wgcmVhZG9ubHkpOwotc3RhdGljIHZv aWQKLWk5MTVfZ2VtX29iamVjdF9yZXRpcmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aik7Ci0KIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX3dyaXRlX2ZlbmNlKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIGludCByZWcsCiAJCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOwog c3RhdGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X3VwZGF0ZV9mZW5jZShzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLApAQCAtNTE4LDggKzUxOSw2IEBAIGludCBpOTE1X2dlbV9vYmpfcHJl cGFyZV9zaG1lbV9yZWFkKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCXJldCA9 IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmosIHRydWUpOwogCQlpZiAocmV0KQog CQkJcmV0dXJuIHJldDsKLQotCQlpOTE1X2dlbV9vYmplY3RfcmV0aXJlKG9iaik7CiAJfQogCiAJ cmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhvYmopOwpAQCAtOTM5LDggKzkzOCw2IEBA IGk5MTVfZ2VtX3NobWVtX3B3cml0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQlyZXQgPSBp OTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcob2JqLCBmYWxzZSk7CiAJCWlmIChyZXQpCiAJ CQlyZXR1cm4gcmV0OwotCi0JCWk5MTVfZ2VtX29iamVjdF9yZXRpcmUob2JqKTsKIAl9CiAJLyog U2FtZSB0cmljayBhcHBsaWVzIHRvIGludmFsaWRhdGUgcGFydGlhbGx5IHdyaXR0ZW4gY2FjaGVs aW5lcyByZWFkCiAJICogYmVmb3JlIHdyaXRpbmcuICovCkBAIC0xMzcyLDI5ICsxMzY5LDggQEAg aTkxNV93YWl0X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCiAJCXJl dHVybiByZXQ7CiAKIAlyZXNldF9jb3VudGVyID0gYXRvbWljX3JlYWQoJmRldl9wcml2LT5ncHVf ZXJyb3IucmVzZXRfY291bnRlcik7Ci0JaTkxNV9nZW1fcmVxdWVzdF9yZWZlcmVuY2UocmVxKTsK LQlyZXQgPSBfX2k5MTVfd2FpdF9yZXF1ZXN0KHJlcSwgcmVzZXRfY291bnRlciwKLQkJCQkgIGlu dGVycnVwdGlibGUsIE5VTEwsIE5VTEwpOwotCWk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2Uo cmVxKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci1pOTE1X2dlbV9vYmplY3Rfd2Fp dF9yZW5kZXJpbmdfX3RhaWwoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLQlp ZiAoIW9iai0+YWN0aXZlKQotCQlyZXR1cm4gMDsKLQotCS8qIE1hbnVhbGx5IG1hbmFnZSB0aGUg d3JpdGUgZmx1c2ggYXMgd2UgbWF5IGhhdmUgbm90IHlldAotCSAqIHJldGlyZWQgdGhlIGJ1ZmZl ci4KLQkgKgotCSAqIE5vdGUgdGhhdCB0aGUgbGFzdF93cml0ZV9yZXEgaXMgYWx3YXlzIHRoZSBl YXJsaWVyIG9mCi0JICogdGhlIHR3byAocmVhZC93cml0ZSkgcmVxdWVzdHMsIHNvIGlmIHdlIGhh dmVkIHN1Y2Nlc3NmdWxseSB3YWl0ZWQsCi0JICogd2Uga25vdyB3ZSBoYXZlIHBhc3NlZCB0aGUg bGFzdCB3cml0ZS4KLQkgKi8KLQlpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbigmb2JqLT5sYXN0X3dy aXRlX3JlcSwgTlVMTCk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gX19pOTE1X3dhaXRfcmVxdWVz dChyZXEsIHJlc2V0X2NvdW50ZXIsCisJCQkJICAgaW50ZXJydXB0aWJsZSwgTlVMTCwgTlVMTCk7 CiB9CiAKIC8qKgpAQCAtMTQwNSwxOCArMTM4MSwzOSBAQCBzdGF0aWMgX19tdXN0X2NoZWNrIGlu dAogaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCiAJCQkgICAgICAgYm9vbCByZWFkb25seSkKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcTsKLQlpbnQgcmV0OworCWludCByZXQsIGk7CiAKLQlyZXEgPSByZWFk b25seSA/IG9iai0+bGFzdF93cml0ZV9yZXEgOiBvYmotPmxhc3RfcmVhZF9yZXE7Ci0JaWYgKCFy ZXEpCisJaWYgKCFvYmotPmFjdGl2ZSkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBpOTE1X3dhaXRf cmVxdWVzdChyZXEpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJaWYgKHJlYWRvbmx5KSB7 CisJCWlmIChvYmotPmxhc3Rfd3JpdGVfcmVxICE9IE5VTEwpIHsKKwkJCXJldCA9IGk5MTVfd2Fp dF9yZXF1ZXN0KG9iai0+bGFzdF93cml0ZV9yZXEpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4g cmV0OworCisJCQlpID0gb2JqLT5sYXN0X3dyaXRlX3JlcS0+cmluZy0+aWQ7CisJCQlpZiAob2Jq LT5sYXN0X3JlYWRfcmVxW2ldID09IG9iai0+bGFzdF93cml0ZV9yZXEpCisJCQkJaTkxNV9nZW1f b2JqZWN0X3JldGlyZV9fcmVhZChvYmosIGkpOworCQkJZWxzZQorCQkJCWk5MTVfZ2VtX29iamVj dF9yZXRpcmVfX3dyaXRlKG9iaik7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwg STkxNV9OVU1fUklOR1M7IGkrKykgeworCQkJaWYgKG9iai0+bGFzdF9yZWFkX3JlcVtpXSA9PSBO VUxMKQorCQkJCWNvbnRpbnVlOworCisJCQlyZXQgPSBpOTE1X3dhaXRfcmVxdWVzdChvYmotPmxh c3RfcmVhZF9yZXFbaV0pOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCisJCQlpOTE1 X2dlbV9vYmplY3RfcmV0aXJlX19yZWFkKG9iaiwgaSk7CisJCX0KKwkJQlVHX09OKG9iai0+YWN0 aXZlKTsKKwl9CisKKwlyZXR1cm4gMDsKIAotCXJldHVybiBpOTE1X2dlbV9vYmplY3Rfd2FpdF9y ZW5kZXJpbmdfX3RhaWwob2JqKTsKIH0KIAogLyogQSBub25ibG9ja2luZyB2YXJpYW50IG9mIHRo ZSBhYm92ZSB3YWl0LiBUaGlzIGlzIGEgaGlnaGx5IGRhbmdlcm91cyByb3V0aW5lCkBAIC0xNDI3 LDM3ICsxNDI0LDcxIEBAIGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZ19fbm9uYmxvY2tp bmcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCQkJICAgIHN0cnVjdCBkcm1f aTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdiwKIAkJCQkJICAgIGJvb2wgcmVhZG9ubHkpCiB7 Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXE7CiAJc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IG9iai0+YmFzZS5kZXY7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVl c3RzW0k5MTVfTlVNX1JJTkdTXTsKIAl1bnNpZ25lZCByZXNldF9jb3VudGVyOwotCWludCByZXQ7 CisJaW50IHJldCwgaSwgbiA9IDA7CiAKIAlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5z dHJ1Y3RfbXV0ZXgpKTsKIAlCVUdfT04oIWRldl9wcml2LT5tbS5pbnRlcnJ1cHRpYmxlKTsKIAot CXJlcSA9IHJlYWRvbmx5ID8gb2JqLT5sYXN0X3dyaXRlX3JlcSA6IG9iai0+bGFzdF9yZWFkX3Jl cTsKLQlpZiAoIXJlcSkKKwlpZiAoIW9iai0+YWN0aXZlKQogCQlyZXR1cm4gMDsKIAogCXJldCA9 IGk5MTVfZ2VtX2NoZWNrX3dlZGdlKCZkZXZfcHJpdi0+Z3B1X2Vycm9yLCB0cnVlKTsKIAlpZiAo cmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gaTkxNV9nZW1fY2hlY2tfb2xyKHJlcSk7Ci0J aWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQogCXJlc2V0X2NvdW50ZXIgPSBhdG9taWNfcmVhZCgm ZGV2X3ByaXYtPmdwdV9lcnJvci5yZXNldF9jb3VudGVyKTsKLQlpOTE1X2dlbV9yZXF1ZXN0X3Jl ZmVyZW5jZShyZXEpOworCisJaWYgKHJlYWRvbmx5KSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcnE7CisKKwkJcnEgPSBvYmotPmxhc3Rfd3JpdGVfcmVxOworCQlpZiAocnEgPT0g TlVMTCkKKwkJCXJldHVybiAwOworCisJCXJldCA9IGk5MTVfZ2VtX2NoZWNrX29scihycSk7CisJ CWlmIChyZXQpCisJCQlnb3RvIGVycjsKKworCQlyZXF1ZXN0c1tuKytdID0gaTkxNV9nZW1fcmVx dWVzdF9yZWZlcmVuY2UocnEpOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBJOTE1X05V TV9SSU5HUzsgaSsrKSB7CisJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxOworCisJ CQlycSA9IG9iai0+bGFzdF9yZWFkX3JlcVtpXTsKKwkJCWlmIChycSA9PSBOVUxMKQorCQkJCWNv bnRpbnVlOworCisJCQlyZXQgPSBpOTE1X2dlbV9jaGVja19vbHIocnEpOworCQkJaWYgKHJldCkK KwkJCQlnb3RvIGVycjsKKworCQkJcmVxdWVzdHNbbisrXSA9IGk5MTVfZ2VtX3JlcXVlc3RfcmVm ZXJlbmNlKHJxKTsKKwkJfQorCX0KKwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgp OwotCXJldCA9IF9faTkxNV93YWl0X3JlcXVlc3QocmVxLCByZXNldF9jb3VudGVyLCB0cnVlLCBO VUxMLCBmaWxlX3ByaXYpOworCWZvciAoaSA9IDA7IHJldCA9PSAwICYmIGkgPCBuOyBpKyspCisJ CXJldCA9IF9faTkxNV93YWl0X3JlcXVlc3QocmVxdWVzdHNbaV0sIHJlc2V0X2NvdW50ZXIsIHRy dWUsCisJCQkJCSAgTlVMTCwgZmlsZV9wcml2KTsKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9t dXRleCk7Ci0JaTkxNV9nZW1fcmVxdWVzdF91bnJlZmVyZW5jZShyZXEpOwotCWlmIChyZXQpCi0J CXJldHVybiByZXQ7CiAKLQlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nX190 YWlsKG9iaik7CitlcnI6CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlpZiAocmV0ID09 IDApIHsKKwkJCWludCByaW5nID0gcmVxdWVzdHNbaV0tPnJpbmctPmlkOworCQkJaWYgKG9iai0+ bGFzdF9yZWFkX3JlcVtyaW5nXSA9PSByZXF1ZXN0c1tpXSkKKwkJCQlpOTE1X2dlbV9vYmplY3Rf cmV0aXJlX19yZWFkKG9iaiwgcmluZyk7CisJCQlpZiAob2JqLT5sYXN0X3dyaXRlX3JlcSA9PSBy ZXF1ZXN0c1tpXSkKKwkJCQlpOTE1X2dlbV9vYmplY3RfcmV0aXJlX193cml0ZShvYmopOworCQl9 CisJCWk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2UocmVxdWVzdHNbaV0pOworCX0KKworCXJl dHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtMjIwNCw3OCArMjIzNSw1OSBAQCBpOTE1X2dlbV9vYmpl Y3RfZ2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJcmV0dXJuIDA7 CiB9CiAKLXN0YXRpYyB2b2lkCi1pOTE1X2dlbV9vYmplY3RfbW92ZV90b19hY3RpdmUoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKLQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpyaW5nKQordm9pZCBpOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgaTkxNV92bWEg KnZtYSwKKwkJCSAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKIHsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcTsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpvbGRf cmluZzsKLQotCUJVR19PTihyaW5nID09IE5VTEwpOwotCi0JcmVxID0gaW50ZWxfcmluZ19nZXRf cmVxdWVzdChyaW5nKTsKLQlvbGRfcmluZyA9IGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3Jpbmcob2Jq LT5sYXN0X3JlYWRfcmVxKTsKLQotCWlmIChvbGRfcmluZyAhPSByaW5nICYmIG9iai0+bGFzdF93 cml0ZV9yZXEpIHsKLQkJLyogS2VlcCB0aGUgcmVxdWVzdCByZWxhdGl2ZSB0byB0aGUgY3VycmVu dCByaW5nICovCi0JCWk5MTVfZ2VtX3JlcXVlc3RfYXNzaWduKCZvYmotPmxhc3Rfd3JpdGVfcmVx LCByZXEpOwotCX0KKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gdm1hLT5vYmo7 CiAKIAkvKiBBZGQgYSByZWZlcmVuY2UgaWYgd2UncmUgbmV3bHkgZW50ZXJpbmcgdGhlIGFjdGl2 ZSBsaXN0LiAqLwotCWlmICghb2JqLT5hY3RpdmUpIHsKKwlpZiAob2JqLT5sYXN0X3JlYWRfcmVx W3JpbmctPmlkXSA9PSBOVUxMICYmIG9iai0+YWN0aXZlKysgPT0gMCkKIAkJZHJtX2dlbV9vYmpl Y3RfcmVmZXJlbmNlKCZvYmotPmJhc2UpOwotCQlvYmotPmFjdGl2ZSA9IDE7Ci0JfQorCUJVR19P TihvYmotPmFjdGl2ZSA9PSAwIHx8IG9iai0+YWN0aXZlID4gSTkxNV9OVU1fUklOR1MpOwogCi0J bGlzdF9tb3ZlX3RhaWwoJm9iai0+cmluZ19saXN0LCAmcmluZy0+YWN0aXZlX2xpc3QpOworCWxp c3RfbW92ZV90YWlsKCZvYmotPnJpbmdfbGlzdFtyaW5nLT5pZF0sICZyaW5nLT5hY3RpdmVfbGlz dCk7CisJaTkxNV9nZW1fcmVxdWVzdF9hc3NpZ24oJm9iai0+bGFzdF9yZWFkX3JlcVtyaW5nLT5p ZF0sCisJCQkJaW50ZWxfcmluZ19nZXRfcmVxdWVzdChyaW5nKSk7CiAKLQlpOTE1X2dlbV9yZXF1 ZXN0X2Fzc2lnbigmb2JqLT5sYXN0X3JlYWRfcmVxLCByZXEpOworCWxpc3RfbW92ZV90YWlsKCZ2 bWEtPm1tX2xpc3QsICZ2bWEtPnZtLT5hY3RpdmVfbGlzdCk7CiB9CiAKLXZvaWQgaTkxNV92bWFf bW92ZV90b19hY3RpdmUoc3RydWN0IGk5MTVfdm1hICp2bWEsCi0JCQkgICAgIHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKnJpbmcpCitzdGF0aWMgdm9pZAoraTkxNV9nZW1fb2JqZWN0X3JldGlyZV9f d3JpdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKLQlsaXN0X21vdmVfdGFp bCgmdm1hLT5tbV9saXN0LCAmdm1hLT52bS0+YWN0aXZlX2xpc3QpOwotCXJldHVybiBpOTE1X2dl bV9vYmplY3RfbW92ZV90b19hY3RpdmUodm1hLT5vYmosIHJpbmcpOworCUJVR19PTihvYmotPmxh c3Rfd3JpdGVfcmVxID09IE5VTEwpOworCUJVR19PTighb2JqLT5hY3RpdmUpOworCisJaTkxNV9n ZW1fcmVxdWVzdF9hc3NpZ24oJm9iai0+bGFzdF93cml0ZV9yZXEsIE5VTEwpOworCisJaW50ZWxf ZmJfb2JqX2ZsdXNoKG9iaiwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1pOTE1X2dlbV9vYmpl Y3RfbW92ZV90b19pbmFjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQoraTkx NV9nZW1fb2JqZWN0X3JldGlyZV9fcmVhZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq LCBpbnQgcmluZykKIHsKIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKIAotCUJVR19PTihvYmotPmJh c2Uud3JpdGVfZG9tYWluICYgfkk5MTVfR0VNX0dQVV9ET01BSU5TKTsKKwlCVUdfT04ob2JqLT5s YXN0X3JlYWRfcmVxW3JpbmddID09IE5VTEwpOwogCUJVR19PTighb2JqLT5hY3RpdmUpOwogCisJ bGlzdF9kZWxfaW5pdCgmb2JqLT5yaW5nX2xpc3RbcmluZ10pOworCWk5MTVfZ2VtX3JlcXVlc3Rf YXNzaWduKCZvYmotPmxhc3RfcmVhZF9yZXFbcmluZ10sIE5VTEwpOworCisJaWYgKG9iai0+bGFz dF93cml0ZV9yZXEgJiYgb2JqLT5sYXN0X3dyaXRlX3JlcS0+cmluZy0+aWQgPT0gcmluZykKKwkJ aTkxNV9nZW1fb2JqZWN0X3JldGlyZV9fd3JpdGUob2JqKTsKKworCWlmICgtLW9iai0+YWN0aXZl KQorCQlyZXR1cm47CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJm9iai0+dm1hX2xpc3Qs IHZtYV9saW5rKSB7CiAJCWlmICghbGlzdF9lbXB0eSgmdm1hLT5tbV9saXN0KSkKIAkJCWxpc3Rf bW92ZV90YWlsKCZ2bWEtPm1tX2xpc3QsICZ2bWEtPnZtLT5pbmFjdGl2ZV9saXN0KTsKIAl9CiAK LQlpbnRlbF9mYl9vYmpfZmx1c2gob2JqLCB0cnVlKTsKLQotCWxpc3RfZGVsX2luaXQoJm9iai0+ cmluZ19saXN0KTsKLQotCWk5MTVfZ2VtX3JlcXVlc3RfYXNzaWduKCZvYmotPmxhc3RfcmVhZF9y ZXEsIE5VTEwpOwotCWk5MTVfZ2VtX3JlcXVlc3RfYXNzaWduKCZvYmotPmxhc3Rfd3JpdGVfcmVx LCBOVUxMKTsKLQlvYmotPmJhc2Uud3JpdGVfZG9tYWluID0gMDsKLQogCWk5MTVfZ2VtX3JlcXVl c3RfYXNzaWduKCZvYmotPmxhc3RfZmVuY2VkX3JlcSwgTlVMTCk7CiAKLQlvYmotPmFjdGl2ZSA9 IDA7CiAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7Ci0KLQlXQVJOX09O KGk5MTVfdmVyaWZ5X2xpc3RzKGRldikpOwotfQotCi1zdGF0aWMgdm9pZAotaTkxNV9nZW1fb2Jq ZWN0X3JldGlyZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQotewotCWlmIChvYmot Pmxhc3RfcmVhZF9yZXEgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JaWYgKGk5MTVfZ2VtX3JlcXVl c3RfY29tcGxldGVkKG9iai0+bGFzdF9yZWFkX3JlcSwgdHJ1ZSkpCi0JCWk5MTVfZ2VtX29iamVj dF9tb3ZlX3RvX2luYWN0aXZlKG9iaik7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTI1ODMsOSArMjU5 NSw5IEBAIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX3Jlc2V0X3JpbmdfY2xlYW51cChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAKIAkJb2JqID0gbGlzdF9maXJzdF9lbnRyeSgmcmlu Zy0+YWN0aXZlX2xpc3QsCiAJCQkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LAot CQkJCSAgICAgICByaW5nX2xpc3QpOworCQkJCSAgICAgICByaW5nX2xpc3RbcmluZy0+aWRdKTsK IAotCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19pbmFjdGl2ZShvYmopOworCQlpOTE1X2dlbV9v YmplY3RfcmV0aXJlX19yZWFkKG9iaiwgcmluZy0+aWQpOwogCX0KIAogCS8qCkBAIC0yNjcwLDYg KzI2ODIsOCBAQCB2b2lkIGk5MTVfZ2VtX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJ aTkxNV9nZW1fY29udGV4dF9yZXNldChkZXYpOwogCiAJaTkxNV9nZW1fcmVzdG9yZV9mZW5jZXMo ZGV2KTsKKworCVdBUk5fT04oaTkxNV92ZXJpZnlfbGlzdHMoZGV2KSk7CiB9CiAKIC8qKgpAQCAt MjY3OCwxMSArMjY5MiwxMSBAQCB2b2lkIGk5MTVfZ2VtX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpCiB2b2lkCiBpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHNfcmluZyhzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICpyaW5nKQogeworCVdBUk5fT04oaTkxNV92ZXJpZnlfbGlzdHMocmluZy0+ZGV2 KSk7CisKIAlpZiAobGlzdF9lbXB0eSgmcmluZy0+cmVxdWVzdF9saXN0KSkKIAkJcmV0dXJuOwog Ci0JV0FSTl9PTihpOTE1X3ZlcmlmeV9saXN0cyhyaW5nLT5kZXYpKTsKLQogCS8qIFJldGlyZSBy ZXF1ZXN0cyBmaXJzdCBhcyB3ZSB1c2UgaXQgYWJvdmUgZm9yIHRoZSBlYXJseSByZXR1cm4uCiAJ ICogSWYgd2UgcmV0aXJlIHJlcXVlc3RzIGxhc3QsIHdlIG1heSB1c2UgYSBsYXRlciBzZXFubyBh bmQgc28gY2xlYXIKIAkgKiB0aGUgcmVxdWVzdHMgbGlzdHMgd2l0aG91dCBjbGVhcmluZyB0aGUg YWN0aXZlIGxpc3QsIGxlYWRpbmcgdG8KQEAgLTI3MTksMTIgKzI3MzMsMTMgQEAgaTkxNV9nZW1f cmV0aXJlX3JlcXVlc3RzX3Jpbmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKIAogCQlv YmogPSBsaXN0X2ZpcnN0X2VudHJ5KCZyaW5nLT5hY3RpdmVfbGlzdCwKIAkJCQkgICAgICBzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKLQkJCQkgICAgICByaW5nX2xpc3QpOworCQkJCSAgICAg IHJpbmdfbGlzdFtyaW5nLT5pZF0pOwogCi0JCWlmICghaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0 ZWQob2JqLT5sYXN0X3JlYWRfcmVxLCB0cnVlKSkKKwkJaWYgKCFpOTE1X2dlbV9yZXF1ZXN0X2Nv bXBsZXRlZChvYmotPmxhc3RfcmVhZF9yZXFbcmluZy0+aWRdLAorCQkJCQkJdHJ1ZSkpCiAJCQli cmVhazsKIAotCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19pbmFjdGl2ZShvYmopOworCQlpOTE1 X2dlbV9vYmplY3RfcmV0aXJlX19yZWFkKG9iaiwgcmluZy0+aWQpOwogCX0KIAogCWlmICh1bmxp a2VseShyaW5nLT50cmFjZV9pcnFfcmVxICYmCkBAIC0yODEzLDE3ICsyODI4LDIzIEBAIGk5MTVf Z2VtX2lkbGVfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHN0YXRpYyBp bnQKIGk5MTVfZ2VtX29iamVjdF9mbHVzaF9hY3RpdmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaikKIHsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nOwotCWludCByZXQ7CisJ aW50IHJldCwgaTsKIAotCWlmIChvYmotPmFjdGl2ZSkgewotCQlyaW5nID0gaTkxNV9nZW1fcmVx dWVzdF9nZXRfcmluZyhvYmotPmxhc3RfcmVhZF9yZXEpOworCWlmICghb2JqLT5hY3RpdmUpCisJ CXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX1JJTkdTOyBpKyspIHsKKwkJ c3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycTsKKworCQlycSA9IG9iai0+bGFzdF9yZWFk X3JlcVtpXTsKKwkJaWYgKHJxID09IE5VTEwpCisJCQljb250aW51ZTsKIAotCQlyZXQgPSBpOTE1 X2dlbV9jaGVja19vbHIob2JqLT5sYXN0X3JlYWRfcmVxKTsKKwkJcmV0ID0gaTkxNV9nZW1fY2hl Y2tfb2xyKHJxKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJaTkxNV9nZW1fcmV0 aXJlX3JlcXVlc3RzX3JpbmcocmluZyk7CisJCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0c19yaW5n KHJxLT5yaW5nKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI4NTcsOSArMjg3OCwxMCBAQCBpOTE1 X2dlbV93YWl0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVj dCBkcm1fZmlsZSAqZmlsZSkKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fd2FpdCAqYXJncyA9IGRhdGE7 CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlcXVlc3QgKnJlcTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcVtJOTE1X05V TV9SSU5HU107CiAJdW5zaWduZWQgcmVzZXRfY291bnRlcjsKLQlpbnQgcmV0ID0gMDsKKwlpbnQg aSwgbiA9IDA7CisJaW50IHJldDsKIAogCWlmIChhcmdzLT5mbGFncyAhPSAwKQogCQlyZXR1cm4g LUVJTlZBTDsKQEAgLTI4NzksMTEgKzI5MDEsOSBAQCBpOTE1X2dlbV93YWl0X2lvY3RsKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKIAlp ZiAocmV0KQogCQlnb3RvIG91dDsKIAotCWlmICghb2JqLT5hY3RpdmUgfHwgIW9iai0+bGFzdF9y ZWFkX3JlcSkKKwlpZiAoIW9iai0+YWN0aXZlKQogCQlnb3RvIG91dDsKIAotCXJlcSA9IG9iai0+ bGFzdF9yZWFkX3JlcTsKLQogCS8qIERvIHRoaXMgYWZ0ZXIgT0xSIGNoZWNrIHRvIG1ha2Ugc3Vy ZSB3ZSBtYWtlIGZvcndhcmQgcHJvZ3Jlc3MgcG9sbGluZwogCSAqIG9uIHRoaXMgSU9DVEwgd2l0 aCBhIHRpbWVvdXQgPT0gMCAobGlrZSBidXN5IGlvY3RsKQogCSAqLwpAQCAtMjg5NCwxMyArMjkx NCwyMyBAQCBpOTE1X2dlbV93YWl0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKIAogCWRybV9nZW1fb2JqZWN0X3VucmVmZXJl bmNlKCZvYmotPmJhc2UpOwogCXJlc2V0X2NvdW50ZXIgPSBhdG9taWNfcmVhZCgmZGV2X3ByaXYt PmdwdV9lcnJvci5yZXNldF9jb3VudGVyKTsKLQlpOTE1X2dlbV9yZXF1ZXN0X3JlZmVyZW5jZShy ZXEpOworCisJZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX1JJTkdTOyBpKyspIHsKKwkJaWYgKG9i ai0+bGFzdF9yZWFkX3JlcVtpXSA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJcmVxW24rK10g PSBpOTE1X2dlbV9yZXF1ZXN0X3JlZmVyZW5jZShvYmotPmxhc3RfcmVhZF9yZXFbaV0pOworCX0K KwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCi0JcmV0ID0gX19pOTE1X3dh aXRfcmVxdWVzdChyZXEsIHJlc2V0X2NvdW50ZXIsIHRydWUsCi0JCQkJICBhcmdzLT50aW1lb3V0 X25zID4gMCA/ICZhcmdzLT50aW1lb3V0X25zIDogTlVMTCwKLQkJCQkgIGZpbGUtPmRyaXZlcl9w cml2KTsKLQlpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlX191bmxvY2tlZChyZXEpOworCWZv ciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJaWYgKHJldCA9PSAwKQorCQkJcmV0ID0gX19pOTE1 X3dhaXRfcmVxdWVzdChyZXFbaV0sIHJlc2V0X2NvdW50ZXIsIHRydWUsCisJCQkJCQkgIGFyZ3Mt PnRpbWVvdXRfbnMgPiAwID8gJmFyZ3MtPnRpbWVvdXRfbnMgOiBOVUxMLAorCQkJCQkJICBmaWxl LT5kcml2ZXJfcHJpdik7CisJCWk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2VfX3VubG9ja2Vk KHJlcVtpXSk7CisJfQogCXJldHVybiByZXQ7CiAKIG91dDoKQEAgLTI5MDksNiArMjkzOSw2MiBA QCBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludAorX19pOTE1X2dlbV9vYmplY3Rf c3luYyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkgICAgICAgc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqdG8sCisJCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qg KnJxKQoreworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmZyb207CisJaW50IHJldDsKKworCWlm IChycSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWZyb20gPSBpOTE1X2dlbV9yZXF1ZXN0X2dl dF9yaW5nKHJxKTsKKwlpZiAodG8gPT0gZnJvbSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaTkxNV9n ZW1fcmVxdWVzdF9jb21wbGV0ZWQocnEsIHRydWUpKQorCQlyZXR1cm4gMDsKKworCXJldCA9IGk5 MTVfZ2VtX2NoZWNrX29scihycSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICgh aTkxNV9zZW1hcGhvcmVfaXNfZW5hYmxlZChvYmotPmJhc2UuZGV2KSkgeworCQlyZXQgPSBfX2k5 MTVfd2FpdF9yZXF1ZXN0KHJxLAorCQkJCQkgIGF0b21pY19yZWFkKCZ0b19pOTE1KG9iai0+YmFz ZS5kZXYpLT5ncHVfZXJyb3IucmVzZXRfY291bnRlciksCisJCQkJCSAgdG9faTkxNShvYmotPmJh c2UuZGV2KS0+bW0uaW50ZXJydXB0aWJsZSwgTlVMTCwgTlVMTCk7CisJCWlmIChyZXQpCisJCQly ZXR1cm4gcmV0OworCisJCWlmIChvYmotPmxhc3RfcmVhZF9yZXFbZnJvbS0+aWRdID09IHJxKQor CQkJaTkxNV9nZW1fb2JqZWN0X3JldGlyZV9fcmVhZChvYmosIGZyb20tPmlkKTsKKwkJaWYgKG9i ai0+bGFzdF93cml0ZV9yZXEgPT0gcnEpCisJCQlpOTE1X2dlbV9vYmplY3RfcmV0aXJlX193cml0 ZShvYmopOworCX0gZWxzZSB7CisJCWludCBpZHggPSBpbnRlbF9yaW5nX3N5bmNfaW5kZXgoZnJv bSwgdG8pOworCQl1MzIgc2Vxbm8gPSBpOTE1X2dlbV9yZXF1ZXN0X2dldF9zZXFubyhycSk7CisK KwkJaWYgKHNlcW5vIDw9IGZyb20tPnNlbWFwaG9yZS5zeW5jX3NlcW5vW2lkeF0pCisJCQlyZXR1 cm4gMDsKKworCQl0cmFjZV9pOTE1X2dlbV9yaW5nX3N5bmNfdG8oZnJvbSwgdG8sIHJxKTsKKwkJ cmV0ID0gdG8tPnNlbWFwaG9yZS5zeW5jX3RvKHRvLCBmcm9tLCBzZXFubyk7CisJCWlmIChyZXQp CisJCQlyZXR1cm4gcmV0OworCisJCS8qIFdlIHVzZSBsYXN0X3JlYWRfcmVxIGJlY2F1c2Ugc3lu Y190bygpCisJCSAqIG1pZ2h0IGhhdmUganVzdCBjYXVzZWQgc2Vxbm8gd3JhcCB1bmRlcgorCQkg KiB0aGUgcmFkYXIuCisJCSAqLworCQlmcm9tLT5zZW1hcGhvcmUuc3luY19zZXFub1tpZHhdID0K KwkJCWk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3NlcW5vKG9iai0+bGFzdF9yZWFkX3JlcVtmcm9tLT5p ZF0pOworCX0KKworCXJldHVybiAwOworfQorCiAvKioKICAqIGk5MTVfZ2VtX29iamVjdF9zeW5j IC0gc3luYyBhbiBvYmplY3QgdG8gYSByaW5nLgogICoKQEAgLTI5MTcsNyArMzAwMywxNyBAQCBv dXQ6CiAgKgogICogVGhpcyBjb2RlIGlzIG1lYW50IHRvIGFic3RyYWN0IG9iamVjdCBzeW5jaHJv bml6YXRpb24gd2l0aCB0aGUgR1BVLgogICogQ2FsbGluZyB3aXRoIE5VTEwgaW1wbGllcyBzeW5j aHJvbml6aW5nIHRoZSBvYmplY3Qgd2l0aCB0aGUgQ1BVCi0gKiByYXRoZXIgdGhhbiBhIHBhcnRp Y3VsYXIgR1BVIHJpbmcuCisgKiByYXRoZXIgdGhhbiBhIHBhcnRpY3VsYXIgR1BVIHJpbmcuIENv bmNlcHR1YWxseSB3ZSBzZXJpYWxpc2Ugd3JpdGVzCisgKiBiZXR3ZWVuIGVuZ2luZXMgaW5zaWRl IHRoZSBHUFUuIFdlIG9ubHkgYWxsb3cgb24gZW5naW5lIHRvIHdyaXRlCisgKiBpbnRvIGEgYnVm ZmVyIGF0IGFueSB0aW1lLCBidXQgbXVsdGlwbGUgcmVhZGVycy4gVG8gZW5zdXJlIGVhY2ggaGFz CisgKiBhIGNvaGVyZW50IHZpZXcgb2YgbWVtb3J5LCB3ZSBtdXN0OgorICoKKyAqIC0gSWYgdGhl cmUgaXMgYW4gb3V0c3RhbmRpbmcgd3JpdGUgcmVxdWVzdCB0byB0aGUgb2JqZWN0LCB0aGUgbmV3 CisgKiAgIHJlcXVlc3QgbXVzdCB3YWl0IGZvciBpdCB0byBjb21wbGV0ZSAoZWl0aGVyIENQVSBv ciBpbiBodywgcmVxdWVzdHMKKyAqICAgb24gdGhlIHNhbWUgcmluZyB3aWxsIGJlIG5hdHVyYWxs eSBvcmRlcmVkKS4KKyAqCisgKiAtIElmIHdlIGFyZSBhIHdyaXRlIHJlcXVlc3QgKHBlbmRpbmdf d3JpdGVfZG9tYWluIGlzIHNldCksIHRoZSBuZXcKKyAqICAgcmVxdWVzdCBtdXN0IHdhaXQgZm9y IG91dHN0YW5kaW5nIHJlYWQgcmVxdWVzdHMgdG8gY29tcGxldGUuCiAgKgogICogUmV0dXJucyAw IGlmIHN1Y2Nlc3NmdWwsIGVsc2UgcHJvcGFnYXRlcyB1cCB0aGUgbG93ZXIgbGF5ZXIgZXJyb3Iu CiAgKi8KQEAgLTI5MjUsMzkgKzMwMjEsMjUgQEAgaW50CiBpOTE1X2dlbV9vYmplY3Rfc3luYyhz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQkgICAgIHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKnRvKQogewotCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmZyb207Ci0JdTMyIHNlcW5v OwotCWludCByZXQsIGlkeDsKLQotCWZyb20gPSBpOTE1X2dlbV9yZXF1ZXN0X2dldF9yaW5nKG9i ai0+bGFzdF9yZWFkX3JlcSk7Ci0KLQlpZiAoZnJvbSA9PSBOVUxMIHx8IHRvID09IGZyb20pCi0J CXJldHVybiAwOwotCi0JaWYgKHRvID09IE5VTEwgfHwgIWk5MTVfc2VtYXBob3JlX2lzX2VuYWJs ZWQob2JqLT5iYXNlLmRldikpCi0JCXJldHVybiBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJp bmcob2JqLCBmYWxzZSk7Ci0KLQlpZHggPSBpbnRlbF9yaW5nX3N5bmNfaW5kZXgoZnJvbSwgdG8p OworCWNvbnN0IGJvb2wgcmVhZG9ubHkgPSBvYmotPmJhc2UucGVuZGluZ193cml0ZV9kb21haW4g PT0gMDsKKwlpbnQgcmV0LCBpOwogCi0Jc2Vxbm8gPSBpOTE1X2dlbV9yZXF1ZXN0X2dldF9zZXFu byhvYmotPmxhc3RfcmVhZF9yZXEpOwotCS8qIE9wdGltaXphdGlvbjogQXZvaWQgc2VtYXBob3Jl IHN5bmMgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBhbHJlYWR5Ci0JICogd2FpdGVkIGZvciBhbiBvYmpl Y3Qgd2l0aCBoaWdoZXIgc2Vxbm8gKi8KLQlpZiAoc2Vxbm8gPD0gZnJvbS0+c2VtYXBob3JlLnN5 bmNfc2Vxbm9baWR4XSkKKwlpZiAoIW9iai0+YWN0aXZlKQogCQlyZXR1cm4gMDsKIAotCXJldCA9 IGk5MTVfZ2VtX2NoZWNrX29scihvYmotPmxhc3RfcmVhZF9yZXEpOwotCWlmIChyZXQpCi0JCXJl dHVybiByZXQ7Ci0KLQl0cmFjZV9pOTE1X2dlbV9yaW5nX3N5bmNfdG8oZnJvbSwgdG8sIG9iai0+ bGFzdF9yZWFkX3JlcSk7Ci0JcmV0ID0gdG8tPnNlbWFwaG9yZS5zeW5jX3RvKHRvLCBmcm9tLCBz ZXFubyk7Ci0JaWYgKCFyZXQpCi0JCS8qIFdlIHVzZSBsYXN0X3JlYWRfcmVxIGJlY2F1c2Ugc3lu Y190bygpCi0JCSAqIG1pZ2h0IGhhdmUganVzdCBjYXVzZWQgc2Vxbm8gd3JhcCB1bmRlcgotCQkg KiB0aGUgcmFkYXIuCi0JCSAqLwotCQlmcm9tLT5zZW1hcGhvcmUuc3luY19zZXFub1tpZHhdID0K LQkJCQlpOTE1X2dlbV9yZXF1ZXN0X2dldF9zZXFubyhvYmotPmxhc3RfcmVhZF9yZXEpOworCWlm ICh0byA9PSBOVUxMKSB7CisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhv YmosIHJlYWRvbmx5KTsKKwl9IGVsc2UgaWYgKHJlYWRvbmx5KSB7CisJCXJldCA9IF9faTkxNV9n ZW1fb2JqZWN0X3N5bmMob2JqLCB0bywKKwkJCQkJICAgICBvYmotPmxhc3Rfd3JpdGVfcmVxKTsK Kwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykgeworCQkJ cmV0ID0gX19pOTE1X2dlbV9vYmplY3Rfc3luYyhvYmosIHRvLAorCQkJCQkJICAgICBvYmotPmxh c3RfcmVhZF9yZXFbaV0pOworCQkJaWYgKHJldCkKKwkJCQlicmVhazsKKwkJfQorCX0KIAogCXJl dHVybiByZXQ7CiB9CkBAIC0zMDQ0LDEwICszMTI2LDYgQEAgaW50IGk5MTVfdm1hX3VuYmluZChz dHJ1Y3QgaTkxNV92bWEgKnZtYSkKIAkvKiBTaW5jZSB0aGUgdW5ib3VuZCBsaXN0IGlzIGdsb2Jh bCwgb25seSBtb3ZlIHRvIHRoYXQgbGlzdCBpZgogCSAqIG5vIG1vcmUgVk1BcyBleGlzdC4gKi8K IAlpZiAobGlzdF9lbXB0eSgmb2JqLT52bWFfbGlzdCkpIHsKLQkJLyogVGhyb3cgYXdheSB0aGUg YWN0aXZlIHJlZmVyZW5jZSBiZWZvcmUKLQkJICogbW92aW5nIHRvIHRoZSB1bmJvdW5kIGxpc3Qu ICovCi0JCWk5MTVfZ2VtX29iamVjdF9yZXRpcmUob2JqKTsKLQogCQlpOTE1X2dlbV9ndHRfZmlu aXNoX29iamVjdChvYmopOwogCQlsaXN0X21vdmVfdGFpbCgmb2JqLT5nbG9iYWxfbGlzdCwgJmRl dl9wcml2LT5tbS51bmJvdW5kX2xpc3QpOwogCX0KQEAgLTM2NzgsOCArMzc1Niw2IEBAIGk5MTVf Z2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqLCBib29sIHdyaXRlKQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpOTE1X2dlbV9v YmplY3RfcmV0aXJlKG9iaik7Ci0KIAkvKiBGbHVzaCBhbmQgYWNxdWlyZSBvYmotPnBhZ2VzIHNv IHRoYXQgd2UgYXJlIGNvaGVyZW50IHRocm91Z2gKIAkgKiBkaXJlY3QgYWNjZXNzIGluIG1lbW9y eSB3aXRoIHByZXZpb3VzIGNhY2hlZCB3cml0ZXMgdGhyb3VnaAogCSAqIHNobWVtZnMgYW5kIHRo YXQgb3VyIGNhY2hlIGRvbWFpbiB0cmFja2luZyByZW1haW5zIHZhbGlkLgpAQCAtMzkwNCwxMSAr Mzk4MCw5IEBAIGk5MTVfZ2VtX29iamVjdF9waW5fdG9fZGlzcGxheV9wbGFuZShzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCWJvb2wgd2FzX3Bpbl9kaXNwbGF5OwogCWludCByZXQ7 CiAKLQlpZiAocGlwZWxpbmVkICE9IGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3Jpbmcob2JqLT5sYXN0 X3JlYWRfcmVxKSkgewotCQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc3luYyhvYmosIHBpcGVsaW5l ZCk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KKwlyZXQgPSBpOTE1X2dlbV9vYmpl Y3Rfc3luYyhvYmosIHBpcGVsaW5lZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCS8q IE1hcmsgdGhlIHBpbl9kaXNwbGF5IGVhcmx5IHNvIHRoYXQgd2UgYWNjb3VudCBmb3IgdGhlCiAJ ICogZGlzcGxheSBjb2hlcmVuY3kgd2hpbHN0IHNldHRpbmcgdXAgdGhlIGNhY2hlIGRvbWFpbnMu CkBAIC00MDA0LDcgKzQwNzgsNiBAQCBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2NwdV9kb21haW4o c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgYm9vbCB3cml0ZSkKIAlpZiAocmV0KQog CQlyZXR1cm4gcmV0OwogCi0JaTkxNV9nZW1fb2JqZWN0X3JldGlyZShvYmopOwogCWk5MTVfZ2Vt X29iamVjdF9mbHVzaF9ndHRfd3JpdGVfZG9tYWluKG9iaik7CiAKIAlvbGRfd3JpdGVfZG9tYWlu ID0gb2JqLT5iYXNlLndyaXRlX2RvbWFpbjsKQEAgLTQyOTcsMTUgKzQzNzAsMjQgQEAgaTkxNV9n ZW1fYnVzeV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCSAqIG5l Y2Vzc2FyeSBmbHVzaGVzIGhlcmUuCiAJICovCiAJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2ZsdXNo X2FjdGl2ZShvYmopOworCWlmIChyZXQpCisJCWdvdG8gdW5yZWY7CisKKwlhcmdzLT5idXN5ID0g MDsKKwlpZiAob2JqLT5hY3RpdmUpIHsKKwkJaW50IGk7CiAKLQlhcmdzLT5idXN5ID0gb2JqLT5h Y3RpdmU7Ci0JaWYgKG9iai0+bGFzdF9yZWFkX3JlcSkgewotCQlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpyaW5nOwogCQlCVUlMRF9CVUdfT04oSTkxNV9OVU1fUklOR1MgPiAxNik7Ci0JCXJpbmcg PSBpOTE1X2dlbV9yZXF1ZXN0X2dldF9yaW5nKG9iai0+bGFzdF9yZWFkX3JlcSk7Ci0JCWFyZ3Mt PmJ1c3kgfD0gaW50ZWxfcmluZ19mbGFnKHJpbmcpIDw8IDE2OworCisJCWZvciAoaSA9IDA7IGkg PCBJOTE1X05VTV9SSU5HUzsgaSsrKSB7CisJCQlpZiAob2JqLT5sYXN0X3JlYWRfcmVxW2ldID09 IE5VTEwpCisJCQkJY29udGludWU7CisKKwkJCWFyZ3MtPmJ1c3kgfD0gMSA8PCAoMTYgKyBpKSB8 IDE7CisJCX0KIAl9CiAKK3VucmVmOgogCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmot PmJhc2UpOwogdW5sb2NrOgogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwpAQCAt NDM3OSw4ICs0NDYxLDExIEBAIHVubG9jazoKIHZvaWQgaTkxNV9nZW1fb2JqZWN0X2luaXQoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCSAgY29uc3Qgc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3Rfb3BzICpvcHMpCiB7CisJaW50IGk7CisKIAlJTklUX0xJU1RfSEVBRCgmb2Jq LT5nbG9iYWxfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJm9iai0+cmluZ19saXN0KTsKKwlmb3Ig KGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoJm9iai0+ cmluZ19saXN0W2ldKTsKIAlJTklUX0xJU1RfSEVBRCgmb2JqLT5vYmpfZXhlY19saW5rKTsKIAlJ TklUX0xJU1RfSEVBRCgmb2JqLT52bWFfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJm9iai0+YmF0 Y2hfcG9vbF9saW5rKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2NvbnRleHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwppbmRl eCA3MDM0NmIwMDI4ZjkuLjMxODI2ZTdlOTA0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2NvbnRleHQuYwpAQCAtNjczLDggKzY3Myw2IEBAIHN0YXRpYyBpbnQgZG9fc3dpdGNoKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCiAJCSAqIHN3YXBwZWQsIGJ1dCB0aGVyZSBpcyBu byB3YXkgdG8gZG8gdGhhdCB5ZXQuCiAJCSAqLwogCQlmcm9tLT5sZWdhY3lfaHdfY3R4LnJjc19z dGF0ZS0+ZGlydHkgPSAxOwotCQlCVUdfT04oaTkxNV9nZW1fcmVxdWVzdF9nZXRfcmluZygKLQkJ CWZyb20tPmxlZ2FjeV9od19jdHgucmNzX3N0YXRlLT5sYXN0X3JlYWRfcmVxKSAhPSByaW5nKTsK IAogCQkvKiBvYmogaXMga2VwdCBhbGl2ZSB1bnRpbCB0aGUgbmV4dCByZXF1ZXN0IGJ5IGl0cyBh Y3RpdmUgcmVmICovCiAJCWk5MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluKGZyb20tPmxlZ2FjeV9o d19jdHgucmNzX3N0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2RlYnVnLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Zy5jCmluZGV4 IGY0NjJkMWI1MWQ5Ny4uZjFjZGRkYWRhMzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2RlYnVnLmMKQEAgLTM0LDgyICszNCw0NiBAQCBpbnQKIGk5MTVfdmVyaWZ5X2xpc3RzKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RhdGljIGludCB3YXJuZWQ7Ci0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CiAJc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nOwogCWludCBlcnIg PSAwOworCWludCBpOwogCiAJaWYgKHdhcm5lZCkKIAkJcmV0dXJuIDA7CiAKLQlsaXN0X2Zvcl9l YWNoX2VudHJ5KG9iaiwgJmRldl9wcml2LT5yZW5kZXJfcmluZy5hY3RpdmVfbGlzdCwgbGlzdCkg ewotCQlpZiAob2JqLT5iYXNlLmRldiAhPSBkZXYgfHwKLQkJICAgICFhdG9taWNfcmVhZCgmb2Jq LT5iYXNlLnJlZmNvdW50LnJlZmNvdW50KSkgewotCQkJRFJNX0VSUk9SKCJmcmVlZCByZW5kZXIg YWN0aXZlICVwXG4iLCBvYmopOwotCQkJZXJyKys7Ci0JCQlicmVhazsKLQkJfSBlbHNlIGlmICgh b2JqLT5hY3RpdmUgfHwKLQkJCSAgIChvYmotPmJhc2UucmVhZF9kb21haW5zICYgSTkxNV9HRU1f R1BVX0RPTUFJTlMpID09IDApIHsKLQkJCURSTV9FUlJPUigiaW52YWxpZCByZW5kZXIgYWN0aXZl ICVwIChhICVkIHIgJXgpXG4iLAotCQkJCSAgb2JqLAotCQkJCSAgb2JqLT5hY3RpdmUsCi0JCQkJ ICBvYmotPmJhc2UucmVhZF9kb21haW5zKTsKLQkJCWVycisrOwotCQl9IGVsc2UgaWYgKG9iai0+ YmFzZS53cml0ZV9kb21haW4gJiYgbGlzdF9lbXB0eSgmb2JqLT5ncHVfd3JpdGVfbGlzdCkpIHsK LQkJCURSTV9FUlJPUigiaW52YWxpZCByZW5kZXIgYWN0aXZlICVwICh3ICV4LCBnd2wgJWQpXG4i LAotCQkJCSAgb2JqLAotCQkJCSAgb2JqLT5iYXNlLndyaXRlX2RvbWFpbiwKLQkJCQkgICFsaXN0 X2VtcHR5KCZvYmotPmdwdV93cml0ZV9saXN0KSk7Ci0JCQllcnIrKzsKKwlmb3JfZWFjaF9yaW5n KHJpbmcsIGRldl9wcml2LCBpKSB7CisJCWlmIChsaXN0X2VtcHR5KCZyaW5nLT5yZXF1ZXN0X2xp c3QpKSB7CisJCQlpZiAoIWxpc3RfZW1wdHkoJnJpbmctPmFjdGl2ZV9saXN0KSkgeworCQkJCURS TV9FUlJPUigiJXM6IGFjdGl2ZSBsaXN0IG5vdCBlbXB0eSwgYnV0IG5vIHJlcXVlc3RzXG4iLCBy aW5nLT5uYW1lKTsKKwkJCQllcnIrKzsKKwkJCX0KKwkJCWNvbnRpbnVlOwogCQl9Ci0JfQotCi0J bGlzdF9mb3JfZWFjaF9lbnRyeShvYmosICZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCwgbGlz dCkgewotCQlpZiAob2JqLT5iYXNlLmRldiAhPSBkZXYgfHwKLQkJICAgICFhdG9taWNfcmVhZCgm b2JqLT5iYXNlLnJlZmNvdW50LnJlZmNvdW50KSkgewotCQkJRFJNX0VSUk9SKCJmcmVlZCBmbHVz aGluZyAlcFxuIiwgb2JqKTsKLQkJCWVycisrOwotCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAoIW9i ai0+YWN0aXZlIHx8Ci0JCQkgICAob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0dQ VV9ET01BSU5TKSA9PSAwIHx8Ci0JCQkgICBsaXN0X2VtcHR5KCZvYmotPmdwdV93cml0ZV9saXN0 KSkgewotCQkJRFJNX0VSUk9SKCJpbnZhbGlkIGZsdXNoaW5nICVwIChhICVkIHcgJXggZ3dsICVk KVxuIiwKLQkJCQkgIG9iaiwKLQkJCQkgIG9iai0+YWN0aXZlLAotCQkJCSAgb2JqLT5iYXNlLndy aXRlX2RvbWFpbiwKLQkJCQkgICFsaXN0X2VtcHR5KCZvYmotPmdwdV93cml0ZV9saXN0KSk7Ci0J CQllcnIrKzsKLQkJfQotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCAmZGV2X3ByaXYt Pm1tLmdwdV93cml0ZV9saXN0LCBncHVfd3JpdGVfbGlzdCkgewotCQlpZiAob2JqLT5iYXNlLmRl diAhPSBkZXYgfHwKLQkJICAgICFhdG9taWNfcmVhZCgmb2JqLT5iYXNlLnJlZmNvdW50LnJlZmNv dW50KSkgewotCQkJRFJNX0VSUk9SKCJmcmVlZCBncHUgd3JpdGUgJXBcbiIsIG9iaik7Ci0JCQll cnIrKzsKLQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKCFvYmotPmFjdGl2ZSB8fAotCQkJICAgKG9i ai0+YmFzZS53cml0ZV9kb21haW4gJiBJOTE1X0dFTV9HUFVfRE9NQUlOUykgPT0gMCkgewotCQkJ RFJNX0VSUk9SKCJpbnZhbGlkIGdwdSB3cml0ZSAlcCAoYSAlZCB3ICV4KVxuIiwKLQkJCQkgIG9i aiwKLQkJCQkgIG9iai0+YWN0aXZlLAotCQkJCSAgb2JqLT5iYXNlLndyaXRlX2RvbWFpbik7Ci0J CQllcnIrKzsKLQkJfQotCX0KIAotCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCAmaTkxNV9ndHRf dm0tPmluYWN0aXZlX2xpc3QsIGxpc3QpIHsKLQkJaWYgKG9iai0+YmFzZS5kZXYgIT0gZGV2IHx8 Ci0JCSAgICAhYXRvbWljX3JlYWQoJm9iai0+YmFzZS5yZWZjb3VudC5yZWZjb3VudCkpIHsKLQkJ CURSTV9FUlJPUigiZnJlZWQgaW5hY3RpdmUgJXBcbiIsIG9iaik7Ci0JCQllcnIrKzsKLQkJCWJy ZWFrOwotCQl9IGVsc2UgaWYgKG9iai0+cGluX2NvdW50IHx8IG9iai0+YWN0aXZlIHx8Ci0JCQkg ICAob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0dQVV9ET01BSU5TKSkgewotCQkJ RFJNX0VSUk9SKCJpbnZhbGlkIGluYWN0aXZlICVwIChwICVkIGEgJWQgdyAleClcbiIsCi0JCQkJ ICBvYmosCi0JCQkJICBvYmotPnBpbl9jb3VudCwgb2JqLT5hY3RpdmUsCi0JCQkJICBvYmotPmJh c2Uud3JpdGVfZG9tYWluKTsKLQkJCWVycisrOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwg JnJpbmctPmFjdGl2ZV9saXN0LCByaW5nX2xpc3RbcmluZy0+aWRdKSB7CisJCQlpZiAob2JqLT5i YXNlLmRldiAhPSBkZXYgfHwKKwkJCSAgICAhYXRvbWljX3JlYWQoJm9iai0+YmFzZS5yZWZjb3Vu dC5yZWZjb3VudCkpIHsKKwkJCQlEUk1fRVJST1IoIiVzOiBmcmVlZCBhY3RpdmUgb2JqICVwXG4i LAorCQkJCQkgIHJpbmctPm5hbWUsIG9iaik7CisJCQkJZXJyKys7CisJCQkJYnJlYWs7CisJCQl9 IGVsc2UgaWYgKCFvYmotPmFjdGl2ZSB8fAorCQkJCSAgIG9iai0+bGFzdF9yZWFkX3JlcVtyaW5n LT5pZF0gPT0gTlVMTCkgeworCQkJCURSTV9FUlJPUigiJXM6IGludmFsaWQgYWN0aXZlIG9iaiAl cFxuIiwKKwkJCQkJICByaW5nLT5uYW1lLCBvYmopOworCQkJCWVycisrOworCQkJfSBlbHNlIGlm IChvYmotPmJhc2Uud3JpdGVfZG9tYWluKSB7CisJCQkJRFJNX0VSUk9SKCIlczogaW52YWxpZCB3 cml0ZSBvYmogJXAgKHcgJXgpXG4iLAorCQkJCQkgIHJpbmctPm5hbWUsCisJCQkJCSAgb2JqLCBv YmotPmJhc2Uud3JpdGVfZG9tYWluKTsKKwkJCQllcnIrKzsKKwkJCX0gZWxzZSBpZiAobGlzdF9l bXB0eSgmb2JqLT5sYXN0X3JlYWRfcmVxW3JpbmctPmlkXS0+bGlzdCkpIHsKKwkJCQlEUk1fRVJS T1IoIiVzOiBpbnZhbGlkIHJlcXVlc3QgZm9yIG9iaiAlcFxuIiwKKwkJCQkJICByaW5nLT5uYW1l LCBvYmopOworCQkJCWVycisrOworCQkJfQogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9ncHVfZXJyb3IuYwppbmRleCBhOTgyODQ5YTVlZGQuLmZhNWQ1M2YxMjQwZiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jCkBAIC0xOTIsMTUgKzE5MiwyMCBAQCBzdGF0aWMg dm9pZCBwcmludF9lcnJvcl9idWZmZXJzKHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZV9idWYg Km0sCiAJCQkJc3RydWN0IGRybV9pOTE1X2Vycm9yX2J1ZmZlciAqZXJyLAogCQkJCWludCBjb3Vu dCkKIHsKKwlpbnQgaTsKKwogCWVycl9wcmludGYobSwgIiAgJXMgWyVkXTpcbiIsIG5hbWUsIGNv dW50KTsKIAogCXdoaWxlIChjb3VudC0tKSB7Ci0JCWVycl9wcmludGYobSwgIiAgICAlMDh4ICU4 dSAlMDJ4ICUwMnggJXggJXgiLAorCQllcnJfcHJpbnRmKG0sICIgICAgJTA4eCAlOHUgJTAyeCAl MDJ4IFsgIiwKIAkJCSAgIGVyci0+Z3R0X29mZnNldCwKIAkJCSAgIGVyci0+c2l6ZSwKIAkJCSAg IGVyci0+cmVhZF9kb21haW5zLAotCQkJICAgZXJyLT53cml0ZV9kb21haW4sCi0JCQkgICBlcnIt PnJzZXFubywgZXJyLT53c2Vxbm8pOworCQkJICAgZXJyLT53cml0ZV9kb21haW4pOworCQlmb3Ig KGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykKKwkJCWVycl9wcmludGYobSwgIiUwMngg IiwgZXJyLT5yc2Vxbm9baV0pOworCisJCWVycl9wcmludGYobSwgIl0gJTAyeCIsIGVyci0+d3Nl cW5vKTsKIAkJZXJyX3B1dHMobSwgcGluX2ZsYWcoZXJyLT5waW5uZWQpKTsKIAkJZXJyX3B1dHMo bSwgdGlsaW5nX2ZsYWcoZXJyLT50aWxpbmcpKTsKIAkJZXJyX3B1dHMobSwgZGlydHlfZmxhZyhl cnItPmRpcnR5KSk7CkBAIC02NjcsMTAgKzY3MiwxMiBAQCBzdGF0aWMgdm9pZCBjYXB0dXJlX2Jv KHN0cnVjdCBkcm1faTkxNV9lcnJvcl9idWZmZXIgKmVyciwKIAkJICAgICAgIHN0cnVjdCBpOTE1 X3ZtYSAqdm1hKQogewogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSB2bWEtPm9i ajsKKwlpbnQgaTsKIAogCWVyci0+c2l6ZSA9IG9iai0+YmFzZS5zaXplOwogCWVyci0+bmFtZSA9 IG9iai0+YmFzZS5uYW1lOwotCWVyci0+cnNlcW5vID0gaTkxNV9nZW1fcmVxdWVzdF9nZXRfc2Vx bm8ob2JqLT5sYXN0X3JlYWRfcmVxKTsKKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7 IGkrKykKKwkJZXJyLT5yc2Vxbm9baV0gPSBpOTE1X2dlbV9yZXF1ZXN0X2dldF9zZXFubyhvYmot Pmxhc3RfcmVhZF9yZXFbaV0pOwogCWVyci0+d3NlcW5vID0gaTkxNV9nZW1fcmVxdWVzdF9nZXRf c2Vxbm8ob2JqLT5sYXN0X3dyaXRlX3JlcSk7CiAJZXJyLT5ndHRfb2Zmc2V0ID0gdm1hLT5ub2Rl LnN0YXJ0OwogCWVyci0+cmVhZF9kb21haW5zID0gb2JqLT5iYXNlLnJlYWRfZG9tYWluczsKQEAg LTY4Myw4ICs2OTAsOCBAQCBzdGF0aWMgdm9pZCBjYXB0dXJlX2JvKHN0cnVjdCBkcm1faTkxNV9l cnJvcl9idWZmZXIgKmVyciwKIAllcnItPmRpcnR5ID0gb2JqLT5kaXJ0eTsKIAllcnItPnB1cmdl YWJsZSA9IG9iai0+bWFkdiAhPSBJOTE1X01BRFZfV0lMTE5FRUQ7CiAJZXJyLT51c2VycHRyID0g b2JqLT51c2VycHRyLm1tICE9IE5VTEw7Ci0JZXJyLT5yaW5nID0gb2JqLT5sYXN0X3JlYWRfcmVx ID8KLQkJCWk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3Jpbmcob2JqLT5sYXN0X3JlYWRfcmVxKS0+aWQg OiAtMTsKKwllcnItPnJpbmcgPSBvYmotPmxhc3Rfd3JpdGVfcmVxID8KKwkJCWk5MTVfZ2VtX3Jl cXVlc3RfZ2V0X3Jpbmcob2JqLT5sYXN0X3dyaXRlX3JlcSktPmlkIDogLTE7CiAJZXJyLT5jYWNo ZV9sZXZlbCA9IG9iai0+Y2FjaGVfbGV2ZWw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rp c3BsYXkuYwppbmRleCAwZWZiMTlhOWI5YTUuLjFhMzc1NmU2YmVhNCAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtOTY3NCw3ICs5Njc0LDcgQEAgc3RhdGljIGJvb2wgdXNl X21taW9fZmxpcChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAogCWVsc2UgaWYgKGk5MTUu ZW5hYmxlX2V4ZWNsaXN0cykKIAkJcmV0dXJuIHRydWU7CiAJZWxzZQotCQlyZXR1cm4gcmluZyAh PSBpOTE1X2dlbV9yZXF1ZXN0X2dldF9yaW5nKG9iai0+bGFzdF9yZWFkX3JlcSk7CisJCXJldHVy biByaW5nICE9IGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3Jpbmcob2JqLT5sYXN0X3dyaXRlX3JlcSk7 CiB9CiAKIHN0YXRpYyB2b2lkIHNrbF9kb19tbWlvX2ZsaXAoc3RydWN0IGludGVsX2NydGMgKmlu dGVsX2NydGMpCkBAIC05OTc3LDcgKzk5NzcsNyBAQCBzdGF0aWMgaW50IGludGVsX2NydGNfcGFn ZV9mbGlwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAl9IGVsc2UgaWYgKElTX0lWWUJSSURHRShk ZXYpIHx8IElTX0hBU1dFTEwoZGV2KSkgewogCQlyaW5nID0gJmRldl9wcml2LT5yaW5nW0JDU107 CiAJfSBlbHNlIGlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA3KSB7Ci0JCXJpbmcgPSBpOTE1 X2dlbV9yZXF1ZXN0X2dldF9yaW5nKG9iai0+bGFzdF9yZWFkX3JlcSk7CisJCXJpbmcgPSBpOTE1 X2dlbV9yZXF1ZXN0X2dldF9yaW5nKG9iai0+bGFzdF93cml0ZV9yZXEpOwogCQlpZiAocmluZyA9 PSBOVUxMIHx8IHJpbmctPmlkICE9IFJDUykKIAkJCXJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbQkNT XTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmlu Z2J1ZmZlci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCmluZGV4 IDFkMDhkOGY5MTQ5ZC4uYTRhMjVjOTMyYjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cmluZ2J1ZmZlci5oCkBAIC0xMjksNiArMTI5LDcgQEAgc3RydWN0ICBpbnRlbF9lbmdpbmVfY3Mg ewogCQlWQ1MyCiAJfSBpZDsKICNkZWZpbmUgSTkxNV9OVU1fUklOR1MgNQorI2RlZmluZSBJOTE1 X01BWF9SSU5HX0JJVCAzCiAjZGVmaW5lIExBU1RfVVNFUl9SSU5HIChWRUNTICsgMSkKIAl1MzIJ CW1taW9fYmFzZTsKIAlzdHJ1Y3QJCWRybV9kZXZpY2UgKmRldjsKLS0gCjIuMS40CgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=