From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [PATCH 17/36] drm/tegra: sor: Demidlayer Date: Tue, 20 Jan 2015 11:48:36 +0100 Message-ID: <1421750935-4023-18-git-send-email-thierry.reding@gmail.com> References: <1421750935-4023-1-git-send-email-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1421750935-4023-1-git-send-email-thierry.reding@gmail.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 Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org List-Id: linux-tegra@vger.kernel.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KCkltcGxlbWVudCBlbmNv ZGVyIGFuZCBjb25uZWN0b3Igd2l0aGluIHRoZSBlRFAgZHJpdmVyIGl0c2VsZiB1c2luZyB0aGUK VGVncmEgb3V0cHV0IGhlbHBlcnMgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIFRlZ3JhIG91dHB1dCBh cyBtaWRsYXllci4gQnkKZG9pbmcgc28gb25lIGxldmVsIG9mIGluZGlyZWN0aW9uIGlzIHJlbW92 ZWQgYW5kIG91dHB1dCBkcml2ZXJzIGJlY29tZQptb3JlIGZsZXhpYmxlIHdoaWxlIGtlZXBpbmcg dGhlIG1ham9yaXR5IG9mIHRoZSBhZHZhbnRhZ2VzIHByb3ZpZGVkIGJ5CnRoZSBjb21tb24gb3V0 cHV0IGhlbHBlcnMuCgpTaWduZWQtb2ZmLWJ5OiBUaGllcnJ5IFJlZGluZyA8dHJlZGluZ0Budmlk aWEuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS90ZWdyYS9kcm0uaCAgICB8ICAgNSAtCiBkcml2 ZXJzL2dwdS9kcm0vdGVncmEvb3V0cHV0LmMgfCAgMTUgKy0KIGRyaXZlcnMvZ3B1L2RybS90ZWdy YS9zb3IuYyAgICB8IDgxMCArKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0t LQogMyBmaWxlcyBjaGFuZ2VkLCA0MzYgaW5zZXJ0aW9ucygrKSwgMzk0IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kcm0uaCBiL2RyaXZlcnMvZ3B1L2Ry bS90ZWdyYS9kcm0uaAppbmRleCBhZTNkYWE0MzZlZTYuLmM3NGQ1ZGI0NzUzNyAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RybS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdy YS9kcm0uaApAQCAtMTkyLDE2ICsxOTIsMTEgQEAgc3RydWN0IHRlZ3JhX291dHB1dF9vcHMgewog CWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgKCpkZXRlY3QpKHN0cnVjdCB0ZWdyYV9vdXRwdXQg Km91dHB1dCk7CiB9OwogCi1lbnVtIHRlZ3JhX291dHB1dF90eXBlIHsKLQlURUdSQV9PVVRQVVRf RURQLAotfTsKLQogc3RydWN0IHRlZ3JhX291dHB1dCB7CiAJc3RydWN0IGRldmljZV9ub2RlICpv Zl9ub2RlOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAogCWNvbnN0IHN0cnVjdCB0ZWdyYV9vdXRw dXRfb3BzICpvcHM7Ci0JZW51bSB0ZWdyYV9vdXRwdXRfdHlwZSB0eXBlOwogCiAJc3RydWN0IGRy bV9wYW5lbCAqcGFuZWw7CiAJc3RydWN0IGkyY19hZGFwdGVyICpkZGM7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vdGVncmEvb3V0cHV0LmMgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvb3V0 cHV0LmMKaW5kZXggYmM1MzkzZmQwM2M3Li4wNDJiNDIxNDE2YTggMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS90ZWdyYS9vdXRwdXQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvb3V0 cHV0LmMKQEAgLTI3MywxOSArMjczLDggQEAgaW50IHRlZ3JhX291dHB1dF9yZW1vdmUoc3RydWN0 IHRlZ3JhX291dHB1dCAqb3V0cHV0KQogCiBpbnQgdGVncmFfb3V0cHV0X2luaXQoc3RydWN0IGRy bV9kZXZpY2UgKmRybSwgc3RydWN0IHRlZ3JhX291dHB1dCAqb3V0cHV0KQogewotCWludCBjb25u ZWN0b3IsIGVuY29kZXI7Ci0KLQlzd2l0Y2ggKG91dHB1dC0+dHlwZSkgewotCWNhc2UgVEVHUkFf T1VUUFVUX0VEUDoKLQkJY29ubmVjdG9yID0gRFJNX01PREVfQ09OTkVDVE9SX2VEUDsKLQkJZW5j b2RlciA9IERSTV9NT0RFX0VOQ09ERVJfVE1EUzsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlj b25uZWN0b3IgPSBEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93bjsKLQkJZW5jb2RlciA9IERSTV9N T0RFX0VOQ09ERVJfTk9ORTsKLQkJYnJlYWs7Ci0JfQorCWludCBjb25uZWN0b3IgPSBEUk1fTU9E RV9DT05ORUNUT1JfVW5rbm93bjsKKwlpbnQgZW5jb2RlciA9IERSTV9NT0RFX0VOQ09ERVJfTk9O RTsKIAogCWRybV9jb25uZWN0b3JfaW5pdChkcm0sICZvdXRwdXQtPmNvbm5lY3RvciwgJmNvbm5l Y3Rvcl9mdW5jcywKIAkJCSAgIGNvbm5lY3Rvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vdGVncmEvc29yLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvc29yLmMKaW5kZXggMWZlODAx ZWU4ZWIwLi5iZTFhZDQyYzY5YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9z b3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvc29yLmMKQEAgLTgsNiArOCw3IEBACiAK ICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5j bHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGlu dXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KQEAgLTE1LDYg KzE2LDcgQEAKICNpbmNsdWRlIDxzb2MvdGVncmEvcG1jLmg+CiAKICNpbmNsdWRlIDxkcm0vZHJt X2RwX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KIAogI2luY2x1ZGUgImRj LmgiCiAjaW5jbHVkZSAiZHJtLmgiCkBAIC00ODEsMTAgKzQ4MywzNDIgQEAgc3RhdGljIGludCB0 ZWdyYV9zb3JfY2FsY19jb25maWcoc3RydWN0IHRlZ3JhX3NvciAqc29yLAogCXJldHVybiAwOwog fQogCi1zdGF0aWMgaW50IHRlZ3JhX291dHB1dF9zb3JfZW5hYmxlKHN0cnVjdCB0ZWdyYV9vdXRw dXQgKm91dHB1dCkKK3N0YXRpYyBpbnQgdGVncmFfc29yX2RldGFjaChzdHJ1Y3QgdGVncmFfc29y ICpzb3IpCit7CisJdW5zaWduZWQgbG9uZyB2YWx1ZSwgdGltZW91dDsKKworCS8qIHN3aXRjaCB0 byBzYWZlIG1vZGUgKi8KKwl2YWx1ZSA9IHRlZ3JhX3Nvcl9yZWFkbChzb3IsIFNPUl9TVVBFUl9T VEFURV8xKTsKKwl2YWx1ZSAmPSB+U09SX1NVUEVSX1NUQVRFX01PREVfTk9STUFMOworCXRlZ3Jh X3Nvcl93cml0ZWwoc29yLCB2YWx1ZSwgU09SX1NVUEVSX1NUQVRFXzEpOworCXRlZ3JhX3Nvcl9z dXBlcl91cGRhdGUoc29yKTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmll cygyNTApOworCisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCXZh bHVlID0gdGVncmFfc29yX3JlYWRsKHNvciwgU09SX1BXUik7CisJCWlmICh2YWx1ZSAmIFNPUl9Q V1JfTU9ERV9TQUZFKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCh2YWx1ZSAmIFNPUl9QV1JfTU9E RV9TQUZFKSA9PSAwKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCS8qIGdvIHRvIHNsZWVwICov CisJdmFsdWUgPSB0ZWdyYV9zb3JfcmVhZGwoc29yLCBTT1JfU1VQRVJfU1RBVEVfMSk7CisJdmFs dWUgJj0gflNPUl9TVVBFUl9TVEFURV9IRUFEX01PREVfTUFTSzsKKwl0ZWdyYV9zb3Jfd3JpdGVs KHNvciwgdmFsdWUsIFNPUl9TVVBFUl9TVEFURV8xKTsKKwl0ZWdyYV9zb3Jfc3VwZXJfdXBkYXRl KHNvcik7CisKKwkvKiBkZXRhY2ggKi8KKwl2YWx1ZSA9IHRlZ3JhX3Nvcl9yZWFkbChzb3IsIFNP Ul9TVVBFUl9TVEFURV8xKTsKKwl2YWx1ZSAmPSB+U09SX1NVUEVSX1NUQVRFX0FUVEFDSEVEOwor CXRlZ3JhX3Nvcl93cml0ZWwoc29yLCB2YWx1ZSwgU09SX1NVUEVSX1NUQVRFXzEpOworCXRlZ3Jh X3Nvcl9zdXBlcl91cGRhdGUoc29yKTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9f amlmZmllcygyNTApOworCisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7 CisJCXZhbHVlID0gdGVncmFfc29yX3JlYWRsKHNvciwgU09SX1RFU1QpOworCQlpZiAoKHZhbHVl ICYgU09SX1RFU1RfQVRUQUNIRUQpID09IDApCisJCQlicmVhazsKKworCQl1c2xlZXBfcmFuZ2Uo MjUsIDEwMCk7CisJfQorCisJaWYgKCh2YWx1ZSAmIFNPUl9URVNUX0FUVEFDSEVEKSAhPSAwKQor CQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRlZ3Jh X3Nvcl9wb3dlcl9kb3duKHN0cnVjdCB0ZWdyYV9zb3IgKnNvcikKK3sKKwl1bnNpZ25lZCBsb25n IHZhbHVlLCB0aW1lb3V0OworCWludCBlcnI7CisKKwl2YWx1ZSA9IHRlZ3JhX3Nvcl9yZWFkbChz b3IsIFNPUl9QV1IpOworCXZhbHVlICY9IH5TT1JfUFdSX05PUk1BTF9TVEFURV9QVTsKKwl2YWx1 ZSB8PSBTT1JfUFdSX1RSSUdHRVI7CisJdGVncmFfc29yX3dyaXRlbChzb3IsIHZhbHVlLCBTT1Jf UFdSKTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyNTApOworCisJ d2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCXZhbHVlID0gdGVncmFf c29yX3JlYWRsKHNvciwgU09SX1BXUik7CisJCWlmICgodmFsdWUgJiBTT1JfUFdSX1RSSUdHRVIp ID09IDApCisJCQlyZXR1cm4gMDsKKworCQl1c2xlZXBfcmFuZ2UoMjUsIDEwMCk7CisJfQorCisJ aWYgKCh2YWx1ZSAmIFNPUl9QV1JfVFJJR0dFUikgIT0gMCkKKwkJcmV0dXJuIC1FVElNRURPVVQ7 CisKKwllcnIgPSBjbGtfc2V0X3BhcmVudChzb3ItPmNsaywgc29yLT5jbGtfc2FmZSk7CisJaWYg KGVyciA8IDApCisJCWRldl9lcnIoc29yLT5kZXYsICJmYWlsZWQgdG8gc2V0IHNhZmUgcGFyZW50 IGNsb2NrOiAlZFxuIiwgZXJyKTsKKworCXZhbHVlID0gdGVncmFfc29yX3JlYWRsKHNvciwgU09S X0RQX1BBRENUTF8wKTsKKwl2YWx1ZSAmPSB+KFNPUl9EUF9QQURDVExfUERfVFhEXzMgfCBTT1Jf RFBfUEFEQ1RMX1BEX1RYRF8wIHwKKwkJICAgU09SX0RQX1BBRENUTF9QRF9UWERfMSB8IFNPUl9E UF9QQURDVExfUERfVFhEXzIpOworCXRlZ3JhX3Nvcl93cml0ZWwoc29yLCB2YWx1ZSwgU09SX0RQ X1BBRENUTF8wKTsKKworCS8qIHN0b3AgbGFuZSBzZXF1ZW5jZXIgKi8KKwl2YWx1ZSA9IFNPUl9M QU5FX1NFUV9DVExfVFJJR0dFUiB8IFNPUl9MQU5FX1NFUV9DVExfU0VRVUVOQ0VfVVAgfAorCQlT T1JfTEFORV9TRVFfQ1RMX1BPV0VSX1NUQVRFX0RPV047CisJdGVncmFfc29yX3dyaXRlbChzb3Is IHZhbHVlLCBTT1JfTEFORV9TRVFfQ1RMKTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3Nf dG9famlmZmllcygyNTApOworCisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQp KSB7CisJCXZhbHVlID0gdGVncmFfc29yX3JlYWRsKHNvciwgU09SX0xBTkVfU0VRX0NUTCk7CisJ CWlmICgodmFsdWUgJiBTT1JfTEFORV9TRVFfQ1RMX1RSSUdHRVIpID09IDApCisJCQlicmVhazsK KworCQl1c2xlZXBfcmFuZ2UoMjUsIDEwMCk7CisJfQorCisJaWYgKCh2YWx1ZSAmIFNPUl9MQU5F X1NFUV9DVExfVFJJR0dFUikgIT0gMCkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwl2YWx1ZSA9 IHRlZ3JhX3Nvcl9yZWFkbChzb3IsIFNPUl9QTExfMik7CisJdmFsdWUgfD0gU09SX1BMTF8yX1BP UlRfUE9XRVJET1dOOworCXRlZ3JhX3Nvcl93cml0ZWwoc29yLCB2YWx1ZSwgU09SX1BMTF8yKTsK KworCXVzbGVlcF9yYW5nZSgyMCwgMTAwKTsKKworCXZhbHVlID0gdGVncmFfc29yX3JlYWRsKHNv ciwgU09SX1BMTF8wKTsKKwl2YWx1ZSB8PSBTT1JfUExMXzBfUE9XRVJfT0ZGOworCXZhbHVlIHw9 IFNPUl9QTExfMF9WQ09QRDsKKwl0ZWdyYV9zb3Jfd3JpdGVsKHNvciwgdmFsdWUsIFNPUl9QTExf MCk7CisKKwl2YWx1ZSA9IHRlZ3JhX3Nvcl9yZWFkbChzb3IsIFNPUl9QTExfMik7CisJdmFsdWUg fD0gU09SX1BMTF8yX1NFUV9QTExDQVBQRDsKKwl2YWx1ZSB8PSBTT1JfUExMXzJfU0VRX1BMTENB UFBEX0VORk9SQ0U7CisJdGVncmFfc29yX3dyaXRlbChzb3IsIHZhbHVlLCBTT1JfUExMXzIpOwor CisJdXNsZWVwX3JhbmdlKDIwLCAxMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg dGVncmFfc29yX2NyY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxl KQoreworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCB0ZWdyYV9zb3JfY3JjX3JlbGVhc2Uoc3RydWN0IGlub2RlICpp bm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg dGVncmFfc29yX2NyY193YWl0KHN0cnVjdCB0ZWdyYV9zb3IgKnNvciwgdW5zaWduZWQgbG9uZyB0 aW1lb3V0KQoreworCXUzMiB2YWx1ZTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9f amlmZmllcyh0aW1lb3V0KTsKKworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0 KSkgeworCQl2YWx1ZSA9IHRlZ3JhX3Nvcl9yZWFkbChzb3IsIFNPUl9DUkNfQSk7CisJCWlmICh2 YWx1ZSAmIFNPUl9DUkNfQV9WQUxJRCkKKwkJCXJldHVybiAwOworCisJCXVzbGVlcF9yYW5nZSgx MDAsIDIwMCk7CisJfQorCisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90 IHRlZ3JhX3Nvcl9jcmNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZl ciwKKwkJCQkgIHNpemVfdCBzaXplLCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHRlZ3JhX3Nv ciAqc29yID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXNzaXplX3QgbnVtLCBlcnI7CisJY2hhciBi dWZbMTBdOworCXUzMiB2YWx1ZTsKKworCW11dGV4X2xvY2soJnNvci0+bG9jayk7CisKKwlpZiAo IXNvci0+ZW5hYmxlZCkgeworCQllcnIgPSAtRUFHQUlOOworCQlnb3RvIHVubG9jazsKKwl9CisK Kwl2YWx1ZSA9IHRlZ3JhX3Nvcl9yZWFkbChzb3IsIFNPUl9TVEFURV8xKTsKKwl2YWx1ZSAmPSB+ U09SX1NUQVRFX0FTWV9DUkNfTU9ERV9NQVNLOworCXRlZ3JhX3Nvcl93cml0ZWwoc29yLCB2YWx1 ZSwgU09SX1NUQVRFXzEpOworCisJdmFsdWUgPSB0ZWdyYV9zb3JfcmVhZGwoc29yLCBTT1JfQ1JD X0NOVFJMKTsKKwl2YWx1ZSB8PSBTT1JfQ1JDX0NOVFJMX0VOQUJMRTsKKwl0ZWdyYV9zb3Jfd3Jp dGVsKHNvciwgdmFsdWUsIFNPUl9DUkNfQ05UUkwpOworCisJdmFsdWUgPSB0ZWdyYV9zb3JfcmVh ZGwoc29yLCBTT1JfVEVTVCk7CisJdmFsdWUgJj0gflNPUl9URVNUX0NSQ19QT1NUX1NFUklBTEla RTsKKwl0ZWdyYV9zb3Jfd3JpdGVsKHNvciwgdmFsdWUsIFNPUl9URVNUKTsKKworCWVyciA9IHRl Z3JhX3Nvcl9jcmNfd2FpdChzb3IsIDEwMCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gdW5sb2Nr OworCisJdGVncmFfc29yX3dyaXRlbChzb3IsIFNPUl9DUkNfQV9SRVNFVCwgU09SX0NSQ19BKTsK Kwl2YWx1ZSA9IHRlZ3JhX3Nvcl9yZWFkbChzb3IsIFNPUl9DUkNfQik7CisKKwludW0gPSBzY25w cmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUwOHhcbiIsIHZhbHVlKTsKKworCWVyciA9IHNpbXBs ZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZmZlciwgc2l6ZSwgcHBvcywgYnVmLCBudW0pOworCit1bmxv Y2s6CisJbXV0ZXhfdW5sb2NrKCZzb3ItPmxvY2spOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRlZ3JhX3Nvcl9jcmNfZm9wcyA9IHsKKwku b3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHRlZ3JhX3Nvcl9jcmNfb3BlbiwKKwkucmVh ZCA9IHRlZ3JhX3Nvcl9jcmNfcmVhZCwKKwkucmVsZWFzZSA9IHRlZ3JhX3Nvcl9jcmNfcmVsZWFz ZSwKK307CisKK3N0YXRpYyBpbnQgdGVncmFfc29yX2RlYnVnZnNfaW5pdChzdHJ1Y3QgdGVncmFf c29yICpzb3IsCisJCQkJICBzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKIHsKLQlzdHJ1Y3QgdGVn cmFfZGMgKmRjID0gdG9fdGVncmFfZGMob3V0cHV0LT5lbmNvZGVyLmNydGMpOwotCXN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlID0gJmRjLT5iYXNlLm1vZGU7CisJc3RydWN0IGRlbnRyeSAq ZW50cnk7CisJaW50IGVyciA9IDA7CisKKwlzb3ItPmRlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9k aXIoInNvciIsIG1pbm9yLT5kZWJ1Z2ZzX3Jvb3QpOworCWlmICghc29yLT5kZWJ1Z2ZzKQorCQly ZXR1cm4gLUVOT01FTTsKKworCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiY3JjIiwgMDY0 NCwgc29yLT5kZWJ1Z2ZzLCBzb3IsCisJCQkJICAgICZ0ZWdyYV9zb3JfY3JjX2ZvcHMpOworCWlm ICghZW50cnkpIHsKKwkJZGV2X2Vycihzb3ItPmRldiwKKwkJCSJjYW5ub3QgY3JlYXRlIC9zeXMv a2VybmVsL2RlYnVnL2RyaS8lcy9zb3IvY3JjXG4iLAorCQkJbWlub3ItPmRlYnVnZnNfcm9vdC0+ ZF9uYW1lLm5hbWUpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIHJlbW92ZTsKKwl9CisKKwly ZXR1cm4gZXJyOworCityZW1vdmU6CisJZGVidWdmc19yZW1vdmUoc29yLT5kZWJ1Z2ZzKTsKKwlz b3ItPmRlYnVnZnMgPSBOVUxMOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdGVncmFf c29yX2RlYnVnZnNfZXhpdChzdHJ1Y3QgdGVncmFfc29yICpzb3IpCit7CisJZGVidWdmc19yZW1v dmVfcmVjdXJzaXZlKHNvci0+ZGVidWdmcyk7CisJc29yLT5kZWJ1Z2ZzID0gTlVMTDsKKworCXJl dHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9zb3JfY29ubmVjdG9yX2RwbXMoc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgaW50IG1vZGUpCit7Cit9CisKK3N0YXRpYyBlbnVt IGRybV9jb25uZWN0b3Jfc3RhdHVzCit0ZWdyYV9zb3JfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQoreworCXN0cnVjdCB0ZWdyYV9v dXRwdXQgKm91dHB1dCA9IGNvbm5lY3Rvcl90b19vdXRwdXQoY29ubmVjdG9yKTsKKwlzdHJ1Y3Qg dGVncmFfc29yICpzb3IgPSB0b19zb3Iob3V0cHV0KTsKKworCWlmIChzb3ItPmRwYXV4KQorCQly ZXR1cm4gdGVncmFfZHBhdXhfZGV0ZWN0KHNvci0+ZHBhdXgpOworCisJcmV0dXJuIGNvbm5lY3Rv cl9zdGF0dXNfdW5rbm93bjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9y X2Z1bmNzIHRlZ3JhX3Nvcl9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSB0ZWdyYV9zb3Jf Y29ubmVjdG9yX2RwbXMsCisJLmRldGVjdCA9IHRlZ3JhX3Nvcl9jb25uZWN0b3JfZGV0ZWN0LAor CS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAor CS5kZXN0cm95ID0gdGVncmFfb3V0cHV0X2Nvbm5lY3Rvcl9kZXN0cm95LAorfTsKKworc3RhdGlj IGludCB0ZWdyYV9zb3JfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yKQoreworCXN0cnVjdCB0ZWdyYV9vdXRwdXQgKm91dHB1dCA9IGNvbm5lY3Rvcl90 b19vdXRwdXQoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgdGVncmFfc29yICpzb3IgPSB0b19zb3Iob3V0 cHV0KTsKKwlpbnQgZXJyOworCisJaWYgKHNvci0+ZHBhdXgpCisJCXRlZ3JhX2RwYXV4X2VuYWJs ZShzb3ItPmRwYXV4KTsKKworCWVyciA9IHRlZ3JhX291dHB1dF9jb25uZWN0b3JfZ2V0X21vZGVz KGNvbm5lY3Rvcik7CisKKwlpZiAoc29yLT5kcGF1eCkKKwkJdGVncmFfZHBhdXhfZGlzYWJsZShz b3ItPmRwYXV4KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0 YXR1cwordGVncmFfc29yX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsCisJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7 CisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9oZWxwZXJfZnVuY3MgdGVncmFfc29yX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdl dF9tb2RlcyA9IHRlZ3JhX3Nvcl9jb25uZWN0b3JfZ2V0X21vZGVzLAorCS5tb2RlX3ZhbGlkID0g dGVncmFfc29yX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkLAorCS5iZXN0X2VuY29kZXIgPSB0ZWdyYV9v dXRwdXRfY29ubmVjdG9yX2Jlc3RfZW5jb2RlciwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2VuY29kZXJfZnVuY3MgdGVncmFfc29yX2VuY29kZXJfZnVuY3MgPSB7CisJLmRlc3Ryb3kg PSB0ZWdyYV9vdXRwdXRfZW5jb2Rlcl9kZXN0cm95LAorfTsKKworc3RhdGljIHZvaWQgdGVncmFf c29yX2VuY29kZXJfZHBtcyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGludCBtb2RlKQor eworfQorCitzdGF0aWMgYm9vbCB0ZWdyYV9zb3JfZW5jb2Rlcl9tb2RlX2ZpeHVwKHN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkJIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlLAorCQkJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkKQoreworCXN0 cnVjdCB0ZWdyYV9vdXRwdXQgKm91dHB1dCA9IGVuY29kZXJfdG9fb3V0cHV0KGVuY29kZXIpOwor CXN0cnVjdCB0ZWdyYV9kYyAqZGMgPSB0b190ZWdyYV9kYyhlbmNvZGVyLT5jcnRjKTsKKwl1bnNp Z25lZCBsb25nIHBjbGsgPSBtb2RlLT5jbG9jayAqIDEwMDA7CisJc3RydWN0IHRlZ3JhX3NvciAq c29yID0gdG9fc29yKG91dHB1dCk7CisJaW50IGVycjsKKworCWVyciA9IHRlZ3JhX2RjX3NldHVw X2Nsb2NrKGRjLCBzb3ItPmNsa19wYXJlbnQsIHBjbGssIDApOworCWlmIChlcnIgPCAwKSB7CisJ CWRldl9lcnIob3V0cHV0LT5kZXYsICJmYWlsZWQgdG8gc2V0dXAgREMgY2xvY2s6ICVkXG4iLCBl cnIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJZXJyID0gY2xrX3NldF9yYXRlKHNvci0+Y2xr X3BhcmVudCwgcGNsayk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihvdXRwdXQtPmRldiwg ImZhaWxlZCB0byBzZXQgY2xvY2sgcmF0ZSB0byAlbHUgSHpcbiIsCisJCQlwY2xrKTsKKwkJcmV0 dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9z b3JfZW5jb2Rlcl9wcmVwYXJlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKK30KKwor c3RhdGljIHZvaWQgdGVncmFfc29yX2VuY29kZXJfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2RlciAq ZW5jb2RlcikKK3sKK30KKworc3RhdGljIHZvaWQgdGVncmFfc29yX2VuY29kZXJfbW9kZV9zZXQo c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVz dGVkKQoreworCXN0cnVjdCB0ZWdyYV9vdXRwdXQgKm91dHB1dCA9IGVuY29kZXJfdG9fb3V0cHV0 KGVuY29kZXIpOworCXN0cnVjdCB0ZWdyYV9kYyAqZGMgPSB0b190ZWdyYV9kYyhlbmNvZGVyLT5j cnRjKTsKIAl1bnNpZ25lZCBpbnQgdmJlLCB2c2UsIGhiZSwgaHNlLCB2YnMsIGhicywgaTsKIAlz dHJ1Y3QgdGVncmFfc29yICpzb3IgPSB0b19zb3Iob3V0cHV0KTsKIAlzdHJ1Y3QgdGVncmFfc29y X2NvbmZpZyBjb25maWc7CkBAIC01MDQsNiArODM4LDkgQEAgc3RhdGljIGludCB0ZWdyYV9vdXRw dXRfc29yX2VuYWJsZShzdHJ1Y3QgdGVncmFfb3V0cHV0ICpvdXRwdXQpCiAKIAlyZXNldF9jb250 cm9sX2RlYXNzZXJ0KHNvci0+cnN0KTsKIAorCWlmIChvdXRwdXQtPnBhbmVsKQorCQlkcm1fcGFu ZWxfcHJlcGFyZShvdXRwdXQtPnBhbmVsKTsKKwogCS8qIEZJWE1FOiBwcm9wZXJseSBjb252ZXJ0 IHRvIHN0cnVjdCBkcm1fZHBfYXV4ICovCiAJYXV4ID0gKHN0cnVjdCBkcm1fZHBfYXV4ICopc29y LT5kcGF1eDsKIApAQCAtODczLDE3NSArMTIxMCw2MSBAQCBzdGF0aWMgaW50IHRlZ3JhX291dHB1 dF9zb3JfZW5hYmxlKHN0cnVjdCB0ZWdyYV9vdXRwdXQgKm91dHB1dCkKIAl2YWx1ZSA9ICgodmJz ICYgMHg3ZmZmKSA8PCAxNikgfCAoaGJzICYgMHg3ZmZmKTsKIAl0ZWdyYV9zb3Jfd3JpdGVsKHNv ciwgdmFsdWUsIFNPUl9IRUFEX1NUQVRFXzQoMCkpOwogCi0JLyogQ1NUTSAoTFZEUywgbGluayBB L0IsIHVwcGVyKSAqLwotCXZhbHVlID0gU09SX0NTVE1fTFZEUyB8IFNPUl9DU1RNX0xJTktfQUNU X0EgfCBTT1JfQ1NUTV9MSU5LX0FDVF9CIHwKLQkJU09SX0NTVE1fVVBQRVI7Ci0JdGVncmFfc29y X3dyaXRlbChzb3IsIHZhbHVlLCBTT1JfQ1NUTSk7Ci0KLQkvKiBQV00gc2V0dXAgKi8KLQllcnIg PSB0ZWdyYV9zb3Jfc2V0dXBfcHdtKHNvciwgMjUwKTsKLQlpZiAoZXJyIDwgMCkgewotCQlkZXZf ZXJyKHNvci0+ZGV2LCAiZmFpbGVkIHRvIHNldHVwIFBXTTogJWRcbiIsIGVycik7Ci0JCWdvdG8g dW5sb2NrOwotCX0KLQotCXZhbHVlID0gdGVncmFfZGNfcmVhZGwoZGMsIERDX0RJU1BfRElTUF9X SU5fT1BUSU9OUyk7Ci0JdmFsdWUgfD0gU09SX0VOQUJMRTsKLQl0ZWdyYV9kY193cml0ZWwoZGMs IHZhbHVlLCBEQ19ESVNQX0RJU1BfV0lOX09QVElPTlMpOwotCi0JdGVncmFfc29yX3VwZGF0ZShz b3IpOwotCi0JZXJyID0gdGVncmFfc29yX2F0dGFjaChzb3IpOwotCWlmIChlcnIgPCAwKSB7Ci0J CWRldl9lcnIoc29yLT5kZXYsICJmYWlsZWQgdG8gYXR0YWNoIFNPUjogJWRcbiIsIGVycik7Ci0J CWdvdG8gdW5sb2NrOwotCX0KLQotCWVyciA9IHRlZ3JhX3Nvcl93YWtldXAoc29yKTsKLQlpZiAo ZXJyIDwgMCkgewotCQlkZXZfZXJyKHNvci0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBEQzogJWRc biIsIGVycik7Ci0JCWdvdG8gdW5sb2NrOwotCX0KLQotCXNvci0+ZW5hYmxlZCA9IHRydWU7Ci0K LXVubG9jazoKLQltdXRleF91bmxvY2soJnNvci0+bG9jayk7Ci0JcmV0dXJuIGVycjsKLX0KLQot c3RhdGljIGludCB0ZWdyYV9zb3JfZGV0YWNoKHN0cnVjdCB0ZWdyYV9zb3IgKnNvcikKLXsKLQl1 bnNpZ25lZCBsb25nIHZhbHVlLCB0aW1lb3V0OwotCi0JLyogc3dpdGNoIHRvIHNhZmUgbW9kZSAq LwotCXZhbHVlID0gdGVncmFfc29yX3JlYWRsKHNvciwgU09SX1NVUEVSX1NUQVRFXzEpOwotCXZh bHVlICY9IH5TT1JfU1VQRVJfU1RBVEVfTU9ERV9OT1JNQUw7Ci0JdGVncmFfc29yX3dyaXRlbChz b3IsIHZhbHVlLCBTT1JfU1VQRVJfU1RBVEVfMSk7Ci0JdGVncmFfc29yX3N1cGVyX3VwZGF0ZShz b3IpOwotCi0JdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDI1MCk7Ci0KLQl3 aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKLQkJdmFsdWUgPSB0ZWdyYV9z b3JfcmVhZGwoc29yLCBTT1JfUFdSKTsKLQkJaWYgKHZhbHVlICYgU09SX1BXUl9NT0RFX1NBRkUp Ci0JCQlicmVhazsKLQl9Ci0KLQlpZiAoKHZhbHVlICYgU09SX1BXUl9NT0RFX1NBRkUpID09IDAp Ci0JCXJldHVybiAtRVRJTUVET1VUOwotCi0JLyogZ28gdG8gc2xlZXAgKi8KLQl2YWx1ZSA9IHRl Z3JhX3Nvcl9yZWFkbChzb3IsIFNPUl9TVVBFUl9TVEFURV8xKTsKLQl2YWx1ZSAmPSB+U09SX1NV UEVSX1NUQVRFX0hFQURfTU9ERV9NQVNLOwotCXRlZ3JhX3Nvcl93cml0ZWwoc29yLCB2YWx1ZSwg U09SX1NVUEVSX1NUQVRFXzEpOwotCXRlZ3JhX3Nvcl9zdXBlcl91cGRhdGUoc29yKTsKLQotCS8q IGRldGFjaCAqLwotCXZhbHVlID0gdGVncmFfc29yX3JlYWRsKHNvciwgU09SX1NVUEVSX1NUQVRF XzEpOwotCXZhbHVlICY9IH5TT1JfU1VQRVJfU1RBVEVfQVRUQUNIRUQ7Ci0JdGVncmFfc29yX3dy aXRlbChzb3IsIHZhbHVlLCBTT1JfU1VQRVJfU1RBVEVfMSk7Ci0JdGVncmFfc29yX3N1cGVyX3Vw ZGF0ZShzb3IpOwotCi0JdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDI1MCk7 Ci0KLQl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKLQkJdmFsdWUgPSB0 ZWdyYV9zb3JfcmVhZGwoc29yLCBTT1JfVEVTVCk7Ci0JCWlmICgodmFsdWUgJiBTT1JfVEVTVF9B VFRBQ0hFRCkgPT0gMCkKLQkJCWJyZWFrOwotCi0JCXVzbGVlcF9yYW5nZSgyNSwgMTAwKTsKLQl9 Ci0KLQlpZiAoKHZhbHVlICYgU09SX1RFU1RfQVRUQUNIRUQpICE9IDApCi0JCXJldHVybiAtRVRJ TUVET1VUOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdGVncmFfc29yX3Bvd2VyX2Rv d24oc3RydWN0IHRlZ3JhX3NvciAqc29yKQotewotCXVuc2lnbmVkIGxvbmcgdmFsdWUsIHRpbWVv dXQ7Ci0JaW50IGVycjsKLQotCXZhbHVlID0gdGVncmFfc29yX3JlYWRsKHNvciwgU09SX1BXUik7 Ci0JdmFsdWUgJj0gflNPUl9QV1JfTk9STUFMX1NUQVRFX1BVOwotCXZhbHVlIHw9IFNPUl9QV1Jf VFJJR0dFUjsKLQl0ZWdyYV9zb3Jfd3JpdGVsKHNvciwgdmFsdWUsIFNPUl9QV1IpOwotCi0JdGlt ZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDI1MCk7Ci0KLQl3aGlsZSAodGltZV9i ZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKLQkJdmFsdWUgPSB0ZWdyYV9zb3JfcmVhZGwoc29y LCBTT1JfUFdSKTsKLQkJaWYgKCh2YWx1ZSAmIFNPUl9QV1JfVFJJR0dFUikgPT0gMCkKLQkJCXJl dHVybiAwOwotCi0JCXVzbGVlcF9yYW5nZSgyNSwgMTAwKTsKLQl9Ci0KLQlpZiAoKHZhbHVlICYg U09SX1BXUl9UUklHR0VSKSAhPSAwKQotCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQotCWVyciA9IGNs a19zZXRfcGFyZW50KHNvci0+Y2xrLCBzb3ItPmNsa19zYWZlKTsKLQlpZiAoZXJyIDwgMCkKLQkJ ZGV2X2Vycihzb3ItPmRldiwgImZhaWxlZCB0byBzZXQgc2FmZSBwYXJlbnQgY2xvY2s6ICVkXG4i LCBlcnIpOwotCi0JdmFsdWUgPSB0ZWdyYV9zb3JfcmVhZGwoc29yLCBTT1JfRFBfUEFEQ1RMXzAp OwotCXZhbHVlICY9IH4oU09SX0RQX1BBRENUTF9QRF9UWERfMyB8IFNPUl9EUF9QQURDVExfUERf VFhEXzAgfAotCQkgICBTT1JfRFBfUEFEQ1RMX1BEX1RYRF8xIHwgU09SX0RQX1BBRENUTF9QRF9U WERfMik7Ci0JdGVncmFfc29yX3dyaXRlbChzb3IsIHZhbHVlLCBTT1JfRFBfUEFEQ1RMXzApOwot Ci0JLyogc3RvcCBsYW5lIHNlcXVlbmNlciAqLwotCXZhbHVlID0gU09SX0xBTkVfU0VRX0NUTF9U UklHR0VSIHwgU09SX0xBTkVfU0VRX0NUTF9TRVFVRU5DRV9VUCB8Ci0JCVNPUl9MQU5FX1NFUV9D VExfUE9XRVJfU1RBVEVfRE9XTjsKLQl0ZWdyYV9zb3Jfd3JpdGVsKHNvciwgdmFsdWUsIFNPUl9M QU5FX1NFUV9DVEwpOwotCi0JdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDI1 MCk7Ci0KLQl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKLQkJdmFsdWUg PSB0ZWdyYV9zb3JfcmVhZGwoc29yLCBTT1JfTEFORV9TRVFfQ1RMKTsKLQkJaWYgKCh2YWx1ZSAm IFNPUl9MQU5FX1NFUV9DVExfVFJJR0dFUikgPT0gMCkKLQkJCWJyZWFrOwotCi0JCXVzbGVlcF9y YW5nZSgyNSwgMTAwKTsKKwkvKiBDU1RNIChMVkRTLCBsaW5rIEEvQiwgdXBwZXIpICovCisJdmFs dWUgPSBTT1JfQ1NUTV9MVkRTIHwgU09SX0NTVE1fTElOS19BQ1RfQSB8IFNPUl9DU1RNX0xJTktf QUNUX0IgfAorCQlTT1JfQ1NUTV9VUFBFUjsKKwl0ZWdyYV9zb3Jfd3JpdGVsKHNvciwgdmFsdWUs IFNPUl9DU1RNKTsKKworCS8qIFBXTSBzZXR1cCAqLworCWVyciA9IHRlZ3JhX3Nvcl9zZXR1cF9w d20oc29yLCAyNTApOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoc29yLT5kZXYsICJmYWls ZWQgdG8gc2V0dXAgUFdNOiAlZFxuIiwgZXJyKTsKKwkJZ290byB1bmxvY2s7CiAJfQogCi0JaWYg KCh2YWx1ZSAmIFNPUl9MQU5FX1NFUV9DVExfVFJJR0dFUikgIT0gMCkKLQkJcmV0dXJuIC1FVElN RURPVVQ7CisJdmFsdWUgPSB0ZWdyYV9kY19yZWFkbChkYywgRENfRElTUF9ESVNQX1dJTl9PUFRJ T05TKTsKKwl2YWx1ZSB8PSBTT1JfRU5BQkxFOworCXRlZ3JhX2RjX3dyaXRlbChkYywgdmFsdWUs IERDX0RJU1BfRElTUF9XSU5fT1BUSU9OUyk7CiAKLQl2YWx1ZSA9IHRlZ3JhX3Nvcl9yZWFkbChz b3IsIFNPUl9QTExfMik7Ci0JdmFsdWUgfD0gU09SX1BMTF8yX1BPUlRfUE9XRVJET1dOOwotCXRl Z3JhX3Nvcl93cml0ZWwoc29yLCB2YWx1ZSwgU09SX1BMTF8yKTsKKwl0ZWdyYV9zb3JfdXBkYXRl KHNvcik7CiAKLQl1c2xlZXBfcmFuZ2UoMjAsIDEwMCk7CisJZXJyID0gdGVncmFfc29yX2F0dGFj aChzb3IpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoc29yLT5kZXYsICJmYWlsZWQgdG8g YXR0YWNoIFNPUjogJWRcbiIsIGVycik7CisJCWdvdG8gdW5sb2NrOworCX0KIAotCXZhbHVlID0g dGVncmFfc29yX3JlYWRsKHNvciwgU09SX1BMTF8wKTsKLQl2YWx1ZSB8PSBTT1JfUExMXzBfUE9X RVJfT0ZGOwotCXZhbHVlIHw9IFNPUl9QTExfMF9WQ09QRDsKLQl0ZWdyYV9zb3Jfd3JpdGVsKHNv ciwgdmFsdWUsIFNPUl9QTExfMCk7CisJZXJyID0gdGVncmFfc29yX3dha2V1cChzb3IpOworCWlm IChlcnIgPCAwKSB7CisJCWRldl9lcnIoc29yLT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIERDOiAl ZFxuIiwgZXJyKTsKKwkJZ290byB1bmxvY2s7CisJfQogCi0JdmFsdWUgPSB0ZWdyYV9zb3JfcmVh ZGwoc29yLCBTT1JfUExMXzIpOwotCXZhbHVlIHw9IFNPUl9QTExfMl9TRVFfUExMQ0FQUEQ7Ci0J dmFsdWUgfD0gU09SX1BMTF8yX1NFUV9QTExDQVBQRF9FTkZPUkNFOwotCXRlZ3JhX3Nvcl93cml0 ZWwoc29yLCB2YWx1ZSwgU09SX1BMTF8yKTsKKwlpZiAob3V0cHV0LT5wYW5lbCkKKwkJZHJtX3Bh bmVsX2VuYWJsZShvdXRwdXQtPnBhbmVsKTsKIAotCXVzbGVlcF9yYW5nZSgyMCwgMTAwKTsKKwlz b3ItPmVuYWJsZWQgPSB0cnVlOwogCi0JcmV0dXJuIDA7Cit1bmxvY2s6CisJbXV0ZXhfdW5sb2Nr KCZzb3ItPmxvY2spOwogfQogCi1zdGF0aWMgaW50IHRlZ3JhX291dHB1dF9zb3JfZGlzYWJsZShz dHJ1Y3QgdGVncmFfb3V0cHV0ICpvdXRwdXQpCitzdGF0aWMgdm9pZCB0ZWdyYV9zb3JfZW5jb2Rl cl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIHsKLQlzdHJ1Y3QgdGVncmFf ZGMgKmRjID0gdG9fdGVncmFfZGMob3V0cHV0LT5lbmNvZGVyLmNydGMpOworCXN0cnVjdCB0ZWdy YV9vdXRwdXQgKm91dHB1dCA9IGVuY29kZXJfdG9fb3V0cHV0KGVuY29kZXIpOworCXN0cnVjdCB0 ZWdyYV9kYyAqZGMgPSB0b190ZWdyYV9kYyhlbmNvZGVyLT5jcnRjKTsKIAlzdHJ1Y3QgdGVncmFf c29yICpzb3IgPSB0b19zb3Iob3V0cHV0KTsKLQl1bnNpZ25lZCBsb25nIHZhbHVlOwotCWludCBl cnIgPSAwOworCXUzMiB2YWx1ZTsKKwlpbnQgZXJyOwogCiAJbXV0ZXhfbG9jaygmc29yLT5sb2Nr KTsKIAogCWlmICghc29yLT5lbmFibGVkKQogCQlnb3RvIHVubG9jazsKIAorCWlmIChvdXRwdXQt PnBhbmVsKQorCQlkcm1fcGFuZWxfZGlzYWJsZShvdXRwdXQtPnBhbmVsKTsKKwogCWVyciA9IHRl Z3JhX3Nvcl9kZXRhY2goc29yKTsKIAlpZiAoZXJyIDwgMCkgewogCQlkZXZfZXJyKHNvci0+ZGV2 LCAiZmFpbGVkIHRvIGRldGFjaCBTT1I6ICVkXG4iLCBlcnIpOwpAQCAtMTA1NiwyMSArMTI3OSw2 IEBAIHN0YXRpYyBpbnQgdGVncmFfb3V0cHV0X3Nvcl9kaXNhYmxlKHN0cnVjdCB0ZWdyYV9vdXRw dXQgKm91dHB1dCkKIAkgKiBzdXJlIGl0J3Mgb25seSBleGVjdXRlZCB3aGVuIHRoZSBvdXRwdXQg aXMgYXR0YWNoZWQgdG8gb25lLgogCSAqLwogCWlmIChkYykgewotCQkvKgotCQkgKiBYWFg6IFdl IGNhbid0IGRvIHRoaXMgaGVyZSBiZWNhdXNlIGl0IGNhdXNlcyB0aGUgU09SIHRvIGdvCi0JCSAq IGludG8gYW4gZXJyb25lb3VzIHN0YXRlIGFuZCB0aGUgb3V0cHV0IHdpbGwgbG9vayBzY3JhbWJs ZWQKLQkJICogdGhlIG5leHQgdGltZSBpdCBpcyBlbmFibGVkLiBQcmVzdW1hYmx5IHRoaXMgaXMg YmVjYXVzZSB3ZQotCQkgKiBzaG91bGQgYmUgZG9pbmcgdGhpcyBvbmx5IG9uIHRoZSBuZXh0IFZC TEFOSy4gQSBwb3NzaWJsZQotCQkgKiBzb2x1dGlvbiB3b3VsZCBiZSB0byBxdWV1ZSBhICJwb3dl ci1vZmYiIGV2ZW50IHRvIHRyaWdnZXIKLQkJICogdGhpcyBjb2RlIHRvIGJlIHJ1biBkdXJpbmcg dGhlIG5leHQgVkJMQU5LLgotCQkgKi8KLQkJLyoKLQkJdmFsdWUgPSB0ZWdyYV9kY19yZWFkbChk YywgRENfQ01EX0RJU1BMQVlfUE9XRVJfQ09OVFJPTCk7Ci0JCXZhbHVlICY9IH4oUFcwX0VOQUJM RSB8IFBXMV9FTkFCTEUgfCBQVzJfRU5BQkxFIHwgUFczX0VOQUJMRSB8Ci0JCQkgICBQVzRfRU5B QkxFIHwgUE0wX0VOQUJMRSB8IFBNMV9FTkFCTEUpOwotCQl0ZWdyYV9kY193cml0ZWwoZGMsIHZh bHVlLCBEQ19DTURfRElTUExBWV9QT1dFUl9DT05UUk9MKTsKLQkJKi8KLQogCQl2YWx1ZSA9IHRl Z3JhX2RjX3JlYWRsKGRjLCBEQ19ESVNQX0RJU1BfV0lOX09QVElPTlMpOwogCQl2YWx1ZSAmPSB+ U09SX0VOQUJMRTsKIAkJdGVncmFfZGNfd3JpdGVsKGRjLCB2YWx1ZSwgRENfRElTUF9ESVNQX1dJ Tl9PUFRJT05TKTsKQEAgLTEwOTgsMTg3ICsxMzA2LDI3IEBAIHN0YXRpYyBpbnQgdGVncmFfb3V0 cHV0X3Nvcl9kaXNhYmxlKHN0cnVjdCB0ZWdyYV9vdXRwdXQgKm91dHB1dCkKIAkJZ290byB1bmxv Y2s7CiAJfQogCi0JcmVzZXRfY29udHJvbF9hc3NlcnQoc29yLT5yc3QpOworCWlmIChvdXRwdXQt PnBhbmVsKQorCQlkcm1fcGFuZWxfdW5wcmVwYXJlKG91dHB1dC0+cGFuZWwpOworCiAJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKHNvci0+Y2xrKTsKKwlyZXNldF9jb250cm9sX2Fzc2VydChzb3ItPnJz dCk7CiAKIAlzb3ItPmVuYWJsZWQgPSBmYWxzZTsKIAogdW5sb2NrOgogCW11dGV4X3VubG9jaygm c29yLT5sb2NrKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHRlZ3JhX291dHB1dF9z b3Jfc2V0dXBfY2xvY2soc3RydWN0IHRlZ3JhX291dHB1dCAqb3V0cHV0LAotCQkJCQlzdHJ1Y3Qg Y2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcGNsaywKLQkJCQkJdW5zaWduZWQgaW50ICpkaXYpCi17 Ci0Jc3RydWN0IHRlZ3JhX3NvciAqc29yID0gdG9fc29yKG91dHB1dCk7Ci0JaW50IGVycjsKLQot CWVyciA9IGNsa19zZXRfcGFyZW50KGNsaywgc29yLT5jbGtfcGFyZW50KTsKLQlpZiAoZXJyIDwg MCkgewotCQlkZXZfZXJyKHNvci0+ZGV2LCAiZmFpbGVkIHRvIHNldCBwYXJlbnQgY2xvY2s6ICVk XG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWVyciA9IGNsa19zZXRfcmF0ZShzb3It PmNsa19wYXJlbnQsIHBjbGspOwotCWlmIChlcnIgPCAwKSB7Ci0JCWRldl9lcnIoc29yLT5kZXYs ICJmYWlsZWQgdG8gc2V0IGNsb2NrIHJhdGUgdG8gJWx1IEh6XG4iLCBwY2xrKTsKLQkJcmV0dXJu IGVycjsKLQl9Ci0KLQkqZGl2ID0gMDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHRl Z3JhX291dHB1dF9zb3JfY2hlY2tfbW9kZShzdHJ1Y3QgdGVncmFfb3V0cHV0ICpvdXRwdXQsCi0J CQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAotCQkJCSAgICAgICBlbnVt IGRybV9tb2RlX3N0YXR1cyAqc3RhdHVzKQotewotCS8qCi0JICogRklYTUU6IEZvciBub3csIGFs d2F5cyBhc3N1bWUgdGhhdCB0aGUgbW9kZSBpcyBva2F5LgotCSAqLwotCi0JKnN0YXR1cyA9IE1P REVfT0s7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0 dXMKLXRlZ3JhX291dHB1dF9zb3JfZGV0ZWN0KHN0cnVjdCB0ZWdyYV9vdXRwdXQgKm91dHB1dCkK LXsKLQlzdHJ1Y3QgdGVncmFfc29yICpzb3IgPSB0b19zb3Iob3V0cHV0KTsKLQotCWlmIChzb3It PmRwYXV4KQotCQlyZXR1cm4gdGVncmFfZHBhdXhfZGV0ZWN0KHNvci0+ZHBhdXgpOwotCi0JcmV0 dXJuIGNvbm5lY3Rvcl9zdGF0dXNfdW5rbm93bjsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB0 ZWdyYV9vdXRwdXRfb3BzIHNvcl9vcHMgPSB7Ci0JLmVuYWJsZSA9IHRlZ3JhX291dHB1dF9zb3Jf ZW5hYmxlLAotCS5kaXNhYmxlID0gdGVncmFfb3V0cHV0X3Nvcl9kaXNhYmxlLAotCS5zZXR1cF9j bG9jayA9IHRlZ3JhX291dHB1dF9zb3Jfc2V0dXBfY2xvY2ssCi0JLmNoZWNrX21vZGUgPSB0ZWdy YV9vdXRwdXRfc29yX2NoZWNrX21vZGUsCi0JLmRldGVjdCA9IHRlZ3JhX291dHB1dF9zb3JfZGV0 ZWN0LAotfTsKLQotc3RhdGljIGludCB0ZWdyYV9zb3JfY3JjX29wZW4oc3RydWN0IGlub2RlICpp bm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUt PmlfcHJpdmF0ZTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHRlZ3JhX3Nvcl9jcmNf cmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1 cm4gMDsKLX0KLQotc3RhdGljIGludCB0ZWdyYV9zb3JfY3JjX3dhaXQoc3RydWN0IHRlZ3JhX3Nv ciAqc29yLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCi17Ci0JdTMyIHZhbHVlOwotCi0JdGltZW91 dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOwotCi0Jd2hpbGUgKHRpbWVf YmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCXZhbHVlID0gdGVncmFfc29yX3JlYWRsKHNv ciwgU09SX0NSQ19BKTsKLQkJaWYgKHZhbHVlICYgU09SX0NSQ19BX1ZBTElEKQotCQkJcmV0dXJu IDA7Ci0KLQkJdXNsZWVwX3JhbmdlKDEwMCwgMjAwKTsKLQl9Ci0KLQlyZXR1cm4gLUVUSU1FRE9V VDsKLX0KLQotc3RhdGljIHNzaXplX3QgdGVncmFfc29yX2NyY19yZWFkKHN0cnVjdCBmaWxlICpm aWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJCSAgc2l6ZV90IHNpemUsIGxvZmZfdCAqcHBv cykKLXsKLQlzdHJ1Y3QgdGVncmFfc29yICpzb3IgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3Np emVfdCBudW0sIGVycjsKLQljaGFyIGJ1ZlsxMF07Ci0JdTMyIHZhbHVlOwotCi0JbXV0ZXhfbG9j aygmc29yLT5sb2NrKTsKLQotCWlmICghc29yLT5lbmFibGVkKSB7Ci0JCWVyciA9IC1FQUdBSU47 Ci0JCWdvdG8gdW5sb2NrOwotCX0KLQotCXZhbHVlID0gdGVncmFfc29yX3JlYWRsKHNvciwgU09S X1NUQVRFXzEpOwotCXZhbHVlICY9IH5TT1JfU1RBVEVfQVNZX0NSQ19NT0RFX01BU0s7Ci0JdGVn cmFfc29yX3dyaXRlbChzb3IsIHZhbHVlLCBTT1JfU1RBVEVfMSk7Ci0KLQl2YWx1ZSA9IHRlZ3Jh X3Nvcl9yZWFkbChzb3IsIFNPUl9DUkNfQ05UUkwpOwotCXZhbHVlIHw9IFNPUl9DUkNfQ05UUkxf RU5BQkxFOwotCXRlZ3JhX3Nvcl93cml0ZWwoc29yLCB2YWx1ZSwgU09SX0NSQ19DTlRSTCk7Ci0K LQl2YWx1ZSA9IHRlZ3JhX3Nvcl9yZWFkbChzb3IsIFNPUl9URVNUKTsKLQl2YWx1ZSAmPSB+U09S X1RFU1RfQ1JDX1BPU1RfU0VSSUFMSVpFOwotCXRlZ3JhX3Nvcl93cml0ZWwoc29yLCB2YWx1ZSwg U09SX1RFU1QpOwotCi0JZXJyID0gdGVncmFfc29yX2NyY193YWl0KHNvciwgMTAwKTsKLQlpZiAo ZXJyIDwgMCkKLQkJZ290byB1bmxvY2s7Ci0KLQl0ZWdyYV9zb3Jfd3JpdGVsKHNvciwgU09SX0NS Q19BX1JFU0VULCBTT1JfQ1JDX0EpOwotCXZhbHVlID0gdGVncmFfc29yX3JlYWRsKHNvciwgU09S X0NSQ19CKTsKLQotCW51bSA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJTA4eFxuIiwg dmFsdWUpOwotCi0JZXJyID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmZmVyLCBzaXplLCBw cG9zLCBidWYsIG51bSk7Ci0KLXVubG9jazoKLQltdXRleF91bmxvY2soJnNvci0+bG9jayk7Ci0J cmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdGVn cmFfc29yX2NyY19mb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5vcGVuID0gdGVn cmFfc29yX2NyY19vcGVuLAotCS5yZWFkID0gdGVncmFfc29yX2NyY19yZWFkLAotCS5yZWxlYXNl ID0gdGVncmFfc29yX2NyY19yZWxlYXNlLAorc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rl cl9oZWxwZXJfZnVuY3MgdGVncmFfc29yX2VuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5kcG1z ID0gdGVncmFfc29yX2VuY29kZXJfZHBtcywKKwkubW9kZV9maXh1cCA9IHRlZ3JhX3Nvcl9lbmNv ZGVyX21vZGVfZml4dXAsCisJLnByZXBhcmUgPSB0ZWdyYV9zb3JfZW5jb2Rlcl9wcmVwYXJlLAor CS5jb21taXQgPSB0ZWdyYV9zb3JfZW5jb2Rlcl9jb21taXQsCisJLm1vZGVfc2V0ID0gdGVncmFf c29yX2VuY29kZXJfbW9kZV9zZXQsCisJLmRpc2FibGUgPSB0ZWdyYV9zb3JfZW5jb2Rlcl9kaXNh YmxlLAogfTsKIAotc3RhdGljIGludCB0ZWdyYV9zb3JfZGVidWdmc19pbml0KHN0cnVjdCB0ZWdy YV9zb3IgKnNvciwKLQkJCQkgIHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQotewotCXN0cnVjdCBk ZW50cnkgKmVudHJ5OwotCWludCBlcnIgPSAwOwotCi0Jc29yLT5kZWJ1Z2ZzID0gZGVidWdmc19j cmVhdGVfZGlyKCJzb3IiLCBtaW5vci0+ZGVidWdmc19yb290KTsKLQlpZiAoIXNvci0+ZGVidWdm cykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImNy YyIsIDA2NDQsIHNvci0+ZGVidWdmcywgc29yLAotCQkJCSAgICAmdGVncmFfc29yX2NyY19mb3Bz KTsKLQlpZiAoIWVudHJ5KSB7Ci0JCWRldl9lcnIoc29yLT5kZXYsCi0JCQkiY2Fubm90IGNyZWF0 ZSAvc3lzL2tlcm5lbC9kZWJ1Zy9kcmkvJXMvc29yL2NyY1xuIiwKLQkJCW1pbm9yLT5kZWJ1Z2Zz X3Jvb3QtPmRfbmFtZS5uYW1lKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byByZW1vdmU7Ci0J fQotCi0JcmV0dXJuIGVycjsKLQotcmVtb3ZlOgotCWRlYnVnZnNfcmVtb3ZlKHNvci0+ZGVidWdm cyk7Ci0Jc29yLT5kZWJ1Z2ZzID0gTlVMTDsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50 IHRlZ3JhX3Nvcl9kZWJ1Z2ZzX2V4aXQoc3RydWN0IHRlZ3JhX3NvciAqc29yKQotewotCWRlYnVn ZnNfcmVtb3ZlX3JlY3Vyc2l2ZShzb3ItPmRlYnVnZnMpOwotCXNvci0+ZGVidWdmcyA9IE5VTEw7 Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB0ZWdyYV9zb3JfaW5pdChzdHJ1Y3QgaG9z dDF4X2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkZXZfZ2V0 X2RydmRhdGEoY2xpZW50LT5wYXJlbnQpOwpAQCAtMTI4OCwxNiArMTMzNiwzMSBAQCBzdGF0aWMg aW50IHRlZ3JhX3Nvcl9pbml0KHN0cnVjdCBob3N0MXhfY2xpZW50ICpjbGllbnQpCiAJaWYgKCFz b3ItPmRwYXV4KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXNvci0+b3V0cHV0LnR5cGUgPSBURUdS QV9PVVRQVVRfRURQOwotCiAJc29yLT5vdXRwdXQuZGV2ID0gc29yLT5kZXY7Ci0Jc29yLT5vdXRw dXQub3BzID0gJnNvcl9vcHM7CiAKLQllcnIgPSB0ZWdyYV9vdXRwdXRfaW5pdChkcm0sICZzb3It Pm91dHB1dCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJZGV2X2Vycihzb3ItPmRldiwgIm91dHB1dCBz ZXR1cCBmYWlsZWQ6ICVkXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KKwlkcm1fY29ubmVj dG9yX2luaXQoZHJtLCAmc29yLT5vdXRwdXQuY29ubmVjdG9yLAorCQkJICAgJnRlZ3JhX3Nvcl9j b25uZWN0b3JfZnVuY3MsCisJCQkgICBEUk1fTU9ERV9DT05ORUNUT1JfZURQKTsKKwlkcm1fY29u bmVjdG9yX2hlbHBlcl9hZGQoJnNvci0+b3V0cHV0LmNvbm5lY3RvciwKKwkJCQkgJnRlZ3JhX3Nv cl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwlzb3ItPm91dHB1dC5jb25uZWN0b3IuZHBtcyA9 IERSTV9NT0RFX0RQTVNfT0ZGOworCisJaWYgKHNvci0+b3V0cHV0LnBhbmVsKQorCQlkcm1fcGFu ZWxfYXR0YWNoKHNvci0+b3V0cHV0LnBhbmVsLCAmc29yLT5vdXRwdXQuY29ubmVjdG9yKTsKKwor CWRybV9lbmNvZGVyX2luaXQoZHJtLCAmc29yLT5vdXRwdXQuZW5jb2RlciwgJnRlZ3JhX3Nvcl9l bmNvZGVyX2Z1bmNzLAorCQkJIERSTV9NT0RFX0VOQ09ERVJfVE1EUyk7CisJZHJtX2VuY29kZXJf aGVscGVyX2FkZCgmc29yLT5vdXRwdXQuZW5jb2RlciwKKwkJCSAgICAgICAmdGVncmFfc29yX2Vu Y29kZXJfaGVscGVyX2Z1bmNzKTsKKworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rl cigmc29yLT5vdXRwdXQuY29ubmVjdG9yLAorCQkJCQkgICZzb3ItPm91dHB1dC5lbmNvZGVyKTsK Kwlkcm1fY29ubmVjdG9yX3JlZ2lzdGVyKCZzb3ItPm91dHB1dC5jb25uZWN0b3IpOworCisJc29y LT5vdXRwdXQuZW5jb2Rlci5wb3NzaWJsZV9jcnRjcyA9IDB4MzsKKworCWlmIChncGlvX2lzX3Zh bGlkKHNvci0+b3V0cHV0LmhwZF9ncGlvKSkKKwkJZW5hYmxlX2lycShzb3ItPm91dHB1dC5ocGRf aXJxKTsKIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19ERUJVR19GUykpIHsKIAkJZXJyID0gdGVn cmFfc29yX2RlYnVnZnNfaW5pdChzb3IsIGRybS0+cHJpbWFyeSk7CkBAIC0xMzEzLDYgKzEzNzYs MjAgQEAgc3RhdGljIGludCB0ZWdyYV9zb3JfaW5pdChzdHJ1Y3QgaG9zdDF4X2NsaWVudCAqY2xp ZW50KQogCQl9CiAJfQogCisJZXJyID0gY2xrX3ByZXBhcmVfZW5hYmxlKHNvci0+Y2xrKTsKKwlp ZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKHNvci0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBjbG9j azogJWRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gY2xrX3ByZXBhcmVf ZW5hYmxlKHNvci0+Y2xrX3NhZmUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJ ZXJyID0gY2xrX3ByZXBhcmVfZW5hYmxlKHNvci0+Y2xrX2RwKTsKKwlpZiAoZXJyIDwgMCkKKwkJ cmV0dXJuIGVycjsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMzIxLDEyICsxMzk4LDYgQEAgc3Rh dGljIGludCB0ZWdyYV9zb3JfZXhpdChzdHJ1Y3QgaG9zdDF4X2NsaWVudCAqY2xpZW50KQogCXN0 cnVjdCB0ZWdyYV9zb3IgKnNvciA9IGhvc3QxeF9jbGllbnRfdG9fc29yKGNsaWVudCk7CiAJaW50 IGVycjsKIAotCWVyciA9IHRlZ3JhX291dHB1dF9kaXNhYmxlKCZzb3ItPm91dHB1dCk7Ci0JaWYg KGVyciA8IDApIHsKLQkJZGV2X2Vycihzb3ItPmRldiwgIm91dHB1dCBmYWlsZWQgdG8gZGlzYWJs ZTogJWRcbiIsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCiAJaWYgKHNvci0+ZHBhdXgpIHsK IAkJZXJyID0gdGVncmFfZHBhdXhfZGV0YWNoKHNvci0+ZHBhdXgpOwogCQlpZiAoZXJyIDwgMCkg ewpAQCAtMTMzNSwxOCArMTQwNiwxNiBAQCBzdGF0aWMgaW50IHRlZ3JhX3Nvcl9leGl0KHN0cnVj dCBob3N0MXhfY2xpZW50ICpjbGllbnQpCiAJCX0KIAl9CiAKKwljbGtfZGlzYWJsZV91bnByZXBh cmUoc29yLT5jbGtfc2FmZSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNvci0+Y2xrX2RwKTsK KwljbGtfZGlzYWJsZV91bnByZXBhcmUoc29yLT5jbGspOworCiAJaWYgKElTX0VOQUJMRUQoQ09O RklHX0RFQlVHX0ZTKSkgewogCQllcnIgPSB0ZWdyYV9zb3JfZGVidWdmc19leGl0KHNvcik7CiAJ CWlmIChlcnIgPCAwKQogCQkJZGV2X2Vycihzb3ItPmRldiwgImRlYnVnZnMgY2xlYW51cCBmYWls ZWQ6ICVkXG4iLCBlcnIpOwogCX0KIAotCWVyciA9IHRlZ3JhX291dHB1dF9leGl0KCZzb3ItPm91 dHB1dCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJZGV2X2Vycihzb3ItPmRldiwgIm91dHB1dCBjbGVh bnVwIGZhaWxlZDogJWRcbiIsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCiAJcmV0dXJuIDA7 CiB9CiAKQEAgLTEzOTgsMjYgKzE0NjcsMTQgQEAgc3RhdGljIGludCB0ZWdyYV9zb3JfcHJvYmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlpZiAoSVNfRVJSKHNvci0+Y2xrX3BhcmVu dCkpCiAJCXJldHVybiBQVFJfRVJSKHNvci0+Y2xrX3BhcmVudCk7CiAKLQllcnIgPSBjbGtfcHJl cGFyZV9lbmFibGUoc29yLT5jbGtfcGFyZW50KTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVy cjsKLQogCXNvci0+Y2xrX3NhZmUgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgInNhZmUiKTsK IAlpZiAoSVNfRVJSKHNvci0+Y2xrX3NhZmUpKQogCQlyZXR1cm4gUFRSX0VSUihzb3ItPmNsa19z YWZlKTsKIAotCWVyciA9IGNsa19wcmVwYXJlX2VuYWJsZShzb3ItPmNsa19zYWZlKTsKLQlpZiAo ZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQogCXNvci0+Y2xrX2RwID0gZGV2bV9jbGtfZ2V0KCZw ZGV2LT5kZXYsICJkcCIpOwogCWlmIChJU19FUlIoc29yLT5jbGtfZHApKQogCQlyZXR1cm4gUFRS X0VSUihzb3ItPmNsa19kcCk7CiAKLQllcnIgPSBjbGtfcHJlcGFyZV9lbmFibGUoc29yLT5jbGtf ZHApOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCiAJSU5JVF9MSVNUX0hFQUQoJnNv ci0+Y2xpZW50Lmxpc3QpOwogCXNvci0+Y2xpZW50Lm9wcyA9ICZzb3JfY2xpZW50X29wczsKIAlz b3ItPmNsaWVudC5kZXYgPSAmcGRldi0+ZGV2OwpAQCAtMTQ0OCwxMCArMTUwNSwxMSBAQCBzdGF0 aWMgaW50IHRlZ3JhX3Nvcl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJ cmV0dXJuIGVycjsKIAl9CiAKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoc29yLT5jbGtfcGFyZW50 KTsKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoc29yLT5jbGtfc2FmZSk7Ci0JY2xrX2Rpc2FibGVf dW5wcmVwYXJlKHNvci0+Y2xrX2RwKTsKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoc29yLT5jbGsp OworCWVyciA9IHRlZ3JhX291dHB1dF9yZW1vdmUoJnNvci0+b3V0cHV0KTsKKwlpZiAoZXJyIDwg MCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVtb3ZlIG91dHB1dDogJWRc biIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQogCiAJcmV0dXJuIDA7CiB9Ci0tIAoyLjEuMwoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVs IG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK