From mboxrd@z Thu Jan 1 00:00:00 1970 From: ville.syrjala@linux.intel.com Subject: [PATCH 11/14] drm/i915: Move ILK/SNB/IVB over to the HSW WM code Date: Thu, 5 Dec 2013 15:51:38 +0200 Message-ID: <1386251501-10602-12-git-send-email-ville.syrjala@linux.intel.com> References: <1386251501-10602-1-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [143.182.124.21]) by gabe.freedesktop.org (Postfix) with ESMTP id 65F77FB7F0 for ; Thu, 5 Dec 2013 05:52:31 -0800 (PST) In-Reply-To: <1386251501-10602-1-git-send-email-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces@lists.freedesktop.org Errors-To: intel-gfx-bounces@lists.freedesktop.org To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KClRo ZSBuZXcgSFNXIHdhdGVybWFyayBjb2RlIGNhbiBub3cgaGFuZGxlIElMSy9TTkIvSVZCIGFzIHdl bGwsIHNvCnN3aXRjaCB0aGVtIG92ZXIuIEtpbGwgdGhlIG9sZCBjb2RlLgoKU2lnbmVkLW9mZi1i eTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KLS0tCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3BtLmMgICAgICB8IDY1NiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCA2NDYgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IDNjNTliNjcuLjI0 MDY2Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTExMjA4LDcgKzEx MjA4LDcgQEAgdm9pZCBpbnRlbF9tb2Rlc2V0X3NldHVwX2h3X3N0YXRlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCiAJCXBsbC0+b24gPSBmYWxzZTsKIAl9CiAKLQlpZiAoSVNfSEFTV0VMTChkZXYp KQorCWlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCWlsa193bV9nZXRfaHdfc3RhdGUoZGV2KTsK IAogCWlmIChmb3JjZV9yZXN0b3JlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwppbmRleCA0MjBi ZTJmLi44Yjk3ODkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKQEAgLTk2NSw2NSArOTY1LDYg QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF93YXRlcm1hcmtfcGFyYW1zIGk4MzBfd21faW5m byA9IHsKIAlJODMwX0ZJRk9fTElORV9TSVpFCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlu dGVsX3dhdGVybWFya19wYXJhbXMgaXJvbmxha2VfZGlzcGxheV93bV9pbmZvID0gewotCUlMS19E SVNQTEFZX0ZJRk8sCi0JSUxLX0RJU1BMQVlfTUFYV00sCi0JSUxLX0RJU1BMQVlfREZUV00sCi0J MiwKLQlJTEtfRklGT19MSU5FX1NJWkUKLX07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX3dh dGVybWFya19wYXJhbXMgaXJvbmxha2VfY3Vyc29yX3dtX2luZm8gPSB7Ci0JSUxLX0NVUlNPUl9G SUZPLAotCUlMS19DVVJTT1JfTUFYV00sCi0JSUxLX0NVUlNPUl9ERlRXTSwKLQkyLAotCUlMS19G SUZPX0xJTkVfU0laRQotfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3Bh cmFtcyBpcm9ubGFrZV9kaXNwbGF5X3Nyd21faW5mbyA9IHsKLQlJTEtfRElTUExBWV9TUl9GSUZP LAotCUlMS19ESVNQTEFZX01BWF9TUldNLAotCUlMS19ESVNQTEFZX0RGVF9TUldNLAotCTIsCi0J SUxLX0ZJRk9fTElORV9TSVpFCi19Owotc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF93YXRlcm1h cmtfcGFyYW1zIGlyb25sYWtlX2N1cnNvcl9zcndtX2luZm8gPSB7Ci0JSUxLX0NVUlNPUl9TUl9G SUZPLAotCUlMS19DVVJTT1JfTUFYX1NSV00sCi0JSUxLX0NVUlNPUl9ERlRfU1JXTSwKLQkyLAot CUlMS19GSUZPX0xJTkVfU0laRQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF93YXRl cm1hcmtfcGFyYW1zIHNhbmR5YnJpZGdlX2Rpc3BsYXlfd21faW5mbyA9IHsKLQlTTkJfRElTUExB WV9GSUZPLAotCVNOQl9ESVNQTEFZX01BWFdNLAotCVNOQl9ESVNQTEFZX0RGVFdNLAotCTIsCi0J U05CX0ZJRk9fTElORV9TSVpFCi19Owotc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF93YXRlcm1h cmtfcGFyYW1zIHNhbmR5YnJpZGdlX2N1cnNvcl93bV9pbmZvID0gewotCVNOQl9DVVJTT1JfRklG TywKLQlTTkJfQ1VSU09SX01BWFdNLAotCVNOQl9DVVJTT1JfREZUV00sCi0JMiwKLQlTTkJfRklG T19MSU5FX1NJWkUKLX07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX3dhdGVybWFya19wYXJh bXMgc2FuZHlicmlkZ2VfZGlzcGxheV9zcndtX2luZm8gPSB7Ci0JU05CX0RJU1BMQVlfU1JfRklG TywKLQlTTkJfRElTUExBWV9NQVhfU1JXTSwKLQlTTkJfRElTUExBWV9ERlRfU1JXTSwKLQkyLAot CVNOQl9GSUZPX0xJTkVfU0laRQotfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfd2F0ZXJt YXJrX3BhcmFtcyBzYW5keWJyaWRnZV9jdXJzb3Jfc3J3bV9pbmZvID0gewotCVNOQl9DVVJTT1Jf U1JfRklGTywKLQlTTkJfQ1VSU09SX01BWF9TUldNLAotCVNOQl9DVVJTT1JfREZUX1NSV00sCi0J MiwKLQlTTkJfRklGT19MSU5FX1NJWkUKLX07Ci0KLQogLyoqCiAgKiBpbnRlbF9jYWxjdWxhdGVf d20gLSBjYWxjdWxhdGUgd2F0ZXJtYXJrIGxldmVsCiAgKiBAY2xvY2tfaW5fa2h6OiBwaXhlbCBj bG9jawpAQCAtMTcwNyw0MjMgKzE2NDgsNiBAQCBzdGF0aWMgdm9pZCBpODMwX3VwZGF0ZV93bShz dHJ1Y3QgZHJtX2NydGMgKnVudXNlZF9jcnRjKQogCUk5MTVfV1JJVEUoRldfQkxDLCBmd2F0ZXJf bG8pOwogfQogCi0vKgotICogQ2hlY2sgdGhlIHdtIHJlc3VsdC4KLSAqCi0gKiBJZiBhbnkgY2Fs Y3VsYXRlZCB3YXRlcm1hcmsgdmFsdWVzIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHZhbHVl IHRoYXQKLSAqIGNhbiBiZSBwcm9ncmFtbWVkIGludG8gdGhlIGFzc29jaWF0ZWQgd2F0ZXJtYXJr IHJlZ2lzdGVyLCB0aGF0IHdhdGVybWFyawotICogbXVzdCBiZSBkaXNhYmxlZC4KLSAqLwotc3Rh dGljIGJvb2wgaXJvbmxha2VfY2hlY2tfc3J3bShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQg bGV2ZWwsCi0JCQkJaW50IGZiY193bSwgaW50IGRpc3BsYXlfd20sIGludCBjdXJzb3Jfd20sCi0J CQkJY29uc3Qgc3RydWN0IGludGVsX3dhdGVybWFya19wYXJhbXMgKmRpc3BsYXksCi0JCQkJY29u c3Qgc3RydWN0IGludGVsX3dhdGVybWFya19wYXJhbXMgKmN1cnNvcikKLXsKLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JRFJNX0RFQlVH X0tNUygid2F0ZXJtYXJrICVkOiBkaXNwbGF5IHBsYW5lICVkLCBmYmMgbGluZXMgJWQsIgotCQkg ICAgICAiIGN1cnNvciAlZFxuIiwgbGV2ZWwsIGRpc3BsYXlfd20sIGZiY193bSwgY3Vyc29yX3dt KTsKLQotCWlmIChmYmNfd20gPiBTTkJfRkJDX01BWF9TUldNKSB7Ci0JCURSTV9ERUJVR19LTVMo ImZiYyB3YXRlcm1hcmsoJWQpIGlzIHRvbyBsYXJnZSglZCksIGRpc2FibGluZyB3bSVkK1xuIiwK LQkJCSAgICAgIGZiY193bSwgU05CX0ZCQ19NQVhfU1JXTSwgbGV2ZWwpOwotCi0JCS8qIGZiYyBo YXMgaXQncyBvd24gd2F5IHRvIGRpc2FibGUgRkJDIFdNICovCi0JCUk5MTVfV1JJVEUoRElTUF9B UkJfQ1RMLAotCQkJICAgSTkxNV9SRUFEKERJU1BfQVJCX0NUTCkgfCBESVNQX0ZCQ19XTV9ESVMp OwotCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIGlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA2 KSB7Ci0JCS8qIGVuYWJsZSBGQkMgV00gKGV4Y2VwdCBvbiBJTEssIHdoZXJlIGl0IG11c3QgcmVt YWluIG9mZikgKi8KLQkJSTkxNV9XUklURShESVNQX0FSQl9DVEwsCi0JCQkgICBJOTE1X1JFQUQo RElTUF9BUkJfQ1RMKSAmIH5ESVNQX0ZCQ19XTV9ESVMpOwotCX0KLQotCWlmIChkaXNwbGF5X3dt ID4gZGlzcGxheS0+bWF4X3dtKSB7Ci0JCURSTV9ERUJVR19LTVMoImRpc3BsYXkgd2F0ZXJtYXJr KCVkKSBpcyB0b28gbGFyZ2UoJWQpLCBkaXNhYmxpbmcgd20lZCtcbiIsCi0JCQkgICAgICBkaXNw bGF5X3dtLCBTTkJfRElTUExBWV9NQVhfU1JXTSwgbGV2ZWwpOwotCQlyZXR1cm4gZmFsc2U7Ci0J fQotCi0JaWYgKGN1cnNvcl93bSA+IGN1cnNvci0+bWF4X3dtKSB7Ci0JCURSTV9ERUJVR19LTVMo ImN1cnNvciB3YXRlcm1hcmsoJWQpIGlzIHRvbyBsYXJnZSglZCksIGRpc2FibGluZyB3bSVkK1xu IiwKLQkJCSAgICAgIGN1cnNvcl93bSwgU05CX0NVUlNPUl9NQVhfU1JXTSwgbGV2ZWwpOwotCQly ZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKCEoZmJjX3dtIHx8IGRpc3BsYXlfd20gfHwgY3Vyc29y X3dtKSkgewotCQlEUk1fREVCVUdfS01TKCJsYXRlbmN5ICVkIGlzIDAsIGRpc2FibGluZyB3bSVk K1xuIiwgbGV2ZWwsIGxldmVsKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXJldHVybiB0cnVl OwotfQotCi0vKgotICogQ29tcHV0ZSB3YXRlcm1hcmsgdmFsdWVzIG9mIFdNWzEtM10sCi0gKi8K LXN0YXRpYyBib29sIGlyb25sYWtlX2NvbXB1dGVfc3J3bShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCBpbnQgbGV2ZWwsIGludCBwbGFuZSwKLQkJCQkgIGludCBsYXRlbmN5X25zLAotCQkJCSAgY29u c3Qgc3RydWN0IGludGVsX3dhdGVybWFya19wYXJhbXMgKmRpc3BsYXksCi0JCQkJICBjb25zdCBz dHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyAqY3Vyc29yLAotCQkJCSAgaW50ICpmYmNfd20s IGludCAqZGlzcGxheV93bSwgaW50ICpjdXJzb3Jfd20pCi17Ci0Jc3RydWN0IGRybV9jcnRjICpj cnRjOwotCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlOwotCXVu c2lnbmVkIGxvbmcgbGluZV90aW1lX3VzOwotCWludCBoZGlzcGxheSwgaHRvdGFsLCBwaXhlbF9z aXplLCBjbG9jazsKLQlpbnQgbGluZV9jb3VudCwgbGluZV9zaXplOwotCWludCBzbWFsbCwgbGFy Z2U7Ci0JaW50IGVudHJpZXM7Ci0KLQlpZiAoIWxhdGVuY3lfbnMpIHsKLQkJKmZiY193bSA9ICpk aXNwbGF5X3dtID0gKmN1cnNvcl93bSA9IDA7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQljcnRj ID0gaW50ZWxfZ2V0X2NydGNfZm9yX3BsYW5lKGRldiwgcGxhbmUpOwotCWFkanVzdGVkX21vZGUg PSAmdG9faW50ZWxfY3J0YyhjcnRjKS0+Y29uZmlnLmFkanVzdGVkX21vZGU7Ci0JY2xvY2sgPSBh ZGp1c3RlZF9tb2RlLT5jcnRjX2Nsb2NrOwotCWh0b3RhbCA9IGFkanVzdGVkX21vZGUtPmNydGNf aHRvdGFsOwotCWhkaXNwbGF5ID0gdG9faW50ZWxfY3J0YyhjcnRjKS0+Y29uZmlnLnBpcGVfc3Jj X3c7Ci0JcGl4ZWxfc2l6ZSA9IGNydGMtPmZiLT5iaXRzX3Blcl9waXhlbCAvIDg7Ci0KLQlsaW5l X3RpbWVfdXMgPSAoaHRvdGFsICogMTAwMCkgLyBjbG9jazsKLQlsaW5lX2NvdW50ID0gKGxhdGVu Y3lfbnMgLyBsaW5lX3RpbWVfdXMgKyAxMDAwKSAvIDEwMDA7Ci0JbGluZV9zaXplID0gaGRpc3Bs YXkgKiBwaXhlbF9zaXplOwotCi0JLyogVXNlIHRoZSBtaW5pbXVtIG9mIHRoZSBzbWFsbCBhbmQg bGFyZ2UgYnVmZmVyIG1ldGhvZCBmb3IgcHJpbWFyeSAqLwotCXNtYWxsID0gKChjbG9jayAqIHBp eGVsX3NpemUgLyAxMDAwKSAqIGxhdGVuY3lfbnMpIC8gMTAwMDsKLQlsYXJnZSA9IGxpbmVfY291 bnQgKiBsaW5lX3NpemU7Ci0KLQllbnRyaWVzID0gRElWX1JPVU5EX1VQKG1pbihzbWFsbCwgbGFy Z2UpLCBkaXNwbGF5LT5jYWNoZWxpbmVfc2l6ZSk7Ci0JKmRpc3BsYXlfd20gPSBlbnRyaWVzICsg ZGlzcGxheS0+Z3VhcmRfc2l6ZTsKLQotCS8qCi0JICogU3BlYyBzYXlzOgotCSAqIEZCQyBXTSA9 ICgoRmluYWwgUHJpbWFyeSBXTSAqIDY0KSAvIG51bWJlciBvZiBieXRlcyBwZXIgbGluZSkgKyAy Ci0JICovCi0JKmZiY193bSA9IERJVl9ST1VORF9VUCgqZGlzcGxheV93bSAqIDY0LCBsaW5lX3Np emUpICsgMjsKLQotCS8qIGNhbGN1bGF0ZSB0aGUgc2VsZi1yZWZyZXNoIHdhdGVybWFyayBmb3Ig ZGlzcGxheSBjdXJzb3IgKi8KLQllbnRyaWVzID0gbGluZV9jb3VudCAqIHBpeGVsX3NpemUgKiA2 NDsKLQllbnRyaWVzID0gRElWX1JPVU5EX1VQKGVudHJpZXMsIGN1cnNvci0+Y2FjaGVsaW5lX3Np emUpOwotCSpjdXJzb3Jfd20gPSBlbnRyaWVzICsgY3Vyc29yLT5ndWFyZF9zaXplOwotCi0JcmV0 dXJuIGlyb25sYWtlX2NoZWNrX3Nyd20oZGV2LCBsZXZlbCwKLQkJCQkgICAqZmJjX3dtLCAqZGlz cGxheV93bSwgKmN1cnNvcl93bSwKLQkJCQkgICBkaXNwbGF5LCBjdXJzb3IpOwotfQotCi1zdGF0 aWMgdm9pZCBpcm9ubGFrZV91cGRhdGVfd20oc3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgZmJjX3dtLCBwbGFuZV93bSwg Y3Vyc29yX3dtOwotCXVuc2lnbmVkIGludCBlbmFibGVkOwotCi0JZW5hYmxlZCA9IDA7Ci0JaWYg KGc0eF9jb21wdXRlX3dtMChkZXYsIFBJUEVfQSwKLQkJCSAgICAmaXJvbmxha2VfZGlzcGxheV93 bV9pbmZvLAotCQkJICAgIGRldl9wcml2LT53bS5wcmlfbGF0ZW5jeVswXSAqIDEwMCwKLQkJCSAg ICAmaXJvbmxha2VfY3Vyc29yX3dtX2luZm8sCi0JCQkgICAgZGV2X3ByaXYtPndtLmN1cl9sYXRl bmN5WzBdICogMTAwLAotCQkJICAgICZwbGFuZV93bSwgJmN1cnNvcl93bSkpIHsKLQkJSTkxNV9X UklURShXTTBfUElQRUFfSUxLLAotCQkJICAgKHBsYW5lX3dtIDw8IFdNMF9QSVBFX1BMQU5FX1NI SUZUKSB8IGN1cnNvcl93bSk7Ci0JCURSTV9ERUJVR19LTVMoIkZJRk8gd2F0ZXJtYXJrcyBGb3Ig cGlwZSBBIC0iCi0JCQkgICAgICAiIHBsYW5lICVkLCAiICJjdXJzb3I6ICVkXG4iLAotCQkJICAg ICAgcGxhbmVfd20sIGN1cnNvcl93bSk7Ci0JCWVuYWJsZWQgfD0gMSA8PCBQSVBFX0E7Ci0JfQot Ci0JaWYgKGc0eF9jb21wdXRlX3dtMChkZXYsIFBJUEVfQiwKLQkJCSAgICAmaXJvbmxha2VfZGlz cGxheV93bV9pbmZvLAotCQkJICAgIGRldl9wcml2LT53bS5wcmlfbGF0ZW5jeVswXSAqIDEwMCwK LQkJCSAgICAmaXJvbmxha2VfY3Vyc29yX3dtX2luZm8sCi0JCQkgICAgZGV2X3ByaXYtPndtLmN1 cl9sYXRlbmN5WzBdICogMTAwLAotCQkJICAgICZwbGFuZV93bSwgJmN1cnNvcl93bSkpIHsKLQkJ STkxNV9XUklURShXTTBfUElQRUJfSUxLLAotCQkJICAgKHBsYW5lX3dtIDw8IFdNMF9QSVBFX1BM QU5FX1NISUZUKSB8IGN1cnNvcl93bSk7Ci0JCURSTV9ERUJVR19LTVMoIkZJRk8gd2F0ZXJtYXJr cyBGb3IgcGlwZSBCIC0iCi0JCQkgICAgICAiIHBsYW5lICVkLCBjdXJzb3I6ICVkXG4iLAotCQkJ ICAgICAgcGxhbmVfd20sIGN1cnNvcl93bSk7Ci0JCWVuYWJsZWQgfD0gMSA8PCBQSVBFX0I7Ci0J fQotCi0JLyoKLQkgKiBDYWxjdWxhdGUgYW5kIHVwZGF0ZSB0aGUgc2VsZi1yZWZyZXNoIHdhdGVy bWFyayBvbmx5IHdoZW4gb25lCi0JICogZGlzcGxheSBwbGFuZSBpcyB1c2VkLgotCSAqLwotCUk5 MTVfV1JJVEUoV00zX0xQX0lMSywgMCk7Ci0JSTkxNV9XUklURShXTTJfTFBfSUxLLCAwKTsKLQlJ OTE1X1dSSVRFKFdNMV9MUF9JTEssIDApOwotCi0JaWYgKCFzaW5nbGVfcGxhbmVfZW5hYmxlZChl bmFibGVkKSkKLQkJcmV0dXJuOwotCWVuYWJsZWQgPSBmZnMoZW5hYmxlZCkgLSAxOwotCi0JLyog V00xICovCi0JaWYgKCFpcm9ubGFrZV9jb21wdXRlX3Nyd20oZGV2LCAxLCBlbmFibGVkLAotCQkJ CSAgIGRldl9wcml2LT53bS5wcmlfbGF0ZW5jeVsxXSAqIDUwMCwKLQkJCQkgICAmaXJvbmxha2Vf ZGlzcGxheV9zcndtX2luZm8sCi0JCQkJICAgJmlyb25sYWtlX2N1cnNvcl9zcndtX2luZm8sCi0J CQkJICAgJmZiY193bSwgJnBsYW5lX3dtLCAmY3Vyc29yX3dtKSkKLQkJcmV0dXJuOwotCi0JSTkx NV9XUklURShXTTFfTFBfSUxLLAotCQkgICBXTTFfTFBfU1JfRU4gfAotCQkgICAoZGV2X3ByaXYt PndtLnByaV9sYXRlbmN5WzFdIDw8IFdNMV9MUF9MQVRFTkNZX1NISUZUKSB8Ci0JCSAgIChmYmNf d20gPDwgV00xX0xQX0ZCQ19TSElGVCkgfAotCQkgICAocGxhbmVfd20gPDwgV00xX0xQX1NSX1NI SUZUKSB8Ci0JCSAgIGN1cnNvcl93bSk7Ci0KLQkvKiBXTTIgKi8KLQlpZiAoIWlyb25sYWtlX2Nv bXB1dGVfc3J3bShkZXYsIDIsIGVuYWJsZWQsCi0JCQkJICAgZGV2X3ByaXYtPndtLnByaV9sYXRl bmN5WzJdICogNTAwLAotCQkJCSAgICZpcm9ubGFrZV9kaXNwbGF5X3Nyd21faW5mbywKLQkJCQkg ICAmaXJvbmxha2VfY3Vyc29yX3Nyd21faW5mbywKLQkJCQkgICAmZmJjX3dtLCAmcGxhbmVfd20s ICZjdXJzb3Jfd20pKQotCQlyZXR1cm47Ci0KLQlJOTE1X1dSSVRFKFdNMl9MUF9JTEssCi0JCSAg IFdNMl9MUF9FTiB8Ci0JCSAgIChkZXZfcHJpdi0+d20ucHJpX2xhdGVuY3lbMl0gPDwgV00xX0xQ X0xBVEVOQ1lfU0hJRlQpIHwKLQkJICAgKGZiY193bSA8PCBXTTFfTFBfRkJDX1NISUZUKSB8Ci0J CSAgIChwbGFuZV93bSA8PCBXTTFfTFBfU1JfU0hJRlQpIHwKLQkJICAgY3Vyc29yX3dtKTsKLQot CS8qCi0JICogV00zIGlzIHVuc3VwcG9ydGVkIG9uIElMSywgcHJvYmFibHkgYmVjYXVzZSB3ZSBk b24ndCBoYXZlIGxhdGVuY3kKLQkgKiBkYXRhIGZvciB0aGF0IHBvd2VyIHN0YXRlCi0JICovCi19 Ci0KLXN0YXRpYyB2b2lkIHNhbmR5YnJpZGdlX3VwZGF0ZV93bShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCBsYXRlbmN5 ID0gZGV2X3ByaXYtPndtLnByaV9sYXRlbmN5WzBdICogMTAwOwkvKiBJbiB1bml0IDAuMXVzICov Ci0JdTMyIHZhbDsKLQlpbnQgZmJjX3dtLCBwbGFuZV93bSwgY3Vyc29yX3dtOwotCXVuc2lnbmVk IGludCBlbmFibGVkOwotCi0JZW5hYmxlZCA9IDA7Ci0JaWYgKGc0eF9jb21wdXRlX3dtMChkZXYs IFBJUEVfQSwKLQkJCSAgICAmc2FuZHlicmlkZ2VfZGlzcGxheV93bV9pbmZvLCBsYXRlbmN5LAot CQkJICAgICZzYW5keWJyaWRnZV9jdXJzb3Jfd21faW5mbywgbGF0ZW5jeSwKLQkJCSAgICAmcGxh bmVfd20sICZjdXJzb3Jfd20pKSB7Ci0JCXZhbCA9IEk5MTVfUkVBRChXTTBfUElQRUFfSUxLKTsK LQkJdmFsICY9IH4oV00wX1BJUEVfUExBTkVfTUFTSyB8IFdNMF9QSVBFX0NVUlNPUl9NQVNLKTsK LQkJSTkxNV9XUklURShXTTBfUElQRUFfSUxLLCB2YWwgfAotCQkJICAgKChwbGFuZV93bSA8PCBX TTBfUElQRV9QTEFORV9TSElGVCkgfCBjdXJzb3Jfd20pKTsKLQkJRFJNX0RFQlVHX0tNUygiRklG TyB3YXRlcm1hcmtzIEZvciBwaXBlIEEgLSIKLQkJCSAgICAgICIgcGxhbmUgJWQsICIgImN1cnNv cjogJWRcbiIsCi0JCQkgICAgICBwbGFuZV93bSwgY3Vyc29yX3dtKTsKLQkJZW5hYmxlZCB8PSAx IDw8IFBJUEVfQTsKLQl9Ci0KLQlpZiAoZzR4X2NvbXB1dGVfd20wKGRldiwgUElQRV9CLAotCQkJ ICAgICZzYW5keWJyaWRnZV9kaXNwbGF5X3dtX2luZm8sIGxhdGVuY3ksCi0JCQkgICAgJnNhbmR5 YnJpZGdlX2N1cnNvcl93bV9pbmZvLCBsYXRlbmN5LAotCQkJICAgICZwbGFuZV93bSwgJmN1cnNv cl93bSkpIHsKLQkJdmFsID0gSTkxNV9SRUFEKFdNMF9QSVBFQl9JTEspOwotCQl2YWwgJj0gfihX TTBfUElQRV9QTEFORV9NQVNLIHwgV00wX1BJUEVfQ1VSU09SX01BU0spOwotCQlJOTE1X1dSSVRF KFdNMF9QSVBFQl9JTEssIHZhbCB8Ci0JCQkgICAoKHBsYW5lX3dtIDw8IFdNMF9QSVBFX1BMQU5F X1NISUZUKSB8IGN1cnNvcl93bSkpOwotCQlEUk1fREVCVUdfS01TKCJGSUZPIHdhdGVybWFya3Mg Rm9yIHBpcGUgQiAtIgotCQkJICAgICAgIiBwbGFuZSAlZCwgY3Vyc29yOiAlZFxuIiwKLQkJCSAg ICAgIHBsYW5lX3dtLCBjdXJzb3Jfd20pOwotCQllbmFibGVkIHw9IDEgPDwgUElQRV9COwotCX0K LQotCS8qCi0JICogQ2FsY3VsYXRlIGFuZCB1cGRhdGUgdGhlIHNlbGYtcmVmcmVzaCB3YXRlcm1h cmsgb25seSB3aGVuIG9uZQotCSAqIGRpc3BsYXkgcGxhbmUgaXMgdXNlZC4KLQkgKgotCSAqIFNO QiBzdXBwb3J0IDMgbGV2ZWxzIG9mIHdhdGVybWFyay4KLQkgKgotCSAqIFdNMS9XTTIvV00yIHdh dGVybWFya3MgaGF2ZSB0byBiZSBlbmFibGVkIGluIHRoZSBhc2NlbmRpbmcgb3JkZXIsCi0JICog YW5kIGRpc2FibGVkIGluIHRoZSBkZXNjZW5kaW5nIG9yZGVyCi0JICoKLQkgKi8KLQlJOTE1X1dS SVRFKFdNM19MUF9JTEssIDApOwotCUk5MTVfV1JJVEUoV00yX0xQX0lMSywgMCk7Ci0JSTkxNV9X UklURShXTTFfTFBfSUxLLCAwKTsKLQotCWlmICghc2luZ2xlX3BsYW5lX2VuYWJsZWQoZW5hYmxl ZCkgfHwKLQkgICAgZGV2X3ByaXYtPnNwcml0ZV9zY2FsaW5nX2VuYWJsZWQpCi0JCXJldHVybjsK LQllbmFibGVkID0gZmZzKGVuYWJsZWQpIC0gMTsKLQotCS8qIFdNMSAqLwotCWlmICghaXJvbmxh a2VfY29tcHV0ZV9zcndtKGRldiwgMSwgZW5hYmxlZCwKLQkJCQkgICBkZXZfcHJpdi0+d20ucHJp X2xhdGVuY3lbMV0gKiA1MDAsCi0JCQkJICAgJnNhbmR5YnJpZGdlX2Rpc3BsYXlfc3J3bV9pbmZv LAotCQkJCSAgICZzYW5keWJyaWRnZV9jdXJzb3Jfc3J3bV9pbmZvLAotCQkJCSAgICZmYmNfd20s ICZwbGFuZV93bSwgJmN1cnNvcl93bSkpCi0JCXJldHVybjsKLQotCUk5MTVfV1JJVEUoV00xX0xQ X0lMSywKLQkJICAgV00xX0xQX1NSX0VOIHwKLQkJICAgKGRldl9wcml2LT53bS5wcmlfbGF0ZW5j eVsxXSA8PCBXTTFfTFBfTEFURU5DWV9TSElGVCkgfAotCQkgICAoZmJjX3dtIDw8IFdNMV9MUF9G QkNfU0hJRlQpIHwKLQkJICAgKHBsYW5lX3dtIDw8IFdNMV9MUF9TUl9TSElGVCkgfAotCQkgICBj dXJzb3Jfd20pOwotCi0JLyogV00yICovCi0JaWYgKCFpcm9ubGFrZV9jb21wdXRlX3Nyd20oZGV2 LCAyLCBlbmFibGVkLAotCQkJCSAgIGRldl9wcml2LT53bS5wcmlfbGF0ZW5jeVsyXSAqIDUwMCwK LQkJCQkgICAmc2FuZHlicmlkZ2VfZGlzcGxheV9zcndtX2luZm8sCi0JCQkJICAgJnNhbmR5YnJp ZGdlX2N1cnNvcl9zcndtX2luZm8sCi0JCQkJICAgJmZiY193bSwgJnBsYW5lX3dtLCAmY3Vyc29y X3dtKSkKLQkJcmV0dXJuOwotCi0JSTkxNV9XUklURShXTTJfTFBfSUxLLAotCQkgICBXTTJfTFBf RU4gfAotCQkgICAoZGV2X3ByaXYtPndtLnByaV9sYXRlbmN5WzJdIDw8IFdNMV9MUF9MQVRFTkNZ X1NISUZUKSB8Ci0JCSAgIChmYmNfd20gPDwgV00xX0xQX0ZCQ19TSElGVCkgfAotCQkgICAocGxh bmVfd20gPDwgV00xX0xQX1NSX1NISUZUKSB8Ci0JCSAgIGN1cnNvcl93bSk7Ci0KLQkvKiBXTTMg Ki8KLQlpZiAoIWlyb25sYWtlX2NvbXB1dGVfc3J3bShkZXYsIDMsIGVuYWJsZWQsCi0JCQkJICAg ZGV2X3ByaXYtPndtLnByaV9sYXRlbmN5WzNdICogNTAwLAotCQkJCSAgICZzYW5keWJyaWRnZV9k aXNwbGF5X3Nyd21faW5mbywKLQkJCQkgICAmc2FuZHlicmlkZ2VfY3Vyc29yX3Nyd21faW5mbywK LQkJCQkgICAmZmJjX3dtLCAmcGxhbmVfd20sICZjdXJzb3Jfd20pKQotCQlyZXR1cm47Ci0KLQlJ OTE1X1dSSVRFKFdNM19MUF9JTEssCi0JCSAgIFdNM19MUF9FTiB8Ci0JCSAgIChkZXZfcHJpdi0+ d20ucHJpX2xhdGVuY3lbM10gPDwgV00xX0xQX0xBVEVOQ1lfU0hJRlQpIHwKLQkJICAgKGZiY193 bSA8PCBXTTFfTFBfRkJDX1NISUZUKSB8Ci0JCSAgIChwbGFuZV93bSA8PCBXTTFfTFBfU1JfU0hJ RlQpIHwKLQkJICAgY3Vyc29yX3dtKTsKLX0KLQotc3RhdGljIHZvaWQgaXZ5YnJpZGdlX3VwZGF0 ZV93bShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGNydGMtPmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOwotCWludCBsYXRlbmN5ID0gZGV2X3ByaXYtPndtLnByaV9sYXRlbmN5WzBdICog MTAwOwkvKiBJbiB1bml0IDAuMXVzICovCi0JdTMyIHZhbDsKLQlpbnQgZmJjX3dtLCBwbGFuZV93 bSwgY3Vyc29yX3dtOwotCWludCBpZ25vcmVfZmJjX3dtLCBpZ25vcmVfcGxhbmVfd20sIGlnbm9y ZV9jdXJzb3Jfd207Ci0JdW5zaWduZWQgaW50IGVuYWJsZWQ7Ci0KLQllbmFibGVkID0gMDsKLQlp ZiAoZzR4X2NvbXB1dGVfd20wKGRldiwgUElQRV9BLAotCQkJICAgICZzYW5keWJyaWRnZV9kaXNw bGF5X3dtX2luZm8sIGxhdGVuY3ksCi0JCQkgICAgJnNhbmR5YnJpZGdlX2N1cnNvcl93bV9pbmZv LCBsYXRlbmN5LAotCQkJICAgICZwbGFuZV93bSwgJmN1cnNvcl93bSkpIHsKLQkJdmFsID0gSTkx NV9SRUFEKFdNMF9QSVBFQV9JTEspOwotCQl2YWwgJj0gfihXTTBfUElQRV9QTEFORV9NQVNLIHwg V00wX1BJUEVfQ1VSU09SX01BU0spOwotCQlJOTE1X1dSSVRFKFdNMF9QSVBFQV9JTEssIHZhbCB8 Ci0JCQkgICAoKHBsYW5lX3dtIDw8IFdNMF9QSVBFX1BMQU5FX1NISUZUKSB8IGN1cnNvcl93bSkp OwotCQlEUk1fREVCVUdfS01TKCJGSUZPIHdhdGVybWFya3MgRm9yIHBpcGUgQSAtIgotCQkJICAg ICAgIiBwbGFuZSAlZCwgIiAiY3Vyc29yOiAlZFxuIiwKLQkJCSAgICAgIHBsYW5lX3dtLCBjdXJz b3Jfd20pOwotCQllbmFibGVkIHw9IDEgPDwgUElQRV9BOwotCX0KLQotCWlmIChnNHhfY29tcHV0 ZV93bTAoZGV2LCBQSVBFX0IsCi0JCQkgICAgJnNhbmR5YnJpZGdlX2Rpc3BsYXlfd21faW5mbywg bGF0ZW5jeSwKLQkJCSAgICAmc2FuZHlicmlkZ2VfY3Vyc29yX3dtX2luZm8sIGxhdGVuY3ksCi0J CQkgICAgJnBsYW5lX3dtLCAmY3Vyc29yX3dtKSkgewotCQl2YWwgPSBJOTE1X1JFQUQoV00wX1BJ UEVCX0lMSyk7Ci0JCXZhbCAmPSB+KFdNMF9QSVBFX1BMQU5FX01BU0sgfCBXTTBfUElQRV9DVVJT T1JfTUFTSyk7Ci0JCUk5MTVfV1JJVEUoV00wX1BJUEVCX0lMSywgdmFsIHwKLQkJCSAgICgocGxh bmVfd20gPDwgV00wX1BJUEVfUExBTkVfU0hJRlQpIHwgY3Vyc29yX3dtKSk7Ci0JCURSTV9ERUJV R19LTVMoIkZJRk8gd2F0ZXJtYXJrcyBGb3IgcGlwZSBCIC0iCi0JCQkgICAgICAiIHBsYW5lICVk LCBjdXJzb3I6ICVkXG4iLAotCQkJICAgICAgcGxhbmVfd20sIGN1cnNvcl93bSk7Ci0JCWVuYWJs ZWQgfD0gMSA8PCBQSVBFX0I7Ci0JfQotCi0JaWYgKGc0eF9jb21wdXRlX3dtMChkZXYsIFBJUEVf QywKLQkJCSAgICAmc2FuZHlicmlkZ2VfZGlzcGxheV93bV9pbmZvLCBsYXRlbmN5LAotCQkJICAg ICZzYW5keWJyaWRnZV9jdXJzb3Jfd21faW5mbywgbGF0ZW5jeSwKLQkJCSAgICAmcGxhbmVfd20s ICZjdXJzb3Jfd20pKSB7Ci0JCXZhbCA9IEk5MTVfUkVBRChXTTBfUElQRUNfSVZCKTsKLQkJdmFs ICY9IH4oV00wX1BJUEVfUExBTkVfTUFTSyB8IFdNMF9QSVBFX0NVUlNPUl9NQVNLKTsKLQkJSTkx NV9XUklURShXTTBfUElQRUNfSVZCLCB2YWwgfAotCQkJICAgKChwbGFuZV93bSA8PCBXTTBfUElQ RV9QTEFORV9TSElGVCkgfCBjdXJzb3Jfd20pKTsKLQkJRFJNX0RFQlVHX0tNUygiRklGTyB3YXRl cm1hcmtzIEZvciBwaXBlIEMgLSIKLQkJCSAgICAgICIgcGxhbmUgJWQsIGN1cnNvcjogJWRcbiIs Ci0JCQkgICAgICBwbGFuZV93bSwgY3Vyc29yX3dtKTsKLQkJZW5hYmxlZCB8PSAxIDw8IFBJUEVf QzsKLQl9Ci0KLQkvKgotCSAqIENhbGN1bGF0ZSBhbmQgdXBkYXRlIHRoZSBzZWxmLXJlZnJlc2gg d2F0ZXJtYXJrIG9ubHkgd2hlbiBvbmUKLQkgKiBkaXNwbGF5IHBsYW5lIGlzIHVzZWQuCi0JICoK LQkgKiBTTkIgc3VwcG9ydCAzIGxldmVscyBvZiB3YXRlcm1hcmsuCi0JICoKLQkgKiBXTTEvV00y L1dNMiB3YXRlcm1hcmtzIGhhdmUgdG8gYmUgZW5hYmxlZCBpbiB0aGUgYXNjZW5kaW5nIG9yZGVy LAotCSAqIGFuZCBkaXNhYmxlZCBpbiB0aGUgZGVzY2VuZGluZyBvcmRlcgotCSAqCi0JICovCi0J STkxNV9XUklURShXTTNfTFBfSUxLLCAwKTsKLQlJOTE1X1dSSVRFKFdNMl9MUF9JTEssIDApOwot CUk5MTVfV1JJVEUoV00xX0xQX0lMSywgMCk7Ci0KLQlpZiAoIXNpbmdsZV9wbGFuZV9lbmFibGVk KGVuYWJsZWQpIHx8Ci0JICAgIGRldl9wcml2LT5zcHJpdGVfc2NhbGluZ19lbmFibGVkKQotCQly ZXR1cm47Ci0JZW5hYmxlZCA9IGZmcyhlbmFibGVkKSAtIDE7Ci0KLQkvKiBXTTEgKi8KLQlpZiAo IWlyb25sYWtlX2NvbXB1dGVfc3J3bShkZXYsIDEsIGVuYWJsZWQsCi0JCQkJICAgZGV2X3ByaXYt PndtLnByaV9sYXRlbmN5WzFdICogNTAwLAotCQkJCSAgICZzYW5keWJyaWRnZV9kaXNwbGF5X3Ny d21faW5mbywKLQkJCQkgICAmc2FuZHlicmlkZ2VfY3Vyc29yX3Nyd21faW5mbywKLQkJCQkgICAm ZmJjX3dtLCAmcGxhbmVfd20sICZjdXJzb3Jfd20pKQotCQlyZXR1cm47Ci0KLQlJOTE1X1dSSVRF KFdNMV9MUF9JTEssCi0JCSAgIFdNMV9MUF9TUl9FTiB8Ci0JCSAgIChkZXZfcHJpdi0+d20ucHJp X2xhdGVuY3lbMV0gPDwgV00xX0xQX0xBVEVOQ1lfU0hJRlQpIHwKLQkJICAgKGZiY193bSA8PCBX TTFfTFBfRkJDX1NISUZUKSB8Ci0JCSAgIChwbGFuZV93bSA8PCBXTTFfTFBfU1JfU0hJRlQpIHwK LQkJICAgY3Vyc29yX3dtKTsKLQotCS8qIFdNMiAqLwotCWlmICghaXJvbmxha2VfY29tcHV0ZV9z cndtKGRldiwgMiwgZW5hYmxlZCwKLQkJCQkgICBkZXZfcHJpdi0+d20ucHJpX2xhdGVuY3lbMl0g KiA1MDAsCi0JCQkJICAgJnNhbmR5YnJpZGdlX2Rpc3BsYXlfc3J3bV9pbmZvLAotCQkJCSAgICZz YW5keWJyaWRnZV9jdXJzb3Jfc3J3bV9pbmZvLAotCQkJCSAgICZmYmNfd20sICZwbGFuZV93bSwg JmN1cnNvcl93bSkpCi0JCXJldHVybjsKLQotCUk5MTVfV1JJVEUoV00yX0xQX0lMSywKLQkJICAg V00yX0xQX0VOIHwKLQkJICAgKGRldl9wcml2LT53bS5wcmlfbGF0ZW5jeVsyXSA8PCBXTTFfTFBf TEFURU5DWV9TSElGVCkgfAotCQkgICAoZmJjX3dtIDw8IFdNMV9MUF9GQkNfU0hJRlQpIHwKLQkJ ICAgKHBsYW5lX3dtIDw8IFdNMV9MUF9TUl9TSElGVCkgfAotCQkgICBjdXJzb3Jfd20pOwotCi0J LyogV00zLCBub3RlIHdlIGhhdmUgdG8gY29ycmVjdCB0aGUgY3Vyc29yIGxhdGVuY3kgKi8KLQlp ZiAoIWlyb25sYWtlX2NvbXB1dGVfc3J3bShkZXYsIDMsIGVuYWJsZWQsCi0JCQkJICAgZGV2X3By aXYtPndtLnByaV9sYXRlbmN5WzNdICogNTAwLAotCQkJCSAgICZzYW5keWJyaWRnZV9kaXNwbGF5 X3Nyd21faW5mbywKLQkJCQkgICAmc2FuZHlicmlkZ2VfY3Vyc29yX3Nyd21faW5mbywKLQkJCQkg ICAmZmJjX3dtLCAmcGxhbmVfd20sICZpZ25vcmVfY3Vyc29yX3dtKSB8fAotCSAgICAhaXJvbmxh a2VfY29tcHV0ZV9zcndtKGRldiwgMywgZW5hYmxlZCwKLQkJCQkgICBkZXZfcHJpdi0+d20uY3Vy X2xhdGVuY3lbM10gKiA1MDAsCi0JCQkJICAgJnNhbmR5YnJpZGdlX2Rpc3BsYXlfc3J3bV9pbmZv LAotCQkJCSAgICZzYW5keWJyaWRnZV9jdXJzb3Jfc3J3bV9pbmZvLAotCQkJCSAgICZpZ25vcmVf ZmJjX3dtLCAmaWdub3JlX3BsYW5lX3dtLCAmY3Vyc29yX3dtKSkKLQkJcmV0dXJuOwotCi0JSTkx NV9XUklURShXTTNfTFBfSUxLLAotCQkgICBXTTNfTFBfRU4gfAotCQkgICAoZGV2X3ByaXYtPndt LnByaV9sYXRlbmN5WzNdIDw8IFdNMV9MUF9MQVRFTkNZX1NISUZUKSB8Ci0JCSAgIChmYmNfd20g PDwgV00xX0xQX0ZCQ19TSElGVCkgfAotCQkgICAocGxhbmVfd20gPDwgV00xX0xQX1NSX1NISUZU KSB8Ci0JCSAgIGN1cnNvcl93bSk7Ci19Ci0KIHN0YXRpYyB1aW50MzJfdCBpbGtfcGlwZV9waXhl bF9yYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgIHN0cnVjdCBkcm1fY3J0YyAq Y3J0YykKIHsKQEAgLTMwNTksMTY4ICsyNTgzLDYgQEAgc3RhdGljIHZvaWQgaGFzd2VsbF91cGRh dGVfc3ByaXRlX3dtKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCWhhc3dlbGxfdXBkYXRlX3dt KGNydGMpOwogfQogCi1zdGF0aWMgYm9vbAotc2FuZHlicmlkZ2VfY29tcHV0ZV9zcHJpdGVfd20o c3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBsYW5lLAotCQkJICAgICAgdWludDMyX3Qgc3By aXRlX3dpZHRoLCBpbnQgcGl4ZWxfc2l6ZSwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF93 YXRlcm1hcmtfcGFyYW1zICpkaXNwbGF5LAotCQkJICAgICAgaW50IGRpc3BsYXlfbGF0ZW5jeV9u cywgaW50ICpzcHJpdGVfd20pCi17Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwotCWludCBjbG9j azsKLQlpbnQgZW50cmllcywgdGxiX21pc3M7Ci0KLQljcnRjID0gaW50ZWxfZ2V0X2NydGNfZm9y X3BsYW5lKGRldiwgcGxhbmUpOwotCWlmICghaW50ZWxfY3J0Y19hY3RpdmUoY3J0YykpIHsKLQkJ KnNwcml0ZV93bSA9IGRpc3BsYXktPmd1YXJkX3NpemU7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0K LQljbG9jayA9IHRvX2ludGVsX2NydGMoY3J0YyktPmNvbmZpZy5hZGp1c3RlZF9tb2RlLmNydGNf Y2xvY2s7Ci0KLQkvKiBVc2UgdGhlIHNtYWxsIGJ1ZmZlciBtZXRob2QgdG8gY2FsY3VsYXRlIHRo ZSBzcHJpdGUgd2F0ZXJtYXJrICovCi0JZW50cmllcyA9ICgoY2xvY2sgKiBwaXhlbF9zaXplIC8g MTAwMCkgKiBkaXNwbGF5X2xhdGVuY3lfbnMpIC8gMTAwMDsKLQl0bGJfbWlzcyA9IGRpc3BsYXkt PmZpZm9fc2l6ZSpkaXNwbGF5LT5jYWNoZWxpbmVfc2l6ZSAtCi0JCXNwcml0ZV93aWR0aCAqIDg7 Ci0JaWYgKHRsYl9taXNzID4gMCkKLQkJZW50cmllcyArPSB0bGJfbWlzczsKLQllbnRyaWVzID0g RElWX1JPVU5EX1VQKGVudHJpZXMsIGRpc3BsYXktPmNhY2hlbGluZV9zaXplKTsKLQkqc3ByaXRl X3dtID0gZW50cmllcyArIGRpc3BsYXktPmd1YXJkX3NpemU7Ci0JaWYgKCpzcHJpdGVfd20gPiAo aW50KWRpc3BsYXktPm1heF93bSkKLQkJKnNwcml0ZV93bSA9IGRpc3BsYXktPm1heF93bTsKLQot CXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbAotc2FuZHlicmlkZ2VfY29tcHV0ZV9zcHJp dGVfc3J3bShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGxhbmUsCi0JCQkJdWludDMyX3Qg c3ByaXRlX3dpZHRoLCBpbnQgcGl4ZWxfc2l6ZSwKLQkJCQljb25zdCBzdHJ1Y3QgaW50ZWxfd2F0 ZXJtYXJrX3BhcmFtcyAqZGlzcGxheSwKLQkJCQlpbnQgbGF0ZW5jeV9ucywgaW50ICpzcHJpdGVf d20pCi17Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwotCXVuc2lnbmVkIGxvbmcgbGluZV90aW1l X3VzOwotCWludCBjbG9jazsKLQlpbnQgbGluZV9jb3VudCwgbGluZV9zaXplOwotCWludCBzbWFs bCwgbGFyZ2U7Ci0JaW50IGVudHJpZXM7Ci0KLQlpZiAoIWxhdGVuY3lfbnMpIHsKLQkJKnNwcml0 ZV93bSA9IDA7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQljcnRjID0gaW50ZWxfZ2V0X2NydGNf Zm9yX3BsYW5lKGRldiwgcGxhbmUpOwotCWNsb2NrID0gdG9faW50ZWxfY3J0YyhjcnRjKS0+Y29u ZmlnLmFkanVzdGVkX21vZGUuY3J0Y19jbG9jazsKLQlpZiAoIWNsb2NrKSB7Ci0JCSpzcHJpdGVf d20gPSAwOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JbGluZV90aW1lX3VzID0gKHNwcml0ZV93 aWR0aCAqIDEwMDApIC8gY2xvY2s7Ci0JaWYgKCFsaW5lX3RpbWVfdXMpIHsKLQkJKnNwcml0ZV93 bSA9IDA7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlsaW5lX2NvdW50ID0gKGxhdGVuY3lfbnMg LyBsaW5lX3RpbWVfdXMgKyAxMDAwKSAvIDEwMDA7Ci0JbGluZV9zaXplID0gc3ByaXRlX3dpZHRo ICogcGl4ZWxfc2l6ZTsKLQotCS8qIFVzZSB0aGUgbWluaW11bSBvZiB0aGUgc21hbGwgYW5kIGxh cmdlIGJ1ZmZlciBtZXRob2QgZm9yIHByaW1hcnkgKi8KLQlzbWFsbCA9ICgoY2xvY2sgKiBwaXhl bF9zaXplIC8gMTAwMCkgKiBsYXRlbmN5X25zKSAvIDEwMDA7Ci0JbGFyZ2UgPSBsaW5lX2NvdW50 ICogbGluZV9zaXplOwotCi0JZW50cmllcyA9IERJVl9ST1VORF9VUChtaW4oc21hbGwsIGxhcmdl KSwgZGlzcGxheS0+Y2FjaGVsaW5lX3NpemUpOwotCSpzcHJpdGVfd20gPSBlbnRyaWVzICsgZGlz cGxheS0+Z3VhcmRfc2l6ZTsKLQotCXJldHVybiAqc3ByaXRlX3dtID4gMHgzZmYgPyBmYWxzZSA6 IHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIHNhbmR5YnJpZGdlX3VwZGF0ZV9zcHJpdGVfd20oc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUsCi0JCQkJCSBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkJ CSB1aW50MzJfdCBzcHJpdGVfd2lkdGgsIGludCBwaXhlbF9zaXplLAotCQkJCQkgYm9vbCBlbmFi bGVkLCBib29sIHNjYWxlZCkKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGxhbmUtPmRl djsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl OwotCWludCBwaXBlID0gdG9faW50ZWxfcGxhbmUocGxhbmUpLT5waXBlOwotCWludCBsYXRlbmN5 ID0gZGV2X3ByaXYtPndtLnNwcl9sYXRlbmN5WzBdICogMTAwOwkvKiBJbiB1bml0IDAuMXVzICov Ci0JdTMyIHZhbDsKLQlpbnQgc3ByaXRlX3dtLCByZWc7Ci0JaW50IHJldDsKLQotCWlmICghZW5h YmxlZCkKLQkJcmV0dXJuOwotCi0Jc3dpdGNoIChwaXBlKSB7Ci0JY2FzZSAwOgotCQlyZWcgPSBX TTBfUElQRUFfSUxLOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXJlZyA9IFdNMF9QSVBFQl9JTEs7 Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJcmVnID0gV00wX1BJUEVDX0lWQjsKLQkJYnJlYWs7Ci0J ZGVmYXVsdDoKLQkJcmV0dXJuOyAvKiBiYWQgcGlwZSAqLwotCX0KLQotCXJldCA9IHNhbmR5YnJp ZGdlX2NvbXB1dGVfc3ByaXRlX3dtKGRldiwgcGlwZSwgc3ByaXRlX3dpZHRoLCBwaXhlbF9zaXpl LAotCQkJCQkgICAgJnNhbmR5YnJpZGdlX2Rpc3BsYXlfd21faW5mbywKLQkJCQkJICAgIGxhdGVu Y3ksICZzcHJpdGVfd20pOwotCWlmICghcmV0KSB7Ci0JCURSTV9ERUJVR19LTVMoImZhaWxlZCB0 byBjb21wdXRlIHNwcml0ZSB3bSBmb3IgcGlwZSAlY1xuIiwKLQkJCSAgICAgIHBpcGVfbmFtZShw aXBlKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQl2YWwgPSBJOTE1X1JFQUQocmVnKTsKLQl2YWwgJj0g fldNMF9QSVBFX1NQUklURV9NQVNLOwotCUk5MTVfV1JJVEUocmVnLCB2YWwgfCAoc3ByaXRlX3dt IDw8IFdNMF9QSVBFX1NQUklURV9TSElGVCkpOwotCURSTV9ERUJVR19LTVMoInNwcml0ZSB3YXRl cm1hcmtzIEZvciBwaXBlICVjIC0gJWRcbiIsIHBpcGVfbmFtZShwaXBlKSwgc3ByaXRlX3dtKTsK LQotCi0JcmV0ID0gc2FuZHlicmlkZ2VfY29tcHV0ZV9zcHJpdGVfc3J3bShkZXYsIHBpcGUsIHNw cml0ZV93aWR0aCwKLQkJCQkJICAgICAgcGl4ZWxfc2l6ZSwKLQkJCQkJICAgICAgJnNhbmR5YnJp ZGdlX2Rpc3BsYXlfc3J3bV9pbmZvLAotCQkJCQkgICAgICBkZXZfcHJpdi0+d20uc3ByX2xhdGVu Y3lbMV0gKiA1MDAsCi0JCQkJCSAgICAgICZzcHJpdGVfd20pOwotCWlmICghcmV0KSB7Ci0JCURS TV9ERUJVR19LTVMoImZhaWxlZCB0byBjb21wdXRlIHNwcml0ZSBscDEgd20gb24gcGlwZSAlY1xu IiwKLQkJCSAgICAgIHBpcGVfbmFtZShwaXBlKSk7Ci0JCXJldHVybjsKLQl9Ci0JSTkxNV9XUklU RShXTTFTX0xQX0lMSywgc3ByaXRlX3dtKTsKLQotCS8qIE9ubHkgSVZCIGhhcyB0d28gbW9yZSBM UCB3YXRlcm1hcmtzIGZvciBzcHJpdGUgKi8KLQlpZiAoIUlTX0lWWUJSSURHRShkZXYpKQotCQly ZXR1cm47Ci0KLQlyZXQgPSBzYW5keWJyaWRnZV9jb21wdXRlX3Nwcml0ZV9zcndtKGRldiwgcGlw ZSwgc3ByaXRlX3dpZHRoLAotCQkJCQkgICAgICBwaXhlbF9zaXplLAotCQkJCQkgICAgICAmc2Fu ZHlicmlkZ2VfZGlzcGxheV9zcndtX2luZm8sCi0JCQkJCSAgICAgIGRldl9wcml2LT53bS5zcHJf bGF0ZW5jeVsyXSAqIDUwMCwKLQkJCQkJICAgICAgJnNwcml0ZV93bSk7Ci0JaWYgKCFyZXQpIHsK LQkJRFJNX0RFQlVHX0tNUygiZmFpbGVkIHRvIGNvbXB1dGUgc3ByaXRlIGxwMiB3bSBvbiBwaXBl ICVjXG4iLAotCQkJICAgICAgcGlwZV9uYW1lKHBpcGUpKTsKLQkJcmV0dXJuOwotCX0KLQlJOTE1 X1dSSVRFKFdNMlNfTFBfSVZCLCBzcHJpdGVfd20pOwotCi0JcmV0ID0gc2FuZHlicmlkZ2VfY29t cHV0ZV9zcHJpdGVfc3J3bShkZXYsIHBpcGUsIHNwcml0ZV93aWR0aCwKLQkJCQkJICAgICAgcGl4 ZWxfc2l6ZSwKLQkJCQkJICAgICAgJnNhbmR5YnJpZGdlX2Rpc3BsYXlfc3J3bV9pbmZvLAotCQkJ CQkgICAgICBkZXZfcHJpdi0+d20uc3ByX2xhdGVuY3lbM10gKiA1MDAsCi0JCQkJCSAgICAgICZz cHJpdGVfd20pOwotCWlmICghcmV0KSB7Ci0JCURSTV9ERUJVR19LTVMoImZhaWxlZCB0byBjb21w dXRlIHNwcml0ZSBscDMgd20gb24gcGlwZSAlY1xuIiwKLQkJCSAgICAgIHBpcGVfbmFtZShwaXBl KSk7Ci0JCXJldHVybjsKLQl9Ci0JSTkxNV9XUklURShXTTNTX0xQX0lWQiwgc3ByaXRlX3dtKTsK LX0KLQogc3RhdGljIHZvaWQgaWxrX3BpcGVfd21fZ2V0X2h3X3N0YXRlKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwpAQCAtNjA3 Miw5ICs1NDM0LDExIEBAIHZvaWQgaW50ZWxfaW5pdF9wbShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQogCQlpZiAoSVNfR0VONShkZXYpKSB7CiAJCQlpZiAoZGV2X3ByaXYtPndtLnByaV9sYXRlbmN5 WzFdICYmCiAJCQkgICAgZGV2X3ByaXYtPndtLnNwcl9sYXRlbmN5WzFdICYmCi0JCQkgICAgZGV2 X3ByaXYtPndtLmN1cl9sYXRlbmN5WzFdKQotCQkJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93 bSA9IGlyb25sYWtlX3VwZGF0ZV93bTsKLQkJCWVsc2UgeworCQkJICAgIGRldl9wcml2LT53bS5j dXJfbGF0ZW5jeVsxXSkgeworCQkJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IGhhc3dl bGxfdXBkYXRlX3dtOworCQkJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV9zcHJpdGVfd20gPQor CQkJCQloYXN3ZWxsX3VwZGF0ZV9zcHJpdGVfd207CisJCQl9IGVsc2UgewogCQkJCURSTV9ERUJV R19LTVMoIkZhaWxlZCB0byBnZXQgcHJvcGVyIGxhdGVuY3kuICIKIAkJCQkJICAgICAgIkRpc2Fi bGUgQ3hTUlxuIik7CiAJCQkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gTlVMTDsKQEAg LTYwODQsOCArNTQ0OCw5IEBAIHZvaWQgaW50ZWxfaW5pdF9wbShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQogCQkJaWYgKGRldl9wcml2LT53bS5wcmlfbGF0ZW5jeVswXSAmJgogCQkJICAgIGRldl9w cml2LT53bS5zcHJfbGF0ZW5jeVswXSAmJgogCQkJICAgIGRldl9wcml2LT53bS5jdXJfbGF0ZW5j eVswXSkgewotCQkJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IHNhbmR5YnJpZGdlX3Vw ZGF0ZV93bTsKLQkJCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfc3ByaXRlX3dtID0gc2FuZHli cmlkZ2VfdXBkYXRlX3Nwcml0ZV93bTsKKwkJCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20g PSBoYXN3ZWxsX3VwZGF0ZV93bTsKKwkJCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfc3ByaXRl X3dtID0KKwkJCQkJaGFzd2VsbF91cGRhdGVfc3ByaXRlX3dtOwogCQkJfSBlbHNlIHsKIAkJCQlE Uk1fREVCVUdfS01TKCJGYWlsZWQgdG8gcmVhZCBkaXNwbGF5IHBsYW5lIGxhdGVuY3kuICIKIAkJ CQkJICAgICAgIkRpc2FibGUgQ3hTUlxuIik7CkBAIC02MDk2LDggKzU0NjEsOSBAQCB2b2lkIGlu dGVsX2luaXRfcG0oc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAkJCWlmIChkZXZfcHJpdi0+d20u cHJpX2xhdGVuY3lbMF0gJiYKIAkJCSAgICBkZXZfcHJpdi0+d20uc3ByX2xhdGVuY3lbMF0gJiYK IAkJCSAgICBkZXZfcHJpdi0+d20uY3VyX2xhdGVuY3lbMF0pIHsKLQkJCQlkZXZfcHJpdi0+ZGlz cGxheS51cGRhdGVfd20gPSBpdnlicmlkZ2VfdXBkYXRlX3dtOwotCQkJCWRldl9wcml2LT5kaXNw bGF5LnVwZGF0ZV9zcHJpdGVfd20gPSBzYW5keWJyaWRnZV91cGRhdGVfc3ByaXRlX3dtOworCQkJ CWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IGhhc3dlbGxfdXBkYXRlX3dtOworCQkJCWRl dl9wcml2LT5kaXNwbGF5LnVwZGF0ZV9zcHJpdGVfd20gPQorCQkJCQloYXN3ZWxsX3VwZGF0ZV9z cHJpdGVfd207CiAJCQl9IGVsc2UgewogCQkJCURSTV9ERUJVR19LTVMoIkZhaWxlZCB0byByZWFk IGRpc3BsYXkgcGxhbmUgbGF0ZW5jeS4gIgogCQkJCQkgICAgICAiRGlzYWJsZSBDeFNSXG4iKTsK LS0gCjEuOC4zLjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 Cg==