From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jordan Crouse Subject: [PATCH 7/9] drm/msm: Implement preemption for A5XX targets Date: Wed, 11 Oct 2017 09:14:22 -0600 Message-ID: <1507734864-25069-8-git-send-email-jcrouse@codeaurora.org> References: <1507734864-25069-1-git-send-email-jcrouse@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1507734864-25069-1-git-send-email-jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org SW1wbGVtZW50IHByZWVtcHRpb24gZm9yIEE1WFggdGFyZ2V0cyAtIHRoaXMgYWxsb3dzIG11bHRp cGxlCnJpbmdidWZmZXJzIGZvciBkaWZmZXJlbnQgcHJpb3JpdGllcyB3aXRoIGF1dG9tYXRpYyBw cmVlbXB0aW9uCm9mIGEgbG93ZXIgcHJpb3JpdHkgcmluZ2J1ZmZlciBpZiBhIGhpZ2hlciBvbmUg aXMgcmVhZHkuCgpTaWduZWQtb2ZmLWJ5OiBKb3JkYW4gQ3JvdXNlIDxqY3JvdXNlQGNvZGVhdXJv cmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgICAgICAgICAgICAgIHwg ICAxICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E1eHhfZ3B1LmMgICAgIHwgMTc2ICsr KysrKysrKysrKysrKystCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNXh4X2dwdS5oICAg ICB8IDEwNyArKysrKysrKysrLQogZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTV4eF9wcmVl bXB0LmMgfCAzMDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmMgICB8ICAxNCArLQogZHJpdmVycy9ncHUvZHJtL21z bS9hZHJlbm8vYWRyZW5vX2dwdS5oICAgfCAgIDcgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNt X2Rydi5oICAgICAgICAgICAgIHwgICAyICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9ncHUu YyAgICAgICAgICAgICB8ICAgNSArLQogZHJpdmVycy9ncHUvZHJtL21zbS9tc21fcmluZ2J1ZmZl ci5jICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL21zbS9tc21fcmluZ2J1ZmZlci5oICAg ICAgfCAgIDEgKwogMTAgZmlsZXMgY2hhbmdlZCwgNTk5IGluc2VydGlvbnMoKyksIDIwIGRlbGV0 aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E1 eHhfcHJlZW1wdC5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKaW5kZXggM2MyMzRlNy4uZDBiMjZkZCAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL01ha2VmaWxlCkBAIC04LDYgKzgsNyBAQCBtc20teSA6PSBcCiAJYWRyZW5vL2E0eHhf Z3B1Lm8gXAogCWFkcmVuby9hNXh4X2dwdS5vIFwKIAlhZHJlbm8vYTV4eF9wb3dlci5vIFwKKwlh ZHJlbm8vYTV4eF9wcmVlbXB0Lm8gXAogCWhkbWkvaGRtaS5vIFwKIAloZG1pL2hkbWlfYXVkaW8u byBcCiAJaGRtaS9oZG1pX2JyaWRnZS5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vYWRyZW5vL2E1eHhfZ3B1LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNXh4X2dw dS5jCmluZGV4IGI3YjlmNGYuLmEwZjY5YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t c20vYWRyZW5vL2E1eHhfZ3B1LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTV4 eF9ncHUuYwpAQCAtOTUsMTMgKzk1LDY1IEBAIHN0YXRpYyBpbnQgemFwX3NoYWRlcl9sb2FkX21k dChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmZ3bmFtZSkKIAlyZXR1cm4gcmV0Owog fQogCitzdGF0aWMgdm9pZCBhNXh4X2ZsdXNoKHN0cnVjdCBtc21fZ3B1ICpncHUsIHN0cnVjdCBt c21fcmluZ2J1ZmZlciAqcmluZykKK3sKKwlzdHJ1Y3QgYWRyZW5vX2dwdSAqYWRyZW5vX2dwdSA9 IHRvX2FkcmVub19ncHUoZ3B1KTsKKwlzdHJ1Y3QgYTV4eF9ncHUgKmE1eHhfZ3B1ID0gdG9fYTV4 eF9ncHUoYWRyZW5vX2dwdSk7CisJdWludDMyX3Qgd3B0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdz OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKKworCS8qIENvcHkg dGhlIHNoYWRvdyB0byB0aGUgYWN0dWFsIHJlZ2lzdGVyICovCisJcmluZy0+Y3VyID0gcmluZy0+ bmV4dDsKKworCS8qIE1ha2Ugc3VyZSB0byB3cmFwIHdwdHIgaWYgd2UgbmVlZCB0byAqLworCXdw dHIgPSBnZXRfd3B0cihyaW5nKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpbmctPmxv Y2ssIGZsYWdzKTsKKworCS8qIE1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHBvc3RlZCBiZWZvcmUg bWFraW5nIGEgZGVjaXNpb24gKi8KKwltYigpOworCisJLyogVXBkYXRlIEhXIGlmIHRoaXMgaXMg dGhlIGN1cnJlbnQgcmluZyBhbmQgd2UgYXJlIG5vdCBpbiBwcmVlbXB0ICovCisJaWYgKGE1eHhf Z3B1LT5jdXJfcmluZyA9PSByaW5nICYmICFhNXh4X2luX3ByZWVtcHQoYTV4eF9ncHUpKQorCQln cHVfd3JpdGUoZ3B1LCBSRUdfQTVYWF9DUF9SQl9XUFRSLCB3cHRyKTsKK30KKwogc3RhdGljIHZv aWQgYTV4eF9zdWJtaXQoc3RydWN0IG1zbV9ncHUgKmdwdSwgc3RydWN0IG1zbV9nZW1fc3VibWl0 ICpzdWJtaXQsCiAJc3RydWN0IG1zbV9maWxlX3ByaXZhdGUgKmN0eCkKIHsKKwlzdHJ1Y3QgYWRy ZW5vX2dwdSAqYWRyZW5vX2dwdSA9IHRvX2FkcmVub19ncHUoZ3B1KTsKKwlzdHJ1Y3QgYTV4eF9n cHUgKmE1eHhfZ3B1ID0gdG9fYTV4eF9ncHUoYWRyZW5vX2dwdSk7CiAJc3RydWN0IG1zbV9kcm1f cHJpdmF0ZSAqcHJpdiA9IGdwdS0+ZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgbXNtX3Jpbmdi dWZmZXIgKnJpbmcgPSBzdWJtaXQtPnJpbmc7CiAJdW5zaWduZWQgaW50IGksIGlicyA9IDA7CiAK KwlPVVRfUEtUNyhyaW5nLCBDUF9QUkVFTVBUX0VOQUJMRV9HTE9CQUwsIDEpOworCU9VVF9SSU5H KHJpbmcsIDB4MDIpOworCisJLyogVHVybiBvZmYgcHJvdGVjdGVkIG1vZGUgdG8gd3JpdGUgdG8g c3BlY2lhbCByZWdpc3RlcnMgKi8KKwlPVVRfUEtUNyhyaW5nLCBDUF9TRVRfUFJPVEVDVEVEX01P REUsIDEpOworCU9VVF9SSU5HKHJpbmcsIDApOworCisJLyogU2V0IHRoZSBzYXZlIHByZWVtcHRp b24gcmVjb3JkIGZvciB0aGUgcmluZy9jb21tYW5kICovCisJT1VUX1BLVDQocmluZywgUkVHX0E1 WFhfQ1BfQ09OVEVYVF9TV0lUQ0hfU0FWRV9BRERSX0xPLCAyKTsKKwlPVVRfUklORyhyaW5nLCBs b3dlcl8zMl9iaXRzKGE1eHhfZ3B1LT5wcmVlbXB0X2lvdmFbc3VibWl0LT5yaW5nLT5pZF0pKTsK KwlPVVRfUklORyhyaW5nLCB1cHBlcl8zMl9iaXRzKGE1eHhfZ3B1LT5wcmVlbXB0X2lvdmFbc3Vi bWl0LT5yaW5nLT5pZF0pKTsKKworCS8qIFR1cm4gYmFjayBvbiBwcm90ZWN0ZWQgbW9kZSAqLwor CU9VVF9QS1Q3KHJpbmcsIENQX1NFVF9QUk9URUNURURfTU9ERSwgMSk7CisJT1VUX1JJTkcocmlu ZywgMSk7CisKKwkvKiBFbmFibGUgbG9jYWwgcHJlZW1wdGlvbiBmb3IgZmluZWdyYWluIHByZWVt cHRpb24gKi8KKwlPVVRfUEtUNyhyaW5nLCBDUF9QUkVFTVBUX0VOQUJMRV9HTE9CQUwsIDEpOwor CU9VVF9SSU5HKHJpbmcsIDB4MDIpOworCisJLyogQWxsb3cgQ1BfQ09OVEVYVF9TV0lUQ0hfWUlF TEQgcGFja2V0cyBpbiB0aGUgSUIyICovCisJT1VUX1BLVDcocmluZywgQ1BfWUlFTERfRU5BQkxF LCAxKTsKKwlPVVRfUklORyhyaW5nLCAweDAyKTsKKworCS8qIFN1Ym1pdCB0aGUgY29tbWFuZHMg Ki8KIAlmb3IgKGkgPSAwOyBpIDwgc3VibWl0LT5ucl9jbWRzOyBpKyspIHsKIAkJc3dpdGNoIChz dWJtaXQtPmNtZFtpXS50eXBlKSB7CiAJCWNhc2UgTVNNX1NVQk1JVF9DTURfSUJfVEFSR0VUX0JV RjoKQEAgLTExOSwxNiArMTcxLDU0IEBAIHN0YXRpYyB2b2lkIGE1eHhfc3VibWl0KHN0cnVjdCBt c21fZ3B1ICpncHUsIHN0cnVjdCBtc21fZ2VtX3N1Ym1pdCAqc3VibWl0LAogCQl9CiAJfQogCisJ LyoKKwkgKiBXcml0ZSB0aGUgcmVuZGVyIG1vZGUgdG8gTlVMTCAoMCkgdG8gaW5kaWNhdGUgdG8g dGhlIENQIHRoYXQgdGhlIElCcworCSAqIGFyZSBkb25lIHJlbmRlcmluZyAtIG90aGVyd2lzZSBh IGx1Y2t5IHByZWVtcHRpb24gd291bGQgc3RhcnQKKwkgKiByZXBsYXlpbmcgZnJvbSB0aGUgbGFz dCBjaGVja3BvaW50CisJICovCisJT1VUX1BLVDcocmluZywgQ1BfU0VUX1JFTkRFUl9NT0RFLCA1 KTsKKwlPVVRfUklORyhyaW5nLCAwKTsKKwlPVVRfUklORyhyaW5nLCAwKTsKKwlPVVRfUklORyhy aW5nLCAwKTsKKwlPVVRfUklORyhyaW5nLCAwKTsKKwlPVVRfUklORyhyaW5nLCAwKTsKKworCS8q IFR1cm4gb2ZmIElCIGxldmVsIHByZWVtcHRpb25zICovCisJT1VUX1BLVDcocmluZywgQ1BfWUlF TERfRU5BQkxFLCAxKTsKKwlPVVRfUklORyhyaW5nLCAweDAxKTsKKworCS8qIFdyaXRlIHRoZSBm ZW5jZSB0byB0aGUgc2NyYXRjaCByZWdpc3RlciAqLwogCU9VVF9QS1Q0KHJpbmcsIFJFR19BNVhY X0NQX1NDUkFUQ0hfUkVHKDIpLCAxKTsKIAlPVVRfUklORyhyaW5nLCBzdWJtaXQtPnNlcW5vKTsK IAorCS8qCisJICogRXhlY3V0ZSBhIENBQ0hFX0ZMVVNIX1RTIGV2ZW50LiBUaGlzIHdpbGwgZW5z dXJlIHRoYXQgdGhlCisJICogdGltZXN0YW1wIGlzIHdyaXR0ZW4gdG8gdGhlIG1lbW9yeSBhbmQg dGhlbiB0cmlnZ2VycyB0aGUgaW50ZXJydXB0CisJICovCiAJT1VUX1BLVDcocmluZywgQ1BfRVZF TlRfV1JJVEUsIDQpOwogCU9VVF9SSU5HKHJpbmcsIENBQ0hFX0ZMVVNIX1RTIHwgKDEgPDwgMzEp KTsKIAlPVVRfUklORyhyaW5nLCBsb3dlcl8zMl9iaXRzKHJibWVtcHRyKHJpbmcsIGZlbmNlKSkp OwogCU9VVF9SSU5HKHJpbmcsIHVwcGVyXzMyX2JpdHMocmJtZW1wdHIocmluZywgZmVuY2UpKSk7 CiAJT1VUX1JJTkcocmluZywgc3VibWl0LT5zZXFubyk7CiAKLQlncHUtPmZ1bmNzLT5mbHVzaChn cHUsIHJpbmcpOworCS8qIFlpZWxkIHRoZSBmbG9vciBvbiBjb21tYW5kIGNvbXBsZXRpb24gKi8K KwlPVVRfUEtUNyhyaW5nLCBDUF9DT05URVhUX1NXSVRDSF9ZSUVMRCwgNCk7CisJLyoKKwkgKiBJ ZiBkd29yZFsyOjFdIGFyZSBub24gemVybywgdGhleSBzcGVjaWZ5IGFuIGFkZHJlc3MgZm9yIHRo ZSBDUCB0bworCSAqIHdyaXRlIHRoZSB2YWx1ZSBvZiBkd29yZFszXSB0byBvbiBwcmVlbXB0aW9u IGNvbXBsZXRlLiBXcml0ZSAwIHRvCisJICogc2tpcCB0aGUgd3JpdGUKKwkgKi8KKwlPVVRfUklO RyhyaW5nLCAweDAwKTsKKwlPVVRfUklORyhyaW5nLCAweDAwKTsKKwkvKiBEYXRhIHZhbHVlIC0g bm90IHVzZWQgaWYgdGhlIGFkZHJlc3MgYWJvdmUgaXMgMCAqLworCU9VVF9SSU5HKHJpbmcsIDB4 MDEpOworCS8qIFNldCBiaXQgMCB0byB0cmlnZ2VyIGFuIGludGVycnVwdCBvbiBwcmVlbXB0IGNv bXBsZXRlICovCisJT1VUX1JJTkcocmluZywgMHgwMSk7CisKKwlhNXh4X2ZsdXNoKGdwdSwgcmlu Zyk7CisKKwkvKiBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBzdGFydCBwcmVlbXB0aW9uICov CisJYTV4eF9wcmVlbXB0X3RyaWdnZXIoZ3B1KTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB7 CkBAIC0yNzksNiArMzY5LDUwIEBAIHN0YXRpYyBpbnQgYTV4eF9tZV9pbml0KHN0cnVjdCBtc21f Z3B1ICpncHUpCiAJcmV0dXJuIGE1eHhfaWRsZShncHUsIHJpbmcpID8gMCA6IC1FSU5WQUw7CiB9 CiAKK3N0YXRpYyBpbnQgYTV4eF9wcmVlbXB0X3N0YXJ0KHN0cnVjdCBtc21fZ3B1ICpncHUpCit7 CisJc3RydWN0IGFkcmVub19ncHUgKmFkcmVub19ncHUgPSB0b19hZHJlbm9fZ3B1KGdwdSk7CisJ c3RydWN0IGE1eHhfZ3B1ICphNXh4X2dwdSA9IHRvX2E1eHhfZ3B1KGFkcmVub19ncHUpOworCXN0 cnVjdCBtc21fcmluZ2J1ZmZlciAqcmluZyA9IGdwdS0+cmJbMF07CisKKwlpZiAoZ3B1LT5ucl9y aW5ncyA9PSAxKQorCQlyZXR1cm4gMDsKKworCS8qIFR1cm4gb2ZmIHByb3RlY3RlZCBtb2RlIHRv IHdyaXRlIHRvIHNwZWNpYWwgcmVnaXN0ZXJzICovCisJT1VUX1BLVDcocmluZywgQ1BfU0VUX1BS T1RFQ1RFRF9NT0RFLCAxKTsKKwlPVVRfUklORyhyaW5nLCAwKTsKKworCS8qIFNldCB0aGUgc2F2 ZSBwcmVlbXB0aW9uIHJlY29yZCBmb3IgdGhlIHJpbmcvY29tbWFuZCAqLworCU9VVF9QS1Q0KHJp bmcsIFJFR19BNVhYX0NQX0NPTlRFWFRfU1dJVENIX1NBVkVfQUREUl9MTywgMik7CisJT1VUX1JJ TkcocmluZywgbG93ZXJfMzJfYml0cyhhNXh4X2dwdS0+cHJlZW1wdF9pb3ZhW3JpbmctPmlkXSkp OworCU9VVF9SSU5HKHJpbmcsIHVwcGVyXzMyX2JpdHMoYTV4eF9ncHUtPnByZWVtcHRfaW92YVty aW5nLT5pZF0pKTsKKworCS8qIFR1cm4gYmFjayBvbiBwcm90ZWN0ZWQgbW9kZSAqLworCU9VVF9Q S1Q3KHJpbmcsIENQX1NFVF9QUk9URUNURURfTU9ERSwgMSk7CisJT1VUX1JJTkcocmluZywgMSk7 CisKKwlPVVRfUEtUNyhyaW5nLCBDUF9QUkVFTVBUX0VOQUJMRV9HTE9CQUwsIDEpOworCU9VVF9S SU5HKHJpbmcsIDB4MDApOworCisJT1VUX1BLVDcocmluZywgQ1BfUFJFRU1QVF9FTkFCTEVfTE9D QUwsIDEpOworCU9VVF9SSU5HKHJpbmcsIDB4MDEpOworCisJT1VUX1BLVDcocmluZywgQ1BfWUlF TERfRU5BQkxFLCAxKTsKKwlPVVRfUklORyhyaW5nLCAweDAxKTsKKworCS8qIFlpZWxkIHRoZSBm bG9vciBvbiBjb21tYW5kIGNvbXBsZXRpb24gKi8KKwlPVVRfUEtUNyhyaW5nLCBDUF9DT05URVhU X1NXSVRDSF9ZSUVMRCwgNCk7CisJT1VUX1JJTkcocmluZywgMHgwMCk7CisJT1VUX1JJTkcocmlu ZywgMHgwMCk7CisJT1VUX1JJTkcocmluZywgMHgwMSk7CisJT1VUX1JJTkcocmluZywgMHgwMSk7 CisKKwlncHUtPmZ1bmNzLT5mbHVzaChncHUsIHJpbmcpOworCisJcmV0dXJuIGE1eHhfaWRsZShn cHUsIHJpbmcpID8gMCA6IC1FSU5WQUw7Cit9CisKKwogc3RhdGljIHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqYTV4eF91Y29kZV9sb2FkX2JvKHN0cnVjdCBtc21fZ3B1ICpncHUsCiAJCWNvbnN0IHN0 cnVjdCBmaXJtd2FyZSAqZncsIHU2NCAqaW92YSkKIHsKQEAgLTM5NCw2ICs1MjgsNyBAQCBzdGF0 aWMgaW50IGE1eHhfemFwX3NoYWRlcl9pbml0KHN0cnVjdCBtc21fZ3B1ICpncHUpCiAJICBBNVhY X1JCQk1fSU5UXzBfTUFTS19SQkJNX0FUQl9BU1lOQ19PVkVSRkxPVyB8IFwKIAkgIEE1WFhfUkJC TV9JTlRfMF9NQVNLX0NQX0hXX0VSUk9SIHwgXAogCSAgQTVYWF9SQkJNX0lOVF8wX01BU0tfTUlT Q19IQU5HX0RFVEVDVCB8IFwKKwkgIEE1WFhfUkJCTV9JTlRfMF9NQVNLX0NQX1NXIHwgXAogCSAg QTVYWF9SQkJNX0lOVF8wX01BU0tfQ1BfQ0FDSEVfRkxVU0hfVFMgfCBcCiAJICBBNVhYX1JCQk1f SU5UXzBfTUFTS19VQ0hFX09PQl9BQ0NFU1MgfCBcCiAJICBBNVhYX1JCQk1fSU5UXzBfTUFTS19H UE1VX1ZPTFRBR0VfRFJPT1ApCkBAIC01NDEsNiArNjc2LDggQEAgc3RhdGljIGludCBhNXh4X2h3 X2luaXQoc3RydWN0IG1zbV9ncHUgKmdwdSkKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJ YTV4eF9wcmVlbXB0X2h3X2luaXQoZ3B1KTsKKwogCXJldCA9IGE1eHhfdWNvZGVfaW5pdChncHUp OwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC01OTMsNiArNzMwLDkgQEAgc3RhdGljIGlu dCBhNXh4X2h3X2luaXQoc3RydWN0IG1zbV9ncHUgKmdwdSkKIAkJZ3B1X3dyaXRlKGdwdSwgUkVH X0E1WFhfUkJCTV9TRUNWSURfVFJVU1RfQ05UTCwgMHgwKTsKIAl9CiAKKwkvKiBMYXN0IHN0ZXAg LSB5aWVsZCB0aGUgcmluZ2J1ZmZlciAqLworCWE1eHhfcHJlZW1wdF9zdGFydChncHUpOworCiAJ cmV0dXJuIDA7CiB9CiAKQEAgLTYyMyw2ICs3NjMsOCBAQCBzdGF0aWMgdm9pZCBhNXh4X2Rlc3Ry b3koc3RydWN0IG1zbV9ncHUgKmdwdSkKIAogCURCRygiJXMiLCBncHUtPm5hbWUpOwogCisJYTV4 eF9wcmVlbXB0X2ZpbmkoZ3B1KTsKKwogCWlmIChhNXh4X2dwdS0+cG00X2JvKSB7CiAJCWlmIChh NXh4X2dwdS0+cG00X2lvdmEpCiAJCQltc21fZ2VtX3B1dF9pb3ZhKGE1eHhfZ3B1LT5wbTRfYm8s IGdwdS0+YXNwYWNlKTsKQEAgLTY2MCw2ICs4MDIsMTQgQEAgc3RhdGljIGlubGluZSBib29sIF9h NXh4X2NoZWNrX2lkbGUoc3RydWN0IG1zbV9ncHUgKmdwdSkKIAogYm9vbCBhNXh4X2lkbGUoc3Ry dWN0IG1zbV9ncHUgKmdwdSwgc3RydWN0IG1zbV9yaW5nYnVmZmVyICpyaW5nKQogeworCXN0cnVj dCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShncHUpOworCXN0cnVjdCBh NXh4X2dwdSAqYTV4eF9ncHUgPSB0b19hNXh4X2dwdShhZHJlbm9fZ3B1KTsKKworCWlmIChyaW5n ICE9IGE1eHhfZ3B1LT5jdXJfcmluZykgeworCQlXQVJOKDEsICJUcmllZCB0byBpZGxlIGEgbm9u LWN1cnJlbnQgcmluZ2J1ZmZlclxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKIAkvKiB3YWl0 IGZvciBDUCB0byBkcmFpbiByaW5nYnVmZmVyOiAqLwogCWlmICghYWRyZW5vX2lkbGUoZ3B1LCBy aW5nKSkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtODU0LDggKzEwMDQsMTMgQEAgc3RhdGljIGlycXJl dHVybl90IGE1eHhfaXJxKHN0cnVjdCBtc21fZ3B1ICpncHUpCiAJaWYgKHN0YXR1cyAmIEE1WFhf UkJCTV9JTlRfMF9NQVNLX0dQTVVfVk9MVEFHRV9EUk9PUCkKIAkJYTV4eF9ncG11X2Vycl9pcnEo Z3B1KTsKIAotCWlmIChzdGF0dXMgJiBBNVhYX1JCQk1fSU5UXzBfTUFTS19DUF9DQUNIRV9GTFVT SF9UUykKKwlpZiAoc3RhdHVzICYgQTVYWF9SQkJNX0lOVF8wX01BU0tfQ1BfQ0FDSEVfRkxVU0hf VFMpIHsKKwkJYTV4eF9wcmVlbXB0X3RyaWdnZXIoZ3B1KTsKIAkJbXNtX2dwdV9yZXRpcmUoZ3B1 KTsKKwl9CisKKwlpZiAoc3RhdHVzICYgQTVYWF9SQkJNX0lOVF8wX01BU0tfQ1BfU1cpCisJCWE1 eHhfcHJlZW1wdF9pcnEoZ3B1KTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTk4NSw2 ICsxMTQwLDE0IEBAIHN0YXRpYyB2b2lkIGE1eHhfc2hvdyhzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBz dHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB9CiAjZW5kaWYKIAorc3RhdGljIHN0cnVjdCBtc21fcmluZ2J1 ZmZlciAqYTV4eF9hY3RpdmVfcmluZyhzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQoreworCXN0cnVjdCBh ZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShncHUpOworCXN0cnVjdCBhNXh4 X2dwdSAqYTV4eF9ncHUgPSB0b19hNXh4X2dwdShhZHJlbm9fZ3B1KTsKKworCXJldHVybiBhNXh4 X2dwdS0+Y3VyX3Jpbmc7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRyZW5vX2dwdV9mdW5j cyBmdW5jcyA9IHsKIAkuYmFzZSA9IHsKIAkJLmdldF9wYXJhbSA9IGFkcmVub19nZXRfcGFyYW0s CkBAIC05OTMsOCArMTE1Niw4IEBAIHN0YXRpYyB2b2lkIGE1eHhfc2hvdyhzdHJ1Y3QgbXNtX2dw dSAqZ3B1LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiAJCS5wbV9yZXN1bWUgPSBhNXh4X3BtX3Jlc3Vt ZSwKIAkJLnJlY292ZXIgPSBhNXh4X3JlY292ZXIsCiAJCS5zdWJtaXQgPSBhNXh4X3N1Ym1pdCwK LQkJLmZsdXNoID0gYWRyZW5vX2ZsdXNoLAotCQkuYWN0aXZlX3JpbmcgPSBhZHJlbm9fYWN0aXZl X3JpbmcsCisJCS5mbHVzaCA9IGE1eHhfZmx1c2gsCisJCS5hY3RpdmVfcmluZyA9IGE1eHhfYWN0 aXZlX3JpbmcsCiAJCS5pcnEgPSBhNXh4X2lycSwKIAkJLmRlc3Ryb3kgPSBhNXh4X2Rlc3Ryb3ks CiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCkBAIC0xMDMwLDcgKzExOTMsNyBAQCBzdHJ1Y3QgbXNt X2dwdSAqYTV4eF9ncHVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCiAJYTV4eF9ncHUt PmxtX2xlYWthZ2UgPSAweDRFMDAxQTsKIAotCXJldCA9IGFkcmVub19ncHVfaW5pdChkZXYsIHBk ZXYsIGFkcmVub19ncHUsICZmdW5jcywgMSk7CisJcmV0ID0gYWRyZW5vX2dwdV9pbml0KGRldiwg cGRldiwgYWRyZW5vX2dwdSwgJmZ1bmNzLCA0KTsKIAlpZiAocmV0KSB7CiAJCWE1eHhfZGVzdHJv eSgmKGE1eHhfZ3B1LT5iYXNlLmJhc2UpKTsKIAkJcmV0dXJuIEVSUl9QVFIocmV0KTsKQEAgLTEw MzksNSArMTIwMiw4IEBAIHN0cnVjdCBtc21fZ3B1ICphNXh4X2dwdV9pbml0KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpCiAJaWYgKGdwdS0+YXNwYWNlKQogCQltc21fbW11X3NldF9mYXVsdF9oYW5k bGVyKGdwdS0+YXNwYWNlLT5tbXUsIGdwdSwgYTV4eF9mYXVsdF9oYW5kbGVyKTsKIAorCS8qIFNl dCB1cCB0aGUgcHJlZW1wdGlvbiBzcGVjaWZpYyBiaXRzIGFuZCBwaWVjZXMgZm9yIGVhY2ggcmlu Z2J1ZmZlciAqLworCWE1eHhfcHJlZW1wdF9pbml0KGdwdSk7CisKIAlyZXR1cm4gZ3B1OwogfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTV4eF9ncHUuaCBiL2RyaXZl cnMvZ3B1L2RybS9tc20vYWRyZW5vL2E1eHhfZ3B1LmgKaW5kZXggNDRkYjQ4ZC4uNmZiOGMyZiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTV4eF9ncHUuaAorKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNXh4X2dwdS5oCkBAIC0xLDQgKzEsNCBAQAotLyog Q29weXJpZ2h0IChjKSAyMDE2IFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorLyogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZApAQCAt MzUsMTAgKzM1LDEwMCBAQCBzdHJ1Y3QgYTV4eF9ncHUgewogCXVpbnQzMl90IGdwbXVfZHdvcmRz OwogCiAJdWludDMyX3QgbG1fbGVha2FnZTsKKworCXN0cnVjdCBtc21fcmluZ2J1ZmZlciAqY3Vy X3Jpbmc7CisJc3RydWN0IG1zbV9yaW5nYnVmZmVyICpuZXh0X3Jpbmc7CisKKwlzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKnByZWVtcHRfYm9bTVNNX0dQVV9NQVhfUklOR1NdOworCXN0cnVjdCBhNXh4 X3ByZWVtcHRfcmVjb3JkICpwcmVlbXB0W01TTV9HUFVfTUFYX1JJTkdTXTsKKwl1aW50NjRfdCBw cmVlbXB0X2lvdmFbTVNNX0dQVV9NQVhfUklOR1NdOworCisJYXRvbWljX3QgcHJlZW1wdF9zdGF0 ZTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBwcmVlbXB0X3RpbWVyOwogfTsKIAogI2RlZmluZSB0b19h NXh4X2dwdSh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGE1eHhfZ3B1LCBiYXNlKQogCisvKgor ICogSW4gb3JkZXIgdG8gZG8gbG9ja2xlc3MgcHJlZW1wdGlvbiB3ZSB1c2UgYSBzaW1wbGUgc3Rh dGUgbWFjaGluZSB0byBwcm9ncmVzcworICogdGhyb3VnaCB0aGUgcHJvY2Vzcy4KKyAqCisgKiBQ UkVFTVBUX05PTkUgLSBubyBwcmVlbXB0aW9uIGluIHByb2dyZXNzLiAgTmV4dCBzdGF0ZSBTVEFS VC4KKyAqIFBSRUVNUFRfU1RBUlQgLSBUaGUgdHJpZ2dlciBpcyBldmF1bGF0aW5nIGlmIHByZWVt cHRpb24gaXMgcG9zc2libGUuIE5leHQKKyAqIHN0YXRlczogVFJJR0dFUkVELCBOT05FCisgKiBQ UkVFTVBUX0FCT1JUIC0gQW4gaW50ZXJtZWRpYXRlIHN0YXRlIGJlZm9yZSBtb3ZpbmcgYmFjayB0 byBOT05FLiBOZXh0CisgKiBzdGF0ZTogTk9ORS4KKyAqIFBSRUVNUFRfVFJJR0dFUkVEOiBBIHBy ZWVtcHRpb24gaGFzIGJlZW4gZXhlY3V0ZWQgb24gdGhlIGhhcmR3YXJlLiBOZXh0CisgKiBzdGF0 ZXM6IEZBVUxURUQsIFBFTkRJTkcKKyAqIFBSRUVNUFRfRkFVTFRFRDogQSBwcmVlbXB0aW9uIHRp bWVkIG91dCAobmV2ZXIgY29tcGxldGVkKS4gVGhpcyB3aWxsIHRyaWdnZXIKKyAqIHJlY292ZXJ5 LiAgTmV4dCBzdGF0ZTogTi9BCisgKiBQUkVFTVBUX1BFTkRJTkc6IFByZWVtcHRpb24gY29tcGxl dGUgaW50ZXJydXB0IGZpcmVkIC0gdGhlIGNhbGxiYWNrIGlzCisgKiBjaGVja2luZyB0aGUgc3Vj Y2VzcyBvZiB0aGUgb3BlcmF0aW9uLiBOZXh0IHN0YXRlOiBGQVVMVEVELCBOT05FLgorICovCisK K2VudW0gcHJlZW1wdF9zdGF0ZSB7CisJUFJFRU1QVF9OT05FID0gMCwKKwlQUkVFTVBUX1NUQVJU LAorCVBSRUVNUFRfQUJPUlQsCisJUFJFRU1QVF9UUklHR0VSRUQsCisJUFJFRU1QVF9GQVVMVEVE LAorCVBSRUVNUFRfUEVORElORywKK307CisKKy8qCisgKiBzdHJ1Y3QgYTV4eF9wcmVlbXB0X3Jl Y29yZCBpcyBhIHNoYXJlZCBidWZmZXIgYmV0d2VlbiB0aGUgbWljcm9jb2RlIGFuZCB0aGUKKyAq IENQVSB0byBzdG9yZSB0aGUgc3RhdGUgZm9yIHByZWVtcHRpb24uIFRoZSByZWNvcmQgaXRzZWxm IGlzIG11Y2ggbGFyZ2VyCisgKiAoNjRrKSBidXQgbW9zdCBvZiB0aGF0IGlzIHVzZWQgYnkgdGhl IENQIGZvciBzdG9yYWdlLgorICoKKyAqIFRoZXJlIGlzIGEgcHJlZW1wdGlvbiByZWNvcmQgYXNz aWduZWQgcGVyIHJpbmdidWZmZXIuIFdoZW4gdGhlIENQVSB0cmlnZ2VycyBhCisgKiBwcmVlbXB0 aW9uLCBpdCBmaWxscyBvdXQgdGhlIHJlY29yZCB3aXRoIHRoZSB1c2VmdWwgaW5mb3JtYXRpb24g KHdwdHIsIHJpbmcKKyAqIGJhc2UsIGV0YykgYW5kIHRoZSBtaWNyb2NvZGUgdXNlcyB0aGF0IGlu Zm9ybWF0aW9uIHRvIHNldCB1cCB0aGUgQ1AgZm9sbG93aW5nCisgKiB0aGUgcHJlZW1wdGlvbi4g IFdoZW4gYSByaW5nIGlzIHN3aXRjaGVkIG91dCwgdGhlIENQIHdpbGwgc2F2ZSB0aGUgcmluZ2J1 ZmZlcgorICogc3RhdGUgYmFjayB0byB0aGUgcmVjb3JkLiBJbiB0aGlzIHdheSwgb25jZSB0aGUg cmVjb3JkcyBhcmUgcHJvcGVybHkgc2V0IHVwCisgKiB0aGUgQ1BVIGNhbiBxdWlja2x5IHN3aXRj aCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHJpbmdidWZmZXJzIGJ5IG9ubHkKKyAqIHVwZGF0aW5n IGEgZmV3IHJlZ2lzdGVycyAob2Z0ZW4gb25seSB0aGUgd3B0cikuCisgKgorICogVGhlc2UgYXJl IHRoZSBDUFUgYXdhcmUgcmVnaXN0ZXJzIGluIHRoZSByZWNvcmQ6CisgKiBAbWFnaWM6IE11c3Qg YWx3YXlzIGJlIDB4MjdDNEJBRkMKKyAqIEBpbmZvOiBUeXBlIG9mIHRoZSByZWNvcmQgLSB3cml0 dGVuIDAgYnkgdGhlIENQVSwgdXBkYXRlZCBieSB0aGUgQ1AKKyAqIEBkYXRhOiBEYXRhIGZpZWxk IGZyb20gU0VUX1JFTkRFUl9NT0RFIG9yIGEgY2hlY2twb2ludC4gV3JpdHRlbiBhbmQgdXNlZCBi eQorICogdGhlIENQCisgKiBAY250bDogVmFsdWUgb2YgUkJfQ05UTCB3cml0dGVuIGJ5IENQVSwg c2F2ZS9yZXN0b3JlZCBieSBDUAorICogQHJwdHI6IFZhbHVlIG9mIFJCX1JQVFIgd3JpdHRlbiBi eSBDUFUsIHNhdmUvcmVzdG9yZWQgYnkgQ1AKKyAqIEB3cHRyOiBWYWx1ZSBvZiBSQl9XUFRSIHdy aXR0ZW4gYnkgQ1BVLCBzYXZlL3Jlc3RvcmVkIGJ5IENQCisgKiBAcnB0cl9hZGRyOiBWYWx1ZSBv ZiBSQl9SUFRSX0FERFIgd3JpdHRlbiBieSBDUFUsIHNhdmUvcmVzdG9yZWQgYnkgQ1AKKyAqIEBy YmFzZTogVmFsdWUgb2YgUkJfQkFTRSB3cml0dGVuIGJ5IENQVSwgc2F2ZS9yZXN0b3JlZCBieSBD UAorICogQGNvdW50ZXI6IEdQVSBhZGRyZXNzIG9mIHRoZSBzdG9yYWdlIGFyZWEgZm9yIHRoZSBw ZXJmb3JtYW5jZSBjb3VudGVycworICovCitzdHJ1Y3QgYTV4eF9wcmVlbXB0X3JlY29yZCB7CisJ dWludDMyX3QgbWFnaWM7CisJdWludDMyX3QgaW5mbzsKKwl1aW50MzJfdCBkYXRhOworCXVpbnQz Ml90IGNudGw7CisJdWludDMyX3QgcnB0cjsKKwl1aW50MzJfdCB3cHRyOworCXVpbnQ2NF90IHJw dHJfYWRkcjsKKwl1aW50NjRfdCByYmFzZTsKKwl1aW50NjRfdCBjb3VudGVyOworfTsKKworLyog TWFnaWMgaWRlbnRpZmllciBmb3IgdGhlIHByZWVtcHRpb24gcmVjb3JkICovCisjZGVmaW5lIEE1 WFhfUFJFRU1QVF9SRUNPUkRfTUFHSUMgMHgyN0M0QkFGQ1VMCisKKy8qCisgKiBFdmVuIHRob3Vn aCB0aGUgc3RydWN0dXJlIGFib3ZlIGlzIG9ubHkgYSBmZXcgYnl0ZXMsIHdlIG5lZWQgYSBmdWxs IDY0ayB0bworICogc3RvcmUgdGhlIGVudGlyZSBwcmVlbXB0aW9uIHJlY29yZCBmcm9tIHRoZSBD UAorICovCisjZGVmaW5lIEE1WFhfUFJFRU1QVF9SRUNPUkRfU0laRSAoNjQgKiAxMDI0KQorCisv KgorICogVGhlIHByZWVtcHRpb24gY291bnRlciBibG9jayBpcyBhIHN0b3JhZ2UgYXJlYSBmb3Ig dGhlIHZhbHVlIG9mIHRoZQorICogcHJlZW1wdGlvbiBjb3VudGVycyB0aGF0IGFyZSBzYXZlZCBp bW1lZGlhdGVseSBiZWZvcmUgY29udGV4dCBzd2l0Y2guIFdlCisgKiBhcHBlbmQgaXQgb24gdG8g dGhlIGVuZCBvZiB0aGUgYWxsb2NhdGlvbiBmb3IgdGhlIHByZWVtcHRpb24gcmVjb3JkLgorICov CisjZGVmaW5lIEE1WFhfUFJFRU1QVF9DT1VOVEVSX1NJWkUgKDE2ICogNCkKKworCiBpbnQgYTV4 eF9wb3dlcl9pbml0KHN0cnVjdCBtc21fZ3B1ICpncHUpOwogdm9pZCBhNXh4X2dwbXVfdWNvZGVf aW5pdChzdHJ1Y3QgbXNtX2dwdSAqZ3B1KTsKIApAQCAtNTgsNCArMTQ4LDE5IEBAIHN0YXRpYyBp bmxpbmUgaW50IHNwaW5fdXNlY3Moc3RydWN0IG1zbV9ncHUgKmdwdSwgdWludDMyX3QgdXNlY3Ms CiBib29sIGE1eHhfaWRsZShzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1Y3QgbXNtX3JpbmdidWZm ZXIgKnJpbmcpOwogdm9pZCBhNXh4X3NldF9od2NnKHN0cnVjdCBtc21fZ3B1ICpncHUsIGJvb2wg c3RhdGUpOwogCit2b2lkIGE1eHhfcHJlZW1wdF9pbml0KHN0cnVjdCBtc21fZ3B1ICpncHUpOwor dm9pZCBhNXh4X3ByZWVtcHRfaHdfaW5pdChzdHJ1Y3QgbXNtX2dwdSAqZ3B1KTsKK3ZvaWQgYTV4 eF9wcmVlbXB0X3RyaWdnZXIoc3RydWN0IG1zbV9ncHUgKmdwdSk7Cit2b2lkIGE1eHhfcHJlZW1w dF9pcnEoc3RydWN0IG1zbV9ncHUgKmdwdSk7Cit2b2lkIGE1eHhfcHJlZW1wdF9maW5pKHN0cnVj dCBtc21fZ3B1ICpncHUpOworCisvKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBhcmUgaW4gYSBwcmVlbXB0 IHN0YXRlICovCitzdGF0aWMgaW5saW5lIGJvb2wgYTV4eF9pbl9wcmVlbXB0KHN0cnVjdCBhNXh4 X2dwdSAqYTV4eF9ncHUpCit7CisJaW50IHByZWVtcHRfc3RhdGUgPSBhdG9taWNfcmVhZCgmYTV4 eF9ncHUtPnByZWVtcHRfc3RhdGUpOworCisJcmV0dXJuICEocHJlZW1wdF9zdGF0ZSA9PSBQUkVF TVBUX05PTkUgfHwKKwkJCXByZWVtcHRfc3RhdGUgPT0gUFJFRU1QVF9BQk9SVCk7Cit9CisKICNl bmRpZiAvKiBfX0E1WFhfR1BVX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9hZHJlbm8vYTV4eF9wcmVlbXB0LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNXh4 X3ByZWVtcHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGY0ODQwCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTV4eF9wcmVlbXB0 LmMKQEAgLTAsMCArMSwzMDUgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNyBUaGUgTGludXggRm91 bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5j bHVkZSAibXNtX2dlbS5oIgorI2luY2x1ZGUgImE1eHhfZ3B1LmgiCisKKy8qCisgKiBUcnkgdG8g dHJhbnNpdGlvbiB0aGUgcHJlZW1wdGlvbiBzdGF0ZSBmcm9tIG9sZCB0byBuZXcuIFJldHVybgor ICogdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIGlmIHRoZSBvcmlnaW5hbCBzdGF0ZSB3YXNuJ3Qg J29sZCcKKyAqLworc3RhdGljIGlubGluZSBib29sIHRyeV9wcmVlbXB0X3N0YXRlKHN0cnVjdCBh NXh4X2dwdSAqYTV4eF9ncHUsCisJCWVudW0gcHJlZW1wdF9zdGF0ZSBvbGQsIGVudW0gcHJlZW1w dF9zdGF0ZSBuZXcpCit7CisJZW51bSBwcmVlbXB0X3N0YXRlIGN1ciA9IGF0b21pY19jbXB4Y2hn KCZhNXh4X2dwdS0+cHJlZW1wdF9zdGF0ZSwKKwkJb2xkLCBuZXcpOworCisJcmV0dXJuIChjdXIg PT0gb2xkKTsKK30KKworLyoKKyAqIEZvcmNlIHRoZSBwcmVlbXB0aW9uIHN0YXRlIHRvIHRoZSBz cGVjaWZpZWQgc3RhdGUuICBUaGlzIGlzIHVzZWQgaW4gY2FzZXMKKyAqIHdoZXJlIHRoZSBjdXJy ZW50IHN0YXRlIGlzIGtub3duIGFuZCB3b24ndCBjaGFuZ2UKKyAqLworc3RhdGljIGlubGluZSB2 b2lkIHNldF9wcmVlbXB0X3N0YXRlKHN0cnVjdCBhNXh4X2dwdSAqZ3B1LAorCQllbnVtIHByZWVt cHRfc3RhdGUgbmV3KQoreworCS8qCisJICogcHJlZW1wdF9zdGF0ZSBtYXkgYmUgcmVhZCBieSBv dGhlciBjb3JlcyB0cnlpbmcgdG8gdHJpZ2dlciBhCisJICogcHJlZW1wdGlvbiBvciBpbiB0aGUg aW50ZXJydXB0IGhhbmRsZXIgc28gYmFycmllcnMgYXJlIG5lZWRlZAorCSAqIGJlZm9yZS4uLgor CSAqLworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOworCWF0b21pY19zZXQoJmdwdS0+cHJlZW1w dF9zdGF0ZSwgbmV3KTsKKwkvKiAuLi4gYW5kIGFmdGVyKi8KKwlzbXBfbWJfX2FmdGVyX2F0b21p YygpOworfQorCisvKiBXcml0ZSB0aGUgbW9zdCByZWNlbnQgd3B0ciBmb3IgdGhlIGdpdmVuIHJp bmcgaW50byB0aGUgaGFyZHdhcmUgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfd3B0cihz dHJ1Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1Y3QgbXNtX3JpbmdidWZmZXIgKnJpbmcpCit7CisJdW5z aWduZWQgbG9uZyBmbGFnczsKKwl1aW50MzJfdCB3cHRyOworCisJaWYgKCFyaW5nKQorCQlyZXR1 cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmluZy0+bG9jaywgZmxhZ3MpOworCXdwdHIgPSBn ZXRfd3B0cihyaW5nKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaW5nLT5sb2NrLCBmbGFn cyk7CisKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTVYWF9DUF9SQl9XUFRSLCB3cHRyKTsKK30KKwor LyogUmV0dXJuIHRoZSBoaWdoZXN0IHByaW9yaXR5IHJpbmdidWZmZXIgd2l0aCBzb21ldGhpbmcg aW4gaXQgKi8KK3N0YXRpYyBzdHJ1Y3QgbXNtX3JpbmdidWZmZXIgKmdldF9uZXh0X3Jpbmcoc3Ry dWN0IG1zbV9ncHUgKmdwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCisJ Zm9yIChpID0gMDsgaSA8IGdwdS0+bnJfcmluZ3M7IGkrKykgeworCQlib29sIGVtcHR5OworCQlz dHJ1Y3QgbXNtX3JpbmdidWZmZXIgKnJpbmcgPSBncHUtPnJiW2ldOworCisJCXNwaW5fbG9ja19p cnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7CisJCWVtcHR5ID0gKGdldF93cHRyKHJpbmcpID09 IHJpbmctPm1lbXB0cnMtPnJwdHIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaW5nLT5s b2NrLCBmbGFncyk7CisKKwkJaWYgKCFlbXB0eSkKKwkJCXJldHVybiByaW5nOworCX0KKworCXJl dHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBhNXh4X3ByZWVtcHRfdGltZXIodW5zaWduZWQg bG9uZyBkYXRhKQoreworCXN0cnVjdCBhNXh4X2dwdSAqYTV4eF9ncHUgPSAoc3RydWN0IGE1eHhf Z3B1ICopIGRhdGE7CisJc3RydWN0IG1zbV9ncHUgKmdwdSA9ICZhNXh4X2dwdS0+YmFzZS5iYXNl OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBncHUtPmRldjsKKwlzdHJ1Y3QgbXNtX2RybV9w cml2YXRlICpwcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmICghdHJ5X3ByZWVtcHRfc3Rh dGUoYTV4eF9ncHUsIFBSRUVNUFRfVFJJR0dFUkVELCBQUkVFTVBUX0ZBVUxURUQpKQorCQlyZXR1 cm47CisKKwlkZXZfZXJyKGRldi0+ZGV2LCAiJXM6IHByZWVtcHRpb24gdGltZWQgb3V0XG4iLCBn cHUtPm5hbWUpOworCXF1ZXVlX3dvcmsocHJpdi0+d3EsICZncHUtPnJlY292ZXJfd29yayk7Cit9 CisKKy8qIFRyeSB0byB0cmlnZ2VyIGEgcHJlZW1wdGlvbiBzd2l0Y2ggKi8KK3ZvaWQgYTV4eF9w cmVlbXB0X3RyaWdnZXIoc3RydWN0IG1zbV9ncHUgKmdwdSkKK3sKKwlzdHJ1Y3QgYWRyZW5vX2dw dSAqYWRyZW5vX2dwdSA9IHRvX2FkcmVub19ncHUoZ3B1KTsKKwlzdHJ1Y3QgYTV4eF9ncHUgKmE1 eHhfZ3B1ID0gdG9fYTV4eF9ncHUoYWRyZW5vX2dwdSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsK KwlzdHJ1Y3QgbXNtX3JpbmdidWZmZXIgKnJpbmc7CisKKwlpZiAoZ3B1LT5ucl9yaW5ncyA9PSAx KQorCQlyZXR1cm47CisKKwkvKgorCSAqIFRyeSB0byBzdGFydCBwcmVlbXB0aW9uIGJ5IG1vdmlu ZyBmcm9tIE5PTkUgdG8gU1RBUlQuIElmCisJICogdW5zdWNjZXNzZnVsLCBhIHByZWVtcHRpb24g aXMgYWxyZWFkeSBpbiBmbGlnaHQKKwkgKi8KKwlpZiAoIXRyeV9wcmVlbXB0X3N0YXRlKGE1eHhf Z3B1LCBQUkVFTVBUX05PTkUsIFBSRUVNUFRfU1RBUlQpKQorCQlyZXR1cm47CisKKwkvKiBHZXQg dGhlIG5leHQgcmluZyB0byBwcmVlbXB0IHRvICovCisJcmluZyA9IGdldF9uZXh0X3JpbmcoZ3B1 KTsKKworCS8qCisJICogSWYgbm8gcmluZyBpcyBwb3B1bGF0ZWQgb3IgdGhlIGhpZ2hlc3QgcHJp b3JpdHkgcmluZyBpcyB0aGUgY3VycmVudAorCSAqIG9uZSBkbyBub3RoaW5nIGV4Y2VwdCB0byB1 cGRhdGUgdGhlIHdwdHIgdG8gdGhlIGxhdGVzdCBhbmQgZ3JlYXRlc3QKKwkgKi8KKwlpZiAoIXJp bmcgfHwgKGE1eHhfZ3B1LT5jdXJfcmluZyA9PSByaW5nKSkgeworCQkvKgorCQkgKiBJdHMgcG9z c2libGUgdGhhdCB3aGlsZSBhIHByZWVtcHRpb24gcmVxdWVzdCBpcyBpbiBwcm9ncmVzcworCQkg KiBmcm9tIGFuIGlycSBjb250ZXh0LCBhIHVzZXIgY29udGV4dCB0cnlpbmcgdG8gc3VibWl0IG1p Z2h0CisJCSAqIGZhaWwgdG8gdXBkYXRlIHRoZSB3cml0ZSBwb2ludGVyLCBiZWNhdXNlIGl0IGRl dGVybWluZXMKKwkJICogdGhhdCB0aGUgcHJlZW1wdCBzdGF0ZSBpcyBub3QgUFJFRU1QVF9OT05F LgorCQkgKgorCQkgKiBDbG9zZSB0aGUgcmFjZSBieSBpbnRyb2R1Y2luZyBhbiBpbnRlcm1lZGlh dGUKKwkJICogc3RhdGUgUFJFRU1QVF9BQk9SVCB0byBsZXQgdGhlIHN1Ym1pdCBwYXRoCisJCSAq IGtub3cgdGhhdCB0aGUgcmluZ2J1ZmZlciBpcyBub3QgZ29pbmcgdG8gY2hhbmdlCisJCSAqIGFu ZCBjYW4gc2FmZWx5IHVwZGF0ZSB0aGUgd3JpdGUgcG9pbnRlci4KKwkJICovCisKKwkJc2V0X3By ZWVtcHRfc3RhdGUoYTV4eF9ncHUsIFBSRUVNUFRfQUJPUlQpOworCQl1cGRhdGVfd3B0cihncHUs IGE1eHhfZ3B1LT5jdXJfcmluZyk7CisJCXNldF9wcmVlbXB0X3N0YXRlKGE1eHhfZ3B1LCBQUkVF TVBUX05PTkUpOworCQlyZXR1cm47CisJfQorCisJLyogTWFrZSBzdXJlIHRoZSB3cHRyIGRvZXNu J3QgdXBkYXRlIHdoaWxlIHdlJ3JlIGluIG1vdGlvbiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZy aW5nLT5sb2NrLCBmbGFncyk7CisJYTV4eF9ncHUtPnByZWVtcHRbcmluZy0+aWRdLT53cHRyID0g Z2V0X3dwdHIocmluZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmluZy0+bG9jaywgZmxh Z3MpOworCisJLyogU2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBpbmNvbWluZyBwcmVlbXB0aW9uIHJl Y29yZCAqLworCWdwdV93cml0ZTY0KGdwdSwgUkVHX0E1WFhfQ1BfQ09OVEVYVF9TV0lUQ0hfUkVT VE9SRV9BRERSX0xPLAorCQlSRUdfQTVYWF9DUF9DT05URVhUX1NXSVRDSF9SRVNUT1JFX0FERFJf SEksCisJCWE1eHhfZ3B1LT5wcmVlbXB0X2lvdmFbcmluZy0+aWRdKTsKKworCWE1eHhfZ3B1LT5u ZXh0X3JpbmcgPSByaW5nOworCisJLyogU3RhcnQgYSB0aW1lciB0byBjYXRjaCBhIHN0dWNrIHBy ZWVtcHRpb24gKi8KKwltb2RfdGltZXIoJmE1eHhfZ3B1LT5wcmVlbXB0X3RpbWVyLCBqaWZmaWVz ICsgbXNlY3NfdG9famlmZmllcygxMDAwMCkpOworCisJLyogU2V0IHRoZSBwcmVlbXB0aW9uIHN0 YXRlIHRvIHRyaWdnZXJlZCAqLworCXNldF9wcmVlbXB0X3N0YXRlKGE1eHhfZ3B1LCBQUkVFTVBU X1RSSUdHRVJFRCk7CisKKwkvKiBNYWtlIHN1cmUgZXZlcnl0aGluZyBpcyB3cml0dGVuIGJlZm9y ZSBoaXR0aW5nIHRoZSBidXR0b24gKi8KKwl3bWIoKTsKKworCS8qIEFuZCBhY3R1YWxseSBzdGFy dCB0aGUgcHJlZW1wdGlvbiAqLworCWdwdV93cml0ZShncHUsIFJFR19BNVhYX0NQX0NPTlRFWFRf U1dJVENIX0NOVEwsIDEpOworfQorCit2b2lkIGE1eHhfcHJlZW1wdF9pcnEoc3RydWN0IG1zbV9n cHUgKmdwdSkKK3sKKwl1aW50MzJfdCBzdGF0dXM7CisJc3RydWN0IGFkcmVub19ncHUgKmFkcmVu b19ncHUgPSB0b19hZHJlbm9fZ3B1KGdwdSk7CisJc3RydWN0IGE1eHhfZ3B1ICphNXh4X2dwdSA9 IHRvX2E1eHhfZ3B1KGFkcmVub19ncHUpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBncHUt PmRldjsKKwlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK KworCWlmICghdHJ5X3ByZWVtcHRfc3RhdGUoYTV4eF9ncHUsIFBSRUVNUFRfVFJJR0dFUkVELCBQ UkVFTVBUX1BFTkRJTkcpKQorCQlyZXR1cm47CisKKwkvKiBEZWxldGUgdGhlIHByZWVtcHRpb24g d2F0Y2hkb2cgdGltZXIgKi8KKwlkZWxfdGltZXIoJmE1eHhfZ3B1LT5wcmVlbXB0X3RpbWVyKTsK KworCS8qCisJICogVGhlIGhhcmR3YXJlIHNob3VsZCBiZSBzZXR0aW5nIENQX0NPTlRFWFRfU1dJ VENIX0NOVEwgdG8gemVybyBiZWZvcmUKKwkgKiBmaXJpbmcgdGhlIGludGVycnVwdCwgYnV0IHRo ZXJlIGlzIGEgbm9uIHplcm8gY2hhbmNlIG9mIGEgaGFyZHdhcmUKKwkgKiBjb25kaXRpb24gb3Ig YSBzb2Z0d2FyZSByYWNlIHRoYXQgY291bGQgc2V0IGl0IGFnYWluIGJlZm9yZSB3ZSBoYXZlIGEK KwkgKiBjaGFuY2UgdG8gZmluaXNoLiBJZiB0aGF0IGhhcHBlbnMsIGxvZyBhbmQgZ28gZm9yIHJl Y292ZXJ5CisJICovCisJc3RhdHVzID0gZ3B1X3JlYWQoZ3B1LCBSRUdfQTVYWF9DUF9DT05URVhU X1NXSVRDSF9DTlRMKTsKKwlpZiAodW5saWtlbHkoc3RhdHVzKSkgeworCQlzZXRfcHJlZW1wdF9z dGF0ZShhNXh4X2dwdSwgUFJFRU1QVF9GQVVMVEVEKTsKKwkJZGV2X2VycihkZXYtPmRldiwgIiVz OiBQcmVlbXB0aW9uIGZhaWxlZCB0byBjb21wbGV0ZVxuIiwKKwkJCWdwdS0+bmFtZSk7CisJCXF1 ZXVlX3dvcmsocHJpdi0+d3EsICZncHUtPnJlY292ZXJfd29yayk7CisJCXJldHVybjsKKwl9CisK KwlhNXh4X2dwdS0+Y3VyX3JpbmcgPSBhNXh4X2dwdS0+bmV4dF9yaW5nOworCWE1eHhfZ3B1LT5u ZXh0X3JpbmcgPSBOVUxMOworCisJdXBkYXRlX3dwdHIoZ3B1LCBhNXh4X2dwdS0+Y3VyX3Jpbmcp OworCisJc2V0X3ByZWVtcHRfc3RhdGUoYTV4eF9ncHUsIFBSRUVNUFRfTk9ORSk7Cit9CisKK3Zv aWQgYTV4eF9wcmVlbXB0X2h3X2luaXQoc3RydWN0IG1zbV9ncHUgKmdwdSkKK3sKKwlzdHJ1Y3Qg YWRyZW5vX2dwdSAqYWRyZW5vX2dwdSA9IHRvX2FkcmVub19ncHUoZ3B1KTsKKwlzdHJ1Y3QgYTV4 eF9ncHUgKmE1eHhfZ3B1ID0gdG9fYTV4eF9ncHUoYWRyZW5vX2dwdSk7CisJaW50IGk7CisKKwlm b3IgKGkgPSAwOyBpIDwgZ3B1LT5ucl9yaW5nczsgaSsrKSB7CisJCWE1eHhfZ3B1LT5wcmVlbXB0 W2ldLT53cHRyID0gMDsKKwkJYTV4eF9ncHUtPnByZWVtcHRbaV0tPnJwdHIgPSAwOworCQlhNXh4 X2dwdS0+cHJlZW1wdFtpXS0+cmJhc2UgPSBncHUtPnJiW2ldLT5pb3ZhOworCX0KKworCS8qIFdy aXRlIGEgMCB0byBzaWduYWwgdGhhdCB3ZSBhcmVuJ3Qgc3dpdGNoaW5nIHBhZ2V0YWJsZXMgKi8K KwlncHVfd3JpdGU2NChncHUsIFJFR19BNVhYX0NQX0NPTlRFWFRfU1dJVENIX1NNTVVfSU5GT19M TywKKwkJUkVHX0E1WFhfQ1BfQ09OVEVYVF9TV0lUQ0hfU01NVV9JTkZPX0hJLCAwKTsKKworCS8q IFJlc2V0IHRoZSBwcmVlbXB0aW9uIHN0YXRlICovCisJc2V0X3ByZWVtcHRfc3RhdGUoYTV4eF9n cHUsIFBSRUVNUFRfTk9ORSk7CisKKwkvKiBBbHdheXMgY29tZSB1cCBvbiByYiAwICovCisJYTV4 eF9ncHUtPmN1cl9yaW5nID0gZ3B1LT5yYlswXTsKK30KKworc3RhdGljIGludCBwcmVlbXB0X2lu aXRfcmluZyhzdHJ1Y3QgYTV4eF9ncHUgKmE1eHhfZ3B1LAorCQlzdHJ1Y3QgbXNtX3JpbmdidWZm ZXIgKnJpbmcpCit7CisJc3RydWN0IGFkcmVub19ncHUgKmFkcmVub19ncHUgPSAmYTV4eF9ncHUt PmJhc2U7CisJc3RydWN0IG1zbV9ncHUgKmdwdSA9ICZhZHJlbm9fZ3B1LT5iYXNlOworCXN0cnVj dCBhNXh4X3ByZWVtcHRfcmVjb3JkICpwdHI7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpibyA9 IE5VTEw7CisJdTY0IGlvdmEgPSAwOworCisJcHRyID0gbXNtX2dlbV9rZXJuZWxfbmV3KGdwdS0+ ZGV2LAorCQlBNVhYX1BSRUVNUFRfUkVDT1JEX1NJWkUgKyBBNVhYX1BSRUVNUFRfQ09VTlRFUl9T SVpFLAorCQlNU01fQk9fVU5DQUNIRUQsIGdwdS0+YXNwYWNlLCAmYm8sICZpb3ZhKTsKKworCWlm IChJU19FUlIocHRyKSkKKwkJcmV0dXJuIFBUUl9FUlIocHRyKTsKKworCWE1eHhfZ3B1LT5wcmVl bXB0X2JvW3JpbmctPmlkXSA9IGJvOworCWE1eHhfZ3B1LT5wcmVlbXB0X2lvdmFbcmluZy0+aWRd ID0gaW92YTsKKwlhNXh4X2dwdS0+cHJlZW1wdFtyaW5nLT5pZF0gPSBwdHI7CisKKwkvKiBTZXQg dXAgdGhlIGRlZmF1bHRzIG9uIHRoZSBwcmVlbXB0aW9uIHJlY29yZCAqLworCisJcHRyLT5tYWdp YyA9IEE1WFhfUFJFRU1QVF9SRUNPUkRfTUFHSUM7CisJcHRyLT5pbmZvID0gMDsKKwlwdHItPmRh dGEgPSAwOworCXB0ci0+Y250bCA9IE1TTV9HUFVfUkJfQ05UTF9ERUZBVUxUOworCXB0ci0+cnB0 cl9hZGRyID0gcmJtZW1wdHIocmluZywgcnB0cik7CisJcHRyLT5jb3VudGVyID0gaW92YSArIEE1 WFhfUFJFRU1QVF9SRUNPUkRfU0laRTsKKworCXJldHVybiAwOworfQorCit2b2lkIGE1eHhfcHJl ZW1wdF9maW5pKHN0cnVjdCBtc21fZ3B1ICpncHUpCit7CisJc3RydWN0IGFkcmVub19ncHUgKmFk cmVub19ncHUgPSB0b19hZHJlbm9fZ3B1KGdwdSk7CisJc3RydWN0IGE1eHhfZ3B1ICphNXh4X2dw dSA9IHRvX2E1eHhfZ3B1KGFkcmVub19ncHUpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8 IGdwdS0+bnJfcmluZ3M7IGkrKykgeworCQlpZiAoIWE1eHhfZ3B1LT5wcmVlbXB0X2JvW2ldKQor CQkJY29udGludWU7CisKKwkJbXNtX2dlbV9wdXRfdmFkZHIoYTV4eF9ncHUtPnByZWVtcHRfYm9b aV0pOworCisJCWlmIChhNXh4X2dwdS0+cHJlZW1wdF9pb3ZhW2ldKQorCQkJbXNtX2dlbV9wdXRf aW92YShhNXh4X2dwdS0+cHJlZW1wdF9ib1tpXSwgZ3B1LT5hc3BhY2UpOworCisJCWRybV9nZW1f b2JqZWN0X3VucmVmZXJlbmNlKGE1eHhfZ3B1LT5wcmVlbXB0X2JvW2ldKTsKKwkJYTV4eF9ncHUt PnByZWVtcHRfYm9baV0gPSBOVUxMOworCX0KK30KKwordm9pZCBhNXh4X3ByZWVtcHRfaW5pdChz dHJ1Y3QgbXNtX2dwdSAqZ3B1KQoreworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0g dG9fYWRyZW5vX2dwdShncHUpOworCXN0cnVjdCBhNXh4X2dwdSAqYTV4eF9ncHUgPSB0b19hNXh4 X2dwdShhZHJlbm9fZ3B1KTsKKwlpbnQgaTsKKworCS8qIE5vIHByZWVtcHRpb24gaWYgd2Ugb25s eSBoYXZlIG9uZSByaW5nICovCisJaWYgKGdwdS0+bnJfcmluZ3MgPD0gMSkKKwkJcmV0dXJuOwor CisJZm9yIChpID0gMDsgaSA8IGdwdS0+bnJfcmluZ3M7IGkrKykgeworCQlpZiAocHJlZW1wdF9p bml0X3JpbmcoYTV4eF9ncHUsIGdwdS0+cmJbaV0pKSB7CisJCQkvKgorCQkJICogT24gYW55IGZh aWx1cmUgb3VyIGFkdmVudHVyZSBpcyBvdmVyLiBDbGVhbiB1cCBhbmQKKwkJCSAqIHNldCBucl9y aW5ncyB0byAxIHRvIGZvcmNlIHByZWVtcHRpb24gb2ZmCisJCQkgKi8KKwkJCWE1eHhfcHJlZW1w dF9maW5pKGdwdSk7CisJCQlncHUtPm5yX3JpbmdzID0gMTsKKworCQkJcmV0dXJuOworCQl9CisJ fQorCisJc2V0dXBfdGltZXIoJmE1eHhfZ3B1LT5wcmVlbXB0X3RpbWVyLCBhNXh4X3ByZWVtcHRf dGltZXIsCisJCSh1bnNpZ25lZCBsb25nKSBhNXh4X2dwdSk7Cit9CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2FkcmVuby9hZHJlbm9fZ3B1LmMKaW5kZXggNzJmMTEzMi4uMWIwNmVlZiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dwdS5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuYwpAQCAtMTE4LDExICsxMTgsNiBAQCBpbnQgYWRy ZW5vX2h3X2luaXQoc3RydWN0IG1zbV9ncHUgKmdwdSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGlj IHVpbnQzMl90IGdldF93cHRyKHN0cnVjdCBtc21fcmluZ2J1ZmZlciAqcmluZykKLXsKLQlyZXR1 cm4gcmluZy0+Y3VyIC0gcmluZy0+c3RhcnQ7Ci19Ci0KIC8qIFVzZSB0aGlzIGhlbHBlciB0byBy ZWFkIHJwdHIsIHNpbmNlIGE0MzAgZG9lc24ndCB1cGRhdGUgcnB0ciBpbiBtZW1vcnkgKi8KIHN0 YXRpYyB1aW50MzJfdCBnZXRfcnB0cihzdHJ1Y3QgYWRyZW5vX2dwdSAqYWRyZW5vX2dwdSwKIAkJ c3RydWN0IG1zbV9yaW5nYnVmZmVyICpyaW5nKQpAQCAtMTc3LDcgKzE3Miw3IEBAIHZvaWQgYWRy ZW5vX3N1Ym1pdChzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1Y3QgbXNtX2dlbV9zdWJtaXQgKnN1 Ym1pdCwKIAkJY2FzZSBNU01fU1VCTUlUX0NNRF9CVUY6CiAJCQlPVVRfUEtUMyhyaW5nLCBhZHJl bm9faXNfYTQzMChhZHJlbm9fZ3B1KSA/CiAJCQkJQ1BfSU5ESVJFQ1RfQlVGRkVSX1BGRSA6IENQ X0lORElSRUNUX0JVRkZFUl9QRkQsIDIpOwotCQkJT1VUX1JJTkcocmluZywgc3VibWl0LT5jbWRb aV0uaW92YSk7CisJCQlPVVRfUklORyhyaW5nLCBsb3dlcl8zMl9iaXRzKHN1Ym1pdC0+Y21kW2ld LmlvdmEpKTsKIAkJCU9VVF9SSU5HKHJpbmcsIHN1Ym1pdC0+Y21kW2ldLnNpemUpOwogCQkJT1VU X1BLVDIocmluZyk7CiAJCQlicmVhazsKQEAgLTI0NCw3ICsyMzksNyBAQCB2b2lkIGFkcmVub19m bHVzaChzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1Y3QgbXNtX3JpbmdidWZmZXIgKnJpbmcpCiAJ ICogdG8gYWNjb3VudCBmb3IgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlIGxhc3QgY29tbWFuZCBm aXQgZXhhY3RseSBpbnRvCiAJICogdGhlIHJpbmdidWZmZXIgYW5kIHJiLT5uZXh0IGhhc24ndCB3 cmFwcGVkIHRvIHplcm8geWV0CiAJICovCi0Jd3B0ciA9IChyaW5nLT5jdXIgLSByaW5nLT5zdGFy dCkgJSAoTVNNX0dQVV9SSU5HQlVGRkVSX1NaID4+IDIpOworCXdwdHIgPSBnZXRfd3B0cihyaW5n KTsKIAogCS8qIGVuc3VyZSB3cml0ZXMgdG8gcmluZ2J1ZmZlciBoYXZlIGhpdCBzeXN0ZW0gbWVt b3J5OiAqLwogCW1iKCk7CkBAIC0yNjIsOCArMjU3LDkgQEAgYm9vbCBhZHJlbm9faWRsZShzdHJ1 Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1Y3QgbXNtX3JpbmdidWZmZXIgKnJpbmcpCiAJCXJldHVybiB0 cnVlOwogCiAJLyogVE9ETyBtYXliZSB3ZSBuZWVkIHRvIHJlc2V0IEdQVSBoZXJlIHRvIHJlY292 ZXIgZnJvbSBoYW5nPyAqLwotCURSTV9FUlJPUigiJXM6IHRpbWVvdXQgd2FpdGluZyB0byBkcmFp biByaW5nYnVmZmVyICVkIVxuIiwgZ3B1LT5uYW1lLAotCQlyaW5nLT5pZCk7CisJRFJNX0VSUk9S KCIlczogdGltZW91dCB3YWl0aW5nIHRvIGRyYWluIHJpbmdidWZmZXIgJWQgcnB0ci93cHRyID0g JVgvJVhcbiIsCisJCWdwdS0+bmFtZSwgcmluZy0+aWQsIGdldF9ycHRyKGFkcmVub19ncHUsIHJp bmcpLCB3cHRyKTsKKwogCXJldHVybiBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dwdS5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJl bm8vYWRyZW5vX2dwdS5oCmluZGV4IDJhNTFhYzQuLmM4MTQzNGMgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2FkcmVuby9hZHJlbm9fZ3B1LmgKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMp IDIwMTMgUmVkIEhhdAogICogQXV0aG9yOiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+ CiAgKgotICogQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE0LDIwMTcgVGhlIExpbnV4IEZvdW5k YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy IGFzIHB1Ymxpc2hlZCBieQpAQCAtMzA5LDYgKzMwOSwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQg YWRyZW5vX2dwdV93cml0ZTY0KHN0cnVjdCBhZHJlbm9fZ3B1ICpncHUsCiAJYWRyZW5vX2dwdV93 cml0ZShncHUsIGhpLCB1cHBlcl8zMl9iaXRzKGRhdGEpKTsKIH0KIAorc3RhdGljIGlubGluZSB1 aW50MzJfdCBnZXRfd3B0cihzdHJ1Y3QgbXNtX3JpbmdidWZmZXIgKnJpbmcpCit7CisJcmV0dXJu IChyaW5nLT5jdXIgLSByaW5nLT5zdGFydCkgJSAoTVNNX0dQVV9SSU5HQlVGRkVSX1NaID4+IDIp OworfQorCiAvKgogICogR2l2ZW4gYSByZWdpc3RlciBhbmQgYSBjb3VudCwgcmV0dXJuIGEgdmFs dWUgdG8gcHJvZ3JhbSBpbnRvCiAgKiBSRUdfQ1BfUFJPVEVDVF9SRUcobikgLSB0aGlzIHdpbGwg YmxvY2sgYm90aCByZWFkcyBhbmQgd3JpdGVzIGZvciBfbGVuCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL21zbV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCmlu ZGV4IDI4MjFmNTcuLjk4NTNlM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNt X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCkBAIC03NCw3ICs3NCw3 IEBAIHN0cnVjdCBtc21fdmJsYW5rX2N0cmwgewogCXNwaW5sb2NrX3QgbG9jazsKIH07CiAKLSNk ZWZpbmUgTVNNX0dQVV9NQVhfUklOR1MgMQorI2RlZmluZSBNU01fR1BVX01BWF9SSU5HUyA0CiAK IHN0cnVjdCBtc21fZHJtX3ByaXZhdGUgewogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXNtL21zbV9ncHUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dwdS5jCmluZGV4IDY5YzYy YzAuLmM2NzU0MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dwdS5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dwdS5jCkBAIC0yOTUsOCArMjk1LDcgQEAgc3Rh dGljIHZvaWQgcmVjb3Zlcl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQkgKiBS ZXBsYXkgYWxsIHJlbWFpbmluZyBzdWJtaXRzIHN0YXJ0aW5nIHdpdGggaGlnaGVzdCBwcmlvcml0 eQogCQkgKiByaW5nCiAJCSAqLwotCi0JCWZvciAoaSA9IGdwdS0+bnJfcmluZ3MgLSAxOyBpID49 IDA7IGktLSkgeworCQlmb3IgKGkgPSAwOyBpIDwgZ3B1LT5ucl9yaW5nczsgaSsrKSB7CiAJCQlz dHJ1Y3QgbXNtX3JpbmdidWZmZXIgKnJpbmcgPSBncHUtPnJiW2ldOwogCiAJCQlsaXN0X2Zvcl9l YWNoX2VudHJ5KHN1Ym1pdCwgJnJpbmctPnN1Ym1pdHMsIG5vZGUpCkBAIC00NzYsNyArNDc1LDcg QEAgc3RhdGljIHZvaWQgcmV0aXJlX3N1Ym1pdHMoc3RydWN0IG1zbV9ncHUgKmdwdSkKIAlXQVJO X09OKCFtdXRleF9pc19sb2NrZWQoJmRldi0+c3RydWN0X211dGV4KSk7CiAKIAkvKiBSZXRpcmUg dGhlIGNvbW1pdHMgc3RhcnRpbmcgd2l0aCBoaWdoZXN0IHByaW9yaXR5ICovCi0JZm9yIChpID0g Z3B1LT5ucl9yaW5ncyAtIDE7IGkgPj0gMDsgaS0tKSB7CisJZm9yIChpID0gMDsgaSA8IGdwdS0+ bnJfcmluZ3M7IGkrKykgewogCQlzdHJ1Y3QgbXNtX3JpbmdidWZmZXIgKnJpbmcgPSBncHUtPnJi W2ldOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdWJtaXQsIHRtcCwgJnJpbmctPnN1 Ym1pdHMsIG5vZGUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX3Jpbmdi dWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX3JpbmdidWZmZXIuYwppbmRleCA2MDE1 OTU5Li5kNjc5NTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9yaW5nYnVm ZmVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fcmluZ2J1ZmZlci5jCkBAIC01Myw2 ICs1Myw3IEBAIHN0cnVjdCBtc21fcmluZ2J1ZmZlciAqbXNtX3JpbmdidWZmZXJfbmV3KHN0cnVj dCBtc21fZ3B1ICpncHUsIGludCBpZCwKIAlyaW5nLT5tZW1wdHJzX2lvdmEgPSBtZW1wdHJzX2lv dmE7CiAKIAlJTklUX0xJU1RfSEVBRCgmcmluZy0+c3VibWl0cyk7CisJc3Bpbl9sb2NrX2luaXQo JnJpbmctPmxvY2spOwogCiAJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiZ3B1LXJpbmct JWQiLCByaW5nLT5pZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX3Jp bmdidWZmZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX3JpbmdidWZmZXIuaAppbmRleCAz NzQ5NzY0Li5jZmZjZTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9yaW5n YnVmZmVyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fcmluZ2J1ZmZlci5oCkBAIC00 MCw2ICs0MCw3IEBAIHN0cnVjdCBtc21fcmluZ2J1ZmZlciB7CiAJc3RydWN0IG1zbV9yYm1lbXB0 cnMgKm1lbXB0cnM7CiAJdWludDY0X3QgbWVtcHRyc19pb3ZhOwogCXN0cnVjdCBtc21fZmVuY2Vf Y29udGV4dCAqZmN0eDsKKwlzcGlubG9ja190IGxvY2s7CiB9OwogCiBzdHJ1Y3QgbXNtX3Jpbmdi dWZmZXIgKm1zbV9yaW5nYnVmZmVyX25ldyhzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBpbnQgaWQsCi0t IAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K RnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5vCg==