From mboxrd@z Thu Jan 1 00:00:00 1970 From: ville.syrjala@linux.intel.com Subject: [PATCH 07/18] drm/i915: Compute vlv/chv wms the atomic way Date: Thu, 16 Feb 2017 20:07:40 +0200 Message-ID: <20170216180751.3097-8-ville.syrjala@linux.intel.com> References: <20170216180751.3097-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 mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 95D906EBFF for ; Thu, 16 Feb 2017 18:08:14 +0000 (UTC) In-Reply-To: <20170216180751.3097-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 RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KClN0 YXJ0IGNvbXB1dGluZyB0aGUgdmx2L2NodiB3YXRlcm1hcmtzIHRoZSBhdG9taWMgd2F5LCBmcm9t IHRoZQouY29tcHV0ZV9waXBlX3dtKCkgaG9vay4gV2UnbGwgcmVjb21wdXRlIHRoZSBhY3R1YWwg d2F0ZXJtYXJrcwpmb3Igb25seSBwbGFuZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUgc3RhdGUsIHRo ZSBvdGhlciBwbGFuZXMgd2lsbAprZWVwIHRoZWlyIHdhdGVybWFyayBmcm9tIHRoZSBsYXN0IHRp bWUgaXQgd2FzIGNvbXB1dGVkLgoKQW5kIHRoZSBhY3R1YWwgd2F0ZXJtYXJrIHByb2dyYW1taW5n IHdpbGwgaGFwcGVuIGZyb20gdGhlCi5pbml0aWFsX3dhdGVybWFya3MoKSBob29rLiBGb3Igbm93 IHdlJ2xsIGp1c3QgY29tcHV0ZSB0aGUKb3B0aW1hbCB3YXRlcm1hcmtzLCBhbmQgd2UnbGwgaG9v ayB1cCB0aGUgaW50ZXJtZWRpYXRlCndhdGVybWFya3MgcHJvcGVybHkgbGF0ZXIuCgpUaGUgRFNQ QVJCIHJlZ2lzdGVycyByZXNwb25zaWJsZSBmb3IgdGhlIEZJRk8gcGFyaXRpb25pbmcgYXJlCmRv dWJsZSBidWZmZXJlZCwgc28gdGhleSB3aWxsIGJlIHByb2dyYW1taW5nIGZyb20KaW50ZWxfYmVn aW5fY3J0Y19jb21taXQoKS4KClNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUu c3lyamFsYUBsaW51eC5pbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaCAgICAgIHwgICA4ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyB8 ICAyMSArKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oICAgICB8ICAgMiAtCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jICAgICAgfCAzMjcgKysrKysrKysrKysrKysr KysrKysrKystLS0tLS0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgMjM4IGluc2VydGlvbnMoKyks IDEyMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCA3NDk1YTE2Yjg2 OWEuLmU3MzE3ODI3Y2YwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC01MDAsNiArNTAw LDE0IEBAIHN0cnVjdCBpOTE1X2hvdHBsdWcgewogCWZvciAoKGRvbWFpbikgPSAwOyAoZG9tYWlu KSA8IFBPV0VSX0RPTUFJTl9OVU07IChkb21haW4pKyspCVwKIAkJZm9yX2VhY2hfaWYgKEJJVF9V TEwoZG9tYWluKSAmIChtYXNrKSkKIAorI2RlZmluZSBmb3JfZWFjaF9pbnRlbF9wbGFuZV9pbl9z dGF0ZShfX3N0YXRlLCBwbGFuZSwgcGxhbmVfc3RhdGUsIF9faSkgXAorCWZvciAoKF9faSkgPSAw OyBcCisJICAgICAoX19pKSA8IChfX3N0YXRlKS0+YmFzZS5kZXYtPm1vZGVfY29uZmlnLm51bV90 b3RhbF9wbGFuZSAmJiBcCisJCSAgICAgKChwbGFuZSkgPSB0b19pbnRlbF9wbGFuZSgoX19zdGF0 ZSktPmJhc2UucGxhbmVzW19faV0ucHRyKSwgXAorCQkgICAgICAocGxhbmVfc3RhdGUpID0gdG9f aW50ZWxfcGxhbmVfc3RhdGUoKF9fc3RhdGUpLT5iYXNlLnBsYW5lc1tfX2ldLnN0YXRlKSwgMSk7 IFwKKwkgICAgIChfX2kpKyspIFwKKwkJZm9yX2VhY2hfaWYgKHBsYW5lX3N0YXRlKQorCiBzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZTsKIHN0cnVjdCBpOTE1X21tX3N0cnVjdDsKIHN0cnVjdCBpOTE1 X21tdV9vYmplY3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNw bGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggMGNjYzA0 NjA3YjhhLi43NzE2MGVhYTIyOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMK QEAgLTU3NjMsNiArNTc2Myw4IEBAIHN0YXRpYyB2b2lkIG1vZGVzZXRfcHV0X3Bvd2VyX2RvbWFp bnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogc3RhdGljIHZvaWQgdmFsbGV5 dmlld19jcnRjX2VuYWJsZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcsCiAJ CQkJICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSkKIHsKKwlzdHJ1Y3QgaW50 ZWxfYXRvbWljX3N0YXRlICpvbGRfaW50ZWxfc3RhdGUgPQorCQl0b19pbnRlbF9hdG9taWNfc3Rh dGUob2xkX3N0YXRlKTsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBwaXBlX2NvbmZpZy0+YmFz ZS5jcnRjOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwpAQCAtNTgwNyw3ICs1ODA5 LDggQEAgc3RhdGljIHZvaWQgdmFsbGV5dmlld19jcnRjX2VuYWJsZShzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqcGlwZV9jb25maWcsCiAKIAlpbnRlbF9jb2xvcl9sb2FkX2x1dHMoJnBpcGVfY29u ZmlnLT5iYXNlKTsKIAotCWludGVsX3VwZGF0ZV93YXRlcm1hcmtzKGludGVsX2NydGMpOworCWRl dl9wcml2LT5kaXNwbGF5LmluaXRpYWxfd2F0ZXJtYXJrcyhvbGRfaW50ZWxfc3RhdGUsCisJCQkJ CSAgICAgcGlwZV9jb25maWcpOwogCWludGVsX2VuYWJsZV9waXBlKGludGVsX2NydGMpOwogCiAJ YXNzZXJ0X3ZibGFua19kaXNhYmxlZChjcnRjKTsKQEAgLTU5MjQsNiArNTkyNyw5IEBAIHN0YXRp YyB2b2lkIGk5eHhfY3J0Y19kaXNhYmxlKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0 Y19zdGF0ZSwKIAogCWlmICghSVNfR0VOMihkZXZfcHJpdikpCiAJCWludGVsX3NldF9jcHVfZmlm b191bmRlcnJ1bl9yZXBvcnRpbmcoZGV2X3ByaXYsIHBpcGUsIGZhbHNlKTsKKworCWlmICghZGV2 X3ByaXYtPmRpc3BsYXkuaW5pdGlhbF93YXRlcm1hcmtzKQorCQlpbnRlbF91cGRhdGVfd2F0ZXJt YXJrcyhpbnRlbF9jcnRjKTsKIH0KIAogc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19kaXNhYmxlX25v YXRvbWljKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKQEAgLTExMzYyLDEwICsxMTM2OCwxMyBAQCBz dGF0aWMgYm9vbCBjaGVja19kaWdpdGFsX3BvcnRfY29uZmxpY3RzKHN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSkKIHN0YXRpYyB2b2lkCiBjbGVhcl9pbnRlbF9jcnRjX3N0YXRlKHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQogeworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9CisJCXRvX2k5MTUoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjLT5kZXYpOwog CXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSB0bXBfc3RhdGU7CiAJc3RydWN0IGludGVsX2NydGNfc2Nh bGVyX3N0YXRlIHNjYWxlcl9zdGF0ZTsKIAlzdHJ1Y3QgaW50ZWxfZHBsbF9od19zdGF0ZSBkcGxs X2h3X3N0YXRlOwogCXN0cnVjdCBpbnRlbF9zaGFyZWRfZHBsbCAqc2hhcmVkX2RwbGw7CisJc3Ry dWN0IGludGVsX2NydGNfd21fc3RhdGUgd21fc3RhdGU7CiAJYm9vbCBmb3JjZV90aHJ1OwogCiAJ LyogRklYTUU6IGJlZm9yZSB0aGUgc3dpdGNoIHRvIGF0b21pYyBzdGFydGVkLCBhIG5ldyBwaXBl X2NvbmZpZyB3YXMKQEAgLTExMzc4LDYgKzExMzg3LDggQEAgY2xlYXJfaW50ZWxfY3J0Y19zdGF0 ZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKIAlzaGFyZWRfZHBsbCA9IGNy dGNfc3RhdGUtPnNoYXJlZF9kcGxsOwogCWRwbGxfaHdfc3RhdGUgPSBjcnRjX3N0YXRlLT5kcGxs X2h3X3N0YXRlOwogCWZvcmNlX3RocnUgPSBjcnRjX3N0YXRlLT5wY2hfcGZpdC5mb3JjZV90aHJ1 OworCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2 KSkKKwkJd21fc3RhdGUgPSBjcnRjX3N0YXRlLT53bTsKIAogCW1lbXNldChjcnRjX3N0YXRlLCAw LCBzaXplb2YgKmNydGNfc3RhdGUpOwogCkBAIC0xMTM4Niw2ICsxMTM5Nyw4IEBAIGNsZWFyX2lu dGVsX2NydGNfc3RhdGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCiAJY3J0 Y19zdGF0ZS0+c2hhcmVkX2RwbGwgPSBzaGFyZWRfZHBsbDsKIAljcnRjX3N0YXRlLT5kcGxsX2h3 X3N0YXRlID0gZHBsbF9od19zdGF0ZTsKIAljcnRjX3N0YXRlLT5wY2hfcGZpdC5mb3JjZV90aHJ1 ID0gZm9yY2VfdGhydTsKKwlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZ VklFVyhkZXZfcHJpdikpCisJCWNydGNfc3RhdGUtPndtID0gd21fc3RhdGU7CiB9CiAKIHN0YXRp YyBpbnQKQEAgLTEyODk4LDEyICsxMjkxMSwxMiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9hdG9taWNf Y29tbWl0X3RhaWwoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQogCQkJCS8qCiAJCQkJ ICogTWFrZSBzdXJlIHdlIGRvbid0IGNhbGwgaW5pdGlhbF93YXRlcm1hcmtzCiAJCQkJICogZm9y IElMSy1zdHlsZSB3YXRlcm1hcmsgdXBkYXRlcy4KKwkJCQkgKgorCQkJCSAqIE5vIGNsdWUgd2hh dCB0aGlzIGlzIHN1cHBvc2VkIHRvIGFjaGlldmUuCiAJCQkJICovCi0JCQkJaWYgKGRldl9wcml2 LT5kaXNwbGF5LmF0b21pY191cGRhdGVfd2F0ZXJtYXJrcykKKwkJCQlpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSA5KQogCQkJCQlkZXZfcHJpdi0+ZGlzcGxheS5pbml0aWFsX3dhdGVybWFya3Mo aW50ZWxfc3RhdGUsCiAJCQkJCQkJCQkgICAgIHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+c3Rh dGUpKTsKLQkJCQllbHNlCi0JCQkJCWludGVsX3VwZGF0ZV93YXRlcm1hcmtzKGludGVsX2NydGMp OwogCQkJfQogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAppbmRleCBhZGE1ZmQzZmRl YWIuLjlkYjI1NDhjY2Y2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTQ5OCw5ICs0 OTgsNyBAQCBlbnVtIHZsdl93bV9sZXZlbCB7CiBzdHJ1Y3Qgdmx2X3dtX3N0YXRlIHsKIAlzdHJ1 Y3Qgdmx2X3BpcGVfd20gd21bTlVNX1ZMVl9XTV9MRVZFTFNdOwogCXN0cnVjdCB2bHZfc3Jfd20g c3JbTlVNX1ZMVl9XTV9MRVZFTFNdOwotCXVpbnQ4X3QgbnVtX2FjdGl2ZV9wbGFuZXM7CiAJdWlu dDhfdCBudW1fbGV2ZWxzOwotCXVpbnQ4X3QgbGV2ZWw7CiAJYm9vbCBjeHNyOwogfTsKIApkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3BtLmMKaW5kZXggYWQwMmVkYjExY2EyLi5jYjQwZTU4MjZhNzEgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcG0uYwpAQCAtMTA4NCw2ICsxMDg0LDI4IEBAIHN0YXRpYyBpbnQgdmx2 X2NvbXB1dGVfZmlmbyhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKIAlyZXR1 cm4gMDsKIH0KIAorc3RhdGljIGludCB2bHZfbnVtX3dtX2xldmVscyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJcmV0dXJuIGRldl9wcml2LT53bS5tYXhfbGV2ZWwgKyAx OworfQorCisvKiBtYXJrIGFsbCBsZXZlbHMgc3RhcnRpbmcgZnJvbSAnbGV2ZWwnIGFzIGludmFs aWQgKi8KK3N0YXRpYyB2b2lkIHZsdl9pbnZhbGlkYXRlX3dtcyhzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0YywKKwkJCSAgICAgICBzdHJ1Y3Qgdmx2X3dtX3N0YXRlICp3bV9zdGF0ZSwgaW50IGxldmVs KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+ YmFzZS5kZXYpOworCisJZm9yICg7IGxldmVsIDwgdmx2X251bV93bV9sZXZlbHMoZGV2X3ByaXYp OyBsZXZlbCsrKSB7CisJCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQ7CisKKwkJZm9yX2VhY2hfcGxh bmVfaWRfb25fY3J0YyhjcnRjLCBwbGFuZV9pZCkKKwkJCXdtX3N0YXRlLT53bVtsZXZlbF0ucGxh bmVbcGxhbmVfaWRdID0gVVNIUlRfTUFYOworCisJCXdtX3N0YXRlLT5zcltsZXZlbF0uY3Vyc29y ID0gVVNIUlRfTUFYOworCQl3bV9zdGF0ZS0+c3JbbGV2ZWxdLnBsYW5lID0gVVNIUlRfTUFYOwor CX0KK30KKwogc3RhdGljIHUxNiB2bHZfaW52ZXJ0X3dtX3ZhbHVlKHUxNiB3bSwgdTE2IGZpZm9f c2l6ZSkKIHsKIAlpZiAod20gPiBmaWZvX3NpemUpCkBAIC0xMDkyLDEwOCArMTExNCwxNjIgQEAg c3RhdGljIHUxNiB2bHZfaW52ZXJ0X3dtX3ZhbHVlKHUxNiB3bSwgdTE2IGZpZm9fc2l6ZSkKIAkJ cmV0dXJuIGZpZm9fc2l6ZSAtIHdtOwogfQogCi1zdGF0aWMgdm9pZCB2bHZfaW52ZXJ0X3dtcyhz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKKy8qIHN0YXJ0aW5nIGZyb20gJ2xl dmVsJyBzZXQgYWxsIGhpZ2hlciBsZXZlbHMgdG8gJ3ZhbHVlJyAqLworc3RhdGljIHZvaWQgdmx2 X3BsYW5lX3dtX3NldChzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAg ICAgaW50IGxldmVsLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkLCB1MTYgdmFsdWUpCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjX3N0YXRlLT5iYXNl LmNydGMtPmRldik7CisJaW50IG51bV9sZXZlbHMgPSB2bHZfbnVtX3dtX2xldmVscyhkZXZfcHJp dik7CisKKwlmb3IgKDsgbGV2ZWwgPCBudW1fbGV2ZWxzOyBsZXZlbCsrKSB7CisJCXN0cnVjdCB2 bHZfcGlwZV93bSAqbm9uaW52ZXJ0ZWQgPQorCQkJJmNydGNfc3RhdGUtPndtLnZsdi5ub25pbnZl cnRlZFtsZXZlbF07CisKKwkJbm9uaW52ZXJ0ZWQtPnBsYW5lW3BsYW5lX2lkXSA9IHZhbHVlOwor CX0KK30KKworc3RhdGljIHZvaWQgdmx2X3BsYW5lX3dtX2NvbXB1dGUoc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkJIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVs X3BsYW5lKHBsYW5lX3N0YXRlLT5iYXNlLnBsYW5lKTsKKwllbnVtIHBsYW5lX2lkIHBsYW5lX2lk ID0gcGxhbmUtPmlkOworCWludCBudW1fbGV2ZWxzID0gdmx2X251bV93bV9sZXZlbHModG9faTkx NShwbGFuZS0+YmFzZS5kZXYpKTsKKwlpbnQgbGV2ZWw7CisKKwlpZiAoIXBsYW5lX3N0YXRlLT5i YXNlLnZpc2libGUpIHsKKwkJdmx2X3BsYW5lX3dtX3NldChjcnRjX3N0YXRlLCAwLCBwbGFuZV9p ZCwgMCk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPCBudW1fbGV2 ZWxzOyBsZXZlbCsrKSB7CisJCXN0cnVjdCB2bHZfcGlwZV93bSAqbm9uaW52ZXJ0ZWQgPQorCQkJ JmNydGNfc3RhdGUtPndtLnZsdi5ub25pbnZlcnRlZFtsZXZlbF07CisJCWludCB3bSA9IHZsdl9j b21wdXRlX3dtX2xldmVsKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLCBsZXZlbCk7CisJCWludCBt YXhfd20gPSBwbGFuZV9pZCA9PSBQTEFORV9DVVJTT1IgPyA2MyA6IDUxMTsKKworCQkvKiBGSVhN RSBqdXN0IGJhaWwgKi8KKwkJaWYgKFdBUk5fT04obGV2ZWwgPT0gMCAmJiB3bSA+IG1heF93bSkp CisJCQl3bSA9IG1heF93bTsKKworCQlpZiAod20gPiBtYXhfd20pCisJCQlicmVhazsKKworCQlu b25pbnZlcnRlZC0+cGxhbmVbcGxhbmVfaWRdID0gd207CisJfQorCisJLyogbWFyayBhbGwgaGln aGVyIGxldmVscyBhcyBpbnZhbGlkICovCisJdmx2X3BsYW5lX3dtX3NldChjcnRjX3N0YXRlLCBs ZXZlbCwgcGxhbmVfaWQsIFVTSFJUX01BWCk7CisKKwlEUk1fREVCVUdfS01TKCIlcyB3bXM6IFsw XT0lZCxbMV09JWQsWzJdPSVkXG4iLAorCQkgICAgICBwbGFuZS0+YmFzZS5uYW1lLAorCQkgICAg ICBjcnRjX3N0YXRlLT53bS52bHYubm9uaW52ZXJ0ZWRbVkxWX1dNX0xFVkVMX1BNMl0ucGxhbmVb cGxhbmVfaWRdLAorCQkgICAgICBjcnRjX3N0YXRlLT53bS52bHYubm9uaW52ZXJ0ZWRbVkxWX1dN X0xFVkVMX1BNNV0ucGxhbmVbcGxhbmVfaWRdLAorCQkgICAgICBjcnRjX3N0YXRlLT53bS52bHYu bm9uaW52ZXJ0ZWRbVkxWX1dNX0xFVkVMX0REUl9EVkZTXS5wbGFuZVtwbGFuZV9pZF0pOworfQor CitzdGF0aWMgYm9vbCB2bHZfcGxhbmVfd21faXNfdmFsaWQoY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkJICBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkLCBpbnQg bGV2ZWwpCit7CisJY29uc3Qgc3RydWN0IHZsdl9waXBlX3dtICpub25pbnZlcnRlZCA9CisJCSZj cnRjX3N0YXRlLT53bS52bHYubm9uaW52ZXJ0ZWRbbGV2ZWxdOworCWNvbnN0IHN0cnVjdCB2bHZf Zmlmb19zdGF0ZSAqZmlmb19zdGF0ZSA9CisJCSZjcnRjX3N0YXRlLT53bS52bHYuZmlmb19zdGF0 ZTsKKworCXJldHVybiBub25pbnZlcnRlZC0+cGxhbmVbcGxhbmVfaWRdIDw9IGZpZm9fc3RhdGUt PnBsYW5lW3BsYW5lX2lkXTsKK30KKworc3RhdGljIGJvb2wgdmx2X2NydGNfd21faXNfdmFsaWQo Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsIGludCBsZXZlbCkKK3sK KwlyZXR1cm4gdmx2X3BsYW5lX3dtX2lzX3ZhbGlkKGNydGNfc3RhdGUsIFBMQU5FX1BSSU1BUlks IGxldmVsKSAmJgorCQl2bHZfcGxhbmVfd21faXNfdmFsaWQoY3J0Y19zdGF0ZSwgUExBTkVfU1BS SVRFMCwgbGV2ZWwpICYmCisJCXZsdl9wbGFuZV93bV9pc192YWxpZChjcnRjX3N0YXRlLCBQTEFO RV9TUFJJVEUxLCBsZXZlbCkgJiYKKwkJdmx2X3BsYW5lX3dtX2lzX3ZhbGlkKGNydGNfc3RhdGUs IFBMQU5FX0NVUlNPUiwgbGV2ZWwpOworfQorCitzdGF0aWMgaW50IHZsdl9jb21wdXRlX3BpcGVf d20oc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCiB7CiAJc3RydWN0IGludGVs X2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPmJhc2UuY3J0Yyk7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7 CisJc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUgPQorCQl0b19pbnRlbF9hdG9taWNf c3RhdGUoY3J0Y19zdGF0ZS0+YmFzZS5zdGF0ZSk7CiAJc3RydWN0IHZsdl93bV9zdGF0ZSAqd21f c3RhdGUgPSAmY3J0Y19zdGF0ZS0+d20udmx2Lm9wdGltYWw7CiAJY29uc3Qgc3RydWN0IHZsdl9m aWZvX3N0YXRlICpmaWZvX3N0YXRlID0KIAkJJmNydGNfc3RhdGUtPndtLnZsdi5maWZvX3N0YXRl OwotCWludCBsZXZlbDsKKwlpbnQgbnVtX2FjdGl2ZV9wbGFuZXMgPSBod2VpZ2h0MzIoY3J0Y19z dGF0ZS0+YWN0aXZlX3BsYW5lcyAmCisJCQkJCSAgfkJJVChQTEFORV9DVVJTT1IpKTsKKwlzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOworCXN0cnVjdCBpbnRlbF9wbGFuZSAq cGxhbmU7CisJZW51bSBwbGFuZV9pZCBwbGFuZV9pZDsKKwlpbnQgbGV2ZWwsIHJldCwgaTsKKwor CWZvcl9lYWNoX2ludGVsX3BsYW5lX2luX3N0YXRlKHN0YXRlLCBwbGFuZSwgcGxhbmVfc3RhdGUs IGkpIHsKKwkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUg PQorCQkJdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmUtPmJhc2Uuc3RhdGUpOworCisJCWlmIChw bGFuZV9zdGF0ZS0+YmFzZS5jcnRjICE9ICZjcnRjLT5iYXNlICYmCisJCSAgICBvbGRfcGxhbmVf c3RhdGUtPmJhc2UuY3J0YyAhPSAmY3J0Yy0+YmFzZSkKKwkJCWNvbnRpbnVlOworCisJCXZsdl9w bGFuZV93bV9jb21wdXRlKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKKwl9CisKKwkvKiBpbml0 aWFsbHkgYWxsb3cgYWxsIGxldmVscyAqLworCXdtX3N0YXRlLT5udW1fbGV2ZWxzID0gdmx2X251 bV93bV9sZXZlbHMoZGV2X3ByaXYpOworCS8qCisJICogTm90ZSB0aGF0IGVuYWJsaW5nIGN4c3Ig d2l0aCBubyBwcmltYXJ5L3Nwcml0ZSBwbGFuZXMKKwkgKiBlbmFibGVkIGNhbiB3ZWRnZSB0aGUg cGlwZS4gSGVuY2Ugd2Ugb25seSBhbGxvdyBjeHNyCisJICogd2l0aCBleGFjdGx5IG9uZSBlbmFi bGVkIHByaW1hcnkvc3ByaXRlIHBsYW5lLgorCSAqLworCXdtX3N0YXRlLT5jeHNyID0gY3J0Yy0+ cGlwZSAhPSBQSVBFX0MgJiYKKwkJY3J0Yy0+d20uY3hzcl9hbGxvd2VkICYmIG51bV9hY3RpdmVf cGxhbmVzID09IDE7CisKKwlyZXQgPSB2bHZfY29tcHV0ZV9maWZvKGNydGNfc3RhdGUpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPCB3bV9zdGF0 ZS0+bnVtX2xldmVsczsgbGV2ZWwrKykgewotCQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKLQkJY29uc3QgaW50IHNyX2ZpZm9fc2l6 ZSA9Ci0JCQlJTlRFTF9JTkZPKGRldl9wcml2KS0+bnVtX3BpcGVzICogNTEyIC0gMTsKLQkJZW51 bSBwbGFuZV9pZCBwbGFuZV9pZDsKKwkJY29uc3Qgc3RydWN0IHZsdl9waXBlX3dtICpub25pbnZl cnRlZCA9CisJCQkmY3J0Y19zdGF0ZS0+d20udmx2Lm5vbmludmVydGVkW2xldmVsXTsKKwkJY29u c3QgaW50IHNyX2ZpZm9fc2l6ZSA9IElOVEVMX0lORk8oZGV2X3ByaXYpLT5udW1fcGlwZXMgKiA1 MTIgLSAxOworCisJCWlmICghdmx2X2NydGNfd21faXNfdmFsaWQoY3J0Y19zdGF0ZSwgbGV2ZWwp KQorCQkJYnJlYWs7CisKKwkJZm9yX2VhY2hfcGxhbmVfaWRfb25fY3J0YyhjcnRjLCBwbGFuZV9p ZCkgeworCQkJd21fc3RhdGUtPndtW2xldmVsXS5wbGFuZVtwbGFuZV9pZF0gPQorCQkJCXZsdl9p bnZlcnRfd21fdmFsdWUobm9uaW52ZXJ0ZWQtPnBsYW5lW3BsYW5lX2lkXSwKKwkJCQkJCSAgICBm aWZvX3N0YXRlLT5wbGFuZVtwbGFuZV9pZF0pOworCQl9CiAKIAkJd21fc3RhdGUtPnNyW2xldmVs XS5wbGFuZSA9Ci0JCQl2bHZfaW52ZXJ0X3dtX3ZhbHVlKHdtX3N0YXRlLT5zcltsZXZlbF0ucGxh bmUsCisJCQl2bHZfaW52ZXJ0X3dtX3ZhbHVlKG1heDMobm9uaW52ZXJ0ZWQtPnBsYW5lW1BMQU5F X1BSSU1BUlldLAorCQkJCQkJIG5vbmludmVydGVkLT5wbGFuZVtQTEFORV9TUFJJVEUwXSwKKwkJ CQkJCSBub25pbnZlcnRlZC0+cGxhbmVbUExBTkVfU1BSSVRFMV0pLAogCQkJCQkgICAgc3JfZmlm b19zaXplKTsKKwogCQl3bV9zdGF0ZS0+c3JbbGV2ZWxdLmN1cnNvciA9Ci0JCQl2bHZfaW52ZXJ0 X3dtX3ZhbHVlKHdtX3N0YXRlLT5zcltsZXZlbF0uY3Vyc29yLAorCQkJdmx2X2ludmVydF93bV92 YWx1ZShub25pbnZlcnRlZC0+cGxhbmVbUExBTkVfQ1VSU09SXSwKIAkJCQkJICAgIDYzKTsKLQot CQlmb3JfZWFjaF9wbGFuZV9pZF9vbl9jcnRjKGNydGMsIHBsYW5lX2lkKSB7Ci0JCQl3bV9zdGF0 ZS0+d21bbGV2ZWxdLnBsYW5lW3BsYW5lX2lkXSA9Ci0JCQkJdmx2X2ludmVydF93bV92YWx1ZSh3 bV9zdGF0ZS0+d21bbGV2ZWxdLnBsYW5lW3BsYW5lX2lkXSwKLQkJCQkJCSAgICBmaWZvX3N0YXRl LT5wbGFuZVtwbGFuZV9pZF0pOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCB2bHZfY29tcHV0 ZV93bShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgaW50 ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjKTsKLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2 KTsKLQlzdHJ1Y3Qgdmx2X3dtX3N0YXRlICp3bV9zdGF0ZSA9ICZjcnRjX3N0YXRlLT53bS52bHYu b3B0aW1hbDsKLQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lOwotCWludCBsZXZlbDsKLQotCW1l bXNldCh3bV9zdGF0ZSwgMCwgc2l6ZW9mKCp3bV9zdGF0ZSkpOwotCW1lbXNldChjcnRjX3N0YXRl LT53bS52bHYubm9uaW52ZXJ0ZWQsIDAsCi0JICAgICAgIHNpemVvZihjcnRjX3N0YXRlLT53bS52 bHYubm9uaW52ZXJ0ZWQpKTsKLQotCXdtX3N0YXRlLT5jeHNyID0gY3J0Yy0+cGlwZSAhPSBQSVBF X0MgJiYgY3J0Yy0+d20uY3hzcl9hbGxvd2VkOwotCXdtX3N0YXRlLT5udW1fbGV2ZWxzID0gZGV2 X3ByaXYtPndtLm1heF9sZXZlbCArIDE7Ci0KLQl3bV9zdGF0ZS0+bnVtX2FjdGl2ZV9wbGFuZXMg PSAwOwotCi0JaWYgKHdtX3N0YXRlLT5udW1fYWN0aXZlX3BsYW5lcyAhPSAxKQotCQl3bV9zdGF0 ZS0+Y3hzciA9IGZhbHNlOwotCi0JZm9yX2VhY2hfaW50ZWxfcGxhbmVfb25fY3J0YygmZGV2X3By aXYtPmRybSwgY3J0YywgcGxhbmUpIHsKLQkJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpzdGF0 ZSA9Ci0JCQl0b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+YmFzZS5zdGF0ZSk7Ci0KLQkJaWYg KCFzdGF0ZS0+YmFzZS52aXNpYmxlKQotCQkJY29udGludWU7Ci0KLQkJZm9yIChsZXZlbCA9IDA7 IGxldmVsIDwgd21fc3RhdGUtPm51bV9sZXZlbHM7IGxldmVsKyspIHsKLQkJCXN0cnVjdCB2bHZf cGlwZV93bSAqbm9uaW52ZXJ0ZWQgPQotCQkJCSZjcnRjX3N0YXRlLT53bS52bHYubm9uaW52ZXJ0 ZWRbbGV2ZWxdOwotCQkJaW50IHdtID0gdmx2X2NvbXB1dGVfd21fbGV2ZWwoY3J0Y19zdGF0ZSwg c3RhdGUsIGxldmVsKTsKLQkJCWludCBtYXhfd20gPSBwbGFuZS0+aWQgPT0gUExBTkVfQ1VSU09S ID8gNjMgOiA1MTE7Ci0KLQkJCS8qIGhhY2sgKi8KLQkJCWlmIChXQVJOX09OKGxldmVsID09IDAg JiYgd20gPiBtYXhfd20pKQotCQkJCXdtID0gbWF4X3dtOwotCi0JCQlpZiAod20gPiBtYXhfd20p Ci0JCQkJYnJlYWs7Ci0KLQkJCW5vbmludmVydGVkLT5wbGFuZVtwbGFuZS0+aWRdID0gd207Ci0J CX0KLQotCQl3bV9zdGF0ZS0+bnVtX2xldmVscyA9IGxldmVsOwogCX0KIAotCXZsdl9jb21wdXRl X2ZpZm8oY3J0Y19zdGF0ZSk7CisJaWYgKGxldmVsID09IDApCisJCXJldHVybiAtRUlOVkFMOwog Ci0JZm9yIChsZXZlbCA9IDA7IGxldmVsIDwgd21fc3RhdGUtPm51bV9sZXZlbHM7IGxldmVsKysp IHsKLQkJc3RydWN0IHZsdl9waXBlX3dtICpub25pbnZlcnRlZCA9Ci0JCQkmY3J0Y19zdGF0ZS0+ d20udmx2Lm5vbmludmVydGVkW2xldmVsXTsKKwkvKiBsaW1pdCB0byBvbmx5IGxldmVscyB3ZSBj YW4gYWN0dWFsbHkgaGFuZGxlICovCisJd21fc3RhdGUtPm51bV9sZXZlbHMgPSBsZXZlbDsKIAot CQl3bV9zdGF0ZS0+d21bbGV2ZWxdID0gKm5vbmludmVydGVkOwotCi0JCXdtX3N0YXRlLT5zclts ZXZlbF0ucGxhbmUgPSBtYXgzKG5vbmludmVydGVkLT5wbGFuZVtQTEFORV9QUklNQVJZXSwKLQkJ CQkJCSBub25pbnZlcnRlZC0+cGxhbmVbUExBTkVfU1BSSVRFMF0sCi0JCQkJCQkgbm9uaW52ZXJ0 ZWQtPnBsYW5lW1BMQU5FX1NQUklURTFdKTsKLQkJd21fc3RhdGUtPnNyW2xldmVsXS5jdXJzb3Ig PSBub25pbnZlcnRlZC0+cGxhbmVbUExBTkVfQ1VSU09SXTsKLQl9Ci0KLQkvKiBjbGVhciBhbnkg KHBhcnRpYWxseSkgZmlsbGVkIGludmFsaWQgbGV2ZWxzICovCi0JZm9yIChsZXZlbCA9IHdtX3N0 YXRlLT5udW1fbGV2ZWxzOyBsZXZlbCA8IGRldl9wcml2LT53bS5tYXhfbGV2ZWwgKyAxOyBsZXZl bCsrKSB7Ci0JCW1lbXNldCgmd21fc3RhdGUtPndtW2xldmVsXSwgMCwgc2l6ZW9mKHdtX3N0YXRl LT53bVtsZXZlbF0pKTsKLQkJbWVtc2V0KCZ3bV9zdGF0ZS0+c3JbbGV2ZWxdLCAwLCBzaXplb2Yo d21fc3RhdGUtPnNyW2xldmVsXSkpOwotCX0KKwkvKiBpbnZhbGlkYXRlIHRoZSBoaWdoZXIgbGV2 ZWxzICovCisJdmx2X2ludmFsaWRhdGVfd21zKGNydGMsIHdtX3N0YXRlLCBsZXZlbCk7CiAKLQl2 bHZfaW52ZXJ0X3dtcyhjcnRjX3N0YXRlKTsKKwlyZXR1cm4gMDsKIH0KIAogI2RlZmluZSBWTFZf RklGTyhwbGFuZSwgdmFsdWUpIFwKIAkoKCh2YWx1ZSkgPDwgRFNQQVJCXyAjIyBwbGFuZSAjIyBf U0hJRlRfVkxWKSAmIERTUEFSQl8gIyMgcGxhbmUgIyMgX01BU0tfVkxWKQogCi1zdGF0aWMgdm9p ZCB2bHZfcGlwZV9zZXRfZmlmb19zaXplKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlKQorc3RhdGljIHZvaWQgdmx2X2F0b21pY191cGRhdGVfZmlmbyhzdHJ1Y3QgaW50 ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCQkgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSkKIHsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMo Y3J0Y19zdGF0ZS0+YmFzZS5jcnRjKTsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKQEAgLTEyMDgsMTAgKzEyODQsNiBAQCBzdGF0 aWMgdm9pZCB2bHZfcGlwZV9zZXRfZmlmb19zaXplKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlKQogCVdBUk5fT04oZmlmb19zdGF0ZS0+cGxhbmVbUExBTkVfQ1VSU09S XSAhPSA2Myk7CiAJV0FSTl9PTihmaWZvX3NpemUgIT0gNTExKTsKIAotCURSTV9ERUJVR19LTVMo IlBpcGUgJWMgRklGTyBzcGxpdCAlZCAvICVkIC8gJWRcbiIsCi0JCSAgICAgIHBpcGVfbmFtZShj cnRjLT5waXBlKSwgc3ByaXRlMF9zdGFydCwKLQkJICAgICAgc3ByaXRlMV9zdGFydCwgZmlmb19z aXplKTsKLQogCXNwaW5fbG9jaygmZGV2X3ByaXYtPndtLmRzcGFyYl9sb2NrKTsKIAogCXN3aXRj aCAoY3J0Yy0+cGlwZSkgewpAQCAtMTMxMCwxMSArMTM4Miw4IEBAIHN0YXRpYyB2b2lkIHZsdl9t ZXJnZV93bShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCWNvbnN0IHN0cnVj dCB2bHZfd21fc3RhdGUgKndtX3N0YXRlID0gJmNydGMtPndtLmFjdGl2ZS52bHY7CiAJCWVudW0g cGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKIAotCQlpZiAoIWNydGMtPmFjdGl2ZSkKLQkJCWNvbnRp bnVlOwotCiAJCXdtLT5waXBlW3BpcGVdID0gd21fc3RhdGUtPndtW3dtLT5sZXZlbF07Ci0JCWlm ICh3bS0+Y3hzcikKKwkJaWYgKGNydGMtPmFjdGl2ZSAmJiB3bS0+Y3hzcikKIAkJCXdtLT5zciA9 IHdtX3N0YXRlLT5zclt3bS0+bGV2ZWxdOwogCiAJCXdtLT5kZGxbcGlwZV0ucGxhbmVbUExBTkVf UFJJTUFSWV0gPSBERExfUFJFQ0lTSU9OX0hJR0ggfCAyOwpAQCAtMTMzNCwyNCArMTQwMywxNSBA QCBzdGF0aWMgYm9vbCBpc19lbmFibGluZyhpbnQgb2xkLCBpbnQgbmV3LCBpbnQgdGhyZXNob2xk KQogCXJldHVybiBvbGQgPCB0aHJlc2hvbGQgJiYgbmV3ID49IHRocmVzaG9sZDsKIH0KIAotc3Rh dGljIHZvaWQgdmx2X3VwZGF0ZV93bShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKK3N0YXRpYyB2 b2lkIHZsdl9wcm9ncmFtX3dhdGVybWFya3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0 Yy0+YmFzZS5kZXYpOwotCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlID0KLQkJ dG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5iYXNlLnN0YXRlKTsKLQllbnVtIHBpcGUgcGlwZSA9 IGNydGMtPnBpcGU7CiAJc3RydWN0IHZsdl93bV92YWx1ZXMgKm9sZF93bSA9ICZkZXZfcHJpdi0+ d20udmx2OwogCXN0cnVjdCB2bHZfd21fdmFsdWVzIG5ld193bSA9IHt9OwogCi0Jdmx2X2NvbXB1 dGVfd20oY3J0Y19zdGF0ZSk7Ci0JY3J0Yy0+d20uYWN0aXZlLnZsdiA9IGNydGNfc3RhdGUtPndt LnZsdi5vcHRpbWFsOwogCXZsdl9tZXJnZV93bShkZXZfcHJpdiwgJm5ld193bSk7CiAKLQlpZiAo bWVtY21wKG9sZF93bSwgJm5ld193bSwgc2l6ZW9mKG5ld193bSkpID09IDApIHsKLQkJLyogRklY TUUgc2hvdWxkIGJlIHBhcnQgb2YgY3J0YyBhdG9taWMgY29tbWl0ICovCi0JCXZsdl9waXBlX3Nl dF9maWZvX3NpemUoY3J0Y19zdGF0ZSk7CisJaWYgKG1lbWNtcChvbGRfd20sICZuZXdfd20sIHNp emVvZihuZXdfd20pKSA9PSAwKQogCQlyZXR1cm47Ci0JfQogCiAJaWYgKGlzX2Rpc2FibGluZyhv bGRfd20tPmxldmVsLCBuZXdfd20ubGV2ZWwsIFZMVl9XTV9MRVZFTF9ERFJfRFZGUykpCiAJCWNo dl9zZXRfbWVtb3J5X2R2ZnMoZGV2X3ByaXYsIGZhbHNlKTsKQEAgLTEzNjIsMTcgKzE0MjIsOCBA QCBzdGF0aWMgdm9pZCB2bHZfdXBkYXRlX3dtKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQogCWlm IChpc19kaXNhYmxpbmcob2xkX3dtLT5jeHNyLCBuZXdfd20uY3hzciwgdHJ1ZSkpCiAJCV9pbnRl bF9zZXRfbWVtb3J5X2N4c3IoZGV2X3ByaXYsIGZhbHNlKTsKIAotCS8qIEZJWE1FIHNob3VsZCBi ZSBwYXJ0IG9mIGNydGMgYXRvbWljIGNvbW1pdCAqLwotCXZsdl9waXBlX3NldF9maWZvX3NpemUo Y3J0Y19zdGF0ZSk7Ci0KIAl2bHZfd3JpdGVfd21fdmFsdWVzKGRldl9wcml2LCAmbmV3X3dtKTsK IAotCURSTV9ERUJVR19LTVMoIlNldHRpbmcgRklGTyB3YXRlcm1hcmtzIC0gJWM6IHBsYW5lPSVk LCBjdXJzb3I9JWQsICIKLQkJICAgICAgInNwcml0ZTA9JWQsIHNwcml0ZTE9JWQsIFNSOiBwbGFu ZT0lZCwgY3Vyc29yPSVkIGxldmVsPSVkIGN4c3I9JWRcbiIsCi0JCSAgICAgIHBpcGVfbmFtZShw aXBlKSwgbmV3X3dtLnBpcGVbcGlwZV0ucGxhbmVbUExBTkVfUFJJTUFSWV0sIG5ld193bS5waXBl W3BpcGVdLnBsYW5lW1BMQU5FX0NVUlNPUl0sCi0JCSAgICAgIG5ld193bS5waXBlW3BpcGVdLnBs YW5lW1BMQU5FX1NQUklURTBdLCBuZXdfd20ucGlwZVtwaXBlXS5wbGFuZVtQTEFORV9TUFJJVEUx XSwKLQkJICAgICAgbmV3X3dtLnNyLnBsYW5lLCBuZXdfd20uc3IuY3Vyc29yLCBuZXdfd20ubGV2 ZWwsIG5ld193bS5jeHNyKTsKLQogCWlmIChpc19lbmFibGluZyhvbGRfd20tPmN4c3IsIG5ld193 bS5jeHNyLCB0cnVlKSkKIAkJX2ludGVsX3NldF9tZW1vcnlfY3hzcihkZXZfcHJpdiwgdHJ1ZSk7 CiAKQEAgLTEzODUsNiArMTQzNiwxOCBAQCBzdGF0aWMgdm9pZCB2bHZfdXBkYXRlX3dtKHN0cnVj dCBpbnRlbF9jcnRjICpjcnRjKQogCSpvbGRfd20gPSBuZXdfd207CiB9CiAKK3N0YXRpYyB2b2lk IHZsdl9pbml0aWFsX3dhdGVybWFya3Moc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUs CisJCQkJICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjX3N0YXRlLT5iYXNlLmNy dGMtPmRldik7CisJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNf c3RhdGUtPmJhc2UuY3J0Yyk7CisKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+d20ud21fbXV0ZXgp OworCWNydGMtPndtLmFjdGl2ZS52bHYgPSBjcnRjX3N0YXRlLT53bS52bHYub3B0aW1hbDsKKwl2 bHZfcHJvZ3JhbV93YXRlcm1hcmtzKGRldl9wcml2KTsKKwltdXRleF91bmxvY2soJmRldl9wcml2 LT53bS53bV9tdXRleCk7Cit9CisKICNkZWZpbmUgc2luZ2xlX3BsYW5lX2VuYWJsZWQobWFzaykg aXNfcG93ZXJfb2ZfMihtYXNrKQogCiBzdGF0aWMgdm9pZCBnNHhfdXBkYXRlX3dtKHN0cnVjdCBp bnRlbF9jcnRjICpjcnRjKQpAQCAtNDQ5NywxNCArNDU2MCwxMCBAQCB2b2lkIHZsdl93bV9nZXRf aHdfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CiAJc3RydWN0IHZsdl93bV92YWx1ZXMgKndtID0g JmRldl9wcml2LT53bS52bHY7CiAJc3RydWN0IGludGVsX2NydGMgKmNydGM7Ci0JZW51bSBwaXBl IHBpcGU7CiAJdTMyIHZhbDsKIAogCXZsdl9yZWFkX3dtX3ZhbHVlcyhkZXZfcHJpdiwgd20pOwog Ci0JZm9yX2VhY2hfaW50ZWxfY3J0YyhkZXYsIGNydGMpCi0JCXZsdl9nZXRfZmlmb19zaXplKHRv X2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+YmFzZS5zdGF0ZSkpOwotCiAJd20tPmN4c3IgPSBJOTE1 X1JFQUQoRldfQkxDX1NFTEZfVkxWKSAmIEZXX0NTUFdSRFdORU47CiAJd20tPmxldmVsID0gVkxW X1dNX0xFVkVMX1BNMjsKIApAQCAtNDU0MiwxMyArNDYwMSw1MSBAQCB2b2lkIHZsdl93bV9nZXRf aHdfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJp di0+cnBzLmh3X2xvY2spOwogCX0KIAotCWZvcl9lYWNoX3BpcGUoZGV2X3ByaXYsIHBpcGUpCisJ Zm9yX2VhY2hfaW50ZWxfY3J0YyhkZXYsIGNydGMpIHsKKwkJc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUgPQorCQkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5iYXNlLnN0YXRl KTsKKwkJc3RydWN0IHZsdl93bV9zdGF0ZSAqYWN0aXZlID0gJmNydGMtPndtLmFjdGl2ZS52bHY7 CisJCWNvbnN0IHN0cnVjdCB2bHZfZmlmb19zdGF0ZSAqZmlmb19zdGF0ZSA9CisJCQkmY3J0Y19z dGF0ZS0+d20udmx2LmZpZm9fc3RhdGU7CisJCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsK KwkJZW51bSBwbGFuZV9pZCBwbGFuZV9pZDsKKwkJaW50IGxldmVsOworCisJCXZsdl9nZXRfZmlm b19zaXplKGNydGNfc3RhdGUpOworCisJCWFjdGl2ZS0+bnVtX2xldmVscyA9IHdtLT5sZXZlbCAr IDE7CisJCWFjdGl2ZS0+Y3hzciA9IHdtLT5jeHNyOworCisJCS8qIEZJWE1FIHNhbml0aXplIHRo aW5ncyBtb3JlICovCisJCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IGFjdGl2ZS0+bnVtX2xldmVs czsgbGV2ZWwrKykgeworCQkJc3RydWN0IHZsdl9waXBlX3dtICpub25pbnZlcnRlZCA9CisJCQkJ JmNydGNfc3RhdGUtPndtLnZsdi5ub25pbnZlcnRlZFtsZXZlbF07CisKKwkJCWFjdGl2ZS0+c3Jb bGV2ZWxdLnBsYW5lID0gd20tPnNyLnBsYW5lOworCQkJYWN0aXZlLT5zcltsZXZlbF0uY3Vyc29y ID0gd20tPnNyLmN1cnNvcjsKKworCQkJZm9yX2VhY2hfcGxhbmVfaWRfb25fY3J0YyhjcnRjLCBw bGFuZV9pZCkgeworCQkJCWFjdGl2ZS0+d21bbGV2ZWxdLnBsYW5lW3BsYW5lX2lkXSA9IHdtLT5w aXBlW3BpcGVdLnBsYW5lW3BsYW5lX2lkXTsKKworCQkJCW5vbmludmVydGVkLT5wbGFuZVtwbGFu ZV9pZF0gPQorCQkJCQl2bHZfaW52ZXJ0X3dtX3ZhbHVlKGFjdGl2ZS0+d21bbGV2ZWxdLnBsYW5l W3BsYW5lX2lkXSwKKwkJCQkJCQkgICAgZmlmb19zdGF0ZS0+cGxhbmVbcGxhbmVfaWRdKTsKKwkJ CX0KKwkJfQorCisJCWZvcl9lYWNoX3BsYW5lX2lkX29uX2NydGMoY3J0YywgcGxhbmVfaWQpCisJ CQl2bHZfcGxhbmVfd21fc2V0KGNydGNfc3RhdGUsIGxldmVsLCBwbGFuZV9pZCwgVVNIUlRfTUFY KTsKKwkJdmx2X2ludmFsaWRhdGVfd21zKGNydGMsIGFjdGl2ZSwgbGV2ZWwpOworCisJCWNydGNf c3RhdGUtPndtLnZsdi5vcHRpbWFsID0gKmFjdGl2ZTsKKwogCQlEUk1fREVCVUdfS01TKCJJbml0 aWFsIHdhdGVybWFya3M6IHBpcGUgJWMsIHBsYW5lPSVkLCBjdXJzb3I9JWQsIHNwcml0ZTA9JWQs IHNwcml0ZTE9JWRcbiIsCiAJCQkgICAgICBwaXBlX25hbWUocGlwZSksCiAJCQkgICAgICB3bS0+ cGlwZVtwaXBlXS5wbGFuZVtQTEFORV9QUklNQVJZXSwKIAkJCSAgICAgIHdtLT5waXBlW3BpcGVd LnBsYW5lW1BMQU5FX0NVUlNPUl0sCiAJCQkgICAgICB3bS0+cGlwZVtwaXBlXS5wbGFuZVtQTEFO RV9TUFJJVEUwXSwKIAkJCSAgICAgIHdtLT5waXBlW3BpcGVdLnBsYW5lW1BMQU5FX1NQUklURTFd KTsKKwl9CiAKIAlEUk1fREVCVUdfS01TKCJJbml0aWFsIHdhdGVybWFya3M6IFNSIHBsYW5lPSVk LCBTUiBjdXJzb3I9JWQgbGV2ZWw9JWQgY3hzcj0lZFxuIiwKIAkJICAgICAgd20tPnNyLnBsYW5l LCB3bS0+c3IuY3Vyc29yLCB3bS0+bGV2ZWwsIHdtLT5jeHNyKTsKQEAgLTc3MDAsNyArNzc5Nyw5 IEBAIHZvaWQgaW50ZWxfaW5pdF9wbShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp CiAJCX0KIAl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJ RVcoZGV2X3ByaXYpKSB7CiAJCXZsdl9zZXR1cF93bV9sYXRlbmN5KGRldl9wcml2KTsKLQkJZGV2 X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gdmx2X3VwZGF0ZV93bTsKKwkJZGV2X3ByaXYtPmRp c3BsYXkuY29tcHV0ZV9waXBlX3dtID0gdmx2X2NvbXB1dGVfcGlwZV93bTsKKwkJZGV2X3ByaXYt PmRpc3BsYXkuaW5pdGlhbF93YXRlcm1hcmtzID0gdmx2X2luaXRpYWxfd2F0ZXJtYXJrczsKKwkJ ZGV2X3ByaXYtPmRpc3BsYXkuYXRvbWljX3VwZGF0ZV93YXRlcm1hcmtzID0gdmx2X2F0b21pY191 cGRhdGVfZmlmbzsKIAl9IGVsc2UgaWYgKElTX1BJTkVWSUVXKGRldl9wcml2KSkgewogCQlpZiAo IWludGVsX2dldF9jeHNyX2xhdGVuY3koSVNfUElORVZJRVdfRyhkZXZfcHJpdiksCiAJCQkJCSAg ICBkZXZfcHJpdi0+aXNfZGRyMywKLS0gCjIuMTAuMgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==