From mboxrd@z Thu Jan 1 00:00:00 1970 From: ville.syrjala@linux.intel.com Subject: [PATCH v2 07/18] drm/i915: Compute vlv/chv wms the atomic way Date: Thu, 2 Mar 2017 19:14:57 +0200 Message-ID: <20170302171508.1666-8-ville.syrjala@linux.intel.com> References: <20170302171508.1666-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 mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id CA7F96EBFD for ; Thu, 2 Mar 2017 17:15:32 +0000 (UTC) In-Reply-To: <20170302171508.1666-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 aW5fY3J0Y19jb21taXQoKS4KCnYyOiBzL25vbmludmVydGVkL3Jhdy8gZm9yIGNvbnNpc3RlbmN5 IHdpdGggb3RoZXIgcGxhdGZvcm1zCiAgICBzL3Zsdl9wbGFuZV93bV9zZXQvdmx2X3Jhd19wbGFu ZV93bV9zZXQvIGZvciBjbGFyaXR5CgpTaWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZp bGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgpSZXZpZXdlZC1ieTogTWFhcnRlbiBMYW5raG9y c3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oICAgICAgfCAgIDggKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZGlzcGxheS5jIHwgIDIxICsrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2Lmgg ICAgIHwgICAyIC0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgICAgICB8IDMwMiAr KysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogNCBmaWxlcyBjaGFuZ2VkLCAyMjgg aW5zZXJ0aW9ucygrKSwgMTA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmlu ZGV4IDI2ZjM2YjAwNGQyZi4uMGU4ZmQ3OGQzM2U4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK QEAgLTUyNiw2ICs1MjYsMTQgQEAgc3RydWN0IGk5MTVfaG90cGx1ZyB7CiAJZm9yX2VhY2hfcG93 ZXJfd2VsbF9yZXYoX19kZXZfcHJpdiwgX19wb3dlcl93ZWxsKQkJICAgICAgICBcCiAJCWZvcl9l YWNoX2lmICgoX19wb3dlcl93ZWxsKS0+ZG9tYWlucyAmIChfX2RvbWFpbl9tYXNrKSkKIAorI2Rl ZmluZSBmb3JfZWFjaF9pbnRlbF9wbGFuZV9pbl9zdGF0ZShfX3N0YXRlLCBwbGFuZSwgcGxhbmVf c3RhdGUsIF9faSkgXAorCWZvciAoKF9faSkgPSAwOyBcCisJICAgICAoX19pKSA8IChfX3N0YXRl KS0+YmFzZS5kZXYtPm1vZGVfY29uZmlnLm51bV90b3RhbF9wbGFuZSAmJiBcCisJCSAgICAgKChw bGFuZSkgPSB0b19pbnRlbF9wbGFuZSgoX19zdGF0ZSktPmJhc2UucGxhbmVzW19faV0ucHRyKSwg XAorCQkgICAgICAocGxhbmVfc3RhdGUpID0gdG9faW50ZWxfcGxhbmVfc3RhdGUoKF9fc3RhdGUp LT5iYXNlLnBsYW5lc1tfX2ldLnN0YXRlKSwgMSk7IFwKKwkgICAgIChfX2kpKyspIFwKKwkJZm9y X2VhY2hfaWYgKHBsYW5lX3N0YXRlKQorCiBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZTsKIHN0cnVj dCBpOTE1X21tX3N0cnVjdDsKIHN0cnVjdCBpOTE1X21tdV9vYmplY3Q7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggNmY0YzAyNGFhYWNjLi43Y2E3ZDNlNWQxOGUgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTU2ODQsNiArNTY4NCw4IEBAIHN0YXRp YyB2b2lkIG1vZGVzZXRfcHV0X3Bvd2VyX2RvbWFpbnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAogc3RhdGljIHZvaWQgdmFsbGV5dmlld19jcnRjX2VuYWJsZShzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcsCiAJCQkJICAgc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKm9sZF9zdGF0ZSkKIHsKKwlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpvbGRfaW50ZWxf c3RhdGUgPQorCQl0b19pbnRlbF9hdG9taWNfc3RhdGUob2xkX3N0YXRlKTsKIAlzdHJ1Y3QgZHJt X2NydGMgKmNydGMgPSBwaXBlX2NvbmZpZy0+YmFzZS5jcnRjOwogCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShkZXYpOwpAQCAtNTcyOCw3ICs1NzMwLDggQEAgc3RhdGljIHZvaWQgdmFsbGV5dmll d19jcnRjX2VuYWJsZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcsCiAKIAlp bnRlbF9jb2xvcl9sb2FkX2x1dHMoJnBpcGVfY29uZmlnLT5iYXNlKTsKIAotCWludGVsX3VwZGF0 ZV93YXRlcm1hcmtzKGludGVsX2NydGMpOworCWRldl9wcml2LT5kaXNwbGF5LmluaXRpYWxfd2F0 ZXJtYXJrcyhvbGRfaW50ZWxfc3RhdGUsCisJCQkJCSAgICAgcGlwZV9jb25maWcpOwogCWludGVs X2VuYWJsZV9waXBlKGludGVsX2NydGMpOwogCiAJYXNzZXJ0X3ZibGFua19kaXNhYmxlZChjcnRj KTsKQEAgLTU4NDUsNiArNTg0OCw5IEBAIHN0YXRpYyB2b2lkIGk5eHhfY3J0Y19kaXNhYmxlKHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSwKIAogCWlmICghSVNfR0VOMihk ZXZfcHJpdikpCiAJCWludGVsX3NldF9jcHVfZmlmb191bmRlcnJ1bl9yZXBvcnRpbmcoZGV2X3By aXYsIHBpcGUsIGZhbHNlKTsKKworCWlmICghZGV2X3ByaXYtPmRpc3BsYXkuaW5pdGlhbF93YXRl cm1hcmtzKQorCQlpbnRlbF91cGRhdGVfd2F0ZXJtYXJrcyhpbnRlbF9jcnRjKTsKIH0KIAogc3Rh dGljIHZvaWQgaW50ZWxfY3J0Y19kaXNhYmxlX25vYXRvbWljKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKQEAgLTExMjY4LDEwICsxMTI3NCwxMyBAQCBzdGF0aWMgYm9vbCBjaGVja19kaWdpdGFsX3Bv cnRfY29uZmxpY3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKIHN0YXRpYyB2b2lk CiBjbGVhcl9pbnRlbF9jcnRjX3N0YXRlKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlKQogeworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9CisJCXRvX2k5MTUo Y3J0Y19zdGF0ZS0+YmFzZS5jcnRjLT5kZXYpOwogCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSB0bXBf c3RhdGU7CiAJc3RydWN0IGludGVsX2NydGNfc2NhbGVyX3N0YXRlIHNjYWxlcl9zdGF0ZTsKIAlz dHJ1Y3QgaW50ZWxfZHBsbF9od19zdGF0ZSBkcGxsX2h3X3N0YXRlOwogCXN0cnVjdCBpbnRlbF9z aGFyZWRfZHBsbCAqc2hhcmVkX2RwbGw7CisJc3RydWN0IGludGVsX2NydGNfd21fc3RhdGUgd21f c3RhdGU7CiAJYm9vbCBmb3JjZV90aHJ1OwogCiAJLyogRklYTUU6IGJlZm9yZSB0aGUgc3dpdGNo IHRvIGF0b21pYyBzdGFydGVkLCBhIG5ldyBwaXBlX2NvbmZpZyB3YXMKQEAgLTExMjg0LDYgKzEx MjkzLDggQEAgY2xlYXJfaW50ZWxfY3J0Y19zdGF0ZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSkKIAlzaGFyZWRfZHBsbCA9IGNydGNfc3RhdGUtPnNoYXJlZF9kcGxsOwogCWRw bGxfaHdfc3RhdGUgPSBjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlOwogCWZvcmNlX3RocnUgPSBj cnRjX3N0YXRlLT5wY2hfcGZpdC5mb3JjZV90aHJ1OworCWlmIChJU19WQUxMRVlWSUVXKGRldl9w cml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkKKwkJd21fc3RhdGUgPSBjcnRjX3N0YXRl LT53bTsKIAogCW1lbXNldChjcnRjX3N0YXRlLCAwLCBzaXplb2YgKmNydGNfc3RhdGUpOwogCkBA IC0xMTI5Miw2ICsxMTMwMyw4IEBAIGNsZWFyX2ludGVsX2NydGNfc3RhdGUoc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCiAJY3J0Y19zdGF0ZS0+c2hhcmVkX2RwbGwgPSBzaGFy ZWRfZHBsbDsKIAljcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlID0gZHBsbF9od19zdGF0ZTsKIAlj cnRjX3N0YXRlLT5wY2hfcGZpdC5mb3JjZV90aHJ1ID0gZm9yY2VfdGhydTsKKwlpZiAoSVNfVkFM TEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCisJCWNydGNfc3Rh dGUtPndtID0gd21fc3RhdGU7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTEyODA0LDEyICsxMjgxNywx MiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9hdG9taWNfY29tbWl0X3RhaWwoc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlKQogCQkJCS8qCiAJCQkJICogTWFrZSBzdXJlIHdlIGRvbid0IGNhbGwg aW5pdGlhbF93YXRlcm1hcmtzCiAJCQkJICogZm9yIElMSy1zdHlsZSB3YXRlcm1hcmsgdXBkYXRl cy4KKwkJCQkgKgorCQkJCSAqIE5vIGNsdWUgd2hhdCB0aGlzIGlzIHN1cHBvc2VkIHRvIGFjaGll dmUuCiAJCQkJICovCi0JCQkJaWYgKGRldl9wcml2LT5kaXNwbGF5LmF0b21pY191cGRhdGVfd2F0 ZXJtYXJrcykKKwkJCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQogCQkJCQlkZXZfcHJp di0+ZGlzcGxheS5pbml0aWFsX3dhdGVybWFya3MoaW50ZWxfc3RhdGUsCiAJCQkJCQkJCQkgICAg IHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpKTsKLQkJCQllbHNlCi0JCQkJCWludGVs X3VwZGF0ZV93YXRlcm1hcmtzKGludGVsX2NydGMpOwogCQkJfQogCQl9CiAJfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcnYuaAppbmRleCAyOGViYjJlNTgwMWUuLjM1MWExNGM5ODIwNSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTUwMiw5ICs1MDIsNyBAQCBlbnVtIHZsdl93bV9sZXZlbCB7 CiBzdHJ1Y3Qgdmx2X3dtX3N0YXRlIHsKIAlzdHJ1Y3Qgdmx2X3BpcGVfd20gd21bTlVNX1ZMVl9X TV9MRVZFTFNdOwogCXN0cnVjdCB2bHZfc3Jfd20gc3JbTlVNX1ZMVl9XTV9MRVZFTFNdOwotCXVp bnQ4X3QgbnVtX2FjdGl2ZV9wbGFuZXM7CiAJdWludDhfdCBudW1fbGV2ZWxzOwotCXVpbnQ4X3Qg bGV2ZWw7CiAJYm9vbCBjeHNyOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKaW5kZXggYzRj N2NmOGYzODRlLi5mN2NjMDEzYjNhNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwpAQCAtMTA5 NCw2ICsxMDk0LDI4IEBAIHN0YXRpYyBpbnQgdmx2X2NvbXB1dGVfZmlmbyhzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB2bHZf bnVtX3dtX2xldmVscyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJcmV0 dXJuIGRldl9wcml2LT53bS5tYXhfbGV2ZWwgKyAxOworfQorCisvKiBtYXJrIGFsbCBsZXZlbHMg c3RhcnRpbmcgZnJvbSAnbGV2ZWwnIGFzIGludmFsaWQgKi8KK3N0YXRpYyB2b2lkIHZsdl9pbnZh bGlkYXRlX3dtcyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKKwkJCSAgICAgICBzdHJ1Y3Qgdmx2 X3dtX3N0YXRlICp3bV9zdGF0ZSwgaW50IGxldmVsKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOworCisJZm9yICg7IGxldmVs IDwgdmx2X251bV93bV9sZXZlbHMoZGV2X3ByaXYpOyBsZXZlbCsrKSB7CisJCWVudW0gcGxhbmVf aWQgcGxhbmVfaWQ7CisKKwkJZm9yX2VhY2hfcGxhbmVfaWRfb25fY3J0YyhjcnRjLCBwbGFuZV9p ZCkKKwkJCXdtX3N0YXRlLT53bVtsZXZlbF0ucGxhbmVbcGxhbmVfaWRdID0gVVNIUlRfTUFYOwor CisJCXdtX3N0YXRlLT5zcltsZXZlbF0uY3Vyc29yID0gVVNIUlRfTUFYOworCQl3bV9zdGF0ZS0+ c3JbbGV2ZWxdLnBsYW5lID0gVVNIUlRfTUFYOworCX0KK30KKwogc3RhdGljIHUxNiB2bHZfaW52 ZXJ0X3dtX3ZhbHVlKHUxNiB3bSwgdTE2IGZpZm9fc2l6ZSkKIHsKIAlpZiAod20gPiBmaWZvX3Np emUpCkBAIC0xMTAyLDEwNSArMTEyNCwxNjIgQEAgc3RhdGljIHUxNiB2bHZfaW52ZXJ0X3dtX3Zh bHVlKHUxNiB3bSwgdTE2IGZpZm9fc2l6ZSkKIAkJcmV0dXJuIGZpZm9fc2l6ZSAtIHdtOwogfQog Ci1zdGF0aWMgdm9pZCB2bHZfaW52ZXJ0X3dtcyhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSkKKy8qCisgKiBTdGFydGluZyBmcm9tICdsZXZlbCcgc2V0IGFsbCBoaWdoZXIKKyAq IGxldmVscyB0byAndmFsdWUnIGluIHRoZSAicmF3IiB3YXRlcm1hcmtzLgorICovCitzdGF0aWMg dm9pZCB2bHZfcmF3X3BsYW5lX3dtX3NldChzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSwKKwkJCQkgaW50IGxldmVsLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkLCB1MTYgdmFsdWUp CiB7Ci0Jc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUt PmJhc2UuY3J0Yyk7Ci0Jc3RydWN0IHZsdl93bV9zdGF0ZSAqd21fc3RhdGUgPSAmY3J0Y19zdGF0 ZS0+d20udmx2Lm9wdGltYWw7Ci0JY29uc3Qgc3RydWN0IHZsdl9maWZvX3N0YXRlICpmaWZvX3N0 YXRlID0KLQkJJmNydGNfc3RhdGUtPndtLnZsdi5maWZvX3N0YXRlOwotCWludCBsZXZlbDsKLQot CWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IHdtX3N0YXRlLT5udW1fbGV2ZWxzOyBsZXZlbCsrKSB7 Ci0JCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFz ZS5kZXYpOwotCQljb25zdCBpbnQgc3JfZmlmb19zaXplID0KLQkJCUlOVEVMX0lORk8oZGV2X3By aXYpLT5udW1fcGlwZXMgKiA1MTIgLSAxOwotCQllbnVtIHBsYW5lX2lkIHBsYW5lX2lkOworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Y19zdGF0ZS0+YmFz ZS5jcnRjLT5kZXYpOworCWludCBudW1fbGV2ZWxzID0gdmx2X251bV93bV9sZXZlbHMoZGV2X3By aXYpOwogCi0JCXdtX3N0YXRlLT5zcltsZXZlbF0ucGxhbmUgPQotCQkJdmx2X2ludmVydF93bV92 YWx1ZSh3bV9zdGF0ZS0+c3JbbGV2ZWxdLnBsYW5lLAotCQkJCQkgICAgc3JfZmlmb19zaXplKTsK LQkJd21fc3RhdGUtPnNyW2xldmVsXS5jdXJzb3IgPQotCQkJdmx2X2ludmVydF93bV92YWx1ZSh3 bV9zdGF0ZS0+c3JbbGV2ZWxdLmN1cnNvciwKLQkJCQkJICAgIDYzKTsKKwlmb3IgKDsgbGV2ZWwg PCBudW1fbGV2ZWxzOyBsZXZlbCsrKSB7CisJCXN0cnVjdCB2bHZfcGlwZV93bSAqcmF3ID0gJmNy dGNfc3RhdGUtPndtLnZsdi5yYXdbbGV2ZWxdOwogCi0JCWZvcl9lYWNoX3BsYW5lX2lkX29uX2Ny dGMoY3J0YywgcGxhbmVfaWQpIHsKLQkJCXdtX3N0YXRlLT53bVtsZXZlbF0ucGxhbmVbcGxhbmVf aWRdID0KLQkJCQl2bHZfaW52ZXJ0X3dtX3ZhbHVlKHdtX3N0YXRlLT53bVtsZXZlbF0ucGxhbmVb cGxhbmVfaWRdLAotCQkJCQkJICAgIGZpZm9fc3RhdGUtPnBsYW5lW3BsYW5lX2lkXSk7Ci0JCX0K KwkJcmF3LT5wbGFuZVtwbGFuZV9pZF0gPSB2YWx1ZTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHZs dl9jb21wdXRlX3dtKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQorc3RhdGlj IHZvaWQgdmx2X3BsYW5lX3dtX2NvbXB1dGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUsCisJCQkJIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUp CiB7Ci0Jc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUt PmJhc2UuY3J0Yyk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShjcnRjLT5iYXNlLmRldik7Ci0Jc3RydWN0IHZsdl93bV9zdGF0ZSAqd21fc3RhdGUgPSAmY3J0 Y19zdGF0ZS0+d20udmx2Lm9wdGltYWw7Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZTsKKwlz dHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPmJh c2UucGxhbmUpOworCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSBwbGFuZS0+aWQ7CisJaW50IG51 bV9sZXZlbHMgPSB2bHZfbnVtX3dtX2xldmVscyh0b19pOTE1KHBsYW5lLT5iYXNlLmRldikpOwog CWludCBsZXZlbDsKIAotCW1lbXNldCh3bV9zdGF0ZSwgMCwgc2l6ZW9mKCp3bV9zdGF0ZSkpOwot CW1lbXNldCgmY3J0Y19zdGF0ZS0+d20udmx2LnJhdywgMCwgc2l6ZW9mKGNydGNfc3RhdGUtPndt LnZsdi5yYXcpKTsKKwlpZiAoIXBsYW5lX3N0YXRlLT5iYXNlLnZpc2libGUpIHsKKwkJdmx2X3Jh d19wbGFuZV93bV9zZXQoY3J0Y19zdGF0ZSwgMCwgcGxhbmVfaWQsIDApOworCQlyZXR1cm47CisJ fQogCi0Jd21fc3RhdGUtPmN4c3IgPSBjcnRjLT5waXBlICE9IFBJUEVfQyAmJiBjcnRjLT53bS5j eHNyX2FsbG93ZWQ7Ci0Jd21fc3RhdGUtPm51bV9sZXZlbHMgPSBkZXZfcHJpdi0+d20ubWF4X2xl dmVsICsgMTsKKwlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPCBudW1fbGV2ZWxzOyBsZXZlbCsrKSB7 CisJCXN0cnVjdCB2bHZfcGlwZV93bSAqcmF3ID0gJmNydGNfc3RhdGUtPndtLnZsdi5yYXdbbGV2 ZWxdOworCQlpbnQgd20gPSB2bHZfY29tcHV0ZV93bV9sZXZlbChjcnRjX3N0YXRlLCBwbGFuZV9z dGF0ZSwgbGV2ZWwpOworCQlpbnQgbWF4X3dtID0gcGxhbmVfaWQgPT0gUExBTkVfQ1VSU09SID8g NjMgOiA1MTE7CiAKLQl3bV9zdGF0ZS0+bnVtX2FjdGl2ZV9wbGFuZXMgPSAwOworCQkvKiBGSVhN RSBqdXN0IGJhaWwgKi8KKwkJaWYgKFdBUk5fT04obGV2ZWwgPT0gMCAmJiB3bSA+IG1heF93bSkp CisJCQl3bSA9IG1heF93bTsKIAotCWlmICh3bV9zdGF0ZS0+bnVtX2FjdGl2ZV9wbGFuZXMgIT0g MSkKLQkJd21fc3RhdGUtPmN4c3IgPSBmYWxzZTsKKwkJaWYgKHdtID4gbWF4X3dtKQorCQkJYnJl YWs7CiAKLQlmb3JfZWFjaF9pbnRlbF9wbGFuZV9vbl9jcnRjKCZkZXZfcHJpdi0+ZHJtLCBjcnRj LCBwbGFuZSkgewotCQlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnN0YXRlID0KLQkJCXRvX2lu dGVsX3BsYW5lX3N0YXRlKHBsYW5lLT5iYXNlLnN0YXRlKTsKKwkJcmF3LT5wbGFuZVtwbGFuZV9p ZF0gPSB3bTsKKwl9CiAKLQkJaWYgKCFzdGF0ZS0+YmFzZS52aXNpYmxlKQotCQkJY29udGludWU7 CisJLyogbWFyayBhbGwgaGlnaGVyIGxldmVscyBhcyBpbnZhbGlkICovCisJdmx2X3Jhd19wbGFu ZV93bV9zZXQoY3J0Y19zdGF0ZSwgbGV2ZWwsIHBsYW5lX2lkLCBVU0hSVF9NQVgpOwogCi0JCWZv ciAobGV2ZWwgPSAwOyBsZXZlbCA8IHdtX3N0YXRlLT5udW1fbGV2ZWxzOyBsZXZlbCsrKSB7Ci0J CQlzdHJ1Y3Qgdmx2X3BpcGVfd20gKnJhdyA9ICZjcnRjX3N0YXRlLT53bS52bHYucmF3W2xldmVs XTsKLQkJCWludCB3bSA9IHZsdl9jb21wdXRlX3dtX2xldmVsKGNydGNfc3RhdGUsIHN0YXRlLCBs ZXZlbCk7Ci0JCQlpbnQgbWF4X3dtID0gcGxhbmUtPmlkID09IFBMQU5FX0NVUlNPUiA/IDYzIDog NTExOworCURSTV9ERUJVR19LTVMoIiVzIHdtczogWzBdPSVkLFsxXT0lZCxbMl09JWRcbiIsCisJ CSAgICAgIHBsYW5lLT5iYXNlLm5hbWUsCisJCSAgICAgIGNydGNfc3RhdGUtPndtLnZsdi5yYXdb VkxWX1dNX0xFVkVMX1BNMl0ucGxhbmVbcGxhbmVfaWRdLAorCQkgICAgICBjcnRjX3N0YXRlLT53 bS52bHYucmF3W1ZMVl9XTV9MRVZFTF9QTTVdLnBsYW5lW3BsYW5lX2lkXSwKKwkJICAgICAgY3J0 Y19zdGF0ZS0+d20udmx2LnJhd1tWTFZfV01fTEVWRUxfRERSX0RWRlNdLnBsYW5lW3BsYW5lX2lk XSk7Cit9CiAKLQkJCS8qIGhhY2sgKi8KLQkJCWlmIChXQVJOX09OKGxldmVsID09IDAgJiYgd20g PiBtYXhfd20pKQotCQkJCXdtID0gbWF4X3dtOworc3RhdGljIGJvb2wgdmx2X3BsYW5lX3dtX2lz X3ZhbGlkKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJCSAg ZW51bSBwbGFuZV9pZCBwbGFuZV9pZCwgaW50IGxldmVsKQoreworCWNvbnN0IHN0cnVjdCB2bHZf cGlwZV93bSAqcmF3ID0KKwkJJmNydGNfc3RhdGUtPndtLnZsdi5yYXdbbGV2ZWxdOworCWNvbnN0 IHN0cnVjdCB2bHZfZmlmb19zdGF0ZSAqZmlmb19zdGF0ZSA9CisJCSZjcnRjX3N0YXRlLT53bS52 bHYuZmlmb19zdGF0ZTsKIAotCQkJaWYgKHdtID4gbWF4X3dtKQotCQkJCWJyZWFrOworCXJldHVy biByYXctPnBsYW5lW3BsYW5lX2lkXSA8PSBmaWZvX3N0YXRlLT5wbGFuZVtwbGFuZV9pZF07Cit9 CiAKLQkJCXJhdy0+cGxhbmVbcGxhbmUtPmlkXSA9IHdtOwotCQl9CitzdGF0aWMgYm9vbCB2bHZf Y3J0Y193bV9pc192YWxpZChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSwgaW50IGxldmVsKQoreworCXJldHVybiB2bHZfcGxhbmVfd21faXNfdmFsaWQoY3J0Y19zdGF0 ZSwgUExBTkVfUFJJTUFSWSwgbGV2ZWwpICYmCisJCXZsdl9wbGFuZV93bV9pc192YWxpZChjcnRj X3N0YXRlLCBQTEFORV9TUFJJVEUwLCBsZXZlbCkgJiYKKwkJdmx2X3BsYW5lX3dtX2lzX3ZhbGlk KGNydGNfc3RhdGUsIFBMQU5FX1NQUklURTEsIGxldmVsKSAmJgorCQl2bHZfcGxhbmVfd21faXNf dmFsaWQoY3J0Y19zdGF0ZSwgUExBTkVfQ1VSU09SLCBsZXZlbCk7Cit9CisKK3N0YXRpYyBpbnQg dmx2X2NvbXB1dGVfcGlwZV93bShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkK K3sKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+ YmFzZS5jcnRjKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KGNydGMtPmJhc2UuZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSA9CisJ CXRvX2ludGVsX2F0b21pY19zdGF0ZShjcnRjX3N0YXRlLT5iYXNlLnN0YXRlKTsKKwlzdHJ1Y3Qg dmx2X3dtX3N0YXRlICp3bV9zdGF0ZSA9ICZjcnRjX3N0YXRlLT53bS52bHYub3B0aW1hbDsKKwlj b25zdCBzdHJ1Y3Qgdmx2X2ZpZm9fc3RhdGUgKmZpZm9fc3RhdGUgPQorCQkmY3J0Y19zdGF0ZS0+ d20udmx2LmZpZm9fc3RhdGU7CisJaW50IG51bV9hY3RpdmVfcGxhbmVzID0gaHdlaWdodDMyKGNy dGNfc3RhdGUtPmFjdGl2ZV9wbGFuZXMgJgorCQkJCQkgIH5CSVQoUExBTkVfQ1VSU09SKSk7CisJ c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKKwlzdHJ1Y3QgaW50ZWxfcGxh bmUgKnBsYW5lOworCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQ7CisJaW50IGxldmVsLCByZXQsIGk7 CisKKwlmb3JfZWFjaF9pbnRlbF9wbGFuZV9pbl9zdGF0ZShzdGF0ZSwgcGxhbmUsIHBsYW5lX3N0 YXRlLCBpKSB7CisJCWNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqb2xkX3BsYW5lX3N0 YXRlID0KKwkJCXRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lLT5iYXNlLnN0YXRlKTsKKworCQlp ZiAocGxhbmVfc3RhdGUtPmJhc2UuY3J0YyAhPSAmY3J0Yy0+YmFzZSAmJgorCQkgICAgb2xkX3Bs YW5lX3N0YXRlLT5iYXNlLmNydGMgIT0gJmNydGMtPmJhc2UpCisJCQljb250aW51ZTsKIAotCQl3 bV9zdGF0ZS0+bnVtX2xldmVscyA9IGxldmVsOworCQl2bHZfcGxhbmVfd21fY29tcHV0ZShjcnRj X3N0YXRlLCBwbGFuZV9zdGF0ZSk7CiAJfQogCi0Jdmx2X2NvbXB1dGVfZmlmbyhjcnRjX3N0YXRl KTsKKwkvKiBpbml0aWFsbHkgYWxsb3cgYWxsIGxldmVscyAqLworCXdtX3N0YXRlLT5udW1fbGV2 ZWxzID0gdmx2X251bV93bV9sZXZlbHMoZGV2X3ByaXYpOworCS8qCisJICogTm90ZSB0aGF0IGVu YWJsaW5nIGN4c3Igd2l0aCBubyBwcmltYXJ5L3Nwcml0ZSBwbGFuZXMKKwkgKiBlbmFibGVkIGNh biB3ZWRnZSB0aGUgcGlwZS4gSGVuY2Ugd2Ugb25seSBhbGxvdyBjeHNyCisJICogd2l0aCBleGFj dGx5IG9uZSBlbmFibGVkIHByaW1hcnkvc3ByaXRlIHBsYW5lLgorCSAqLworCXdtX3N0YXRlLT5j eHNyID0gY3J0Yy0+cGlwZSAhPSBQSVBFX0MgJiYKKwkJY3J0Yy0+d20uY3hzcl9hbGxvd2VkICYm IG51bV9hY3RpdmVfcGxhbmVzID09IDE7CisKKwlyZXQgPSB2bHZfY29tcHV0ZV9maWZvKGNydGNf c3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlmb3IgKGxldmVsID0gMDsgbGV2 ZWwgPCB3bV9zdGF0ZS0+bnVtX2xldmVsczsgbGV2ZWwrKykgewotCQlzdHJ1Y3Qgdmx2X3BpcGVf d20gKnJhdyA9ICZjcnRjX3N0YXRlLT53bS52bHYucmF3W2xldmVsXTsKKwkJY29uc3Qgc3RydWN0 IHZsdl9waXBlX3dtICpyYXcgPSAmY3J0Y19zdGF0ZS0+d20udmx2LnJhd1tsZXZlbF07CisJCWNv bnN0IGludCBzcl9maWZvX3NpemUgPSBJTlRFTF9JTkZPKGRldl9wcml2KS0+bnVtX3BpcGVzICog NTEyIC0gMTsKIAotCQl3bV9zdGF0ZS0+d21bbGV2ZWxdID0gKnJhdzsKKwkJaWYgKCF2bHZfY3J0 Y193bV9pc192YWxpZChjcnRjX3N0YXRlLCBsZXZlbCkpCisJCQlicmVhazsKIAotCQl3bV9zdGF0 ZS0+c3JbbGV2ZWxdLnBsYW5lID0gbWF4MyhyYXctPnBsYW5lW1BMQU5FX1BSSU1BUlldLAorCQlm b3JfZWFjaF9wbGFuZV9pZF9vbl9jcnRjKGNydGMsIHBsYW5lX2lkKSB7CisJCQl3bV9zdGF0ZS0+ d21bbGV2ZWxdLnBsYW5lW3BsYW5lX2lkXSA9CisJCQkJdmx2X2ludmVydF93bV92YWx1ZShyYXct PnBsYW5lW3BsYW5lX2lkXSwKKwkJCQkJCSAgICBmaWZvX3N0YXRlLT5wbGFuZVtwbGFuZV9pZF0p OworCQl9CisKKwkJd21fc3RhdGUtPnNyW2xldmVsXS5wbGFuZSA9CisJCQl2bHZfaW52ZXJ0X3dt X3ZhbHVlKG1heDMocmF3LT5wbGFuZVtQTEFORV9QUklNQVJZXSwKIAkJCQkJCSByYXctPnBsYW5l W1BMQU5FX1NQUklURTBdLAotCQkJCQkJIHJhdy0+cGxhbmVbUExBTkVfU1BSSVRFMV0pOwotCQl3 bV9zdGF0ZS0+c3JbbGV2ZWxdLmN1cnNvciA9IHJhdy0+cGxhbmVbUExBTkVfQ1VSU09SXTsKLQl9 CisJCQkJCQkgcmF3LT5wbGFuZVtQTEFORV9TUFJJVEUxXSksCisJCQkJCSAgICBzcl9maWZvX3Np emUpOwogCi0JLyogY2xlYXIgYW55IChwYXJ0aWFsbHkpIGZpbGxlZCBpbnZhbGlkIGxldmVscyAq LwotCWZvciAobGV2ZWwgPSB3bV9zdGF0ZS0+bnVtX2xldmVsczsgbGV2ZWwgPCBkZXZfcHJpdi0+ d20ubWF4X2xldmVsICsgMTsgbGV2ZWwrKykgewotCQltZW1zZXQoJndtX3N0YXRlLT53bVtsZXZl bF0sIDAsIHNpemVvZih3bV9zdGF0ZS0+d21bbGV2ZWxdKSk7Ci0JCW1lbXNldCgmd21fc3RhdGUt PnNyW2xldmVsXSwgMCwgc2l6ZW9mKHdtX3N0YXRlLT5zcltsZXZlbF0pKTsKKwkJd21fc3RhdGUt PnNyW2xldmVsXS5jdXJzb3IgPQorCQkJdmx2X2ludmVydF93bV92YWx1ZShyYXctPnBsYW5lW1BM QU5FX0NVUlNPUl0sCisJCQkJCSAgICA2Myk7CiAJfQogCi0Jdmx2X2ludmVydF93bXMoY3J0Y19z dGF0ZSk7CisJaWYgKGxldmVsID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogbGltaXQg dG8gb25seSBsZXZlbHMgd2UgY2FuIGFjdHVhbGx5IGhhbmRsZSAqLworCXdtX3N0YXRlLT5udW1f bGV2ZWxzID0gbGV2ZWw7CisKKwkvKiBpbnZhbGlkYXRlIHRoZSBoaWdoZXIgbGV2ZWxzICovCisJ dmx2X2ludmFsaWRhdGVfd21zKGNydGMsIHdtX3N0YXRlLCBsZXZlbCk7CisKKwlyZXR1cm4gMDsK IH0KIAogI2RlZmluZSBWTFZfRklGTyhwbGFuZSwgdmFsdWUpIFwKIAkoKCh2YWx1ZSkgPDwgRFNQ QVJCXyAjIyBwbGFuZSAjIyBfU0hJRlRfVkxWKSAmIERTUEFSQl8gIyMgcGxhbmUgIyMgX01BU0tf VkxWKQogCi1zdGF0aWMgdm9pZCB2bHZfcGlwZV9zZXRfZmlmb19zaXplKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQorc3RhdGljIHZvaWQgdmx2X2F0b21pY191cGRh dGVfZmlmbyhzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCQkgICBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKIHsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0 YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjKTsKIAlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKQEAgLTEyMTUs MTAgKzEyOTQsNiBAQCBzdGF0aWMgdm9pZCB2bHZfcGlwZV9zZXRfZmlmb19zaXplKGNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQogCVdBUk5fT04oZmlmb19zdGF0ZS0+ cGxhbmVbUExBTkVfQ1VSU09SXSAhPSA2Myk7CiAJV0FSTl9PTihmaWZvX3NpemUgIT0gNTExKTsK IAotCURSTV9ERUJVR19LTVMoIlBpcGUgJWMgRklGTyBzcGxpdCAlZCAvICVkIC8gJWRcbiIsCi0J CSAgICAgIHBpcGVfbmFtZShjcnRjLT5waXBlKSwgc3ByaXRlMF9zdGFydCwKLQkJICAgICAgc3By aXRlMV9zdGFydCwgZmlmb19zaXplKTsKLQogCXNwaW5fbG9jaygmZGV2X3ByaXYtPndtLmRzcGFy Yl9sb2NrKTsKIAogCXN3aXRjaCAoY3J0Yy0+cGlwZSkgewpAQCAtMTMxNywxMSArMTM5Miw4IEBA IHN0YXRpYyB2b2lkIHZsdl9tZXJnZV93bShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCiAJCWNvbnN0IHN0cnVjdCB2bHZfd21fc3RhdGUgKndtX3N0YXRlID0gJmNydGMtPndtLmFj dGl2ZS52bHY7CiAJCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKIAotCQlpZiAoIWNydGMt PmFjdGl2ZSkKLQkJCWNvbnRpbnVlOwotCiAJCXdtLT5waXBlW3BpcGVdID0gd21fc3RhdGUtPndt W3dtLT5sZXZlbF07Ci0JCWlmICh3bS0+Y3hzcikKKwkJaWYgKGNydGMtPmFjdGl2ZSAmJiB3bS0+ Y3hzcikKIAkJCXdtLT5zciA9IHdtX3N0YXRlLT5zclt3bS0+bGV2ZWxdOwogCiAJCXdtLT5kZGxb cGlwZV0ucGxhbmVbUExBTkVfUFJJTUFSWV0gPSBERExfUFJFQ0lTSU9OX0hJR0ggfCAyOwpAQCAt MTM0MSwyNCArMTQxMywxNSBAQCBzdGF0aWMgYm9vbCBpc19lbmFibGluZyhpbnQgb2xkLCBpbnQg bmV3LCBpbnQgdGhyZXNob2xkKQogCXJldHVybiBvbGQgPCB0aHJlc2hvbGQgJiYgbmV3ID49IHRo cmVzaG9sZDsKIH0KIAotc3RhdGljIHZvaWQgdmx2X3VwZGF0ZV93bShzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YykKK3N0YXRpYyB2b2lkIHZsdl9wcm9ncmFtX3dhdGVybWFya3Moc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwotCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlID0KLQkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5iYXNlLnN0YXRlKTsK LQllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7CiAJc3RydWN0IHZsdl93bV92YWx1ZXMgKm9s ZF93bSA9ICZkZXZfcHJpdi0+d20udmx2OwogCXN0cnVjdCB2bHZfd21fdmFsdWVzIG5ld193bSA9 IHt9OwogCi0Jdmx2X2NvbXB1dGVfd20oY3J0Y19zdGF0ZSk7Ci0JY3J0Yy0+d20uYWN0aXZlLnZs diA9IGNydGNfc3RhdGUtPndtLnZsdi5vcHRpbWFsOwogCXZsdl9tZXJnZV93bShkZXZfcHJpdiwg Jm5ld193bSk7CiAKLQlpZiAobWVtY21wKG9sZF93bSwgJm5ld193bSwgc2l6ZW9mKG5ld193bSkp ID09IDApIHsKLQkJLyogRklYTUUgc2hvdWxkIGJlIHBhcnQgb2YgY3J0YyBhdG9taWMgY29tbWl0 ICovCi0JCXZsdl9waXBlX3NldF9maWZvX3NpemUoY3J0Y19zdGF0ZSk7CisJaWYgKG1lbWNtcChv bGRfd20sICZuZXdfd20sIHNpemVvZihuZXdfd20pKSA9PSAwKQogCQlyZXR1cm47Ci0JfQogCiAJ aWYgKGlzX2Rpc2FibGluZyhvbGRfd20tPmxldmVsLCBuZXdfd20ubGV2ZWwsIFZMVl9XTV9MRVZF TF9ERFJfRFZGUykpCiAJCWNodl9zZXRfbWVtb3J5X2R2ZnMoZGV2X3ByaXYsIGZhbHNlKTsKQEAg LTEzNjksMTcgKzE0MzIsOCBAQCBzdGF0aWMgdm9pZCB2bHZfdXBkYXRlX3dtKHN0cnVjdCBpbnRl bF9jcnRjICpjcnRjKQogCWlmIChpc19kaXNhYmxpbmcob2xkX3dtLT5jeHNyLCBuZXdfd20uY3hz ciwgdHJ1ZSkpCiAJCV9pbnRlbF9zZXRfbWVtb3J5X2N4c3IoZGV2X3ByaXYsIGZhbHNlKTsKIAot CS8qIEZJWE1FIHNob3VsZCBiZSBwYXJ0IG9mIGNydGMgYXRvbWljIGNvbW1pdCAqLwotCXZsdl9w aXBlX3NldF9maWZvX3NpemUoY3J0Y19zdGF0ZSk7Ci0KIAl2bHZfd3JpdGVfd21fdmFsdWVzKGRl dl9wcml2LCAmbmV3X3dtKTsKIAotCURSTV9ERUJVR19LTVMoIlNldHRpbmcgRklGTyB3YXRlcm1h cmtzIC0gJWM6IHBsYW5lPSVkLCBjdXJzb3I9JWQsICIKLQkJICAgICAgInNwcml0ZTA9JWQsIHNw cml0ZTE9JWQsIFNSOiBwbGFuZT0lZCwgY3Vyc29yPSVkIGxldmVsPSVkIGN4c3I9JWRcbiIsCi0J CSAgICAgIHBpcGVfbmFtZShwaXBlKSwgbmV3X3dtLnBpcGVbcGlwZV0ucGxhbmVbUExBTkVfUFJJ TUFSWV0sIG5ld193bS5waXBlW3BpcGVdLnBsYW5lW1BMQU5FX0NVUlNPUl0sCi0JCSAgICAgIG5l d193bS5waXBlW3BpcGVdLnBsYW5lW1BMQU5FX1NQUklURTBdLCBuZXdfd20ucGlwZVtwaXBlXS5w bGFuZVtQTEFORV9TUFJJVEUxXSwKLQkJICAgICAgbmV3X3dtLnNyLnBsYW5lLCBuZXdfd20uc3Iu Y3Vyc29yLCBuZXdfd20ubGV2ZWwsIG5ld193bS5jeHNyKTsKLQogCWlmIChpc19lbmFibGluZyhv bGRfd20tPmN4c3IsIG5ld193bS5jeHNyLCB0cnVlKSkKIAkJX2ludGVsX3NldF9tZW1vcnlfY3hz cihkZXZfcHJpdiwgdHJ1ZSk7CiAKQEAgLTEzOTIsNiArMTQ0NiwxOCBAQCBzdGF0aWMgdm9pZCB2 bHZfdXBkYXRlX3dtKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQogCSpvbGRfd20gPSBuZXdfd207 CiB9CiAKK3N0YXRpYyB2b2lkIHZsdl9pbml0aWFsX3dhdGVybWFya3Moc3RydWN0IGludGVsX2F0 b21pY19zdGF0ZSAqc3RhdGUsCisJCQkJICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShj cnRjX3N0YXRlLT5iYXNlLmNydGMtPmRldik7CisJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0 b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPmJhc2UuY3J0Yyk7CisKKwltdXRleF9sb2NrKCZkZXZf cHJpdi0+d20ud21fbXV0ZXgpOworCWNydGMtPndtLmFjdGl2ZS52bHYgPSBjcnRjX3N0YXRlLT53 bS52bHYub3B0aW1hbDsKKwl2bHZfcHJvZ3JhbV93YXRlcm1hcmtzKGRldl9wcml2KTsKKwltdXRl eF91bmxvY2soJmRldl9wcml2LT53bS53bV9tdXRleCk7Cit9CisKICNkZWZpbmUgc2luZ2xlX3Bs YW5lX2VuYWJsZWQobWFzaykgaXNfcG93ZXJfb2ZfMihtYXNrKQogCiBzdGF0aWMgdm9pZCBnNHhf dXBkYXRlX3dtKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQpAQCAtNDUwOCwxNCArNDU3NCwxMCBA QCB2b2lkIHZsdl93bV9nZXRfaHdfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CiAJc3RydWN0IHZs dl93bV92YWx1ZXMgKndtID0gJmRldl9wcml2LT53bS52bHY7CiAJc3RydWN0IGludGVsX2NydGMg KmNydGM7Ci0JZW51bSBwaXBlIHBpcGU7CiAJdTMyIHZhbDsKIAogCXZsdl9yZWFkX3dtX3ZhbHVl cyhkZXZfcHJpdiwgd20pOwogCi0JZm9yX2VhY2hfaW50ZWxfY3J0YyhkZXYsIGNydGMpCi0JCXZs dl9nZXRfZmlmb19zaXplKHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+YmFzZS5zdGF0ZSkpOwot CiAJd20tPmN4c3IgPSBJOTE1X1JFQUQoRldfQkxDX1NFTEZfVkxWKSAmIEZXX0NTUFdSRFdORU47 CiAJd20tPmxldmVsID0gVkxWX1dNX0xFVkVMX1BNMjsKIApAQCAtNDU1MywxMyArNDYxNSw1MyBA QCB2b2lkIHZsdl93bV9nZXRfaHdfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAkJbXV0 ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cnBzLmh3X2xvY2spOwogCX0KIAotCWZvcl9lYWNoX3BpcGUo ZGV2X3ByaXYsIHBpcGUpCisJZm9yX2VhY2hfaW50ZWxfY3J0YyhkZXYsIGNydGMpIHsKKwkJc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPQorCQkJdG9faW50ZWxfY3J0Y19zdGF0 ZShjcnRjLT5iYXNlLnN0YXRlKTsKKwkJc3RydWN0IHZsdl93bV9zdGF0ZSAqYWN0aXZlID0gJmNy dGMtPndtLmFjdGl2ZS52bHY7CisJCWNvbnN0IHN0cnVjdCB2bHZfZmlmb19zdGF0ZSAqZmlmb19z dGF0ZSA9CisJCQkmY3J0Y19zdGF0ZS0+d20udmx2LmZpZm9fc3RhdGU7CisJCWVudW0gcGlwZSBw aXBlID0gY3J0Yy0+cGlwZTsKKwkJZW51bSBwbGFuZV9pZCBwbGFuZV9pZDsKKwkJaW50IGxldmVs OworCisJCXZsdl9nZXRfZmlmb19zaXplKGNydGNfc3RhdGUpOworCisJCWFjdGl2ZS0+bnVtX2xl dmVscyA9IHdtLT5sZXZlbCArIDE7CisJCWFjdGl2ZS0+Y3hzciA9IHdtLT5jeHNyOworCisJCS8q IEZJWE1FIHNhbml0aXplIHRoaW5ncyBtb3JlICovCisJCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8 IGFjdGl2ZS0+bnVtX2xldmVsczsgbGV2ZWwrKykgeworCQkJc3RydWN0IHZsdl9waXBlX3dtICpy YXcgPQorCQkJCSZjcnRjX3N0YXRlLT53bS52bHYucmF3W2xldmVsXTsKKworCQkJYWN0aXZlLT5z cltsZXZlbF0ucGxhbmUgPSB3bS0+c3IucGxhbmU7CisJCQlhY3RpdmUtPnNyW2xldmVsXS5jdXJz b3IgPSB3bS0+c3IuY3Vyc29yOworCisJCQlmb3JfZWFjaF9wbGFuZV9pZF9vbl9jcnRjKGNydGMs IHBsYW5lX2lkKSB7CisJCQkJYWN0aXZlLT53bVtsZXZlbF0ucGxhbmVbcGxhbmVfaWRdID0KKwkJ CQkJd20tPnBpcGVbcGlwZV0ucGxhbmVbcGxhbmVfaWRdOworCisJCQkJcmF3LT5wbGFuZVtwbGFu ZV9pZF0gPQorCQkJCQl2bHZfaW52ZXJ0X3dtX3ZhbHVlKGFjdGl2ZS0+d21bbGV2ZWxdLnBsYW5l W3BsYW5lX2lkXSwKKwkJCQkJCQkgICAgZmlmb19zdGF0ZS0+cGxhbmVbcGxhbmVfaWRdKTsKKwkJ CX0KKwkJfQorCisJCWZvcl9lYWNoX3BsYW5lX2lkX29uX2NydGMoY3J0YywgcGxhbmVfaWQpCisJ CQl2bHZfcmF3X3BsYW5lX3dtX3NldChjcnRjX3N0YXRlLCBsZXZlbCwKKwkJCQkJICAgICBwbGFu ZV9pZCwgVVNIUlRfTUFYKTsKKwkJdmx2X2ludmFsaWRhdGVfd21zKGNydGMsIGFjdGl2ZSwgbGV2 ZWwpOworCisJCWNydGNfc3RhdGUtPndtLnZsdi5vcHRpbWFsID0gKmFjdGl2ZTsKKwogCQlEUk1f REVCVUdfS01TKCJJbml0aWFsIHdhdGVybWFya3M6IHBpcGUgJWMsIHBsYW5lPSVkLCBjdXJzb3I9 JWQsIHNwcml0ZTA9JWQsIHNwcml0ZTE9JWRcbiIsCiAJCQkgICAgICBwaXBlX25hbWUocGlwZSks CiAJCQkgICAgICB3bS0+cGlwZVtwaXBlXS5wbGFuZVtQTEFORV9QUklNQVJZXSwKIAkJCSAgICAg IHdtLT5waXBlW3BpcGVdLnBsYW5lW1BMQU5FX0NVUlNPUl0sCiAJCQkgICAgICB3bS0+cGlwZVtw aXBlXS5wbGFuZVtQTEFORV9TUFJJVEUwXSwKIAkJCSAgICAgIHdtLT5waXBlW3BpcGVdLnBsYW5l W1BMQU5FX1NQUklURTFdKTsKKwl9CiAKIAlEUk1fREVCVUdfS01TKCJJbml0aWFsIHdhdGVybWFy a3M6IFNSIHBsYW5lPSVkLCBTUiBjdXJzb3I9JWQgbGV2ZWw9JWQgY3hzcj0lZFxuIiwKIAkJICAg ICAgd20tPnNyLnBsYW5lLCB3bS0+c3IuY3Vyc29yLCB3bS0+bGV2ZWwsIHdtLT5jeHNyKTsKQEAg LTc3MTcsNyArNzgxOSw5IEBAIHZvaWQgaW50ZWxfaW5pdF9wbShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCiAJCX0KIAl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYp IHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7CiAJCXZsdl9zZXR1cF93bV9sYXRlbmN5KGRl dl9wcml2KTsKLQkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gdmx2X3VwZGF0ZV93bTsK KwkJZGV2X3ByaXYtPmRpc3BsYXkuY29tcHV0ZV9waXBlX3dtID0gdmx2X2NvbXB1dGVfcGlwZV93 bTsKKwkJZGV2X3ByaXYtPmRpc3BsYXkuaW5pdGlhbF93YXRlcm1hcmtzID0gdmx2X2luaXRpYWxf d2F0ZXJtYXJrczsKKwkJZGV2X3ByaXYtPmRpc3BsYXkuYXRvbWljX3VwZGF0ZV93YXRlcm1hcmtz ID0gdmx2X2F0b21pY191cGRhdGVfZmlmbzsKIAl9IGVsc2UgaWYgKElTX1BJTkVWSUVXKGRldl9w cml2KSkgewogCQlpZiAoIWludGVsX2dldF9jeHNyX2xhdGVuY3koSVNfUElORVZJRVdfRyhkZXZf cHJpdiksCiAJCQkJCSAgICBkZXZfcHJpdi0+aXNfZGRyMywKLS0gCjIuMTAuMgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==