From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH v3] drm/i915: Implement inter-engine read-read optimisations Date: Tue, 17 Mar 2015 10:11:17 +0000 Message-ID: <1426587077-18122-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 4A84D6E1E9 for ; Tue, 17 Mar 2015 03:11:28 -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 cnJheSBhZnRlciB3YWl0cwoKQmVuY2htYXJrOiBpZ3QvZ2VtX3JlYWRfcmVhZF9zcGVlZApoc3c6 Z3QzZSAod2l0aCBzZW1hcGhvcmVzKToKQmVmb3JlOiBUaW1lIHRvIHJlYWQtcmVhZCAxMDI0azoJ CTI3NS43OTTCtXMKQWZ0ZXI6ICBUaW1lIHRvIHJlYWQtcmVhZCAxMDI0azoJCTEyMy4yNjDCtXMK CmhzdzpndDNlICh3L28gc2VtYXBob3Jlcyk6CkJlZm9yZTogVGltZSB0byByZWFkLXJlYWQgMTAy NGs6CQkyMzAuNDMzwrVzCkFmdGVyOiAgVGltZSB0byByZWFkLXJlYWQgMTAyNGs6CQkxMjQuNTkz wrVzCgpUZXN0Y2FzZTogaWd0L2dlbV9jb25jdXJyZW50X2JsaXQKQ2M6IExpb25lbCBMYW5kd2Vy bGluIDxsaW9uZWwuZy5sYW5kd2VybGluQGxpbnV4LmludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTog Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Ci0tLQogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgICAgIHwgIDE2ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oICAgICAgICAgfCAgMTEgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmMgICAgICAgICB8IDM1OSArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jIHwgICAyIC0KIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMgICB8ICAxOSArLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZGlzcGxheS5jICAgIHwgICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9yaW5nYnVmZmVyLmggfCAgIDEgKwogNyBmaWxlcyBjaGFuZ2VkLCAyMzYgaW5zZXJ0aW9ucygr KSwgMTc2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKaW5kZXgg YWQ0ZmMyYmY3MGI2Li5hYWNhZGE4NGI1MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdm cy5jCkBAIC0xMjAsMTAgKzEyMCwxMyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmdldF9n bG9iYWxfZmxhZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogc3RhdGljIHZvaWQK IGRlc2NyaWJlX29iaihzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmopCiB7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShvYmotPmJhc2UuZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nOwogCXN0cnVj dCBpOTE1X3ZtYSAqdm1hOwogCWludCBwaW5fY291bnQgPSAwOworCWludCBpOwogCi0Jc2VxX3By aW50ZihtLCAiJXBLOiAlcyVzJXMlcyAlOHpkS2lCICUwMnggJTAyeCAleCAleCAleCVzJXMlcyIs CisJc2VxX3ByaW50ZihtLCAiJXBLOiAlcyVzJXMlcyAlOHpkS2lCICUwMnggJTAyeCBbICIsCiAJ CSAgICZvYmotPmJhc2UsCiAJCSAgIG9iai0+YWN0aXZlID8gIioiIDogIiAiLAogCQkgICBnZXRf cGluX2ZsYWcob2JqKSwKQEAgLTEzMSw4ICsxMzQsMTEgQEAgZGVzY3JpYmVfb2JqKHN0cnVjdCBz ZXFfZmlsZSAqbSwgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIAkJICAgZ2V0X2ds b2JhbF9mbGFnKG9iaiksCiAJCSAgIG9iai0+YmFzZS5zaXplIC8gMTAyNCwKIAkJICAgb2JqLT5i YXNlLnJlYWRfZG9tYWlucywKLQkJICAgb2JqLT5iYXNlLndyaXRlX2RvbWFpbiwKLQkJICAgaTkx NV9nZW1fcmVxdWVzdF9nZXRfc2Vxbm8ob2JqLT5sYXN0X3JlYWRfcmVxKSwKKwkJICAgb2JqLT5i YXNlLndyaXRlX2RvbWFpbik7CisJZm9yX2VhY2hfcmluZyhyaW5nLCBkZXZfcHJpdiwgaSkKKwkJ c2VxX3ByaW50ZihtLCAiJXggIiwKKwkJCQlpOTE1X2dlbV9yZXF1ZXN0X2dldF9zZXFubyhvYmot Pmxhc3RfcmVhZF9yZXFbaV0pKTsKKwlzZXFfcHJpbnRmKG0sICJdICV4ICV4JXMlcyVzIiwKIAkJ ICAgaTkxNV9nZW1fcmVxdWVzdF9nZXRfc2Vxbm8ob2JqLT5sYXN0X3dyaXRlX3JlcSksCiAJCSAg IGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3NlcW5vKG9iai0+bGFzdF9mZW5jZWRfcmVxKSwKIAkJICAg aTkxNV9jYWNoZV9sZXZlbF9zdHIodG9faTkxNShvYmotPmJhc2UuZGV2KSwgb2JqLT5jYWNoZV9s ZXZlbCksCkBAIC0xNjksOSArMTc1LDkgQEAgZGVzY3JpYmVfb2JqKHN0cnVjdCBzZXFfZmlsZSAq bSwgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIAkJKnQgPSAnXDAnOwogCQlzZXFf cHJpbnRmKG0sICIgKCVzIG1hcHBhYmxlKSIsIHMpOwogCX0KLQlpZiAob2JqLT5sYXN0X3JlYWRf cmVxICE9IE5VTEwpCisJaWYgKG9iai0+bGFzdF93cml0ZV9yZXEgIT0gTlVMTCkKIAkJc2VxX3By aW50ZihtLCAiICglcykiLAotCQkJICAgaTkxNV9nZW1fcmVxdWVzdF9nZXRfcmluZyhvYmotPmxh c3RfcmVhZF9yZXEpLT5uYW1lKTsKKwkJCSAgIGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3Jpbmcob2Jq LT5sYXN0X3dyaXRlX3JlcSktPm5hbWUpOwogCWlmIChvYmotPmZyb250YnVmZmVyX2JpdHMpCiAJ CXNlcV9wcmludGYobSwgIiAoZnJvbnRidWZmZXI6IDB4JTAzeCkiLCBvYmotPmZyb250YnVmZmVy X2JpdHMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggYTBmNzc4NGJlNTg5Li5hNWZh ZjY2OWY3YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtNDk4LDcgKzQ5OCw3IEBAIHN0 cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZSB7CiAJc3RydWN0IGRybV9pOTE1X2Vycm9yX2J1ZmZl ciB7CiAJCXUzMiBzaXplOwogCQl1MzIgbmFtZTsKLQkJdTMyIHJzZXFubywgd3NlcW5vOworCQl1 MzIgcnNlcW5vW0k5MTVfTlVNX1JJTkdTXSwgd3NlcW5vOwogCQl1MzIgZ3R0X29mZnNldDsKIAkJ dTMyIHJlYWRfZG9tYWluczsKIAkJdTMyIHdyaXRlX2RvbWFpbjsKQEAgLTE5MDMsNyArMTkwMyw3 IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0IHsKIAlzdHJ1Y3QgZHJtX21tX25vZGUgKnN0 b2xlbjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGdsb2JhbF9saXN0OwogCi0Jc3RydWN0IGxpc3RfaGVh ZCByaW5nX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCByaW5nX2xpc3RbSTkxNV9OVU1fUklOR1Nd OwogCS8qKiBVc2VkIGluIGV4ZWNidWYgdG8gdGVtcG9yYXJpbHkgaG9sZCBhIHJlZiAqLwogCXN0 cnVjdCBsaXN0X2hlYWQgb2JqX2V4ZWNfbGluazsKIApAQCAtMTkxNCw3ICsxOTE0LDcgQEAgc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgewogCSAqIHJlbmRlcmluZyBhbmQgc28gYSBub24temVy byBzZXFubyksIGFuZCBpcyBub3Qgc2V0IGlmIGl0IGkgcyBvbgogCSAqIGluYWN0aXZlIChyZWFk eSB0byBiZSB1bmJvdW5kKSBsaXN0LgogCSAqLwotCXVuc2lnbmVkIGludCBhY3RpdmU6MTsKKwl1 bnNpZ25lZCBpbnQgYWN0aXZlOkk5MTVfTUFYX1JJTkdfQklUOwogCiAJLyoqCiAJICogVGhpcyBp cyBzZXQgaWYgdGhlIG9iamVjdCBoYXMgYmVlbiB3cml0dGVuIHRvIHNpbmNlIGxhc3QgYm91bmQK QEAgLTE5ODYsNyArMTk4Niw3IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0IHsKIAlpbnQg dm1hcHBpbmdfY291bnQ7CiAKIAkvKiogQnJlYWRjcnVtYiBvZiBsYXN0IHJlbmRlcmluZyB0byB0 aGUgYnVmZmVyLiAqLwotCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqbGFzdF9yZWFkX3Jl cTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKmxhc3RfcmVhZF9yZXFbSTkxNV9OVU1f UklOR1NdOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqbGFzdF93cml0ZV9yZXE7CiAJ LyoqIEJyZWFkY3J1bWIgb2YgbGFzdCBmZW5jZWQgR1BVIGFjY2VzcyB0byB0aGUgYnVmZmVyLiAq LwogCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqbGFzdF9mZW5jZWRfcmVxOwpAQCAtMjEy NCwxMCArMjEyNCwxMSBAQCBpOTE1X2dlbV9yZXF1ZXN0X2dldF9yaW5nKHN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcmVxKQogCXJldHVybiByZXEgPyByZXEtPnJpbmcgOiBOVUxMOwogfQog Ci1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRybV9pOTE1X2dlbV9y ZXF1ZXN0ICoKIGk5MTVfZ2VtX3JlcXVlc3RfcmVmZXJlbmNlKHN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcmVxKQogewogCWtyZWZfZ2V0KCZyZXEtPnJlZik7CisJcmV0dXJuIHJlcTsKIH0K IAogc3RhdGljIGlubGluZSB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCA5Y2FlN2M3 Y2Q1NjIuLjE2YTY0YmY5NTNhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC00MSwxMiAr NDEsMTIgQEAKIAogc3RhdGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2d0dF93cml0ZV9k b21haW4oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CiBzdGF0aWMgdm9pZCBpOTE1 X2dlbV9vYmplY3RfZmx1c2hfY3B1X3dyaXRlX2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqKTsKK3N0YXRpYyB2b2lkCitpOTE1X2dlbV9vYmplY3RfbW92ZV90b19pbmFjdGl2 ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCSBpbnQgcmluZyk7CiBzdGF0 aWMgX19tdXN0X2NoZWNrIGludAogaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkgICAgICAgYm9vbCByZWFkb25seSk7Ci1z dGF0aWMgdm9pZAotaTkxNV9nZW1fb2JqZWN0X3JldGlyZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqKTsKLQogc3RhdGljIHZvaWQgaTkxNV9nZW1fd3JpdGVfZmVuY2Uoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgaW50IHJlZywKIAkJCQkgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaik7CiBzdGF0aWMgdm9pZCBpOTE1X2dlbV9vYmplY3RfdXBkYXRlX2ZlbmNlKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCkBAIC01MjgsOCArNTI4LDYgQEAgaW50IGk5MTVfZ2Vt X29ial9wcmVwYXJlX3NobWVtX3JlYWQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwK IAkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaiwgdHJ1ZSk7CiAJCWlm IChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCi0JCWk5MTVfZ2VtX29iamVjdF9yZXRpcmUob2JqKTsK IAl9CiAKIAlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKG9iaik7CkBAIC05NDksOCAr OTQ3LDYgQEAgaTkxNV9nZW1fc2htZW1fcHdyaXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJ CXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmosIGZhbHNlKTsKIAkJaWYg KHJldCkKIAkJCXJldHVybiByZXQ7Ci0KLQkJaTkxNV9nZW1fb2JqZWN0X3JldGlyZShvYmopOwog CX0KIAkvKiBTYW1lIHRyaWNrIGFwcGxpZXMgdG8gaW52YWxpZGF0ZSBwYXJ0aWFsbHkgd3JpdHRl biBjYWNoZWxpbmVzIHJlYWQKIAkgKiBiZWZvcmUgd3JpdGluZy4gKi8KQEAgLTEzODksMjQgKzEz ODUsNiBAQCBpOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJl cSkKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50Ci1pOTE1X2dlbV9vYmplY3Rfd2FpdF9y ZW5kZXJpbmdfX3RhaWwoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLQlpZiAo IW9iai0+YWN0aXZlKQotCQlyZXR1cm4gMDsKLQotCS8qIE1hbnVhbGx5IG1hbmFnZSB0aGUgd3Jp dGUgZmx1c2ggYXMgd2UgbWF5IGhhdmUgbm90IHlldAotCSAqIHJldGlyZWQgdGhlIGJ1ZmZlci4K LQkgKgotCSAqIE5vdGUgdGhhdCB0aGUgbGFzdF93cml0ZV9yZXEgaXMgYWx3YXlzIHRoZSBlYXJs aWVyIG9mCi0JICogdGhlIHR3byAocmVhZC93cml0ZSkgcmVxdWVzdHMsIHNvIGlmIHdlIGhhdmVk IHN1Y2Nlc3NmdWxseSB3YWl0ZWQsCi0JICogd2Uga25vdyB3ZSBoYXZlIHBhc3NlZCB0aGUgbGFz dCB3cml0ZS4KLQkgKi8KLQlpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbigmb2JqLT5sYXN0X3dyaXRl X3JlcSwgTlVMTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoqCiAgKiBFbnN1cmVzIHRoYXQgYWxs IHJlbmRlcmluZyB0byB0aGUgb2JqZWN0IGhhcyBjb21wbGV0ZWQgYW5kIHRoZSBvYmplY3QgaXMK ICAqIHNhZmUgdG8gdW5iaW5kIGZyb20gdGhlIEdUVCBvciBhY2Nlc3MgZnJvbSB0aGUgQ1BVLgpA QCAtMTQxNSwxOCArMTM5MywzOCBAQCBzdGF0aWMgX19tdXN0X2NoZWNrIGludAogaTkxNV9nZW1f b2JqZWN0X3dhaXRfcmVuZGVyaW5nKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJ CQkgICAgICAgYm9vbCByZWFkb25seSkKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qg KnJlcTsKLQlpbnQgcmV0OworCWludCByZXQsIGk7CiAKLQlyZXEgPSByZWFkb25seSA/IG9iai0+ bGFzdF93cml0ZV9yZXEgOiBvYmotPmxhc3RfcmVhZF9yZXE7Ci0JaWYgKCFyZXEpCisJaWYgKCFv YmotPmFjdGl2ZSkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBpOTE1X3dhaXRfcmVxdWVzdChyZXEp OwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJaWYgKHJlYWRvbmx5KSB7CisJCWlmIChvYmot Pmxhc3Rfd3JpdGVfcmVxICE9IE5VTEwpIHsKKwkJCXJldCA9IGk5MTVfd2FpdF9yZXF1ZXN0KG9i ai0+bGFzdF93cml0ZV9yZXEpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCisJCQlp ID0gb2JqLT5sYXN0X3dyaXRlX3JlcS0+cmluZy0+aWQ7CisJCQlpZiAob2JqLT5sYXN0X3JlYWRf cmVxW2ldID09IG9iai0+bGFzdF93cml0ZV9yZXEpCisJCQkJaTkxNV9nZW1fb2JqZWN0X21vdmVf dG9faW5hY3RpdmUob2JqLCBpKTsKKworCQkJaTkxNV9nZW1fcmVxdWVzdF9hc3NpZ24oJm9iai0+ bGFzdF93cml0ZV9yZXEsIE5VTEwpOworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8 IEk5MTVfTlVNX1JJTkdTOyBpKyspIHsKKwkJCWlmIChvYmotPmxhc3RfcmVhZF9yZXFbaV0gPT0g TlVMTCkKKwkJCQljb250aW51ZTsKKworCQkJcmV0ID0gaTkxNV93YWl0X3JlcXVlc3Qob2JqLT5s YXN0X3JlYWRfcmVxW2ldKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKworCQkJaTkx NV9nZW1fb2JqZWN0X21vdmVfdG9faW5hY3RpdmUob2JqLCBpKTsKKwkJfQorCX0KKworCXJldHVy biAwOwogCi0JcmV0dXJuIGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZ19fdGFpbChvYmop OwogfQogCiAvKiBBIG5vbmJsb2NraW5nIHZhcmlhbnQgb2YgdGhlIGFib3ZlIHdhaXQuIFRoaXMg aXMgYSBoaWdobHkgZGFuZ2Vyb3VzIHJvdXRpbmUKQEAgLTE0MzcsMzcgKzE0MzUsNzEgQEAgaTkx NV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nX19ub25ibG9ja2luZyhzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLAogCQkJCQkgICAgc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAq ZmlsZV9wcml2LAogCQkJCQkgICAgYm9vbCByZWFkb25seSkKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRl djsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl OworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdHNbSTkxNV9OVU1fUklOR1Nd OwogCXVuc2lnbmVkIHJlc2V0X2NvdW50ZXI7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBpLCBuID0g MDsKIAogCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkZXYtPnN0cnVjdF9tdXRleCkpOwogCUJV R19PTighZGV2X3ByaXYtPm1tLmludGVycnVwdGlibGUpOwogCi0JcmVxID0gcmVhZG9ubHkgPyBv YmotPmxhc3Rfd3JpdGVfcmVxIDogb2JqLT5sYXN0X3JlYWRfcmVxOwotCWlmICghcmVxKQorCWlm ICghb2JqLT5hY3RpdmUpCiAJCXJldHVybiAwOwogCiAJcmV0ID0gaTkxNV9nZW1fY2hlY2tfd2Vk Z2UoJmRldl9wcml2LT5ncHVfZXJyb3IsIHRydWUpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7 CiAKLQlyZXQgPSBpOTE1X2dlbV9jaGVja19vbHIocmVxKTsKLQlpZiAocmV0KQotCQlyZXR1cm4g cmV0OwotCiAJcmVzZXRfY291bnRlciA9IGF0b21pY19yZWFkKCZkZXZfcHJpdi0+Z3B1X2Vycm9y LnJlc2V0X2NvdW50ZXIpOwotCWk5MTVfZ2VtX3JlcXVlc3RfcmVmZXJlbmNlKHJlcSk7CisKKwlp ZiAocmVhZG9ubHkpIHsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycTsKKworCQly cSA9IG9iai0+bGFzdF93cml0ZV9yZXE7CisJCWlmIChycSA9PSBOVUxMKQorCQkJcmV0dXJuIDA7 CisKKwkJcmV0ID0gaTkxNV9nZW1fY2hlY2tfb2xyKHJxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8g ZXJyOworCisJCXJlcXVlc3RzW24rK10gPSBpOTE1X2dlbV9yZXF1ZXN0X3JlZmVyZW5jZShycSk7 CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX1JJTkdTOyBpKyspIHsKKwkJ CXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnE7CisKKwkJCXJxID0gb2JqLT5sYXN0X3Jl YWRfcmVxW2ldOworCQkJaWYgKHJxID09IE5VTEwpCisJCQkJY29udGludWU7CisKKwkJCXJldCA9 IGk5MTVfZ2VtX2NoZWNrX29scihycSk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyOworCisJ CQlyZXF1ZXN0c1tuKytdID0gaTkxNV9nZW1fcmVxdWVzdF9yZWZlcmVuY2UocnEpOworCQl9CisJ fQorCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JcmV0ID0gX19pOTE1X3dh aXRfcmVxdWVzdChyZXEsIHJlc2V0X2NvdW50ZXIsIHRydWUsIE5VTEwsIGZpbGVfcHJpdik7CisJ Zm9yIChpID0gMDsgcmV0ID09IDAgJiYgaSA8IG47IGkrKykKKwkJcmV0ID0gX19pOTE1X3dhaXRf cmVxdWVzdChyZXF1ZXN0c1tpXSwgcmVzZXRfY291bnRlciwgdHJ1ZSwKKwkJCQkJICBOVUxMLCBm aWxlX3ByaXYpOwogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlpOTE1X2dlbV9y ZXF1ZXN0X3VucmVmZXJlbmNlKHJlcSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKIAotCXJl dHVybiBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmdfX3RhaWwob2JqKTsKK2VycjoKKwlm b3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWlmIChyZXQgPT0gMCkgeworCQkJaW50IHJpbmcg PSByZXF1ZXN0c1tpXS0+cmluZy0+aWQ7CisJCQlpZiAob2JqLT5sYXN0X3JlYWRfcmVxW3Jpbmdd ID09IHJlcXVlc3RzW2ldKQorCQkJCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2luYWN0aXZlKG9i aiwgcmluZyk7CisJCQlpZiAob2JqLT5sYXN0X3dyaXRlX3JlcSA9PSByZXF1ZXN0c1tpXSkKKwkJ CQlpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbigmb2JqLT5sYXN0X3dyaXRlX3JlcSwgTlVMTCk7CisJ CX0KKwkJaTkxNV9nZW1fcmVxdWVzdF91bnJlZmVyZW5jZShyZXF1ZXN0c1tpXSk7CisJfQorCisJ cmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC0yMzAzLDQ5ICsyMzM1LDQ0IEBAIGk5MTVfZ2VtX29i amVjdF9nZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIAlyZXR1cm4g MDsKIH0KIAotc3RhdGljIHZvaWQKLWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2FjdGl2ZShzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAotCQkJICAgICAgIHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKnJpbmcpCit2b2lkIGk5MTVfdm1hX21vdmVfdG9fYWN0aXZlKHN0cnVjdCBpOTE1X3Zt YSAqdm1hLAorCQkJICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQogewotCXN0cnVj dCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxOwotCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKm9s ZF9yaW5nOwotCi0JQlVHX09OKHJpbmcgPT0gTlVMTCk7Ci0KLQlyZXEgPSBpbnRlbF9yaW5nX2dl dF9yZXF1ZXN0KHJpbmcpOwotCW9sZF9yaW5nID0gaTkxNV9nZW1fcmVxdWVzdF9nZXRfcmluZyhv YmotPmxhc3RfcmVhZF9yZXEpOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSB2 bWEtPm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSA9IGludGVsX3Jpbmdf Z2V0X3JlcXVlc3QocmluZyk7CiAKLQlpZiAob2xkX3JpbmcgIT0gcmluZyAmJiBvYmotPmxhc3Rf d3JpdGVfcmVxKSB7Ci0JCS8qIEtlZXAgdGhlIHJlcXVlc3QgcmVsYXRpdmUgdG8gdGhlIGN1cnJl bnQgcmluZyAqLwotCQlpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbigmb2JqLT5sYXN0X3dyaXRlX3Jl cSwgcmVxKTsKLQl9CisJbGlzdF9tb3ZlX3RhaWwoJnZtYS0+bW1fbGlzdCwgJnZtYS0+dm0tPmFj dGl2ZV9saXN0KTsKIAogCS8qIEFkZCBhIHJlZmVyZW5jZSBpZiB3ZSdyZSBuZXdseSBlbnRlcmlu ZyB0aGUgYWN0aXZlIGxpc3QuICovCi0JaWYgKCFvYmotPmFjdGl2ZSkgeworCWlmIChvYmotPmxh c3RfcmVhZF9yZXFbcmluZy0+aWRdID09IE5VTEwgJiYgb2JqLT5hY3RpdmUrKyA9PSAwKQogCQlk cm1fZ2VtX29iamVjdF9yZWZlcmVuY2UoJm9iai0+YmFzZSk7Ci0JCW9iai0+YWN0aXZlID0gMTsK LQl9Ci0KLQlsaXN0X21vdmVfdGFpbCgmb2JqLT5yaW5nX2xpc3QsICZyaW5nLT5hY3RpdmVfbGlz dCk7CiAKLQlpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbigmb2JqLT5sYXN0X3JlYWRfcmVxLCByZXEp OwotfQotCi12b2lkIGk5MTVfdm1hX21vdmVfdG9fYWN0aXZlKHN0cnVjdCBpOTE1X3ZtYSAqdm1h LAotCQkJICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQotewotCWxpc3RfbW92ZV90 YWlsKCZ2bWEtPm1tX2xpc3QsICZ2bWEtPnZtLT5hY3RpdmVfbGlzdCk7Ci0JcmV0dXJuIGk5MTVf Z2VtX29iamVjdF9tb3ZlX3RvX2FjdGl2ZSh2bWEtPm9iaiwgcmluZyk7CisJbGlzdF9tb3ZlX3Rh aWwoJm9iai0+cmluZ19saXN0W3JpbmctPmlkXSwgJnJpbmctPmFjdGl2ZV9saXN0KTsKKwlpOTE1 X2dlbV9yZXF1ZXN0X2Fzc2lnbigmb2JqLT5sYXN0X3JlYWRfcmVxW3JpbmctPmlkXSwgcmVxKTsK IH0KIAogc3RhdGljIHZvaWQKLWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2luYWN0aXZlKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCitpOTE1X2dlbV9vYmplY3RfbW92ZV90b19pbmFj dGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCSBpbnQgcmluZykKIHsK IAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKIAotCUJVR19PTihvYmotPmJhc2Uud3JpdGVfZG9tYWlu ICYgfkk5MTVfR0VNX0dQVV9ET01BSU5TKTsKKwlXQVJOX09OQ0Uob2JqLT5iYXNlLndyaXRlX2Rv bWFpbiAmIH5JOTE1X0dFTV9HUFVfRE9NQUlOUywKKwkJICAiaW52YWxpZCB3cml0ZSBkb21haW5z OiAleFxuIiwKKwkJICBvYmotPmJhc2Uud3JpdGVfZG9tYWluICYgfkk5MTVfR0VNX0dQVV9ET01B SU5TKTsKIAlCVUdfT04oIW9iai0+YWN0aXZlKTsKIAorCWxpc3RfZGVsX2luaXQoJm9iai0+cmlu Z19saXN0W3JpbmddKTsKKwlpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbigmb2JqLT5sYXN0X3JlYWRf cmVxW3JpbmddLCBOVUxMKTsKKworCWlmIChvYmotPmxhc3Rfd3JpdGVfcmVxICYmIG9iai0+bGFz dF93cml0ZV9yZXEtPnJpbmctPmlkID09IHJpbmcpIHsKKwkJaTkxNV9nZW1fcmVxdWVzdF9hc3Np Z24oJm9iai0+bGFzdF93cml0ZV9yZXEsIE5VTEwpOworCQlvYmotPmJhc2Uud3JpdGVfZG9tYWlu ID0gMDsKKwl9CisKKwlpZiAoLS1vYmotPmFjdGl2ZSkKKwkJcmV0dXJuOworCiAJbGlzdF9mb3Jf ZWFjaF9lbnRyeSh2bWEsICZvYmotPnZtYV9saXN0LCB2bWFfbGluaykgewogCQlpZiAoIWxpc3Rf ZW1wdHkoJnZtYS0+bW1fbGlzdCkpCiAJCQlsaXN0X21vdmVfdGFpbCgmdm1hLT5tbV9saXN0LCAm dm1hLT52bS0+aW5hY3RpdmVfbGlzdCk7CkBAIC0yMzUzLDMwICsyMzgwLDEyIEBAIGk5MTVfZ2Vt X29iamVjdF9tb3ZlX3RvX2luYWN0aXZlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmop CiAKIAlpbnRlbF9mYl9vYmpfZmx1c2gob2JqLCB0cnVlKTsKIAotCWxpc3RfZGVsX2luaXQoJm9i ai0+cmluZ19saXN0KTsKLQotCWk5MTVfZ2VtX3JlcXVlc3RfYXNzaWduKCZvYmotPmxhc3RfcmVh ZF9yZXEsIE5VTEwpOwotCWk5MTVfZ2VtX3JlcXVlc3RfYXNzaWduKCZvYmotPmxhc3Rfd3JpdGVf cmVxLCBOVUxMKTsKLQlvYmotPmJhc2Uud3JpdGVfZG9tYWluID0gMDsKLQogCWk5MTVfZ2VtX3Jl cXVlc3RfYXNzaWduKCZvYmotPmxhc3RfZmVuY2VkX3JlcSwgTlVMTCk7CiAKLQlvYmotPmFjdGl2 ZSA9IDA7CiAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7Ci0KIAlXQVJO X09OKGk5MTVfdmVyaWZ5X2xpc3RzKGRldikpOwogfQogCi1zdGF0aWMgdm9pZAotaTkxNV9nZW1f b2JqZWN0X3JldGlyZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQotewotCWlmIChv YmotPmxhc3RfcmVhZF9yZXEgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JaWYgKGk5MTVfZ2VtX3Jl cXVlc3RfY29tcGxldGVkKG9iai0+bGFzdF9yZWFkX3JlcSwgdHJ1ZSkpCi0JCWk5MTVfZ2VtX29i amVjdF9tb3ZlX3RvX2luYWN0aXZlKG9iaik7Ci19Ci0KIHN0YXRpYyBpbnQKIGk5MTVfZ2VtX2lu aXRfc2Vxbm8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIHNlcW5vKQogewpAQCAtMjY4Miw5 ICsyNjkxLDkgQEAgc3RhdGljIHZvaWQgaTkxNV9nZW1fcmVzZXRfcmluZ19jbGVhbnVwKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAogCQlvYmogPSBsaXN0X2ZpcnN0X2VudHJ5 KCZyaW5nLT5hY3RpdmVfbGlzdCwKIAkJCQkgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QsCi0JCQkJICAgICAgIHJpbmdfbGlzdCk7CisJCQkJICAgICAgIHJpbmdfbGlzdFtyaW5nLT5p ZF0pOwogCi0JCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2luYWN0aXZlKG9iaik7CisJCWk5MTVf Z2VtX29iamVjdF9tb3ZlX3RvX2luYWN0aXZlKG9iaiwgcmluZy0+aWQpOwogCX0KIAogCS8qCkBA IC0yNzkxLDEyICsyODAwLDEzIEBAIGk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0c19yaW5nKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCiAKIAkJb2JqID0gbGlzdF9maXJzdF9lbnRyeSgmcmlu Zy0+YWN0aXZlX2xpc3QsCiAJCQkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsCi0J CQkJICAgICAgcmluZ19saXN0KTsKKwkJCQkgICAgICByaW5nX2xpc3RbcmluZy0+aWRdKTsKIAot CQlpZiAoIWk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKG9iai0+bGFzdF9yZWFkX3JlcSwgdHJ1 ZSkpCisJCWlmICghaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQob2JqLT5sYXN0X3JlYWRfcmVx W3JpbmctPmlkXSwKKwkJCQkJCXRydWUpKQogCQkJYnJlYWs7CiAKLQkJaTkxNV9nZW1fb2JqZWN0 X21vdmVfdG9faW5hY3RpdmUob2JqKTsKKwkJaTkxNV9nZW1fb2JqZWN0X21vdmVfdG9faW5hY3Rp dmUob2JqLCByaW5nLT5pZCk7CiAJfQogCiAKQEAgLTI5MDgsMTcgKzI5MTgsMjAgQEAgaTkxNV9n ZW1faWRsZV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogc3RhdGljIGlu dAogaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqKQogewotCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmc7Ci0JaW50IHJldDsKKwlp bnQgcmV0LCBpOwogCi0JaWYgKG9iai0+YWN0aXZlKSB7Ci0JCXJpbmcgPSBpOTE1X2dlbV9yZXF1 ZXN0X2dldF9yaW5nKG9iai0+bGFzdF9yZWFkX3JlcSk7CisJaWYgKCFvYmotPmFjdGl2ZSkKKwkJ cmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykgeworCQlp ZiAob2JqLT5sYXN0X3JlYWRfcmVxW2ldID09IE5VTEwpCisJCQljb250aW51ZTsKIAotCQlyZXQg PSBpOTE1X2dlbV9jaGVja19vbHIob2JqLT5sYXN0X3JlYWRfcmVxKTsKKwkJcmV0ID0gaTkxNV9n ZW1fY2hlY2tfb2xyKG9iai0+bGFzdF9yZWFkX3JlcVtpXSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1 cm4gcmV0OwogCi0JCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0c19yaW5nKHJpbmcpOworCQlpOTE1 X2dlbV9yZXRpcmVfcmVxdWVzdHNfcmluZygmdG9faTkxNShvYmotPmJhc2UuZGV2KS0+cmluZ1tp XSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yOTUyLDkgKzI5NjUsMTAgQEAgaTkxNV9nZW1fd2Fp dF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGUpCiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZf cHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3dhaXQgKmFyZ3MgPSBkYXRhOwogCXN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 ICpyZXE7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXFbSTkxNV9OVU1fUklOR1Nd OwogCXVuc2lnbmVkIHJlc2V0X2NvdW50ZXI7Ci0JaW50IHJldCA9IDA7CisJaW50IGksIG4gPSAw OworCWludCByZXQ7CiAKIAlpZiAoYXJncy0+ZmxhZ3MgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7 CkBAIC0yOTc0LDExICsyOTg4LDkgQEAgaTkxNV9nZW1fd2FpdF9pb2N0bChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCiAJaWYgKHJldCkK IAkJZ290byBvdXQ7CiAKLQlpZiAoIW9iai0+YWN0aXZlIHx8ICFvYmotPmxhc3RfcmVhZF9yZXEp CisJaWYgKCFvYmotPmFjdGl2ZSkKIAkJZ290byBvdXQ7CiAKLQlyZXEgPSBvYmotPmxhc3RfcmVh ZF9yZXE7Ci0KIAkvKiBEbyB0aGlzIGFmdGVyIE9MUiBjaGVjayB0byBtYWtlIHN1cmUgd2UgbWFr ZSBmb3J3YXJkIHByb2dyZXNzIHBvbGxpbmcKIAkgKiBvbiB0aGlzIElPQ1RMIHdpdGggYSB0aW1l b3V0ID09IDAgKGxpa2UgYnVzeSBpb2N0bCkKIAkgKi8KQEAgLTI5ODksMTMgKzMwMDEsMjMgQEAg aTkxNV9nZW1fd2FpdF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCiAKIAlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2Jq LT5iYXNlKTsKIAlyZXNldF9jb3VudGVyID0gYXRvbWljX3JlYWQoJmRldl9wcml2LT5ncHVfZXJy b3IucmVzZXRfY291bnRlcik7Ci0JaTkxNV9nZW1fcmVxdWVzdF9yZWZlcmVuY2UocmVxKTsKKwor CWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKSB7CisJCWlmIChvYmotPmxhc3Rf cmVhZF9yZXFbaV0gPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCXJlcVtuKytdID0gaTkxNV9n ZW1fcmVxdWVzdF9yZWZlcmVuY2Uob2JqLT5sYXN0X3JlYWRfcmVxW2ldKTsKKwl9CisKIAltdXRl eF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAotCXJldCA9IF9faTkxNV93YWl0X3JlcXVl c3QocmVxLCByZXNldF9jb3VudGVyLCB0cnVlLAotCQkJCSAgYXJncy0+dGltZW91dF9ucyA+IDAg PyAmYXJncy0+dGltZW91dF9ucyA6IE5VTEwsCi0JCQkJICBmaWxlLT5kcml2ZXJfcHJpdik7Ci0J aTkxNV9nZW1fcmVxdWVzdF91bnJlZmVyZW5jZV9fdW5sb2NrZWQocmVxKTsKKwlmb3IgKGkgPSAw OyBpIDwgbjsgaSsrKSB7CisJCWlmIChyZXQgPT0gMCkKKwkJCXJldCA9IF9faTkxNV93YWl0X3Jl cXVlc3QocmVxW2ldLCByZXNldF9jb3VudGVyLCB0cnVlLAorCQkJCQkJICBhcmdzLT50aW1lb3V0 X25zID4gMCA/ICZhcmdzLT50aW1lb3V0X25zIDogTlVMTCwKKwkJCQkJCSAgZmlsZS0+ZHJpdmVy X3ByaXYpOworCQlpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlX191bmxvY2tlZChyZXFbaV0p OworCX0KIAlyZXR1cm4gcmV0OwogCiBvdXQ6CkBAIC0zMDA0LDU1ICszMDI2LDgwIEBAIG91dDoK IAlyZXR1cm4gcmV0OwogfQogCi0vKioKLSAqIGk5MTVfZ2VtX29iamVjdF9zeW5jIC0gc3luYyBh biBvYmplY3QgdG8gYSByaW5nLgotICoKLSAqIEBvYmo6IG9iamVjdCB3aGljaCBtYXkgYmUgaW4g dXNlIG9uIGFub3RoZXIgcmluZy4KLSAqIEB0bzogcmluZyB3ZSB3aXNoIHRvIHVzZSB0aGUgb2Jq ZWN0IG9uLiBNYXkgYmUgTlVMTC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgbWVhbnQgdG8gYWJzdHJh Y3Qgb2JqZWN0IHN5bmNocm9uaXphdGlvbiB3aXRoIHRoZSBHUFUuCi0gKiBDYWxsaW5nIHdpdGgg TlVMTCBpbXBsaWVzIHN5bmNocm9uaXppbmcgdGhlIG9iamVjdCB3aXRoIHRoZSBDUFUKLSAqIHJh dGhlciB0aGFuIGEgcGFydGljdWxhciBHUFUgcmluZy4KLSAqCi0gKiBSZXR1cm5zIDAgaWYgc3Vj Y2Vzc2Z1bCwgZWxzZSBwcm9wYWdhdGVzIHVwIHRoZSBsb3dlciBsYXllciBlcnJvci4KLSAqLwot aW50Ci1pOTE1X2dlbV9vYmplY3Rfc3luYyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq LAotCQkgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnRvKQorc3RhdGljIGludAorX19pOTE1 X2dlbV9vYmplY3Rfc3luYyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkgICAg ICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqdG8sCisJCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJxKQogewotCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmZyb207CisJc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZnJvbSA9IGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3JpbmcocnEp OwogCXUzMiBzZXFubzsKIAlpbnQgcmV0LCBpZHg7CiAKLQlmcm9tID0gaTkxNV9nZW1fcmVxdWVz dF9nZXRfcmluZyhvYmotPmxhc3RfcmVhZF9yZXEpOwotCiAJaWYgKGZyb20gPT0gTlVMTCB8fCB0 byA9PSBmcm9tKQogCQlyZXR1cm4gMDsKIAorCWlmIChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRl ZChycSwgdHJ1ZSkpCisJCXJldHVybiAwOworCiAJaWYgKHRvID09IE5VTEwgfHwgIWk5MTVfc2Vt YXBob3JlX2lzX2VuYWJsZWQob2JqLT5iYXNlLmRldikpCi0JCXJldHVybiBpOTE1X2dlbV9vYmpl Y3Rfd2FpdF9yZW5kZXJpbmcob2JqLCBmYWxzZSk7CisJCXJldHVybiBpOTE1X2dlbV9vYmplY3Rf d2FpdF9yZW5kZXJpbmcob2JqLCBvYmotPmJhc2UucGVuZGluZ193cml0ZV9kb21haW4gPT0gMCk7 CiAKIAlpZHggPSBpbnRlbF9yaW5nX3N5bmNfaW5kZXgoZnJvbSwgdG8pOwogCi0Jc2Vxbm8gPSBp OTE1X2dlbV9yZXF1ZXN0X2dldF9zZXFubyhvYmotPmxhc3RfcmVhZF9yZXEpOworCXNlcW5vID0g aTkxNV9nZW1fcmVxdWVzdF9nZXRfc2Vxbm8ocnEpOwogCS8qIE9wdGltaXphdGlvbjogQXZvaWQg c2VtYXBob3JlIHN5bmMgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBhbHJlYWR5CiAJICogd2FpdGVkIGZv ciBhbiBvYmplY3Qgd2l0aCBoaWdoZXIgc2Vxbm8gKi8KIAlpZiAoc2Vxbm8gPD0gZnJvbS0+c2Vt YXBob3JlLnN5bmNfc2Vxbm9baWR4XSkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBpOTE1X2dlbV9j aGVja19vbHIob2JqLT5sYXN0X3JlYWRfcmVxKTsKKwlyZXQgPSBpOTE1X2dlbV9jaGVja19vbHIo cnEpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQl0cmFjZV9pOTE1X2dlbV9yaW5nX3N5 bmNfdG8oZnJvbSwgdG8sIG9iai0+bGFzdF9yZWFkX3JlcSk7CisJdHJhY2VfaTkxNV9nZW1fcmlu Z19zeW5jX3RvKGZyb20sIHRvLCBycSk7CiAJcmV0ID0gdG8tPnNlbWFwaG9yZS5zeW5jX3RvKHRv LCBmcm9tLCBzZXFubyk7CiAJaWYgKCFyZXQpCiAJCS8qIFdlIHVzZSBsYXN0X3JlYWRfcmVxIGJl Y2F1c2Ugc3luY190bygpCiAJCSAqIG1pZ2h0IGhhdmUganVzdCBjYXVzZWQgc2Vxbm8gd3JhcCB1 bmRlcgogCQkgKiB0aGUgcmFkYXIuCiAJCSAqLwotCQlmcm9tLT5zZW1hcGhvcmUuc3luY19zZXFu b1tpZHhdID0KLQkJCQlpOTE1X2dlbV9yZXF1ZXN0X2dldF9zZXFubyhvYmotPmxhc3RfcmVhZF9y ZXEpOworCQlmcm9tLT5zZW1hcGhvcmUuc3luY19zZXFub1tpZHhdID0gaTkxNV9nZW1fcmVxdWVz dF9nZXRfc2Vxbm8ocnEpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpOTE1X2dlbV9v YmplY3Rfc3luYyAtIHN5bmMgYW4gb2JqZWN0IHRvIGEgcmluZy4KKyAqCisgKiBAb2JqOiBvYmpl Y3Qgd2hpY2ggbWF5IGJlIGluIHVzZSBvbiBhbm90aGVyIHJpbmcuCisgKiBAdG86IHJpbmcgd2Ug d2lzaCB0byB1c2UgdGhlIG9iamVjdCBvbi4gTWF5IGJlIE5VTEwuCisgKgorICogVGhpcyBjb2Rl IGlzIG1lYW50IHRvIGFic3RyYWN0IG9iamVjdCBzeW5jaHJvbml6YXRpb24gd2l0aCB0aGUgR1BV LgorICogQ2FsbGluZyB3aXRoIE5VTEwgaW1wbGllcyBzeW5jaHJvbml6aW5nIHRoZSBvYmplY3Qg d2l0aCB0aGUgQ1BVCisgKiByYXRoZXIgdGhhbiBhIHBhcnRpY3VsYXIgR1BVIHJpbmcuCisgKgor ICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIGVsc2UgcHJvcGFnYXRlcyB1cCB0aGUgbG93ZXIg bGF5ZXIgZXJyb3IuCisgKi8KK2ludAoraTkxNV9nZW1fb2JqZWN0X3N5bmMoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICp0bykK K3sKKwlpbnQgcmV0ID0gMCwgaTsKKworCWlmIChvYmotPmJhc2UucGVuZGluZ193cml0ZV9kb21h aW4gPT0gMCkgeworCQlpZiAob2JqLT5sYXN0X3dyaXRlX3JlcSkKKwkJCXJldCA9IF9faTkxNV9n ZW1fb2JqZWN0X3N5bmMob2JqLCB0bywKKwkJCQkJCSAgICAgb2JqLT5sYXN0X3dyaXRlX3JlcSk7 CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX1JJTkdTOyBpKyspIHsKKwkJ CWlmIChvYmotPmxhc3RfcmVhZF9yZXFbaV0gPT0gTlVMTCkKKwkJCQljb250aW51ZTsKKworCQkJ cmV0ID0gX19pOTE1X2dlbV9vYmplY3Rfc3luYyhvYmosIHRvLCBvYmotPmxhc3RfcmVhZF9yZXFb aV0pOworCQkJaWYgKHJldCkKKwkJCQlicmVhazsKKwkJfQorCX0KIAogCXJldHVybiByZXQ7CiB9 CkBAIC0zMTM5LDEwICszMTg2LDYgQEAgaW50IGk5MTVfdm1hX3VuYmluZChzdHJ1Y3QgaTkxNV92 bWEgKnZtYSkKIAkvKiBTaW5jZSB0aGUgdW5ib3VuZCBsaXN0IGlzIGdsb2JhbCwgb25seSBtb3Zl IHRvIHRoYXQgbGlzdCBpZgogCSAqIG5vIG1vcmUgVk1BcyBleGlzdC4gKi8KIAlpZiAobGlzdF9l bXB0eSgmb2JqLT52bWFfbGlzdCkpIHsKLQkJLyogVGhyb3cgYXdheSB0aGUgYWN0aXZlIHJlZmVy ZW5jZSBiZWZvcmUKLQkJICogbW92aW5nIHRvIHRoZSB1bmJvdW5kIGxpc3QuICovCi0JCWk5MTVf Z2VtX29iamVjdF9yZXRpcmUob2JqKTsKLQogCQlpOTE1X2dlbV9ndHRfZmluaXNoX29iamVjdChv YmopOwogCQlsaXN0X21vdmVfdGFpbCgmb2JqLT5nbG9iYWxfbGlzdCwgJmRldl9wcml2LT5tbS51 bmJvdW5kX2xpc3QpOwogCX0KQEAgLTM3OTIsOCArMzgzNSw2IEBAIGk5MTVfZ2VtX29iamVjdF9z ZXRfdG9fZ3R0X2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCBib29sIHdy aXRlKQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpOTE1X2dlbV9vYmplY3RfcmV0aXJl KG9iaik7Ci0KIAkvKiBGbHVzaCBhbmQgYWNxdWlyZSBvYmotPnBhZ2VzIHNvIHRoYXQgd2UgYXJl IGNvaGVyZW50IHRocm91Z2gKIAkgKiBkaXJlY3QgYWNjZXNzIGluIG1lbW9yeSB3aXRoIHByZXZp b3VzIGNhY2hlZCB3cml0ZXMgdGhyb3VnaAogCSAqIHNobWVtZnMgYW5kIHRoYXQgb3VyIGNhY2hl IGRvbWFpbiB0cmFja2luZyByZW1haW5zIHZhbGlkLgpAQCAtNDAxOCwxMSArNDA1OSw5IEBAIGk5 MTVfZ2VtX29iamVjdF9waW5fdG9fZGlzcGxheV9wbGFuZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqLAogCWJvb2wgd2FzX3Bpbl9kaXNwbGF5OwogCWludCByZXQ7CiAKLQlpZiAocGlw ZWxpbmVkICE9IGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3Jpbmcob2JqLT5sYXN0X3JlYWRfcmVxKSkg ewotCQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc3luYyhvYmosIHBpcGVsaW5lZCk7Ci0JCWlmIChy ZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc3luYyhvYmos IHBpcGVsaW5lZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCS8qIE1hcmsgdGhlIHBp bl9kaXNwbGF5IGVhcmx5IHNvIHRoYXQgd2UgYWNjb3VudCBmb3IgdGhlCiAJICogZGlzcGxheSBj b2hlcmVuY3kgd2hpbHN0IHNldHRpbmcgdXAgdGhlIGNhY2hlIGRvbWFpbnMuCkBAIC00MTE4LDcg KzQxNTcsNiBAQCBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2NwdV9kb21haW4oc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaiwgYm9vbCB3cml0ZSkKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0 OwogCi0JaTkxNV9nZW1fb2JqZWN0X3JldGlyZShvYmopOwogCWk5MTVfZ2VtX29iamVjdF9mbHVz aF9ndHRfd3JpdGVfZG9tYWluKG9iaik7CiAKIAlvbGRfd3JpdGVfZG9tYWluID0gb2JqLT5iYXNl LndyaXRlX2RvbWFpbjsKQEAgLTQzODUsMTEgKzQ0MjMsMTcgQEAgaTkxNV9nZW1fYnVzeV9pb2N0 bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkgKiBuZWNlc3NhcnkgZmx1 c2hlcyBoZXJlLgogCQkgKi8KIAkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2FjdGl2ZShv YmopOwotCQlpZiAob2JqLT5sYXN0X3JlYWRfcmVxKSB7Ci0JCQlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpyaW5nOworCQlpZiAob2JqLT5hY3RpdmUpIHsKKwkJCWludCBpOworCiAJCQlCVUlMRF9C VUdfT04oSTkxNV9OVU1fUklOR1MgPiAxNik7Ci0JCQlyaW5nID0gaTkxNV9nZW1fcmVxdWVzdF9n ZXRfcmluZyhvYmotPmxhc3RfcmVhZF9yZXEpOwotCQkJYXJncy0+YnVzeSA9IGludGVsX3Jpbmdf ZmxhZyhyaW5nKSA8PCAxNiB8IDE7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5H UzsgaSsrKSB7CisJCQkJaWYgKG9iai0+bGFzdF9yZWFkX3JlcVtpXSA9PSBOVUxMKQorCQkJCQlj b250aW51ZTsKKworCQkJCWFyZ3MtPmJ1c3kgfD0gMSA8PCAoMTYgKyBpKSB8IDE7CisJCQl9CiAJ CX0KIAogCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKQEAgLTQ0Njgs OCArNDUxMiwxMSBAQCB1bmxvY2s6CiB2b2lkIGk5MTVfZ2VtX29iamVjdF9pbml0KHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkgIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0X29wcyAqb3BzKQogeworCWludCBpOworCiAJSU5JVF9MSVNUX0hFQUQoJm9iai0+Z2xv YmFsX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZvYmotPnJpbmdfbGlzdCk7CisJZm9yIChpID0g MDsgaSA8IEk5MTVfTlVNX1JJTkdTOyBpKyspCisJCUlOSVRfTElTVF9IRUFEKCZvYmotPnJpbmdf bGlzdFtpXSk7CiAJSU5JVF9MSVNUX0hFQUQoJm9iai0+b2JqX2V4ZWNfbGluayk7CiAJSU5JVF9M SVNUX0hFQUQoJm9iai0+dm1hX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZvYmotPmJhdGNoX3Bv b2xfbGluayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250 ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKaW5kZXggNzAz NDZiMDAyOGY5Li4zMTgyNmU3ZTkwNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2NvbnRleHQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9j b250ZXh0LmMKQEAgLTY3Myw4ICs2NzMsNiBAQCBzdGF0aWMgaW50IGRvX3N3aXRjaChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nLAogCQkgKiBzd2FwcGVkLCBidXQgdGhlcmUgaXMgbm8gd2F5 IHRvIGRvIHRoYXQgeWV0LgogCQkgKi8KIAkJZnJvbS0+bGVnYWN5X2h3X2N0eC5yY3Nfc3RhdGUt PmRpcnR5ID0gMTsKLQkJQlVHX09OKGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3JpbmcoCi0JCQlmcm9t LT5sZWdhY3lfaHdfY3R4LnJjc19zdGF0ZS0+bGFzdF9yZWFkX3JlcSkgIT0gcmluZyk7CiAKIAkJ Lyogb2JqIGlzIGtlcHQgYWxpdmUgdW50aWwgdGhlIG5leHQgcmVxdWVzdCBieSBpdHMgYWN0aXZl IHJlZiAqLwogCQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihmcm9tLT5sZWdhY3lfaHdfY3R4 LnJjc19zdGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9l cnJvci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYwppbmRleCBhOTgy ODQ5YTVlZGQuLmZhNWQ1M2YxMjQwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9ncHVfZXJyb3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJv ci5jCkBAIC0xOTIsMTUgKzE5MiwyMCBAQCBzdGF0aWMgdm9pZCBwcmludF9lcnJvcl9idWZmZXJz KHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZV9idWYgKm0sCiAJCQkJc3RydWN0IGRybV9pOTE1 X2Vycm9yX2J1ZmZlciAqZXJyLAogCQkJCWludCBjb3VudCkKIHsKKwlpbnQgaTsKKwogCWVycl9w cmludGYobSwgIiAgJXMgWyVkXTpcbiIsIG5hbWUsIGNvdW50KTsKIAogCXdoaWxlIChjb3VudC0t KSB7Ci0JCWVycl9wcmludGYobSwgIiAgICAlMDh4ICU4dSAlMDJ4ICUwMnggJXggJXgiLAorCQll cnJfcHJpbnRmKG0sICIgICAgJTA4eCAlOHUgJTAyeCAlMDJ4IFsgIiwKIAkJCSAgIGVyci0+Z3R0 X29mZnNldCwKIAkJCSAgIGVyci0+c2l6ZSwKIAkJCSAgIGVyci0+cmVhZF9kb21haW5zLAotCQkJ ICAgZXJyLT53cml0ZV9kb21haW4sCi0JCQkgICBlcnItPnJzZXFubywgZXJyLT53c2Vxbm8pOwor CQkJICAgZXJyLT53cml0ZV9kb21haW4pOworCQlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fUklO R1M7IGkrKykKKwkJCWVycl9wcmludGYobSwgIiUwMnggIiwgZXJyLT5yc2Vxbm9baV0pOworCisJ CWVycl9wcmludGYobSwgIl0gJTAyeCIsIGVyci0+d3NlcW5vKTsKIAkJZXJyX3B1dHMobSwgcGlu X2ZsYWcoZXJyLT5waW5uZWQpKTsKIAkJZXJyX3B1dHMobSwgdGlsaW5nX2ZsYWcoZXJyLT50aWxp bmcpKTsKIAkJZXJyX3B1dHMobSwgZGlydHlfZmxhZyhlcnItPmRpcnR5KSk7CkBAIC02NjcsMTAg KzY3MiwxMiBAQCBzdGF0aWMgdm9pZCBjYXB0dXJlX2JvKHN0cnVjdCBkcm1faTkxNV9lcnJvcl9i dWZmZXIgKmVyciwKIAkJICAgICAgIHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQogewogCXN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSB2bWEtPm9iajsKKwlpbnQgaTsKIAogCWVyci0+c2l6 ZSA9IG9iai0+YmFzZS5zaXplOwogCWVyci0+bmFtZSA9IG9iai0+YmFzZS5uYW1lOwotCWVyci0+ cnNlcW5vID0gaTkxNV9nZW1fcmVxdWVzdF9nZXRfc2Vxbm8ob2JqLT5sYXN0X3JlYWRfcmVxKTsK Kwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykKKwkJZXJyLT5yc2Vxbm9baV0g PSBpOTE1X2dlbV9yZXF1ZXN0X2dldF9zZXFubyhvYmotPmxhc3RfcmVhZF9yZXFbaV0pOwogCWVy ci0+d3NlcW5vID0gaTkxNV9nZW1fcmVxdWVzdF9nZXRfc2Vxbm8ob2JqLT5sYXN0X3dyaXRlX3Jl cSk7CiAJZXJyLT5ndHRfb2Zmc2V0ID0gdm1hLT5ub2RlLnN0YXJ0OwogCWVyci0+cmVhZF9kb21h aW5zID0gb2JqLT5iYXNlLnJlYWRfZG9tYWluczsKQEAgLTY4Myw4ICs2OTAsOCBAQCBzdGF0aWMg dm9pZCBjYXB0dXJlX2JvKHN0cnVjdCBkcm1faTkxNV9lcnJvcl9idWZmZXIgKmVyciwKIAllcnIt PmRpcnR5ID0gb2JqLT5kaXJ0eTsKIAllcnItPnB1cmdlYWJsZSA9IG9iai0+bWFkdiAhPSBJOTE1 X01BRFZfV0lMTE5FRUQ7CiAJZXJyLT51c2VycHRyID0gb2JqLT51c2VycHRyLm1tICE9IE5VTEw7 Ci0JZXJyLT5yaW5nID0gb2JqLT5sYXN0X3JlYWRfcmVxID8KLQkJCWk5MTVfZ2VtX3JlcXVlc3Rf Z2V0X3Jpbmcob2JqLT5sYXN0X3JlYWRfcmVxKS0+aWQgOiAtMTsKKwllcnItPnJpbmcgPSBvYmot Pmxhc3Rfd3JpdGVfcmVxID8KKwkJCWk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3Jpbmcob2JqLT5sYXN0 X3dyaXRlX3JlcSktPmlkIDogLTE7CiAJZXJyLT5jYWNoZV9sZXZlbCA9IG9iai0+Y2FjaGVfbGV2 ZWw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXku YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCBkMzZlYzZiOGZk MGEuLmQ2MjFlYmVjZDMzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAt OTY3NCw3ICs5Njc0LDcgQEAgc3RhdGljIGJvb2wgdXNlX21taW9fZmxpcChzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICpyaW5nLAogCWVsc2UgaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cykKIAkJcmV0 dXJuIHRydWU7CiAJZWxzZQotCQlyZXR1cm4gcmluZyAhPSBpOTE1X2dlbV9yZXF1ZXN0X2dldF9y aW5nKG9iai0+bGFzdF9yZWFkX3JlcSk7CisJCXJldHVybiByaW5nICE9IGk5MTVfZ2VtX3JlcXVl c3RfZ2V0X3Jpbmcob2JqLT5sYXN0X3dyaXRlX3JlcSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNrbF9k b19tbWlvX2ZsaXAoc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMpCkBAIC05OTc3LDcgKzk5 NzcsNyBAQCBzdGF0aWMgaW50IGludGVsX2NydGNfcGFnZV9mbGlwKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywKIAl9IGVsc2UgaWYgKElTX0lWWUJSSURHRShkZXYpIHx8IElTX0hBU1dFTEwoZGV2KSkg ewogCQlyaW5nID0gJmRldl9wcml2LT5yaW5nW0JDU107CiAJfSBlbHNlIGlmIChJTlRFTF9JTkZP KGRldiktPmdlbiA+PSA3KSB7Ci0JCXJpbmcgPSBpOTE1X2dlbV9yZXF1ZXN0X2dldF9yaW5nKG9i ai0+bGFzdF9yZWFkX3JlcSk7CisJCXJpbmcgPSBpOTE1X2dlbV9yZXF1ZXN0X2dldF9yaW5nKG9i ai0+bGFzdF93cml0ZV9yZXEpOwogCQlpZiAocmluZyA9PSBOVUxMIHx8IHJpbmctPmlkICE9IFJD UykKIAkJCXJpbmcgPSAmZGV2X3ByaXYtPnJpbmdbQkNTXTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCmluZGV4IDFkMDhkOGY5MTQ5ZC4uYTRhMjVjOTMy YjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCkBAIC0xMjksNiAr MTI5LDcgQEAgc3RydWN0ICBpbnRlbF9lbmdpbmVfY3MgewogCQlWQ1MyCiAJfSBpZDsKICNkZWZp bmUgSTkxNV9OVU1fUklOR1MgNQorI2RlZmluZSBJOTE1X01BWF9SSU5HX0JJVCAzCiAjZGVmaW5l IExBU1RfVVNFUl9SSU5HIChWRUNTICsgMSkKIAl1MzIJCW1taW9fYmFzZTsKIAlzdHJ1Y3QJCWRy bV9kZXZpY2UgKmRldjsKLS0gCjIuMS40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=