From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [PATCH 27/36] drm/tegra: dsi: Implement ->atomic_check() Date: Tue, 20 Jan 2015 11:48:46 +0100 Message-ID: <1421750935-4023-28-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 RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KClRoZSBpbXBsZW1lbnRh dGlvbiBvZiB0aGUgLT5hdG9taWNfY2hlY2soKSBjYWxsYmFjayBwcmVjb21wdXRlcyBhbGwKcGFy YW1ldGVycyB0byBjaGVjayBpZiB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBjYW4gYmUgYXBwbGll ZC4gSWYgc28gdGhlCnByZWNvbXB1dGVkIHZhbHVlcyBhcmUgc3RvcmVkIGluIHRoZSBhdG9taWMg c3RhdGUgb2JqZWN0IGZvciB0aGUgZW5jb2RlcgphbmQgYXBwbGllZCBkdXJpbmcgbW9kZXNldC4g SW4gdGhhdCB3YXkgdGhlIG1vZGVzZXQgbm8gbG9uZ2VyIG5lZWRzIHRvCnBlcmZvcm0gYW55IGNo ZWNraW5nIGJ1dCBzaW1wbHkgcHJvZ3JhbSB2YWx1ZXMgaW50byByZWdpc3RlcnMuCgpTaWduZWQt b2ZmLWJ5OiBUaGllcnJ5IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPgotLS0KIGRyaXZlcnMv Z3B1L2RybS90ZWdyYS9kc2kuYyB8IDI2OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE5NiBpbnNlcnRpb25zKCspLCA3MyBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZHNpLmMgYi9kcml2 ZXJzL2dwdS9kcm0vdGVncmEvZHNpLmMKaW5kZXggOTc5OWYzZWRjM2Y4Li41NWE2YTk1YmRhODQg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kc2kuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vdGVncmEvZHNpLmMKQEAgLTI4LDYgKzI4LDI4IEBACiAjaW5jbHVkZSAiZHNpLmgiCiAj aW5jbHVkZSAibWlwaS1waHkuaCIKIAorc3RydWN0IHRlZ3JhX2RzaV9zdGF0ZSB7CisJc3RydWN0 IGRybV9jb25uZWN0b3Jfc3RhdGUgYmFzZTsKKworCXN0cnVjdCBtaXBpX2RwaHlfdGltaW5nIHRp bWluZzsKKwl1bnNpZ25lZCBsb25nIHBlcmlvZDsKKworCXVuc2lnbmVkIGludCB2cmVmcmVzaDsK Kwl1bnNpZ25lZCBpbnQgbGFuZXM7CisJdW5zaWduZWQgbG9uZyBwY2xrOworCXVuc2lnbmVkIGxv bmcgYmNsazsKKworCWVudW0gdGVncmFfZHNpX2Zvcm1hdCBmb3JtYXQ7CisJdW5zaWduZWQgaW50 IG11bDsKKwl1bnNpZ25lZCBpbnQgZGl2OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGVn cmFfZHNpX3N0YXRlICoKK3RvX2RzaV9zdGF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAq c3RhdGUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzdGF0ZSwgc3RydWN0IHRlZ3JhX2RzaV9z dGF0ZSwgYmFzZSk7Cit9CisKIHN0cnVjdCB0ZWdyYV9kc2kgewogCXN0cnVjdCBob3N0MXhfY2xp ZW50IGNsaWVudDsKIAlzdHJ1Y3QgdGVncmFfb3V0cHV0IG91dHB1dDsKQEAgLTc3LDYgKzk5LDEx IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRlZ3JhX2RzaSAqdG9fZHNpKHN0cnVjdCB0ZWdyYV9v dXRwdXQgKm91dHB1dCkKIAlyZXR1cm4gY29udGFpbmVyX29mKG91dHB1dCwgc3RydWN0IHRlZ3Jh X2RzaSwgb3V0cHV0KTsKIH0KIAorc3RhdGljIHN0cnVjdCB0ZWdyYV9kc2lfc3RhdGUgKnRlZ3Jh X2RzaV9nZXRfc3RhdGUoc3RydWN0IHRlZ3JhX2RzaSAqZHNpKQoreworCXJldHVybiB0b19kc2lf c3RhdGUoZHNpLT5vdXRwdXQuY29ubmVjdG9yLnN0YXRlKTsKK30KKwogc3RhdGljIGlubGluZSB1 MzIgdGVncmFfZHNpX3JlYWRsKHN0cnVjdCB0ZWdyYV9kc2kgKmRzaSwgdW5zaWduZWQgbG9uZyBy ZWcpCiB7CiAJcmV0dXJuIHJlYWRsKGRzaS0+cmVncyArIChyZWcgPDwgMikpOwpAQCAtMzM1LDYy ICszNjIsMzYgQEAgc3RhdGljIGNvbnN0IHUzMiBwa3Rfc2VxX2NvbW1hbmRfbW9kZVtOVU1fUEtU X1NFUV0gPSB7CiAJWzExXSA9IDAsCiB9OwogCi1zdGF0aWMgaW50IHRlZ3JhX2RzaV9zZXRfcGh5 X3RpbWluZyhzdHJ1Y3QgdGVncmFfZHNpICpkc2kpCitzdGF0aWMgdm9pZCB0ZWdyYV9kc2lfc2V0 X3BoeV90aW1pbmcoc3RydWN0IHRlZ3JhX2RzaSAqZHNpLAorCQkJCSAgICAgdW5zaWduZWQgbG9u ZyBwZXJpb2QsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kcGh5X3RpbWluZyAqdGltaW5n KQogewotCXN0cnVjdCBtaXBpX2RwaHlfdGltaW5nIHRpbWluZzsKLQl1bnNpZ25lZCBsb25nIHBl cmlvZDsKIAl1MzIgdmFsdWU7Ci0JbG9uZyByYXRlOwotCWludCBlcnI7Ci0KLQlyYXRlID0gY2xr X2dldF9yYXRlKGRzaS0+Y2xrKTsKLQlpZiAocmF0ZSA8IDApCi0JCXJldHVybiByYXRlOwotCi0J cGVyaW9kID0gRElWX1JPVU5EX0NMT1NFU1QoTlNFQ19QRVJfU0VDLCByYXRlICogMik7CiAKLQll cnIgPSBtaXBpX2RwaHlfdGltaW5nX2dldF9kZWZhdWx0KCZ0aW1pbmcsIHBlcmlvZCk7Ci0JaWYg KGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBtaXBpX2RwaHlfdGltaW5nX3ZhbGlk YXRlKCZ0aW1pbmcsIHBlcmlvZCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJZGV2X2Vycihkc2ktPmRl diwgImZhaWxlZCB0byB2YWxpZGF0ZSBELVBIWSB0aW1pbmc6ICVkXG4iLCBlcnIpOwotCQlyZXR1 cm4gZXJyOwotCX0KLQotCS8qCi0JICogVGhlIEQtUEhZIHRpbWluZyBmaWVsZHMgYmVsb3cgYXJl IGV4cHJlc3NlZCBpbiBieXRlLWNsb2NrIGN5Y2xlcywKLQkgKiBzbyBtdWx0aXBseSB0aGUgcGVy aW9kIGJ5IDguCi0JICovCi0JcGVyaW9kICo9IDg7Ci0KLQl2YWx1ZSA9IERTSV9USU1JTkdfRklF TEQodGltaW5nLmhzZXhpdCwgcGVyaW9kLCAxKSA8PCAyNCB8Ci0JCURTSV9USU1JTkdfRklFTEQo dGltaW5nLmhzdHJhaWwsIHBlcmlvZCwgMCkgPDwgMTYgfAotCQlEU0lfVElNSU5HX0ZJRUxEKHRp bWluZy5oc3plcm8sIHBlcmlvZCwgMykgPDwgOCB8Ci0JCURTSV9USU1JTkdfRklFTEQodGltaW5n LmhzcHJlcGFyZSwgcGVyaW9kLCAxKTsKKwl2YWx1ZSA9IERTSV9USU1JTkdfRklFTEQodGltaW5n LT5oc2V4aXQsIHBlcmlvZCwgMSkgPDwgMjQgfAorCQlEU0lfVElNSU5HX0ZJRUxEKHRpbWluZy0+ aHN0cmFpbCwgcGVyaW9kLCAwKSA8PCAxNiB8CisJCURTSV9USU1JTkdfRklFTEQodGltaW5nLT5o c3plcm8sIHBlcmlvZCwgMykgPDwgOCB8CisJCURTSV9USU1JTkdfRklFTEQodGltaW5nLT5oc3By ZXBhcmUsIHBlcmlvZCwgMSk7CiAJdGVncmFfZHNpX3dyaXRlbChkc2ksIHZhbHVlLCBEU0lfUEhZ X1RJTUlOR18wKTsKIAotCXZhbHVlID0gRFNJX1RJTUlOR19GSUVMRCh0aW1pbmcuY2xrdHJhaWws IHBlcmlvZCwgMSkgPDwgMjQgfAotCQlEU0lfVElNSU5HX0ZJRUxEKHRpbWluZy5jbGtwb3N0LCBw ZXJpb2QsIDEpIDw8IDE2IHwKLQkJRFNJX1RJTUlOR19GSUVMRCh0aW1pbmcuY2xremVybywgcGVy aW9kLCAxKSA8PCA4IHwKLQkJRFNJX1RJTUlOR19GSUVMRCh0aW1pbmcubHB4LCBwZXJpb2QsIDEp OworCXZhbHVlID0gRFNJX1RJTUlOR19GSUVMRCh0aW1pbmctPmNsa3RyYWlsLCBwZXJpb2QsIDEp IDw8IDI0IHwKKwkJRFNJX1RJTUlOR19GSUVMRCh0aW1pbmctPmNsa3Bvc3QsIHBlcmlvZCwgMSkg PDwgMTYgfAorCQlEU0lfVElNSU5HX0ZJRUxEKHRpbWluZy0+Y2xremVybywgcGVyaW9kLCAxKSA8 PCA4IHwKKwkJRFNJX1RJTUlOR19GSUVMRCh0aW1pbmctPmxweCwgcGVyaW9kLCAxKTsKIAl0ZWdy YV9kc2lfd3JpdGVsKGRzaSwgdmFsdWUsIERTSV9QSFlfVElNSU5HXzEpOwogCi0JdmFsdWUgPSBE U0lfVElNSU5HX0ZJRUxEKHRpbWluZy5jbGtwcmVwYXJlLCBwZXJpb2QsIDEpIDw8IDE2IHwKLQkJ RFNJX1RJTUlOR19GSUVMRCh0aW1pbmcuY2xrcHJlLCBwZXJpb2QsIDEpIDw8IDggfAorCXZhbHVl ID0gRFNJX1RJTUlOR19GSUVMRCh0aW1pbmctPmNsa3ByZXBhcmUsIHBlcmlvZCwgMSkgPDwgMTYg fAorCQlEU0lfVElNSU5HX0ZJRUxEKHRpbWluZy0+Y2xrcHJlLCBwZXJpb2QsIDEpIDw8IDggfAog CQlEU0lfVElNSU5HX0ZJRUxEKDB4ZmYgKiBwZXJpb2QsIHBlcmlvZCwgMCkgPDwgMDsKIAl0ZWdy YV9kc2lfd3JpdGVsKGRzaSwgdmFsdWUsIERTSV9QSFlfVElNSU5HXzIpOwogCi0JdmFsdWUgPSBE U0lfVElNSU5HX0ZJRUxEKHRpbWluZy50YWdldCwgcGVyaW9kLCAxKSA8PCAxNiB8Ci0JCURTSV9U SU1JTkdfRklFTEQodGltaW5nLnRhc3VyZSwgcGVyaW9kLCAxKSA8PCA4IHwKLQkJRFNJX1RJTUlO R19GSUVMRCh0aW1pbmcudGFnbywgcGVyaW9kLCAxKTsKKwl2YWx1ZSA9IERTSV9USU1JTkdfRklF TEQodGltaW5nLT50YWdldCwgcGVyaW9kLCAxKSA8PCAxNiB8CisJCURTSV9USU1JTkdfRklFTEQo dGltaW5nLT50YXN1cmUsIHBlcmlvZCwgMSkgPDwgOCB8CisJCURTSV9USU1JTkdfRklFTEQodGlt aW5nLT50YWdvLCBwZXJpb2QsIDEpOwogCXRlZ3JhX2RzaV93cml0ZWwoZHNpLCB2YWx1ZSwgRFNJ X0JUQV9USU1JTkcpOwogCiAJaWYgKGRzaS0+c2xhdmUpCi0JCXJldHVybiB0ZWdyYV9kc2lfc2V0 X3BoeV90aW1pbmcoZHNpLT5zbGF2ZSk7Ci0KLQlyZXR1cm4gMDsKKwkJdGVncmFfZHNpX3NldF9w aHlfdGltaW5nKGRzaS0+c2xhdmUsIHBlcmlvZCwgdGltaW5nKTsKIH0KIAogc3RhdGljIGludCB0 ZWdyYV9kc2lfZ2V0X211bGRpdihlbnVtIG1pcGlfZHNpX3BpeGVsX2Zvcm1hdCBmb3JtYXQsCkBA IC00ODIsMTQgKzQ4MywyMiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHRlZ3JhX2RzaV9nZXRfbGFu ZXMoc3RydWN0IHRlZ3JhX2RzaSAqZHNpKQogCXJldHVybiBkc2ktPmxhbmVzOwogfQogCi1zdGF0 aWMgaW50IHRlZ3JhX2RzaV9jb25maWd1cmUoc3RydWN0IHRlZ3JhX2RzaSAqZHNpLCB1bnNpZ25l ZCBpbnQgcGlwZSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSkKK3N0YXRpYyB2b2lkIHRlZ3JhX2RzaV9jb25maWd1cmUoc3RydWN0IHRlZ3JhX2RzaSAqZHNp LCB1bnNpZ25lZCBpbnQgcGlwZSwKKwkJCQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSkKIHsKIAl1bnNpZ25lZCBpbnQgaGFjdCwgaHN3LCBoYnAsIGhmcCwgaSwgbXVsLCBkaXY7 Ci0JZW51bSB0ZWdyYV9kc2lfZm9ybWF0IGZvcm1hdDsKKwlzdHJ1Y3QgdGVncmFfZHNpX3N0YXRl ICpzdGF0ZTsKIAljb25zdCB1MzIgKnBrdF9zZXE7CiAJdTMyIHZhbHVlOwotCWludCBlcnI7CisK KwkvKiBYWFg6IHBhc3MgaW4gc3RhdGUgaW50byB0aGlzIGZ1bmN0aW9uPyAqLworCWlmIChkc2kt Pm1hc3RlcikKKwkJc3RhdGUgPSB0ZWdyYV9kc2lfZ2V0X3N0YXRlKGRzaS0+bWFzdGVyKTsKKwll bHNlCisJCXN0YXRlID0gdGVncmFfZHNpX2dldF9zdGF0ZShkc2kpOworCisJbXVsID0gc3RhdGUt Pm11bDsKKwlkaXYgPSBzdGF0ZS0+ZGl2OwogCiAJaWYgKGRzaS0+ZmxhZ3MgJiBNSVBJX0RTSV9N T0RFX1ZJREVPX1NZTkNfUFVMU0UpIHsKIAkJRFJNX0RFQlVHX0tNUygiTm9uLWJ1cnN0IHZpZGVv IG1vZGUgd2l0aCBzeW5jIHB1bHNlc1xuIik7CkBAIC01MDIsMTUgKzUxMSw4IEBAIHN0YXRpYyBp bnQgdGVncmFfZHNpX2NvbmZpZ3VyZShzdHJ1Y3QgdGVncmFfZHNpICpkc2ksIHVuc2lnbmVkIGlu dCBwaXBlLAogCQlwa3Rfc2VxID0gcGt0X3NlcV9jb21tYW5kX21vZGU7CiAJfQogCi0JZXJyID0g dGVncmFfZHNpX2dldF9tdWxkaXYoZHNpLT5mb3JtYXQsICZtdWwsICZkaXYpOwotCWlmIChlcnIg PCAwKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gdGVncmFfZHNpX2dldF9mb3JtYXQoZHNpLT5m b3JtYXQsICZmb3JtYXQpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JdmFsdWUg PSBEU0lfQ09OVFJPTF9DSEFOTkVMKDApIHwgRFNJX0NPTlRST0xfRk9STUFUKGZvcm1hdCkgfAor CXZhbHVlID0gRFNJX0NPTlRST0xfQ0hBTk5FTCgwKSB8CisJCURTSV9DT05UUk9MX0ZPUk1BVChz dGF0ZS0+Zm9ybWF0KSB8CiAJCURTSV9DT05UUk9MX0xBTkVTKGRzaS0+bGFuZXMgLSAxKSB8CiAJ CURTSV9DT05UUk9MX1NPVVJDRShwaXBlKTsKIAl0ZWdyYV9kc2lfd3JpdGVsKGRzaSwgdmFsdWUs IERTSV9DT05UUk9MKTsKQEAgLTU4OSw4ICs1OTEsOCBAQCBzdGF0aWMgaW50IHRlZ3JhX2RzaV9j b25maWd1cmUoc3RydWN0IHRlZ3JhX2RzaSAqZHNpLCB1bnNpZ25lZCBpbnQgcGlwZSwKIAogCQkv KiBzZXQgU09MIGRlbGF5ICovCiAJCWlmIChkc2ktPm1hc3RlciB8fCBkc2ktPnNsYXZlKSB7Ci0J CQl1bnNpZ25lZCBpbnQgbGFuZXMgPSB0ZWdyYV9kc2lfZ2V0X2xhbmVzKGRzaSk7CiAJCQl1bnNp Z25lZCBsb25nIGRlbGF5LCBiY2xrLCBiY2xrX2dhbmdlZDsKKwkJCXVuc2lnbmVkIGludCBsYW5l cyA9IHN0YXRlLT5sYW5lczsKIAogCQkJLyogU09MIHRvIHZhbGlkLCB2YWxpZCB0byBGSUZPIGFu ZCBGSUZPIHdyaXRlIGRlbGF5ICovCiAJCQlkZWxheSA9IDQgKyA0ICsgMjsKQEAgLTYxMCw5ICs2 MTIsNyBAQCBzdGF0aWMgaW50IHRlZ3JhX2RzaV9jb25maWd1cmUoc3RydWN0IHRlZ3JhX2RzaSAq ZHNpLCB1bnNpZ25lZCBpbnQgcGlwZSwKIAl9CiAKIAlpZiAoZHNpLT5zbGF2ZSkgewotCQllcnIg PSB0ZWdyYV9kc2lfY29uZmlndXJlKGRzaS0+c2xhdmUsIHBpcGUsIG1vZGUpOwotCQlpZiAoZXJy IDwgMCkKLQkJCXJldHVybiBlcnI7CisJCXRlZ3JhX2RzaV9jb25maWd1cmUoZHNpLT5zbGF2ZSwg cGlwZSwgbW9kZSk7CiAKIAkJLyoKIAkJICogVE9ETzogU3VwcG9ydCBtb2RlcyBvdGhlciB0aGFu IHN5bW1ldHJpY2FsIGxlZnQtcmlnaHQKQEAgLTYyMiw4ICs2MjIsNiBAQCBzdGF0aWMgaW50IHRl Z3JhX2RzaV9jb25maWd1cmUoc3RydWN0IHRlZ3JhX2RzaSAqZHNpLCB1bnNpZ25lZCBpbnQgcGlw ZSwKIAkJdGVncmFfZHNpX2dhbmdlZF9lbmFibGUoZHNpLT5zbGF2ZSwgbW9kZS0+aGRpc3BsYXkg LyAyLAogCQkJCQltb2RlLT5oZGlzcGxheSAvIDIpOwogCX0KLQotCXJldHVybiAwOwogfQogCiBz dGF0aWMgaW50IHRlZ3JhX2RzaV93YWl0X2lkbGUoc3RydWN0IHRlZ3JhX2RzaSAqZHNpLCB1bnNp Z25lZCBsb25nIHRpbWVvdXQpCkBAIC03MzIsMTMgKzczMCwzOCBAQCBzdGF0aWMgdm9pZCB0ZWdy YV9kc2lfY29ubmVjdG9yX2RwbXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgaW50 IG1vZGUpCiB7CiB9CiAKK3N0YXRpYyB2b2lkIHRlZ3JhX2RzaV9jb25uZWN0b3JfcmVzZXQoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgdGVncmFfZHNpX3N0YXRl ICpzdGF0ZTsKKworCWtmcmVlKGNvbm5lY3Rvci0+c3RhdGUpOworCWNvbm5lY3Rvci0+c3RhdGUg PSBOVUxMOworCisJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsK KwlpZiAoc3RhdGUpCisJCWNvbm5lY3Rvci0+c3RhdGUgPSAmc3RhdGUtPmJhc2U7Cit9CisKK3N0 YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqCit0ZWdyYV9kc2lfY29ubmVjdG9yX2R1 cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVj dCB0ZWdyYV9kc2lfc3RhdGUgKnN0YXRlID0gdG9fZHNpX3N0YXRlKGNvbm5lY3Rvci0+c3RhdGUp OworCXN0cnVjdCB0ZWdyYV9kc2lfc3RhdGUgKmNvcHk7CisKKwljb3B5ID0ga21lbWR1cChzdGF0 ZSwgc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghY29weSkKKwkJcmV0dXJuIE5V TEw7CisKKwlyZXR1cm4gJmNvcHktPmJhc2U7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9mdW5jcyB0ZWdyYV9kc2lfY29ubmVjdG9yX2Z1bmNzID0gewogCS5kcG1zID0g dGVncmFfZHNpX2Nvbm5lY3Rvcl9kcG1zLAotCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nv bm5lY3Rvcl9yZXNldCwKKwkucmVzZXQgPSB0ZWdyYV9kc2lfY29ubmVjdG9yX3Jlc2V0LAogCS5k ZXRlY3QgPSB0ZWdyYV9vdXRwdXRfY29ubmVjdG9yX2RldGVjdCwKIAkuZmlsbF9tb2RlcyA9IGRy bV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKIAkuZGVzdHJveSA9IHRlZ3Jh X291dHB1dF9jb25uZWN0b3JfZGVzdHJveSwKLQkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRy bV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kdXBs aWNhdGVfc3RhdGUgPSB0ZWdyYV9kc2lfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKIAkuYXRv bWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9z dGF0ZSwKIH07CiAKQEAgLTc3MSw3ICs3OTQsOSBAQCBzdGF0aWMgYm9vbCB0ZWdyYV9kc2lfZW5j b2Rlcl9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKIAlzdHJ1Y3QgdGVn cmFfZGMgKmRjID0gdG9fdGVncmFfZGMoZW5jb2Rlci0+Y3J0Yyk7CiAJdW5zaWduZWQgaW50IG11 bCwgZGl2LCBzY2RpdiwgdnJlZnJlc2gsIGxhbmVzOwogCXN0cnVjdCB0ZWdyYV9kc2kgKmRzaSA9 IHRvX2RzaShvdXRwdXQpOworCXN0cnVjdCBtaXBpX2RwaHlfdGltaW5nIHRpbWluZzsKIAl1bnNp Z25lZCBsb25nIHBjbGssIGJjbGssIHBsbGQ7CisJdW5zaWduZWQgbG9uZyBwZXJpb2Q7CiAJaW50 IGVycjsKIAogCWxhbmVzID0gdGVncmFfZHNpX2dldF9sYW5lcyhkc2kpOwpAQCAtNzkyLDYgKzgx Nyw3IEBAIHN0YXRpYyBib29sIHRlZ3JhX2RzaV9lbmNvZGVyX21vZGVfZml4dXAoc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyLAogCSAqIENvbXB1dGUgYml0IGNsb2NrIGFuZCByb3VuZCB1cCB0 byB0aGUgbmV4dCBNSHouCiAJICovCiAJcGxsZCA9IERJVl9ST1VORF9VUChiY2xrICogOCwgVVNF Q19QRVJfU0VDKSAqIFVTRUNfUEVSX1NFQzsKKwlwZXJpb2QgPSBESVZfUk9VTkRfQ0xPU0VTVChO U0VDX1BFUl9TRUMsIHBsbGQpOwogCiAJLyoKIAkgKiBXZSBkaXZpZGUgdGhlIGZyZXF1ZW5jeSBi eSB0d28gaGVyZSwgYnV0IHdlIG1ha2UgdXAgZm9yIHRoYXQgYnkKQEAgLTgyNywxMiArODUzLDIy IEBAIHN0YXRpYyBib29sIHRlZ3JhX2RzaV9lbmNvZGVyX21vZGVfZml4dXAoc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyLAogCiAJdGVncmFfZHNpX3NldF90aW1lb3V0KGRzaSwgYmNsaywgdnJl ZnJlc2gpOwogCi0JZXJyID0gdGVncmFfZHNpX3NldF9waHlfdGltaW5nKGRzaSk7CisJZXJyID0g bWlwaV9kcGh5X3RpbWluZ19nZXRfZGVmYXVsdCgmdGltaW5nLCBwZXJpb2QpOworCWlmIChlcnIg PCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gbWlwaV9kcGh5X3RpbWluZ192YWxpZGF0ZSgm dGltaW5nLCBwZXJpb2QpOwogCWlmIChlcnIgPCAwKSB7Ci0JCWRldl9lcnIoZHNpLT5kZXYsICJm YWlsZWQgdG8gc2V0dXAgRC1QSFkgdGltaW5nOiAlZFxuIiwgZXJyKTsKLQkJcmV0dXJuIGZhbHNl OworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIHZhbGlkYXRlIEQtUEhZIHRpbWluZzog JWRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CiAJfQogCisJLyoKKwkgKiBUaGUgRC1QSFkgdGlt aW5nIGZpZWxkcyBhcmUgZXhwcmVzc2VkIGluIGJ5dGUtY2xvY2sgY3ljbGVzLCBzbworCSAqIG11 bHRpcGx5IHRoZSBwZXJpb2QgYnkgOC4KKwkgKi8KKwl0ZWdyYV9kc2lfc2V0X3BoeV90aW1pbmco ZHNpLCBwZXJpb2QgKiA4LCAmdGltaW5nKTsKKwogCXJldHVybiB0cnVlOwogfQogCkBAIC04NTEs MTkgKzg4NywyNCBAQCBzdGF0aWMgdm9pZCB0ZWdyYV9kc2lfZW5jb2Rlcl9tb2RlX3NldChzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCiAJc3RydWN0IHRlZ3JhX291dHB1dCAqb3V0cHV0ID0g ZW5jb2Rlcl90b19vdXRwdXQoZW5jb2Rlcik7CiAJc3RydWN0IHRlZ3JhX2RjICpkYyA9IHRvX3Rl Z3JhX2RjKGVuY29kZXItPmNydGMpOwogCXN0cnVjdCB0ZWdyYV9kc2kgKmRzaSA9IHRvX2RzaShv dXRwdXQpOworCXN0cnVjdCB0ZWdyYV9kc2lfc3RhdGUgKnN0YXRlOwogCXUzMiB2YWx1ZTsKLQlp bnQgZXJyOwogCisJc3RhdGUgPSB0ZWdyYV9kc2lfZ2V0X3N0YXRlKGRzaSk7CiAKLQllcnIgPSB0 ZWdyYV9kc2lfY29uZmlndXJlKGRzaSwgZGMtPnBpcGUsIG1vZGUpOwotCWlmIChlcnIgPCAwKSB7 Ci0JCWRldl9lcnIoZHNpLT5kZXYsICJmYWlsZWQgdG8gY29uZmlndXJlIERTSTogJWRcbiIsIGVy cik7Ci0JCXJldHVybjsKLQl9CisJdGVncmFfZHNpX3NldF90aW1lb3V0KGRzaSwgc3RhdGUtPmJj bGssIHN0YXRlLT52cmVmcmVzaCk7CisKKwkvKgorCSAqIFRoZSBELVBIWSB0aW1pbmcgZmllbGRz IGFyZSBleHByZXNzZWQgaW4gYnl0ZS1jbG9jayBjeWNsZXMsIHNvCisJICogbXVsdGlwbHkgdGhl IHBlcmlvZCBieSA4LgorCSAqLworCXRlZ3JhX2RzaV9zZXRfcGh5X3RpbWluZyhkc2ksIHN0YXRl LT5wZXJpb2QgKiA4LCAmc3RhdGUtPnRpbWluZyk7CiAKIAlpZiAob3V0cHV0LT5wYW5lbCkKIAkJ ZHJtX3BhbmVsX3ByZXBhcmUob3V0cHV0LT5wYW5lbCk7CiAKKwl0ZWdyYV9kc2lfY29uZmlndXJl KGRzaSwgZGMtPnBpcGUsIG1vZGUpOworCiAJLyogZW5hYmxlIGRpc3BsYXkgY29udHJvbGxlciAq LwogCXZhbHVlID0gdGVncmFfZGNfcmVhZGwoZGMsIERDX0RJU1BfRElTUF9XSU5fT1BUSU9OUyk7 CiAJdmFsdWUgfD0gRFNJX0VOQUJMRTsKQEAgLTkyOSw2ICs5NzAsODcgQEAgc3RhdGljIHZvaWQg dGVncmFfZHNpX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCiAJ cmV0dXJuOwogfQogCitzdGF0aWMgaW50Cit0ZWdyYV9kc2lfZW5jb2Rlcl9hdG9taWNfY2hlY2so c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJICAgICAgIHN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAq Y29ubl9zdGF0ZSkKK3sKKwlzdHJ1Y3QgdGVncmFfb3V0cHV0ICpvdXRwdXQgPSBlbmNvZGVyX3Rv X291dHB1dChlbmNvZGVyKTsKKwlzdHJ1Y3QgdGVncmFfZHNpX3N0YXRlICpzdGF0ZSA9IHRvX2Rz aV9zdGF0ZShjb25uX3N0YXRlKTsKKwlzdHJ1Y3QgdGVncmFfZGMgKmRjID0gdG9fdGVncmFfZGMo Y29ubl9zdGF0ZS0+Y3J0Yyk7CisJc3RydWN0IHRlZ3JhX2RzaSAqZHNpID0gdG9fZHNpKG91dHB1 dCk7CisJdW5zaWduZWQgaW50IHNjZGl2OworCXVuc2lnbmVkIGxvbmcgcGxsZDsKKwlpbnQgZXJy OworCisJc3RhdGUtPnBjbGsgPSBjcnRjX3N0YXRlLT5tb2RlLmNsb2NrICogMTAwMDsKKworCWVy ciA9IHRlZ3JhX2RzaV9nZXRfbXVsZGl2KGRzaS0+Zm9ybWF0LCAmc3RhdGUtPm11bCwgJnN0YXRl LT5kaXYpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJc3RhdGUtPmxhbmVzID0g dGVncmFfZHNpX2dldF9sYW5lcyhkc2kpOworCisJZXJyID0gdGVncmFfZHNpX2dldF9mb3JtYXQo ZHNpLT5mb3JtYXQsICZzdGF0ZS0+Zm9ybWF0KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVy cjsKKworCXN0YXRlLT52cmVmcmVzaCA9IGRybV9tb2RlX3ZyZWZyZXNoKCZjcnRjX3N0YXRlLT5t b2RlKTsKKworCS8qIGNvbXB1dGUgYnl0ZSBjbG9jayAqLworCXN0YXRlLT5iY2xrID0gKHN0YXRl LT5wY2xrICogc3RhdGUtPm11bCkgLyAoc3RhdGUtPmRpdiAqIHN0YXRlLT5sYW5lcyk7CisKKwlE Uk1fREVCVUdfS01TKCJtdWw6ICV1LCBkaXY6ICV1LCBsYW5lczogJXVcbiIsIHN0YXRlLT5tdWws IHN0YXRlLT5kaXYsCisJCSAgICAgIHN0YXRlLT5sYW5lcyk7CisJRFJNX0RFQlVHX0tNUygiZm9y bWF0OiAldSwgdnJlZnJlc2g6ICV1XG4iLCBzdGF0ZS0+Zm9ybWF0LAorCQkgICAgICBzdGF0ZS0+ dnJlZnJlc2gpOworCURSTV9ERUJVR19LTVMoImJjbGs6ICVsdVxuIiwgc3RhdGUtPmJjbGspOwor CisJLyoKKwkgKiBDb21wdXRlIGJpdCBjbG9jayBhbmQgcm91bmQgdXAgdG8gdGhlIG5leHQgTUh6 LgorCSAqLworCXBsbGQgPSBESVZfUk9VTkRfVVAoc3RhdGUtPmJjbGsgKiA4LCBVU0VDX1BFUl9T RUMpICogVVNFQ19QRVJfU0VDOworCXN0YXRlLT5wZXJpb2QgPSBESVZfUk9VTkRfQ0xPU0VTVChO U0VDX1BFUl9TRUMsIHBsbGQpOworCisJZXJyID0gbWlwaV9kcGh5X3RpbWluZ19nZXRfZGVmYXVs dCgmc3RhdGUtPnRpbWluZywgc3RhdGUtPnBlcmlvZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVy biBlcnI7CisKKwllcnIgPSBtaXBpX2RwaHlfdGltaW5nX3ZhbGlkYXRlKCZzdGF0ZS0+dGltaW5n LCBzdGF0ZS0+cGVyaW9kKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAi ZmFpbGVkIHRvIHZhbGlkYXRlIEQtUEhZIHRpbWluZzogJWRcbiIsIGVycik7CisJCXJldHVybiBl cnI7CisJfQorCisJLyoKKwkgKiBXZSBkaXZpZGUgdGhlIGZyZXF1ZW5jeSBieSB0d28gaGVyZSwg YnV0IHdlIG1ha2UgdXAgZm9yIHRoYXQgYnkKKwkgKiBzZXR0aW5nIHRoZSBzaGlmdCBjbG9jayBk aXZpZGVyIChmdXJ0aGVyIGJlbG93KSB0byBoYWxmIG9mIHRoZQorCSAqIGNvcnJlY3QgdmFsdWUu CisJICovCisJcGxsZCAvPSAyOworCisJLyoKKwkgKiBEZXJpdmUgcGl4ZWwgY2xvY2sgZnJvbSBi aXQgY2xvY2sgdXNpbmcgdGhlIHNoaWZ0IGNsb2NrIGRpdmlkZXIuCisJICogTm90ZSB0aGF0IHRo aXMgaXMgb25seSBoYWxmIG9mIHdoYXQgd2Ugd291bGQgZXhwZWN0LCBidXQgd2UgbmVlZAorCSAq IHRoYXQgdG8gbWFrZSB1cCBmb3IgdGhlIGZhY3QgdGhhdCB3ZSBkaXZpZGVkIHRoZSBiaXQgY2xv Y2sgYnkgYQorCSAqIGZhY3RvciBvZiB0d28gYWJvdmUuCisJICoKKwkgKiBJdCdzIG5vdCBjbGVh ciBleGFjdGx5IHdoeSB0aGlzIGlzIG5lY2Vzc2FyeSwgYnV0IHRoZSBkaXNwbGF5IGlzCisJICog bm90IHdvcmtpbmcgcHJvcGVybHkgb3RoZXJ3aXNlLiBQZXJoYXBzIHRoZSBQTExzIGNhbm5vdCBn ZW5lcmF0ZQorCSAqIGZyZXF1ZW5jaWVzIHN1ZmZpY2llbnRseSBoaWdoLgorCSAqLworCXNjZGl2 ID0gKCg4ICogc3RhdGUtPm11bCkgLyAoc3RhdGUtPmRpdiAqIHN0YXRlLT5sYW5lcykpIC0gMjsK KworCWVyciA9IHRlZ3JhX2RjX3N0YXRlX3NldHVwX2Nsb2NrKGRjLCBjcnRjX3N0YXRlLCBkc2kt PmNsa19wYXJlbnQsCisJCQkJCSBwbGxkLCBzY2Rpdik7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2 X2VycihvdXRwdXQtPmRldiwgImZhaWxlZCB0byBzZXR1cCBDUlRDIHN0YXRlOiAlZFxuIiwgZXJy KTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyB0ZWdyYV9kc2lfZW5jb2Rlcl9oZWxwZXJf ZnVuY3MgPSB7CiAJLmRwbXMgPSB0ZWdyYV9kc2lfZW5jb2Rlcl9kcG1zLAogCS5tb2RlX2ZpeHVw ID0gdGVncmFfZHNpX2VuY29kZXJfbW9kZV9maXh1cCwKQEAgLTkzNiw2ICsxMDU4LDcgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgdGVncmFfZHNpX2VuY29k ZXJfaGVscGVyX2Z1bmNzID0gewogCS5jb21taXQgPSB0ZWdyYV9kc2lfZW5jb2Rlcl9jb21taXQs CiAJLm1vZGVfc2V0ID0gdGVncmFfZHNpX2VuY29kZXJfbW9kZV9zZXQsCiAJLmRpc2FibGUgPSB0 ZWdyYV9kc2lfZW5jb2Rlcl9kaXNhYmxlLAorCS5hdG9taWNfY2hlY2sgPSB0ZWdyYV9kc2lfZW5j b2Rlcl9hdG9taWNfY2hlY2ssCiB9OwogCiBzdGF0aWMgaW50IHRlZ3JhX2RzaV9wYWRfZW5hYmxl KHN0cnVjdCB0ZWdyYV9kc2kgKmRzaSkKLS0gCjIuMS4zCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=