From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lucas Stach Subject: [PATCH 06/10] drm/etnaviv: rework MMU handling Date: Wed, 19 Dec 2018 15:45:42 +0100 Message-ID: <20181219144546.28224-7-l.stach@pengutronix.de> References: <20181219144546.28224-1-l.stach@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by gabe.freedesktop.org (Postfix) with ESMTPS id 844D66EFF4 for ; Wed, 19 Dec 2018 14:45:51 +0000 (UTC) In-Reply-To: <20181219144546.28224-1-l.stach@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: etnaviv@lists.freedesktop.org Cc: patchwork-lst@pengutronix.de, kernel@pengutronix.de, dri-devel@lists.freedesktop.org, Russell King List-Id: dri-devel@lists.freedesktop.org VGhpcyByZXdvcmtzIHRoZSBNTVUgaGFuZGxpbmcgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBoYXZl IG11bHRpcGxlCk1NVSBjb250ZXh0cywgbm90IG9uZSBwZXIgR1BVLiBUaGlzIGNvbW1pdCBkb2Vz bid0IGFjdHVhbGx5IGRvIGFueXRoaW5nCndpdGggdGhvc2UgY29udGV4dHMsIGFzaWRlIGZyb20g Z2l2aW5nIG9uZSBvZiB0aGVtIHRvIGVhY2ggR1BVLgoKVGhlIGNvZGUgY2hhbmdlcyBhcmUgcHJl dHR5IGludmFzaXZlLCBidXQgdGhlcmUgaXMgbm8gc2FuZSB3YXkgdG8gc3BsaXQKdGhpcyBpbnRv IHNtYWxsZXIgY2hhbmdlcy4KClNpZ25lZC1vZmYtYnk6IEx1Y2FzIFN0YWNoIDxsLnN0YWNoQHBl bmd1dHJvbml4LmRlPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfYnVmZmVy LmMgICB8ICAgOCArLQogZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9jbWRidWYuYyAg IHwgICA4ICstCiBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2NtZGJ1Zi5oICAgfCAg IDYgKy0KIGRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZHJ2LmMgICAgICB8ICAgMSAr CiBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2Rydi5oICAgICAgfCAgIDQgKy0KIGRy aXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMgICAgICB8ICAxNCArLQogZHJpdmVy cy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uaCAgICAgIHwgICAyICstCiBkcml2ZXJzL2dw dS9kcm0vZXRuYXZpdi9ldG5hdml2X2dwdS5jICAgICAgfCAgMjQgKy0KIGRyaXZlcnMvZ3B1L2Ry bS9ldG5hdml2L2V0bmF2aXZfZ3B1LmggICAgICB8ICAgMyArLQogZHJpdmVycy9ncHUvZHJtL2V0 bmF2aXYvZXRuYXZpdl9pb21tdS5jICAgIHwgMTUwICsrKysrKy0tLS0tLQogZHJpdmVycy9ncHUv ZHJtL2V0bmF2aXYvZXRuYXZpdl9pb21tdS5oICAgIHwgIDIwIC0tCiBkcml2ZXJzL2dwdS9kcm0v ZXRuYXZpdi9ldG5hdml2X2lvbW11X3YyLmMgfCAyNjQgKysrKysrKysrLS0tLS0tLS0tLS0tCiBk cml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X21tdS5jICAgICAgfCAyMzEgKysrKysrKysr Ky0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X21tdS5oICAgICAgfCAg ODggKysrKystLQogMTQgZmlsZXMgY2hhbmdlZCwgNDE2IGluc2VydGlvbnMoKyksIDQwNyBkZWxl dGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5h dml2X2lvbW11LmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2 X2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9idWZmZXIuYwppbmRl eCBkNTJjMDFjMTk1YmQuLmUxMzQ3NjMwZmExMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2V0bmF2aXYvZXRuYXZpdl9idWZmZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9l dG5hdml2X2J1ZmZlci5jCkBAIC0yMDUsNyArMjA1LDcgQEAgdTE2IGV0bmF2aXZfYnVmZmVyX2Nv bmZpZ19tbXV2MihzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSwgdTMyIG10bGJfYWRkciwgdTMyIHNh ZmUKIAlyZXR1cm4gYnVmZmVyLT51c2VyX3NpemUgLyA4OwogfQogCi11MTYgZXRuYXZpdl9idWZm ZXJfY29uZmlnX3B0YShzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSkKK3UxNiBldG5hdml2X2J1ZmZl cl9jb25maWdfcHRhKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1LCB1bnNpZ25lZCBzaG9ydCBpZCkK IHsKIAlzdHJ1Y3QgZXRuYXZpdl9jbWRidWYgKmJ1ZmZlciA9ICZncHUtPmJ1ZmZlcjsKIApAQCAt MjE0LDcgKzIxNCw3IEBAIHUxNiBldG5hdml2X2J1ZmZlcl9jb25maWdfcHRhKHN0cnVjdCBldG5h dml2X2dwdSAqZ3B1KQogCWJ1ZmZlci0+dXNlcl9zaXplID0gMDsKIAogCUNNRF9MT0FEX1NUQVRF KGJ1ZmZlciwgVklWU19NTVV2Ml9QVEFfQ09ORklHLAotCQkgICAgICAgVklWU19NTVV2Ml9QVEFf Q09ORklHX0lOREVYKDApKTsKKwkJICAgICAgIFZJVlNfTU1VdjJfUFRBX0NPTkZJR19JTkRFWChp ZCkpOwogCiAJQ01EX0VORChidWZmZXIpOwogCkBAIC0zMzYsNyArMzM2LDcgQEAgdm9pZCBldG5h dml2X2J1ZmZlcl9xdWV1ZShzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSwgdTMyIGV4ZWNfc3RhdGUs CiAKIAkJLyogZmx1c2ggY29tbWFuZCAqLwogCQlpZiAobmVlZF9mbHVzaCkgewotCQkJaWYgKGdw dS0+bW11LT52ZXJzaW9uID09IEVUTkFWSVZfSU9NTVVfVjEpCisJCQlpZiAoZ3B1LT5tbXUtPmds b2JhbC0+dmVyc2lvbiA9PSBFVE5BVklWX0lPTU1VX1YxKQogCQkJCWV4dHJhX2R3b3JkcyArPSAx OwogCQkJZWxzZQogCQkJCWV4dHJhX2R3b3JkcyArPSAzOwpAQCAtMzUwLDcgKzM1MCw3IEBAIHZv aWQgZXRuYXZpdl9idWZmZXJfcXVldWUoc3RydWN0IGV0bmF2aXZfZ3B1ICpncHUsIHUzMiBleGVj X3N0YXRlLAogCiAJCWlmIChuZWVkX2ZsdXNoKSB7CiAJCQkvKiBBZGQgdGhlIE1NVSBmbHVzaCAq LwotCQkJaWYgKGdwdS0+bW11LT52ZXJzaW9uID09IEVUTkFWSVZfSU9NTVVfVjEpIHsKKwkJCWlm IChncHUtPm1tdS0+Z2xvYmFsLT52ZXJzaW9uID09IEVUTkFWSVZfSU9NTVVfVjEpIHsKIAkJCQlD TURfTE9BRF9TVEFURShidWZmZXIsIFZJVlNfR0xfRkxVU0hfTU1VLAogCQkJCQkgICAgICAgVklW U19HTF9GTFVTSF9NTVVfRkxVU0hfRkVNTVUgfAogCQkJCQkgICAgICAgVklWU19HTF9GTFVTSF9N TVVfRkxVU0hfVU5LMSB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5h dml2X2NtZGJ1Zi5jIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9jbWRidWYuYwpp bmRleCBhMDFhZTMyZGNkODguLjRkN2EyMzQxZTExYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2V0bmF2aXYvZXRuYXZpdl9jbWRidWYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZp di9ldG5hdml2X2NtZGJ1Zi5jCkBAIC01NywxOCArNTcsMTggQEAgZXRuYXZpdl9jbWRidWZfc3Vi YWxsb2NfbmV3KHN0cnVjdCBkZXZpY2UgKmRldikKIH0KIAogaW50IGV0bmF2aXZfY21kYnVmX3N1 YmFsbG9jX21hcChzdHJ1Y3QgZXRuYXZpdl9jbWRidWZfc3ViYWxsb2MgKnN1YmFsbG9jLAotCQkJ CXN0cnVjdCBldG5hdml2X2lvbW11ICptbXUsCisJCQkJc3RydWN0IGV0bmF2aXZfaW9tbXVfY29u dGV4dCAqY29udGV4dCwKIAkJCQlzdHJ1Y3QgZXRuYXZpdl92cmFtX21hcHBpbmcgKm1hcHBpbmcs CiAJCQkJdTMyIG1lbW9yeV9iYXNlKQogewotCXJldHVybiBldG5hdml2X2lvbW11X2dldF9zdWJh bGxvY192YShtbXUsIG1hcHBpbmcsIG1lbW9yeV9iYXNlLAorCXJldHVybiBldG5hdml2X2lvbW11 X2dldF9zdWJhbGxvY192YShjb250ZXh0LCBtYXBwaW5nLCBtZW1vcnlfYmFzZSwKIAkJCQkJICAg ICBzdWJhbGxvYy0+cGFkZHIsIFNVQkFMTE9DX1NJWkUpOwogfQogCi12b2lkIGV0bmF2aXZfY21k YnVmX3N1YmFsbG9jX3VubWFwKHN0cnVjdCBldG5hdml2X2lvbW11ICptbXUsCit2b2lkIGV0bmF2 aXZfY21kYnVmX3N1YmFsbG9jX3VubWFwKHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNv bnRleHQsCiAJCQkJICAgc3RydWN0IGV0bmF2aXZfdnJhbV9tYXBwaW5nICptYXBwaW5nKQogewot CWV0bmF2aXZfaW9tbXVfcHV0X3N1YmFsbG9jX3ZhKG1tdSwgbWFwcGluZyk7CisJZXRuYXZpdl9p b21tdV9wdXRfc3ViYWxsb2NfdmEoY29udGV4dCwgbWFwcGluZyk7CiB9CiAKIHZvaWQgZXRuYXZp dl9jbWRidWZfc3ViYWxsb2NfZGVzdHJveShzdHJ1Y3QgZXRuYXZpdl9jbWRidWZfc3ViYWxsb2Mg KnN1YmFsbG9jKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9j bWRidWYuaCBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfY21kYnVmLmgKaW5kZXgg N2ZkYzJlM2ZlYTVmLi5iNTlkZmZiOGQ5NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9l dG5hdml2L2V0bmF2aXZfY21kYnVmLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRu YXZpdl9jbWRidWYuaApAQCAtOSw3ICs5LDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgog CiBzdHJ1Y3QgZGV2aWNlOwotc3RydWN0IGV0bmF2aXZfaW9tbXU7CitzdHJ1Y3QgZXRuYXZpdl9p b21tdV9jb250ZXh0Owogc3RydWN0IGV0bmF2aXZfdnJhbV9tYXBwaW5nOwogc3RydWN0IGV0bmF2 aXZfY21kYnVmX3N1YmFsbG9jOwogCkBAIC0yNywxMCArMjcsMTAgQEAgc3RydWN0IGV0bmF2aXZf Y21kYnVmX3N1YmFsbG9jICoKIGV0bmF2aXZfY21kYnVmX3N1YmFsbG9jX25ldyhzdHJ1Y3QgZGV2 aWNlICpkZXYpOwogdm9pZCBldG5hdml2X2NtZGJ1Zl9zdWJhbGxvY19kZXN0cm95KHN0cnVjdCBl dG5hdml2X2NtZGJ1Zl9zdWJhbGxvYyAqc3ViYWxsb2MpOwogaW50IGV0bmF2aXZfY21kYnVmX3N1 YmFsbG9jX21hcChzdHJ1Y3QgZXRuYXZpdl9jbWRidWZfc3ViYWxsb2MgKnN1YmFsbG9jLAotCQkJ CXN0cnVjdCBldG5hdml2X2lvbW11ICptbXUsCisJCQkJc3RydWN0IGV0bmF2aXZfaW9tbXVfY29u dGV4dCAqY29udGV4dCwKIAkJCQlzdHJ1Y3QgZXRuYXZpdl92cmFtX21hcHBpbmcgKm1hcHBpbmcs CiAJCQkJdTMyIG1lbW9yeV9iYXNlKTsKLXZvaWQgZXRuYXZpdl9jbWRidWZfc3ViYWxsb2NfdW5t YXAoc3RydWN0IGV0bmF2aXZfaW9tbXUgKm1tdSwKK3ZvaWQgZXRuYXZpdl9jbWRidWZfc3ViYWxs b2NfdW5tYXAoc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dCwKIAkJCQkgICBz dHJ1Y3QgZXRuYXZpdl92cmFtX21hcHBpbmcgKm1hcHBpbmcpOwogCiAKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZXRu YXZpdi9ldG5hdml2X2Rydi5jCmluZGV4IGI2OGMyOGU5OTRjOS4uMTAzNzQ1ZDhmNTRjIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2Rydi5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZHJ2LmMKQEAgLTU2NSw2ICs1NjUsNyBAQCBzdGF0 aWMgdm9pZCBldG5hdml2X3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiAKIAljb21wb25lbnRf dW5iaW5kX2FsbChkZXYsIGRybSk7CiAKKwlldG5hdml2X2lvbW11X2dsb2JhbF9maW5pKHByaXYt Pm1tdV9nbG9iYWwpOwogCWV0bmF2aXZfY21kYnVmX3N1YmFsbG9jX2Rlc3Ryb3kocHJpdi0+Y21k YnVmX3N1YmFsbG9jKTsKIAogCWRybS0+ZGV2X3ByaXZhdGUgPSBOVUxMOwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9l dG5hdml2L2V0bmF2aXZfZHJ2LmgKaW5kZXggNWMxYjZlYTI1ZTU5Li5kYTkzM2Y0MTY4OGYgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZHJ2LmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9kcnYuaApAQCAtMzIsNiArMzIsNyBAQCBzdHJ1 Y3QgZXRuYXZpdl9ncHU7CiBzdHJ1Y3QgZXRuYXZpdl9tbXU7CiBzdHJ1Y3QgZXRuYXZpdl9nZW1f b2JqZWN0Owogc3RydWN0IGV0bmF2aXZfZ2VtX3N1Ym1pdDsKK3N0cnVjdCBldG5hdml2X2lvbW11 X2dsb2JhbDsKIAogc3RydWN0IGV0bmF2aXZfZmlsZV9wcml2YXRlIHsKIAkvKgpAQCAtNDYsNiAr NDcsNyBAQCBzdHJ1Y3QgZXRuYXZpdl9kcm1fcHJpdmF0ZSB7CiAJc3RydWN0IGV0bmF2aXZfZ3B1 ICpncHVbRVROQV9NQVhfUElQRVNdOwogCiAJc3RydWN0IGV0bmF2aXZfY21kYnVmX3N1YmFsbG9j ICpjbWRidWZfc3ViYWxsb2M7CisJc3RydWN0IGV0bmF2aXZfaW9tbXVfZ2xvYmFsICptbXVfZ2xv YmFsOwogCiAJLyogbGlzdCBvZiBHRU0gb2JqZWN0czogKi8KIAlzdHJ1Y3QgbXV0ZXggZ2VtX2xv Y2s7CkBAIC03OSw3ICs4MSw3IEBAIGludCBldG5hdml2X2dlbV9uZXdfdXNlcnB0cihzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCiAJdWludHB0cl90IHB0ciwg dTMyIHNpemUsIHUzMiBmbGFncywgdTMyICpoYW5kbGUpOwogdTE2IGV0bmF2aXZfYnVmZmVyX2lu aXQoc3RydWN0IGV0bmF2aXZfZ3B1ICpncHUpOwogdTE2IGV0bmF2aXZfYnVmZmVyX2NvbmZpZ19t bXV2MihzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSwgdTMyIG10bGJfYWRkciwgdTMyIHNhZmVfYWRk cik7Ci11MTYgZXRuYXZpdl9idWZmZXJfY29uZmlnX3B0YShzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdw dSk7Cit1MTYgZXRuYXZpdl9idWZmZXJfY29uZmlnX3B0YShzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdw dSwgdW5zaWduZWQgc2hvcnQgaWQpOwogdm9pZCBldG5hdml2X2J1ZmZlcl9lbmQoc3RydWN0IGV0 bmF2aXZfZ3B1ICpncHUpOwogdm9pZCBldG5hdml2X3N5bmNfcG9pbnRfcXVldWUoc3RydWN0IGV0 bmF2aXZfZ3B1ICpncHUsIHVuc2lnbmVkIGludCBldmVudCk7CiB2b2lkIGV0bmF2aXZfYnVmZmVy X3F1ZXVlKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1LCB1MzIgZXhlY19zdGF0ZSwKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMgYi9kcml2ZXJzL2dwdS9k cm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jCmluZGV4IDFmYTc0MjI2ZGI5MS4uYzk1ZGViYTZmNjY4 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMKQEAgLTIyMiwxMiArMjIyLDEy IEBAIGludCBldG5hdml2X2dlbV9tbWFwX29mZnNldChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aiwgdTY0ICpvZmZzZXQpCiAKIHN0YXRpYyBzdHJ1Y3QgZXRuYXZpdl92cmFtX21hcHBpbmcgKgog ZXRuYXZpdl9nZW1fZ2V0X3ZyYW1fbWFwcGluZyhzdHJ1Y3QgZXRuYXZpdl9nZW1fb2JqZWN0ICpv YmosCi0JCQkgICAgIHN0cnVjdCBldG5hdml2X2lvbW11ICptbXUpCisJCQkgICAgIHN0cnVjdCBl dG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQpCiB7CiAJc3RydWN0IGV0bmF2aXZfdnJhbV9t YXBwaW5nICptYXBwaW5nOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtYXBwaW5nLCAmb2JqLT52 cmFtX2xpc3QsIG9ial9ub2RlKSB7Ci0JCWlmIChtYXBwaW5nLT5tbXUgPT0gbW11KQorCQlpZiAo bWFwcGluZy0+Y29udGV4dCA9PSBjb250ZXh0KQogCQkJcmV0dXJuIG1hcHBpbmc7CiAJfQogCkBA IC0yNzcsNyArMjc3LDcgQEAgc3RydWN0IGV0bmF2aXZfdnJhbV9tYXBwaW5nICpldG5hdml2X2dl bV9tYXBwaW5nX2dldCgKIAkJICovCiAJCWlmIChtYXBwaW5nLT51c2UgPT0gMCkgewogCQkJbXV0 ZXhfbG9jaygmZ3B1LT5tbXUtPmxvY2spOwotCQkJaWYgKG1hcHBpbmctPm1tdSA9PSBncHUtPm1t dSkKKwkJCWlmIChtYXBwaW5nLT5jb250ZXh0ID09IGdwdS0+bW11KQogCQkJCW1hcHBpbmctPnVz ZSArPSAxOwogCQkJZWxzZQogCQkJCW1hcHBpbmcgPSBOVUxMOwpAQCAtMzE0LDcgKzMxNCw3IEBA IHN0cnVjdCBldG5hdml2X3ZyYW1fbWFwcGluZyAqZXRuYXZpdl9nZW1fbWFwcGluZ19nZXQoCiAJ CWxpc3RfZGVsKCZtYXBwaW5nLT5vYmpfbm9kZSk7CiAJfQogCi0JbWFwcGluZy0+bW11ID0gZ3B1 LT5tbXU7CisJbWFwcGluZy0+Y29udGV4dCA9IGdwdS0+bW11OwogCW1hcHBpbmctPnVzZSA9IDE7 CiAKIAlyZXQgPSBldG5hdml2X2lvbW11X21hcF9nZW0oZ3B1LT5tbXUsIGV0bmF2aXZfb2JqLCBn cHUtPm1lbW9yeV9iYXNlLApAQCAtNTM2LDEyICs1MzYsMTIgQEAgdm9pZCBldG5hdml2X2dlbV9m cmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKIAogCWxpc3RfZm9yX2VhY2hf ZW50cnlfc2FmZShtYXBwaW5nLCB0bXAsICZldG5hdml2X29iai0+dnJhbV9saXN0LAogCQkJCSBv Ympfbm9kZSkgewotCQlzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11ID0gbWFwcGluZy0+bW11Owor CQlzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICpjb250ZXh0ID0gbWFwcGluZy0+Y29udGV4 dDsKIAogCQlXQVJOX09OKG1hcHBpbmctPnVzZSk7CiAKLQkJaWYgKG1tdSkKLQkJCWV0bmF2aXZf aW9tbXVfdW5tYXBfZ2VtKG1tdSwgbWFwcGluZyk7CisJCWlmIChjb250ZXh0KQorCQkJZXRuYXZp dl9pb21tdV91bm1hcF9nZW0oY29udGV4dCwgbWFwcGluZyk7CiAKIAkJbGlzdF9kZWwoJm1hcHBp bmctPm9ial9ub2RlKTsKIAkJa2ZyZWUobWFwcGluZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5oIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRu YXZpdl9nZW0uaAppbmRleCBmMGFiYjc0NGVmOTUuLmNmOTRmMGIyNDU4NCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uaAorKysgYi9kcml2ZXJzL2dwdS9k cm0vZXRuYXZpdi9ldG5hdml2X2dlbS5oCkBAIC0yNSw3ICsyNSw3IEBAIHN0cnVjdCBldG5hdml2 X3ZyYW1fbWFwcGluZyB7CiAJc3RydWN0IGxpc3RfaGVhZCBzY2FuX25vZGU7CiAJc3RydWN0IGxp c3RfaGVhZCBtbXVfbm9kZTsKIAlzdHJ1Y3QgZXRuYXZpdl9nZW1fb2JqZWN0ICpvYmplY3Q7Ci0J c3RydWN0IGV0bmF2aXZfaW9tbXUgKm1tdTsKKwlzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0 ICpjb250ZXh0OwogCXN0cnVjdCBkcm1fbW1fbm9kZSB2cmFtX25vZGU7CiAJdW5zaWduZWQgaW50 IHVzZTsKIAl1MzIgaW92YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0 bmF2aXZfZ3B1LmMgYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dwdS5jCmluZGV4 IDcwMzUxNTY4YjNhNC4uMjg3OTk1YzU4MTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v ZXRuYXZpdi9ldG5hdml2X2dwdS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2 aXZfZ3B1LmMKQEAgLTY3OSw3ICs2NzksNyBAQCBzdGF0aWMgdm9pZCBldG5hdml2X2dwdV9od19p bml0KHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1KQogCWV0bmF2aXZfZ3B1X3NldHVwX3B1bHNlX2Vh dGVyKGdwdSk7CiAKIAkvKiBzZXR1cCB0aGUgTU1VICovCi0JZXRuYXZpdl9pb21tdV9yZXN0b3Jl KGdwdSk7CisJZXRuYXZpdl9pb21tdV9yZXN0b3JlKGdwdSwgZ3B1LT5tbXUpOwogCiAJLyogU3Rh cnQgY29tbWFuZCBwcm9jZXNzb3IgKi8KIAlwcmVmZXRjaCA9IGV0bmF2aXZfYnVmZmVyX2luaXQo Z3B1KTsKQEAgLTY5MSw2ICs2OTEsNyBAQCBzdGF0aWMgdm9pZCBldG5hdml2X2dwdV9od19pbml0 KHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1KQogCiBpbnQgZXRuYXZpdl9ncHVfaW5pdChzdHJ1Y3Qg ZXRuYXZpdl9kcm1fcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGV0bmF2aXZfZ3B1ICpncHUpCiB7CisJ ZW51bSBldG5hdml2X2lvbW11X3ZlcnNpb24gbW11X3ZlcnNpb24gPSBFVE5BVklWX0lPTU1VX1Yx OwogCWludCByZXQsIGk7CiAKIAlyZXQgPSBwbV9ydW50aW1lX2dldF9zeW5jKGdwdS0+ZGV2KTsK QEAgLTc1MSw3ICs3NTIsMjAgQEAgaW50IGV0bmF2aXZfZ3B1X2luaXQoc3RydWN0IGV0bmF2aXZf ZHJtX3ByaXZhdGUgKnByaXYsIHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1KQogCQlnb3RvIGZhaWw7 CiAJfQogCi0JZ3B1LT5tbXUgPSBldG5hdml2X2lvbW11X25ldyhncHUpOworCWlmIChncHUtPmlk ZW50aXR5Lm1pbm9yX2ZlYXR1cmVzMSAmIGNoaXBNaW5vckZlYXR1cmVzMV9NTVVfVkVSU0lPTikK KwkJbW11X3ZlcnNpb24gPSBFVE5BVklWX0lPTU1VX1YyOworCisJaWYgKCFwcml2LT5tbXVfZ2xv YmFsKQorCQlwcml2LT5tbXVfZ2xvYmFsID0gZXRuYXZpdl9pb21tdV9nbG9iYWxfaW5pdChncHUt PmRybS0+ZGV2LAorCQkJCQkJCSAgICAgbW11X3ZlcnNpb24pOworCisJaWYgKCFwcml2LT5tbXVf Z2xvYmFsIHx8IHByaXYtPm1tdV9nbG9iYWwtPnZlcnNpb24gIT0gbW11X3ZlcnNpb24pIHsKKwkJ cmV0ID0gLUVOWElPOworCQlkZXZfZXJyKGdwdS0+ZGV2LCAiZmFpbGVkIHRvIGluaXQgSU9NTVUg Z2xvYmFsIHN0YXRlXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCWdwdS0+bW11ID0gZXRuYXZp dl9pb21tdV9jb250ZXh0X2luaXQocHJpdi0+bW11X2dsb2JhbCk7CiAJaWYgKElTX0VSUihncHUt Pm1tdSkpIHsKIAkJZGV2X2VycihncHUtPmRldiwgIkZhaWxlZCB0byBpbnN0YW50aWF0ZSBHUFUg SU9NTVVcbiIpOwogCQlyZXQgPSBQVFJfRVJSKGdwdS0+bW11KTsKQEAgLTc3NCw3ICs3ODgsNyBA QCBpbnQgZXRuYXZpdl9ncHVfaW5pdChzdHJ1Y3QgZXRuYXZpdl9kcm1fcHJpdmF0ZSAqcHJpdiwg c3RydWN0IGV0bmF2aXZfZ3B1ICpncHUpCiAJCWdvdG8gdW5tYXBfc3ViYWxsb2M7CiAJfQogCi0J aWYgKGdwdS0+bW11LT52ZXJzaW9uID09IEVUTkFWSVZfSU9NTVVfVjEgJiYKKwlpZiAobW11X3Zl cnNpb24gPT0gRVROQVZJVl9JT01NVV9WMSAmJgogCSAgICBldG5hdml2X2NtZGJ1Zl9nZXRfdmEo JmdwdS0+YnVmZmVyLCAmZ3B1LT5jbWRidWZfbWFwcGluZykgPiAweDgwMDAwMDAwKSB7CiAJCXJl dCA9IC1FSU5WQUw7CiAJCWRldl9lcnIoZ3B1LT5kZXYsCkBAIC04MDYsNyArODIwLDcgQEAgaW50 IGV0bmF2aXZfZ3B1X2luaXQoc3RydWN0IGV0bmF2aXZfZHJtX3ByaXZhdGUgKnByaXYsIHN0cnVj dCBldG5hdml2X2dwdSAqZ3B1KQogdW5tYXBfc3ViYWxsb2M6CiAJZXRuYXZpdl9jbWRidWZfc3Vi YWxsb2NfdW5tYXAoZ3B1LT5tbXUsICZncHUtPmNtZGJ1Zl9tYXBwaW5nKTsKIGRlc3Ryb3lfaW9t bXU6Ci0JZXRuYXZpdl9pb21tdV9kZXN0cm95KGdwdS0+bW11KTsKKwlldG5hdml2X2lvbW11X2Nv bnRleHRfcHV0KGdwdS0+bW11KTsKIAlncHUtPm1tdSA9IE5VTEw7CiBmYWlsOgogCXBtX3J1bnRp bWVfbWFya19sYXN0X2J1c3koZ3B1LT5kZXYpOwpAQCAtMTY4NSw3ICsxNjk5LDcgQEAgc3RhdGlj IHZvaWQgZXRuYXZpdl9ncHVfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmlj ZSAqbWFzdGVyLAogCQlldG5hdml2X2NtZGJ1Zl9zdWJhbGxvY191bm1hcChncHUtPm1tdSwgJmdw dS0+Y21kYnVmX21hcHBpbmcpOwogCiAJaWYgKGdwdS0+bW11KSB7Ci0JCWV0bmF2aXZfaW9tbXVf ZGVzdHJveShncHUtPm1tdSk7CisJCWV0bmF2aXZfaW9tbXVfY29udGV4dF9wdXQoZ3B1LT5tbXUp OwogCQlncHUtPm1tdSA9IE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v ZXRuYXZpdi9ldG5hdml2X2dwdS5oIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9n cHUuaAppbmRleCA5YWIwYjQ1NDhlNTUuLjUwZjAzZWU1NTUwMCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9ncHUuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZXRu YXZpdi9ldG5hdml2X2dwdS5oCkBAIC04LDYgKzgsNyBAQAogCiAjaW5jbHVkZSAiZXRuYXZpdl9j bWRidWYuaCIKICNpbmNsdWRlICJldG5hdml2X2dlbS5oIgorI2luY2x1ZGUgImV0bmF2aXZfbW11 LmgiCiAjaW5jbHVkZSAiZXRuYXZpdl9kcnYuaCIKIAogc3RydWN0IGV0bmF2aXZfZ2VtX3N1Ym1p dDsKQEAgLTEzNSw3ICsxMzYsNyBAQCBzdHJ1Y3QgZXRuYXZpdl9ncHUgewogCXZvaWQgX19pb21l bSAqbW1pbzsKIAlpbnQgaXJxOwogCi0Jc3RydWN0IGV0bmF2aXZfaW9tbXUgKm1tdTsKKwlzdHJ1 Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICptbXU7CiAJdW5zaWduZWQgaW50IGZsdXNoX3NlcTsK IAogCS8qIFBvd2VyIENvbnRyb2w6ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXRu YXZpdi9ldG5hdml2X2lvbW11LmMgYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2lv bW11LmMKaW5kZXggYjE2M2JkYmNiODgwLi5jOTNhYTBiMWFkOWUgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfaW9tbXUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v ZXRuYXZpdi9ldG5hdml2X2lvbW11LmMKQEAgLTExLDcgKzExLDYgQEAKIAogI2luY2x1ZGUgImV0 bmF2aXZfZ3B1LmgiCiAjaW5jbHVkZSAiZXRuYXZpdl9tbXUuaCIKLSNpbmNsdWRlICJldG5hdml2 X2lvbW11LmgiCiAjaW5jbHVkZSAic3RhdGVfaGkueG1sLmgiCiAKICNkZWZpbmUgUFRfU0laRQkJ U1pfMk0KQEAgLTE5LDExMyArMTgsNzggQEAKIAogI2RlZmluZSBHUFVfTUVNX1NUQVJUCTB4ODAw MDAwMDAKIAotc3RydWN0IGV0bmF2aXZfaW9tbXV2MV9kb21haW4gewotCXN0cnVjdCBldG5hdml2 X2lvbW11X2RvbWFpbiBiYXNlOworc3RydWN0IGV0bmF2aXZfaW9tbXV2MV9jb250ZXh0IHsKKwlz dHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0IGJhc2U7CiAJdTMyICpwZ3RhYmxlX2NwdTsKIAlk bWFfYWRkcl90IHBndGFibGVfZG1hOwogfTsKIAotc3RhdGljIHN0cnVjdCBldG5hdml2X2lvbW11 djFfZG9tYWluICoKLXRvX2V0bmF2aXZfZG9tYWluKHN0cnVjdCBldG5hdml2X2lvbW11X2RvbWFp biAqZG9tYWluKQorc3RhdGljIHN0cnVjdCBldG5hdml2X2lvbW11djFfY29udGV4dCAqCit0b192 MV9jb250ZXh0KHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQpCiB7Ci0JcmV0 dXJuIGNvbnRhaW5lcl9vZihkb21haW4sIHN0cnVjdCBldG5hdml2X2lvbW11djFfZG9tYWluLCBi YXNlKTsKKwlyZXR1cm4gY29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBldG5hdml2X2lvbW11 djFfY29udGV4dCwgYmFzZSk7CiB9CiAKLXN0YXRpYyBpbnQgX19ldG5hdml2X2lvbW11X2luaXQo c3RydWN0IGV0bmF2aXZfaW9tbXV2MV9kb21haW4gKmV0bmF2aXZfZG9tYWluKQorc3RhdGljIHZv aWQgZXRuYXZpdl9pb21tdXYxX2ZyZWUoc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY29u dGV4dCkKIHsKLQl1MzIgKnA7Ci0JaW50IGk7Ci0KLQlldG5hdml2X2RvbWFpbi0+YmFzZS5iYWRf cGFnZV9jcHUgPQotCQkJZG1hX2FsbG9jX3djKGV0bmF2aXZfZG9tYWluLT5iYXNlLmRldiwgU1pf NEssCi0JCQkJICAgICAmZXRuYXZpdl9kb21haW4tPmJhc2UuYmFkX3BhZ2VfZG1hLAotCQkJCSAg ICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFldG5hdml2X2RvbWFpbi0+YmFzZS5iYWRfcGFnZV9jcHUp Ci0JCXJldHVybiAtRU5PTUVNOwotCi0JcCA9IGV0bmF2aXZfZG9tYWluLT5iYXNlLmJhZF9wYWdl X2NwdTsKLQlmb3IgKGkgPSAwOyBpIDwgU1pfNEsgLyA0OyBpKyspCi0JCSpwKysgPSAweGRlYWQ1 NWFhOwotCi0JZXRuYXZpdl9kb21haW4tPnBndGFibGVfY3B1ID0gZG1hX2FsbG9jX3djKGV0bmF2 aXZfZG9tYWluLT5iYXNlLmRldiwKLQkJCQkJCSAgIFBUX1NJWkUsCi0JCQkJCQkgICAmZXRuYXZp dl9kb21haW4tPnBndGFibGVfZG1hLAotCQkJCQkJICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFldG5h dml2X2RvbWFpbi0+cGd0YWJsZV9jcHUpIHsKLQkJZG1hX2ZyZWVfd2MoZXRuYXZpdl9kb21haW4t PmJhc2UuZGV2LCBTWl80SywKLQkJCSAgICBldG5hdml2X2RvbWFpbi0+YmFzZS5iYWRfcGFnZV9j cHUsCi0JCQkgICAgZXRuYXZpdl9kb21haW4tPmJhc2UuYmFkX3BhZ2VfZG1hKTsKLQkJcmV0dXJu IC1FTk9NRU07Ci0JfQotCi0JbWVtc2V0MzIoZXRuYXZpdl9kb21haW4tPnBndGFibGVfY3B1LCBl dG5hdml2X2RvbWFpbi0+YmFzZS5iYWRfcGFnZV9kbWEsCi0JCSBQVF9FTlRSSUVTKTsKLQotCXJl dHVybiAwOwotfQorCXN0cnVjdCBldG5hdml2X2lvbW11djFfY29udGV4dCAqdjFfY29udGV4dCA9 IHRvX3YxX2NvbnRleHQoY29udGV4dCk7CiAKLXN0YXRpYyB2b2lkIGV0bmF2aXZfaW9tbXV2MV9k b21haW5fZnJlZShzdHJ1Y3QgZXRuYXZpdl9pb21tdV9kb21haW4gKmRvbWFpbikKLXsKLQlzdHJ1 Y3QgZXRuYXZpdl9pb21tdXYxX2RvbWFpbiAqZXRuYXZpdl9kb21haW4gPQotCQkJdG9fZXRuYXZp dl9kb21haW4oZG9tYWluKTsKKwlkcm1fbW1fdGFrZWRvd24oJmNvbnRleHQtPm1tKTsKIAotCWRt YV9mcmVlX3djKGV0bmF2aXZfZG9tYWluLT5iYXNlLmRldiwgUFRfU0laRSwKLQkJICAgIGV0bmF2 aXZfZG9tYWluLT5wZ3RhYmxlX2NwdSwgZXRuYXZpdl9kb21haW4tPnBndGFibGVfZG1hKTsKKwlk bWFfZnJlZV93Yyhjb250ZXh0LT5nbG9iYWwtPmRldiwgUFRfU0laRSwgdjFfY29udGV4dC0+cGd0 YWJsZV9jcHUsCisJCSAgICB2MV9jb250ZXh0LT5wZ3RhYmxlX2RtYSk7CiAKLQlkbWFfZnJlZV93 YyhldG5hdml2X2RvbWFpbi0+YmFzZS5kZXYsIFNaXzRLLAotCQkgICAgZXRuYXZpdl9kb21haW4t PmJhc2UuYmFkX3BhZ2VfY3B1LAotCQkgICAgZXRuYXZpdl9kb21haW4tPmJhc2UuYmFkX3BhZ2Vf ZG1hKTsKKwljb250ZXh0LT5nbG9iYWwtPnYxLnNoYXJlZF9jb250ZXh0ID0gTlVMTDsKIAotCWtm cmVlKGV0bmF2aXZfZG9tYWluKTsKKwlrZnJlZSh2MV9jb250ZXh0KTsKIH0KIAotc3RhdGljIGlu dCBldG5hdml2X2lvbW11djFfbWFwKHN0cnVjdCBldG5hdml2X2lvbW11X2RvbWFpbiAqZG9tYWlu LAorc3RhdGljIGludCBldG5hdml2X2lvbW11djFfbWFwKHN0cnVjdCBldG5hdml2X2lvbW11X2Nv bnRleHQgKmNvbnRleHQsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBpb3ZhLCBwaHlzX2FkZHJf dCBwYWRkciwKIAkJCSAgICAgICBzaXplX3Qgc2l6ZSwgaW50IHByb3QpCiB7Ci0Jc3RydWN0IGV0 bmF2aXZfaW9tbXV2MV9kb21haW4gKmV0bmF2aXZfZG9tYWluID0gdG9fZXRuYXZpdl9kb21haW4o ZG9tYWluKTsKKwlzdHJ1Y3QgZXRuYXZpdl9pb21tdXYxX2NvbnRleHQgKnYxX2NvbnRleHQgPSB0 b192MV9jb250ZXh0KGNvbnRleHQpOwogCXVuc2lnbmVkIGludCBpbmRleCA9IChpb3ZhIC0gR1BV X01FTV9TVEFSVCkgLyBTWl80SzsKIAogCWlmIChzaXplICE9IFNaXzRLKQogCQlyZXR1cm4gLUVJ TlZBTDsKIAotCWV0bmF2aXZfZG9tYWluLT5wZ3RhYmxlX2NwdVtpbmRleF0gPSBwYWRkcjsKKwl2 MV9jb250ZXh0LT5wZ3RhYmxlX2NwdVtpbmRleF0gPSBwYWRkcjsKIAogCXJldHVybiAwOwogfQog Ci1zdGF0aWMgc2l6ZV90IGV0bmF2aXZfaW9tbXV2MV91bm1hcChzdHJ1Y3QgZXRuYXZpdl9pb21t dV9kb21haW4gKmRvbWFpbiwKK3N0YXRpYyBzaXplX3QgZXRuYXZpdl9pb21tdXYxX3VubWFwKHN0 cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQsCiAJdW5zaWduZWQgbG9uZyBpb3Zh LCBzaXplX3Qgc2l6ZSkKIHsKLQlzdHJ1Y3QgZXRuYXZpdl9pb21tdXYxX2RvbWFpbiAqZXRuYXZp dl9kb21haW4gPQotCQkJdG9fZXRuYXZpdl9kb21haW4oZG9tYWluKTsKKwlzdHJ1Y3QgZXRuYXZp dl9pb21tdXYxX2NvbnRleHQgKnYxX2NvbnRleHQgPSB0b192MV9jb250ZXh0KGNvbnRleHQpOwog CXVuc2lnbmVkIGludCBpbmRleCA9IChpb3ZhIC0gR1BVX01FTV9TVEFSVCkgLyBTWl80SzsKIAog CWlmIChzaXplICE9IFNaXzRLKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWV0bmF2aXZfZG9tYWlu LT5wZ3RhYmxlX2NwdVtpbmRleF0gPSBldG5hdml2X2RvbWFpbi0+YmFzZS5iYWRfcGFnZV9kbWE7 CisJdjFfY29udGV4dC0+cGd0YWJsZV9jcHVbaW5kZXhdID0gY29udGV4dC0+Z2xvYmFsLT5iYWRf cGFnZV9kbWE7CiAKIAlyZXR1cm4gU1pfNEs7CiB9CiAKLXN0YXRpYyBzaXplX3QgZXRuYXZpdl9p b21tdXYxX2R1bXBfc2l6ZShzdHJ1Y3QgZXRuYXZpdl9pb21tdV9kb21haW4gKmRvbWFpbikKK3N0 YXRpYyBzaXplX3QgZXRuYXZpdl9pb21tdXYxX2R1bXBfc2l6ZShzdHJ1Y3QgZXRuYXZpdl9pb21t dV9jb250ZXh0ICpjb250ZXh0KQogewogCXJldHVybiBQVF9TSVpFOwogfQogCi1zdGF0aWMgdm9p ZCBldG5hdml2X2lvbW11djFfZHVtcChzdHJ1Y3QgZXRuYXZpdl9pb21tdV9kb21haW4gKmRvbWFp biwgdm9pZCAqYnVmKQorc3RhdGljIHZvaWQgZXRuYXZpdl9pb21tdXYxX2R1bXAoc3RydWN0IGV0 bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dCwKKwkJCQkgdm9pZCAqYnVmKQogewotCXN0cnVj dCBldG5hdml2X2lvbW11djFfZG9tYWluICpldG5hdml2X2RvbWFpbiA9Ci0JCQl0b19ldG5hdml2 X2RvbWFpbihkb21haW4pOworCXN0cnVjdCBldG5hdml2X2lvbW11djFfY29udGV4dCAqdjFfY29u dGV4dCA9IHRvX3YxX2NvbnRleHQoY29udGV4dCk7CiAKLQltZW1jcHkoYnVmLCBldG5hdml2X2Rv bWFpbi0+cGd0YWJsZV9jcHUsIFBUX1NJWkUpOworCW1lbWNweShidWYsIHYxX2NvbnRleHQtPnBn dGFibGVfY3B1LCBQVF9TSVpFKTsKIH0KIAotdm9pZCBldG5hdml2X2lvbW11djFfcmVzdG9yZShz dHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSkKK3N0YXRpYyB2b2lkIGV0bmF2aXZfaW9tbXV2MV9yZXN0 b3JlKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1LAorCQkJICAgICBzdHJ1Y3QgZXRuYXZpdl9pb21t dV9jb250ZXh0ICpjb250ZXh0KQogewotCXN0cnVjdCBldG5hdml2X2lvbW11djFfZG9tYWluICpl dG5hdml2X2RvbWFpbiA9Ci0JCQl0b19ldG5hdml2X2RvbWFpbihncHUtPm1tdS0+ZG9tYWluKTsK KwlzdHJ1Y3QgZXRuYXZpdl9pb21tdXYxX2NvbnRleHQgKnYxX2NvbnRleHQgPSB0b192MV9jb250 ZXh0KGNvbnRleHQpOwogCXUzMiBwZ3RhYmxlOwogCiAJLyogc2V0IGJhc2UgYWRkcmVzc2VzICov CkBAIC0xMzYsNyArMTAwLDcgQEAgdm9pZCBldG5hdml2X2lvbW11djFfcmVzdG9yZShzdHJ1Y3Qg ZXRuYXZpdl9ncHUgKmdwdSkKIAlncHVfd3JpdGUoZ3B1LCBWSVZTX01DX01FTU9SWV9CQVNFX0FE RFJfUEUsIGdwdS0+bWVtb3J5X2Jhc2UpOwogCiAJLyogc2V0IHBhZ2UgdGFibGUgYWRkcmVzcyBp biBNQyAqLwotCXBndGFibGUgPSAodTMyKWV0bmF2aXZfZG9tYWluLT5wZ3RhYmxlX2RtYTsKKwlw Z3RhYmxlID0gKHUzMil2MV9jb250ZXh0LT5wZ3RhYmxlX2RtYTsKIAogCWdwdV93cml0ZShncHUs IFZJVlNfTUNfTU1VX0ZFX1BBR0VfVEFCTEUsIHBndGFibGUpOwogCWdwdV93cml0ZShncHUsIFZJ VlNfTUNfTU1VX1RYX1BBR0VfVEFCTEUsIHBndGFibGUpOwpAQCAtMTQ1LDM5ICsxMDksNjEgQEAg dm9pZCBldG5hdml2X2lvbW11djFfcmVzdG9yZShzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSkKIAln cHVfd3JpdGUoZ3B1LCBWSVZTX01DX01NVV9SQV9QQUdFX1RBQkxFLCBwZ3RhYmxlKTsKIH0KIAot c3RhdGljIGNvbnN0IHN0cnVjdCBldG5hdml2X2lvbW11X2RvbWFpbl9vcHMgZXRuYXZpdl9pb21t dXYxX29wcyA9IHsKLQkuZnJlZSA9IGV0bmF2aXZfaW9tbXV2MV9kb21haW5fZnJlZSwKKworY29u c3Qgc3RydWN0IGV0bmF2aXZfaW9tbXVfb3BzIGV0bmF2aXZfaW9tbXV2MV9vcHMgPSB7CisJLmZy ZWUgPSBldG5hdml2X2lvbW11djFfZnJlZSwKIAkubWFwID0gZXRuYXZpdl9pb21tdXYxX21hcCwK IAkudW5tYXAgPSBldG5hdml2X2lvbW11djFfdW5tYXAsCiAJLmR1bXBfc2l6ZSA9IGV0bmF2aXZf aW9tbXV2MV9kdW1wX3NpemUsCiAJLmR1bXAgPSBldG5hdml2X2lvbW11djFfZHVtcCwKKwkucmVz dG9yZSA9IGV0bmF2aXZfaW9tbXV2MV9yZXN0b3JlLAogfTsKIAotc3RydWN0IGV0bmF2aXZfaW9t bXVfZG9tYWluICoKLWV0bmF2aXZfaW9tbXV2MV9kb21haW5fYWxsb2Moc3RydWN0IGV0bmF2aXZf Z3B1ICpncHUpCitzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICoKK2V0bmF2aXZfaW9tbXV2 MV9jb250ZXh0X2FsbG9jKHN0cnVjdCBldG5hdml2X2lvbW11X2dsb2JhbCAqZ2xvYmFsKQogewot CXN0cnVjdCBldG5hdml2X2lvbW11djFfZG9tYWluICpldG5hdml2X2RvbWFpbjsKLQlzdHJ1Y3Qg ZXRuYXZpdl9pb21tdV9kb21haW4gKmRvbWFpbjsKLQlpbnQgcmV0OworCXN0cnVjdCBldG5hdml2 X2lvbW11djFfY29udGV4dCAqdjFfY29udGV4dDsKKwlzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250 ZXh0ICpjb250ZXh0OworCisJbXV0ZXhfbG9jaygmZ2xvYmFsLT5sb2NrKTsKKworCS8qIE1NVXYx IGRvZXMgbm90IHN1cHBvcnQgc3dpdGNoaW5nIGJldHdlZW4gZGlmZmVyZW50IGNvbnRleHRzIHdp dGhvdXQKKwkgKiBhIHN0b3AgdGhlIHdvcmxkIG9wZXJhdGlvbiwgc28gd2Ugb25seSBzdXBwb3J0 IGEgc2luZ2xlIHNoYXJlZAorCSAqIGNvbnRleHQgd2l0aCB0aGlzIHZlcnNpb24uCisJICovCisJ aWYgKGdsb2JhbC0+djEuc2hhcmVkX2NvbnRleHQpIHsKKwkJY29udGV4dCA9IGdsb2JhbC0+djEu c2hhcmVkX2NvbnRleHQ7CisJCWV0bmF2aXZfaW9tbXVfY29udGV4dF9nZXQoY29udGV4dCk7CisJ CW11dGV4X3VubG9jaygmZ2xvYmFsLT5sb2NrKTsKKwkJcmV0dXJuIGNvbnRleHQ7CisJfQogCi0J ZXRuYXZpdl9kb21haW4gPSBremFsbG9jKHNpemVvZigqZXRuYXZpdl9kb21haW4pLCBHRlBfS0VS TkVMKTsKLQlpZiAoIWV0bmF2aXZfZG9tYWluKQorCXYxX2NvbnRleHQgPSBremFsbG9jKHNpemVv ZigqdjFfY29udGV4dCksIEdGUF9LRVJORUwpOworCWlmICghdjFfY29udGV4dCkKIAkJcmV0dXJu IE5VTEw7CiAKLQlkb21haW4gPSAmZXRuYXZpdl9kb21haW4tPmJhc2U7CisJdjFfY29udGV4dC0+ cGd0YWJsZV9jcHUgPSBkbWFfYWxsb2Nfd2MoZ2xvYmFsLT5kZXYsIFBUX1NJWkUsCisJCQkJCSAg ICAgICAmdjFfY29udGV4dC0+cGd0YWJsZV9kbWEsCisJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsK KwlpZiAoIXYxX2NvbnRleHQtPnBndGFibGVfY3B1KQorCQlnb3RvIG91dF9mcmVlOwogCi0JZG9t YWluLT5kZXYgPSBncHUtPmRldjsKLQlkb21haW4tPmJhc2UgPSBHUFVfTUVNX1NUQVJUOwotCWRv bWFpbi0+c2l6ZSA9IFBUX0VOVFJJRVMgKiBTWl80SzsKLQlkb21haW4tPm9wcyA9ICZldG5hdml2 X2lvbW11djFfb3BzOworCW1lbXNldDMyKHYxX2NvbnRleHQtPnBndGFibGVfY3B1LCBnbG9iYWwt PmJhZF9wYWdlX2RtYSwgUFRfRU5UUklFUyk7CiAKLQlyZXQgPSBfX2V0bmF2aXZfaW9tbXVfaW5p dChldG5hdml2X2RvbWFpbik7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfZnJlZTsKKwljb250ZXh0 ID0gJnYxX2NvbnRleHQtPmJhc2U7CisJY29udGV4dC0+Z2xvYmFsID0gZ2xvYmFsOworCWtyZWZf aW5pdCgmY29udGV4dC0+cmVmY291bnQpOworCW11dGV4X2luaXQoJmNvbnRleHQtPmxvY2spOwor CUlOSVRfTElTVF9IRUFEKCZjb250ZXh0LT5tYXBwaW5ncyk7CisJZHJtX21tX2luaXQoJmNvbnRl eHQtPm1tLCBHUFVfTUVNX1NUQVJULCBQVF9FTlRSSUVTICogU1pfNEspOworCWNvbnRleHQtPmds b2JhbC0+djEuc2hhcmVkX2NvbnRleHQgPSBjb250ZXh0OworCisJbXV0ZXhfdW5sb2NrKCZnbG9i YWwtPmxvY2spOwogCi0JcmV0dXJuICZldG5hdml2X2RvbWFpbi0+YmFzZTsKKwlyZXR1cm4gY29u dGV4dDsKIAogb3V0X2ZyZWU6Ci0Ja2ZyZWUoZXRuYXZpdl9kb21haW4pOworCW11dGV4X3VubG9j aygmZ2xvYmFsLT5sb2NrKTsKKwlrZnJlZSh2MV9jb250ZXh0KTsKIAlyZXR1cm4gTlVMTDsKIH0K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfaW9tbXUuaCBiL2Ry aXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfaW9tbXUuaApkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggYjI3OTQwNGNlOTFhLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2V0bmF2aXYvZXRuYXZpdl9pb21tdS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBA QAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KLS8qCi0gKiBDb3B5cmln aHQgKEMpIDIwMTQtMjAxOCBFdG5hdml2IFByb2plY3QKLSAqLwotCi0jaWZuZGVmIF9fRVROQVZJ Vl9JT01NVV9IX18KLSNkZWZpbmUgX19FVE5BVklWX0lPTU1VX0hfXwotCi1zdHJ1Y3QgZXRuYXZp dl9ncHU7Ci1zdHJ1Y3QgZXRuYXZpdl9pb21tdV9kb21haW47Ci0KLXN0cnVjdCBldG5hdml2X2lv bW11X2RvbWFpbiAqCi1ldG5hdml2X2lvbW11djFfZG9tYWluX2FsbG9jKHN0cnVjdCBldG5hdml2 X2dwdSAqZ3B1KTsKLXZvaWQgZXRuYXZpdl9pb21tdXYxX3Jlc3RvcmUoc3RydWN0IGV0bmF2aXZf Z3B1ICpncHUpOwotCi1zdHJ1Y3QgZXRuYXZpdl9pb21tdV9kb21haW4gKgotZXRuYXZpdl9pb21t dXYyX2RvbWFpbl9hbGxvYyhzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSk7Ci12b2lkIGV0bmF2aXZf aW9tbXV2Ml9yZXN0b3JlKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1KTsKLQotI2VuZGlmIC8qIF9f RVROQVZJVl9JT01NVV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2 L2V0bmF2aXZfaW9tbXVfdjIuYyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfaW9t bXVfdjIuYwppbmRleCBmNzk0ZTA0YmU5ZTYuLjhiNmIxMDM1NDIyOCAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9pb21tdV92Mi5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9ldG5hdml2L2V0bmF2aXZfaW9tbXVfdjIuYwpAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1 ZGUgImV0bmF2aXZfY21kYnVmLmgiCiAjaW5jbHVkZSAiZXRuYXZpdl9ncHUuaCIKICNpbmNsdWRl ICJldG5hdml2X21tdS5oIgotI2luY2x1ZGUgImV0bmF2aXZfaW9tbXUuaCIKICNpbmNsdWRlICJz dGF0ZS54bWwuaCIKICNpbmNsdWRlICJzdGF0ZV9oaS54bWwuaCIKIApAQCAtMjcsMTEgKzI2LDkg QEAKIAogI2RlZmluZSBNTVV2Ml9NQVhfU1RMQl9FTlRSSUVTCQkxMDI0CiAKLXN0cnVjdCBldG5h dml2X2lvbW11djJfZG9tYWluIHsKLQlzdHJ1Y3QgZXRuYXZpdl9pb21tdV9kb21haW4gYmFzZTsK LQkvKiBQKGFnZSkgVChhYmxlKSBBKHJyYXkpICovCi0JdTY0ICpwdGFfY3B1OwotCWRtYV9hZGRy X3QgcHRhX2RtYTsKK3N0cnVjdCBldG5hdml2X2lvbW11djJfY29udGV4dCB7CisJc3RydWN0IGV0 bmF2aXZfaW9tbXVfY29udGV4dCBiYXNlOworCXVuc2lnbmVkIHNob3J0IGlkOwogCS8qIE0oYXN0 ZXIpIFRMQiBha2EgZmlyc3QgbGV2ZWwgcGFnZXRhYmxlICovCiAJdTMyICptdGxiX2NwdTsKIAlk bWFfYWRkcl90IG10bGJfZG1hOwpAQCAtNDAsNDEgKzM3LDYyIEBAIHN0cnVjdCBldG5hdml2X2lv bW11djJfZG9tYWluIHsKIAlkbWFfYWRkcl90IHN0bGJfZG1hW01NVXYyX01BWF9TVExCX0VOVFJJ RVNdOwogfTsKIAotc3RhdGljIHN0cnVjdCBldG5hdml2X2lvbW11djJfZG9tYWluICoKLXRvX2V0 bmF2aXZfZG9tYWluKHN0cnVjdCBldG5hdml2X2lvbW11X2RvbWFpbiAqZG9tYWluKQorc3RhdGlj IHN0cnVjdCBldG5hdml2X2lvbW11djJfY29udGV4dCAqCit0b192Ml9jb250ZXh0KHN0cnVjdCBl dG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQpCiB7Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihk b21haW4sIHN0cnVjdCBldG5hdml2X2lvbW11djJfZG9tYWluLCBiYXNlKTsKKwlyZXR1cm4gY29u dGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBldG5hdml2X2lvbW11djJfY29udGV4dCwgYmFzZSk7 CiB9CiAKK3N0YXRpYyB2b2lkIGV0bmF2aXZfaW9tbXV2Ml9mcmVlKHN0cnVjdCBldG5hdml2X2lv bW11X2NvbnRleHQgKmNvbnRleHQpCit7CisJc3RydWN0IGV0bmF2aXZfaW9tbXV2Ml9jb250ZXh0 ICp2Ml9jb250ZXh0ID0gdG9fdjJfY29udGV4dChjb250ZXh0KTsKKwlpbnQgaTsKKworCWRybV9t bV90YWtlZG93bigmY29udGV4dC0+bW0pOworCisJZm9yIChpID0gMDsgaSA8IE1NVXYyX01BWF9T VExCX0VOVFJJRVM7IGkrKykgeworCQlpZiAodjJfY29udGV4dC0+c3RsYl9jcHVbaV0pCisJCQlk bWFfZnJlZV93Yyhjb250ZXh0LT5nbG9iYWwtPmRldiwgU1pfNEssCisJCQkJICAgIHYyX2NvbnRl eHQtPnN0bGJfY3B1W2ldLAorCQkJCSAgICB2Ml9jb250ZXh0LT5zdGxiX2RtYVtpXSk7CisJfQor CisJZG1hX2ZyZWVfd2MoY29udGV4dC0+Z2xvYmFsLT5kZXYsIFNaXzRLLCB2Ml9jb250ZXh0LT5t dGxiX2NwdSwKKwkJICAgIHYyX2NvbnRleHQtPm10bGJfZG1hKTsKKworCWNsZWFyX2JpdCh2Ml9j b250ZXh0LT5pZCwgY29udGV4dC0+Z2xvYmFsLT52Mi5wdGFfYWxsb2MpOworCisJdmZyZWUodjJf Y29udGV4dCk7Cit9CiBzdGF0aWMgaW50Ci1ldG5hdml2X2lvbW11djJfZW5zdXJlX3N0bGIoc3Ry dWN0IGV0bmF2aXZfaW9tbXV2Ml9kb21haW4gKmV0bmF2aXZfZG9tYWluLAorZXRuYXZpdl9pb21t dXYyX2Vuc3VyZV9zdGxiKHN0cnVjdCBldG5hdml2X2lvbW11djJfY29udGV4dCAqdjJfY29udGV4 dCwKIAkJCSAgICBpbnQgc3RsYikKIHsKLQlpZiAoZXRuYXZpdl9kb21haW4tPnN0bGJfY3B1W3N0 bGJdKQorCWlmICh2Ml9jb250ZXh0LT5zdGxiX2NwdVtzdGxiXSkKIAkJcmV0dXJuIDA7CiAKLQll dG5hdml2X2RvbWFpbi0+c3RsYl9jcHVbc3RsYl0gPQotCQkJZG1hX2FsbG9jX3djKGV0bmF2aXZf ZG9tYWluLT5iYXNlLmRldiwgU1pfNEssCi0JCQkJICAgICAmZXRuYXZpdl9kb21haW4tPnN0bGJf ZG1hW3N0bGJdLAorCXYyX2NvbnRleHQtPnN0bGJfY3B1W3N0bGJdID0KKwkJCWRtYV9hbGxvY193 Yyh2Ml9jb250ZXh0LT5iYXNlLmdsb2JhbC0+ZGV2LCBTWl80SywKKwkJCQkgICAgICZ2Ml9jb250 ZXh0LT5zdGxiX2RtYVtzdGxiXSwKIAkJCQkgICAgIEdGUF9LRVJORUwpOwogCi0JaWYgKCFldG5h dml2X2RvbWFpbi0+c3RsYl9jcHVbc3RsYl0pCisJaWYgKCF2Ml9jb250ZXh0LT5zdGxiX2NwdVtz dGxiXSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQzMihldG5hdml2X2RvbWFpbi0+c3Rs Yl9jcHVbc3RsYl0sIE1NVXYyX1BURV9FWENFUFRJT04sCisJbWVtc2V0MzIodjJfY29udGV4dC0+ c3RsYl9jcHVbc3RsYl0sIE1NVXYyX1BURV9FWENFUFRJT04sCiAJCSBTWl80SyAvIHNpemVvZih1 MzIpKTsKIAotCWV0bmF2aXZfZG9tYWluLT5tdGxiX2NwdVtzdGxiXSA9IGV0bmF2aXZfZG9tYWlu LT5zdGxiX2RtYVtzdGxiXSB8Ci0JCQkJCQkgICAgICBNTVV2Ml9QVEVfUFJFU0VOVDsKKwl2Ml9j b250ZXh0LT5tdGxiX2NwdVtzdGxiXSA9CisJCQl2Ml9jb250ZXh0LT5zdGxiX2RtYVtzdGxiXSB8 IE1NVXYyX1BURV9QUkVTRU5UOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZXRuYXZp dl9pb21tdXYyX21hcChzdHJ1Y3QgZXRuYXZpdl9pb21tdV9kb21haW4gKmRvbWFpbiwKK3N0YXRp YyBpbnQgZXRuYXZpdl9pb21tdXYyX21hcChzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICpj b250ZXh0LAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaW92YSwgcGh5c19hZGRyX3QgcGFkZHIs CiAJCQkgICAgICAgc2l6ZV90IHNpemUsIGludCBwcm90KQogewotCXN0cnVjdCBldG5hdml2X2lv bW11djJfZG9tYWluICpldG5hdml2X2RvbWFpbiA9Ci0JCQl0b19ldG5hdml2X2RvbWFpbihkb21h aW4pOworCXN0cnVjdCBldG5hdml2X2lvbW11djJfY29udGV4dCAqdjJfY29udGV4dCA9IHRvX3Yy X2NvbnRleHQoY29udGV4dCk7CiAJaW50IG10bGJfZW50cnksIHN0bGJfZW50cnksIHJldDsKIAl1 MzIgZW50cnkgPSBsb3dlcl8zMl9iaXRzKHBhZGRyKSB8IE1NVXYyX1BURV9QUkVTRU5UOwogCkBA IC05MCwyMCArMTA4LDE5IEBAIHN0YXRpYyBpbnQgZXRuYXZpdl9pb21tdXYyX21hcChzdHJ1Y3Qg ZXRuYXZpdl9pb21tdV9kb21haW4gKmRvbWFpbiwKIAltdGxiX2VudHJ5ID0gKGlvdmEgJiBNTVV2 Ml9NVExCX01BU0spID4+IE1NVXYyX01UTEJfU0hJRlQ7CiAJc3RsYl9lbnRyeSA9IChpb3ZhICYg TU1VdjJfU1RMQl9NQVNLKSA+PiBNTVV2Ml9TVExCX1NISUZUOwogCi0JcmV0ID0gZXRuYXZpdl9p b21tdXYyX2Vuc3VyZV9zdGxiKGV0bmF2aXZfZG9tYWluLCBtdGxiX2VudHJ5KTsKKwlyZXQgPSBl dG5hdml2X2lvbW11djJfZW5zdXJlX3N0bGIodjJfY29udGV4dCwgbXRsYl9lbnRyeSk7CiAJaWYg KHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWV0bmF2aXZfZG9tYWluLT5zdGxiX2NwdVttdGxiX2Vu dHJ5XVtzdGxiX2VudHJ5XSA9IGVudHJ5OworCXYyX2NvbnRleHQtPnN0bGJfY3B1W210bGJfZW50 cnldW3N0bGJfZW50cnldID0gZW50cnk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNpemVf dCBldG5hdml2X2lvbW11djJfdW5tYXAoc3RydWN0IGV0bmF2aXZfaW9tbXVfZG9tYWluICpkb21h aW4sCitzdGF0aWMgc2l6ZV90IGV0bmF2aXZfaW9tbXV2Ml91bm1hcChzdHJ1Y3QgZXRuYXZpdl9p b21tdV9jb250ZXh0ICpjb250ZXh0LAogCQkJCSAgICB1bnNpZ25lZCBsb25nIGlvdmEsIHNpemVf dCBzaXplKQogewotCXN0cnVjdCBldG5hdml2X2lvbW11djJfZG9tYWluICpldG5hdml2X2RvbWFp biA9Ci0JCQl0b19ldG5hdml2X2RvbWFpbihkb21haW4pOworCXN0cnVjdCBldG5hdml2X2lvbW11 djJfY29udGV4dCAqZXRuYXZpdl9kb21haW4gPSB0b192Ml9jb250ZXh0KGNvbnRleHQpOwogCWlu dCBtdGxiX2VudHJ5LCBzdGxiX2VudHJ5OwogCiAJaWYgKHNpemUgIT0gU1pfNEspCkBAIC0xMTcs MTE4ICsxMzQsMzUgQEAgc3RhdGljIHNpemVfdCBldG5hdml2X2lvbW11djJfdW5tYXAoc3RydWN0 IGV0bmF2aXZfaW9tbXVfZG9tYWluICpkb21haW4sCiAJcmV0dXJuIFNaXzRLOwogfQogCi1zdGF0 aWMgaW50IGV0bmF2aXZfaW9tbXV2Ml9pbml0KHN0cnVjdCBldG5hdml2X2lvbW11djJfZG9tYWlu ICpldG5hdml2X2RvbWFpbikKLXsKLQlpbnQgcmV0OwotCi0JLyogYWxsb2NhdGUgc2NyYXRjaCBw YWdlICovCi0JZXRuYXZpdl9kb21haW4tPmJhc2UuYmFkX3BhZ2VfY3B1ID0KLQkJCWRtYV9hbGxv Y193YyhldG5hdml2X2RvbWFpbi0+YmFzZS5kZXYsIFNaXzRLLAotCQkJCSAgICAgJmV0bmF2aXZf ZG9tYWluLT5iYXNlLmJhZF9wYWdlX2RtYSwKLQkJCQkgICAgIEdGUF9LRVJORUwpOwotCWlmICgh ZXRuYXZpdl9kb21haW4tPmJhc2UuYmFkX3BhZ2VfY3B1KSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0J CWdvdG8gZmFpbF9tZW07Ci0JfQotCi0JbWVtc2V0MzIoZXRuYXZpdl9kb21haW4tPmJhc2UuYmFk X3BhZ2VfY3B1LCAweGRlYWQ1NWFhLAotCQkgU1pfNEsgLyBzaXplb2YodTMyKSk7Ci0KLQlldG5h dml2X2RvbWFpbi0+cHRhX2NwdSA9IGRtYV9hbGxvY193YyhldG5hdml2X2RvbWFpbi0+YmFzZS5k ZXYsCi0JCQkJCSAgICAgICBTWl80SywgJmV0bmF2aXZfZG9tYWluLT5wdGFfZG1hLAotCQkJCQkg ICAgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFldG5hdml2X2RvbWFpbi0+cHRhX2NwdSkgewotCQly ZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWxfbWVtOwotCX0KLQotCWV0bmF2aXZfZG9tYWluLT5t dGxiX2NwdSA9IGRtYV9hbGxvY193YyhldG5hdml2X2RvbWFpbi0+YmFzZS5kZXYsCi0JCQkJCQlT Wl80SywgJmV0bmF2aXZfZG9tYWluLT5tdGxiX2RtYSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCWlm ICghZXRuYXZpdl9kb21haW4tPm10bGJfY3B1KSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8g ZmFpbF9tZW07Ci0JfQotCi0JbWVtc2V0MzIoZXRuYXZpdl9kb21haW4tPm10bGJfY3B1LCBNTVV2 Ml9QVEVfRVhDRVBUSU9OLAotCQkgTU1VdjJfTUFYX1NUTEJfRU5UUklFUyk7Ci0KLQlyZXR1cm4g MDsKLQotZmFpbF9tZW06Ci0JaWYgKGV0bmF2aXZfZG9tYWluLT5iYXNlLmJhZF9wYWdlX2NwdSkK LQkJZG1hX2ZyZWVfd2MoZXRuYXZpdl9kb21haW4tPmJhc2UuZGV2LCBTWl80SywKLQkJCSAgICBl dG5hdml2X2RvbWFpbi0+YmFzZS5iYWRfcGFnZV9jcHUsCi0JCQkgICAgZXRuYXZpdl9kb21haW4t PmJhc2UuYmFkX3BhZ2VfZG1hKTsKLQotCWlmIChldG5hdml2X2RvbWFpbi0+cHRhX2NwdSkKLQkJ ZG1hX2ZyZWVfd2MoZXRuYXZpdl9kb21haW4tPmJhc2UuZGV2LCBTWl80SywKLQkJCSAgICBldG5h dml2X2RvbWFpbi0+cHRhX2NwdSwgZXRuYXZpdl9kb21haW4tPnB0YV9kbWEpOwotCi0JaWYgKGV0 bmF2aXZfZG9tYWluLT5tdGxiX2NwdSkKLQkJZG1hX2ZyZWVfd2MoZXRuYXZpdl9kb21haW4tPmJh c2UuZGV2LCBTWl80SywKLQkJCSAgICBldG5hdml2X2RvbWFpbi0+bXRsYl9jcHUsIGV0bmF2aXZf ZG9tYWluLT5tdGxiX2RtYSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBldG5h dml2X2lvbW11djJfZG9tYWluX2ZyZWUoc3RydWN0IGV0bmF2aXZfaW9tbXVfZG9tYWluICpkb21h aW4pCi17Ci0Jc3RydWN0IGV0bmF2aXZfaW9tbXV2Ml9kb21haW4gKmV0bmF2aXZfZG9tYWluID0K LQkJCXRvX2V0bmF2aXZfZG9tYWluKGRvbWFpbik7Ci0JaW50IGk7Ci0KLQlkbWFfZnJlZV93Yyhl dG5hdml2X2RvbWFpbi0+YmFzZS5kZXYsIFNaXzRLLAotCQkgICAgZXRuYXZpdl9kb21haW4tPmJh c2UuYmFkX3BhZ2VfY3B1LAotCQkgICAgZXRuYXZpdl9kb21haW4tPmJhc2UuYmFkX3BhZ2VfZG1h KTsKLQotCWRtYV9mcmVlX3djKGV0bmF2aXZfZG9tYWluLT5iYXNlLmRldiwgU1pfNEssCi0JCSAg ICBldG5hdml2X2RvbWFpbi0+cHRhX2NwdSwgZXRuYXZpdl9kb21haW4tPnB0YV9kbWEpOwotCi0J ZG1hX2ZyZWVfd2MoZXRuYXZpdl9kb21haW4tPmJhc2UuZGV2LCBTWl80SywKLQkJICAgIGV0bmF2 aXZfZG9tYWluLT5tdGxiX2NwdSwgZXRuYXZpdl9kb21haW4tPm10bGJfZG1hKTsKLQotCWZvciAo aSA9IDA7IGkgPCBNTVV2Ml9NQVhfU1RMQl9FTlRSSUVTOyBpKyspIHsKLQkJaWYgKGV0bmF2aXZf ZG9tYWluLT5zdGxiX2NwdVtpXSkKLQkJCWRtYV9mcmVlX3djKGV0bmF2aXZfZG9tYWluLT5iYXNl LmRldiwgU1pfNEssCi0JCQkJICAgIGV0bmF2aXZfZG9tYWluLT5zdGxiX2NwdVtpXSwKLQkJCQkg ICAgZXRuYXZpdl9kb21haW4tPnN0bGJfZG1hW2ldKTsKLQl9Ci0KLQl2ZnJlZShldG5hdml2X2Rv bWFpbik7Ci19Ci0KLXN0YXRpYyBzaXplX3QgZXRuYXZpdl9pb21tdXYyX2R1bXBfc2l6ZShzdHJ1 Y3QgZXRuYXZpdl9pb21tdV9kb21haW4gKmRvbWFpbikKK3N0YXRpYyBzaXplX3QgZXRuYXZpdl9p b21tdXYyX2R1bXBfc2l6ZShzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICpjb250ZXh0KQog ewotCXN0cnVjdCBldG5hdml2X2lvbW11djJfZG9tYWluICpldG5hdml2X2RvbWFpbiA9Ci0JCQl0 b19ldG5hdml2X2RvbWFpbihkb21haW4pOworCXN0cnVjdCBldG5hdml2X2lvbW11djJfY29udGV4 dCAqdjJfY29udGV4dCA9IHRvX3YyX2NvbnRleHQoY29udGV4dCk7CiAJc2l6ZV90IGR1bXBfc2l6 ZSA9IFNaXzRLOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IE1NVXYyX01BWF9TVExCX0VO VFJJRVM7IGkrKykKLQkJaWYgKGV0bmF2aXZfZG9tYWluLT5tdGxiX2NwdVtpXSAmIE1NVXYyX1BU RV9QUkVTRU5UKQorCQlpZiAodjJfY29udGV4dC0+bXRsYl9jcHVbaV0gJiBNTVV2Ml9QVEVfUFJF U0VOVCkKIAkJCWR1bXBfc2l6ZSArPSBTWl80SzsKIAogCXJldHVybiBkdW1wX3NpemU7CiB9CiAK LXN0YXRpYyB2b2lkIGV0bmF2aXZfaW9tbXV2Ml9kdW1wKHN0cnVjdCBldG5hdml2X2lvbW11X2Rv bWFpbiAqZG9tYWluLCB2b2lkICpidWYpCitzdGF0aWMgdm9pZCBldG5hdml2X2lvbW11djJfZHVt cChzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICpjb250ZXh0LCB2b2lkICpidWYpCiB7Ci0J c3RydWN0IGV0bmF2aXZfaW9tbXV2Ml9kb21haW4gKmV0bmF2aXZfZG9tYWluID0KLQkJCXRvX2V0 bmF2aXZfZG9tYWluKGRvbWFpbik7CisJc3RydWN0IGV0bmF2aXZfaW9tbXV2Ml9jb250ZXh0ICp2 Ml9jb250ZXh0ID0gdG9fdjJfY29udGV4dChjb250ZXh0KTsKIAlpbnQgaTsKIAotCW1lbWNweShi dWYsIGV0bmF2aXZfZG9tYWluLT5tdGxiX2NwdSwgU1pfNEspOworCW1lbWNweShidWYsIHYyX2Nv bnRleHQtPm10bGJfY3B1LCBTWl80Syk7CiAJYnVmICs9IFNaXzRLOwogCWZvciAoaSA9IDA7IGkg PCBNTVV2Ml9NQVhfU1RMQl9FTlRSSUVTOyBpKyssIGJ1ZiArPSBTWl80SykKLQkJaWYgKGV0bmF2 aXZfZG9tYWluLT5tdGxiX2NwdVtpXSAmIE1NVXYyX1BURV9QUkVTRU5UKQotCQkJbWVtY3B5KGJ1 ZiwgZXRuYXZpdl9kb21haW4tPnN0bGJfY3B1W2ldLCBTWl80Syk7CisJCWlmICh2Ml9jb250ZXh0 LT5tdGxiX2NwdVtpXSAmIE1NVXYyX1BURV9QUkVTRU5UKQorCQkJbWVtY3B5KGJ1ZiwgdjJfY29u dGV4dC0+c3RsYl9jcHVbaV0sIFNaXzRLKTsKIH0KIAotc3RhdGljIHZvaWQgZXRuYXZpdl9pb21t dXYyX3Jlc3RvcmVfbm9uc2VjKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1KQorc3RhdGljIHZvaWQg ZXRuYXZpdl9pb21tdXYyX3Jlc3RvcmVfbm9uc2VjKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1LAor CXN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQpCiB7Ci0Jc3RydWN0IGV0bmF2 aXZfaW9tbXV2Ml9kb21haW4gKmV0bmF2aXZfZG9tYWluID0KLQkJCXRvX2V0bmF2aXZfZG9tYWlu KGdwdS0+bW11LT5kb21haW4pOworCXN0cnVjdCBldG5hdml2X2lvbW11djJfY29udGV4dCAqdjJf Y29udGV4dCA9IHRvX3YyX2NvbnRleHQoY29udGV4dCk7CiAJdTE2IHByZWZldGNoOwogCiAJLyog SWYgdGhlIE1NVSBpcyBhbHJlYWR5IGVuYWJsZWQgdGhlIHN0YXRlIGlzIHN0aWxsIHRoZXJlLiAq LwpAQCAtMjM2LDggKzE3MCw4IEBAIHN0YXRpYyB2b2lkIGV0bmF2aXZfaW9tbXV2Ml9yZXN0b3Jl X25vbnNlYyhzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSkKIAkJcmV0dXJuOwogCiAJcHJlZmV0Y2gg PSBldG5hdml2X2J1ZmZlcl9jb25maWdfbW11djIoZ3B1LAotCQkJCSh1MzIpZXRuYXZpdl9kb21h aW4tPm10bGJfZG1hLAotCQkJCSh1MzIpZXRuYXZpdl9kb21haW4tPmJhc2UuYmFkX3BhZ2VfZG1h KTsKKwkJCQkodTMyKXYyX2NvbnRleHQtPm10bGJfZG1hLAorCQkJCSh1MzIpY29udGV4dC0+Z2xv YmFsLT5iYWRfcGFnZV9kbWEpOwogCWV0bmF2aXZfZ3B1X3N0YXJ0X2ZlKGdwdSwgKHUzMilldG5h dml2X2NtZGJ1Zl9nZXRfcGEoJmdwdS0+YnVmZmVyKSwKIAkJCSAgICAgcHJlZmV0Y2gpOwogCWV0 bmF2aXZfZ3B1X3dhaXRfaWRsZShncHUsIDEwMCk7CkBAIC0yNDUsMTAgKzE3OSwxMCBAQCBzdGF0 aWMgdm9pZCBldG5hdml2X2lvbW11djJfcmVzdG9yZV9ub25zZWMoc3RydWN0IGV0bmF2aXZfZ3B1 ICpncHUpCiAJZ3B1X3dyaXRlKGdwdSwgVklWU19NTVV2Ml9DT05UUk9MLCBWSVZTX01NVXYyX0NP TlRST0xfRU5BQkxFKTsKIH0KIAotc3RhdGljIHZvaWQgZXRuYXZpdl9pb21tdXYyX3Jlc3RvcmVf c2VjKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1KQorc3RhdGljIHZvaWQgZXRuYXZpdl9pb21tdXYy X3Jlc3RvcmVfc2VjKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1LAorCXN0cnVjdCBldG5hdml2X2lv bW11X2NvbnRleHQgKmNvbnRleHQpCiB7Ci0Jc3RydWN0IGV0bmF2aXZfaW9tbXV2Ml9kb21haW4g KmV0bmF2aXZfZG9tYWluID0KLQkJCQl0b19ldG5hdml2X2RvbWFpbihncHUtPm1tdS0+ZG9tYWlu KTsKKwlzdHJ1Y3QgZXRuYXZpdl9pb21tdXYyX2NvbnRleHQgKnYyX2NvbnRleHQgPSB0b192Ml9j b250ZXh0KGNvbnRleHQpOwogCXUxNiBwcmVmZXRjaDsKIAogCS8qIElmIHRoZSBNTVUgaXMgYWxy ZWFkeSBlbmFibGVkIHRoZSBzdGF0ZSBpcyBzdGlsbCB0aGVyZS4gKi8KQEAgLTI1NiwyNiArMTkw LDI2IEBAIHN0YXRpYyB2b2lkIGV0bmF2aXZfaW9tbXV2Ml9yZXN0b3JlX3NlYyhzdHJ1Y3QgZXRu YXZpdl9ncHUgKmdwdSkKIAkJcmV0dXJuOwogCiAJZ3B1X3dyaXRlKGdwdSwgVklWU19NTVV2Ml9Q VEFfQUREUkVTU19MT1csCi0JCSAgbG93ZXJfMzJfYml0cyhldG5hdml2X2RvbWFpbi0+cHRhX2Rt YSkpOworCQkgIGxvd2VyXzMyX2JpdHMoY29udGV4dC0+Z2xvYmFsLT52Mi5wdGFfZG1hKSk7CiAJ Z3B1X3dyaXRlKGdwdSwgVklWU19NTVV2Ml9QVEFfQUREUkVTU19ISUdILAotCQkgIHVwcGVyXzMy X2JpdHMoZXRuYXZpdl9kb21haW4tPnB0YV9kbWEpKTsKKwkJICB1cHBlcl8zMl9iaXRzKGNvbnRl eHQtPmdsb2JhbC0+djIucHRhX2RtYSkpOwogCWdwdV93cml0ZShncHUsIFZJVlNfTU1VdjJfUFRB X0NPTlRST0wsIFZJVlNfTU1VdjJfUFRBX0NPTlRST0xfRU5BQkxFKTsKIAogCWdwdV93cml0ZShn cHUsIFZJVlNfTU1VdjJfTk9OU0VDX1NBRkVfQUREUl9MT1csCi0JCSAgbG93ZXJfMzJfYml0cyhl dG5hdml2X2RvbWFpbi0+YmFzZS5iYWRfcGFnZV9kbWEpKTsKKwkJICBsb3dlcl8zMl9iaXRzKGNv bnRleHQtPmdsb2JhbC0+YmFkX3BhZ2VfZG1hKSk7CiAJZ3B1X3dyaXRlKGdwdSwgVklWU19NTVV2 Ml9TRUNfU0FGRV9BRERSX0xPVywKLQkJICBsb3dlcl8zMl9iaXRzKGV0bmF2aXZfZG9tYWluLT5i YXNlLmJhZF9wYWdlX2RtYSkpOworCQkgIGxvd2VyXzMyX2JpdHMoY29udGV4dC0+Z2xvYmFsLT5i YWRfcGFnZV9kbWEpKTsKIAlncHVfd3JpdGUoZ3B1LCBWSVZTX01NVXYyX1NBRkVfQUREUkVTU19D T05GSUcsCiAJCSAgVklWU19NTVV2Ml9TQUZFX0FERFJFU1NfQ09ORklHX05PTl9TRUNfU0FGRV9B RERSX0hJR0goCi0JCSAgdXBwZXJfMzJfYml0cyhldG5hdml2X2RvbWFpbi0+YmFzZS5iYWRfcGFn ZV9kbWEpKSB8CisJCSAgdXBwZXJfMzJfYml0cyhjb250ZXh0LT5nbG9iYWwtPmJhZF9wYWdlX2Rt YSkpIHwKIAkJICBWSVZTX01NVXYyX1NBRkVfQUREUkVTU19DT05GSUdfU0VDX1NBRkVfQUREUl9I SUdIKAotCQkgIHVwcGVyXzMyX2JpdHMoZXRuYXZpdl9kb21haW4tPmJhc2UuYmFkX3BhZ2VfZG1h KSkpOworCQkgIHVwcGVyXzMyX2JpdHMoY29udGV4dC0+Z2xvYmFsLT5iYWRfcGFnZV9kbWEpKSk7 CiAKLQlldG5hdml2X2RvbWFpbi0+cHRhX2NwdVswXSA9IGV0bmF2aXZfZG9tYWluLT5tdGxiX2Rt YSB8Ci0JCQkJICAgICBWSVZTX01NVXYyX0NPTkZJR1VSQVRJT05fTU9ERV9NT0RFNF9LOworCWNv bnRleHQtPmdsb2JhbC0+djIucHRhX2NwdVswXSA9IHYyX2NvbnRleHQtPm10bGJfZG1hIHwKKwkJ CQkgCSBWSVZTX01NVXYyX0NPTkZJR1VSQVRJT05fTU9ERV9NT0RFNF9LOwogCiAJLyogdHJpZ2dl ciBhIFBUQSBsb2FkIHRocm91Z2ggdGhlIEZFICovCi0JcHJlZmV0Y2ggPSBldG5hdml2X2J1ZmZl cl9jb25maWdfcHRhKGdwdSk7CisJcHJlZmV0Y2ggPSBldG5hdml2X2J1ZmZlcl9jb25maWdfcHRh KGdwdSwgdjJfY29udGV4dC0+aWQpOwogCWV0bmF2aXZfZ3B1X3N0YXJ0X2ZlKGdwdSwgKHUzMill dG5hdml2X2NtZGJ1Zl9nZXRfcGEoJmdwdS0+YnVmZmVyKSwKIAkJCSAgICAgcHJlZmV0Y2gpOwog CWV0bmF2aXZfZ3B1X3dhaXRfaWRsZShncHUsIDEwMCk7CkBAIC0yODMsMTQgKzIxNywxNSBAQCBz dGF0aWMgdm9pZCBldG5hdml2X2lvbW11djJfcmVzdG9yZV9zZWMoc3RydWN0IGV0bmF2aXZfZ3B1 ICpncHUpCiAJZ3B1X3dyaXRlKGdwdSwgVklWU19NTVV2Ml9TRUNfQ09OVFJPTCwgVklWU19NTVV2 Ml9TRUNfQ09OVFJPTF9FTkFCTEUpOwogfQogCi12b2lkIGV0bmF2aXZfaW9tbXV2Ml9yZXN0b3Jl KHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1KQorc3RhdGljIHZvaWQgZXRuYXZpdl9pb21tdXYyX3Jl c3RvcmUoc3RydWN0IGV0bmF2aXZfZ3B1ICpncHUsCisJCQkJICAgIHN0cnVjdCBldG5hdml2X2lv bW11X2NvbnRleHQgKmNvbnRleHQpCiB7CiAJc3dpdGNoIChncHUtPnNlY19tb2RlKSB7CiAJY2Fz ZSBFVE5BX1NFQ19OT05FOgotCQlldG5hdml2X2lvbW11djJfcmVzdG9yZV9ub25zZWMoZ3B1KTsK KwkJZXRuYXZpdl9pb21tdXYyX3Jlc3RvcmVfbm9uc2VjKGdwdSwgY29udGV4dCk7CiAJCWJyZWFr OwogCWNhc2UgRVROQV9TRUNfS0VSTkVMOgotCQlldG5hdml2X2lvbW11djJfcmVzdG9yZV9zZWMo Z3B1KTsKKwkJZXRuYXZpdl9pb21tdXYyX3Jlc3RvcmVfc2VjKGdwdSwgY29udGV4dCk7CiAJCWJy ZWFrOwogCWRlZmF1bHQ6CiAJCVdBUk4oMSwgInVuaGFuZGxlZCBHUFUgc2VjdXJpdHkgbW9kZVxu Iik7CkBAIC0yOTgsMzkgKzIzMyw1NiBAQCB2b2lkIGV0bmF2aXZfaW9tbXV2Ml9yZXN0b3JlKHN0 cnVjdCBldG5hdml2X2dwdSAqZ3B1KQogCX0KIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBldG5h dml2X2lvbW11X2RvbWFpbl9vcHMgZXRuYXZpdl9pb21tdXYyX29wcyA9IHsKLQkuZnJlZSA9IGV0 bmF2aXZfaW9tbXV2Ml9kb21haW5fZnJlZSwKK2NvbnN0IHN0cnVjdCBldG5hdml2X2lvbW11X29w cyBldG5hdml2X2lvbW11djJfb3BzID0geworCS5mcmVlID0gZXRuYXZpdl9pb21tdXYyX2ZyZWUs CiAJLm1hcCA9IGV0bmF2aXZfaW9tbXV2Ml9tYXAsCiAJLnVubWFwID0gZXRuYXZpdl9pb21tdXYy X3VubWFwLAogCS5kdW1wX3NpemUgPSBldG5hdml2X2lvbW11djJfZHVtcF9zaXplLAogCS5kdW1w ID0gZXRuYXZpdl9pb21tdXYyX2R1bXAsCisJLnJlc3RvcmUgPSBldG5hdml2X2lvbW11djJfcmVz dG9yZSwKIH07CiAKLXN0cnVjdCBldG5hdml2X2lvbW11X2RvbWFpbiAqCi1ldG5hdml2X2lvbW11 djJfZG9tYWluX2FsbG9jKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1KQorc3RydWN0IGV0bmF2aXZf aW9tbXVfY29udGV4dCAqCitldG5hdml2X2lvbW11djJfY29udGV4dF9hbGxvYyhzdHJ1Y3QgZXRu YXZpdl9pb21tdV9nbG9iYWwgKmdsb2JhbCkKIHsKLQlzdHJ1Y3QgZXRuYXZpdl9pb21tdXYyX2Rv bWFpbiAqZXRuYXZpdl9kb21haW47Ci0Jc3RydWN0IGV0bmF2aXZfaW9tbXVfZG9tYWluICpkb21h aW47Ci0JaW50IHJldDsKKwlzdHJ1Y3QgZXRuYXZpdl9pb21tdXYyX2NvbnRleHQgKnYyX2NvbnRl eHQ7CisJc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dDsKIAotCWV0bmF2aXZf ZG9tYWluID0gdnphbGxvYyhzaXplb2YoKmV0bmF2aXZfZG9tYWluKSk7Ci0JaWYgKCFldG5hdml2 X2RvbWFpbikKKwl2Ml9jb250ZXh0ID0gdnphbGxvYyhzaXplb2YoKnYyX2NvbnRleHQpKTsKKwlp ZiAoIXYyX2NvbnRleHQpCiAJCXJldHVybiBOVUxMOwogCi0JZG9tYWluID0gJmV0bmF2aXZfZG9t YWluLT5iYXNlOworCW11dGV4X2xvY2soJmdsb2JhbC0+bG9jayk7CisJdjJfY29udGV4dC0+aWQg PSBmaW5kX2ZpcnN0X3plcm9fYml0KGdsb2JhbC0+djIucHRhX2FsbG9jLAorCQkJCQkgICAgIEVU TkFWSVZfUFRBX0VOVFJJRVMpOworCWlmICh2Ml9jb250ZXh0LT5pZCA8IEVUTkFWSVZfUFRBX0VO VFJJRVMpIHsKKwkJc2V0X2JpdCh2Ml9jb250ZXh0LT5pZCwgZ2xvYmFsLT52Mi5wdGFfYWxsb2Mp OworCX0gZWxzZSB7CisJCW11dGV4X3VubG9jaygmZ2xvYmFsLT5sb2NrKTsKKwkJZ290byBvdXRf ZnJlZTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZnbG9iYWwtPmxvY2spOwogCi0JZG9tYWluLT5kZXYg PSBncHUtPmRldjsKLQlkb21haW4tPmJhc2UgPSBTWl80SzsKLQlkb21haW4tPnNpemUgPSAodTY0 KVNaXzFHICogNCAtIFNaXzRLOwotCWRvbWFpbi0+b3BzID0gJmV0bmF2aXZfaW9tbXV2Ml9vcHM7 CisJdjJfY29udGV4dC0+bXRsYl9jcHUgPSBkbWFfYWxsb2Nfd2MoZ2xvYmFsLT5kZXYsIFNaXzRL LAorCQkJCQkgICAgJnYyX2NvbnRleHQtPm10bGJfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXYy X2NvbnRleHQtPm10bGJfY3B1KQorCQlnb3RvIG91dF9mcmVlX2lkOwogCi0JcmV0ID0gZXRuYXZp dl9pb21tdXYyX2luaXQoZXRuYXZpdl9kb21haW4pOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2Zy ZWU7CisJbWVtc2V0MzIodjJfY29udGV4dC0+bXRsYl9jcHUsIE1NVXYyX1BURV9FWENFUFRJT04s CisJCSBNTVV2Ml9NQVhfU1RMQl9FTlRSSUVTKTsKKworCWNvbnRleHQgPSAmdjJfY29udGV4dC0+ YmFzZTsKKwljb250ZXh0LT5nbG9iYWwgPSBnbG9iYWw7CisJa3JlZl9pbml0KCZjb250ZXh0LT5y ZWZjb3VudCk7CisJbXV0ZXhfaW5pdCgmY29udGV4dC0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQo JmNvbnRleHQtPm1hcHBpbmdzKTsKKwlkcm1fbW1faW5pdCgmY29udGV4dC0+bW0sIFNaXzRLLCAo dTY0KVNaXzFHICogNCAtIFNaXzRLKTsKIAotCXJldHVybiAmZXRuYXZpdl9kb21haW4tPmJhc2U7 CisJcmV0dXJuIGNvbnRleHQ7CiAKK291dF9mcmVlX2lkOgorCWNsZWFyX2JpdCh2Ml9jb250ZXh0 LT5pZCwgZ2xvYmFsLT52Mi5wdGFfYWxsb2MpOwogb3V0X2ZyZWU6Ci0JdmZyZWUoZXRuYXZpdl9k b21haW4pOworCXZmcmVlKHYyX2NvbnRleHQpOwogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9tbXUuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9ldG5hdml2L2V0bmF2aXZfbW11LmMKaW5kZXggYzQwOTJjOGRlZjRmLi5hMTU1NzU1NDI0Zjgg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfbW11LmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9tbXUuYwpAQCAtOCwxMCArOCw5IEBACiAj aW5jbHVkZSAiZXRuYXZpdl9kcnYuaCIKICNpbmNsdWRlICJldG5hdml2X2dlbS5oIgogI2luY2x1 ZGUgImV0bmF2aXZfZ3B1LmgiCi0jaW5jbHVkZSAiZXRuYXZpdl9pb21tdS5oIgogI2luY2x1ZGUg ImV0bmF2aXZfbW11LmgiCiAKLXN0YXRpYyB2b2lkIGV0bmF2aXZfZG9tYWluX3VubWFwKHN0cnVj dCBldG5hdml2X2lvbW11X2RvbWFpbiAqZG9tYWluLAorc3RhdGljIHZvaWQgZXRuYXZpdl9jb250 ZXh0X3VubWFwKHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQsCiAJCQkJIHVu c2lnbmVkIGxvbmcgaW92YSwgc2l6ZV90IHNpemUpCiB7CiAJc2l6ZV90IHVubWFwcGVkX3BhZ2Us IHVubWFwcGVkID0gMDsKQEAgLTI0LDcgKzIzLDggQEAgc3RhdGljIHZvaWQgZXRuYXZpdl9kb21h aW5fdW5tYXAoc3RydWN0IGV0bmF2aXZfaW9tbXVfZG9tYWluICpkb21haW4sCiAJfQogCiAJd2hp bGUgKHVubWFwcGVkIDwgc2l6ZSkgewotCQl1bm1hcHBlZF9wYWdlID0gZG9tYWluLT5vcHMtPnVu bWFwKGRvbWFpbiwgaW92YSwgcGdzaXplKTsKKwkJdW5tYXBwZWRfcGFnZSA9IGNvbnRleHQtPmds b2JhbC0+b3BzLT51bm1hcChjb250ZXh0LCBpb3ZhLAorCQkJCQkJCSAgICBwZ3NpemUpOwogCQlp ZiAoIXVubWFwcGVkX3BhZ2UpCiAJCQlicmVhazsKIApAQCAtMzMsNyArMzMsNyBAQCBzdGF0aWMg dm9pZCBldG5hdml2X2RvbWFpbl91bm1hcChzdHJ1Y3QgZXRuYXZpdl9pb21tdV9kb21haW4gKmRv bWFpbiwKIAl9CiB9CiAKLXN0YXRpYyBpbnQgZXRuYXZpdl9kb21haW5fbWFwKHN0cnVjdCBldG5h dml2X2lvbW11X2RvbWFpbiAqZG9tYWluLAorc3RhdGljIGludCBldG5hdml2X2NvbnRleHRfbWFw KHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQsCiAJCQkgICAgICB1bnNpZ25l ZCBsb25nIGlvdmEsIHBoeXNfYWRkcl90IHBhZGRyLAogCQkJICAgICAgc2l6ZV90IHNpemUsIGlu dCBwcm90KQogewpAQCAtNDksNyArNDksOCBAQCBzdGF0aWMgaW50IGV0bmF2aXZfZG9tYWluX21h cChzdHJ1Y3QgZXRuYXZpdl9pb21tdV9kb21haW4gKmRvbWFpbiwKIAl9CiAKIAl3aGlsZSAoc2l6 ZSkgewotCQlyZXQgPSBkb21haW4tPm9wcy0+bWFwKGRvbWFpbiwgaW92YSwgcGFkZHIsIHBnc2l6 ZSwgcHJvdCk7CisJCXJldCA9IGNvbnRleHQtPmdsb2JhbC0+b3BzLT5tYXAoY29udGV4dCwgaW92 YSwgcGFkZHIsIHBnc2l6ZSwKKwkJCQkJCXByb3QpOwogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAK QEAgLTYwLDIxICs2MSwxOSBAQCBzdGF0aWMgaW50IGV0bmF2aXZfZG9tYWluX21hcChzdHJ1Y3Qg ZXRuYXZpdl9pb21tdV9kb21haW4gKmRvbWFpbiwKIAogCS8qIHVucm9sbCBtYXBwaW5nIGluIGNh c2Ugc29tZXRoaW5nIHdlbnQgd3JvbmcgKi8KIAlpZiAocmV0KQotCQlldG5hdml2X2RvbWFpbl91 bm1hcChkb21haW4sIG9yaWdfaW92YSwgb3JpZ19zaXplIC0gc2l6ZSk7CisJCWV0bmF2aXZfY29u dGV4dF91bm1hcChjb250ZXh0LCBvcmlnX2lvdmEsIG9yaWdfc2l6ZSAtIHNpemUpOwogCiAJcmV0 dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBldG5hdml2X2lvbW11X21hcChzdHJ1Y3QgZXRuYXZp dl9pb21tdSAqaW9tbXUsIHUzMiBpb3ZhLAorc3RhdGljIGludCBldG5hdml2X2lvbW11X21hcChz dHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICpjb250ZXh0LCB1MzIgaW92YSwKIAkJCSAgICAg c3RydWN0IHNnX3RhYmxlICpzZ3QsIHVuc2lnbmVkIGxlbiwgaW50IHByb3QpCi17Ci0Jc3RydWN0 IGV0bmF2aXZfaW9tbXVfZG9tYWluICpkb21haW4gPSBpb21tdS0+ZG9tYWluOwotCXN0cnVjdCBz Y2F0dGVybGlzdCAqc2c7Cit7CXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJdW5zaWduZWQgaW50 IGRhID0gaW92YTsKIAl1bnNpZ25lZCBpbnQgaSwgajsKIAlpbnQgcmV0OwogCi0JaWYgKCFkb21h aW4gfHwgIXNndCkKKwlpZiAoIWNvbnRleHQgfHwgIXNndCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAK IAlmb3JfZWFjaF9zZyhzZ3QtPnNnbCwgc2csIHNndC0+bmVudHMsIGkpIHsKQEAgLTgzLDcgKzgy LDcgQEAgc3RhdGljIGludCBldG5hdml2X2lvbW11X21hcChzdHJ1Y3QgZXRuYXZpdl9pb21tdSAq aW9tbXUsIHUzMiBpb3ZhLAogCiAJCVZFUkIoIm1hcFslZF06ICUwOHggJTA4eCglengpIiwgaSwg aW92YSwgcGEsIGJ5dGVzKTsKIAotCQlyZXQgPSBldG5hdml2X2RvbWFpbl9tYXAoZG9tYWluLCBk YSwgcGEsIGJ5dGVzLCBwcm90KTsKKwkJcmV0ID0gZXRuYXZpdl9jb250ZXh0X21hcChjb250ZXh0 LCBkYSwgcGEsIGJ5dGVzLCBwcm90KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZmFpbDsKIApAQCAt OTgsMTYgKzk3LDE1IEBAIHN0YXRpYyBpbnQgZXRuYXZpdl9pb21tdV9tYXAoc3RydWN0IGV0bmF2 aXZfaW9tbXUgKmlvbW11LCB1MzIgaW92YSwKIAlmb3JfZWFjaF9zZyhzZ3QtPnNnbCwgc2csIGks IGopIHsKIAkJc2l6ZV90IGJ5dGVzID0gc2dfZG1hX2xlbihzZykgKyBzZy0+b2Zmc2V0OwogCi0J CWV0bmF2aXZfZG9tYWluX3VubWFwKGRvbWFpbiwgZGEsIGJ5dGVzKTsKKwkJZXRuYXZpdl9jb250 ZXh0X3VubWFwKGNvbnRleHQsIGRhLCBieXRlcyk7CiAJCWRhICs9IGJ5dGVzOwogCX0KIAlyZXR1 cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBldG5hdml2X2lvbW11X3VubWFwKHN0cnVjdCBldG5h dml2X2lvbW11ICppb21tdSwgdTMyIGlvdmEsCitzdGF0aWMgdm9pZCBldG5hdml2X2lvbW11X3Vu bWFwKHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQsIHUzMiBpb3ZhLAogCQkJ CXN0cnVjdCBzZ190YWJsZSAqc2d0LCB1bnNpZ25lZCBsZW4pCiB7Ci0Jc3RydWN0IGV0bmF2aXZf aW9tbXVfZG9tYWluICpkb21haW4gPSBpb21tdS0+ZG9tYWluOwogCXN0cnVjdCBzY2F0dGVybGlz dCAqc2c7CiAJdW5zaWduZWQgaW50IGRhID0gaW92YTsKIAlpbnQgaTsKQEAgLTExNSw3ICsxMTMs NyBAQCBzdGF0aWMgdm9pZCBldG5hdml2X2lvbW11X3VubWFwKHN0cnVjdCBldG5hdml2X2lvbW11 ICppb21tdSwgdTMyIGlvdmEsCiAJZm9yX2VhY2hfc2coc2d0LT5zZ2wsIHNnLCBzZ3QtPm5lbnRz LCBpKSB7CiAJCXNpemVfdCBieXRlcyA9IHNnX2RtYV9sZW4oc2cpICsgc2ctPm9mZnNldDsKIAot CQlldG5hdml2X2RvbWFpbl91bm1hcChkb21haW4sIGRhLCBieXRlcyk7CisJCWV0bmF2aXZfY29u dGV4dF91bm1hcChjb250ZXh0LCBkYSwgYnl0ZXMpOwogCiAJCVZFUkIoInVubWFwWyVkXTogJTA4 eCglengpIiwgaSwgaW92YSwgYnl0ZXMpOwogCkBAIC0xMjUsMjQgKzEyMywyNCBAQCBzdGF0aWMg dm9pZCBldG5hdml2X2lvbW11X3VubWFwKHN0cnVjdCBldG5hdml2X2lvbW11ICppb21tdSwgdTMy IGlvdmEsCiAJfQogfQogCi1zdGF0aWMgdm9pZCBldG5hdml2X2lvbW11X3JlbW92ZV9tYXBwaW5n KHN0cnVjdCBldG5hdml2X2lvbW11ICptbXUsCitzdGF0aWMgdm9pZCBldG5hdml2X2lvbW11X3Jl bW92ZV9tYXBwaW5nKHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQsCiAJc3Ry dWN0IGV0bmF2aXZfdnJhbV9tYXBwaW5nICptYXBwaW5nKQogewogCXN0cnVjdCBldG5hdml2X2dl bV9vYmplY3QgKmV0bmF2aXZfb2JqID0gbWFwcGluZy0+b2JqZWN0OwogCi0JZXRuYXZpdl9pb21t dV91bm1hcChtbXUsIG1hcHBpbmctPnZyYW1fbm9kZS5zdGFydCwKKwlldG5hdml2X2lvbW11X3Vu bWFwKGNvbnRleHQsIG1hcHBpbmctPnZyYW1fbm9kZS5zdGFydCwKIAkJCSAgICBldG5hdml2X29i ai0+c2d0LCBldG5hdml2X29iai0+YmFzZS5zaXplKTsKIAlkcm1fbW1fcmVtb3ZlX25vZGUoJm1h cHBpbmctPnZyYW1fbm9kZSk7CiB9CiAKLXN0YXRpYyBpbnQgZXRuYXZpdl9pb21tdV9maW5kX2lv dmEoc3RydWN0IGV0bmF2aXZfaW9tbXUgKm1tdSwKK3N0YXRpYyBpbnQgZXRuYXZpdl9pb21tdV9m aW5kX2lvdmEoc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dCwKIAkJCQkgICBz dHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUsIHNpemVfdCBzaXplKQogewogCXN0cnVjdCBldG5hdml2 X3ZyYW1fbWFwcGluZyAqZnJlZSA9IE5VTEw7CiAJZW51bSBkcm1fbW1faW5zZXJ0X21vZGUgbW9k ZSA9IERSTV9NTV9JTlNFUlRfTE9XOwogCWludCByZXQ7CiAKLQlsb2NrZGVwX2Fzc2VydF9oZWxk KCZtbXUtPmxvY2spOworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmNvbnRleHQtPmxvY2spOwogCiAJ d2hpbGUgKDEpIHsKIAkJc3RydWN0IGV0bmF2aXZfdnJhbV9tYXBwaW5nICptLCAqbjsKQEAgLTE1 MCwxNyArMTQ4LDE3IEBAIHN0YXRpYyBpbnQgZXRuYXZpdl9pb21tdV9maW5kX2lvdmEoc3RydWN0 IGV0bmF2aXZfaW9tbXUgKm1tdSwKIAkJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCQlib29sIGZv dW5kOwogCi0JCXJldCA9IGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZSgmbW11LT5tbSwgbm9k ZSwKKwkJcmV0ID0gZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKCZjb250ZXh0LT5tbSwgbm9k ZSwKIAkJCQkJCSAgc2l6ZSwgMCwgMCwgMCwgVTY0X01BWCwgbW9kZSk7CiAJCWlmIChyZXQgIT0g LUVOT1NQQykKIAkJCWJyZWFrOwogCiAJCS8qIFRyeSB0byByZXRpcmUgc29tZSBlbnRyaWVzICov Ci0JCWRybV9tbV9zY2FuX2luaXQoJnNjYW4sICZtbXUtPm1tLCBzaXplLCAwLCAwLCBtb2RlKTsK KwkJZHJtX21tX3NjYW5faW5pdCgmc2NhbiwgJmNvbnRleHQtPm1tLCBzaXplLCAwLCAwLCBtb2Rl KTsKIAogCQlmb3VuZCA9IDA7CiAJCUlOSVRfTElTVF9IRUFEKCZsaXN0KTsKLQkJbGlzdF9mb3Jf ZWFjaF9lbnRyeShmcmVlLCAmbW11LT5tYXBwaW5ncywgbW11X25vZGUpIHsKKwkJbGlzdF9mb3Jf ZWFjaF9lbnRyeShmcmVlLCAmY29udGV4dC0+bWFwcGluZ3MsIG1tdV9ub2RlKSB7CiAJCQkvKiBJ ZiB0aGlzIHZyYW0gbm9kZSBoYXMgbm90IGJlZW4gdXNlZCwgc2tpcCB0aGlzLiAqLwogCQkJaWYg KCFmcmVlLT52cmFtX25vZGUubW0pCiAJCQkJY29udGludWU7CkBAIC0yMDIsOCArMjAwLDggQEAg c3RhdGljIGludCBldG5hdml2X2lvbW11X2ZpbmRfaW92YShzdHJ1Y3QgZXRuYXZpdl9pb21tdSAq bW11LAogCQkgKiB0aGlzIG1hcHBpbmcuCiAJCSAqLwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUobSwgbiwgJmxpc3QsIHNjYW5fbm9kZSkgewotCQkJZXRuYXZpdl9pb21tdV9yZW1vdmVfbWFw cGluZyhtbXUsIG0pOwotCQkJbS0+bW11ID0gTlVMTDsKKwkJCWV0bmF2aXZfaW9tbXVfcmVtb3Zl X21hcHBpbmcoY29udGV4dCwgbSk7CisJCQltLT5jb250ZXh0ID0gTlVMTDsKIAkJCWxpc3RfZGVs X2luaXQoJm0tPm1tdV9ub2RlKTsKIAkJCWxpc3RfZGVsX2luaXQoJm0tPnNjYW5fbm9kZSk7CiAJ CX0KQEAgLTIxOSw3ICsyMTcsNyBAQCBzdGF0aWMgaW50IGV0bmF2aXZfaW9tbXVfZmluZF9pb3Zh KHN0cnVjdCBldG5hdml2X2lvbW11ICptbXUsCiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGV0bmF2 aXZfaW9tbXVfbWFwX2dlbShzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11LAoraW50IGV0bmF2aXZf aW9tbXVfbWFwX2dlbShzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICpjb250ZXh0LAogCXN0 cnVjdCBldG5hdml2X2dlbV9vYmplY3QgKmV0bmF2aXZfb2JqLCB1MzIgbWVtb3J5X2Jhc2UsCiAJ c3RydWN0IGV0bmF2aXZfdnJhbV9tYXBwaW5nICptYXBwaW5nKQogewpAQCAtMjI5LDE3ICsyMjcs MTcgQEAgaW50IGV0bmF2aXZfaW9tbXVfbWFwX2dlbShzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11 LAogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZXRuYXZpdl9vYmotPmxvY2spOwogCi0JbXV0ZXhf bG9jaygmbW11LT5sb2NrKTsKKwltdXRleF9sb2NrKCZjb250ZXh0LT5sb2NrKTsKIAogCS8qIHYx IE1NVSBjYW4gb3B0aW1pemUgc2luZ2xlIGVudHJ5IChjb250aWd1b3VzKSBzY2F0dGVybGlzdHMg Ki8KLQlpZiAobW11LT52ZXJzaW9uID09IEVUTkFWSVZfSU9NTVVfVjEgJiYKKwlpZiAoY29udGV4 dC0+Z2xvYmFsLT52ZXJzaW9uID09IEVUTkFWSVZfSU9NTVVfVjEgJiYKIAkgICAgc2d0LT5uZW50 cyA9PSAxICYmICEoZXRuYXZpdl9vYmotPmZsYWdzICYgRVROQV9CT19GT1JDRV9NTVUpKSB7CiAJ CXUzMiBpb3ZhOwogCiAJCWlvdmEgPSBzZ19kbWFfYWRkcmVzcyhzZ3QtPnNnbCkgLSBtZW1vcnlf YmFzZTsKIAkJaWYgKGlvdmEgPCAweDgwMDAwMDAwIC0gc2dfZG1hX2xlbihzZ3QtPnNnbCkpIHsK IAkJCW1hcHBpbmctPmlvdmEgPSBpb3ZhOwotCQkJbGlzdF9hZGRfdGFpbCgmbWFwcGluZy0+bW11 X25vZGUsICZtbXUtPm1hcHBpbmdzKTsKKwkJCWxpc3RfYWRkX3RhaWwoJm1hcHBpbmctPm1tdV9u b2RlLCAmY29udGV4dC0+bWFwcGluZ3MpOwogCQkJcmV0ID0gMDsKIAkJCWdvdG8gdW5sb2NrOwog CQl9CkBAIC0yNDcsMTIgKzI0NSwxMiBAQCBpbnQgZXRuYXZpdl9pb21tdV9tYXBfZ2VtKHN0cnVj dCBldG5hdml2X2lvbW11ICptbXUsCiAKIAlub2RlID0gJm1hcHBpbmctPnZyYW1fbm9kZTsKIAot CXJldCA9IGV0bmF2aXZfaW9tbXVfZmluZF9pb3ZhKG1tdSwgbm9kZSwgZXRuYXZpdl9vYmotPmJh c2Uuc2l6ZSk7CisJcmV0ID0gZXRuYXZpdl9pb21tdV9maW5kX2lvdmEoY29udGV4dCwgbm9kZSwg ZXRuYXZpdl9vYmotPmJhc2Uuc2l6ZSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gdW5sb2NrOwog CiAJbWFwcGluZy0+aW92YSA9IG5vZGUtPnN0YXJ0OwotCXJldCA9IGV0bmF2aXZfaW9tbXVfbWFw KG1tdSwgbm9kZS0+c3RhcnQsIHNndCwgZXRuYXZpdl9vYmotPmJhc2Uuc2l6ZSwKKwlyZXQgPSBl dG5hdml2X2lvbW11X21hcChjb250ZXh0LCBub2RlLT5zdGFydCwgc2d0LCBldG5hdml2X29iai0+ YmFzZS5zaXplLAogCQkJCUVUTkFWSVZfUFJPVF9SRUFEIHwgRVROQVZJVl9QUk9UX1dSSVRFKTsK IAogCWlmIChyZXQgPCAwKSB7CkBAIC0yNjAsNzkgKzI1OCw1OCBAQCBpbnQgZXRuYXZpdl9pb21t dV9tYXBfZ2VtKHN0cnVjdCBldG5hdml2X2lvbW11ICptbXUsCiAJCWdvdG8gdW5sb2NrOwogCX0K IAotCWxpc3RfYWRkX3RhaWwoJm1hcHBpbmctPm1tdV9ub2RlLCAmbW11LT5tYXBwaW5ncyk7Ci0J bW11LT5mbHVzaF9zZXErKzsKKwlsaXN0X2FkZF90YWlsKCZtYXBwaW5nLT5tbXVfbm9kZSwgJmNv bnRleHQtPm1hcHBpbmdzKTsKKwljb250ZXh0LT5mbHVzaF9zZXErKzsKIHVubG9jazoKLQltdXRl eF91bmxvY2soJm1tdS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZjb250ZXh0LT5sb2NrKTsKIAog CXJldHVybiByZXQ7CiB9CiAKLXZvaWQgZXRuYXZpdl9pb21tdV91bm1hcF9nZW0oc3RydWN0IGV0 bmF2aXZfaW9tbXUgKm1tdSwKK3ZvaWQgZXRuYXZpdl9pb21tdV91bm1hcF9nZW0oc3RydWN0IGV0 bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dCwKIAlzdHJ1Y3QgZXRuYXZpdl92cmFtX21hcHBp bmcgKm1hcHBpbmcpCiB7CiAJV0FSTl9PTihtYXBwaW5nLT51c2UpOwogCi0JbXV0ZXhfbG9jaygm bW11LT5sb2NrKTsKKwltdXRleF9sb2NrKCZjb250ZXh0LT5sb2NrKTsKIAogCS8qIElmIHRoZSB2 cmFtIG5vZGUgaXMgb24gdGhlIG1tLCB1bm1hcCBhbmQgcmVtb3ZlIHRoZSBub2RlICovCi0JaWYg KG1hcHBpbmctPnZyYW1fbm9kZS5tbSA9PSAmbW11LT5tbSkKLQkJZXRuYXZpdl9pb21tdV9yZW1v dmVfbWFwcGluZyhtbXUsIG1hcHBpbmcpOworCWlmIChtYXBwaW5nLT52cmFtX25vZGUubW0gPT0g JmNvbnRleHQtPm1tKQorCQlldG5hdml2X2lvbW11X3JlbW92ZV9tYXBwaW5nKGNvbnRleHQsIG1h cHBpbmcpOwogCiAJbGlzdF9kZWwoJm1hcHBpbmctPm1tdV9ub2RlKTsKLQltbXUtPmZsdXNoX3Nl cSsrOwotCW11dGV4X3VubG9jaygmbW11LT5sb2NrKTsKKwljb250ZXh0LT5mbHVzaF9zZXErKzsK KwltdXRleF91bmxvY2soJmNvbnRleHQtPmxvY2spOwogfQogCi12b2lkIGV0bmF2aXZfaW9tbXVf ZGVzdHJveShzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11KQorc3RhdGljIHZvaWQgZXRuYXZpdl9p b21tdV9jb250ZXh0X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpCiB7Ci0JZHJtX21tX3Rha2Vkb3du KCZtbXUtPm1tKTsKLQltbXUtPmRvbWFpbi0+b3BzLT5mcmVlKG1tdS0+ZG9tYWluKTsKLQlrZnJl ZShtbXUpOwotfQorCXN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQgPQorCQlj b250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCwgcmVmY291bnQp OwogCi1zdHJ1Y3QgZXRuYXZpdl9pb21tdSAqZXRuYXZpdl9pb21tdV9uZXcoc3RydWN0IGV0bmF2 aXZfZ3B1ICpncHUpCisJY29udGV4dC0+Z2xvYmFsLT5vcHMtPmZyZWUoY29udGV4dCk7Cit9Cit2 b2lkIGV0bmF2aXZfaW9tbXVfY29udGV4dF9wdXQoc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4 dCAqY29udGV4dCkKIHsKLQllbnVtIGV0bmF2aXZfaW9tbXVfdmVyc2lvbiB2ZXJzaW9uOwotCXN0 cnVjdCBldG5hdml2X2lvbW11ICptbXU7Ci0KLQltbXUgPSBremFsbG9jKHNpemVvZigqbW11KSwg R0ZQX0tFUk5FTCk7Ci0JaWYgKCFtbXUpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0J aWYgKCEoZ3B1LT5pZGVudGl0eS5taW5vcl9mZWF0dXJlczEgJiBjaGlwTWlub3JGZWF0dXJlczFf TU1VX1ZFUlNJT04pKSB7Ci0JCW1tdS0+ZG9tYWluID0gZXRuYXZpdl9pb21tdXYxX2RvbWFpbl9h bGxvYyhncHUpOwotCQl2ZXJzaW9uID0gRVROQVZJVl9JT01NVV9WMTsKLQl9IGVsc2UgewotCQlt bXUtPmRvbWFpbiA9IGV0bmF2aXZfaW9tbXV2Ml9kb21haW5fYWxsb2MoZ3B1KTsKLQkJdmVyc2lv biA9IEVUTkFWSVZfSU9NTVVfVjI7Ci0JfQotCi0JaWYgKCFtbXUtPmRvbWFpbikgewotCQlkZXZf ZXJyKGdwdS0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIEdQVSBJT01NVSBkb21haW5cbiIpOwot CQlrZnJlZShtbXUpOwotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci0KLQltbXUtPmdw dSA9IGdwdTsKLQltbXUtPnZlcnNpb24gPSB2ZXJzaW9uOwotCW11dGV4X2luaXQoJm1tdS0+bG9j ayk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1tdS0+bWFwcGluZ3MpOwotCi0JZHJtX21tX2luaXQoJm1t dS0+bW0sIG1tdS0+ZG9tYWluLT5iYXNlLCBtbXUtPmRvbWFpbi0+c2l6ZSk7Ci0KLQlyZXR1cm4g bW11OworCWtyZWZfcHV0KCZjb250ZXh0LT5yZWZjb3VudCwgZXRuYXZpdl9pb21tdV9jb250ZXh0 X2ZyZWUpOwogfQogCi12b2lkIGV0bmF2aXZfaW9tbXVfcmVzdG9yZShzdHJ1Y3QgZXRuYXZpdl9n cHUgKmdwdSkKK3N0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKgorZXRuYXZpdl9pb21tdV9j b250ZXh0X2luaXQoc3RydWN0IGV0bmF2aXZfaW9tbXVfZ2xvYmFsICpnbG9iYWwpCiB7Ci0JaWYg KGdwdS0+bW11LT52ZXJzaW9uID09IEVUTkFWSVZfSU9NTVVfVjEpCi0JCWV0bmF2aXZfaW9tbXV2 MV9yZXN0b3JlKGdwdSk7CisJaWYgKGdsb2JhbC0+dmVyc2lvbiA9PSBFVE5BVklWX0lPTU1VX1Yx KQorCQlyZXR1cm4gZXRuYXZpdl9pb21tdXYxX2NvbnRleHRfYWxsb2MoZ2xvYmFsKTsKIAllbHNl Ci0JCWV0bmF2aXZfaW9tbXV2Ml9yZXN0b3JlKGdwdSk7CisJCXJldHVybiBldG5hdml2X2lvbW11 djJfY29udGV4dF9hbGxvYyhnbG9iYWwpOworfQorCit2b2lkIGV0bmF2aXZfaW9tbXVfcmVzdG9y ZShzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSwKKwkJCSAgIHN0cnVjdCBldG5hdml2X2lvbW11X2Nv bnRleHQgKmNvbnRleHQpCit7CisJY29udGV4dC0+Z2xvYmFsLT5vcHMtPnJlc3RvcmUoZ3B1LCBj b250ZXh0KTsKIH0KIAotaW50IGV0bmF2aXZfaW9tbXVfZ2V0X3N1YmFsbG9jX3ZhKHN0cnVjdCBl dG5hdml2X2lvbW11ICptbXUsCitpbnQgZXRuYXZpdl9pb21tdV9nZXRfc3ViYWxsb2NfdmEoc3Ry dWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dCwKIAkJCQkgIHN0cnVjdCBldG5hdml2 X3ZyYW1fbWFwcGluZyAqbWFwcGluZywKIAkJCQkgIHUzMiBtZW1vcnlfYmFzZSwgZG1hX2FkZHJf dCBwYWRkciwKIAkJCQkgIHNpemVfdCBzaXplKQpAQCAtMzQwLDIzICszMTcsMjMgQEAgaW50IGV0 bmF2aXZfaW9tbXVfZ2V0X3N1YmFsbG9jX3ZhKHN0cnVjdCBldG5hdml2X2lvbW11ICptbXUsCiAJ c3RydWN0IGRybV9tbV9ub2RlICpub2RlOwogCWludCByZXQ7CiAKLQlpZiAobW11LT52ZXJzaW9u ID09IEVUTkFWSVZfSU9NTVVfVjEpIHsKKwlpZiAoY29udGV4dC0+Z2xvYmFsLT52ZXJzaW9uID09 IEVUTkFWSVZfSU9NTVVfVjEpIHsKIAkJbWFwcGluZy0+aW92YSA9IHBhZGRyIC0gbWVtb3J5X2Jh c2U7CiAJCW1hcHBpbmctPnVzZSA9IDE7Ci0JCWxpc3RfYWRkX3RhaWwoJm1hcHBpbmctPm1tdV9u b2RlLCAmbW11LT5tYXBwaW5ncyk7CisJCWxpc3RfYWRkX3RhaWwoJm1hcHBpbmctPm1tdV9ub2Rl LCAmY29udGV4dC0+bWFwcGluZ3MpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlub2RlID0gJm1hcHBp bmctPnZyYW1fbm9kZTsKIAotCW11dGV4X2xvY2soJm1tdS0+bG9jayk7CisJbXV0ZXhfbG9jaygm Y29udGV4dC0+bG9jayk7CiAKLQlyZXQgPSBldG5hdml2X2lvbW11X2ZpbmRfaW92YShtbXUsIG5v ZGUsIHNpemUpOworCXJldCA9IGV0bmF2aXZfaW9tbXVfZmluZF9pb3ZhKGNvbnRleHQsIG5vZGUs IHNpemUpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIHVubG9jazsKIAogCW1hcHBpbmctPmlvdmEg PSBub2RlLT5zdGFydDsKLQlyZXQgPSBldG5hdml2X2RvbWFpbl9tYXAobW11LT5kb21haW4sIG5v ZGUtPnN0YXJ0LCBwYWRkciwgc2l6ZSwKKwlyZXQgPSBldG5hdml2X2NvbnRleHRfbWFwKGNvbnRl eHQsIG5vZGUtPnN0YXJ0LCBwYWRkciwgc2l6ZSwKIAkJCQkgRVROQVZJVl9QUk9UX1JFQUQpOwog CiAJaWYgKHJldCA8IDApIHsKQEAgLTM2NCwzNiArMzQxLDk2IEBAIGludCBldG5hdml2X2lvbW11 X2dldF9zdWJhbGxvY192YShzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11LAogCQlnb3RvIHVubG9j azsKIAl9CiAKLQlsaXN0X2FkZF90YWlsKCZtYXBwaW5nLT5tbXVfbm9kZSwgJm1tdS0+bWFwcGlu Z3MpOwotCW1tdS0+Zmx1c2hfc2VxKys7CisJbGlzdF9hZGRfdGFpbCgmbWFwcGluZy0+bW11X25v ZGUsICZjb250ZXh0LT5tYXBwaW5ncyk7CisJY29udGV4dC0+Zmx1c2hfc2VxKys7CiB1bmxvY2s6 Ci0JbXV0ZXhfdW5sb2NrKCZtbXUtPmxvY2spOworCW11dGV4X3VubG9jaygmY29udGV4dC0+bG9j ayk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIGV0bmF2aXZfaW9tbXVfcHV0X3N1YmFsbG9j X3ZhKHN0cnVjdCBldG5hdml2X2lvbW11ICptbXUsCit2b2lkIGV0bmF2aXZfaW9tbXVfcHV0X3N1 YmFsbG9jX3ZhKHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQsCiAJCSAgc3Ry dWN0IGV0bmF2aXZfdnJhbV9tYXBwaW5nICptYXBwaW5nKQogewogCXN0cnVjdCBkcm1fbW1fbm9k ZSAqbm9kZSA9ICZtYXBwaW5nLT52cmFtX25vZGU7CiAKIAltYXBwaW5nLT51c2UgPSAwOwogCi0J aWYgKG1tdS0+dmVyc2lvbiA9PSBFVE5BVklWX0lPTU1VX1YxKQorCWlmIChjb250ZXh0LT5nbG9i YWwtPnZlcnNpb24gPT0gRVROQVZJVl9JT01NVV9WMSkKIAkJcmV0dXJuOwogCi0JbXV0ZXhfbG9j aygmbW11LT5sb2NrKTsKLQlldG5hdml2X2RvbWFpbl91bm1hcChtbXUtPmRvbWFpbiwgbm9kZS0+ c3RhcnQsIG5vZGUtPnNpemUpOworCW11dGV4X2xvY2soJmNvbnRleHQtPmxvY2spOworCWV0bmF2 aXZfY29udGV4dF91bm1hcChjb250ZXh0LCBub2RlLT5zdGFydCwgbm9kZS0+c2l6ZSk7CiAJZHJt X21tX3JlbW92ZV9ub2RlKG5vZGUpOwotCW11dGV4X3VubG9jaygmbW11LT5sb2NrKTsKKwltdXRl eF91bmxvY2soJmNvbnRleHQtPmxvY2spOwogfQogCi1zaXplX3QgZXRuYXZpdl9pb21tdV9kdW1w X3NpemUoc3RydWN0IGV0bmF2aXZfaW9tbXUgKmlvbW11KQorc2l6ZV90IGV0bmF2aXZfaW9tbXVf ZHVtcF9zaXplKHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQpCiB7Ci0JcmV0 dXJuIGlvbW11LT5kb21haW4tPm9wcy0+ZHVtcF9zaXplKGlvbW11LT5kb21haW4pOworCXJldHVy biBjb250ZXh0LT5nbG9iYWwtPm9wcy0+ZHVtcF9zaXplKGNvbnRleHQpOwogfQogCi12b2lkIGV0 bmF2aXZfaW9tbXVfZHVtcChzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqaW9tbXUsIHZvaWQgKmJ1ZikK K3ZvaWQgZXRuYXZpdl9pb21tdV9kdW1wKHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNv bnRleHQsIHZvaWQgKmJ1ZikKK3sKKwljb250ZXh0LT5nbG9iYWwtPm9wcy0+ZHVtcChjb250ZXh0 LCBidWYpOworfQorCitleHRlcm4gY29uc3Qgc3RydWN0IGV0bmF2aXZfaW9tbXVfb3BzIGV0bmF2 aXZfaW9tbXV2MV9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGV0bmF2aXZfaW9tbXVfb3BzIGV0 bmF2aXZfaW9tbXV2Ml9vcHM7CisKK3N0cnVjdCBldG5hdml2X2lvbW11X2dsb2JhbCAqCitldG5h dml2X2lvbW11X2dsb2JhbF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgZW51bSBldG5h dml2X2lvbW11X3ZlcnNpb24gdmVyc2lvbikKIHsKLQlpb21tdS0+ZG9tYWluLT5vcHMtPmR1bXAo aW9tbXUtPmRvbWFpbiwgYnVmKTsKKwlzdHJ1Y3QgZXRuYXZpdl9pb21tdV9nbG9iYWwgKmdsb2Jh bDsKKworCWdsb2JhbCA9IGt6YWxsb2Moc2l6ZW9mKCpnbG9iYWwpLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIWdsb2JhbCkKKwkJcmV0dXJuIE5VTEw7CisKKwlnbG9iYWwtPmJhZF9wYWdlX2NwdSA9IGRt YV9hbGxvY193YyhkZXYsIFNaXzRLLCAmZ2xvYmFsLT5iYWRfcGFnZV9kbWEsCisJCQkJCSAgICBH RlBfS0VSTkVMKTsKKwlpZiAoIWdsb2JhbC0+YmFkX3BhZ2VfY3B1KQorCQlnb3RvIGZyZWVfZ2xv YmFsOworCisJbWVtc2V0MzIoZ2xvYmFsLT5iYWRfcGFnZV9jcHUsIDB4ZGVhZDU1YWEsIFNaXzRL IC8gc2l6ZW9mKHUzMikpOworCisJaWYgKHZlcnNpb24gPT0gRVROQVZJVl9JT01NVV9WMikgewor CQlnbG9iYWwtPnYyLnB0YV9jcHUgPSBkbWFfYWxsb2Nfd2MoZGV2LCBFVE5BVklWX1BUQV9TSVpF LAorCQkJCQkgICAgICAgJmdsb2JhbC0+djIucHRhX2RtYSwgR0ZQX0tFUk5FTCk7CisJCWlmICgh Z2xvYmFsLT52Mi5wdGFfY3B1KQorCQkJZ290byBmcmVlX2JhZF9wYWdlOworCX0KKworCWdsb2Jh bC0+ZGV2ID0gZGV2OworCWdsb2JhbC0+dmVyc2lvbiA9IHZlcnNpb247CisJbXV0ZXhfaW5pdCgm Z2xvYmFsLT5sb2NrKTsKKworCWlmICh2ZXJzaW9uID09IEVUTkFWSVZfSU9NTVVfVjEpCisJCWds b2JhbC0+b3BzID0gJmV0bmF2aXZfaW9tbXV2MV9vcHM7CisJZWxzZQorCQlnbG9iYWwtPm9wcyA9 ICZldG5hdml2X2lvbW11djJfb3BzOworCisJcmV0dXJuIGdsb2JhbDsKKworZnJlZV9iYWRfcGFn ZToKKwlkbWFfZnJlZV93YyhkZXYsIFNaXzRLLCBnbG9iYWwtPmJhZF9wYWdlX2NwdSwgZ2xvYmFs LT5iYWRfcGFnZV9kbWEpOworZnJlZV9nbG9iYWw6CisJa2ZyZWUoZ2xvYmFsKTsKKworCXJldHVy biBOVUxMOworfQorCit2b2lkIGV0bmF2aXZfaW9tbXVfZ2xvYmFsX2Zpbmkoc3RydWN0IGV0bmF2 aXZfaW9tbXVfZ2xvYmFsICpnbG9iYWwpCit7CisJaWYgKGdsb2JhbC0+djIucHRhX2NwdSkKKwkJ ZG1hX2ZyZWVfd2MoZ2xvYmFsLT5kZXYsIEVUTkFWSVZfUFRBX1NJWkUsCisJCQkgICAgZ2xvYmFs LT52Mi5wdGFfY3B1LCBnbG9iYWwtPnYyLnB0YV9kbWEpOworCisJaWYgKGdsb2JhbC0+YmFkX3Bh Z2VfY3B1KQorCQlkbWFfZnJlZV93YyhnbG9iYWwtPmRldiwgU1pfNEssCisJCQkgICAgZ2xvYmFs LT5iYWRfcGFnZV9jcHUsIGdsb2JhbC0+YmFkX3BhZ2VfZG1hKTsKKworCW11dGV4X2Rlc3Ryb3ko Jmdsb2JhbC0+bG9jayk7CisJa2ZyZWUoZ2xvYmFsKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9ldG5hdml2L2V0bmF2aXZfbW11LmggYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9l dG5hdml2X21tdS5oCmluZGV4IDM0YWZlMjVkZjljYS4uZmJjZWZjZTg3M2NhIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X21tdS5oCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9ldG5hdml2L2V0bmF2aXZfbW11LmgKQEAgLTE2LDMzICsxNiw1NCBAQCBlbnVtIGV0bmF2 aXZfaW9tbXVfdmVyc2lvbiB7CiAKIHN0cnVjdCBldG5hdml2X2dwdTsKIHN0cnVjdCBldG5hdml2 X3ZyYW1fbWFwcGluZzsKLXN0cnVjdCBldG5hdml2X2lvbW11X2RvbWFpbjsKK3N0cnVjdCBldG5h dml2X2lvbW11X2dsb2JhbDsKK3N0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQ7CiAKLXN0cnVj dCBldG5hdml2X2lvbW11X2RvbWFpbl9vcHMgewotCXZvaWQgKCpmcmVlKShzdHJ1Y3QgZXRuYXZp dl9pb21tdV9kb21haW4gKik7Ci0JaW50ICgqbWFwKShzdHJ1Y3QgZXRuYXZpdl9pb21tdV9kb21h aW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAorc3RydWN0IGV0bmF2aXZfaW9tbXVfb3Bz IHsKKwlzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICooKmluaXQpKHN0cnVjdCBldG5hdml2 X2lvbW11X2dsb2JhbCAqKTsKKwl2b2lkICgqZnJlZSkoc3RydWN0IGV0bmF2aXZfaW9tbXVfY29u dGV4dCAqKTsKKwlpbnQgKCptYXApKHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRl eHQsIHVuc2lnbmVkIGxvbmcgaW92YSwKIAkJICAgcGh5c19hZGRyX3QgcGFkZHIsIHNpemVfdCBz aXplLCBpbnQgcHJvdCk7Ci0Jc2l6ZV90ICgqdW5tYXApKHN0cnVjdCBldG5hdml2X2lvbW11X2Rv bWFpbiAqZG9tYWluLCB1bnNpZ25lZCBsb25nIGlvdmEsCisJc2l6ZV90ICgqdW5tYXApKHN0cnVj dCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQsIHVuc2lnbmVkIGxvbmcgaW92YSwKIAkJ CXNpemVfdCBzaXplKTsKLQlzaXplX3QgKCpkdW1wX3NpemUpKHN0cnVjdCBldG5hdml2X2lvbW11 X2RvbWFpbiAqKTsKLQl2b2lkICgqZHVtcCkoc3RydWN0IGV0bmF2aXZfaW9tbXVfZG9tYWluICos IHZvaWQgKik7CisJc2l6ZV90ICgqZHVtcF9zaXplKShzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250 ZXh0ICopOworCXZvaWQgKCpkdW1wKShzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICosIHZv aWQgKik7CisJdm9pZCAoKnJlc3RvcmUpKHN0cnVjdCBldG5hdml2X2dwdSAqLCBzdHJ1Y3QgZXRu YXZpdl9pb21tdV9jb250ZXh0ICopOwogfTsKIAotc3RydWN0IGV0bmF2aXZfaW9tbXVfZG9tYWlu IHsKKyNkZWZpbmUgRVROQVZJVl9QVEFfU0laRQlTWl80SworI2RlZmluZSBFVE5BVklWX1BUQV9F TlRSSUVTCShFVE5BVklWX1BUQV9TSVpFIC8gc2l6ZW9mKHU2NCkpCisKK3N0cnVjdCBldG5hdml2 X2lvbW11X2dsb2JhbCB7CiAJc3RydWN0IGRldmljZSAqZGV2OworCWVudW0gZXRuYXZpdl9pb21t dV92ZXJzaW9uIHZlcnNpb247CisJY29uc3Qgc3RydWN0IGV0bmF2aXZfaW9tbXVfb3BzICpvcHM7 CisJc3RydWN0IG11dGV4IGxvY2s7CisKIAl2b2lkICpiYWRfcGFnZV9jcHU7CiAJZG1hX2FkZHJf dCBiYWRfcGFnZV9kbWE7Ci0JdTY0IGJhc2U7Ci0JdTY0IHNpemU7CiAKLQljb25zdCBzdHJ1Y3Qg ZXRuYXZpdl9pb21tdV9kb21haW5fb3BzICpvcHM7CisJLyoKKwkgKiBUaGlzIHVuaW9uIGhvbGRz IG1lbWJlcnMgbmVlZGVkIGJ5IGVpdGhlciBNTVV2MSBvciBNTVV2Miwgd2hpY2gKKwkgKiBjYW4g bm90IGV4aXN0IGF0IHRoZSBzYW1lIHRpbWUuCisJICovCisJdW5pb24geworCQlzdHJ1Y3Qgewor CQkJc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqc2hhcmVkX2NvbnRleHQ7CisJCX0gdjE7 CisJCXN0cnVjdCB7CisJCQkvKiBQKGFnZSkgVChhYmxlKSBBKHJyYXkpICovCisJCQl1NjQgKnB0 YV9jcHU7CisJCQlkbWFfYWRkcl90IHB0YV9kbWE7CisJCQlzdHJ1Y3Qgc3BpbmxvY2sgcHRhX2xv Y2s7CisJCQlERUNMQVJFX0JJVE1BUChwdGFfYWxsb2MsIEVUTkFWSVZfUFRBX0VOVFJJRVMpOwor CQl9IHYyOworCX07CiB9OwogCi1zdHJ1Y3QgZXRuYXZpdl9pb21tdSB7Ci0Jc3RydWN0IGV0bmF2 aXZfZ3B1ICpncHU7Ci0Jc3RydWN0IGV0bmF2aXZfaW9tbXVfZG9tYWluICpkb21haW47Ci0KLQll bnVtIGV0bmF2aXZfaW9tbXVfdmVyc2lvbiB2ZXJzaW9uOworc3RydWN0IGV0bmF2aXZfaW9tbXVf Y29udGV4dCB7CisJc3RydWN0IGtyZWYgcmVmY291bnQ7CisJc3RydWN0IGV0bmF2aXZfaW9tbXVf Z2xvYmFsICpnbG9iYWw7CiAKIAkvKiBtZW1vcnkgbWFuYWdlciBmb3IgR1BVIGFkZHJlc3MgYXJl YSAqLwogCXN0cnVjdCBtdXRleCBsb2NrOwpAQCAtNTEsMjYgKzcyLDQxIEBAIHN0cnVjdCBldG5h dml2X2lvbW11IHsKIAl1bnNpZ25lZCBpbnQgZmx1c2hfc2VxOwogfTsKIAorc3RydWN0IGV0bmF2 aXZfaW9tbXVfZ2xvYmFsICpldG5hdml2X2lvbW11X2dsb2JhbF9pbml0KHN0cnVjdCBkZXZpY2Ug KmRldiwKKwkJZW51bSBldG5hdml2X2lvbW11X3ZlcnNpb24gdmVyc2lvbik7Cit2b2lkIGV0bmF2 aXZfaW9tbXVfZ2xvYmFsX2Zpbmkoc3RydWN0IGV0bmF2aXZfaW9tbXVfZ2xvYmFsICpnbG9iYWwp OworCiBzdHJ1Y3QgZXRuYXZpdl9nZW1fb2JqZWN0OwogCi1pbnQgZXRuYXZpdl9pb21tdV9tYXBf Z2VtKHN0cnVjdCBldG5hdml2X2lvbW11ICptbXUsCitpbnQgZXRuYXZpdl9pb21tdV9tYXBfZ2Vt KHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQsCiAJc3RydWN0IGV0bmF2aXZf Z2VtX29iamVjdCAqZXRuYXZpdl9vYmosIHUzMiBtZW1vcnlfYmFzZSwKIAlzdHJ1Y3QgZXRuYXZp dl92cmFtX21hcHBpbmcgKm1hcHBpbmcpOwotdm9pZCBldG5hdml2X2lvbW11X3VubWFwX2dlbShz dHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11LAordm9pZCBldG5hdml2X2lvbW11X3VubWFwX2dlbShz dHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICpjb250ZXh0LAogCXN0cnVjdCBldG5hdml2X3Zy YW1fbWFwcGluZyAqbWFwcGluZyk7CiAKLWludCBldG5hdml2X2lvbW11X2dldF9zdWJhbGxvY192 YShzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11LAoraW50IGV0bmF2aXZfaW9tbXVfZ2V0X3N1YmFs bG9jX3ZhKHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmN0eCwKIAkJCQkgIHN0cnVjdCBl dG5hdml2X3ZyYW1fbWFwcGluZyAqbWFwcGluZywKIAkJCQkgIHUzMiBtZW1vcnlfYmFzZSwgZG1h X2FkZHJfdCBwYWRkciwKIAkJCQkgIHNpemVfdCBzaXplKTsKLXZvaWQgZXRuYXZpdl9pb21tdV9w dXRfc3ViYWxsb2NfdmEoc3RydWN0IGV0bmF2aXZfaW9tbXUgKm1tdSwKK3ZvaWQgZXRuYXZpdl9p b21tdV9wdXRfc3ViYWxsb2NfdmEoc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY3R4LAog CQkJCSAgIHN0cnVjdCBldG5hdml2X3ZyYW1fbWFwcGluZyAqbWFwcGluZyk7CiAKLXNpemVfdCBl dG5hdml2X2lvbW11X2R1bXBfc2l6ZShzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqaW9tbXUpOwotdm9p ZCBldG5hdml2X2lvbW11X2R1bXAoc3RydWN0IGV0bmF2aXZfaW9tbXUgKmlvbW11LCB2b2lkICpi dWYpOwotCi1zdHJ1Y3QgZXRuYXZpdl9pb21tdSAqZXRuYXZpdl9pb21tdV9uZXcoc3RydWN0IGV0 bmF2aXZfZ3B1ICpncHUpOwotdm9pZCBldG5hdml2X2lvbW11X2Rlc3Ryb3koc3RydWN0IGV0bmF2 aXZfaW9tbXUgKmlvbW11KTsKLXZvaWQgZXRuYXZpdl9pb21tdV9yZXN0b3JlKHN0cnVjdCBldG5h dml2X2dwdSAqZ3B1KTsKK3NpemVfdCBldG5hdml2X2lvbW11X2R1bXBfc2l6ZShzdHJ1Y3QgZXRu YXZpdl9pb21tdV9jb250ZXh0ICpjdHgpOwordm9pZCBldG5hdml2X2lvbW11X2R1bXAoc3RydWN0 IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY3R4LCB2b2lkICpidWYpOworCitzdHJ1Y3QgZXRuYXZp dl9pb21tdV9jb250ZXh0ICoKK2V0bmF2aXZfaW9tbXVfY29udGV4dF9pbml0KHN0cnVjdCBldG5h dml2X2lvbW11X2dsb2JhbCAqZ2xvYmFsKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBldG5hdml2X2lv bW11X2NvbnRleHRfZ2V0KHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmN0eCkKK3sKKwlr cmVmX2dldCgmY3R4LT5yZWZjb3VudCk7Cit9Cit2b2lkIGV0bmF2aXZfaW9tbXVfY29udGV4dF9w dXQoc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY3R4KTsKK3ZvaWQgZXRuYXZpdl9pb21t dV9yZXN0b3JlKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1LAorCQkJICAgc3RydWN0IGV0bmF2aXZf aW9tbXVfY29udGV4dCAqY3R4KTsKKworc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqCitl dG5hdml2X2lvbW11djFfY29udGV4dF9hbGxvYyhzdHJ1Y3QgZXRuYXZpdl9pb21tdV9nbG9iYWwg Kmdsb2JhbCk7CitzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICoKK2V0bmF2aXZfaW9tbXV2 Ml9jb250ZXh0X2FsbG9jKHN0cnVjdCBldG5hdml2X2lvbW11X2dsb2JhbCAqZ2xvYmFsKTsKIAog I2VuZGlmIC8qIF9fRVROQVZJVl9NTVVfSF9fICovCi0tIAoyLjE5LjEKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QK ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=