From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville Syrjala Subject: [PATCH v4 5/8] drm/i915: Overcome display engine stride limits via GTT remapping Date: Thu, 9 May 2019 15:21:56 +0300 Message-ID: <20190509122159.24376-6-ville.syrjala@linux.intel.com> References: <20190509122159.24376-1-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0456889C0A for ; Thu, 9 May 2019 12:22:19 +0000 (UTC) In-Reply-To: <20190509122159.24376-1-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 YWQgcGlucyB0aGUgZnVsbCBmYiBpbnN0ZWFkCnY2OiBGaXggcGxhbmUgc3JjIGNvb3JkIGNoZWNr cyBhZnRlciByZW1hcHBpbmcgYnkgbW92aW5nCiAgICBwbGFuZV9zdGF0ZS0+YmFzZS5zcmMgdG8g dGhlIGZpbmFsIHBsYW5lIHgveSBvZmZzZXRzLgogICAgQWxsb3cgaW50ZWxfcGxhbmVfY2hlY2tf c3RyaWRlKCkgdG8gZmFpbCBldmVuIHdpdGgKICAgIHJlbWFwcGluZyAoY2FuIGhhcHBlbiBhdCBs ZWFzdCB3aXRoIGEgbGluZWFyIDY0YnBwCiAgICBmYiB3aXRoIGEgNGsgcGxhbmUgYW5kIGEgc3Vp dGFibHkgaW5jb252ZW5pZW50IHNyYwogICAgY29vcmRpbmF0ZXMpLgogICAgSW1wcm92ZSBhdXgg cGxhbmUgRklYTUUgKERhbmllbCkKICAgIE1vdmUgc29tZSBjb2RlIHNodWZmbGluZyBpbnRvIGEg c2VwYXJhdGUgcGF0Y2ggKERhbmllbCkKClRlc3RjYXNlOiBpZ3Qva21zX2JpZ19mYgpDYzogRGFu aWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPgpTaWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJqw6Rs w6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuYyB8IDM1NCArKysrKysrKysrKysrKysrKysrKysrLS0tLS0KIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuaCB8ICAgMiArCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9zcHJpdGUuYyAgfCAgMzQgKystCiAzIGZpbGVzIGNoYW5nZWQsIDMyMyBp bnNlcnRpb25zKCspLCA2NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNw bGF5LmMKaW5kZXggMzIxY2I2ZDJiYzc2Li45NGZhYWM5ZTM2NjYgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kaXNwbGF5LmMKQEAgLTE5MTUsNyArMTkxNSw3IEBAIGludGVsX3RpbGVfd2lkdGhf Ynl0ZXMoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjb2xvcl9wbGFuZSkK IAogCXN3aXRjaCAoZmItPm1vZGlmaWVyKSB7CiAJY2FzZSBEUk1fRk9STUFUX01PRF9MSU5FQVI6 Ci0JCXJldHVybiBjcHA7CisJCXJldHVybiBpbnRlbF90aWxlX3NpemUoZGV2X3ByaXYpOwogCWNh c2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6CiAJCWlmIChJU19HRU4oZGV2X3ByaXYsIDIpKQog CQkJcmV0dXJuIDEyODsKQEAgLTE5NTgsMTEgKzE5NTgsOCBAQCBpbnRlbF90aWxlX3dpZHRoX2J5 dGVzKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpCiBz dGF0aWMgdW5zaWduZWQgaW50CiBpbnRlbF90aWxlX2hlaWdodChjb25zdCBzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5lKQogewotCWlmIChmYi0+bW9kaWZpZXIgPT0g RFJNX0ZPUk1BVF9NT0RfTElORUFSKQotCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiBpbnRl bF90aWxlX3NpemUodG9faTkxNShmYi0+ZGV2KSkgLwotCQkJaW50ZWxfdGlsZV93aWR0aF9ieXRl cyhmYiwgY29sb3JfcGxhbmUpOworCXJldHVybiBpbnRlbF90aWxlX3NpemUodG9faTkxNShmYi0+ ZGV2KSkgLworCQlpbnRlbF90aWxlX3dpZHRoX2J5dGVzKGZiLCBjb2xvcl9wbGFuZSk7CiB9CiAK IC8qIFJldHVybiB0aGUgdGlsZSBkaW1lbnNpb25zIGluIHBpeGVsIHVuaXRzICovCkBAIC0yMjIw LDE2ICsyMjE3LDggQEAgdm9pZCBpbnRlbF9hZGRfZmJfb2Zmc2V0cyhpbnQgKngsIGludCAqeSwK IAkJCSAgaW50IGNvbG9yX3BsYW5lKQogCiB7Ci0JY29uc3Qgc3RydWN0IGludGVsX2ZyYW1lYnVm ZmVyICppbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKHN0YXRlLT5iYXNlLmZiKTsKLQl1 bnNpZ25lZCBpbnQgcm90YXRpb24gPSBzdGF0ZS0+YmFzZS5yb3RhdGlvbjsKLQotCWlmIChkcm1f cm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkgewotCQkqeCArPSBpbnRlbF9mYi0+cm90YXRl ZFtjb2xvcl9wbGFuZV0ueDsKLQkJKnkgKz0gaW50ZWxfZmItPnJvdGF0ZWRbY29sb3JfcGxhbmVd Lnk7Ci0JfSBlbHNlIHsKLQkJKnggKz0gaW50ZWxfZmItPm5vcm1hbFtjb2xvcl9wbGFuZV0ueDsK LQkJKnkgKz0gaW50ZWxfZmItPm5vcm1hbFtjb2xvcl9wbGFuZV0ueTsKLQl9CisJKnggKz0gc3Rh dGUtPmNvbG9yX3BsYW5lW2NvbG9yX3BsYW5lXS54OworCSp5ICs9IHN0YXRlLT5jb2xvcl9wbGFu ZVtjb2xvcl9wbGFuZV0ueTsKIH0KIAogc3RhdGljIHUzMiBpbnRlbF9hZGp1c3RfdGlsZV9vZmZz ZXQoaW50ICp4LCBpbnQgKnksCkBAIC0yNTEwLDggKzI0OTksOCBAQCBib29sIGlzX2Njc19tb2Rp Zmllcih1NjQgbW9kaWZpZXIpCiB9CiAKIHN0YXRpYwotdTMyIGludGVsX2ZiX21heF9zdHJpZGUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJdTMyIHBpeGVsX2Zvcm1hdCwg dTY0IG1vZGlmaWVyKQordTMyIGludGVsX3BsYW5lX2ZiX21heF9zdHJpZGUoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgICAgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0IG1v ZGlmaWVyKQogewogCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjOwogCXN0cnVjdCBpbnRlbF9wbGFu ZSAqcGxhbmU7CkBAIC0yNTI3LDEzICsyNTE2LDEwMiBAQCB1MzIgaW50ZWxfZmJfbWF4X3N0cmlk ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkJIERSTV9NT0RFX1JPVEFU RV8wKTsKIH0KIAorc3RhdGljCit1MzIgaW50ZWxfZmJfbWF4X3N0cmlkZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQl1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIp Cit7CisJcmV0dXJuIGludGVsX3BsYW5lX2ZiX21heF9zdHJpZGUoZGV2X3ByaXYsIHBpeGVsX2Zv cm1hdCwgbW9kaWZpZXIpOworfQorCiBzdGF0aWMgdTMyCiBpbnRlbF9mYl9zdHJpZGVfYWxpZ25t ZW50KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpCiB7 Ci0JaWYgKGZiLT5tb2RpZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIpCi0JCXJldHVybiA2 NDsKLQllbHNlCisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShm Yi0+ZGV2KTsKKworCWlmIChmYi0+bW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSKSB7 CisJCXUzMiBtYXhfc3RyaWRlID0gaW50ZWxfcGxhbmVfZmJfbWF4X3N0cmlkZShkZXZfcHJpdiwK KwkJCQkJCQkgICBmYi0+Zm9ybWF0LT5mb3JtYXQsCisJCQkJCQkJICAgZmItPm1vZGlmaWVyKTsK KworCQkvKgorCQkgKiBUbyBtYWtlIHJlbWFwcGluZyB3aXRoIGxpbmVhciBnZW5lcmFsbHkgZmVh c2libGUKKwkJICogd2UgbmVlZCB0aGUgc3RyaWRlIHRvIGJlIHBhZ2UgYWxpZ25lZC4KKwkJICov CisJCWlmIChmYi0+cGl0Y2hlc1tjb2xvcl9wbGFuZV0gPiBtYXhfc3RyaWRlKQorCQkJcmV0dXJu IGludGVsX3RpbGVfc2l6ZShkZXZfcHJpdik7CisJCWVsc2UKKwkJCXJldHVybiA2NDsKKwl9IGVs c2UgewogCQlyZXR1cm4gaW50ZWxfdGlsZV93aWR0aF9ieXRlcyhmYiwgY29sb3JfcGxhbmUpOwor CX0KK30KKworYm9vbCBpbnRlbF9wbGFuZV9jYW5fcmVtYXAoY29uc3Qgc3RydWN0IGludGVsX3Bs YW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0g dG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPmJhc2UucGxhbmUpOworCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKKwljb25zdCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOworCWludCBp OworCisJLyogV2UgZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGggcmVtYXBwaW5nIHdpdGggY3Vyc29y cyAqLworCWlmIChwbGFuZS0+aWQgPT0gUExBTkVfQ1VSU09SKQorCQlyZXR1cm4gZmFsc2U7CisK KwkvKgorCSAqIFRoZSBkaXNwbGF5IGVuZ2luZSBsaW1pdHMgYWxyZWFkeSBtYXRjaC9leGNlZWQg dGhlCisJICogcmVuZGVyIGVuZ2luZSBsaW1pdHMsIHNvIG5vdCBtdWNoIHBvaW50IGluIHJlbWFw cGluZy4KKwkgKiBXb3VsZCBhbHNvIG5lZWQgdG8gZGVhbCB3aXRoIHRoZSBmZW5jZSBQT1QgYWxp Z25tZW50CisJICogYW5kIGdlbjIgMktpQiBHVFQgdGlsZSBzaXplLgorCSAqLworCWlmIChJTlRF TF9HRU4oZGV2X3ByaXYpIDwgNCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBUaGUgbmV3 IENDUyBoYXNoIG1vZGUgaXNuJ3QgY29tcGF0aWJsZSB3aXRoIHJlbWFwcGluZyBhcworCSAqIHRo ZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIHBhZ2VzIGFmZmVjdHMgdGhlIGNvbXByZXNzZWQgZGF0 YS4KKwkgKi8KKwlpZiAoaXNfY2NzX21vZGlmaWVyKGZiLT5tb2RpZmllcikpCisJCXJldHVybiBm YWxzZTsKKworCS8qIExpbmVhciBuZWVkcyBhIHBhZ2UgYWxpZ25lZCBzdHJpZGUgZm9yIHJlbWFw cGluZyAqLworCWlmIChmYi0+bW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSKSB7CisJ CXVuc2lnbmVkIGludCBhbGlnbm1lbnQgPSBpbnRlbF90aWxlX3NpemUoZGV2X3ByaXYpIC0gMTsK KworCQlmb3IgKGkgPSAwOyBpIDwgZmItPmZvcm1hdC0+bnVtX3BsYW5lczsgaSsrKSB7CisJCQlp ZiAoZmItPnBpdGNoZXNbaV0gJiBhbGlnbm1lbnQpCisJCQkJcmV0dXJuIGZhbHNlOworCQl9CisJ fQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGludGVsX3BsYW5lX25lZWRzX3Jl bWFwKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3Ry dWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT5iYXNl LnBsYW5lKTsKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRl LT5iYXNlLmZiOworCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5iYXNlLnJv dGF0aW9uOworCXUzMiBzdHJpZGUsIG1heF9zdHJpZGU7CisKKwkvKgorCSAqIE5vIHJlbWFwcGlu ZyBmb3IgaW52aXNpYmxlIHBsYW5lcyBzaW5jZSB3ZSBkb24ndCBoYXZlCisJICogYW4gYWN0dWFs IHNvdXJjZSB2aWV3cG9ydCB0byByZW1hcC4KKwkgKi8KKwlpZiAoIXBsYW5lX3N0YXRlLT5iYXNl LnZpc2libGUpCisJCXJldHVybiBmYWxzZTsKKworCWlmICghaW50ZWxfcGxhbmVfY2FuX3JlbWFw KHBsYW5lX3N0YXRlKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBGSVhNRTogYXV4IHBs YW5lIGxpbWl0cyBvbiBnZW45KyBhcmUKKwkgKiB1bmNsZWFyIGluIEJzcGVjLCBmb3Igbm93IG5v IGNoZWNraW5nLgorCSAqLworCXN0cmlkZSA9IGludGVsX2ZiX3BpdGNoKGZiLCAwLCByb3RhdGlv bik7CisJbWF4X3N0cmlkZSA9IHBsYW5lLT5tYXhfc3RyaWRlKHBsYW5lLCBmYi0+Zm9ybWF0LT5m b3JtYXQsCisJCQkJICAgICAgIGZiLT5tb2RpZmllciwgcm90YXRpb24pOworCisJcmV0dXJuIHN0 cmlkZSA+IG1heF9zdHJpZGU7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTI3MDEsNiArMjc3OSwxNjgg QEAgaW50ZWxfZmlsbF9mYl9pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK IAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQKK2ludGVsX3BsYW5lX3JlbWFwX2d0dChzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9CisJCXRvX2k5MTUocGxhbmVfc3RhdGUtPmJhc2UucGxhbmUtPmRl dik7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsK KwlzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiID0gdG9faW50ZWxfZnJhbWVidWZm ZXIoZmIpOworCXN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvICppbmZvID0gJnBsYW5lX3N0YXRl LT52aWV3LnJvdGF0ZWQ7CisJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJh c2Uucm90YXRpb247CisJaW50IGksIG51bV9wbGFuZXMgPSBmYi0+Zm9ybWF0LT5udW1fcGxhbmVz OworCXVuc2lnbmVkIGludCB0aWxlX3NpemUgPSBpbnRlbF90aWxlX3NpemUoZGV2X3ByaXYpOwor CXVuc2lnbmVkIGludCBzcmNfeCwgc3JjX3k7CisJdW5zaWduZWQgaW50IHNyY193LCBzcmNfaDsK Kwl1MzIgZ3R0X29mZnNldCA9IDA7CisKKwltZW1zZXQoJnBsYW5lX3N0YXRlLT52aWV3LCAwLCBz aXplb2YocGxhbmVfc3RhdGUtPnZpZXcpKTsKKwlwbGFuZV9zdGF0ZS0+dmlldy50eXBlID0gZHJt X3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikgPworCQlJOTE1X0dHVFRfVklFV19ST1RBVEVE IDogSTkxNV9HR1RUX1ZJRVdfUkVNQVBQRUQ7CisKKwlzcmNfeCA9IHBsYW5lX3N0YXRlLT5iYXNl LnNyYy54MSA+PiAxNjsKKwlzcmNfeSA9IHBsYW5lX3N0YXRlLT5iYXNlLnNyYy55MSA+PiAxNjsK KwlzcmNfdyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+YmFzZS5zcmMpID4+IDE2Owor CXNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+YmFzZS5zcmMpID4+IDE2Owor CisJV0FSTl9PTihpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSk7CisKKwkvKiBNYWtlIHNy YyBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgdmlld3BvcnQgKi8KKwlkcm1fcmVjdF90cmFu c2xhdGUoJnBsYW5lX3N0YXRlLT5iYXNlLnNyYywKKwkJCSAgIC0oc3JjX3ggPDwgMTYpLCAtKHNy Y195IDw8IDE2KSk7CisKKwkvKiBSb3RhdGUgc3JjIGNvb3JkaW5hdGVzIHRvIG1hdGNoIHJvdGF0 ZWQgR1RUIHZpZXcgKi8KKwlpZiAoZHJtX3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpCisJ CWRybV9yZWN0X3JvdGF0ZSgmcGxhbmVfc3RhdGUtPmJhc2Uuc3JjLAorCQkJCXNyY193IDw8IDE2 LCBzcmNfaCA8PCAxNiwKKwkJCQlEUk1fTU9ERV9ST1RBVEVfMjcwKTsKKworCWZvciAoaSA9IDA7 IGkgPCBudW1fcGxhbmVzOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGhzdWIgPSBpID8gZmItPmZv cm1hdC0+aHN1YiA6IDE7CisJCXVuc2lnbmVkIGludCB2c3ViID0gaSA/IGZiLT5mb3JtYXQtPnZz dWIgOiAxOworCQl1bnNpZ25lZCBpbnQgY3BwID0gZmItPmZvcm1hdC0+Y3BwW2ldOworCQl1bnNp Z25lZCBpbnQgdGlsZV93aWR0aCwgdGlsZV9oZWlnaHQ7CisJCXVuc2lnbmVkIGludCB3aWR0aCwg aGVpZ2h0OworCQl1bnNpZ25lZCBpbnQgcGl0Y2hfdGlsZXM7CisJCXVuc2lnbmVkIGludCB4LCB5 OworCQl1MzIgb2Zmc2V0OworCisJCWludGVsX3RpbGVfZGltcyhmYiwgaSwgJnRpbGVfd2lkdGgs ICZ0aWxlX2hlaWdodCk7CisKKwkJeCA9IHNyY194IC8gaHN1YjsKKwkJeSA9IHNyY195IC8gdnN1 YjsKKwkJd2lkdGggPSBzcmNfdyAvIGhzdWI7CisJCWhlaWdodCA9IHNyY19oIC8gdnN1YjsKKwor CQkvKgorCQkgKiBGaXJzdCBwaXhlbCBvZiB0aGUgc3JjIHZpZXdwb3J0IGZyb20gdGhlCisJCSAq IHN0YXJ0IG9mIHRoZSBub3JtYWwgZ3R0IG1hcHBpbmcuCisJCSAqLworCQl4ICs9IGludGVsX2Zi LT5ub3JtYWxbaV0ueDsKKwkJeSArPSBpbnRlbF9mYi0+bm9ybWFsW2ldLnk7CisKKwkJb2Zmc2V0 ID0gaW50ZWxfY29tcHV0ZV9hbGlnbmVkX29mZnNldChkZXZfcHJpdiwgJngsICZ5LAorCQkJCQkJ ICAgICAgZmIsIGksIGZiLT5waXRjaGVzW2ldLAorCQkJCQkJICAgICAgRFJNX01PREVfUk9UQVRF XzAsIHRpbGVfc2l6ZSk7CisJCW9mZnNldCAvPSB0aWxlX3NpemU7CisKKwkJaW5mby0+cGxhbmVb aV0ub2Zmc2V0ID0gb2Zmc2V0OworCQlpbmZvLT5wbGFuZVtpXS5zdHJpZGUgPSBESVZfUk9VTkRf VVAoZmItPnBpdGNoZXNbaV0sCisJCQkJCQkgICAgIHRpbGVfd2lkdGggKiBjcHApOworCQlpbmZv LT5wbGFuZVtpXS53aWR0aCA9IERJVl9ST1VORF9VUCh4ICsgd2lkdGgsIHRpbGVfd2lkdGgpOwor CQlpbmZvLT5wbGFuZVtpXS5oZWlnaHQgPSBESVZfUk9VTkRfVVAoeSArIGhlaWdodCwgdGlsZV9o ZWlnaHQpOworCisJCWlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkgeworCQkJ c3RydWN0IGRybV9yZWN0IHI7CisKKwkJCS8qIHJvdGF0ZSB0aGUgeC95IG9mZnNldHMgdG8gbWF0 Y2ggdGhlIEdUVCB2aWV3ICovCisJCQlyLngxID0geDsKKwkJCXIueTEgPSB5OworCQkJci54MiA9 IHggKyB3aWR0aDsKKwkJCXIueTIgPSB5ICsgaGVpZ2h0OworCQkJZHJtX3JlY3Rfcm90YXRlKCZy LAorCQkJCQlpbmZvLT5wbGFuZVtpXS53aWR0aCAqIHRpbGVfd2lkdGgsCisJCQkJCWluZm8tPnBs YW5lW2ldLmhlaWdodCAqIHRpbGVfaGVpZ2h0LAorCQkJCQlEUk1fTU9ERV9ST1RBVEVfMjcwKTsK KwkJCXggPSByLngxOworCQkJeSA9IHIueTE7CisKKwkJCXBpdGNoX3RpbGVzID0gaW5mby0+cGxh bmVbaV0uaGVpZ2h0OworCQkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ldLnN0cmlkZSA9IHBp dGNoX3RpbGVzICogdGlsZV9oZWlnaHQ7CisKKwkJCS8qIHJvdGF0ZSB0aGUgdGlsZSBkaW1lbnNp b25zIHRvIG1hdGNoIHRoZSBHVFQgdmlldyAqLworCQkJc3dhcCh0aWxlX3dpZHRoLCB0aWxlX2hl aWdodCk7CisJCX0gZWxzZSB7CisJCQlwaXRjaF90aWxlcyA9IGluZm8tPnBsYW5lW2ldLndpZHRo OworCQkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ldLnN0cmlkZSA9IHBpdGNoX3RpbGVzICog dGlsZV93aWR0aCAqIGNwcDsKKwkJfQorCisJCS8qCisJCSAqIFdlIG9ubHkga2VlcCB0aGUgeC95 IG9mZnNldHMsIHNvIHB1c2ggYWxsIG9mIHRoZQorCQkgKiBndHQgb2Zmc2V0IGludG8gdGhlIHgv eSBvZmZzZXRzLgorCQkgKi8KKwkJaW50ZWxfYWRqdXN0X3RpbGVfb2Zmc2V0KCZ4LCAmeSwKKwkJ CQkJIHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0LAorCQkJCQkgdGlsZV9zaXplLCBwaXRjaF90aWxl cywKKwkJCQkJIGd0dF9vZmZzZXQgKiB0aWxlX3NpemUsIDApOworCisJCWd0dF9vZmZzZXQgKz0g aW5mby0+cGxhbmVbaV0ud2lkdGggKiBpbmZvLT5wbGFuZVtpXS5oZWlnaHQ7CisKKwkJcGxhbmVf c3RhdGUtPmNvbG9yX3BsYW5lW2ldLm9mZnNldCA9IDA7CisJCXBsYW5lX3N0YXRlLT5jb2xvcl9w bGFuZVtpXS54ID0geDsKKwkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ldLnkgPSB5OworCX0K K30KKworc3RhdGljIGludAoraW50ZWxfcGxhbmVfY29tcHV0ZV9ndHQoc3RydWN0IGludGVsX3Bs YW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwljb25zdCBzdHJ1Y3QgaW50ZWxfZnJhbWVidWZm ZXIgKmZiID0KKwkJdG9faW50ZWxfZnJhbWVidWZmZXIocGxhbmVfc3RhdGUtPmJhc2UuZmIpOwor CXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uOworCWlu dCBpLCBudW1fcGxhbmVzOworCisJaWYgKCFmYikKKwkJcmV0dXJuIDA7CisKKwludW1fcGxhbmVz ID0gZmItPmJhc2UuZm9ybWF0LT5udW1fcGxhbmVzOworCisJaWYgKGludGVsX3BsYW5lX25lZWRz X3JlbWFwKHBsYW5lX3N0YXRlKSkgeworCQlpbnRlbF9wbGFuZV9yZW1hcF9ndHQocGxhbmVfc3Rh dGUpOworCisJCS8qCisJCSAqIFNvbWV0aW1lcyBldmVuIHJlbWFwcGluZyBjYW4ndCBvdmVyY29t ZQorCQkgKiB0aGUgc3RyaWRlIGxpbWl0YXRpb25zIDooIENhbiBoYXBwZW4gd2l0aAorCQkgKiBi aWcgcGxhbmUgc2l6ZXMgYW5kIHN1aXRhYmx5IG1pc2FsaWduZWQKKwkJICogb2Zmc2V0cy4KKwkJ ICovCisJCXJldHVybiBpbnRlbF9wbGFuZV9jaGVja19zdHJpZGUocGxhbmVfc3RhdGUpOworCX0K KworCWludGVsX2ZpbGxfZmJfZ2d0dF92aWV3KCZwbGFuZV9zdGF0ZS0+dmlldywgJmZiLT5iYXNl LCByb3RhdGlvbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BsYW5lczsgaSsrKSB7CisJCXBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS5zdHJpZGUgPSBpbnRlbF9mYl9waXRjaCgmZmItPmJh c2UsIGksIHJvdGF0aW9uKTsKKwkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ldLm9mZnNldCA9 IDA7CisKKwkJaWYgKGRybV9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKSB7CisJCQlwbGFu ZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0ueCA9IGZiLT5yb3RhdGVkW2ldLng7CisJCQlwbGFuZV9z dGF0ZS0+Y29sb3JfcGxhbmVbaV0ueSA9IGZiLT5yb3RhdGVkW2ldLnk7CisJCX0gZWxzZSB7CisJ CQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0ueCA9IGZiLT5ub3JtYWxbaV0ueDsKKwkJCXBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS55ID0gZmItPm5vcm1hbFtpXS55OworCQl9CisJfQor CisJLyogUm90YXRlIHNyYyBjb29yZGluYXRlcyB0byBtYXRjaCByb3RhdGVkIEdUVCB2aWV3ICov CisJaWYgKGRybV9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKQorCQlkcm1fcmVjdF9yb3Rh dGUoJnBsYW5lX3N0YXRlLT5iYXNlLnNyYywKKwkJCQlmYi0+YmFzZS53aWR0aCA8PCAxNiwgZmIt PmJhc2UuaGVpZ2h0IDw8IDE2LAorCQkJCURSTV9NT0RFX1JPVEFURV8yNzApOworCisJcmV0dXJu IGludGVsX3BsYW5lX2NoZWNrX3N0cmlkZShwbGFuZV9zdGF0ZSk7Cit9CisKIHN0YXRpYyBpbnQg aTl4eF9mb3JtYXRfdG9fZm91cmNjKGludCBmb3JtYXQpCiB7CiAJc3dpdGNoIChmb3JtYXQpIHsK QEAgLTMxOTksNiArMzQzOSwxNCBAQCBzdGF0aWMgaW50IHNrbF9jaGVja19tYWluX3N1cmZhY2Uo c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIAlwbGFuZV9zdGF0ZS0+Y29s b3JfcGxhbmVbMF0ueCA9IHg7CiAJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnkgPSB5Owog CisJLyoKKwkgKiBQdXQgdGhlIGZpbmFsIGNvb3JkaW5hdGVzIGJhY2sgc28gdGhhdCB0aGUgc3Jj CisJICogY29vcmRpbmF0ZSBjaGVja3Mgd2lsbCBzZWUgdGhlIHJpZ2h0IHZhbHVlcy4KKwkgKi8K Kwlkcm1fcmVjdF90cmFuc2xhdGUoJnBsYW5lX3N0YXRlLT5iYXNlLnNyYywKKwkJCSAgICh4IDw8 IDE2KSAtIHBsYW5lX3N0YXRlLT5iYXNlLnNyYy54MSwKKwkJCSAgICh5IDw8IDE2KSAtIHBsYW5l X3N0YXRlLT5iYXNlLnNyYy55MSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzI1NSwyNiArMzUw MywxNSBAQCBzdGF0aWMgaW50IHNrbF9jaGVja19jY3NfYXV4X3N1cmZhY2Uoc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIGludCBza2xfY2hlY2tfcGxhbmVfc3VyZmFjZShz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQogewogCWNvbnN0IHN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7Ci0JdW5zaWduZWQgaW50 IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247CiAJaW50IHJldDsKIAotCWlu dGVsX2ZpbGxfZmJfZ2d0dF92aWV3KCZwbGFuZV9zdGF0ZS0+dmlldywgZmIsIHJvdGF0aW9uKTsK LQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlID0gaW50ZWxfZmJfcGl0Y2goZmIs IDAsIHJvdGF0aW9uKTsKLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMV0uc3RyaWRlID0gaW50 ZWxfZmJfcGl0Y2goZmIsIDEsIHJvdGF0aW9uKTsKLQotCXJldCA9IGludGVsX3BsYW5lX2NoZWNr X3N0cmlkZShwbGFuZV9zdGF0ZSk7CisJcmV0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9ndHQocGxh bmVfc3RhdGUpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAlpZiAoIXBsYW5lX3N0YXRl LT5iYXNlLnZpc2libGUpCiAJCXJldHVybiAwOwogCi0JLyogUm90YXRlIHNyYyBjb29yZGluYXRl cyB0byBtYXRjaCByb3RhdGVkIEdUVCB2aWV3ICovCi0JaWYgKGRybV9yb3RhdGlvbl85MF9vcl8y NzAocm90YXRpb24pKQotCQlkcm1fcmVjdF9yb3RhdGUoJnBsYW5lX3N0YXRlLT5iYXNlLnNyYywK LQkJCQlmYi0+d2lkdGggPDwgMTYsIGZiLT5oZWlnaHQgPDwgMTYsCi0JCQkJRFJNX01PREVfUk9U QVRFXzI3MCk7Ci0KIAkvKgogCSAqIEhhbmRsZSB0aGUgQVVYIHN1cmZhY2UgZmlyc3Qgc2luY2UK IAkgKiB0aGUgbWFpbiBzdXJmYWNlIHNldHVwIGRlcGVuZHMgb24gaXQuCkBAIC0zNDA0LDIwICsz NjQxLDIwIEBAIGludCBpOXh4X2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICpwbGFuZV9zdGF0ZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPQogCQl0b19pOTE1KHBsYW5lX3N0YXRlLT5iYXNlLnBsYW5lLT5kZXYpOwotCWNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7Ci0JdW5zaWdu ZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247Ci0JaW50IHNyY194 ID0gcGxhbmVfc3RhdGUtPmJhc2Uuc3JjLngxID4+IDE2OwotCWludCBzcmNfeSA9IHBsYW5lX3N0 YXRlLT5iYXNlLnNyYy55MSA+PiAxNjsKKwlpbnQgc3JjX3gsIHNyY195OwogCXUzMiBvZmZzZXQ7 CiAJaW50IHJldDsKIAotCWludGVsX2ZpbGxfZmJfZ2d0dF92aWV3KCZwbGFuZV9zdGF0ZS0+dmll dywgZmIsIHJvdGF0aW9uKTsKLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlID0g aW50ZWxfZmJfcGl0Y2goZmIsIDAsIHJvdGF0aW9uKTsKLQotCXJldCA9IGludGVsX3BsYW5lX2No ZWNrX3N0cmlkZShwbGFuZV9zdGF0ZSk7CisJcmV0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9ndHQo cGxhbmVfc3RhdGUpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlpZiAoIXBsYW5lX3N0 YXRlLT5iYXNlLnZpc2libGUpCisJCXJldHVybiAwOworCisJc3JjX3ggPSBwbGFuZV9zdGF0ZS0+ YmFzZS5zcmMueDEgPj4gMTY7CisJc3JjX3kgPSBwbGFuZV9zdGF0ZS0+YmFzZS5zcmMueTEgPj4g MTY7CisKIAlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmc3JjX3gsICZzcmNfeSwgcGxhbmVfc3RhdGUs IDApOwogCiAJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkKQEAgLTM0MjYsOCArMzY2Mywx NyBAQCBpbnQgaTl4eF9jaGVja19wbGFuZV9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUpCiAJZWxzZQogCQlvZmZzZXQgPSAwOwogCisJLyoKKwkgKiBQdXQgdGhl IGZpbmFsIGNvb3JkaW5hdGVzIGJhY2sgc28gdGhhdCB0aGUgc3JjCisJICogY29vcmRpbmF0ZSBj aGVja3Mgd2lsbCBzZWUgdGhlIHJpZ2h0IHZhbHVlcy4KKwkgKi8KKwlkcm1fcmVjdF90cmFuc2xh dGUoJnBsYW5lX3N0YXRlLT5iYXNlLnNyYywKKwkJCSAgIChzcmNfeCA8PCAxNikgLSBwbGFuZV9z dGF0ZS0+YmFzZS5zcmMueDEsCisJCQkgICAoc3JjX3kgPDwgMTYpIC0gcGxhbmVfc3RhdGUtPmJh c2Uuc3JjLnkxKTsKKwogCS8qIEhTVy9CRFcgZG8gdGhpcyBhdXRvbWFnaWNhbGx5IGluIGhhcmR3 YXJlICovCiAJaWYgKCFJU19IQVNXRUxMKGRldl9wcml2KSAmJiAhSVNfQlJPQURXRUxMKGRldl9w cml2KSkgeworCQl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3Rh dGlvbjsKIAkJaW50IHNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT5iYXNlLnNy YykgPj4gMTY7CiAJCWludCBzcmNfaCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPmJh c2Uuc3JjKSA+PiAxNjsKIApAQCAtMzQ2NCw2ICszNzEwLDEwIEBAIGk5eHhfcGxhbmVfY2hlY2so c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJaWYgKHJldCkKIAkJcmV0dXJu IHJldDsKIAorCXJldCA9IGk5eHhfY2hlY2tfcGxhbmVfc3VyZmFjZShwbGFuZV9zdGF0ZSk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCWlmICghcGxhbmVfc3RhdGUtPmJhc2UudmlzaWJs ZSkKIAkJcmV0dXJuIDA7CiAKQEAgLTM0NzEsMTAgKzM3MjEsNiBAQCBpOXh4X3BsYW5lX2NoZWNr KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogCWlmIChyZXQpCiAJCXJldHVy biByZXQ7CiAKLQlyZXQgPSBpOXh4X2NoZWNrX3BsYW5lX3N1cmZhY2UocGxhbmVfc3RhdGUpOwot CWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KIAlwbGFuZV9zdGF0ZS0+Y3RsID0gaTl4eF9wbGFu ZV9jdGwoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwogCiAJcmV0dXJuIDA7CkBAIC0xMDAwMSwx OSArMTAyNDcsMTcgQEAgc3RhdGljIGJvb2wgaW50ZWxfY3Vyc29yX3NpemVfb2soY29uc3Qgc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIAogc3RhdGljIGludCBpbnRlbF9j dXJzb3JfY2hlY2tfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRl KQogewotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmJh c2UuZmI7Ci0JdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRp b247CiAJaW50IHNyY194LCBzcmNfeTsKIAl1MzIgb2Zmc2V0OwogCWludCByZXQ7CiAKLQlpbnRl bF9maWxsX2ZiX2dndHRfdmlldygmcGxhbmVfc3RhdGUtPnZpZXcsIGZiLCByb3RhdGlvbik7Ci0J cGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlkZSA9IGludGVsX2ZiX3BpdGNoKGZiLCAw LCByb3RhdGlvbik7Ci0KLQlyZXQgPSBpbnRlbF9wbGFuZV9jaGVja19zdHJpZGUocGxhbmVfc3Rh dGUpOworCXJldCA9IGludGVsX3BsYW5lX2NvbXB1dGVfZ3R0KHBsYW5lX3N0YXRlKTsKIAlpZiAo cmV0KQogCQlyZXR1cm4gcmV0OwogCisJaWYgKCFwbGFuZV9zdGF0ZS0+YmFzZS52aXNpYmxlKQor CQlyZXR1cm4gMDsKKwogCXNyY194ID0gcGxhbmVfc3RhdGUtPmJhc2Uuc3JjX3ggPj4gMTY7CiAJ c3JjX3kgPSBwbGFuZV9zdGF0ZS0+YmFzZS5zcmNfeSA+PiAxNjsKIApAQCAtMTAwNTAsNiArMTAy OTQsMTAgQEAgc3RhdGljIGludCBpbnRlbF9jaGVja19jdXJzb3Ioc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCXJldCA9IGlu dGVsX2N1cnNvcl9jaGVja19zdXJmYWNlKHBsYW5lX3N0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCiAJaWYgKCFwbGFuZV9zdGF0ZS0+YmFzZS52aXNpYmxlKQogCQlyZXR1cm4gMDsK IApAQCAtMTAwNTcsMTAgKzEwMzA1LDYgQEAgc3RhdGljIGludCBpbnRlbF9jaGVja19jdXJzb3Io c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJaWYgKHJldCkKIAkJcmV0dXJu IHJldDsKIAotCXJldCA9IGludGVsX2N1cnNvcl9jaGVja19zdXJmYWNlKHBsYW5lX3N0YXRlKTsK LQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuaAppbmRleCAxYjZmNWE3MTE4NGQuLjUwMGVlYzkwOTI4ZCAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1 ZGUgPGRybS9pOTE1X2RybS5oPgogCiBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZTsKK3N0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZTsKIAogZW51bSBpOTE1X2dwaW8gewogCUdQSU9BLApAQCAtNDM1LDUg KzQzNiw2IEBAIHZvaWQgaW50ZWxfbGlua19jb21wdXRlX21fbih1MTYgYnBwLCBpbnQgbmxhbmVz LAogCQkJICAgIGJvb2wgY29uc3RhbnRfbik7CiBib29sIGlzX2Njc19tb2RpZmllcih1NjQgbW9k aWZpZXIpOwogdm9pZCBscHRfZGlzYWJsZV9jbGtvdXRfZHAoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KTsKK2Jvb2wgaW50ZWxfcGxhbmVfY2FuX3JlbWFwKGNvbnN0IHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfc3ByaXRlLmMKaW5kZXggMjkxM2U4OTI4MGQ3Li45MWI0NjFiZTcwYmUgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCkBAIC0yNTYsNiArMjU2LDE2IEBAIGludCBpbnRlbF9w bGFuZV9jaGVja19zdHJpZGUoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSkKIAl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlv bjsKIAl1MzIgc3RyaWRlLCBtYXhfc3RyaWRlOwogCisJLyoKKwkgKiBXZSBpZ25vcmUgc3RyaWRl IGZvciBhbGwgaW52aXNpYmxlIHBsYW5lcyB0aGF0CisJICogY2FuIGJlIHJlbWFwcGVkLiBPdGhl cndpc2Ugd2UgY291bGQgZW5kIHVwCisJICogd2l0aCBhIGZhbHNlIHBvc2l0aXZlIHdoZW4gdGhl IHJlbWFwcGluZyBkaWRuJ3QKKwkgKiBraWNrIGluIGR1ZSB0aGUgcGxhbmUgYmVpbmcgaW52aXNp YmxlLgorCSAqLworCWlmIChpbnRlbF9wbGFuZV9jYW5fcmVtYXAocGxhbmVfc3RhdGUpICYmCisJ ICAgICFwbGFuZV9zdGF0ZS0+YmFzZS52aXNpYmxlKQorCQlyZXR1cm4gMDsKKwogCS8qIEZJWE1F IG90aGVyIGNvbG9yIHBsYW5lcz8gKi8KIAlzdHJpZGUgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxh bmVbMF0uc3RyaWRlOwogCW1heF9zdHJpZGUgPSBwbGFuZS0+bWF4X3N0cmlkZShwbGFuZSwgZmIt PmZvcm1hdC0+Zm9ybWF0LApAQCAtMTQxNyw2ICsxNDI3LDEwIEBAIGc0eF9zcHJpdGVfY2hlY2so c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJaWYgKHJldCkKIAkJcmV0dXJu IHJldDsKIAorCXJldCA9IGk5eHhfY2hlY2tfcGxhbmVfc3VyZmFjZShwbGFuZV9zdGF0ZSk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCWlmICghcGxhbmVfc3RhdGUtPmJhc2UudmlzaWJs ZSkKIAkJcmV0dXJuIDA7CiAKQEAgLTE0MjgsMTAgKzE0NDIsNiBAQCBnNHhfc3ByaXRlX2NoZWNr KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogCWlmIChyZXQpCiAJCXJldHVy biByZXQ7CiAKLQlyZXQgPSBpOXh4X2NoZWNrX3BsYW5lX3N1cmZhY2UocGxhbmVfc3RhdGUpOwot CWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA3 KQogCQlwbGFuZV9zdGF0ZS0+Y3RsID0gaXZiX3Nwcml0ZV9jdGwoY3J0Y19zdGF0ZSwgcGxhbmVf c3RhdGUpOwogCWVsc2UKQEAgLTE0NzUsNiArMTQ4NSwxMCBAQCB2bHZfc3ByaXRlX2NoZWNrKHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogCWlmIChyZXQpCiAJCXJldHVybiBy ZXQ7CiAKKwlyZXQgPSBpOXh4X2NoZWNrX3BsYW5lX3N1cmZhY2UocGxhbmVfc3RhdGUpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKIAlpZiAoIXBsYW5lX3N0YXRlLT5iYXNlLnZpc2libGUp CiAJCXJldHVybiAwOwogCkBAIC0xNDgyLDEwICsxNDk2LDYgQEAgdmx2X3Nwcml0ZV9jaGVjayhz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAlpZiAocmV0KQogCQlyZXR1cm4g cmV0OwogCi0JcmV0ID0gaTl4eF9jaGVja19wbGFuZV9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKLQlp ZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJcGxhbmVfc3RhdGUtPmN0bCA9IHZsdl9zcHJpdGVf Y3RsKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKIAogCXJldHVybiAwOwpAQCAtMTYzOSw2ICsx NjQ5LDEwIEBAIHN0YXRpYyBpbnQgc2tsX3BsYW5lX2NoZWNrKHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlLAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlyZXQgPSBza2xf Y2hlY2tfcGxhbmVfc3VyZmFjZShwbGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKwogCWlmICghcGxhbmVfc3RhdGUtPmJhc2UudmlzaWJsZSkKIAkJcmV0dXJuIDA7CiAKQEAg LTE2NTQsMTAgKzE2NjgsNiBAQCBzdGF0aWMgaW50IHNrbF9wbGFuZV9jaGVjayhzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0J cmV0ID0gc2tsX2NoZWNrX3BsYW5lX3N1cmZhY2UocGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0J CXJldHVybiByZXQ7Ci0KIAkvKiBIVyBvbmx5IGhhcyA4IGJpdHMgcGl4ZWwgcHJlY2lzaW9uLCBk aXNhYmxlIHBsYW5lIGlmIGludmlzaWJsZSAqLwogCWlmICghKHBsYW5lX3N0YXRlLT5iYXNlLmFs cGhhID4+IDgpKQogCQlwbGFuZV9zdGF0ZS0+YmFzZS52aXNpYmxlID0gZmFsc2U7Ci0tIAoyLjIx LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==