From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sharat Masetty Subject: [PATCH 3/6] drm/msm/A6xx: Implement preemption for A6XX targets Date: Thu, 8 Mar 2018 11:36:22 +0530 Message-ID: <1520489185-21828-4-git-send-email-smasetty@codeaurora.org> References: <1520489185-21828-1-git-send-email-smasetty@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1520489185-21828-1-git-send-email-smasetty@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: freedreno@lists.freedesktop.org Cc: linux-arm-msm@vger.kernel.org, Sharat Masetty , dri-devel@lists.freedesktop.org List-Id: linux-arm-msm@vger.kernel.org VGhpcyBwYXRjaCBpbXBsZW1lbnRzIHByZWVtcHRpb24gZmVhdHVyZSBmb3IgQTZ4eCB0YXJnZXRz LCB0aGlzIGFsbG93cwp0aGUgR1BVIHRvIHN3aXRjaCB0byBhIGhpZ2hlciBwcmlvcml0eSByaW5n YnVmZmVyIGlmIG9uZSBpcyByZWFkeS4gQTZYWApoYXJkd2FyZSBhcyBzdWNoIHN1cHBvcnRzIG11 bHRpcGxlIGxldmVscyBvZiBwcmVlbXB0aW9uIGdyYW51bGFyaXRpZXMsCnJhbmdpbmcgZnJvbSBj b2Fyc2UgZ3JhaW5lZChyaW5nYnVmZmVyIGxldmVsKSB0byBhIG1vcmUgZmluZSBncmFpbmVkCnN1 Y2ggYXMgZHJhdy1jYWxsIGxldmVsIG9yIGEgYmluIGJvdW5kYXJ5IGxldmVsIHByZWVtcHRpb24u IFRoaXMgcGF0Y2gKZW5hYmxlcyB0aGUgYmFzaWMgcHJlZW1wdGlvbiBsZXZlbCwgd2l0aCBtb3Jl IGZpbmUgZ3JhaW5lZCBwcmVlbXB0aW9uCnN1cHBvcnQgdG8gZm9sbG93LgoKU2lnbmVkLW9mZi1i eTogU2hhcmF0IE1hc2V0dHkgPHNtYXNldHR5QGNvZGVhdXJvcmEub3JnPgotLS0KIGRyaXZlcnMv Z3B1L2RybS9tc20vTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2Ry bS9tc20vYWRyZW5vL2E2eHhfZ211LmMgICAgIHwgIDQ0ICsrKysKIGRyaXZlcnMvZ3B1L2RybS9t c20vYWRyZW5vL2E2eHhfZ3B1LmMgICAgIHwgMTQ2ICsrKysrKysrKysrLQogZHJpdmVycy9ncHUv ZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHUuaCAgICAgfCAxMzYgKysrKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS9tc20vYWRyZW5vL2E2eHhfcHJlZW1wdC5jIHwgMzgzICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA3MDggaW5zZXJ0aW9ucygrKSwgMiBkZWxl dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9h Nnh4X3ByZWVtcHQuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCmluZGV4IDBiNmUxNTAuLjE5NzgzMTIgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9NYWtlZmlsZQpAQCAtMTMsNiArMTMsNyBAQCBtc20teSA6PSBcCiAJYWRyZW5vL2E2 eHhfZ3B1Lm8gXAogCWFkcmVuby9hNnh4X2dtdS5vIFwKIAlhZHJlbm8vYTZ4eF9oZmkubyBcCisJ YWRyZW5vL2E2eHhfcHJlZW1wdC5vIFwKIAloZG1pL2hkbWkubyBcCiAJaGRtaS9oZG1pX2F1ZGlv Lm8gXAogCWhkbWkvaGRtaV9icmlkZ2UubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2FkcmVuby9hNnh4X2dtdS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9n bXUuYwppbmRleCA4ZDczMmUwLi41YzJhNjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2FkcmVuby9hNnh4X2dtdS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2 eHhfZ211LmMKQEAgLTExNDUsNiArMTE0NSw1MCBAQCB2b2lkIGE2eHhfZ211X3JlbW92ZShzdHJ1 Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1KQogCWlvbW11X2RvbWFpbl9mcmVlKGdtdS0+ZG9tYWluKTsK IH0KIAorI2RlZmluZSBBNlhYX0dNVV9GRU5DRURfV1JJVEVfU0xFRVBfVVMgMTAgLyogU2xlZXAg dGltZSBiZXR3ZWVuIHJlYWRzIGluIHVzICovCisjZGVmaW5lIEE2WFhfR01VX0ZFTkNFRF9XUklU RV9USU1FT1VUICA2MDAgLyogVGltZW91dCBpbiB1cyAqLworaW50IGE2eHhfZ211X2ZlbmNlZF93 cml0ZShzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1LCB1bnNpZ25lZCBpbnQgcmVnLAorCQl1bnNp Z25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGludCBmZW5jZV9tYXNrKQoreworCXN0cnVjdCBhNnh4 X2dtdSAqZ211ID0gJmE2eHhfZ3B1LT5nbXU7CisJc3RydWN0IGFkcmVub19ncHUgKmFkcmVub19n cHUgPSAmYTZ4eF9ncHUtPmJhc2U7CisJc3RydWN0IG1zbV9ncHUgKmdwdSA9ICZhZHJlbm9fZ3B1 LT5iYXNlOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisJa3RpbWVfdCB0aW1lb3V0ID0ga3RpbWVf YWRkX3VzKGt0aW1lX2dldCgpLAorCQkJQTZYWF9HTVVfRkVOQ0VEX1dSSVRFX1RJTUVPVVQpOwor CisJLyogV3JpdGUgdG8gdGhlIEdQVSByZWdpc3RlciAqLworCWdwdV93cml0ZShncHUsIHJlZywg dmFsdWUpOworCisJbWlnaHRfc2xlZXBfaWYoQTZYWF9HTVVfRkVOQ0VEX1dSSVRFX1NMRUVQX1VT KTsKKwlmb3IgKDs7KSB7CisJCXN0YXR1cyA9IGdtdV9yZWFkKGdtdSwgUkVHX0E2WFhfR01VX0FI Ql9GRU5DRV9TVEFUVVMpOworCQkvKgorCQkgKiBJZiBubyBiaXRzIG9mIHRoZSBmZW5jZV9tYXNr IGFyZSBzZXQgaW4gdGhlIHN0YXR1cywgdGhlbiB0aGUKKwkJICogd3JpdGUgd2FzIHN1Y2Nlc3Nm dWwKKwkJICovCisJCWlmICghKHN0YXR1cyAmIGZlbmNlX21hc2spKQorCQkJcmV0dXJuIDA7CisK KwkJaWYgKGt0aW1lX2NvbXBhcmUoa3RpbWVfZ2V0KCksIHRpbWVvdXQpID4gMCkgeworCQkJLyog VGltZWQgb3V0LCBidXQgY2hlY2sgb25lIGxhc3QgdGltZSAqLworCQkJc3RhdHVzID0gZ211X3Jl YWQoZ211LCBSRUdfQTZYWF9HTVVfQUhCX0ZFTkNFX1NUQVRVUyk7CisJCQlpZiAoIShzdGF0dXMg JiBmZW5jZV9tYXNrKSkKKwkJCQlyZXR1cm4gMDsKKworCQkJYnJlYWs7CisJCX0KKworCQl1c2xl ZXBfcmFuZ2UoKEE2WFhfR01VX0ZFTkNFRF9XUklURV9TTEVFUF9VUyA+PiAyKSArIDEsCisJCQkJ QTZYWF9HTVVfRkVOQ0VEX1dSSVRFX1NMRUVQX1VTKTsKKworCQkvKiBUcnkgd3JpdGluZyBhZ2Fp biAqLworCQlncHVfd3JpdGUoZ3B1LCByZWcsIHZhbHVlKTsKKwl9CisKKwlyZXR1cm4gLUVUSU1F RE9VVDsKK30KKwogaW50IGE2eHhfZ211X3Byb2JlKHN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUs IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKIHsKIAlzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSA9ICZh Nnh4X2dwdS0+Z211OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4 eF9ncHUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1LmMKaW5kZXggYzcy NDM0Yi4uYjFhODBlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4 eF9ncHUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdS5jCkBAIC0x NTEsNiArMTUxLDggQEAgYm9vbCBhNnh4X2lkbGUoc3RydWN0IG1zbV9ncHUgKmdwdSwgc3RydWN0 IG1zbV9yaW5nYnVmZmVyICpyaW5nKQogCiBzdGF0aWMgdm9pZCBhNnh4X2ZsdXNoKHN0cnVjdCBt c21fZ3B1ICpncHUsIHN0cnVjdCBtc21fcmluZ2J1ZmZlciAqcmluZykKIHsKKwlzdHJ1Y3QgYWRy ZW5vX2dwdSAqYWRyZW5vX2dwdSA9IHRvX2FkcmVub19ncHUoZ3B1KTsKKwlzdHJ1Y3QgYTZ4eF9n cHUgKmE2eHhfZ3B1ID0gdG9fYTZ4eF9ncHUoYWRyZW5vX2dwdSk7CiAJdWludDMyX3Qgd3B0cjsK IAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xNjcsMTYgKzE2OSw1MiBAQCBzdGF0aWMgdm9p ZCBhNnh4X2ZsdXNoKHN0cnVjdCBtc21fZ3B1ICpncHUsIHN0cnVjdCBtc21fcmluZ2J1ZmZlciAq cmluZykKIAkvKiBNYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBwb3N0ZWQgYmVmb3JlIG1ha2luZyBh IGRlY2lzaW9uICovCiAJbWIoKTsKIAotCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0NQX1JCX1dQ VFIsIHdwdHIpOworCS8qIFVwZGF0ZSBIVyBpZiB0aGlzIGlzIHRoZSBjdXJyZW50IHJpbmcgYW5k IHdlIGFyZSBub3QgaW4gcHJlZW1wdCovCisJaWYgKGE2eHhfZ3B1LT5jdXJfcmluZyA9PSByaW5n ICYmICFhNnh4X2luX3ByZWVtcHQoYTZ4eF9ncHUpKQorCQlncHVfd3JpdGUoZ3B1LCBSRUdfQTZY WF9DUF9SQl9XUFRSLCB3cHRyKTsKIH0KIAogc3RhdGljIHZvaWQgYTZ4eF9zdWJtaXQoc3RydWN0 IG1zbV9ncHUgKmdwdSwgc3RydWN0IG1zbV9nZW1fc3VibWl0ICpzdWJtaXQsCiAJc3RydWN0IG1z bV9maWxlX3ByaXZhdGUgKmN0eCkKIHsKKwlzdHJ1Y3QgYWRyZW5vX2dwdSAqYWRyZW5vX2dwdSA9 IHRvX2FkcmVub19ncHUoZ3B1KTsKKwlzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1ID0gdG9fYTZ4 eF9ncHUoYWRyZW5vX2dwdSk7CiAJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGdwdS0+ ZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgbXNtX3JpbmdidWZmZXIgKnJpbmcgPSBzdWJtaXQt PnJpbmc7CisJdWludDY0X3Qgc2NyYXRjaF9kZXN0ID0gU0NSQVRDSF9VU0VSX0NUWF9JT1ZBKHJp bmctPmlkLCBhNnh4X2dwdSk7CiAJdW5zaWduZWQgaW50IGk7CiAKKwkvKgorCSAqIElmIHByZWVt cHRpb24gaXMgZW5hYmxlZCwgdGhlbiBzZXQgdGhlIHBzZXVkbyByZWdpc3RlciBmb3IgdGhlIHNh dmUKKwkgKiBzZXF1ZW5jZQorCSAqLworCWlmIChncHUtPm5yX3JpbmdzID4gMSkgeworCQlzdHJ1 Y3QgbXNtX2dwdV9zdWJtaXRxdWV1ZSAqcXVldWUgPSBzdWJtaXQtPnF1ZXVlOworCisJCU9VVF9Q S1Q3KHJpbmcsIENQX1NFVF9QU0VVRE9fUkVHLCA2KTsKKworCQkvKiBwcml2aWxlZ2VkIGFuZCBu b24gc2VjdXJlIGJ1ZmZlciBzYXZlICovCisJCU9VVF9SSU5HKHJpbmcsIFNBVkVfUkVHX1BSSVZf Tk9OX1NFQ1VSRV9TQVZFX0FERFJfSUQpOworCQlPVVRfUklORyhyaW5nLCBsb3dlcl8zMl9iaXRz KGE2eHhfZ3B1LT5wcmVlbXB0X2lvdmFbcmluZy0+aWRdKSk7CisJCU9VVF9SSU5HKHJpbmcsIHVw cGVyXzMyX2JpdHMoYTZ4eF9ncHUtPnByZWVtcHRfaW92YVtyaW5nLT5pZF0pKTsKKworCQkvKiB1 c2VyIGNvbnRleHQgYnVmZmVyIHNhdmUgKi8KKwkJT1VUX1JJTkcocmluZywgU0FWRV9SRUdfTk9O X1BSSVZfU0FWRV9BRERSX0lEKTsKKwkJT1VUX1JJTkcocmluZywgbG93ZXJfMzJfYml0cyhxdWV1 ZS0+Ym9faW92YSkpOworCQlPVVRfUklORyhyaW5nLCB1cHBlcl8zMl9iaXRzKHF1ZXVlLT5ib19p b3ZhKSk7CisKKwkJLyoKKwkJICogQXNrIENQIHRvIHNhdmUgdGhlIHVzZXIgY29udGV4dCBidWZm ZXIncyBpb3ZhIGFkZHJlc3MgdG8gYQorCQkgKiBzY3JhdGNoIG1lbW9yeSByZWdpb24sIHRoaXMg aXMgbmVlZGVkIGlmIHRoZSBDUCBwcmVlbXB0cworCQkgKiB0aGlzIHJpbmcgaW4gYmV0d2VlbiB0 aGlzIHN1Ym1pdCdzIElCIGxpc3QuCisJCSAqLworCQlPVVRfUEtUNyhyaW5nLCBDUF9NRU1fV1JJ VEUsIDQpOworCQlPVVRfUklORyhyaW5nLCBsb3dlcl8zMl9iaXRzKHNjcmF0Y2hfZGVzdCkpOwor CQlPVVRfUklORyhyaW5nLCB1cHBlcl8zMl9iaXRzKHNjcmF0Y2hfZGVzdCkpOworCQlPVVRfUklO RyhyaW5nLCBsb3dlcl8zMl9iaXRzKHF1ZXVlLT5ib19pb3ZhKSk7CisJCU9VVF9SSU5HKHJpbmcs IHVwcGVyXzMyX2JpdHMocXVldWUtPmJvX2lvdmEpKTsKKwl9CisKIAkvKiBJbnZhbGlkYXRlIEND VSBkZXB0aCBhbmQgY29sb3IgKi8KIAlPVVRfUEtUNyhyaW5nLCBDUF9FVkVOVF9XUklURSwgMSk7 CiAJT1VUX1JJTkcocmluZywgUENfQ0NVX0lOVkFMSURBVEVfREVQVEgpOwpAQCAtMTg0LDYgKzIy MiwxNCBAQCBzdGF0aWMgdm9pZCBhNnh4X3N1Ym1pdChzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1 Y3QgbXNtX2dlbV9zdWJtaXQgKnN1Ym1pdCwKIAlPVVRfUEtUNyhyaW5nLCBDUF9FVkVOVF9XUklU RSwgMSk7CiAJT1VUX1JJTkcocmluZywgUENfQ0NVX0lOVkFMSURBVEVfQ09MT1IpOwogCisJaWYg KGdwdS0+bnJfcmluZ3MgPiAxKSB7CisJCS8qIEluZGljYXRlIHRoZSBiZWdpbm5pbmcgb2YgSUIg bGlzdCwgdGhpcyB3aWxsIGltcGxpY2l0bHkgdHVybgorCQkgKiBvbiBwcmVlbXB0aW9uLgorCQkg Ki8KKwkJT1VUX1BLVDcocmluZywgQ1BfU0VUX01BUktFUiwgMSk7CisJCU9VVF9SSU5HKHJpbmcs IDBYRCk7CisJfQorCiAJLyogU3VibWl0IHRoZSBjb21tYW5kcyAqLwogCWZvciAoaSA9IDA7IGkg PCBzdWJtaXQtPm5yX2NtZHM7IGkrKykgewogCQlzd2l0Y2ggKHN1Ym1pdC0+Y21kW2ldLnR5cGUp IHsKQEAgLTIwMSw2ICsyNDcsMTQgQEAgc3RhdGljIHZvaWQgYTZ4eF9zdWJtaXQoc3RydWN0IG1z bV9ncHUgKmdwdSwgc3RydWN0IG1zbV9nZW1fc3VibWl0ICpzdWJtaXQsCiAJCX0KIAl9CiAKKwlp ZiAoZ3B1LT5ucl9yaW5ncyA+IDEpIHsKKwkJLyogSW5kaWNhdGUgdGhlIGVuZCBvZiBJQiBsaXN0 LCB0aGlzIHdpbGwgaW1wbGljaXRseSB0dXJuCisJCSAqIG9mZiBwcmVlbXB0aW9uLgorCQkgKi8K KwkJT1VUX1BLVDcocmluZywgQ1BfU0VUX01BUktFUiwgMSk7CisJCU9VVF9SSU5HKHJpbmcsIDBY RSk7CisJfQorCiAJLyogV3JpdGUgdGhlIGZlbmNlIHRvIHRoZSBzY3JhdGNoIHJlZ2lzdGVyICov CiAJT1VUX1BLVDQocmluZywgUkVHX0E2WFhfQ1BfU0NSQVRDSF9SRUcoMiksIDEpOwogCU9VVF9S SU5HKHJpbmcsIHN1Ym1pdC0+c2Vxbm8pOwpAQCAtMjE1LDcgKzI2OSwzOCBAQCBzdGF0aWMgdm9p ZCBhNnh4X3N1Ym1pdChzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1Y3QgbXNtX2dlbV9zdWJtaXQg KnN1Ym1pdCwKIAlPVVRfUklORyhyaW5nLCB1cHBlcl8zMl9iaXRzKHJibWVtcHRyKHJpbmcsIGZl bmNlKSkpOwogCU9VVF9SSU5HKHJpbmcsIHN1Ym1pdC0+c2Vxbm8pOwogCisJLyogSWYgcHJlZW1w dGlvbiBpcyBlbmFibGVkICovCisJaWYgKGdwdS0+bnJfcmluZ3MgPiAxKSB7CisJCS8qCisJCSAq IFJlc2V0IHRoZSBzY3JhdGNoIHJlZ2lvbiBhcyB3ZSBhcmUgZG9uZSB3aXRoIHRoZQorCQkgKiBJ QiBsaXN0IG9mIHRoaXMgc3VibWlzc2lvbgorCQkgKi8KKwkJT1VUX1BLVDcocmluZywgQ1BfTUVN X1dSSVRFLCA0KTsKKwkJT1VUX1JJTkcocmluZywgbG93ZXJfMzJfYml0cyhzY3JhdGNoX2Rlc3Qp KTsKKwkJT1VUX1JJTkcocmluZywgdXBwZXJfMzJfYml0cyhzY3JhdGNoX2Rlc3QpKTsKKwkJT1VU X1JJTkcocmluZywgMHgwMCk7CisJCU9VVF9SSU5HKHJpbmcsIDB4MDApOworCisJCS8qIFlpZWxk IHRoZSBmbG9vciBvbiBjb21tYW5kIGNvbXBsZXRpb24gKi8KKwkJT1VUX1BLVDcocmluZywgQ1Bf Q09OVEVYVF9TV0lUQ0hfWUlFTEQsIDQpOworCisJCS8qCisJCSAqIElmIGR3b3JkWzI6MV0gYXJl IG5vbiB6ZXJvLCB0aGV5IHNwZWNpZnkgYW4gYWRkcmVzcyBmb3IKKwkJICogdGhlIENQIHRvIHdy aXRlIHRoZSB2YWx1ZSBvZiBkd29yZFszXSB0byBvbiBwcmVlbXB0aW9uCisJCSAqIGNvbXBsZXRl LiBXcml0ZSAwIHRvIHNraXAgdGhlIHdyaXRlCisJCSAqLworCQlPVVRfUklORyhyaW5nLCAweDAw KTsKKwkJT1VUX1JJTkcocmluZywgMHgwMCk7CisJCS8qIERhdGEgdmFsdWUgLSBub3QgdXNlZCBp ZiB0aGUgYWRkcmVzcyBhYm92ZSBpcyAwICovCisJCU9VVF9SSU5HKHJpbmcsIDB4MDEpOworCQkv KiBnZW5lcmF0ZSBpbnRlcnJ1cHQgb24gcHJlZW1wdGlvbiBjb21wbGV0aW9uICovCisJCU9VVF9S SU5HKHJpbmcsIDB4MDApOworCX0KKwogCWE2eHhfZmx1c2goZ3B1LCByaW5nKTsKKworCS8qIENo ZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IHByZWVtcHRpb24gKi8KKwlhNnh4X3ByZWVt cHRfdHJpZ2dlcihncHUpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHsKQEAgLTQxMywxMSAr NDk4LDU0IEBAIHN0YXRpYyBpbnQgYTZ4eF91Y29kZV9pbml0KHN0cnVjdCBtc21fZ3B1ICpncHUp CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYTZ4eF9wcmVlbXB0X3N0YXJ0KHN0cnVjdCBt c21fZ3B1ICpncHUpCit7CisJc3RydWN0IGFkcmVub19ncHUgKmFkcmVub19ncHUgPSB0b19hZHJl bm9fZ3B1KGdwdSk7CisJc3RydWN0IGE2eHhfZ3B1ICphNnh4X2dwdSA9IHRvX2E2eHhfZ3B1KGFk cmVub19ncHUpOworCXN0cnVjdCBtc21fcmluZ2J1ZmZlciAqcmluZyA9IGdwdS0+cmJbMF07CisK KwlpZiAoZ3B1LT5ucl9yaW5ncyA8PSAxKQorCQlyZXR1cm4gMDsKKworCS8qIFR1cm4gQ1AgcHJv dGVjdGlvbiBvZmYgKi8KKwlPVVRfUEtUNyhyaW5nLCBDUF9TRVRfUFJPVEVDVEVEX01PREUsIDEp OworCU9VVF9SSU5HKHJpbmcsIDApOworCisJT1VUX1BLVDcocmluZywgQ1BfU0VUX1BTRVVET19S RUcsIDYpOworCisJLyogUHJpdmlsZWdlZCBhbmQgbm9uLXNlY3VyZSAqLworCU9VVF9SSU5HKHJp bmcsIFNBVkVfUkVHX1BSSVZfTk9OX1NFQ1VSRV9TQVZFX0FERFJfSUQpOworCU9VVF9SSU5HKHJp bmcsIGxvd2VyXzMyX2JpdHMoYTZ4eF9ncHUtPnByZWVtcHRfaW92YVtyaW5nLT5pZF0pKTsKKwlP VVRfUklORyhyaW5nLCB1cHBlcl8zMl9iaXRzKGE2eHhfZ3B1LT5wcmVlbXB0X2lvdmFbcmluZy0+ aWRdKSk7CisKKwkvKiBQcml2aWxlZ2VkIGFuZCBzZWN1cmUuIFdlIGRvbid0IGRvIHNlY3VyZSB5 ZXQsIHNvIHJlc2V0IHRvIDAgKi8KKwlPVVRfUklORyhyaW5nLCBTQVZFX1JFR19QUklWX1NFQ1VS RV9TQVZFX0FERFJfSUQpOworCU9VVF9SSU5HKHJpbmcsIDB4MDApOworCU9VVF9SSU5HKHJpbmcs IDB4MDApOworCisJLyogVHVybiBDUCBwcm90ZWN0aW9uIGJhY2sgb24gKi8KKwlPVVRfUEtUNyhy aW5nLCBDUF9TRVRfUFJPVEVDVEVEX01PREUsIDEpOworCU9VVF9SSU5HKHJpbmcsIDEpOworCisJ LyogWWllbGQgdGhlIGZsb29yIG9uIGNvbW1hbmQgY29tcGxldGlvbiAqLworCU9VVF9QS1Q3KHJp bmcsIENQX0NPTlRFWFRfU1dJVENIX1lJRUxELCA0KTsKKwlPVVRfUklORyhyaW5nLCAweDAwKTsK KwlPVVRfUklORyhyaW5nLCAweDAwKTsKKwlPVVRfUklORyhyaW5nLCAweDAwKTsKKwkvKiBHZW5l cmF0ZSBpbnRlcnJ1cHQgb24gcHJlZW1wdGlvbiBjb21wbGV0aW9uICovCisJT1VUX1JJTkcocmlu ZywgMHgwMCk7CisKKwlncHUtPmZ1bmNzLT5mbHVzaChncHUsIHJpbmcpOworCisJcmV0dXJuIGE2 eHhfaWRsZShncHUsIHJpbmcpID8gMCA6IC1FSU5WQUw7Cit9CisKICNkZWZpbmUgQTZYWF9JTlRf TUFTSyAoQTZYWF9SQkJNX0lOVF8wX01BU0tfQ1BfQUhCX0VSUk9SIHwgXAogCSAgQTZYWF9SQkJN X0lOVF8wX01BU0tfUkJCTV9BVEJfQVNZTkNGSUZPX09WRVJGTE9XIHwgXAogCSAgQTZYWF9SQkJN X0lOVF8wX01BU0tfQ1BfSFdfRVJST1IgfCBcCiAJICBBNlhYX1JCQk1fSU5UXzBfTUFTS19DUF9J QjIgfCBcCiAJICBBNlhYX1JCQk1fSU5UXzBfTUFTS19DUF9JQjEgfCBcCisJICBBNlhYX1JCQk1f SU5UXzBfTUFTS19DUF9TVyB8IFwKIAkgIEE2WFhfUkJCTV9JTlRfMF9NQVNLX0NQX1JCIHwgXAog CSAgQTZYWF9SQkJNX0lOVF8wX01BU0tfQ1BfQ0FDSEVfRkxVU0hfVFMgfCBcCiAJICBBNlhYX1JC Qk1fSU5UXzBfTUFTS19SQkJNX0FUQl9CVVNfT1ZFUkZMT1cgfCBcCkBAIC01NTcsNiArNjg1LDgg QEAgc3RhdGljIGludCBhNnh4X2h3X2luaXQoc3RydWN0IG1zbV9ncHUgKmdwdSkKIAlpZiAocmV0 KQogCQlnb3RvIG91dDsKIAorCWE2eHhfcHJlZW1wdF9od19pbml0KGdwdSk7CisKIAlyZXQgPSBh Nnh4X3Vjb2RlX2luaXQoZ3B1KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKQEAgLTU4Niw2ICs3 MTYsOCBAQCBzdGF0aWMgaW50IGE2eHhfaHdfaW5pdChzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQogCQln cHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9SQkJNX1NFQ1ZJRF9UUlVTVF9DTlRMLCAweDApOwogCX0K IAorCS8qIExhc3Qgc3RlcCAtIHlpZWxkIHRoZSByaW5nYnVmZmVyICovCisJYTZ4eF9wcmVlbXB0 X3N0YXJ0KGdwdSk7CiBvdXQ6CiAJLyoKIAkgKiBUZWxsIHRoZSBHTVUgdGhhdCB3ZSBhcmUgZG9u ZSB0b3VjaGluZyB0aGUgR1BVIGFuZCBpdCBjYW4gc3RhcnQgcG93ZXIKQEAgLTczMSw4ICs4NjMs MTMgQEAgc3RhdGljIGlycXJldHVybl90IGE2eHhfaXJxKHN0cnVjdCBtc21fZ3B1ICpncHUpCiAJ aWYgKHN0YXR1cyAmIEE2WFhfUkJCTV9JTlRfMF9NQVNLX1VDSEVfT09CX0FDQ0VTUykKIAkJZGV2 X2Vycl9yYXRlbGltaXRlZCgmZ3B1LT5wZGV2LT5kZXYsICJVQ0hFIHwgT3V0IG9mIGJvdW5kcyBh Y2Nlc3NcbiIpOwogCi0JaWYgKHN0YXR1cyAmIEE2WFhfUkJCTV9JTlRfMF9NQVNLX0NQX0NBQ0hF X0ZMVVNIX1RTKQorCWlmIChzdGF0dXMgJiBBNlhYX1JCQk1fSU5UXzBfTUFTS19DUF9DQUNIRV9G TFVTSF9UUykgewogCQltc21fZ3B1X3JldGlyZShncHUpOworCQlhNnh4X3ByZWVtcHRfdHJpZ2dl cihncHUpOworCX0KKworCWlmIChzdGF0dXMgJiBBNlhYX1JCQk1fSU5UXzBfTUFTS19DUF9TVykK KwkJYTZ4eF9wcmVlbXB0X2lycShncHUpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAt ODc0LDYgKzEwMTEsOCBAQCBzdGF0aWMgdm9pZCBhNnh4X2Rlc3Ryb3koc3RydWN0IG1zbV9ncHUg KmdwdSkKIAkJLmFjdGl2ZV9yaW5nID0gYTZ4eF9hY3RpdmVfcmluZywKIAkJLmlycSA9IGE2eHhf aXJxLAogCQkuZGVzdHJveSA9IGE2eHhfZGVzdHJveSwKKwkJLnN1Ym1pdHF1ZXVlX3NldHVwID0g YTZ4eF9wcmVlbXB0X3N1Ym1pdHF1ZXVlX3NldHVwLAorCQkuc3VibWl0cXVldWVfY2xvc2UgPSBh Nnh4X3ByZWVtcHRfc3VibWl0cXVldWVfY2xvc2UsCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiAJ CS5zaG93ID0gYTZ4eF9zaG93LAogI2VuZGlmCkBAIC05MjMsNSArMTA2Miw4IEBAIHN0cnVjdCBt c21fZ3B1ICphNnh4X2dwdV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJCW1zbV9tbXVf c2V0X2ZhdWx0X2hhbmRsZXIoZ3B1LT5hc3BhY2UtPm1tdSwgZ3B1LAogCQkJCWE2eHhfZmF1bHRf aGFuZGxlcik7CiAKKwkvKiBTZXQgdXAgdGhlIHByZWVtcHRpb24gc3BlY2lmaWMgYml0cyBhbmQg cGllY2VzIGZvciBlYWNoIHJpbmdidWZmZXIgKi8KKwlhNnh4X3ByZWVtcHRfaW5pdChncHUpOwor CiAJcmV0dXJuIGdwdTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5v L2E2eHhfZ3B1LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdS5oCmluZGV4 IDA2ZTkzZmQuLmFjYTFkN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5v L2E2eHhfZ3B1LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHUuaApA QCAtMjgsMTIgKzI4LDEyNiBAQCBzdHJ1Y3QgYTZ4eF9ncHUgewogCXVpbnQ2NF90IHNxZV9pb3Zh OwogCiAJc3RydWN0IG1zbV9yaW5nYnVmZmVyICpjdXJfcmluZzsKKwlzdHJ1Y3QgbXNtX3Jpbmdi dWZmZXIgKm5leHRfcmluZzsKKworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqcHJlZW1wdF9ib1tN U01fR1BVX01BWF9SSU5HU107CisJc3RydWN0IGE2eHhfcHJlZW1wdF9yZWNvcmQgKnByZWVtcHRb TVNNX0dQVV9NQVhfUklOR1NdOworCXVpbnQ2NF90IHByZWVtcHRfaW92YVtNU01fR1BVX01BWF9S SU5HU107CisKKwlhdG9taWNfdCBwcmVlbXB0X3N0YXRlOworCXN0cnVjdCB0aW1lcl9saXN0IHBy ZWVtcHRfdGltZXI7CisKKwl1bnNpZ25lZCBpbnQgcHJlZW1wdF9sZXZlbDsKKwlib29sIHVzZXNf Z21lbTsKKwlib29sIHNraXBfc2F2ZV9yZXN0b3JlOworCisJc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpzY3JhdGNoX2JvOworCXZvaWQgKnNjcmF0Y2hfcHRyOworCXVpbnQ2NF90IHNjcmF0Y2hfaW92 YTsKIAogCXN0cnVjdCBhNnh4X2dtdSBnbXU7CiB9OwogCiAjZGVmaW5lIHRvX2E2eHhfZ3B1KHgp IGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgYTZ4eF9ncHUsIGJhc2UpCiAKKyNkZWZpbmUgU0NSQVRD SF9VU0VSX0NUWF9JT1ZBKHJpbmdfaWQsIGE2eHhfZ3B1KSBcCisJKGE2eHhfZ3B1LT5zY3JhdGNo X2lvdmEgKyAocmluZ19pZCAqIHNpemVvZih1aW50NjRfdCkpKQorCisvKgorICogSW4gb3JkZXIg dG8gZG8gbG9ja2xlc3MgcHJlZW1wdGlvbiB3ZSB1c2UgYSBzaW1wbGUgc3RhdGUgbWFjaGluZSB0 byBwcm9ncmVzcworICogdGhyb3VnaCB0aGUgcHJvY2Vzcy4KKyAqCisgKiBQUkVFTVBUX05PTkUg LSBubyBwcmVlbXB0aW9uIGluIHByb2dyZXNzLiAgTmV4dCBzdGF0ZSBTVEFSVC4KKyAqIFBSRUVN UFRfU1RBUlQgLSBUaGUgdHJpZ2dlciBpcyBldmFsdWF0aW5nIGlmIHByZWVtcHRpb24gaXMgcG9z c2libGUuIE5leHQKKyAqIHN0YXRlczogVFJJR0dFUkVELCBOT05FCisgKiBQUkVFTVBUX0FCT1JU IC0gQW4gaW50ZXJtZWRpYXRlIHN0YXRlIGJlZm9yZSBtb3ZpbmcgYmFjayB0byBOT05FLiBOZXh0 CisgKiBzdGF0ZTogTk9ORS4KKyAqIFBSRUVNUFRfVFJJR0dFUkVEOiBBIHByZWVtcHRpb24gaGFz IGJlZW4gZXhlY3V0ZWQgb24gdGhlIGhhcmR3YXJlLiBOZXh0CisgKiBzdGF0ZXM6IEZBVUxURUQs IFBFTkRJTkcKKyAqIFBSRUVNUFRfRkFVTFRFRDogQSBwcmVlbXB0aW9uIHRpbWVkIG91dCAobmV2 ZXIgY29tcGxldGVkKS4gVGhpcyB3aWxsIHRyaWdnZXIKKyAqIHJlY292ZXJ5LiAgTmV4dCBzdGF0 ZTogTi9BCisgKiBQUkVFTVBUX1BFTkRJTkc6IFByZWVtcHRpb24gY29tcGxldGUgaW50ZXJydXB0 IGZpcmVkIC0gdGhlIGNhbGxiYWNrIGlzCisgKiBjaGVja2luZyB0aGUgc3VjY2VzcyBvZiB0aGUg b3BlcmF0aW9uLiBOZXh0IHN0YXRlOiBGQVVMVEVELCBOT05FLgorICovCisKK2VudW0gYTZ4eF9w cmVlbXB0X3N0YXRlIHsKKwlQUkVFTVBUX05PTkUgPSAwLAorCVBSRUVNUFRfU1RBUlQsCisJUFJF RU1QVF9BQk9SVCwKKwlQUkVFTVBUX1RSSUdHRVJFRCwKKwlQUkVFTVBUX0ZBVUxURUQsCisJUFJF RU1QVF9QRU5ESU5HLAorfTsKKworLyoKKyAqIElEIHZhbHVlcyB1c2VkIGJ5IFNFVF9QU0VVRE9f UkVHIFBNNCBjb21tYW5kLiBUaGVzZSBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlCisgKiB2YXJpb3Vz IGludGVybmFsIENQIHJlZ2lzdGVycyB0byB3cml0ZSB0by4gVXNlZCBpbiB0aGUgc2F2ZS9yZXN0 b3JlCisgKiBwcmVlbXB0aW9uIHNlcXVlbmNlLgorICovCitlbnVtIGE2eHhfc2V0X3BzZXVkb19y ZWdpc3RlciB7CisJU0FWRV9SRUdfU01NVV9JTkZPX0lEID0gMCwKKwlTQVZFX1JFR19QUklWX05P Tl9TRUNVUkVfU0FWRV9BRERSX0lEID0gMSwKKwlTQVZFX1JFR19QUklWX1NFQ1VSRV9TQVZFX0FE RFJfSUQgPSAyLAorCVNBVkVfUkVHX05PTl9QUklWX1NBVkVfQUREUl9JRCA9IDMsCisJU0FWRV9S RUdfQ09VTlRFUl9JRCA9IDQsCit9OworCisvKgorICogc3RydWN0IGE2eHhfcHJlZW1wdF9yZWNv cmQgaXMgYSBzaGFyZWQgYnVmZmVyIGJldHdlZW4gdGhlIG1pY3JvY29kZSBhbmQgdGhlCisgKiBD UFUgdG8gc3RvcmUgdGhlIHN0YXRlIGZvciBwcmVlbXB0aW9uLiBUaGUgcmVjb3JkIGl0c2VsZiBp cyBtdWNoIGxhcmdlcgorICogKDIxMTJrKSBidXQgbW9zdCBvZiB0aGF0IGlzIHVzZWQgYnkgdGhl IENQIGZvciBzdG9yYWdlLgorICoKKyAqIFRoZXJlIGlzIGEgcHJlZW1wdGlvbiByZWNvcmQgYXNz aWduZWQgcGVyIHJpbmdidWZmZXIuIFdoZW4gdGhlIENQVSB0cmlnZ2VycyBhCisgKiBwcmVlbXB0 aW9uLCBpdCBmaWxscyBvdXQgdGhlIHJlY29yZCB3aXRoIHRoZSB1c2VmdWwgaW5mb3JtYXRpb24g KHdwdHIsIHJpbmcKKyAqIGJhc2UsIGV0YykgYW5kIHRoZSBtaWNyb2NvZGUgdXNlcyB0aGF0IGlu Zm9ybWF0aW9uIHRvIHNldCB1cCB0aGUgQ1AgZm9sbG93aW5nCisgKiB0aGUgcHJlZW1wdGlvbi4g IFdoZW4gYSByaW5nIGlzIHN3aXRjaGVkIG91dCwgdGhlIENQIHdpbGwgc2F2ZSB0aGUgcmluZ2J1 ZmZlcgorICogc3RhdGUgYmFjayB0byB0aGUgcmVjb3JkLiBJbiB0aGlzIHdheSwgb25jZSB0aGUg cmVjb3JkcyBhcmUgcHJvcGVybHkgc2V0IHVwCisgKiB0aGUgQ1BVIGNhbiBxdWlja2x5IHN3aXRj aCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHJpbmdidWZmZXJzIGJ5IG9ubHkKKyAqIHVwZGF0aW5n IGEgZmV3IHJlZ2lzdGVycyAob2Z0ZW4gb25seSB0aGUgd3B0cikuCisgKgorICogVGhlc2UgYXJl IHRoZSBDUFUgYXdhcmUgcmVnaXN0ZXJzIGluIHRoZSByZWNvcmQ6CisgKiBAbWFnaWM6IE11c3Qg YWx3YXlzIGJlIDB4QUUzOTlENkVVTAorICogQGluZm86IFR5cGUgb2YgdGhlIHJlY29yZCAtIHdy aXR0ZW4gMCBieSB0aGUgQ1BVLCB1cGRhdGVkIGJ5IHRoZSBDUAorICogQGVycm5vOiBwcmVlbXB0 aW9uIGVycm9yIHJlY29yZAorICogQGRhdGE6IERhdGEgZmllbGQgaW4gWUlFTEQgYW5kIFNFVF9N QVJLRVIgcGFja2V0cywgV3JpdHRlbiBhbmQgdXNlZCBieSBDUAorICogQGNudGw6IFZhbHVlIG9m IFJCX0NOVEwgd3JpdHRlbiBieSBDUFUsIHNhdmUvcmVzdG9yZWQgYnkgQ1AKKyAqIEBycHRyOiBW YWx1ZSBvZiBSQl9SUFRSIHdyaXR0ZW4gYnkgQ1BVLCBzYXZlL3Jlc3RvcmVkIGJ5IENQCisgKiBA d3B0cjogVmFsdWUgb2YgUkJfV1BUUiB3cml0dGVuIGJ5IENQVSwgc2F2ZS9yZXN0b3JlZCBieSBD UAorICogQF9wYWQ6IFJlc2VydmVkL3BhZGRpbmcKKyAqIEBycHRyX2FkZHI6IFZhbHVlIG9mIFJC X1JQVFJfQUREUl9MT3xISSB3cml0dGVuIGJ5IENQVSwgc2F2ZS9yZXN0b3JlZCBieSBDUAorICog QHJiYXNlOiBWYWx1ZSBvZiBSQl9CQVNFIHdyaXR0ZW4gYnkgQ1BVLCBzYXZlL3Jlc3RvcmVkIGJ5 IENQCisgKiBAY291bnRlcjogR1BVIGFkZHJlc3Mgb2YgdGhlIHN0b3JhZ2UgYXJlYSBmb3IgdGhl IHByZWVtcHRpb24gY291bnRlcnMKKyAqLworc3RydWN0IGE2eHhfcHJlZW1wdF9yZWNvcmQgewor CXUzMiBtYWdpYzsKKwl1MzIgaW5mbzsKKwl1MzIgZXJybm87CisJdTMyIGRhdGE7CisJdTMyIGNu dGw7CisJdTMyIHJwdHI7CisJdTMyIHdwdHI7CisJdTMyIF9wYWQ7CisJdTY0IHJwdHJfYWRkcjsK Kwl1NjQgcmJhc2U7CisJdTY0IGNvdW50ZXI7Cit9OworCisjZGVmaW5lIEE2WFhfUFJFRU1QVF9S RUNPUkRfTUFHSUMgMHhBRTM5OUQ2RVVMCisKKy8qCisgKiBFdmVuIHRob3VnaCB0aGUgc3RydWN0 dXJlIGFib3ZlIGlzIG9ubHkgYSBmZXcgYnl0ZXMsIHdlIG5lZWQgYSBmdWxsIDIxMTJrIHRvCisg KiBzdG9yZSB0aGUgZW50aXJlIHByZWVtcHRpb24gcmVjb3JkIGZyb20gdGhlIENQCisgKi8KKyNk ZWZpbmUgQTZYWF9QUkVFTVBUX1JFQ09SRF9TSVpFICgyMTEyICogMTAyNCkKKworLyoKKyAqIFRo ZSBwcmVlbXB0aW9uIGNvdW50ZXIgYmxvY2sgaXMgYSBzdG9yYWdlIGFyZWEgZm9yIHRoZSB2YWx1 ZSBvZiB0aGUKKyAqIHByZWVtcHRpb24gY291bnRlcnMgdGhhdCBhcmUgc2F2ZWQgaW1tZWRpYXRl bHkgYmVmb3JlIGNvbnRleHQgc3dpdGNoLiBXZQorICogYXBwZW5kIGl0IG9uIHRvIHRoZSBlbmQg b2YgdGhlIGFsbG9jYXRpb24gZm9yIHRoZSBwcmVlbXB0aW9uIHJlY29yZC4KKyAqLworI2RlZmlu ZSBBNlhYX1BSRUVNUFRfQ09VTlRFUl9TSVpFICgxNiAqIDQpCisKKyNkZWZpbmUgQTZYWF9QUkVF TVBUX1VTRVJfUkVDT1JEX1NJWkUgKDE5MiAqIDEwMjQpCiAvKgogICogR2l2ZW4gYSByZWdpc3Rl ciBhbmQgYSBjb3VudCwgcmV0dXJuIGEgdmFsdWUgdG8gcHJvZ3JhbSBpbnRvCiAgKiBSRUdfQ1Bf UFJPVEVDVF9SRUcobikgLSB0aGlzIHdpbGwgYmxvY2sgYm90aCByZWFkcyBhbmQgd3JpdGVzIGZv ciBfbGVuCkBAIC02Niw0ICsxODAsMjYgQEAgc3RydWN0IGE2eHhfZ3B1IHsKIGludCBhNnh4X2dt dV9wcm9iZShzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5v ZGUpOwogdm9pZCBhNnh4X2dtdV9yZW1vdmUoc3RydWN0IGE2eHhfZ3B1ICphNnh4X2dwdSk7CiAK K2ludCBhNnh4X2dtdV9mZW5jZWRfd3JpdGUoc3RydWN0IGE2eHhfZ3B1ICphNnh4X2dwdSwgdW5z aWduZWQgaW50IHJlZywKKwkJdW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBpbnQgZmVuY2Vf bWFzayk7CisKK3ZvaWQgYTZ4eF9wcmVlbXB0X2luaXQoc3RydWN0IG1zbV9ncHUgKmdwdSk7Cit2 b2lkIGE2eHhfcHJlZW1wdF9od19pbml0KHN0cnVjdCBtc21fZ3B1ICpncHUpOwordm9pZCBhNnh4 X3ByZWVtcHRfdHJpZ2dlcihzdHJ1Y3QgbXNtX2dwdSAqZ3B1KTsKK3ZvaWQgYTZ4eF9wcmVlbXB0 X2lycShzdHJ1Y3QgbXNtX2dwdSAqZ3B1KTsKK3ZvaWQgYTZ4eF9wcmVlbXB0X2Zpbmkoc3RydWN0 IG1zbV9ncHUgKmdwdSk7CitpbnQgYTZ4eF9wcmVlbXB0X3N1Ym1pdHF1ZXVlX3NldHVwKHN0cnVj dCBtc21fZ3B1ICpncHUsCisJCXN0cnVjdCBtc21fZ3B1X3N1Ym1pdHF1ZXVlICpxdWV1ZSk7Cit2 b2lkIGE2eHhfcHJlZW1wdF9zdWJtaXRxdWV1ZV9jbG9zZShzdHJ1Y3QgbXNtX2dwdSAqZ3B1LAor CQlzdHJ1Y3QgbXNtX2dwdV9zdWJtaXRxdWV1ZSAqcXVldWUpOworCisvKiBSZXR1cm4gdHJ1ZSBp ZiB3ZSBhcmUgaW4gYSBwcmVlbXB0IHN0YXRlICovCitzdGF0aWMgaW5saW5lIGJvb2wgYTZ4eF9p bl9wcmVlbXB0KHN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUpCit7CisJaW50IHByZWVtcHRfc3Rh dGUgPSBhdG9taWNfcmVhZCgmYTZ4eF9ncHUtPnByZWVtcHRfc3RhdGUpOworCisJcmV0dXJuICEo cHJlZW1wdF9zdGF0ZSA9PSBQUkVFTVBUX05PTkUgfHwKKwkJCXByZWVtcHRfc3RhdGUgPT0gUFJF RU1QVF9BQk9SVCk7Cit9CisKICNlbmRpZiAvKiBfX0E2WFhfR1BVX0hfXyAqLwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9wcmVlbXB0LmMgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2FkcmVuby9hNnh4X3ByZWVtcHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi42MGRmNmM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21z bS9hZHJlbm8vYTZ4eF9wcmVlbXB0LmMKQEAgLTAsMCArMSwzODMgQEAKKy8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKiBDb3B5cmlnaHQgKGMpIDIwMTgsIFRoZSBMaW51 eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqLworCisjaW5jbHVkZSAibXNtX2dl bS5oIgorI2luY2x1ZGUgImE2eHhfZ3B1LmgiCisjaW5jbHVkZSAiYTZ4eF9nbXUueG1sLmgiCisK Ky8qCisgKiBUcnkgdG8gdHJhbnNpdGlvbiB0aGUgcHJlZW1wdGlvbiBzdGF0ZSBmcm9tIG9sZCB0 byBuZXcuIFJldHVybgorICogdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIGlmIHRoZSBvcmlnaW5h bCBzdGF0ZSB3YXNuJ3QgJ29sZCcKKyAqLworc3RhdGljIGlubGluZSBib29sIHRyeV9wcmVlbXB0 X3N0YXRlKHN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUsCisJCWVudW0gYTZ4eF9wcmVlbXB0X3N0 YXRlIG9sZCwgZW51bSBhNnh4X3ByZWVtcHRfc3RhdGUgbmV3KQoreworCWVudW0gYTZ4eF9wcmVl bXB0X3N0YXRlIGN1ciA9IGF0b21pY19jbXB4Y2hnKCZhNnh4X2dwdS0+cHJlZW1wdF9zdGF0ZSwK KwkJb2xkLCBuZXcpOworCisJcmV0dXJuIChjdXIgPT0gb2xkKTsKK30KKworLyoKKyAqIEZvcmNl IHRoZSBwcmVlbXB0aW9uIHN0YXRlIHRvIHRoZSBzcGVjaWZpZWQgc3RhdGUuICBUaGlzIGlzIHVz ZWQgaW4gY2FzZXMKKyAqIHdoZXJlIHRoZSBjdXJyZW50IHN0YXRlIGlzIGtub3duIGFuZCB3b24n dCBjaGFuZ2UKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNldF9wcmVlbXB0X3N0YXRlKHN0cnVj dCBhNnh4X2dwdSAqZ3B1LAorCQllbnVtIGE2eHhfcHJlZW1wdF9zdGF0ZSBuZXcpCit7CisJLyoK KwkgKiBwcmVlbXB0X3N0YXRlIG1heSBiZSByZWFkIGJ5IG90aGVyIGNvcmVzIHRyeWluZyB0byB0 cmlnZ2VyIGEKKwkgKiBwcmVlbXB0aW9uIG9yIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBzbyBi YXJyaWVycyBhcmUgbmVlZGVkCisJICogYmVmb3JlLi4uCisJICovCisJc21wX21iX19iZWZvcmVf YXRvbWljKCk7CisJYXRvbWljX3NldCgmZ3B1LT5wcmVlbXB0X3N0YXRlLCBuZXcpOworCS8qIC4u LiBhbmQgYWZ0ZXIqLworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7Cit9CisKKy8qIFdyaXRlIHRo ZSBtb3N0IHJlY2VudCB3cHRyIGZvciB0aGUgZ2l2ZW4gcmluZyBpbnRvIHRoZSBoYXJkd2FyZSAq Lworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV93cHRyKHN0cnVjdCBtc21fZ3B1ICpncHUsIHN0 cnVjdCBtc21fcmluZ2J1ZmZlciAqcmluZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVp bnQzMl90IHdwdHI7CisKKwlpZiAoIXJpbmcpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFz YXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7CisJd3B0ciA9IGdldF93cHRyKHJpbmcpOworCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKKworCWdwdV93cml0ZShncHUs IFJFR19BNlhYX0NQX1JCX1dQVFIsIHdwdHIpOworfQorCisvKiBSZXR1cm4gdGhlIGhpZ2hlc3Qg cHJpb3JpdHkgcmluZ2J1ZmZlciB3aXRoIHNvbWV0aGluZyBpbiBpdCAqLworc3RhdGljIHN0cnVj dCBtc21fcmluZ2J1ZmZlciAqZ2V0X25leHRfcmluZyhzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQorewor CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZ3B1LT5u cl9yaW5nczsgaSsrKSB7CisJCWJvb2wgZW1wdHk7CisJCXN0cnVjdCBtc21fcmluZ2J1ZmZlciAq cmluZyA9IGdwdS0+cmJbaV07CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnJpbmctPmxvY2ssIGZs YWdzKTsKKwkJZW1wdHkgPSAoZ2V0X3dwdHIocmluZykgPT0gcmluZy0+bWVtcHRycy0+cnB0cik7 CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKKworCQlpZiAo IWVtcHR5KQorCQkJcmV0dXJuIHJpbmc7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRp YyB2b2lkIGE2eHhfcHJlZW1wdF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0 IGE2eHhfZ3B1ICphNnh4X2dwdSA9IChzdHJ1Y3QgYTZ4eF9ncHUgKikgZGF0YTsKKwlzdHJ1Y3Qg bXNtX2dwdSAqZ3B1ID0gJmE2eHhfZ3B1LT5iYXNlLmJhc2U7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IGdwdS0+ZGV2OworCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXYgPSBkZXYtPmRl dl9wcml2YXRlOworCisJaWYgKCF0cnlfcHJlZW1wdF9zdGF0ZShhNnh4X2dwdSwgUFJFRU1QVF9U UklHR0VSRUQsIFBSRUVNUFRfRkFVTFRFRCkpCisJCXJldHVybjsKKworCWRldl9lcnIoZGV2LT5k ZXYsICIlczogcHJlZW1wdGlvbiB0aW1lZCBvdXRcbiIsIGdwdS0+bmFtZSk7CisJcXVldWVfd29y ayhwcml2LT53cSwgJmdwdS0+cmVjb3Zlcl93b3JrKTsKK30KKwordm9pZCBhNnh4X3ByZWVtcHRf aXJxKHN0cnVjdCBtc21fZ3B1ICpncHUpCit7CisJdWludDMyX3Qgc3RhdHVzOworCXN0cnVjdCBh ZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShncHUpOworCXN0cnVjdCBhNnh4 X2dwdSAqYTZ4eF9ncHUgPSB0b19hNnh4X2dwdShhZHJlbm9fZ3B1KTsKKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gZ3B1LT5kZXY7CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoIXRyeV9wcmVlbXB0X3N0YXRlKGE2eHhfZ3B1LCBQUkVF TVBUX1RSSUdHRVJFRCwgUFJFRU1QVF9QRU5ESU5HKSkKKwkJcmV0dXJuOworCisJLyogRGVsZXRl IHRoZSBwcmVlbXB0aW9uIHdhdGNoZG9nIHRpbWVyICovCisJZGVsX3RpbWVyKCZhNnh4X2dwdS0+ cHJlZW1wdF90aW1lcik7CisKKwkvKgorCSAqIFRoZSBoYXJkd2FyZSBzaG91bGQgYmUgc2V0dGlu ZyB0aGUgc3RvcCBiaXQgb2YgQ1BfQ09OVEVYVF9TV0lUQ0hfQ05UTAorCSAqIHRvIHplcm8gYmVm b3JlIGZpcmluZyB0aGUgaW50ZXJydXB0LCBidXQgdGhlcmUgaXMgYSBub24gemVybyBjaGFuY2UK KwkgKiBvZiBhIGhhcmR3YXJlIGNvbmRpdGlvbiBvciBhIHNvZnR3YXJlIHJhY2UgdGhhdCBjb3Vs ZCBzZXQgaXQgYWdhaW4KKwkgKiBiZWZvcmUgd2UgaGF2ZSBhIGNoYW5jZSB0byBmaW5pc2guIElm IHRoYXQgaGFwcGVucywgbG9nIGFuZCBnbyBmb3IKKwkgKiByZWNvdmVyeQorCSAqLworCXN0YXR1 cyA9IGdwdV9yZWFkKGdwdSwgUkVHX0E2WFhfQ1BfQ09OVEVYVF9TV0lUQ0hfQ05UTCk7CisJaWYg KHVubGlrZWx5KHN0YXR1cyAmIDB4MSkpIHsKKwkJc2V0X3ByZWVtcHRfc3RhdGUoYTZ4eF9ncHUs IFBSRUVNUFRfRkFVTFRFRCk7CisJCWRldl9lcnIoZGV2LT5kZXYsICIlczogUHJlZW1wdGlvbiBm YWlsZWQgdG8gY29tcGxldGVcbiIsCisJCQlncHUtPm5hbWUpOworCQlxdWV1ZV93b3JrKHByaXYt PndxLCAmZ3B1LT5yZWNvdmVyX3dvcmspOworCQlyZXR1cm47CisJfQorCisJYTZ4eF9ncHUtPmN1 cl9yaW5nID0gYTZ4eF9ncHUtPm5leHRfcmluZzsKKwlhNnh4X2dwdS0+bmV4dF9yaW5nID0gTlVM TDsKKworCXVwZGF0ZV93cHRyKGdwdSwgYTZ4eF9ncHUtPmN1cl9yaW5nKTsKKworCXNldF9wcmVl bXB0X3N0YXRlKGE2eHhfZ3B1LCBQUkVFTVBUX05PTkUpOworfQorCit2b2lkIGE2eHhfcHJlZW1w dF9od19pbml0KHN0cnVjdCBtc21fZ3B1ICpncHUpCit7CisJc3RydWN0IGFkcmVub19ncHUgKmFk cmVub19ncHUgPSB0b19hZHJlbm9fZ3B1KGdwdSk7CisJc3RydWN0IGE2eHhfZ3B1ICphNnh4X2dw dSA9IHRvX2E2eHhfZ3B1KGFkcmVub19ncHUpOworCWludCBpOworCisJLyogTm8gcHJlZW1wdGlv biBpZiB3ZSBvbmx5IGhhdmUgb25lIHJpbmcgKi8KKwlpZiAoZ3B1LT5ucl9yaW5ncyA9PSAxKQor CQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgZ3B1LT5ucl9yaW5nczsgaSsrKSB7CisJCWE2 eHhfZ3B1LT5wcmVlbXB0W2ldLT53cHRyID0gMDsKKwkJYTZ4eF9ncHUtPnByZWVtcHRbaV0tPnJw dHIgPSAwOworCQlhNnh4X2dwdS0+cHJlZW1wdFtpXS0+aW5mbyA9IDA7CisJCWE2eHhfZ3B1LT5w cmVlbXB0W2ldLT5kYXRhID0gMDsKKwkJYTZ4eF9ncHUtPnByZWVtcHRbaV0tPnJiYXNlID0gZ3B1 LT5yYltpXS0+aW92YTsKKwl9CisKKwkvKiBXcml0ZSBhIDAgdG8gc2lnbmFsIHRoYXQgd2UgYXJl bid0IHN3aXRjaGluZyBwYWdldGFibGVzICovCisJZ3B1X3dyaXRlNjQoZ3B1LCBSRUdfQTZYWF9D UF9DT05URVhUX1NXSVRDSF9TTU1VX0lORk9fTE8sCisJCVJFR19BNlhYX0NQX0NPTlRFWFRfU1dJ VENIX1NNTVVfSU5GT19ISSwgMCk7CisKKwkvKiBFbmFibGUgdGhlIEdNRU0gc2F2ZS9yZXN0b3Jl IGZlYXR1cmUgZm9yIHByZWVtcHRpb24gKi8KKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9SQl9D T05URVhUX1NXSVRDSF9HTUVNX1NBVkVfUkVTVE9SRSwgMHgxKTsKKworCS8qIFJlc2V0IHRoZSBw cmVlbXB0aW9uIHN0YXRlICovCisJc2V0X3ByZWVtcHRfc3RhdGUoYTZ4eF9ncHUsIFBSRUVNUFRf Tk9ORSk7CisKKwkvKiBBbHdheXMgY29tZSB1cCBvbiByYiAwICovCisJYTZ4eF9ncHUtPmN1cl9y aW5nID0gZ3B1LT5yYlswXTsKK30KKworI2RlZmluZSBGRU5DRV9TVEFUVVNfV1JJVEVEUk9QUEVE MF9NQVNLIDB4MQorI2RlZmluZSBGRU5DRV9TVEFUVVNfV1JJVEVEUk9QUEVEMV9NQVNLIDB4Mgor dm9pZCBhNnh4X3ByZWVtcHRfdHJpZ2dlcihzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQoreworCXN0cnVj dCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShncHUpOworCXN0cnVjdCBh Nnh4X2dwdSAqYTZ4eF9ncHUgPSB0b19hNnh4X2dwdShhZHJlbm9fZ3B1KTsKKwl1bnNpZ25lZCBs b25nIGZsYWdzOworCXN0cnVjdCBtc21fcmluZ2J1ZmZlciAqcmluZzsKKwl1aW50NjRfdCB1c2Vy X2N0eF9pb3ZhOworCXVuc2lnbmVkIGludCBjbnRsOworCisJaWYgKGdwdS0+bnJfcmluZ3MgPT0g MSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBUcnkgdG8gc3RhcnQgcHJlZW1wdGlvbiBieSBtb3Zp bmcgZnJvbSBOT05FIHRvIFNUQVJULiBJZgorCSAqIHVuc3VjY2Vzc2Z1bCwgYSBwcmVlbXB0aW9u IGlzIGFscmVhZHkgaW4gZmxpZ2h0CisJICovCisJaWYgKCF0cnlfcHJlZW1wdF9zdGF0ZShhNnh4 X2dwdSwgUFJFRU1QVF9OT05FLCBQUkVFTVBUX1NUQVJUKSkKKwkJcmV0dXJuOworCisJY250bCA9 ICgoKGE2eHhfZ3B1LT5wcmVlbXB0X2xldmVsIDw8IDYpICYgMHhDMCkgfAorCQkoKGE2eHhfZ3B1 LT5za2lwX3NhdmVfcmVzdG9yZSA8PCA5KSAmIDB4MjAwKSB8CisJCSgoYTZ4eF9ncHUtPnVzZXNf Z21lbSA8PCA4KSAmIDB4MTAwKSB8IDB4MSk7CisKKwkvKiBHZXQgdGhlIG5leHQgcmluZyB0byBw cmVlbXB0IHRvICovCisJcmluZyA9IGdldF9uZXh0X3JpbmcoZ3B1KTsKKworCS8qCisJICogSWYg bm8gcmluZyBpcyBwb3B1bGF0ZWQgb3IgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcmluZyBpcyB0aGUg Y3VycmVudAorCSAqIG9uZSBkbyBub3RoaW5nIGV4Y2VwdCB0byB1cGRhdGUgdGhlIHdwdHIgdG8g dGhlIGxhdGVzdCBhbmQgZ3JlYXRlc3QKKwkgKi8KKwlpZiAoIXJpbmcgfHwgKGE2eHhfZ3B1LT5j dXJfcmluZyA9PSByaW5nKSkgeworCQlzZXRfcHJlZW1wdF9zdGF0ZShhNnh4X2dwdSwgUFJFRU1Q VF9BQk9SVCk7CisJCXVwZGF0ZV93cHRyKGdwdSwgYTZ4eF9ncHUtPmN1cl9yaW5nKTsKKwkJc2V0 X3ByZWVtcHRfc3RhdGUoYTZ4eF9ncHUsIFBSRUVNUFRfTk9ORSk7CisJCXJldHVybjsKKwl9CisK KwlzcGluX2xvY2tfaXJxc2F2ZSgmcmluZy0+bG9jaywgZmxhZ3MpOworCWE2eHhfZ3B1LT5wcmVl bXB0W3JpbmctPmlkXS0+d3B0ciA9IGdldF93cHRyKHJpbmcpOworCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogVGhlIEdQVSBwb3dlciBjb2xs YXBzaW5nIGJldHdlZW4gdGhlIGZvbGxvd2luZyBwcmVlbXB0aW9uIHJlZ2lzdGVyCisJICogd3Jp dGVzIGNhbiBsZWFkIHRvIGEgcHJvbG9uZ2VkIHByZWVtcHRpb24gdHJpZ2dlciBzZXF1ZW5jZSwg c28gd2UKKwkgKiBzZXQgYSBrZWVwYWxpdmUgYml0IHRvIG1ha2Ugc3VyZSB0aGUgR1BVIGlzIG5v dCBwb3dlciBjb2xsYXBzZWQgYnkKKwkgKiB0aGUgR01VIGR1cmluZyB0aGlzIHRpbWUuIFRoZSBm aXJzdCBmZW5jZWQgd3JpdGUgd2lsbCBtYWtlIHN1cmUgdG8KKwkgKiB3YWtlIHVwIHRoZSBHUFUo aWYgaXQgd2FzIHBvd2VyIGNvbGxhcHNlZCkgYW5kIGZyb20gdGhlcmUgb24gaXQgaXMKKwkgKiBu b3QgZ29pbmcgdG8gYmUgcG93ZXIgY29sbGFwc2VkIHVudGlsIHdlIGNsb3NlIHRoZSBrZWVwYWxp dmUgd2luZG93CisJICogYnkgcmVzZXR0aW5nIHRoZSBrZWVwYWxpdmUgYml0LgorCSAqLworCWdt dV9ybXcoJmE2eHhfZ3B1LT5nbXUsIFJFR19BNlhYX0dNVV9BT19TUEFSRV9DTlRMLCAweDAsIDB4 Mik7CisKKwlhNnh4X2dtdV9mZW5jZWRfd3JpdGUoYTZ4eF9ncHUsCisJCVJFR19BNlhYX0NQX0NP TlRFWFRfU1dJVENIX1BSSVZfTk9OX1NFQ1VSRV9SRVNUT1JFX0FERFJfTE8sCisJCWxvd2VyXzMy X2JpdHMoYTZ4eF9ncHUtPnByZWVtcHRfaW92YVtyaW5nLT5pZF0pLAorCQlGRU5DRV9TVEFUVVNf V1JJVEVEUk9QUEVEMV9NQVNLKTsKKworCWE2eHhfZ211X2ZlbmNlZF93cml0ZShhNnh4X2dwdSwK KwkJUkVHX0E2WFhfQ1BfQ09OVEVYVF9TV0lUQ0hfUFJJVl9OT05fU0VDVVJFX1JFU1RPUkVfQURE Ul9ISSwKKwkJdXBwZXJfMzJfYml0cyhhNnh4X2dwdS0+cHJlZW1wdF9pb3ZhW3JpbmctPmlkXSks CisJCUZFTkNFX1NUQVRVU19XUklURURST1BQRUQxX01BU0spOworCisJLyoKKwkgKiBVc2UgdGhl IHVzZXIgY29udGV4dCBpb3ZhIGZyb20gdGhlIHNjcmF0Y2ggbWVtb3J5IHRoYXQgdGhlIENQIG1h eQorCSAqIGhhdmUgd3JpdHRlbiBhcyBwYXJ0IG9mIHRoZSByaW5nIHN3aXRjaCBvdXQuCisJICov CisJdXNlcl9jdHhfaW92YSA9ICooKHVpbnQ2NF90ICopYTZ4eF9ncHUtPnNjcmF0Y2hfcHRyICsg cmluZy0+aWQpOworCisJYTZ4eF9nbXVfZmVuY2VkX3dyaXRlKGE2eHhfZ3B1LAorCQlSRUdfQTZY WF9DUF9DT05URVhUX1NXSVRDSF9OT05fUFJJVl9SRVNUT1JFX0FERFJfTE8sCisJCWxvd2VyXzMy X2JpdHModXNlcl9jdHhfaW92YSksCisJCUZFTkNFX1NUQVRVU19XUklURURST1BQRUQxX01BU0sp OworCisJYTZ4eF9nbXVfZmVuY2VkX3dyaXRlKGE2eHhfZ3B1LAorCQlSRUdfQTZYWF9DUF9DT05U RVhUX1NXSVRDSF9OT05fUFJJVl9SRVNUT1JFX0FERFJfSEksCisJCXVwcGVyXzMyX2JpdHModXNl cl9jdHhfaW92YSksCisJCUZFTkNFX1NUQVRVU19XUklURURST1BQRUQxX01BU0spOworCisJYTZ4 eF9ncHUtPm5leHRfcmluZyA9IHJpbmc7CisKKwkvKiBTdGFydCBhIHRpbWVyIHRvIGNhdGNoIGEg c3R1Y2sgcHJlZW1wdGlvbiAqLworCW1vZF90aW1lcigmYTZ4eF9ncHUtPnByZWVtcHRfdGltZXIs IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDAwKSk7CisKKwkvKiBTZXQgdGhlIHByZWVt cHRpb24gc3RhdGUgdG8gdHJpZ2dlcmVkICovCisJc2V0X3ByZWVtcHRfc3RhdGUoYTZ4eF9ncHUs IFBSRUVNUFRfVFJJR0dFUkVEKTsKKworCS8qIE1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHdyaXR0 ZW4gYmVmb3JlIGhpdHRpbmcgdGhlIGJ1dHRvbiAqLworCXdtYigpOworCisJLyogVHJpZ2dlciB0 aGUgcHJlZW1wdGlvbiAqLworCWE2eHhfZ211X2ZlbmNlZF93cml0ZShhNnh4X2dwdSwgUkVHX0E2 WFhfQ1BfQ09OVEVYVF9TV0lUQ0hfQ05UTCwgY250bCwKKwkJRkVOQ0VfU1RBVFVTX1dSSVRFRFJP UFBFRDFfTUFTSyk7CisKKwkvKiBDbG9zZSB0aGUgR1BVIGtlZWxhcGxpdmUgd2luZG93ICovCisJ Z211X3JtdygmYTZ4eF9ncHUtPmdtdSwgUkVHX0E2WFhfR01VX0FPX1NQQVJFX0NOVEwsIDB4Miwg MHgwKTsKK30KKworc3RhdGljIGludCBwcmVlbXB0X2luaXRfcmluZyhzdHJ1Y3QgYTZ4eF9ncHUg KmE2eHhfZ3B1LAorCQlzdHJ1Y3QgbXNtX3JpbmdidWZmZXIgKnJpbmcpCit7CisJc3RydWN0IGFk cmVub19ncHUgKmFkcmVub19ncHUgPSAmYTZ4eF9ncHUtPmJhc2U7CisJc3RydWN0IG1zbV9ncHUg KmdwdSA9ICZhZHJlbm9fZ3B1LT5iYXNlOworCXN0cnVjdCBhNnh4X3ByZWVtcHRfcmVjb3JkICpw dHI7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpibyA9IE5VTEw7CisJdTY0IGlvdmEgPSAwOwor CisJcHRyID0gbXNtX2dlbV9rZXJuZWxfbmV3KGdwdS0+ZGV2LAorCQlBNlhYX1BSRUVNUFRfUkVD T1JEX1NJWkUgKyBBNlhYX1BSRUVNUFRfQ09VTlRFUl9TSVpFLAorCQlNU01fQk9fVU5DQUNIRUQs IGdwdS0+YXNwYWNlLCAmYm8sICZpb3ZhKTsKKworCWlmIChJU19FUlIocHRyKSkKKwkJcmV0dXJu IFBUUl9FUlIocHRyKTsKKworCWE2eHhfZ3B1LT5wcmVlbXB0X2JvW3JpbmctPmlkXSA9IGJvOwor CWE2eHhfZ3B1LT5wcmVlbXB0X2lvdmFbcmluZy0+aWRdID0gaW92YTsKKwlhNnh4X2dwdS0+cHJl ZW1wdFtyaW5nLT5pZF0gPSBwdHI7CisKKwkvKiBTZXQgdXAgdGhlIGRlZmF1bHRzIG9uIHRoZSBw cmVlbXB0aW9uIHJlY29yZCAqLworCXB0ci0+bWFnaWMgPSBBNlhYX1BSRUVNUFRfUkVDT1JEX01B R0lDOworCXB0ci0+aW5mbyA9IDA7CisJcHRyLT5kYXRhID0gMDsKKwlwdHItPnJwdHIgPSAwOwor CXB0ci0+d3B0ciA9IDA7CisJcHRyLT5jbnRsID0gTVNNX0dQVV9SQl9DTlRMX0RFRkFVTFQ7CisJ cHRyLT5ycHRyX2FkZHIgPSByYm1lbXB0cihyaW5nLCBycHRyKTsKKwlwdHItPnJiYXNlID0gcmlu Zy0+aW92YTsKKwlwdHItPmNvdW50ZXIgPSBpb3ZhICsgQTZYWF9QUkVFTVBUX1JFQ09SRF9TSVpF OworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYTZ4eF9wcmVlbXB0X2Zpbmkoc3RydWN0IG1zbV9n cHUgKmdwdSkKK3sKKwlzdHJ1Y3QgYWRyZW5vX2dwdSAqYWRyZW5vX2dwdSA9IHRvX2FkcmVub19n cHUoZ3B1KTsKKwlzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1ID0gdG9fYTZ4eF9ncHUoYWRyZW5v X2dwdSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZ3B1LT5ucl9yaW5nczsgaSsrKSB7 CisJCWlmICghYTZ4eF9ncHUtPnByZWVtcHRfYm9baV0pCisJCQljb250aW51ZTsKKworCQltc21f Z2VtX3B1dF92YWRkcihhNnh4X2dwdS0+cHJlZW1wdF9ib1tpXSk7CisKKwkJaWYgKGE2eHhfZ3B1 LT5wcmVlbXB0X2lvdmFbaV0pCisJCQltc21fZ2VtX3B1dF9pb3ZhKGE2eHhfZ3B1LT5wcmVlbXB0 X2JvW2ldLCBncHUtPmFzcGFjZSk7CisKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoYTZ4 eF9ncHUtPnByZWVtcHRfYm9baV0pOworCQlhNnh4X2dwdS0+cHJlZW1wdF9ib1tpXSA9IE5VTEw7 CisJfQorfQorCit2b2lkIGE2eHhfcHJlZW1wdF9pbml0KHN0cnVjdCBtc21fZ3B1ICpncHUpCit7 CisJc3RydWN0IGFkcmVub19ncHUgKmFkcmVub19ncHUgPSB0b19hZHJlbm9fZ3B1KGdwdSk7CisJ c3RydWN0IGE2eHhfZ3B1ICphNnh4X2dwdSA9IHRvX2E2eHhfZ3B1KGFkcmVub19ncHUpOworCWlu dCBpOworCisJLyogTm8gcHJlZW1wdGlvbiBpZiB3ZSBvbmx5IGhhdmUgb25lIHJpbmcgKi8KKwlp ZiAoZ3B1LT5ucl9yaW5ncyA8PSAxKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgZ3B1 LT5ucl9yaW5nczsgaSsrKSB7CisJCWlmIChwcmVlbXB0X2luaXRfcmluZyhhNnh4X2dwdSwgZ3B1 LT5yYltpXSkpCisJCQlnb3RvIGZhaWw7CisJfQorCisJLyogVE9ETzogbWFrZSB0aGlzIGNvbmZp Z3VyYWJsZT8gKi8KKwlhNnh4X2dwdS0+cHJlZW1wdF9sZXZlbCA9IDA7CisJYTZ4eF9ncHUtPnVz ZXNfZ21lbSA9IDE7CisJYTZ4eF9ncHUtPnNraXBfc2F2ZV9yZXN0b3JlID0gMDsKKworCWE2eHhf Z3B1LT5zY3JhdGNoX3B0ciAgPSBtc21fZ2VtX2tlcm5lbF9uZXcoZ3B1LT5kZXYsCisJCQlncHUt Pm5yX3JpbmdzICogc2l6ZW9mKHVpbnQ2NF90KSwgTVNNX0JPX1dDLAorCQkJZ3B1LT5hc3BhY2Us ICZhNnh4X2dwdS0+c2NyYXRjaF9ibywKKwkJCSZhNnh4X2dwdS0+c2NyYXRjaF9pb3ZhKTsKKwor CWlmIChJU19FUlIoYTZ4eF9ncHUtPnNjcmF0Y2hfcHRyKSkKKwkJZ290byBmYWlsOworCisJc2V0 dXBfdGltZXIoJmE2eHhfZ3B1LT5wcmVlbXB0X3RpbWVyLCBhNnh4X3ByZWVtcHRfdGltZXIsCisJ CQkodW5zaWduZWQgbG9uZykgYTZ4eF9ncHUpOworCisJcmV0dXJuOworZmFpbDoKKwkvKgorCSAq IE9uIGFueSBmYWlsdXJlIG91ciBhZHZlbnR1cmUgaXMgb3Zlci4gQ2xlYW4gdXAgYW5kCisJICog c2V0IG5yX3JpbmdzIHRvIDEgdG8gZm9yY2UgcHJlZW1wdGlvbiBvZmYKKwkgKi8KKwlhNnh4X3By ZWVtcHRfZmluaShncHUpOworCWdwdS0+bnJfcmluZ3MgPSAxOworCisJcmV0dXJuOworfQorCit2 b2lkIGE2eHhfcHJlZW1wdF9zdWJtaXRxdWV1ZV9jbG9zZShzdHJ1Y3QgbXNtX2dwdSAqZ3B1LAor CQlzdHJ1Y3QgbXNtX2dwdV9zdWJtaXRxdWV1ZSAqcXVldWUpCit7CisJaWYgKCFxdWV1ZS0+Ym8p CisJCXJldHVybjsKKworCW1zbV9nZW1fcHV0X2lvdmEocXVldWUtPmJvLCBncHUtPmFzcGFjZSk7 CisJbXNtX2dlbV9wdXRfdmFkZHIocXVldWUtPmJvKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVy ZW5jZV91bmxvY2tlZChxdWV1ZS0+Ym8pOworfQorCitpbnQgYTZ4eF9wcmVlbXB0X3N1Ym1pdHF1 ZXVlX3NldHVwKHN0cnVjdCBtc21fZ3B1ICpncHUsCisJCXN0cnVjdCBtc21fZ3B1X3N1Ym1pdHF1 ZXVlICpxdWV1ZSkKK3sKKwl2b2lkICpwdHI7CisKKwkvKgorCSAqIENyZWF0ZSBhIHBlciBzdWJt aXRxdWV1ZSBidWZmZXIgZm9yIHRoZSBDUCB0byBzYXZlIGFuZCByZXN0b3JlIHVzZXIKKwkgKiBz cGVjaWZpYyBpbmZvcm1hdGlvbiBzdWNoIGFzIHRoZSBWUEMgc3RyZWFtb3V0IGRhdGEuCisJICov CisJcHRyID0gbXNtX2dlbV9rZXJuZWxfbmV3KGdwdS0+ZGV2LCBBNlhYX1BSRUVNUFRfVVNFUl9S RUNPUkRfU0laRSwKKwkJCU1TTV9CT19XQywgZ3B1LT5hc3BhY2UsICZxdWV1ZS0+Ym8sICZxdWV1 ZS0+Ym9faW92YSk7CisKKwlpZiAoSVNfRVJSKHB0cikpCisJCXJldHVybiBQVFJfRVJSKHB0cik7 CisKKwlyZXR1cm4gMDsKK30KLS0gCjEuOS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWwK