From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville Syrjala Subject: [PATCH v4 4/8] drm/i915: Overcome display engine stride limits via GTT remapping Date: Thu, 24 Jan 2019 20:58:49 +0200 Message-ID: <20190124185849.25908-1-ville.syrjala@linux.intel.com> References: <20190118152720.24643-5-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id EF1B36E37A for ; Thu, 24 Jan 2019 18:58:52 +0000 (UTC) In-Reply-To: <20190118152720.24643-5-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KClRo ZSBkaXNwbGF5IGVuZ2luZSBzdHJpZGUgbGltaXRzIGFyZSBnZXR0aW5nIGluIG91ciB3YXkuIE9u IFNLTCsKd2UgYXJlIGxpbWl0ZWQgdG8gOGsgcGl4ZWxzLCB3aGljaCBpcyBlYXNpbHkgZXhjZWVk ZWQgd2l0aCB0aHJlZQo0ayBkaXNwbGF5cy4gVG8gb3ZlcmNvbWUgdGhpcyBsaW1pdGF0aW9uIHdl IGNhbiByZW1hcCB0aGUgcGFnZXMKaW4gdGhlIEdUVCB0byBwcm92aWRlIHRoZSBkaXNwbGF5IGVu Z2luZSB3aXRoIGEgdmlldyBvZiBtZW1vcnkKd2l0aCBhIHNtYWxsZXIgc3RyaWRlLgoKVGhlIGNv ZGUgaXMgbW9zdGx5IGFscmVhZHkgdGhlcmUgYXMgV2UgYWxyZWFkeSBwbGF5IHRyaWNrcyB3aXRo CnRoZSBwbGFuZSBzdXJmYWNlIGFkZHJlc3MgYW5kIHgveSBvZmZzZXRzLgoKQSBmZXcgY2F2ZWF0 cyBhcHBseToKKiBsaW5lYXIgYnVmZmVycyBuZWVkIHRoZSBmYiBzdHJpZGUgdG8gYmUgcGFnZSBh bGlnbmVkLCBhcwogIG90aGVyd2lzZSB0aGUgcmVtYXBwZWQgbGluZXMgd291bGRuJ3Qgc3RhcnQg YXQgdGhlIHNhbWUKICBzcG90CiogY29tcHJlc3NlZCBidWZmZXJzIGNhbid0IGJlIHJlbWFwcGVk IGR1ZSB0byB0aGUgbmV3CiAgY2NzIGhhc2ggbW9kZSBjYXVzaW5nIHRoZSB2aXJ0dWFsIGFkZHJl c3Mgb2YgdGhlIHBhZ2VzCiAgdG8gYWZmZWN0IHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgY29t cHJlc3NlZCBkYXRhLiBJSVJDCiAgdGhlIG9sZCBoYXNoIHdhcyBsaW1pdGVkIHRvIHRoZSBsb3cg MTIgYml0cyBzbyBpZiB3ZSB3ZXJlCiAgdXNpbmcgdGhhdCBtb2RlIHdlIGNvdWxkIHJlbWFwLiBB cyBpdCBzdGFuZHMgd2UganVzdCByZWZ1c2UKICB0byByZW1hcHAgd2l0aCBjb21wcmVzc2VkIGZi cy4KKiBubyByZW1hcHBpbmcgZ2VuMi8zIGFzIHdlJ2QgbmVlZCBhIGZlbmNlIGZvciB0aGUgcmVt YXBwZWQKICB2bWEsIHdoaWNoIHdlIGN1cnJlbnRseSBkb24ndCBoYXZlLiBOZWVkIHRvIGRlYWwg d2l0aCB0aGUKICBmZW5jZSBQT1QgcmVxdWlyZW1lbnRzLCBhbmQgZG8gc29tZXRoaW5nIGFib3V0 IHRoZSBnZW4yCiAgZ3R0IHBhZ2Ugc2l6ZSB2cyB0aWxlIHNpemUgZGlmZmVyZW5jZQoKdjI6IFJl YmFzZSBkdWUgdG8gaXNfY2NzX21vZGlmaWVyKCkKICAgIEZpeCB1cCB0aGUgc2tsKyBzdHJpZGVf bXVsdCBtZXNzCiAgICBtZW1zZXQoKSB0aGUgZ3R0X3ZpZXcgYmVjYXVzZSBvdGhlcndpc2Ugd2Ug Y291bGQgbGVhdmUKICAgIGp1bmsgaW4gcGxhbmVbMV0gd2hlbiBnb2luZyBmcm9tIDIgcGxhbmUg dG8gMSBwbGFuZSBmb3JtYXQKdjM6IGludGVsX2NoZWNrX3BsYW5lX3N0cmlkZSgpIHdhcyBzcGxp dCBvdXQKdjQ6IERyb3AgdGhlIGFsaWduZWQgdmlld3BvcnQgc3R1ZmYsIGl0IHdhcyBtZWFudCBm b3IgY2NzIHdoaWNoCiAgICBjYW4ndCBiZSByZW1hcHBlZCBhbnl3YXkKdjU6IEludHJvZHVjZSBp bnRlbF9wbGFuZV9jYW5fcmVtYXAoKQogICAgUmVvcmRlciB0aGUgY29kZSBzbyB0aGF0IHBsYW5l X3N0YXRlLT52aWV3IGdldHMgZmlsbGVkCiAgICBldmVuIGZvciBpbnZpc2libGUgcGxhbmVzLCBv dGhlcndpc2Ugd2UnZCBrZWVwIHVzaW5nCiAgICBzdGFsZSB2YWx1ZXMgYW5kIGNvdWxkIGV4cGxv ZGUgZHVyaW5nIHJlbWFwcGluZy4gVGhlIG5ldwogICAgbG9naWMgbmV2ZXIgcmVtYXBzIGludmlz aWJsZSBwbGFuZXMgc2luY2Ugd2UgZG9uJ3QgaGF2ZQogICAgYSB2aWV3cG9ydCwgYW5kIGluc3Rl YWQgcGlucyB0aGUgZnVsbCBmYiBpbnN0ZWFkCgpTaWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJqw6Rs w6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuYyB8IDM5MyArKysrKysrKysrKysrKysrKysrKystLS0tLS0KIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9zcHJpdGUuYyAgfCAgMzQgKystCiAzIGZpbGVzIGNoYW5nZWQsIDMzNCBp bnNlcnRpb25zKCspLCA5NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNw bGF5LmMKaW5kZXggMTdjN2VkZWU5NTg0Li4zNzEzYjZmMTc5NmUgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kaXNwbGF5LmMKQEAgLTE4NjUsNyArMTg2NSw3IEBAIGludGVsX3RpbGVfd2lkdGhf Ynl0ZXMoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjb2xvcl9wbGFuZSkK IAogCXN3aXRjaCAoZmItPm1vZGlmaWVyKSB7CiAJY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6 Ci0JCXJldHVybiBjcHA7CisJCXJldHVybiBpbnRlbF90aWxlX3NpemUoZGV2X3ByaXYpOwogCWNh c2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6CiAJCWlmIChJU19HRU4oZGV2X3ByaXYsIDIpKQog CQkJcmV0dXJuIDEyODsKQEAgLTE5MDgsMTEgKzE5MDgsOCBAQCBpbnRlbF90aWxlX3dpZHRoX2J5 dGVzKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpCiBz dGF0aWMgdW5zaWduZWQgaW50CiBpbnRlbF90aWxlX2hlaWdodChjb25zdCBzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5lKQogewotCWlmIChmYi0+bW9kaWZpZXIgPT0g RFJNX0ZPUk1BVF9NT0RfTElORUFSKQotCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiBpbnRl bF90aWxlX3NpemUodG9faTkxNShmYi0+ZGV2KSkgLwotCQkJaW50ZWxfdGlsZV93aWR0aF9ieXRl cyhmYiwgY29sb3JfcGxhbmUpOworCXJldHVybiBpbnRlbF90aWxlX3NpemUodG9faTkxNShmYi0+ ZGV2KSkgLworCQlpbnRlbF90aWxlX3dpZHRoX2J5dGVzKGZiLCBjb2xvcl9wbGFuZSk7CiB9CiAK IC8qIFJldHVybiB0aGUgdGlsZSBkaW1lbnNpb25zIGluIHBpeGVsIHVuaXRzICovCkBAIC0yMTcw LDE2ICsyMTY3LDggQEAgdm9pZCBpbnRlbF9hZGRfZmJfb2Zmc2V0cyhpbnQgKngsIGludCAqeSwK IAkJCSAgaW50IGNvbG9yX3BsYW5lKQogCiB7Ci0JY29uc3Qgc3RydWN0IGludGVsX2ZyYW1lYnVm ZmVyICppbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKHN0YXRlLT5iYXNlLmZiKTsKLQl1 bnNpZ25lZCBpbnQgcm90YXRpb24gPSBzdGF0ZS0+YmFzZS5yb3RhdGlvbjsKLQotCWlmIChkcm1f cm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkgewotCQkqeCArPSBpbnRlbF9mYi0+cm90YXRl ZFtjb2xvcl9wbGFuZV0ueDsKLQkJKnkgKz0gaW50ZWxfZmItPnJvdGF0ZWRbY29sb3JfcGxhbmVd Lnk7Ci0JfSBlbHNlIHsKLQkJKnggKz0gaW50ZWxfZmItPm5vcm1hbFtjb2xvcl9wbGFuZV0ueDsK LQkJKnkgKz0gaW50ZWxfZmItPm5vcm1hbFtjb2xvcl9wbGFuZV0ueTsKLQl9CisJKnggKz0gc3Rh dGUtPmNvbG9yX3BsYW5lW2NvbG9yX3BsYW5lXS54OworCSp5ICs9IHN0YXRlLT5jb2xvcl9wbGFu ZVtjb2xvcl9wbGFuZV0ueTsKIH0KIAogc3RhdGljIHUzMiBpbnRlbF9hZGp1c3RfdGlsZV9vZmZz ZXQoaW50ICp4LCBpbnQgKnksCkBAIC0yNDU5LDYgKzI0NDgsMTE5IEBAIGJvb2wgaXNfY2NzX21v ZGlmaWVyKHU2NCBtb2RpZmllcikKIAkgICAgICAgbW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9E X1lmX1RJTEVEX0NDUzsKIH0KIAorc3RhdGljCit1MzIgaW50ZWxfcGxhbmVfZmJfbWF4X3N0cmlk ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgICB1MzIgcGl4ZWxf Zm9ybWF0LCB1NjQgbW9kaWZpZXIpCit7CisJc3RydWN0IGludGVsX2NydGMgKmNydGM7CisJc3Ry dWN0IGludGVsX3BsYW5lICpwbGFuZTsKKworCS8qCisJICogV2UgYXNzdW1lIHRoZSBwcmltYXJ5 IHBsYW5lIGZvciBwaXBlIEEgaGFzCisJICogdGhlIGhpZ2hlc3Qgc3RyaWRlIGxpbWl0cyBvZiB0 aGVtIGFsbC4KKwkgKi8KKwljcnRjID0gaW50ZWxfZ2V0X2NydGNfZm9yX3BpcGUoZGV2X3ByaXYs IFBJUEVfQSk7CisJcGxhbmUgPSB0b19pbnRlbF9wbGFuZShjcnRjLT5iYXNlLnByaW1hcnkpOwor CisJcmV0dXJuIHBsYW5lLT5tYXhfc3RyaWRlKHBsYW5lLCBwaXhlbF9mb3JtYXQsIG1vZGlmaWVy LAorCQkJCSBEUk1fTU9ERV9ST1RBVEVfMCk7Cit9CisKK3N0YXRpYwordTMyIGludGVsX2ZiX21h eF9zdHJpZGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJdTMyIHBpeGVs X2Zvcm1hdCwgdTY0IG1vZGlmaWVyKQoreworCXJldHVybiBpbnRlbF9wbGFuZV9mYl9tYXhfc3Ry aWRlKGRldl9wcml2LCBwaXhlbF9mb3JtYXQsIG1vZGlmaWVyKTsKK30KKworc3RhdGljIHUzMgor aW50ZWxfZmJfc3RyaWRlX2FsaWdubWVudChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiwgaW50IGNvbG9yX3BsYW5lKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUoZmItPmRldik7CisKKwlpZiAoZmItPm1vZGlmaWVyID09IERSTV9GT1JNQVRf TU9EX0xJTkVBUikgeworCQl1MzIgbWF4X3N0cmlkZSA9IGludGVsX3BsYW5lX2ZiX21heF9zdHJp ZGUoZGV2X3ByaXYsCisJCQkJCQkJICAgZmItPmZvcm1hdC0+Zm9ybWF0LAorCQkJCQkJCSAgIGZi LT5tb2RpZmllcik7CisKKwkJLyoKKwkJICogVG8gbWFrZSByZW1hcHBpbmcgd2l0aCBsaW5lYXIg Z2VuZXJhbGx5IGZlYXNpYmxlCisJCSAqIHdlIG5lZWQgdGhlIHN0cmlkZSB0byBiZSBwYWdlIGFs aWduZWQuCisJCSAqLworCQlpZiAoZmItPnBpdGNoZXNbY29sb3JfcGxhbmVdID4gbWF4X3N0cmlk ZSkKKwkJCXJldHVybiBpbnRlbF90aWxlX3NpemUoZGV2X3ByaXYpOworCQllbHNlCisJCQlyZXR1 cm4gNjQ7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGludGVsX3RpbGVfd2lkdGhfYnl0ZXMoZmIsIGNv bG9yX3BsYW5lKTsKKwl9Cit9CisKK2Jvb2wgaW50ZWxfcGxhbmVfY2FuX3JlbWFwKGNvbnN0IHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGludGVsX3Bs YW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT5iYXNlLnBsYW5lKTsKKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRl dik7CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFz ZS5mYjsKKwlpbnQgaTsKKworCS8qIFdlIGRvbid0IHdhbnQgdG8gZGVhbCB3aXRoIHJlbWFwcGlu ZyB3aXRoIGN1cnNvcnMgKi8KKwlpZiAocGxhbmUtPmlkID09IFBMQU5FX0NVUlNPUikKKwkJcmV0 dXJuIGZhbHNlOworCisJLyoKKwkgKiBUaGUgZHNwbGF5IGVuZ2luZSBsaW1pdHMgYWxyZWFkeSBt YXRjaCB0aGUgcmVuZGVyCisJICogZW5naW5lIGxpbWl0cywgc28gbm90IG11Y2ggcG9pbnQgaW4g cmVtYXBwaW5nLgorCSAqIFdvdWxkIGFsc28gbmVlZCB0byBkZWFsIHdpdGggdGhlIGZlbmNlIFBP VCBhbGlnbm1lbnQKKwkgKiBhbmQgZ2VuMiAyS2lCIEdUVCB0aWxlIHNpemUuCisJICovCisJaWYg KElOVEVMX0dFTihkZXZfcHJpdikgPCA0KQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIFRo ZSBuZXcgQ0NTIGhhc2ggbW9kZSBpc24ndCBjb21wYXRpYmxlIHdpdGggcmVtYXBwaW5nIGFzCisJ ICogdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgcGFnZXMgYWZmZWN0cyB0aGUgY29tcHJlc3Nl ZCBkYXRhLgorCSAqLworCWlmIChpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkKKwkJcmV0 dXJuIGZhbHNlOworCisJLyogTGluZWFyIG5lZWRzIGEgcGFnZSBhbGlnbmVkIHN0cmlkZSBmb3Ig cmVtYXBwaW5nICovCisJaWYgKGZiLT5tb2RpZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIp IHsKKwkJdW5zaWduZWQgaW50IGFsaWdubWVudCA9IGludGVsX3RpbGVfc2l6ZShkZXZfcHJpdikg LSAxOworCisJCWZvciAoaSA9IDA7IGkgPCBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzOyBpKyspIHsK KwkJCWlmIChmYi0+cGl0Y2hlc1tpXSAmIGFsaWdubWVudCkKKwkJCQlyZXR1cm4gZmFsc2U7CisJ CX0KKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfcGxhbmVfbmVl ZHNfcmVtYXAoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sK KwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUt PmJhc2UucGxhbmUpOworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVf c3RhdGUtPmJhc2UuZmI7CisJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJh c2Uucm90YXRpb247CisJdTMyIHN0cmlkZSwgbWF4X3N0cmlkZTsKKworCS8qCisJICogTm8gcmVt YXBwaW5nIGZvciBpbnZpc2libGUgcGxhbmVzIHNpbmNlIHdlIGRvbid0IGhhdmUKKwkgKiBhbiBh Y3R1YWwgc291cmNlIHZpZXdwb3J0IHRvIHJlbWFwLgorCSAqLworCWlmICghcGxhbmVfc3RhdGUt PmJhc2UudmlzaWJsZSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFpbnRlbF9wbGFuZV9jYW5f cmVtYXAocGxhbmVfc3RhdGUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBGSVhNRSBvdGhlciBj b2xvciBwbGFuZXM/ICovCisJc3RyaWRlID0gaW50ZWxfZmJfcGl0Y2goZmIsIDAsIHJvdGF0aW9u KTsKKwltYXhfc3RyaWRlID0gcGxhbmUtPm1heF9zdHJpZGUocGxhbmUsIGZiLT5mb3JtYXQtPmZv cm1hdCwKKwkJCQkgICAgICAgZmItPm1vZGlmaWVyLCByb3RhdGlvbik7CisKKwlyZXR1cm4gc3Ry aWRlID4gbWF4X3N0cmlkZTsKK30KKwogc3RhdGljIGludAogaW50ZWxfZmlsbF9mYl9pbmZvKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJICAgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIpCkBAIC0yNjI0LDYgKzI3MjYsMTcyIEBAIGludGVsX2ZpbGxfZmJfaW5mbyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2 b2lkCitpbnRlbF9wbGFuZV9yZW1hcF9ndHQoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFu ZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQorCQl0b19p OTE1KHBsYW5lX3N0YXRlLT5iYXNlLnBsYW5lLT5kZXYpOworCXN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7CisJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVy ICppbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKKwlzdHJ1Y3QgaW50ZWxfcm90 YXRpb25faW5mbyAqaW5mbyA9ICZwbGFuZV9zdGF0ZS0+dmlldy5yb3RhdGVkOworCXVuc2lnbmVk IGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uOworCWludCBpLCBudW1f cGxhbmVzID0gZmItPmZvcm1hdC0+bnVtX3BsYW5lczsKKwl1bnNpZ25lZCBpbnQgdGlsZV9zaXpl ID0gaW50ZWxfdGlsZV9zaXplKGRldl9wcml2KTsKKwl1bnNpZ25lZCBpbnQgc3JjX3gsIHNyY195 OworCXVuc2lnbmVkIGludCBzcmNfdywgc3JjX2g7CisJdTMyIGd0dF9vZmZzZXQgPSAwOworCisJ bWVtc2V0KCZwbGFuZV9zdGF0ZS0+dmlldywgMCwgc2l6ZW9mKHBsYW5lX3N0YXRlLT52aWV3KSk7 CisJcGxhbmVfc3RhdGUtPnZpZXcudHlwZSA9IGRybV9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRp b24pID8KKwkJSTkxNV9HR1RUX1ZJRVdfUk9UQVRFRCA6IEk5MTVfR0dUVF9WSUVXX1JFTUFQUEVE OworCisJc3JjX3ggPSBwbGFuZV9zdGF0ZS0+YmFzZS5zcmMueDEgPj4gMTY7CisJc3JjX3kgPSBw bGFuZV9zdGF0ZS0+YmFzZS5zcmMueTEgPj4gMTY7CisJc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgm cGxhbmVfc3RhdGUtPmJhc2Uuc3JjKSA+PiAxNjsKKwlzcmNfaCA9IGRybV9yZWN0X2hlaWdodCgm cGxhbmVfc3RhdGUtPmJhc2Uuc3JjKSA+PiAxNjsKKworCVdBUk5fT04oaXNfY2NzX21vZGlmaWVy KGZiLT5tb2RpZmllcikpOworCisJLyogTWFrZSBzcmMgY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8g dGhlIHZpZXdwb3J0ICovCisJZHJtX3JlY3RfdHJhbnNsYXRlKCZwbGFuZV9zdGF0ZS0+YmFzZS5z cmMsCisJCQkgICAtKHNyY194IDw8IDE2KSwgLShzcmNfeSA8PCAxNikpOworCisJLyogUm90YXRl IHNyYyBjb29yZGluYXRlcyB0byBtYXRjaCByb3RhdGVkIEdUVCB2aWV3ICovCisJaWYgKGRybV9y b3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKQorCQlkcm1fcmVjdF9yb3RhdGUoJnBsYW5lX3N0 YXRlLT5iYXNlLnNyYywKKwkJCQlzcmNfdyA8PCAxNiwgc3JjX2ggPDwgMTYsCisJCQkJRFJNX01P REVfUk9UQVRFXzI3MCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BsYW5lczsgaSsrKSB7CisJ CXVuc2lnbmVkIGludCBoc3ViID0gaSA/IGZiLT5mb3JtYXQtPmhzdWIgOiAxOworCQl1bnNpZ25l ZCBpbnQgdnN1YiA9IGkgPyBmYi0+Zm9ybWF0LT52c3ViIDogMTsKKwkJdW5zaWduZWQgaW50IGNw cCA9IGZiLT5mb3JtYXQtPmNwcFtpXTsKKwkJdW5zaWduZWQgaW50IHRpbGVfd2lkdGgsIHRpbGVf aGVpZ2h0OworCQl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsKKwkJdW5zaWduZWQgaW50IHBp dGNoX3RpbGVzOworCQl1bnNpZ25lZCBpbnQgeCwgeTsKKwkJdTMyIG9mZnNldDsKKworCQlpbnRl bF90aWxlX2RpbXMoZmIsIGksICZ0aWxlX3dpZHRoLCAmdGlsZV9oZWlnaHQpOworCisJCXggPSBz cmNfeCAvIGhzdWI7CisJCXkgPSBzcmNfeSAvIHZzdWI7CisJCXdpZHRoID0gc3JjX3cgLyBoc3Vi OworCQloZWlnaHQgPSBzcmNfaCAvIHZzdWI7CisKKwkJLyoKKwkJICogRmlyc3QgcGl4ZWwgb2Yg dGhlIHNyYyB2aWV3cG9ydCBmcm9tIHRoZQorCQkgKiBzdGFydCBvZiB0aGUgbm9ybWFsIGd0dCBt YXBwaW5nLgorCQkgKi8KKwkJeCArPSBpbnRlbF9mYi0+bm9ybWFsW2ldLng7CisJCXkgKz0gaW50 ZWxfZmItPm5vcm1hbFtpXS55OworCisJCW9mZnNldCA9IGludGVsX2NvbXB1dGVfYWxpZ25lZF9v ZmZzZXQoZGV2X3ByaXYsICZ4LCAmeSwKKwkJCQkJCSAgICAgIGZiLCBpLCBmYi0+cGl0Y2hlc1tp XSwKKwkJCQkJCSAgICAgIERSTV9NT0RFX1JPVEFURV8wLCB0aWxlX3NpemUpOworCQlvZmZzZXQg Lz0gdGlsZV9zaXplOworCisJCWluZm8tPnBsYW5lW2ldLm9mZnNldCA9IG9mZnNldDsKKwkJaW5m by0+cGxhbmVbaV0uc3RyaWRlID0gRElWX1JPVU5EX1VQKGZiLT5waXRjaGVzW2ldLAorCQkJCQkJ ICAgICB0aWxlX3dpZHRoICogY3BwKTsKKwkJaW5mby0+cGxhbmVbaV0ud2lkdGggPSBESVZfUk9V TkRfVVAoeCArIHdpZHRoLCB0aWxlX3dpZHRoKTsKKwkJaW5mby0+cGxhbmVbaV0uaGVpZ2h0ID0g RElWX1JPVU5EX1VQKHkgKyBoZWlnaHQsIHRpbGVfaGVpZ2h0KTsKKworCQlpZiAoZHJtX3JvdGF0 aW9uXzkwX29yXzI3MChyb3RhdGlvbikpIHsKKwkJCXN0cnVjdCBkcm1fcmVjdCByOworCisJCQkv KiByb3RhdGUgdGhlIHgveSBvZmZzZXRzIHRvIG1hdGNoIHRoZSBHVFQgdmlldyAqLworCQkJci54 MSA9IHg7CisJCQlyLnkxID0geTsKKwkJCXIueDIgPSB4ICsgd2lkdGg7CisJCQlyLnkyID0geSAr IGhlaWdodDsKKwkJCWRybV9yZWN0X3JvdGF0ZSgmciwKKwkJCQkJaW5mby0+cGxhbmVbaV0ud2lk dGggKiB0aWxlX3dpZHRoLAorCQkJCQlpbmZvLT5wbGFuZVtpXS5oZWlnaHQgKiB0aWxlX2hlaWdo dCwKKwkJCQkJRFJNX01PREVfUk9UQVRFXzI3MCk7CisJCQl4ID0gci54MTsKKwkJCXkgPSByLnkx OworCisJCQlwaXRjaF90aWxlcyA9IGluZm8tPnBsYW5lW2ldLmhlaWdodDsKKwkJCXBsYW5lX3N0 YXRlLT5jb2xvcl9wbGFuZVtpXS5zdHJpZGUgPSBwaXRjaF90aWxlcyAqIHRpbGVfaGVpZ2h0Owor CisJCQkvKiByb3RhdGUgdGhlIHRpbGUgZGltZW5zaW9ucyB0byBtYXRjaCB0aGUgR1RUIHZpZXcg Ki8KKwkJCXN3YXAodGlsZV93aWR0aCwgdGlsZV9oZWlnaHQpOworCQl9IGVsc2UgeworCQkJcGl0 Y2hfdGlsZXMgPSBpbmZvLT5wbGFuZVtpXS53aWR0aDsKKwkJCXBsYW5lX3N0YXRlLT5jb2xvcl9w bGFuZVtpXS5zdHJpZGUgPSBwaXRjaF90aWxlcyAqIHRpbGVfd2lkdGggKiBjcHA7CisJCX0KKwor CQkvKgorCQkgKiBXZSBvbmx5IGtlZXAgdGhlIHgveSBvZmZzZXRzLCBzbyBwdXNoIGFsbCBvZiB0 aGUKKwkJICogZ3R0IG9mZnNldCBpbnRvIHRoZSB4L3kgb2Zmc2V0cy4KKwkJICovCisJCWludGVs X2FkanVzdF90aWxlX29mZnNldCgmeCwgJnksCisJCQkJCSB0aWxlX3dpZHRoLCB0aWxlX2hlaWdo dCwKKwkJCQkJIHRpbGVfc2l6ZSwgcGl0Y2hfdGlsZXMsCisJCQkJCSBndHRfb2Zmc2V0ICogdGls ZV9zaXplLCAwKTsKKworCQlndHRfb2Zmc2V0ICs9IGluZm8tPnBsYW5lW2ldLndpZHRoICogaW5m by0+cGxhbmVbaV0uaGVpZ2h0OworCisJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS5vZmZz ZXQgPSAwOworCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0ueCA9IHg7CisJCXBsYW5lX3N0 YXRlLT5jb2xvcl9wbGFuZVtpXS55ID0geTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2ludGVsX3Bs YW5lX2NvbXB1dGVfZ3R0KHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7 CisJY29uc3Qgc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICpmYiA9CisJCXRvX2ludGVsX2ZyYW1l YnVmZmVyKHBsYW5lX3N0YXRlLT5iYXNlLmZiKTsKKwl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBw bGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbjsKKwlpbnQgaSwgbnVtX3BsYW5lczsKKwlpbnQgcmV0 OworCisJaWYgKCFmYikKKwkJcmV0dXJuIDA7CisKKwludW1fcGxhbmVzID0gZmItPmJhc2UuZm9y bWF0LT5udW1fcGxhbmVzOworCisJaWYgKGludGVsX3BsYW5lX25lZWRzX3JlbWFwKHBsYW5lX3N0 YXRlKSkgeworCQlpbnRlbF9wbGFuZV9yZW1hcF9ndHQocGxhbmVfc3RhdGUpOworCisJCS8qIFJl bWFwcGluZyBzaG91bGQgdGFrZSBjYXJlIG9mIHRoaXMgYWx3YXlzICovCisJCXJldCA9IGludGVs X3BsYW5lX2NoZWNrX3N0cmlkZShwbGFuZV9zdGF0ZSk7CisJCWlmIChXQVJOX09OKHJldCkpCisJ CQlyZXR1cm4gcmV0OworCisJCXJldHVybiAwOworCX0KKworCWludGVsX2ZpbGxfZmJfZ2d0dF92 aWV3KCZwbGFuZV9zdGF0ZS0+dmlldywgJmZiLT5iYXNlLCByb3RhdGlvbik7CisKKwlmb3IgKGkg PSAwOyBpIDwgbnVtX3BsYW5lczsgaSsrKSB7CisJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtp XS5zdHJpZGUgPSBpbnRlbF9mYl9waXRjaCgmZmItPmJhc2UsIGksIHJvdGF0aW9uKTsKKwkJcGxh bmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ldLm9mZnNldCA9IDA7CisKKwkJaWYgKGRybV9yb3RhdGlv bl85MF9vcl8yNzAocm90YXRpb24pKSB7CisJCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0u eCA9IGZiLT5yb3RhdGVkW2ldLng7CisJCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0ueSA9 IGZiLT5yb3RhdGVkW2ldLnk7CisJCX0gZWxzZSB7CisJCQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxh bmVbaV0ueCA9IGZiLT5ub3JtYWxbaV0ueDsKKwkJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtp XS55ID0gZmItPm5vcm1hbFtpXS55OworCQl9CisJfQorCisJLyogUm90YXRlIHNyYyBjb29yZGlu YXRlcyB0byBtYXRjaCByb3RhdGVkIEdUVCB2aWV3ICovCisJaWYgKGRybV9yb3RhdGlvbl85MF9v cl8yNzAocm90YXRpb24pKQorCQlkcm1fcmVjdF9yb3RhdGUoJnBsYW5lX3N0YXRlLT5iYXNlLnNy YywKKwkJCQlmYi0+YmFzZS53aWR0aCA8PCAxNiwgZmItPmJhc2UuaGVpZ2h0IDw8IDE2LAorCQkJ CURSTV9NT0RFX1JPVEFURV8yNzApOworCisJcmV0ID0gaW50ZWxfcGxhbmVfY2hlY2tfc3RyaWRl KHBsYW5lX3N0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9 CisKIHN0YXRpYyBpbnQgaTl4eF9mb3JtYXRfdG9fZm91cmNjKGludCBmb3JtYXQpCiB7CiAJc3dp dGNoIChmb3JtYXQpIHsKQEAgLTMxMjcsMjYgKzMzOTUsMTUgQEAgc3RhdGljIGludCBza2xfY2hl Y2tfY2NzX2F1eF9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUp CiBpbnQgc2tsX2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZSkKIHsKIAljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5l X3N0YXRlLT5iYXNlLmZiOwotCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5i YXNlLnJvdGF0aW9uOwogCWludCByZXQ7CiAKLQlpbnRlbF9maWxsX2ZiX2dndHRfdmlldygmcGxh bmVfc3RhdGUtPnZpZXcsIGZiLCByb3RhdGlvbik7Ci0JcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5l WzBdLnN0cmlkZSA9IGludGVsX2ZiX3BpdGNoKGZiLCAwLCByb3RhdGlvbik7Ci0JcGxhbmVfc3Rh dGUtPmNvbG9yX3BsYW5lWzFdLnN0cmlkZSA9IGludGVsX2ZiX3BpdGNoKGZiLCAxLCByb3RhdGlv bik7Ci0KLQlyZXQgPSBpbnRlbF9wbGFuZV9jaGVja19zdHJpZGUocGxhbmVfc3RhdGUpOworCXJl dCA9IGludGVsX3BsYW5lX2NvbXB1dGVfZ3R0KHBsYW5lX3N0YXRlKTsKIAlpZiAocmV0KQogCQly ZXR1cm4gcmV0OwogCiAJaWYgKCFwbGFuZV9zdGF0ZS0+YmFzZS52aXNpYmxlKQogCQlyZXR1cm4g MDsKIAotCS8qIFJvdGF0ZSBzcmMgY29vcmRpbmF0ZXMgdG8gbWF0Y2ggcm90YXRlZCBHVFQgdmll dyAqLwotCWlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkKLQkJZHJtX3JlY3Rf cm90YXRlKCZwbGFuZV9zdGF0ZS0+YmFzZS5zcmMsCi0JCQkJZmItPndpZHRoIDw8IDE2LCBmYi0+ aGVpZ2h0IDw8IDE2LAotCQkJCURSTV9NT0RFX1JPVEFURV8yNzApOwotCiAJLyoKIAkgKiBIYW5k bGUgdGhlIEFVWCBzdXJmYWNlIGZpcnN0IHNpbmNlCiAJICogdGhlIG1haW4gc3VyZmFjZSBzZXR1 cCBkZXBlbmRzIG9uIGl0LgpAQCAtMzI2NSwyMCArMzUyMiwyMCBAQCBpbnQgaTl4eF9jaGVja19w bGFuZV9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCiB7CiAJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KIAkJdG9faTkxNShwbGFuZV9zdGF0 ZS0+YmFzZS5wbGFuZS0+ZGV2KTsKLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9 IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwotCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0 YXRlLT5iYXNlLnJvdGF0aW9uOwotCWludCBzcmNfeCA9IHBsYW5lX3N0YXRlLT5iYXNlLnNyYy54 MSA+PiAxNjsKLQlpbnQgc3JjX3kgPSBwbGFuZV9zdGF0ZS0+YmFzZS5zcmMueTEgPj4gMTY7CisJ aW50IHNyY194LCBzcmNfeTsKIAl1MzIgb2Zmc2V0OwogCWludCByZXQ7CiAKLQlpbnRlbF9maWxs X2ZiX2dndHRfdmlldygmcGxhbmVfc3RhdGUtPnZpZXcsIGZiLCByb3RhdGlvbik7Ci0JcGxhbmVf c3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlkZSA9IGludGVsX2ZiX3BpdGNoKGZiLCAwLCByb3Rh dGlvbik7Ci0KLQlyZXQgPSBpbnRlbF9wbGFuZV9jaGVja19zdHJpZGUocGxhbmVfc3RhdGUpOwor CXJldCA9IGludGVsX3BsYW5lX2NvbXB1dGVfZ3R0KHBsYW5lX3N0YXRlKTsKIAlpZiAocmV0KQog CQlyZXR1cm4gcmV0OwogCisJaWYgKCFwbGFuZV9zdGF0ZS0+YmFzZS52aXNpYmxlKQorCQlyZXR1 cm4gMDsKKworCXNyY194ID0gcGxhbmVfc3RhdGUtPmJhc2Uuc3JjLngxID4+IDE2OworCXNyY195 ID0gcGxhbmVfc3RhdGUtPmJhc2Uuc3JjLnkxID4+IDE2OworCiAJaW50ZWxfYWRkX2ZiX29mZnNl dHMoJnNyY194LCAmc3JjX3ksIHBsYW5lX3N0YXRlLCAwKTsKIAogCWlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDQpCkBAIC0zMjg5LDYgKzM1NDYsNyBAQCBpbnQgaTl4eF9jaGVja19wbGFuZV9z dXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCiAKIAkvKiBIU1cv QkRXIGRvIHRoaXMgYXV0b21hZ2ljYWxseSBpbiBoYXJkd2FyZSAqLwogCWlmICghSVNfSEFTV0VM TChkZXZfcHJpdikgJiYgIUlTX0JST0FEV0VMTChkZXZfcHJpdikpIHsKKwkJdW5zaWduZWQgaW50 IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247CiAJCWludCBzcmNfdyA9IGRy bV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+YmFzZS5zcmMpID4+IDE2OwogCQlpbnQgc3JjX2gg PSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT5iYXNlLnNyYykgPj4gMTY7CiAKQEAgLTMz MjUsNiArMzU4MywxMCBAQCBpOXh4X3BsYW5lX2NoZWNrKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlLAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlyZXQgPSBpOXh4X2No ZWNrX3BsYW5lX3N1cmZhY2UocGxhbmVfc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKIAlpZiAoIXBsYW5lX3N0YXRlLT5iYXNlLnZpc2libGUpCiAJCXJldHVybiAwOwogCkBAIC0z MzMyLDEwICszNTk0LDYgQEAgaTl4eF9wbGFuZV9jaGVjayhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSwKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gaTl4eF9j aGVja19wbGFuZV9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0 OwotCiAJcGxhbmVfc3RhdGUtPmN0bCA9IGk5eHhfcGxhbmVfY3RsKGNydGNfc3RhdGUsIHBsYW5l X3N0YXRlKTsKIAogCXJldHVybiAwOwpAQCAtMzQ1OSwxNSArMzcxNyw2IEBAIHN0YXRpYyBib29s IGk5eHhfcGxhbmVfZ2V0X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCiAJcmV0 dXJuIHJldDsKIH0KIAotc3RhdGljIHUzMgotaW50ZWxfZmJfc3RyaWRlX2FsaWdubWVudChjb25z dCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5lKQotewotCWlmIChm Yi0+bW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSKQotCQlyZXR1cm4gNjQ7Ci0JZWxz ZQotCQlyZXR1cm4gaW50ZWxfdGlsZV93aWR0aF9ieXRlcyhmYiwgY29sb3JfcGxhbmUpOwotfQot CiBzdGF0aWMgdm9pZCBza2xfZGV0YWNoX3NjYWxlcihzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxf Y3J0YywgaW50IGlkKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9jcnRjLT5i YXNlLmRldjsKQEAgLTk4MzAsMTkgKzEwMDc5LDE3IEBAIHN0YXRpYyBib29sIGludGVsX2N1cnNv cl9zaXplX29rKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCiAK IHN0YXRpYyBpbnQgaW50ZWxfY3Vyc29yX2NoZWNrX3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICpwbGFuZV9zdGF0ZSkKIHsKLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwotCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5l X3N0YXRlLT5iYXNlLnJvdGF0aW9uOwogCWludCBzcmNfeCwgc3JjX3k7CiAJdTMyIG9mZnNldDsK IAlpbnQgcmV0OwogCi0JaW50ZWxfZmlsbF9mYl9nZ3R0X3ZpZXcoJnBsYW5lX3N0YXRlLT52aWV3 LCBmYiwgcm90YXRpb24pOwotCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5zdHJpZGUgPSBp bnRlbF9mYl9waXRjaChmYiwgMCwgcm90YXRpb24pOwotCi0JcmV0ID0gaW50ZWxfcGxhbmVfY2hl Y2tfc3RyaWRlKHBsYW5lX3N0YXRlKTsKKwlyZXQgPSBpbnRlbF9wbGFuZV9jb21wdXRlX2d0dChw bGFuZV9zdGF0ZSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCWlmICghcGxhbmVfc3Rh dGUtPmJhc2UudmlzaWJsZSkKKwkJcmV0dXJuIDA7CisKIAlzcmNfeCA9IHBsYW5lX3N0YXRlLT5i YXNlLnNyY194ID4+IDE2OwogCXNyY195ID0gcGxhbmVfc3RhdGUtPmJhc2Uuc3JjX3kgPj4gMTY7 CiAKQEAgLTk4NzksNiArMTAxMjYsMTAgQEAgc3RhdGljIGludCBpbnRlbF9jaGVja19jdXJzb3Io c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJaWYgKHJldCkKIAkJcmV0dXJu IHJldDsKIAorCXJldCA9IGludGVsX2N1cnNvcl9jaGVja19zdXJmYWNlKHBsYW5lX3N0YXRlKTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJaWYgKCFwbGFuZV9zdGF0ZS0+YmFzZS52aXNp YmxlKQogCQlyZXR1cm4gMDsKIApAQCAtOTg4NiwxMCArMTAxMzcsNiBAQCBzdGF0aWMgaW50IGlu dGVsX2NoZWNrX2N1cnNvcihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAlp ZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gaW50ZWxfY3Vyc29yX2NoZWNrX3N1cmZh Y2UocGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KIAlyZXR1cm4gMDsK IH0KIApAQCAtMTQ1OTEsMzEgKzE0ODM4LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyX2Z1bmNzIGludGVsX2ZiX2Z1bmNzID0gewogCS5kaXJ0eSA9IGludGVsX3VzZXJf ZnJhbWVidWZmZXJfZGlydHksCiB9OwogCi1zdGF0aWMKLXUzMiBpbnRlbF9mYl9waXRjaF9saW1p dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkgdTMyIHBpeGVsX2Zvcm1h dCwgdTY0IGZiX21vZGlmaWVyKQotewotCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjOwotCXN0cnVj dCBpbnRlbF9wbGFuZSAqcGxhbmU7Ci0KLQkvKgotCSAqIFdlIGFzc3VtZSB0aGUgcHJpbWFyeSBw bGFuZSBmb3IgcGlwZSBBIGhhcwotCSAqIHRoZSBoaWdoZXN0IHN0cmlkZSBsaW1pdHMgb2YgdGhl bSBhbGwuCi0JICovCi0JY3J0YyA9IGludGVsX2dldF9jcnRjX2Zvcl9waXBlKGRldl9wcml2LCBQ SVBFX0EpOwotCXBsYW5lID0gdG9faW50ZWxfcGxhbmUoY3J0Yy0+YmFzZS5wcmltYXJ5KTsKLQot CXJldHVybiBwbGFuZS0+bWF4X3N0cmlkZShwbGFuZSwgcGl4ZWxfZm9ybWF0LCBmYl9tb2RpZmll ciwKLQkJCQkgRFJNX01PREVfUk9UQVRFXzApOwotfQotCiBzdGF0aWMgaW50IGludGVsX2ZyYW1l YnVmZmVyX2luaXQoc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYiwKIAkJCQkgIHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJICBzdHJ1Y3QgZHJtX21vZGVfZmJf Y21kMiAqbW9kZV9jbWQpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShvYmotPmJhc2UuZGV2KTsKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9ICZp bnRlbF9mYi0+YmFzZTsKLQl1MzIgcGl0Y2hfbGltaXQ7CisJdTMyIG1heF9zdHJpZGU7CiAJdW5z aWduZWQgaW50IHRpbGluZywgc3RyaWRlOwogCWludCByZXQgPSAtRUlOVkFMOwogCWludCBpOwpA QCAtMTQ2NjcsMTMgKzE0ODk2LDEzIEBAIHN0YXRpYyBpbnQgaW50ZWxfZnJhbWVidWZmZXJfaW5p dChzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiLAogCQlnb3RvIGVycjsKIAl9CiAK LQlwaXRjaF9saW1pdCA9IGludGVsX2ZiX3BpdGNoX2xpbWl0KGRldl9wcml2LCBtb2RlX2NtZC0+ cGl4ZWxfZm9ybWF0LAotCQkJCQkgICBtb2RlX2NtZC0+bW9kaWZpZXJbMF0pOwotCWlmIChtb2Rl X2NtZC0+cGl0Y2hlc1swXSA+IHBpdGNoX2xpbWl0KSB7CisJbWF4X3N0cmlkZSA9IGludGVsX2Zi X21heF9zdHJpZGUoZGV2X3ByaXYsIG1vZGVfY21kLT5waXhlbF9mb3JtYXQsCisJCQkJCSBtb2Rl X2NtZC0+bW9kaWZpZXJbMF0pOworCWlmIChtb2RlX2NtZC0+cGl0Y2hlc1swXSA+IG1heF9zdHJp ZGUpIHsKIAkJRFJNX0RFQlVHX0tNUygiJXMgcGl0Y2ggKCV1KSBtdXN0IGJlIGF0IG1vc3QgJWRc biIsCiAJCQkgICAgICBtb2RlX2NtZC0+bW9kaWZpZXJbMF0gIT0gRFJNX0ZPUk1BVF9NT0RfTElO RUFSID8KIAkJCSAgICAgICJ0aWxlZCIgOiAibGluZWFyIiwKLQkJCSAgICAgIG1vZGVfY21kLT5w aXRjaGVzWzBdLCBwaXRjaF9saW1pdCk7CisJCQkgICAgICBtb2RlX2NtZC0+cGl0Y2hlc1swXSwg bWF4X3N0cmlkZSk7CiAJCWdvdG8gZXJyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaApp bmRleCA4MTM2MjYzMjJmYTMuLjBlZTczZjlkZWE3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2 LmgKQEAgLTE1ODYsNiArMTU4Niw3IEBAIHZvaWQgaW50ZWxfZHVtcF9jZGNsa19zdGF0ZShjb25z dCBzdHJ1Y3QgaW50ZWxfY2RjbGtfc3RhdGUgKmNkY2xrX3N0YXRlLAogCQkJICAgIGNvbnN0IGNo YXIgKmNvbnRleHQpOwogCiAvKiBpbnRlbF9kaXNwbGF5LmMgKi8KK2Jvb2wgaW50ZWxfcGxhbmVf Y2FuX3JlbWFwKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwog dm9pZCBpODMwX2VuYWJsZV9waXBlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwg ZW51bSBwaXBlIHBpcGUpOwogdm9pZCBpODMwX2Rpc2FibGVfcGlwZShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcGlwZSBwaXBlKTsKIGVudW0gcGlwZSBpbnRlbF9jcnRj X3BjaF90cmFuc2NvZGVyKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfc3ByaXRlLmMKaW5kZXggYjAyZDNkOTgwOWUzLi41MTc3NDdkMDg5NjIgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCkBAIC0yMzcsNiArMjM3LDE2IEBAIGludCBpbnRlbF9w bGFuZV9jaGVja19zdHJpZGUoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSkKIAl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlv bjsKIAl1MzIgc3RyaWRlLCBtYXhfc3RyaWRlOwogCisJLyoKKwkgKiBXZSBpZ25vcmUgc3RyaWRl IGZvciBhbGwgaW52aXNpYmxlIHBsYW5lcyB0aGF0CisJICogY2FuIGJlIHJlbWFwcGVkLiBPdGhl cndpc2Ugd2UgY291bGQgZW5kIHVwCisJICogd2l0aCBhIGZhbHNlIHBvc2l0aXZlIHdoZW4gdGhl IHJlbWFwcGluZyBkaWRuJ3QKKwkgKiBraWNrIGluIGR1ZSB0aGUgcGxhbmUgYmVpbmcgaW52aXNp YmxlLgorCSAqLworCWlmIChpbnRlbF9wbGFuZV9jYW5fcmVtYXAocGxhbmVfc3RhdGUpICYmCisJ ICAgICFwbGFuZV9zdGF0ZS0+YmFzZS52aXNpYmxlKQorCQlyZXR1cm4gMDsKKwogCS8qIEZJWE1F IG90aGVyIGNvbG9yIHBsYW5lcz8gKi8KIAlzdHJpZGUgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxh bmVbMF0uc3RyaWRlOwogCW1heF9zdHJpZGUgPSBwbGFuZS0+bWF4X3N0cmlkZShwbGFuZSwgZmIt PmZvcm1hdC0+Zm9ybWF0LApAQCAtMTM0MSw2ICsxMzUxLDEwIEBAIGc0eF9zcHJpdGVfY2hlY2so c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJaWYgKHJldCkKIAkJcmV0dXJu IHJldDsKIAorCXJldCA9IGk5eHhfY2hlY2tfcGxhbmVfc3VyZmFjZShwbGFuZV9zdGF0ZSk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCWlmICghcGxhbmVfc3RhdGUtPmJhc2UudmlzaWJs ZSkKIAkJcmV0dXJuIDA7CiAKQEAgLTEzNTIsMTAgKzEzNjYsNiBAQCBnNHhfc3ByaXRlX2NoZWNr KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogCWlmIChyZXQpCiAJCXJldHVy biByZXQ7CiAKLQlyZXQgPSBpOXh4X2NoZWNrX3BsYW5lX3N1cmZhY2UocGxhbmVfc3RhdGUpOwot CWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA3 KQogCQlwbGFuZV9zdGF0ZS0+Y3RsID0gaXZiX3Nwcml0ZV9jdGwoY3J0Y19zdGF0ZSwgcGxhbmVf c3RhdGUpOwogCWVsc2UKQEAgLTEzOTksNiArMTQwOSwxMCBAQCB2bHZfc3ByaXRlX2NoZWNrKHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogCWlmIChyZXQpCiAJCXJldHVybiBy ZXQ7CiAKKwlyZXQgPSBpOXh4X2NoZWNrX3BsYW5lX3N1cmZhY2UocGxhbmVfc3RhdGUpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKIAlpZiAoIXBsYW5lX3N0YXRlLT5iYXNlLnZpc2libGUp CiAJCXJldHVybiAwOwogCkBAIC0xNDA2LDEwICsxNDIwLDYgQEAgdmx2X3Nwcml0ZV9jaGVjayhz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAlpZiAocmV0KQogCQlyZXR1cm4g cmV0OwogCi0JcmV0ID0gaTl4eF9jaGVja19wbGFuZV9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKLQlp ZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJcGxhbmVfc3RhdGUtPmN0bCA9IHZsdl9zcHJpdGVf Y3RsKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKIAogCXJldHVybiAwOwpAQCAtMTU1Niw2ICsx NTY2LDEwIEBAIHN0YXRpYyBpbnQgc2tsX3BsYW5lX2NoZWNrKHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlLAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlyZXQgPSBza2xf Y2hlY2tfcGxhbmVfc3VyZmFjZShwbGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKwogCWlmICghcGxhbmVfc3RhdGUtPmJhc2UudmlzaWJsZSkKIAkJcmV0dXJuIDA7CiAKQEAg LTE1NzEsMTAgKzE1ODUsNiBAQCBzdGF0aWMgaW50IHNrbF9wbGFuZV9jaGVjayhzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0J cmV0ID0gc2tsX2NoZWNrX3BsYW5lX3N1cmZhY2UocGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0J CXJldHVybiByZXQ7Ci0KIAkvKiBIVyBvbmx5IGhhcyA4IGJpdHMgcGl4ZWwgcHJlY2lzaW9uLCBk aXNhYmxlIHBsYW5lIGlmIGludmlzaWJsZSAqLwogCWlmICghKHBsYW5lX3N0YXRlLT5iYXNlLmFs cGhhID4+IDgpKQogCQlwbGFuZV9zdGF0ZS0+YmFzZS52aXNpYmxlID0gZmFsc2U7Ci0tIAoyLjE5 LjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=