From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: [PATCH 20/28] drm/vmwgfx: Implement fbdev on kms v2 Date: Wed, 12 Aug 2015 22:43:09 -0700 Message-ID: <1439444597-4664-21-git-send-email-thellstrom@vmware.com> References: <1439444597-4664-1-git-send-email-thellstrom@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx2.bahnhof.se (mx2.bahnhof.se [213.80.101.12]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3A4E76EBE6 for ; Wed, 12 Aug 2015 23:03:45 -0700 (PDT) Received: from localhost (mf.bahnhof.se [213.80.101.20]) by mx2-reinject (Postfix) with ESMTP id 802D640B70 for ; Thu, 13 Aug 2015 08:03:43 +0200 (CEST) Received: from mf3.bahnhof.se ([127.0.0.1]) by localhost (mf3.bahnhof.se [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 1FTl+Ad3Yobp for ; Thu, 13 Aug 2015 08:03:33 +0200 (CEST) Received: from mail.shipmail.org (h-5-150-198-217.na.cust.bahnhof.se [5.150.198.217]) by mf3.bahnhof.se (Postfix) with ESMTP id 5FF9F3E8CDE for ; Thu, 13 Aug 2015 08:03:03 +0200 (CEST) Received: from mail.shipmail.org (lin0.kontor.shipmail.org [127.0.0.1]) by mail.shipmail.org (Postfix) with ESMTP id 445DE3DC002 for ; Thu, 13 Aug 2015 07:43:26 +0200 (CEST) Received: from localhost.localdomain (lin0.kontor.shipmail.org [127.0.0.1]) by mail.shipmail.org (Postfix) with ESMTP id 184563F4004 for ; Thu, 13 Aug 2015 07:43:26 +0200 (CEST) In-Reply-To: <1439444597-4664-1-git-send-email-thellstrom@vmware.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org V2l0aCBzY3JlZW4gdGFyZ2V0cyB0aGUgb2xkIGxlZ2FjeSBkaXNwbGF5IHN5c3RlbSBmYmRldiBk b2Vzbid0IHdvcmsKc2F0aXNmYWN0b3J5IGFueW1vcmUuIEF0IGJlc3QgdGhlIHJlc29sdXRpb24g aXMgc2V2ZXJlbHkgcmVzdHJpY3RlZC4KVGhlcmVmb3JlIGltcGxlbWVudCBmYmRldiBvbiB0b3Ag b2YgdGhlIGttcyBzeXN0ZW0uIFdpdGggdGhpcyBjaGFuZ2UsIGZiZGV2CndpbGwgYmUgdXNpbmcg d2hhdGV2ZXIgS01TIGJhY2tlbmQgaXMgY2hvc2VuLgoKVGhlcmUgYXJlIGhlbHBlcnMgYXZhaWxh YmxlIGZvciB0aGlzLCBzbyBpbiB0aGUgZnV0dXJlIHdlJ2QgcHJvYmFibHkgd2FudAp0byBpbXBs ZW1lbnQgdGhlIGhlbHBlciBjYWxsYmFja3MgaW5zdGVhZCBvZiBjYWxsaW5nIGludG8gb3VyIEtN UwppbXBsZW1lbnRhdGlvbiBkaXJlY3RseS4KCnYyOiBNYWtlIHN1cmUgd2UgdGFrZSB0aGUgbW9k ZV9jb25maWcgbXV0ZXggYXJvdW5kIG1vZGVzZXR0aW5nLApBbHNvIGNsZWFyIHRoZSBpbml0aWFs IGZyYW1lYnVmZmVyIHVzaW5nIHZ6YWxsb2MgaW5zdGVhZCBvZiB2bWFsbG9jLgoKU2lnbmVkLW9m Zi1ieTogVGhvbWFzIEhlbGxzdHJvbSA8dGhlbGxzdHJvbUB2bXdhcmUuY29tPgpSZXZpZXdlZC1i eTogU2luY2xhaXIgWWVoIDxzeWVoQHZtd2FyZS5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3Zt d2dmeC92bXdnZnhfZHJ2LmMgIHwgIDIyICstCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9mYi5jICAgfCA1NTUgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KIGRyaXZl cnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jICB8ICA2MyArKystCiBkcml2ZXJzL2dwdS9k cm0vdm13Z2Z4L3Ztd2dmeF9rbXMuaCAgfCAgIDggKwogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92 bXdnZnhfbGR1LmMgIHwgICAxIC0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Njcm4u YyB8ICAgMSAtCiA2IGZpbGVzIGNoYW5nZWQsIDQzNiBpbnNlcnRpb25zKCspLCAyMTQgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmMg Yi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuYwppbmRleCBiY2YxOTYyLi4xODky MTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuYwpAQCAtMTEyMCwyMyArMTEyMCw2 IEBAIHN0YXRpYyBsb25nIHZtd19jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2ln bmVkIGludCBjbWQsCiAKIHN0YXRpYyB2b2lkIHZtd19sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKIHsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0Jc3RydWN0IGRybV9tb2RlX3Nl dCBzZXQ7Ci0JaW50IHJldDsKLQotCXNldC54ID0gMDsKLQlzZXQueSA9IDA7Ci0Jc2V0LmZiID0g TlVMTDsKLQlzZXQubW9kZSA9IE5VTEw7Ci0Jc2V0LmNvbm5lY3RvcnMgPSBOVUxMOwotCXNldC5u dW1fY29ubmVjdG9ycyA9IDA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1v ZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewotCQlzZXQuY3J0YyA9IGNydGM7Ci0JCXJldCA9 IGRybV9tb2RlX3NldF9jb25maWdfaW50ZXJuYWwoJnNldCk7Ci0JCVdBUk5fT04ocmV0ICE9IDAp OwotCX0KLQogfQogCiBzdGF0aWMgdm9pZCB2bXdfbWFzdGVyX2luaXQoc3RydWN0IHZtd19tYXN0 ZXIgKnZtYXN0ZXIpCkBAIC0xMzIxLDYgKzEzMDQsOCBAQCBzdGF0aWMgaW50IHZtd2dmeF9wbV9u b3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwKIAog CXN3aXRjaCAodmFsKSB7CiAJY2FzZSBQTV9ISUJFUk5BVElPTl9QUkVQQVJFOgorCQlpZiAoZGV2 X3ByaXYtPmVuYWJsZV9mYikKKwkJCXZtd19mYl9vZmYoZGV2X3ByaXYpOwogCQl0dG1fc3VzcGVu ZF9sb2NrKCZkZXZfcHJpdi0+cmVzZXJ2YXRpb25fc2VtKTsKIAogCQkvKgpAQCAtMTMzNyw3ICsx MzIyLDggQEAgc3RhdGljIGludCB2bXdnZnhfcG1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Js b2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCiAJY2FzZSBQTV9QT1NUX1JFU1RPUkU6CiAJCXZt d19mZW5jZV9maWZvX3VwKGRldl9wcml2LT5mbWFuKTsKIAkJdHRtX3N1c3BlbmRfdW5sb2NrKCZk ZXZfcHJpdi0+cmVzZXJ2YXRpb25fc2VtKTsKLQorCQlpZiAoZGV2X3ByaXYtPmVuYWJsZV9mYikK KwkJCXZtd19mYl9vbihkZXZfcHJpdik7CiAJCWJyZWFrOwogCWNhc2UgUE1fUkVTVE9SRV9QUkVQ QVJFOgogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4 X2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9mYi5jCmluZGV4IGI1NGQ5OWJj Li45ZGJiMjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9mYi5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZiLmMKQEAgLTMwLDYgKzMwLDcg QEAKIAogI2luY2x1ZGUgPGRybS9kcm1QLmg+CiAjaW5jbHVkZSAidm13Z2Z4X2Rydi5oIgorI2lu Y2x1ZGUgInZtd2dmeF9rbXMuaCIKIAogI2luY2x1ZGUgPGRybS90dG0vdHRtX3BsYWNlbWVudC5o PgogCkBAIC00MCwyMSArNDEsMjIgQEAgc3RydWN0IHZtd19mYl9wYXIgewogCiAJdm9pZCAqdm1h bGxvYzsKIAorCXN0cnVjdCBtdXRleCBib19tdXRleDsKIAlzdHJ1Y3Qgdm13X2RtYV9idWZmZXIg KnZtd19ibzsKIAlzdHJ1Y3QgdHRtX2JvX2ttYXBfb2JqIG1hcDsKKwl2b2lkICpib19wdHI7CisJ dW5zaWduZWQgYm9fc2l6ZTsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpzZXRfZmI7CisJc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKnNldF9tb2RlOworCXUzMiBmYl94OworCXUzMiBmYl95Owor CWJvb2wgYm9faW93cml0ZTsKIAogCXUzMiBwc2V1ZG9fcGFsZXR0ZVsxN107CiAKLQl1bnNpZ25l ZCBkZXB0aDsKLQl1bnNpZ25lZCBicHA7Ci0KIAl1bnNpZ25lZCBtYXhfd2lkdGg7CiAJdW5zaWdu ZWQgbWF4X2hlaWdodDsKIAotCXZvaWQgKmJvX3B0cjsKLQl1bnNpZ25lZCBib19zaXplOwotCWJv b2wgYm9faW93cml0ZTsKLQogCXN0cnVjdCB7CiAJCXNwaW5sb2NrX3QgbG9jazsKIAkJYm9vbCBh Y3RpdmU7CkBAIC02Myw2ICs2NSwxMSBAQCBzdHJ1Y3Qgdm13X2ZiX3BhciB7CiAJCXVuc2lnbmVk IHgyOwogCQl1bnNpZ25lZCB5MjsKIAl9IGRpcnR5OworCisJc3RydWN0IGRybV9jcnRjICpjcnRj OworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb247CisKKwlib29sIGxvY2FsX21vZGU7CiB9Owog CiBzdGF0aWMgaW50IHZtd19mYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJl ZCwgdW5zaWduZWQgZ3JlZW4sCkBAIC03Nyw3ICs4NCw3IEBAIHN0YXRpYyBpbnQgdm13X2ZiX3Nl dGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKIAkJ cmV0dXJuIDE7CiAJfQogCi0Jc3dpdGNoIChwYXItPmRlcHRoKSB7CisJc3dpdGNoIChwYXItPnNl dF9mYi0+ZGVwdGgpIHsKIAljYXNlIDI0OgogCWNhc2UgMzI6CiAJCXBhbFtyZWdub10gPSAoKHJl ZCAmIDB4ZmYwMCkgPDwgOCkgfApAQCAtODUsNyArOTIsOCBAQCBzdGF0aWMgaW50IHZtd19mYl9z ZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCiAJ CQkgICAgICgoYmx1ZSAgJiAweGZmMDApID4+IDgpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlE Uk1fRVJST1IoIkJhZCBkZXB0aCAldSwgYnBwICV1LlxuIiwgcGFyLT5kZXB0aCwgcGFyLT5icHAp OworCQlEUk1fRVJST1IoIkJhZCBkZXB0aCAldSwgYnBwICV1LlxuIiwgcGFyLT5zZXRfZmItPmRl cHRoLAorCQkJICBwYXItPnNldF9mYi0+Yml0c19wZXJfcGl4ZWwpOwogCQlyZXR1cm4gMTsKIAl9 CiAKQEAgLTEzNCwxMiArMTQyLDYgQEAgc3RhdGljIGludCB2bXdfZmJfY2hlY2tfdmFyKHN0cnVj dCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAo ISh2bXdfcHJpdi0+Y2FwYWJpbGl0aWVzICYgU1ZHQV9DQVBfRElTUExBWV9UT1BPTE9HWSkgJiYK LQkgICAgKHZhci0+eG9mZnNldCAhPSAwIHx8IHZhci0+eW9mZnNldCAhPSAwKSkgewotCQlEUk1f RVJST1IoIkNhbiBub3QgaGFuZGxlIHBhbm5pbmcgd2l0aG91dCBkaXNwbGF5IHRvcG9sb2d5XG4i KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJaWYgKCh2YXItPnhvZmZzZXQgKyB2YXItPnhy ZXMpID4gcGFyLT5tYXhfd2lkdGggfHwKIAkgICAgKHZhci0+eW9mZnNldCArIHZhci0+eXJlcykg PiBwYXItPm1heF9oZWlnaHQpIHsKIAkJRFJNX0VSUk9SKCJSZXF1ZXN0ZWQgZ2VvbSBjYW4gbm90 IGZpdCBpbiBmcmFtZWJ1ZmZlclxuIik7CkBAIC0xNTYsNDYgKzE1OCw2IEBAIHN0YXRpYyBpbnQg dm13X2ZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKIAlyZXR1cm4g MDsKIH0KIAotc3RhdGljIGludCB2bXdfZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykK LXsKLQlzdHJ1Y3Qgdm13X2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOwotCXN0cnVjdCB2bXdfcHJp dmF0ZSAqdm13X3ByaXYgPSBwYXItPnZtd19wcml2OwotCWludCByZXQ7Ci0KLQlpbmZvLT5maXgu bGluZV9sZW5ndGggPSBpbmZvLT52YXIueHJlcyAqIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbC84 OwotCi0JcmV0ID0gdm13X2ttc193cml0ZV9zdmdhKHZtd19wcml2LCBpbmZvLT52YXIueHJlcywg aW5mby0+dmFyLnlyZXMsCi0JCQkJIGluZm8tPmZpeC5saW5lX2xlbmd0aCwKLQkJCQkgcGFyLT5i cHAsIHBhci0+ZGVwdGgpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAodm13X3By aXYtPmNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQX0RJU1BMQVlfVE9QT0xPR1kpIHsKLQkJLyogVE9E TyBjaGVjayBpZiBwaXRjaCBhbmQgb2Zmc2V0IGNoYW5nZXMgKi8KLQkJdm13X3dyaXRlKHZtd19w cml2LCBTVkdBX1JFR19OVU1fR1VFU1RfRElTUExBWVMsIDEpOwotCQl2bXdfd3JpdGUodm13X3By aXYsIFNWR0FfUkVHX0RJU1BMQVlfSUQsIDApOwotCQl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0Ff UkVHX0RJU1BMQVlfSVNfUFJJTUFSWSwgdHJ1ZSk7Ci0JCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZH QV9SRUdfRElTUExBWV9QT1NJVElPTl9YLCBpbmZvLT52YXIueG9mZnNldCk7Ci0JCXZtd193cml0 ZSh2bXdfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9QT1NJVElPTl9ZLCBpbmZvLT52YXIueW9mZnNl dCk7Ci0JCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZHQV9SRUdfRElTUExBWV9XSURUSCwgaW5mby0+ dmFyLnhyZXMpOwotCQl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0FfUkVHX0RJU1BMQVlfSEVJR0hU LCBpbmZvLT52YXIueXJlcyk7Ci0JCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZHQV9SRUdfRElTUExB WV9JRCwgU1ZHQV9JRF9JTlZBTElEKTsKLQl9Ci0KLQkvKiBUaGlzIGlzIHJlYWxseSBoZWxwZnVs IHNpbmNlIGlmIHRoaXMgZmFpbHMgdGhlIHVzZXIKLQkgKiBjYW4gcHJvYmFibHkgbm90IHNlZSBh bnl0aGluZyBvbiB0aGUgc2NyZWVuLgotCSAqLwotCVdBUk5fT04odm13X3JlYWQodm13X3ByaXYs IFNWR0FfUkVHX0ZCX09GRlNFVCkgIT0gMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlu dCB2bXdfZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0JCQkg ICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGlu dCB2bXdfZmJfYmxhbmsoaW50IGJsYW5rLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlyZXR1 cm4gMDsKQEAgLTIwOSw1NSArMTcxLDc3IEBAIHN0YXRpYyB2b2lkIHZtd19mYl9kaXJ0eV9mbHVz aChzdHJ1Y3Qgdm13X2ZiX3BhciAqcGFyKQogewogCXN0cnVjdCB2bXdfcHJpdmF0ZSAqdm13X3By aXYgPSBwYXItPnZtd19wcml2OwogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gdm13X3ByaXYtPmZi X2luZm87Ci0JaW50IHN0cmlkZSA9IChpbmZvLT5maXgubGluZV9sZW5ndGggLyA0KTsKLQlpbnQg KnNyYyA9IChpbnQgKilpbmZvLT5zY3JlZW5fYmFzZTsKLQlfX2xlMzIgX19pb21lbSAqdnJhbV9t ZW0gPSBwYXItPmJvX3B0cjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIHgsIHks IHcsIGg7Ci0JaW50IGksIGs7Ci0Jc3RydWN0IHsKLQkJdWludDMyX3QgaGVhZGVyOwotCQlTVkdB Rmlmb0NtZFVwZGF0ZSBib2R5OwotCX0gKmNtZDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsK KwlzMzIgZHN0X3gxLCBkc3RfeDIsIGRzdF95MSwgZHN0X3kyLCB3LCBoOworCXUzMiBjcHAsIG1h eF94LCBtYXhfeTsKKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBjbGlwOworCXN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmN1cl9mYjsKKwl1OCAqc3JjX3B0ciwgKmRzdF9wdHI7CiAKIAlpZiAodm13X3By aXYtPnN1c3BlbmRlZCkKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBhci0+ZGly dHkubG9jaywgZmxhZ3MpOwotCWlmICghcGFyLT5kaXJ0eS5hY3RpdmUpIHsKLQkJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmcGFyLT5kaXJ0eS5sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0J eCA9IHBhci0+ZGlydHkueDE7Ci0JeSA9IHBhci0+ZGlydHkueTE7Ci0JdyA9IG1pbihwYXItPmRp cnR5LngyLCBpbmZvLT52YXIueHJlcykgLSB4OwotCWggPSBtaW4ocGFyLT5kaXJ0eS55MiwgaW5m by0+dmFyLnlyZXMpIC0geTsKLQlwYXItPmRpcnR5LngxID0gcGFyLT5kaXJ0eS54MiA9IDA7Ci0J cGFyLT5kaXJ0eS55MSA9IHBhci0+ZGlydHkueTIgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnBhci0+ZGlydHkubG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJnBhci0+Ym9fbXV0ZXgp OworCWN1cl9mYiA9IHBhci0+c2V0X2ZiOworCWlmICghY3VyX2ZiKQorCQlnb3RvIG91dF91bmxv Y2s7CiAKLQlmb3IgKGkgPSB5ICogc3RyaWRlOyBpIDwgaW5mby0+Zml4LnNtZW1fbGVuIC8gNDsg aSArPSBzdHJpZGUpIHsKLQkJZm9yIChrID0gaSt4OyBrIDwgaSt4K3cgJiYgayA8IGluZm8tPmZp eC5zbWVtX2xlbiAvIDQ7IGsrKykKLQkJCWlvd3JpdGUzMihzcmNba10sIHZyYW1fbWVtICsgayk7 CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBhci0+ZGlydHkubG9jaywgaXJxX2ZsYWdzKTsKKwlpZiAo IXBhci0+ZGlydHkuYWN0aXZlKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBhci0+ZGly dHkubG9jaywgaXJxX2ZsYWdzKTsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotI2lmIDAKLQlE Uk1fSU5GTygiJXMsICgldSwgJXUpICgldXgldSlcbiIsIF9fZnVuY19fLCB4LCB5LCB3LCBoKTsK LSNlbmRpZgorCS8qCisJICogSGFuZGxlIHBhbm5pbmcgd2hlbiBjb3B5aW5nIGZyb20gdm1hbGxv YyB0byBmcmFtZWJ1ZmZlci4KKwkgKiBDbGlwIGRpcnR5IGFyZWEgdG8gZnJhbWVidWZmZXIuCisJ ICovCisJY3BwID0gKGN1cl9mYi0+Yml0c19wZXJfcGl4ZWwgKyA3KSAvIDg7CisJbWF4X3ggPSBw YXItPmZiX3ggKyBjdXJfZmItPndpZHRoOworCW1heF95ID0gcGFyLT5mYl95ICsgY3VyX2ZiLT5o ZWlnaHQ7CisKKwlkc3RfeDEgPSBwYXItPmRpcnR5LngxIC0gcGFyLT5mYl94OworCWRzdF95MSA9 IHBhci0+ZGlydHkueTEgLSBwYXItPmZiX3k7CisJZHN0X3gxID0gbWF4X3QoczMyLCBkc3RfeDEs IDApOworCWRzdF95MSA9IG1heF90KHMzMiwgZHN0X3kxLCAwKTsKKworCWRzdF94MiA9IHBhci0+ ZGlydHkueDIgLSBwYXItPmZiX3g7CisJZHN0X3kyID0gcGFyLT5kaXJ0eS55MiAtIHBhci0+ZmJf eTsKKwlkc3RfeDIgPSBtaW5fdChzMzIsIGRzdF94MiwgbWF4X3gpOworCWRzdF95MiA9IG1pbl90 KHMzMiwgZHN0X3kyLCBtYXhfeSk7CisJdyA9IGRzdF94MiAtIGRzdF94MTsKKwloID0gZHN0X3ky IC0gZHN0X3kxOworCXcgPSBtYXhfdChzMzIsIDAsIHcpOworCWggPSBtYXhfdChzMzIsIDAsIGgp OwogCi0JY21kID0gdm13X2ZpZm9fcmVzZXJ2ZSh2bXdfcHJpdiwgc2l6ZW9mKCpjbWQpKTsKLQlp ZiAodW5saWtlbHkoY21kID09IE5VTEwpKSB7Ci0JCURSTV9FUlJPUigiRmlmbyByZXNlcnZlIGZh aWxlZC5cbiIpOwotCQlyZXR1cm47CisJcGFyLT5kaXJ0eS54MSA9IHBhci0+ZGlydHkueDIgPSAw OworCXBhci0+ZGlydHkueTEgPSBwYXItPmRpcnR5LnkyID0gMDsKKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZwYXItPmRpcnR5LmxvY2ssIGlycV9mbGFncyk7CisKKwlpZiAodyAmJiBoKSB7CisJ CWRzdF9wdHIgPSAodTggKilwYXItPmJvX3B0ciAgKworCQkJKGRzdF95MSAqIHBhci0+c2V0X2Zi LT5waXRjaGVzWzBdICsgZHN0X3gxICogY3BwKTsKKwkJc3JjX3B0ciA9ICh1OCAqKXBhci0+dm1h bGxvYyArCisJCQkoKGRzdF95MSArIHBhci0+ZmJfeSkgKiBpbmZvLT5maXgubGluZV9sZW5ndGgg KworCQkJIChkc3RfeDEgKyBwYXItPmZiX3gpICogY3BwKTsKKworCQl3aGlsZSAoaC0tID4gMCkg eworCQkJbWVtY3B5KGRzdF9wdHIsIHNyY19wdHIsIHcqY3BwKTsKKwkJCWRzdF9wdHIgKz0gcGFy LT5zZXRfZmItPnBpdGNoZXNbMF07CisJCQlzcmNfcHRyICs9IGluZm8tPmZpeC5saW5lX2xlbmd0 aDsKKwkJfQorCisJCWNsaXAueDEgPSBkc3RfeDE7CisJCWNsaXAueDIgPSBkc3RfeDI7CisJCWNs aXAueTEgPSBkc3RfeTE7CisJCWNsaXAueTIgPSBkc3RfeTI7CisKKwkJV0FSTl9PTl9PTkNFKHBh ci0+c2V0X2ZiLT5mdW5jcy0+ZGlydHkoY3VyX2ZiLCBOVUxMLCAwLCAwLAorCQkJCQkJICAgICAg ICZjbGlwLCAxKSk7CisJCXZtd19maWZvX2ZsdXNoKHZtd19wcml2LCBmYWxzZSk7CiAJfQotCi0J Y21kLT5oZWFkZXIgPSBjcHVfdG9fbGUzMihTVkdBX0NNRF9VUERBVEUpOwotCWNtZC0+Ym9keS54 ID0gY3B1X3RvX2xlMzIoeCk7Ci0JY21kLT5ib2R5LnkgPSBjcHVfdG9fbGUzMih5KTsKLQljbWQt PmJvZHkud2lkdGggPSBjcHVfdG9fbGUzMih3KTsKLQljbWQtPmJvZHkuaGVpZ2h0ID0gY3B1X3Rv X2xlMzIoaCk7Ci0Jdm13X2ZpZm9fY29tbWl0KHZtd19wcml2LCBzaXplb2YoKmNtZCkpOwotCXZt d19maWZvX2ZsdXNoKHZtd19wcml2LCBmYWxzZSk7CitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9j aygmcGFyLT5ib19tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIHZtd19mYl9kaXJ0eV9tYXJrKHN0 cnVjdCB2bXdfZmJfcGFyICpwYXIsCkBAIC0yOTIsNiArMjc2LDI4IEBAIHN0YXRpYyB2b2lkIHZt d19mYl9kaXJ0eV9tYXJrKHN0cnVjdCB2bXdfZmJfcGFyICpwYXIsCiAJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmcGFyLT5kaXJ0eS5sb2NrLCBmbGFncyk7CiB9CiAKK3N0YXRpYyBpbnQgdm13X2Zi X3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJICAgICAgc3Ry dWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHZtd19mYl9wYXIgKnBhciA9IGluZm8tPnBh cjsKKworCWlmICgodmFyLT54b2Zmc2V0ICsgdmFyLT54cmVzKSA+IHZhci0+eHJlc192aXJ0dWFs IHx8CisJICAgICh2YXItPnlvZmZzZXQgKyB2YXItPnlyZXMpID4gdmFyLT55cmVzX3ZpcnR1YWwp IHsKKwkJRFJNX0VSUk9SKCJSZXF1ZXN0ZWQgcGFubmluZyBjYW4gbm90IGZpdCBpbiBmcmFtZWJ1 ZmZlclxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2xvY2soJnBhci0+Ym9f bXV0ZXgpOworCXBhci0+ZmJfeCA9IHZhci0+eG9mZnNldDsKKwlwYXItPmZiX3kgPSB2YXItPnlv ZmZzZXQ7CisJaWYgKHBhci0+c2V0X2ZiKQorCQl2bXdfZmJfZGlydHlfbWFyayhwYXIsIHBhci0+ ZmJfeCwgcGFyLT5mYl95LCBwYXItPnNldF9mYi0+d2lkdGgsCisJCQkJICBwYXItPnNldF9mYi0+ aGVpZ2h0KTsKKwltdXRleF91bmxvY2soJnBhci0+Ym9fbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9 CisKIHN0YXRpYyB2b2lkIHZtd19kZWZlcnJlZF9pbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKIAkJ CSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlbGlzdCkKIHsKQEAgLTM1OSwzMyArMzY1LDEyIEBA IHN0YXRpYyB2b2lkIHZtd19mYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0 IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCiAgKiBCcmluZyB1cCBjb2RlCiAgKi8KIAotc3RhdGlj IHN0cnVjdCBmYl9vcHMgdm13X2ZiX29wcyA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQku ZmJfY2hlY2tfdmFyID0gdm13X2ZiX2NoZWNrX3ZhciwKLQkuZmJfc2V0X3BhciA9IHZtd19mYl9z ZXRfcGFyLAotCS5mYl9zZXRjb2xyZWcgPSB2bXdfZmJfc2V0Y29scmVnLAotCS5mYl9maWxscmVj dCA9IHZtd19mYl9maWxscmVjdCwKLQkuZmJfY29weWFyZWEgPSB2bXdfZmJfY29weWFyZWEsCi0J LmZiX2ltYWdlYmxpdCA9IHZtd19mYl9pbWFnZWJsaXQsCi0JLmZiX3Bhbl9kaXNwbGF5ID0gdm13 X2ZiX3Bhbl9kaXNwbGF5LAotCS5mYl9ibGFuayA9IHZtd19mYl9ibGFuaywKLX07Ci0KIHN0YXRp YyBpbnQgdm13X2ZiX2NyZWF0ZV9ibyhzdHJ1Y3Qgdm13X3ByaXZhdGUgKnZtd19wcml2LAogCQkJ ICAgIHNpemVfdCBzaXplLCBzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKipvdXQpCiB7CiAJc3RydWN0 IHZtd19kbWFfYnVmZmVyICp2bXdfYm87Ci0Jc3RydWN0IHR0bV9wbGFjZSBuZV9wbGFjZSA9IHZt d192cmFtX25lX3BsYWNlbWVudC5wbGFjZW1lbnRbMF07Ci0Jc3RydWN0IHR0bV9wbGFjZW1lbnQg bmVfcGxhY2VtZW50OwogCWludCByZXQ7CiAKLQluZV9wbGFjZW1lbnQubnVtX3BsYWNlbWVudCA9 IDE7Ci0JbmVfcGxhY2VtZW50LnBsYWNlbWVudCA9ICZuZV9wbGFjZTsKLQluZV9wbGFjZW1lbnQu bnVtX2J1c3lfcGxhY2VtZW50ID0gMTsKLQluZV9wbGFjZW1lbnQuYnVzeV9wbGFjZW1lbnQgPSAm bmVfcGxhY2U7Ci0KLQluZV9wbGFjZS5scGZuID0gKHNpemUgKyBQQUdFX1NJWkUgLSAxKSA+PiBQ QUdFX1NISUZUOwotCiAJKHZvaWQpIHR0bV93cml0ZV9sb2NrKCZ2bXdfcHJpdi0+cmVzZXJ2YXRp b25fc2VtLCBmYWxzZSk7CiAKIAl2bXdfYm8gPSBrbWFsbG9jKHNpemVvZigqdm13X2JvKSwgR0ZQ X0tFUk5FTCk7CkBAIC0zOTUsMTQgKzM4MCwxMyBAQCBzdGF0aWMgaW50IHZtd19mYl9jcmVhdGVf Ym8oc3RydWN0IHZtd19wcml2YXRlICp2bXdfcHJpdiwKIAl9CiAKIAlyZXQgPSB2bXdfZG1hYnVm X2luaXQodm13X3ByaXYsIHZtd19ibywgc2l6ZSwKLQkJCSAgICAgICZuZV9wbGFjZW1lbnQsCisJ CQkgICAgICAmdm13X3N5c19wbGFjZW1lbnQsCiAJCQkgICAgICBmYWxzZSwKIAkJCSAgICAgICZ2 bXdfZG1hYnVmX2JvX2ZyZWUpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gZXJy X3VubG9jazsgLyogaW5pdCBmcmVlcyB0aGUgYnVmZmVyIG9uIGZhaWx1cmUgKi8KIAogCSpvdXQg PSB2bXdfYm87Ci0KIAl0dG1fd3JpdGVfdW5sb2NrKCZ2bXdfcHJpdi0+cmVzZXJ2YXRpb25fc2Vt KTsKIAogCXJldHVybiAwOwpAQCAtNDEyLDE0ICszOTYsMjQ5IEBAIGVycl91bmxvY2s6CiAJcmV0 dXJuIHJldDsKIH0KIAorc3RhdGljIGludCB2bXdfZmJfY29tcHV0ZV9kZXB0aChzdHJ1Y3QgZmJf dmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCQlpbnQgKmRlcHRoKQoreworCXN3aXRjaCAodmFyLT5i aXRzX3Blcl9waXhlbCkgeworCWNhc2UgMzI6CisJCSpkZXB0aCA9ICh2YXItPnRyYW5zcC5sZW5n dGggPiAwKSA/IDMyIDogMjQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiQmFk IGJwcCAldS5cbiIsIHZhci0+Yml0c19wZXJfcGl4ZWwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2bXdfZmJfa21zX2RldGFjaChzdHJ1Y3Qg dm13X2ZiX3BhciAqcGFyLAorCQkJICAgICBib29sIGRldGFjaF9ibywKKwkJCSAgICAgYm9vbCB1 bnJlZl9ibykKK3sKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpjdXJfZmIgPSBwYXItPnNldF9m YjsKKwlpbnQgcmV0OworCisJLyogRGV0YWNoIHRoZSBLTVMgZnJhbWVidWZmZXIgZnJvbSBjcnRj cyAqLworCWlmIChwYXItPnNldF9tb2RlKSB7CisJCXN0cnVjdCBkcm1fbW9kZV9zZXQgc2V0Owor CisJCXNldC5jcnRjID0gcGFyLT5jcnRjOworCQlzZXQueCA9IDA7CisJCXNldC55ID0gMDsKKwkJ c2V0Lm1vZGUgPSBOVUxMOworCQlzZXQuZmIgPSBOVUxMOworCQlzZXQubnVtX2Nvbm5lY3RvcnMg PSAxOworCQlzZXQuY29ubmVjdG9ycyA9ICZwYXItPmNvbjsKKwkJcmV0ID0gZHJtX21vZGVfc2V0 X2NvbmZpZ19pbnRlcm5hbCgmc2V0KTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJDb3Vs ZCBub3QgdW5zZXQgYSBtb2RlLlxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWRybV9tb2Rl X2Rlc3Ryb3kocGFyLT52bXdfcHJpdi0+ZGV2LCBwYXItPnNldF9tb2RlKTsKKwkJcGFyLT5zZXRf bW9kZSA9IE5VTEw7CisJfQorCisJaWYgKGN1cl9mYikgeworCQlkcm1fZnJhbWVidWZmZXJfdW5y ZWZlcmVuY2UoY3VyX2ZiKTsKKwkJcGFyLT5zZXRfZmIgPSBOVUxMOworCX0KKworCWlmIChwYXIt PnZtd19ibyAmJiBkZXRhY2hfYm8pIHsKKwkJaWYgKHBhci0+Ym9fcHRyKSB7CisJCQl0dG1fYm9f a3VubWFwKCZwYXItPm1hcCk7CisJCQlwYXItPmJvX3B0ciA9IE5VTEw7CisJCX0KKwkJaWYgKHVu cmVmX2JvKQorCQkJdm13X2RtYWJ1Zl91bnJlZmVyZW5jZSgmcGFyLT52bXdfYm8pOworCQllbHNl CisJCQl2bXdfZG1hYnVmX3VucGluKHBhci0+dm13X3ByaXYsIHBhci0+dm13X2JvLCBmYWxzZSk7 CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdm13X2ZiX2ttc19mcmFtZWJ1ZmZl cihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZHJtX21vZGVfZmJfY21kIG1vZGVf Y21kOworCXN0cnVjdCB2bXdfZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IGZiX3Zh cl9zY3JlZW5pbmZvICp2YXIgPSAmaW5mby0+dmFyOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmN1cl9mYjsKKwlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICp2ZmI7CisJaW50IHJldCA9IDA7CisJ c2l6ZV90IG5ld19ib19zaXplOworCisJcmV0ID0gdm13X2ZiX2NvbXB1dGVfZGVwdGgodmFyLCAm bW9kZV9jbWQuZGVwdGgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltb2RlX2NtZC53 aWR0aCA9IHZhci0+eHJlczsKKwltb2RlX2NtZC5oZWlnaHQgPSB2YXItPnlyZXM7CisJbW9kZV9j bWQuYnBwID0gdmFyLT5iaXRzX3Blcl9waXhlbDsKKwltb2RlX2NtZC5waXRjaCA9ICgobW9kZV9j bWQuYnBwICsgNykgLyA4KSAqIG1vZGVfY21kLndpZHRoOworCisJY3VyX2ZiID0gcGFyLT5zZXRf ZmI7CisJaWYgKGN1cl9mYiAmJiBjdXJfZmItPndpZHRoID09IG1vZGVfY21kLndpZHRoICYmCisJ ICAgIGN1cl9mYi0+aGVpZ2h0ID09IG1vZGVfY21kLmhlaWdodCAmJgorCSAgICBjdXJfZmItPmJp dHNfcGVyX3BpeGVsID09IG1vZGVfY21kLmJwcCAmJgorCSAgICBjdXJfZmItPmRlcHRoID09IG1v ZGVfY21kLmRlcHRoICYmCisJICAgIGN1cl9mYi0+cGl0Y2hlc1swXSA9PSBtb2RlX2NtZC5waXRj aCkKKwkJcmV0dXJuIDA7CisKKwkvKiBOZWVkIG5ldyBidWZmZXIgb2JqZWN0ID8gKi8KKwluZXdf Ym9fc2l6ZSA9IChzaXplX3QpIG1vZGVfY21kLnBpdGNoICogKHNpemVfdCkgbW9kZV9jbWQuaGVp Z2h0OworCXJldCA9IHZtd19mYl9rbXNfZGV0YWNoKHBhciwKKwkJCQlwYXItPmJvX3NpemUgPCBu ZXdfYm9fc2l6ZSB8fAorCQkJCXBhci0+Ym9fc2l6ZSA+IDIqbmV3X2JvX3NpemUsCisJCQkJdHJ1 ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICghcGFyLT52bXdfYm8pIHsKKwkJ cmV0ID0gdm13X2ZiX2NyZWF0ZV9ibyhwYXItPnZtd19wcml2LCBuZXdfYm9fc2l6ZSwKKwkJCQkg ICAgICAgJnBhci0+dm13X2JvKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQg Y3JlYXRpbmcgYSBidWZmZXIgb2JqZWN0IGZvciAiCisJCQkJICAiZmJkZXYuXG4iKTsKKwkJCXJl dHVybiByZXQ7CisJCX0KKwkJcGFyLT5ib19zaXplID0gbmV3X2JvX3NpemU7CisJfQorCisJdmZi ID0gdm13X2ttc19uZXdfZnJhbWVidWZmZXIocGFyLT52bXdfcHJpdiwgcGFyLT52bXdfYm8sIE5V TEwsCisJCQkJICAgICAgdHJ1ZSwgJm1vZGVfY21kKTsKKwlpZiAoSVNfRVJSKHZmYikpCisJCXJl dHVybiBQVFJfRVJSKHZmYik7CisKKwlwYXItPnNldF9mYiA9ICZ2ZmItPmJhc2U7CisKKwlpZiAo IXBhci0+Ym9fcHRyKSB7CisJCS8qCisJCSAqIFBpbiBiZWZvcmUgbWFwcGluZy4gU2luY2Ugd2Ug ZG9uJ3Qga25vdyBpbiB3aGF0IHBsYWNlbWVudAorCQkgKiB0byBwaW4sIGNhbGwgaW50byBLTVMg dG8gZG8gaXQgZm9yIHVzLgorCQkgKi8KKwkJcmV0ID0gdmZiLT5waW4odmZiKTsKKwkJaWYgKHJl dCkgeworCQkJRFJNX0VSUk9SKCJDb3VsZCBub3QgcGluIHRoZSBmYmRldiBmcmFtZWJ1ZmZlci5c biIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXJldCA9IHR0bV9ib19rbWFwKCZwYXItPnZt d19iby0+YmFzZSwgMCwKKwkJCQkgIHBhci0+dm13X2JvLT5iYXNlLm51bV9wYWdlcywgJnBhci0+ bWFwKTsKKwkJaWYgKHJldCkgeworCQkJdmZiLT51bnBpbih2ZmIpOworCQkJRFJNX0VSUk9SKCJD b3VsZCBub3QgbWFwIHRoZSBmYmRldiBmcmFtZWJ1ZmZlci5cbiIpOworCQkJcmV0dXJuIHJldDsK KwkJfQorCisJCXBhci0+Ym9fcHRyID0gdHRtX2ttYXBfb2JqX3ZpcnR1YWwoJnBhci0+bWFwLCAm cGFyLT5ib19pb3dyaXRlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2bXdf ZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3Qgdm13X2ZiX3BhciAq cGFyID0gaW5mby0+cGFyOworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqdm13X3ByaXYgPSBwYXItPnZt d19wcml2OworCXN0cnVjdCBkcm1fbW9kZV9zZXQgc2V0OworCXN0cnVjdCBmYl92YXJfc2NyZWVu aW5mbyAqdmFyID0gJmluZm8tPnZhcjsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBuZXdfbW9k ZSA9IHsgRFJNX01PREUoImZiX21vZGUiLAorCQlEUk1fTU9ERV9UWVBFX0RSSVZFUiwKKwkJMCwg MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJRFJNX01PREVfRkxBR19OSFNZTkMgfCBE Uk1fTU9ERV9GTEFHX1BWU1lOQykKKwl9OworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpvbGRf bW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKwlpbnQgcmV0OworCisJb2xk X21vZGUgPSBwYXItPnNldF9tb2RlOworCW1vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUodm13X3By aXYtPmRldiwgJm5ld19tb2RlKTsKKwlpZiAoIW1vZGUpIHsKKwkJRFJNX0VSUk9SKCJDb3VsZCBu b3QgY3JlYXRlIG5ldyBmYiBtb2RlLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1v ZGUtPmhkaXNwbGF5ID0gdmFyLT54cmVzOworCW1vZGUtPnZkaXNwbGF5ID0gdmFyLT55cmVzOwor CXZtd19ndWVzc19tb2RlX3RpbWluZyhtb2RlKTsKKworCWlmIChvbGRfbW9kZSAmJiBkcm1fbW9k ZV9lcXVhbChvbGRfbW9kZSwgbW9kZSkpIHsKKwkJZHJtX21vZGVfZGVzdHJveSh2bXdfcHJpdi0+ ZGV2LCBtb2RlKTsKKwkJbW9kZSA9IG9sZF9tb2RlOworCQlvbGRfbW9kZSA9IE5VTEw7CisJfSBl bHNlIGlmICghdm13X2ttc192YWxpZGF0ZV9tb2RlX3ZyYW0odm13X3ByaXYsCisJCQkJCSAgICAg ICBtb2RlLT5oZGlzcGxheSAqCisJCQkJCSAgICAgICAodmFyLT5iaXRzX3Blcl9waXhlbCArIDcp IC8gOCwKKwkJCQkJICAgICAgIG1vZGUtPnZkaXNwbGF5KSkgeworCQlkcm1fbW9kZV9kZXN0cm95 KHZtd19wcml2LT5kZXYsIG1vZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdXRleF9s b2NrKCZwYXItPmJvX211dGV4KTsKKwlkcm1fbW9kZXNldF9sb2NrX2FsbCh2bXdfcHJpdi0+ZGV2 KTsKKwlyZXQgPSB2bXdfZmJfa21zX2ZyYW1lYnVmZmVyKGluZm8pOworCWlmIChyZXQpCisJCWdv dG8gb3V0X3VubG9jazsKKworCXBhci0+ZmJfeCA9IHZhci0+eG9mZnNldDsKKwlwYXItPmZiX3kg PSB2YXItPnlvZmZzZXQ7CisKKwlzZXQuY3J0YyA9IHBhci0+Y3J0YzsKKwlzZXQueCA9IDA7CisJ c2V0LnkgPSAwOworCXNldC5tb2RlID0gbW9kZTsKKwlzZXQuZmIgPSBwYXItPnNldF9mYjsKKwlz ZXQubnVtX2Nvbm5lY3RvcnMgPSAxOworCXNldC5jb25uZWN0b3JzID0gJnBhci0+Y29uOworCisJ cmV0ID0gZHJtX21vZGVfc2V0X2NvbmZpZ19pbnRlcm5hbCgmc2V0KTsKKwlpZiAocmV0KQorCQln b3RvIG91dF91bmxvY2s7CisKKwl2bXdfZmJfZGlydHlfbWFyayhwYXIsIHBhci0+ZmJfeCwgcGFy LT5mYl95LAorCQkJICBwYXItPnNldF9mYi0+d2lkdGgsIHBhci0+c2V0X2ZiLT5oZWlnaHQpOwor CisJLyogSWYgdGhlcmUgYWxyZWFkeSB3YXMgc3R1ZmYgZGlydHkgd2Ugd29udAorCSAqIHNjaGVk dWxlIGEgbmV3IHdvcmssIHNvIGxldHMgZG8gaXQgbm93ICovCisKKyNpZiAoZGVmaW5lZChWTVdH RlhfU1RBTkRBTE9ORSkgJiYgZGVmaW5lZChWTVdHRlhfRkJfREVGRVJSRUQpKQorCXNjaGVkdWxl X2RlbGF5ZWRfd29yaygmcGFyLT5kZWZfcGFyLmRlZmVycmVkX3dvcmssIDApOworI2Vsc2UKKwlz Y2hlZHVsZV9kZWxheWVkX3dvcmsoJmluZm8tPmRlZmVycmVkX3dvcmssIDApOworI2VuZGlmCisK K291dF91bmxvY2s6CisJaWYgKG9sZF9tb2RlKQorCQlkcm1fbW9kZV9kZXN0cm95KHZtd19wcml2 LT5kZXYsIG9sZF9tb2RlKTsKKwlwYXItPnNldF9tb2RlID0gbW9kZTsKKworCWRybV9tb2Rlc2V0 X3VubG9ja19hbGwodm13X3ByaXYtPmRldik7CisJbXV0ZXhfdW5sb2NrKCZwYXItPmJvX211dGV4 KTsKKworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIHN0cnVjdCBmYl9vcHMgdm13X2ZiX29w cyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZmJfY2hlY2tfdmFyID0gdm13X2ZiX2No ZWNrX3ZhciwKKwkuZmJfc2V0X3BhciA9IHZtd19mYl9zZXRfcGFyLAorCS5mYl9zZXRjb2xyZWcg PSB2bXdfZmJfc2V0Y29scmVnLAorCS5mYl9maWxscmVjdCA9IHZtd19mYl9maWxscmVjdCwKKwku ZmJfY29weWFyZWEgPSB2bXdfZmJfY29weWFyZWEsCisJLmZiX2ltYWdlYmxpdCA9IHZtd19mYl9p bWFnZWJsaXQsCisJLmZiX3Bhbl9kaXNwbGF5ID0gdm13X2ZiX3Bhbl9kaXNwbGF5LAorCS5mYl9i bGFuayA9IHZtd19mYl9ibGFuaywKK307CisKIGludCB2bXdfZmJfaW5pdChzdHJ1Y3Qgdm13X3By aXZhdGUgKnZtd19wcml2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9ICZ2bXdfcHJpdi0+ ZGV2LT5wZGV2LT5kZXY7CiAJc3RydWN0IHZtd19mYl9wYXIgKnBhcjsKIAlzdHJ1Y3QgZmJfaW5m byAqaW5mbzsKLQl1bnNpZ25lZCBpbml0aWFsX3dpZHRoLCBpbml0aWFsX2hlaWdodDsKIAl1bnNp Z25lZCBmYl93aWR0aCwgZmJfaGVpZ2h0OwogCXVuc2lnbmVkIGZiX2JwcCwgZmJfZGVwdGgsIGZi X29mZnNldCwgZmJfcGl0Y2gsIGZiX3NpemU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmlu aXRfbW9kZTsKIAlpbnQgcmV0OwogCiAJZmJfYnBwID0gMzI7CkBAIC00MjksOSArNjQ4LDYgQEAg aW50IHZtd19mYl9pbml0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqdm13X3ByaXYpCiAJZmJfd2lkdGgg PSBtaW4odm13X3ByaXYtPmZiX21heF93aWR0aCwgKHVuc2lnbmVkKTIwNDgpOwogCWZiX2hlaWdo dCA9IG1pbih2bXdfcHJpdi0+ZmJfbWF4X2hlaWdodCwgKHVuc2lnbmVkKTIwNDgpOwogCi0JaW5p dGlhbF93aWR0aCA9IG1pbih2bXdfcHJpdi0+aW5pdGlhbF93aWR0aCwgZmJfd2lkdGgpOwotCWlu aXRpYWxfaGVpZ2h0ID0gbWluKHZtd19wcml2LT5pbml0aWFsX2hlaWdodCwgZmJfaGVpZ2h0KTsK LQogCWZiX3BpdGNoID0gZmJfd2lkdGggKiBmYl9icHAgLyA4OwogCWZiX3NpemUgPSBmYl9waXRj aCAqIGZiX2hlaWdodDsKIAlmYl9vZmZzZXQgPSB2bXdfcmVhZCh2bXdfcHJpdiwgU1ZHQV9SRUdf RkJfT0ZGU0VUKTsKQEAgLTQ0NSwzNSArNjYxLDM0IEBAIGludCB2bXdfZmJfaW5pdChzdHJ1Y3Qg dm13X3ByaXZhdGUgKnZtd19wcml2KQogCSAqLwogCXZtd19wcml2LT5mYl9pbmZvID0gaW5mbzsK IAlwYXIgPSBpbmZvLT5wYXI7CisJbWVtc2V0KHBhciwgMCwgc2l6ZW9mKCpwYXIpKTsKIAlwYXIt PnZtd19wcml2ID0gdm13X3ByaXY7Ci0JcGFyLT5kZXB0aCA9IGZiX2RlcHRoOwotCXBhci0+YnBw ID0gZmJfYnBwOwogCXBhci0+dm1hbGxvYyA9IE5VTEw7CiAJcGFyLT5tYXhfd2lkdGggPSBmYl93 aWR0aDsKIAlwYXItPm1heF9oZWlnaHQgPSBmYl9oZWlnaHQ7CiAKKwlkcm1fbW9kZXNldF9sb2Nr X2FsbCh2bXdfcHJpdi0+ZGV2KTsKKwlyZXQgPSB2bXdfa21zX2ZiZGV2X2luaXRfZGF0YSh2bXdf cHJpdiwgMCwgcGFyLT5tYXhfd2lkdGgsCisJCQkJICAgICAgcGFyLT5tYXhfaGVpZ2h0LCAmcGFy LT5jb24sCisJCQkJICAgICAgJnBhci0+Y3J0YywgJmluaXRfbW9kZSk7CisJaWYgKHJldCkgewor CQlkcm1fbW9kZXNldF91bmxvY2tfYWxsKHZtd19wcml2LT5kZXYpOworCQlnb3RvIGVycl9rbXM7 CisJfQorCisJaW5mby0+dmFyLnhyZXMgPSBpbml0X21vZGUtPmhkaXNwbGF5OworCWluZm8tPnZh ci55cmVzID0gaW5pdF9tb2RlLT52ZGlzcGxheTsKKwlkcm1fbW9kZXNldF91bmxvY2tfYWxsKHZt d19wcml2LT5kZXYpOworCiAJLyoKIAkgKiBDcmVhdGUgYnVmZmVycyBhbmQgYWxsb2MgbWVtb3J5 CiAJICovCi0JcGFyLT52bWFsbG9jID0gdm1hbGxvYyhmYl9zaXplKTsKKwlwYXItPnZtYWxsb2Mg PSB2emFsbG9jKGZiX3NpemUpOwogCWlmICh1bmxpa2VseShwYXItPnZtYWxsb2MgPT0gTlVMTCkp IHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKLQlyZXQgPSB2bXdf ZmJfY3JlYXRlX2JvKHZtd19wcml2LCBmYl9zaXplLCAmcGFyLT52bXdfYm8pOwotCWlmICh1bmxp a2VseShyZXQgIT0gMCkpCi0JCWdvdG8gZXJyX2ZyZWU7Ci0KLQlyZXQgPSB0dG1fYm9fa21hcCgm cGFyLT52bXdfYm8tPmJhc2UsCi0JCQkgIDAsCi0JCQkgIHBhci0+dm13X2JvLT5iYXNlLm51bV9w YWdlcywKLQkJCSAgJnBhci0+bWFwKTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQlnb3Rv IGVycl91bnJlZjsKLQlwYXItPmJvX3B0ciA9IHR0bV9rbWFwX29ial92aXJ0dWFsKCZwYXItPm1h cCwgJnBhci0+Ym9faW93cml0ZSk7Ci0JcGFyLT5ib19zaXplID0gZmJfc2l6ZTsKLQogCS8qCiAJ ICogRml4ZWQgYW5kIHZhcgogCSAqLwpAQCAtNTA5LDE4ICs3MjQsMTQgQEAgaW50IHZtd19mYl9p bml0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqdm13X3ByaXYpCiAKIAlpbmZvLT52YXIueHJlc192aXJ0 dWFsID0gZmJfd2lkdGg7CiAJaW5mby0+dmFyLnlyZXNfdmlydHVhbCA9IGZiX2hlaWdodDsKLQlp bmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPSBwYXItPmJwcDsKKwlpbmZvLT52YXIuYml0c19wZXJf cGl4ZWwgPSBmYl9icHA7CiAJaW5mby0+dmFyLnhvZmZzZXQgPSAwOwogCWluZm8tPnZhci55b2Zm c2V0ID0gMDsKIAlpbmZvLT52YXIuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CiAJaW5mby0+ dmFyLmhlaWdodCA9IC0xOwogCWluZm8tPnZhci53aWR0aCA9IC0xOwogCi0JaW5mby0+dmFyLnhy ZXMgPSBpbml0aWFsX3dpZHRoOwotCWluZm8tPnZhci55cmVzID0gaW5pdGlhbF9oZWlnaHQ7Ci0K IAkvKiBVc2UgZGVmYXVsdCBzY3JhdGNoIHBpeG1hcCAoaW5mby0+cGl4bWFwLmZsYWdzID0gRkJf UElYTUFQX1NZU1RFTSkgKi8KLQogCWluZm8tPmFwZXJ0dXJlcyA9IGFsbG9jX2FwZXJ0dXJlcygx KTsKIAlpZiAoIWluZm8tPmFwZXJ0dXJlcykgewogCQlyZXQgPSAtRU5PTUVNOwpAQCAtNTM2LDYg Kzc0Nyw3IEBAIGludCB2bXdfZmJfaW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKnZtd19wcml2KQog CXBhci0+ZGlydHkueTEgPSBwYXItPmRpcnR5LnkyID0gMDsKIAlwYXItPmRpcnR5LmFjdGl2ZSA9 IHRydWU7CiAJc3Bpbl9sb2NrX2luaXQoJnBhci0+ZGlydHkubG9jayk7CisJbXV0ZXhfaW5pdCgm cGFyLT5ib19tdXRleCk7CiAJaW5mby0+ZmJkZWZpbyA9ICZ2bXdfZGVmaW87CiAJZmJfZGVmZXJy ZWRfaW9faW5pdChpbmZvKTsKIApAQCAtNTQzLDE2ICs3NTUsMTYgQEAgaW50IHZtd19mYl9pbml0 KHN0cnVjdCB2bXdfcHJpdmF0ZSAqdm13X3ByaXYpCiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkK IAkJZ290byBlcnJfZGVmaW87CiAKKwl2bXdfZmJfc2V0X3BhcihpbmZvKTsKKwogCXJldHVybiAw OwogCiBlcnJfZGVmaW86CiAJZmJfZGVmZXJyZWRfaW9fY2xlYW51cChpbmZvKTsKIGVycl9hcGVy OgotCXR0bV9ib19rdW5tYXAoJnBhci0+bWFwKTsKLWVycl91bnJlZjoKLQl0dG1fYm9fdW5yZWYo KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqKikmcGFyLT52bXdfYm8pOwogZXJyX2ZyZWU6CiAJ dmZyZWUocGFyLT52bWFsbG9jKTsKK2Vycl9rbXM6CiAJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZv KTsKIAl2bXdfcHJpdi0+ZmJfaW5mbyA9IE5VTEw7CiAKQEAgLTU2MywyMiArNzc1LDE4IEBAIGlu dCB2bXdfZmJfY2xvc2Uoc3RydWN0IHZtd19wcml2YXRlICp2bXdfcHJpdikKIHsKIAlzdHJ1Y3Qg ZmJfaW5mbyAqaW5mbzsKIAlzdHJ1Y3Qgdm13X2ZiX3BhciAqcGFyOwotCXN0cnVjdCB0dG1fYnVm ZmVyX29iamVjdCAqYm87CiAKIAlpZiAoIXZtd19wcml2LT5mYl9pbmZvKQogCQlyZXR1cm4gMDsK IAogCWluZm8gPSB2bXdfcHJpdi0+ZmJfaW5mbzsKIAlwYXIgPSBpbmZvLT5wYXI7Ci0JYm8gPSAm cGFyLT52bXdfYm8tPmJhc2U7Ci0JcGFyLT52bXdfYm8gPSBOVUxMOwogCiAJLyogPz8/IG9yZGVy ICovCiAJZmJfZGVmZXJyZWRfaW9fY2xlYW51cChpbmZvKTsKIAl1bnJlZ2lzdGVyX2ZyYW1lYnVm ZmVyKGluZm8pOwogCi0JdHRtX2JvX2t1bm1hcCgmcGFyLT5tYXApOwotCXR0bV9ib191bnJlZigm Ym8pOworCSh2b2lkKSB2bXdfZmJfa21zX2RldGFjaChwYXIsIHRydWUsIHRydWUpOwogCiAJdmZy ZWUocGFyLT52bWFsbG9jKTsKIAlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwpAQCAtNTk3LDIw ICs4MDUsMTYgQEAgaW50IHZtd19mYl9vZmYoc3RydWN0IHZtd19wcml2YXRlICp2bXdfcHJpdikK IAogCWluZm8gPSB2bXdfcHJpdi0+ZmJfaW5mbzsKIAlwYXIgPSBpbmZvLT5wYXI7Ci0JaWYgKCFw YXItPmJvX3B0cikKLQkJcmV0dXJuIDA7CiAKLQl2bXdfa21zX3NhdmVfdmdhKHZtd19wcml2KTsK IAlzcGluX2xvY2tfaXJxc2F2ZSgmcGFyLT5kaXJ0eS5sb2NrLCBmbGFncyk7CiAJcGFyLT5kaXJ0 eS5hY3RpdmUgPSBmYWxzZTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwYXItPmRpcnR5Lmxv Y2ssIGZsYWdzKTsKIAogCWZsdXNoX2RlbGF5ZWRfd29yaygmaW5mby0+ZGVmZXJyZWRfd29yayk7 CiAKLQlwYXItPmJvX3B0ciA9IE5VTEw7Ci0JdHRtX2JvX2t1bm1hcCgmcGFyLT5tYXApOwotCi0J dm13X2RtYWJ1Zl91bnBpbih2bXdfcHJpdiwgcGFyLT52bXdfYm8sIGZhbHNlKTsKKwltdXRleF9s b2NrKCZwYXItPmJvX211dGV4KTsKKwkodm9pZCkgdm13X2ZiX2ttc19kZXRhY2gocGFyLCB0cnVl LCBmYWxzZSk7CisJbXV0ZXhfdW5sb2NrKCZwYXItPmJvX211dGV4KTsKIAogCXJldHVybiAwOwog fQpAQCAtNjIwLDggKzgyNCw2IEBAIGludCB2bXdfZmJfb24oc3RydWN0IHZtd19wcml2YXRlICp2 bXdfcHJpdikKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlzdHJ1Y3Qgdm13X2ZiX3BhciAqcGFy OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JYm9vbCBkdW1teTsKLQlpbnQgcmV0OwogCiAJaWYg KCF2bXdfcHJpdi0+ZmJfaW5mbykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC02MjksMzkgKzgzMSwx MCBAQCBpbnQgdm13X2ZiX29uKHN0cnVjdCB2bXdfcHJpdmF0ZSAqdm13X3ByaXYpCiAJaW5mbyA9 IHZtd19wcml2LT5mYl9pbmZvOwogCXBhciA9IGluZm8tPnBhcjsKIAotCS8qIHdlIGFyZSBhbHJl YWR5IGFjdGl2ZSAqLwotCWlmIChwYXItPmJvX3B0ciAhPSBOVUxMKQotCQlyZXR1cm4gMDsKLQot CS8qIE1ha2Ugc3VyZSB0aGF0IGFsbCBvdmVybGF5cyBhcmUgc3RvcGVkIHdoZW4gd2UgdGFrZSBv dmVyICovCi0Jdm13X292ZXJsYXlfc3RvcF9hbGwodm13X3ByaXYpOwotCi0JcmV0ID0gdm13X2Rt YWJ1Zl9waW5faW5fc3RhcnRfb2ZfdnJhbSh2bXdfcHJpdiwgcGFyLT52bXdfYm8sIGZhbHNlKTsK LQlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7Ci0JCURSTV9FUlJPUigiY291bGQgbm90IG1vdmUg YnVmZmVyIHRvIHN0YXJ0IG9mIFZSQU1cbiIpOwotCQlnb3RvIGVycl9ub19idWZmZXI7Ci0JfQot Ci0JcmV0ID0gdHRtX2JvX2ttYXAoJnBhci0+dm13X2JvLT5iYXNlLAotCQkJICAwLAotCQkJICBw YXItPnZtd19iby0+YmFzZS5udW1fcGFnZXMsCi0JCQkgICZwYXItPm1hcCk7Ci0JQlVHX09OKHJl dCAhPSAwKTsKLQlwYXItPmJvX3B0ciA9IHR0bV9rbWFwX29ial92aXJ0dWFsKCZwYXItPm1hcCwg JmR1bW15KTsKLQorCXZtd19mYl9zZXRfcGFyKGluZm8pOwogCXNwaW5fbG9ja19pcnFzYXZlKCZw YXItPmRpcnR5LmxvY2ssIGZsYWdzKTsKIAlwYXItPmRpcnR5LmFjdGl2ZSA9IHRydWU7CiAJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmcGFyLT5kaXJ0eS5sb2NrLCBmbGFncyk7Ci0Jdm13X2ttc19y ZXN0b3JlX3ZnYSh2bXdfcHJpdik7Ci0KLWVycl9ub19idWZmZXI6Ci0Jdm13X2ZiX3NldF9wYXIo aW5mbyk7Ci0KLQl2bXdfZmJfZGlydHlfbWFyayhwYXIsIDAsIDAsIGluZm8tPnZhci54cmVzLCBp bmZvLT52YXIueXJlcyk7Ci0KLQkvKiBJZiB0aGVyZSBhbHJlYWR5IHdhcyBzdHVmZiBkaXJ0eSB3 ZSB3b250Ci0JICogc2NoZWR1bGUgYSBuZXcgd29yaywgc28gbGV0cyBkbyBpdCBub3cgKi8KLQlz Y2hlZHVsZV9kZWxheWVkX3dvcmsoJmluZm8tPmRlZmVycmVkX3dvcmssIDApOwotCisgCiAJcmV0 dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMu YyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jCmluZGV4IGRjOWY3ZDAuLjA2 ZmY3YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jCkBAIC0zNzIsNyArMzcyLDgg QEAgc3RhdGljIHZvaWQgdm13X2ZyYW1lYnVmZmVyX3N1cmZhY2VfZGVzdHJveShzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlcikKIAogCWRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKGZy YW1lYnVmZmVyKTsKIAl2bXdfc3VyZmFjZV91bnJlZmVyZW5jZSgmdmZicy0+c3VyZmFjZSk7Ci0J dHRtX2Jhc2Vfb2JqZWN0X3VucmVmKCZ2ZmJzLT5iYXNlLnVzZXJfb2JqKTsKKwlpZiAodmZicy0+ YmFzZS51c2VyX29iaikKKwkJdHRtX2Jhc2Vfb2JqZWN0X3VucmVmKCZ2ZmJzLT5iYXNlLnVzZXJf b2JqKTsKIAogCWtmcmVlKHZmYnMpOwogfQpAQCAtNTgyLDcgKzU4Myw4IEBAIHN0YXRpYyB2b2lk IHZtd19mcmFtZWJ1ZmZlcl9kbWFidWZfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm cmFtZWJ1ZmZlcikKIAogCWRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKGZyYW1lYnVmZmVyKTsKIAl2 bXdfZG1hYnVmX3VucmVmZXJlbmNlKCZ2ZmJkLT5idWZmZXIpOwotCXR0bV9iYXNlX29iamVjdF91 bnJlZigmdmZiZC0+YmFzZS51c2VyX29iaik7CisJaWYgKHZmYmQtPmJhc2UudXNlcl9vYmopCisJ CXR0bV9iYXNlX29iamVjdF91bnJlZigmdmZiZC0+YmFzZS51c2VyX29iaik7CiAKIAlrZnJlZSh2 ZmJkKTsKIH0KQEAgLTE0NjIsNyArMTQ2NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSB2bXdfa21zX2Nvbm5lY3Rvcl9idWlsdGluW10gPSB7CiAgKiBAbW9kZSAtIFBvaW50ZXIg dG8gYSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSB3aXRoIGhkaXNwbGF5IGFuZCB2ZGlzcGxheQog ICogbWVtYmVycyBmaWxsZWQgaW4uCiAgKi8KLXN0YXRpYyB2b2lkIHZtd19ndWVzc19tb2RlX3Rp bWluZyhzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3ZvaWQgdm13X2d1ZXNzX21vZGVf dGltaW5nKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogewogCW1vZGUtPmhzeW5jX3N0 YXJ0ID0gbW9kZS0+aGRpc3BsYXkgKyA1MDsKIAltb2RlLT5oc3luY19lbmQgPSBtb2RlLT5oc3lu Y19zdGFydCArIDUwOwpAQCAtMjAwMSwzICsyMDAzLDU4IEBAIGludCB2bXdfa21zX3VwZGF0ZV9w cm94eShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsCiAKIAlyZXR1cm4gMDsKIH0KKworaW50IHZt d19rbXNfZmJkZXZfaW5pdF9kYXRhKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkg ICAgdW5zaWduZWQgdW5pdCwKKwkJCSAgICB1MzIgbWF4X3dpZHRoLAorCQkJICAgIHUzMiBtYXhf aGVpZ2h0LAorCQkJICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICoqcF9jb24sCisJCQkgICAgc3Ry dWN0IGRybV9jcnRjICoqcF9jcnRjLAorCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoq cF9tb2RlKQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb247CisJc3RydWN0IHZtd19kaXNw bGF5X3VuaXQgKmR1OworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCWludCBpID0g MDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29uLCAmZGV2X3ByaXYtPmRldi0+bW9kZV9jb25m aWcuY29ubmVjdG9yX2xpc3QsCisJCQkgICAgaGVhZCkgeworCQlpZiAoaSA9PSB1bml0KQorCQkJ YnJlYWs7CisKKwkJKytpOworCX0KKworCWlmIChpICE9IHVuaXQpIHsKKwkJRFJNX0VSUk9SKCJD b3VsZCBub3QgZmluZCBpbml0aWFsIGRpc3BsYXkgdW5pdC5cbiIpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwlpZiAobGlzdF9lbXB0eSgmY29uLT5tb2RlcykpCisJCSh2b2lkKSB2bXdfZHVf Y29ubmVjdG9yX2ZpbGxfbW9kZXMoY29uLCBtYXhfd2lkdGgsIG1heF9oZWlnaHQpOworCisJaWYg KGxpc3RfZW1wdHkoJmNvbi0+bW9kZXMpKSB7CisJCURSTV9FUlJPUigiQ291bGQgbm90IGZpbmQg aW5pdGlhbCBkaXNwbGF5IG1vZGUuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHUg PSB2bXdfY29ubmVjdG9yX3RvX2R1KGNvbik7CisJKnBfY29uID0gY29uOworCSpwX2NydGMgPSAm ZHUtPmNydGM7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGUsICZjb24tPm1vZGVzLCBoZWFk KSB7CisJCWlmIChtb2RlLT50eXBlICYgRFJNX01PREVfVFlQRV9QUkVGRVJSRUQpCisJCQlicmVh azsKKwl9CisKKwlpZiAobW9kZS0+dHlwZSAmIERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEKQorCQkq cF9tb2RlID0gbW9kZTsKKwllbHNlIHsKKwkJV0FSTl9PTkNFKHRydWUsICJDb3VsZCBub3QgZmlu ZCBpbml0aWFsIHByZWZlcnJlZCBtb2RlLlxuIik7CisJCSpwX21vZGUgPSBsaXN0X2ZpcnN0X2Vu dHJ5KCZjb24tPm1vZGVzLAorCQkJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSwKKwkJCQkJ ICAgaGVhZCk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vdm13Z2Z4L3Ztd2dmeF9rbXMuaCBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2tt cy5oCmluZGV4IDMxMWVmZmMuLmViNmM4NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92 bXdnZngvdm13Z2Z4X2ttcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2tt cy5oCkBAIC0yNDMsNiArMjQzLDE0IEBAIHZtd19rbXNfbmV3X2ZyYW1lYnVmZmVyKHN0cnVjdCB2 bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQlzdHJ1Y3Qgdm13X3N1cmZhY2UgKnN1cmZhY2UsCiAJ CQlib29sIG9ubHlfMmQsCiAJCQljb25zdCBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kICptb2RlX2Nt ZCk7CitpbnQgdm13X2ttc19mYmRldl9pbml0X2RhdGEoc3RydWN0IHZtd19wcml2YXRlICpkZXZf cHJpdiwKKwkJCSAgICB1bnNpZ25lZCB1bml0LAorCQkJICAgIHUzMiBtYXhfd2lkdGgsCisJCQkg ICAgdTMyIG1heF9oZWlnaHQsCisJCQkgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKipwX2NvbiwK KwkJCSAgICBzdHJ1Y3QgZHJtX2NydGMgKipwX2NydGMsCisJCQkgICAgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKipwX21vZGUpOwordm9pZCB2bXdfZ3Vlc3NfbW9kZV90aW1pbmcoc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUpOwogCiAvKgogICogTGVnYWN5IGRpc3BsYXkgdW5pdCBmdW5j dGlvbnMgLSB2bXdnZnhfbGR1LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngv dm13Z2Z4X2xkdS5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfbGR1LmMKaW5kZXgg ZjBmZDU2NS4uNTE3MjFjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdn ZnhfbGR1LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfbGR1LmMKQEAgLTI3 OSw3ICsyNzksNiBAQCBzdGF0aWMgaW50IHZtd19sZHVfY3J0Y19zZXRfY29uZmlnKHN0cnVjdCBk cm1fbW9kZV9zZXQgKnNldCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jdm13X2ZiX29mZihk ZXZfcHJpdik7CiAJdm13X3N2Z2FfZW5hYmxlKGRldl9wcml2KTsKIAogCWNydGMtPnByaW1hcnkt PmZiID0gZmI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zY3Ju LmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zY3JuLmMKaW5kZXggNzNmZTIwZS4u OGI1YmMxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc2Nybi5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Njcm4uYwpAQCAtMzY5LDcgKzM2 OSw2IEBAIHN0YXRpYyBpbnQgdm13X3NvdV9jcnRjX3NldF9jb25maWcoc3RydWN0IGRybV9tb2Rl X3NldCAqc2V0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl2bXdfZmJfb2ZmKGRldl9wcml2 KTsKIAl2bXdfc3ZnYV9lbmFibGUoZGV2X3ByaXYpOwogCiAJaWYgKG1vZGUtPmhkaXNwbGF5ICE9 IGNydGMtPm1vZGUuaGRpc3BsYXkgfHwKLS0gCjIuMS4wCgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2 ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwK