From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [RFC libdrm 4/6] tegra: Add channel, job, pushbuf and fence APIs Date: Wed, 19 Feb 2014 17:04:51 +0100 Message-ID: <1392825893-7380-5-git-send-email-thierry.reding@gmail.com> References: <1392825893-7380-1-git-send-email-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-bk0-f50.google.com (mail-bk0-f50.google.com [209.85.214.50]) by gabe.freedesktop.org (Postfix) with ESMTP id C3595F9D57 for ; Wed, 19 Feb 2014 08:05:04 -0800 (PST) Received: by mail-bk0-f50.google.com with SMTP id d7so262064bkh.23 for ; Wed, 19 Feb 2014 08:05:03 -0800 (PST) In-Reply-To: <1392825893-7380-1-git-send-email-thierry.reding@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org To: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KClRoZXNlIGZ1bmN0aW9u cyBjYW4gYmUgdXNlZCB0byBvcGVuIGNoYW5uZWxzIHRvIGVuZ2luZXMsIG1hbmFnZSBqb2IKc3Vi bWlzc2lvbnMsIGNyZWF0ZSBwdXNoIGJ1ZmZlcnMgdG8gc3RvcmUgY29tbWFuZCBzdHJlYW1zIGlu IGFuZCB3YWl0CnVudGlsIGpvYnMgaGF2ZSBiZWVuIGNvbXBsZXRlZC4KClNpZ25lZC1vZmYtYnk6 IFRoaWVycnkgUmVkaW5nIDx0cmVkaW5nQG52aWRpYS5jb20+Ci0tLQogdGVncmEvTWFrZWZpbGUu YW0gfCAgIDQgKysKIHRlZ3JhL2NoYW5uZWwuYyAgIHwgMTI3ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiB0ZWdyYS9mZW5jZS5jICAgICB8ICA3MiArKysrKysrKysr KysrKysrKysrKysrKwogdGVncmEvam9iLmMgICAgICAgfCAxNjcgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0ZWdyYS9wcml2YXRlLmggICB8 ICA1OSArKysrKysrKysrKysrKysrKysrCiB0ZWdyYS9wdXNoYnVmLmMgICB8IDEzNyArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogdGVncmEvdGVncmEuaCAgICAg fCAgNTIgKysrKysrKysrKysrKysrKysKIDcgZmlsZXMgY2hhbmdlZCwgNjE4IGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZWdyYS9jaGFubmVsLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCB0ZWdyYS9mZW5jZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVncmEvam9iLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCB0ZWdyYS9wdXNoYnVmLmMKCmRpZmYgLS1naXQgYS90ZWdyYS9NYWtlZmlsZS5h bSBiL3RlZ3JhL01ha2VmaWxlLmFtCmluZGV4IDFiODMxNDViMTIwZC4uYzczNTg3ZTg2NjFlIDEw MDY0NAotLS0gYS90ZWdyYS9NYWtlZmlsZS5hbQorKysgYi90ZWdyYS9NYWtlZmlsZS5hbQpAQCAt MTEsNiArMTEsMTAgQEAgbGliZHJtX3RlZ3JhX2xhX0xERkxBR1MgPSAtdmVyc2lvbi1udW1iZXIg MDowOjAgLW5vLXVuZGVmaW5lZAogbGliZHJtX3RlZ3JhX2xhX0xJQkFERCA9IC4uL2xpYmRybS5s YSBAUFRIUkVBRFNUVUJTX0xJQlNACiAKIGxpYmRybV90ZWdyYV9sYV9TT1VSQ0VTID0gXAorCWNo YW5uZWwuYyBcCisJZmVuY2UuYyBcCisJam9iLmMgXAorCXB1c2hidWYuYyBcCiAJdGVncmEuYwog CiBsaWJkcm1fdGVncmFpbmNsdWRlZGlyID0gJHtpbmNsdWRlZGlyfS9saWJkcm0KZGlmZiAtLWdp dCBhL3RlZ3JhL2NoYW5uZWwuYyBiL3RlZ3JhL2NoYW5uZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLjAzY2NlMzBlOThiOQotLS0gL2Rldi9udWxsCisrKyBiL3Rl Z3JhL2NoYW5uZWwuYwpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDEy LCAyMDEzIFRoaWVycnkgUmVkaW5nCisgKiBDb3B5cmlnaHQgwqkgMjAxMyBFcmlrIEZheWUtTHVu ZAorICogQ29weXJpZ2h0IMKpIDIwMTQgTlZJRElBIENvcnBvcmF0aW9uCisgKgorICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFs bCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBB VVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUu CisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgImNvbmZpZy5oIgorI2Vu ZGlmCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVk ZSAicHJpdmF0ZS5oIgorCitzdGF0aWMgaW50IGRybV90ZWdyYV9jaGFubmVsX3NldHVwKHN0cnVj dCBkcm1fdGVncmFfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgZHJtX3RlZ3JhICpkcm0g PSBjaGFubmVsLT5kcm07CisJc3RydWN0IGRybV90ZWdyYV9nZXRfc3luY3B0IGFyZ3M7CisJaW50 IGVycjsKKworCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKwlhcmdzLmNvbnRleHQg PSBjaGFubmVsLT5jb250ZXh0OworCWFyZ3MuaW5kZXggPSAwOworCisJZXJyID0gaW9jdGwoZHJt LT5mZCwgRFJNX0lPQ1RMX1RFR1JBX0dFVF9TWU5DUFQsICZhcmdzKTsKKwlpZiAoZXJyIDwgMCkK KwkJcmV0dXJuIC1lcnJubzsKKworCWNoYW5uZWwtPnN5bmNwdCA9IGFyZ3MuaWQ7CisKKwlyZXR1 cm4gMDsKK30KKworZHJtX3B1YmxpYworaW50IGRybV90ZWdyYV9jaGFubmVsX29wZW4oc3RydWN0 IGRybV90ZWdyYV9jaGFubmVsICoqY2hhbm5lbHAsCisJCQkgICBzdHJ1Y3QgZHJtX3RlZ3JhICpk cm0sCisJCQkgICBlbnVtIGRybV90ZWdyYV9jbGFzcyBjbGllbnQpCit7CisJc3RydWN0IGRybV90 ZWdyYV9vcGVuX2NoYW5uZWwgYXJnczsKKwlzdHJ1Y3QgZHJtX3RlZ3JhX2NoYW5uZWwgKmNoYW5u ZWw7CisJZW51bSBob3N0MXhfY2xhc3MgY2xhc3M7CisJaW50IGVycjsKKworCXN3aXRjaCAoY2xp ZW50KSB7CisJY2FzZSBEUk1fVEVHUkFfR1IyRDoKKwkJY2xhc3MgPSBIT1NUMVhfQ0xBU1NfR1Iy RDsKKwkJYnJlYWs7CisKKwljYXNlIERSTV9URUdSQV9HUjNEOgorCQljbGFzcyA9IEhPU1QxWF9D TEFTU19HUjNEOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0K KworCWNoYW5uZWwgPSBjYWxsb2MoMSwgc2l6ZW9mKCpjaGFubmVsKSk7CisJaWYgKCFjaGFubmVs KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNoYW5uZWwtPmRybSA9IGRybTsKKworCW1lbXNldCgm YXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKwlhcmdzLmNsaWVudCA9IGNsYXNzOworCisJZXJyID0g aW9jdGwoZHJtLT5mZCwgRFJNX0lPQ1RMX1RFR1JBX09QRU5fQ0hBTk5FTCwgJmFyZ3MpOworCWlm IChlcnIgPCAwKSB7CisJCWZyZWUoY2hhbm5lbCk7CisJCXJldHVybiAtZXJybm87CisJfQorCisJ Y2hhbm5lbC0+Y29udGV4dCA9IGFyZ3MuY29udGV4dDsKKwljaGFubmVsLT5jbGFzcyA9IGNsYXNz OworCisJZXJyID0gZHJtX3RlZ3JhX2NoYW5uZWxfc2V0dXAoY2hhbm5lbCk7CisJaWYgKGVyciA8 IDApIHsKKwkJZnJlZShjaGFubmVsKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkqY2hhbm5lbHAg PSBjaGFubmVsOworCisJcmV0dXJuIDA7Cit9CisKK2RybV9wdWJsaWMKK2ludCBkcm1fdGVncmFf Y2hhbm5lbF9jbG9zZShzdHJ1Y3QgZHJtX3RlZ3JhX2NoYW5uZWwgKmNoYW5uZWwpCit7CisJc3Ry dWN0IGRybV90ZWdyYV9vcGVuX2NoYW5uZWwgYXJnczsKKwlzdHJ1Y3QgZHJtX3RlZ3JhICpkcm07 CisJaW50IGVycjsKKworCWlmICghY2hhbm5lbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkcm0g PSBjaGFubmVsLT5kcm07CisKKwltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CisJYXJn cy5jb250ZXh0ID0gY2hhbm5lbC0+Y29udGV4dDsKKworCWVyciA9IGlvY3RsKGRybS0+ZmQsIERS TV9JT0NUTF9URUdSQV9DTE9TRV9DSEFOTkVMLCAmYXJncyk7CisJaWYgKGVyciA8IDApCisJCXJl dHVybiAtZXJybm87CisKKwlmcmVlKGNoYW5uZWwpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1n aXQgYS90ZWdyYS9mZW5jZS5jIGIvdGVncmEvZmVuY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLjZhZjYwNTAwYzVmMQotLS0gL2Rldi9udWxsCisrKyBiL3RlZ3Jh L2ZlbmNlLmMKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDEyLCAyMDEz IFRoaWVycnkgUmVkaW5nCisgKiBDb3B5cmlnaHQgwqkgMjAxMyBFcmlrIEZheWUtTHVuZAorICog Q29weXJpZ2h0IMKpIDIwMTQgTlZJRElBIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBp bmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUg U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1Io UykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAor ICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8K KworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisK KyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAicHJp dmF0ZS5oIgorCitkcm1fcHVibGljCitpbnQgZHJtX3RlZ3JhX2ZlbmNlX3dhaXRfdGltZW91dChz dHJ1Y3QgZHJtX3RlZ3JhX2ZlbmNlICpmZW5jZSwKKwkJCQkgdW5zaWduZWQgbG9uZyB0aW1lb3V0 KQoreworCXN0cnVjdCBkcm1fdGVncmFfc3luY3B0X3dhaXQgYXJnczsKKwlpbnQgZXJyOworCisJ bWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOworCWFyZ3MuaWQgPSBmZW5jZS0+c3luY3B0 OworCWFyZ3MudGhyZXNoID0gZmVuY2UtPnZhbHVlOworCWFyZ3MudGltZW91dCA9IHRpbWVvdXQ7 CisKKwl3aGlsZSAodHJ1ZSkgeworCQllcnIgPSBpb2N0bChmZW5jZS0+ZHJtLT5mZCwgRFJNX0lP Q1RMX1RFR1JBX1NZTkNQVF9XQUlULCAmYXJncyk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlpZiAo ZXJybm8gPT0gRUlOVFIpCisJCQkJY29udGludWU7CisKKwkJCWRybU1zZygiRFJNX0lPQ1RMX1RF R1JBX1NZTkNQVF9XQUlUOiAlZFxuIiwgLWVycm5vKTsKKwkJCXJldHVybiAtZXJybm87CisJCX0K KworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworZHJtX3B1YmxpYworaW50IGRybV90 ZWdyYV9mZW5jZV93YWl0KHN0cnVjdCBkcm1fdGVncmFfZmVuY2UgKmZlbmNlKQoreworCXJldHVy biBkcm1fdGVncmFfZmVuY2Vfd2FpdF90aW1lb3V0KGZlbmNlLCAtMSk7Cit9CisKK2RybV9wdWJs aWMKK3ZvaWQgZHJtX3RlZ3JhX2ZlbmNlX2ZyZWUoc3RydWN0IGRybV90ZWdyYV9mZW5jZSAqZmVu Y2UpCit7CisJZnJlZShmZW5jZSk7Cit9CmRpZmYgLS1naXQgYS90ZWdyYS9qb2IuYyBiL3RlZ3Jh L2pvYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTA2MTY0Y2Vj OTVlCi0tLSAvZGV2L251bGwKKysrIGIvdGVncmEvam9iLmMKQEAgLTAsMCArMSwxNjcgQEAKKy8q CisgKiBDb3B5cmlnaHQgwqkgMjAxMiwgMjAxMyBUaGllcnJ5IFJlZGluZworICogQ29weXJpZ2h0 IMKpIDIwMTMgRXJpayBGYXllLUx1bmQKKyAqIENvcHlyaWdodCDCqSAyMDE0IE5WSURJQSBDb3Jw b3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENP UFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVB TElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBp bmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRl IDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgInByaXZhdGUuaCIK KworaW50IGRybV90ZWdyYV9qb2JfYWRkX3JlbG9jKHN0cnVjdCBkcm1fdGVncmFfam9iICpqb2Is CisJCQkgICAgY29uc3Qgc3RydWN0IGRybV90ZWdyYV9yZWxvYyAqcmVsb2MpCit7CisJc3RydWN0 IGRybV90ZWdyYV9yZWxvYyAqcmVsb2NzOworCXNpemVfdCBzaXplOworCisJc2l6ZSA9IChqb2It Pm51bV9yZWxvY3MgKyAxKSAqIHNpemVvZigqcmVsb2MpOworCisJcmVsb2NzID0gcmVhbGxvYyhq b2ItPnJlbG9jcywgc2l6ZSk7CisJaWYgKCFyZWxvYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlq b2ItPnJlbG9jcyA9IHJlbG9jczsKKworCWpvYi0+cmVsb2NzW2pvYi0+bnVtX3JlbG9jcysrXSA9 ICpyZWxvYzsKKworCXJldHVybiAwOworfQorCitkcm1fcHVibGljCitpbnQgZHJtX3RlZ3JhX2pv Yl9uZXcoc3RydWN0IGRybV90ZWdyYV9qb2IgKipqb2JwLAorCQkgICAgICBzdHJ1Y3QgZHJtX3Rl Z3JhX2NoYW5uZWwgKmNoYW5uZWwpCit7CisJc3RydWN0IGRybV90ZWdyYV9qb2IgKmpvYjsKKwor CWpvYiA9IGNhbGxvYygxLCBzaXplb2YoKmpvYikpOworCWlmICgham9iKQorCQlyZXR1cm4gLUVO T01FTTsKKworCURSTUlOSVRMSVNUSEVBRCgmam9iLT5wdXNoYnVmcyk7CisJam9iLT5jaGFubmVs ID0gY2hhbm5lbDsKKworCSpqb2JwID0gam9iOworCisJcmV0dXJuIDA7Cit9CisKK2RybV9wdWJs aWMKK2ludCBkcm1fdGVncmFfam9iX2ZyZWUoc3RydWN0IGRybV90ZWdyYV9qb2IgKmpvYikKK3sK KwlzdHJ1Y3QgZHJtX3RlZ3JhX3B1c2hidWZfcHJpdmF0ZSAqcHVzaGJ1ZjsKKworCWlmICgham9i KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCURSTUxJU1RGT1JFQUNIRU5UUlkocHVzaGJ1ZiwgJmpv Yi0+cHVzaGJ1ZnMsIGxpc3QpCisJCWRybV90ZWdyYV9wdXNoYnVmX2ZyZWUoJnB1c2hidWYtPmJh c2UpOworCisJZnJlZShqb2ItPnJlbG9jcyk7CisJZnJlZShqb2IpOworCisJcmV0dXJuIDA7Cit9 CisKK2RybV9wdWJsaWMKK2ludCBkcm1fdGVncmFfam9iX3N1Ym1pdChzdHJ1Y3QgZHJtX3RlZ3Jh X2pvYiAqam9iLAorCQkJIHN0cnVjdCBkcm1fdGVncmFfZmVuY2UgKipmZW5jZXApCit7CisJc3Ry dWN0IGRybV90ZWdyYSAqZHJtID0gam9iLT5jaGFubmVsLT5kcm07CisJc3RydWN0IGRybV90ZWdy YV9wdXNoYnVmX3ByaXZhdGUgKnB1c2hidWY7CisJc3RydWN0IGRybV90ZWdyYV9mZW5jZSAqZmVu Y2UgPSBOVUxMOworCXN0cnVjdCBkcm1fdGVncmFfY21kYnVmICpjbWRidWZzOworCXN0cnVjdCBk cm1fdGVncmFfc3luY3B0ICpzeW5jcHRzOworCXN0cnVjdCBkcm1fdGVncmFfc3VibWl0IGFyZ3M7 CisJdW5zaWduZWQgaW50IGk7CisJaW50IGVycjsKKworCWlmIChmZW5jZXApIHsKKwkJZmVuY2Ug PSBjYWxsb2MoMSwgc2l6ZW9mKCpmZW5jZSkpOworCQlpZiAoIWZlbmNlKQorCQkJcmV0dXJuIC1F Tk9NRU07CisJfQorCisJY21kYnVmcyA9IGNhbGxvYyhqb2ItPm51bV9wdXNoYnVmcywgc2l6ZW9m KCpjbWRidWZzKSk7CisJaWYgKCFjbWRidWZzKSB7CisJCWZyZWUoZmVuY2UpOworCQlyZXR1cm4g LUVOT01FTTsKKwl9CisKKwlEUk1MSVNURk9SRUFDSEVOVFJZKHB1c2hidWYsICZqb2ItPnB1c2hi dWZzLCBsaXN0KSB7CisJCXN0cnVjdCBkcm1fdGVncmFfY21kYnVmICpjbWRidWYgPSAmY21kYnVm c1tpXTsKKworCQljbWRidWYtPmhhbmRsZSA9IHB1c2hidWYtPmJvLT5oYW5kbGU7CisJCWNtZGJ1 Zi0+b2Zmc2V0ID0gcHVzaGJ1Zi0+b2Zmc2V0OworCQljbWRidWYtPndvcmRzID0gcHVzaGJ1Zi0+ YmFzZS5wdHIgLSBwdXNoYnVmLT5zdGFydDsKKwl9CisKKwlzeW5jcHRzID0gY2FsbG9jKDEsIHNp emVvZigqc3luY3B0cykpOworCWlmICghc3luY3B0cykgeworCQlmcmVlKGNtZGJ1ZnMpOworCQlm cmVlKGZlbmNlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc3luY3B0c1swXS5pZCA9IGpv Yi0+c3luY3B0OworCXN5bmNwdHNbMF0uaW5jcnMgPSBqb2ItPmluY3JlbWVudHM7CisKKwltZW1z ZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CisJYXJncy5jb250ZXh0ID0gam9iLT5jaGFubmVs LT5jb250ZXh0OworCWFyZ3MubnVtX3N5bmNwdHMgPSAxOworCWFyZ3MubnVtX2NtZGJ1ZnMgPSBq b2ItPm51bV9wdXNoYnVmczsKKwlhcmdzLm51bV9yZWxvY3MgPSBqb2ItPm51bV9yZWxvY3M7CisJ YXJncy5udW1fd2FpdGNoa3MgPSAwOworCWFyZ3Mud2FpdGNoa19tYXNrID0gMDsKKwlhcmdzLnRp bWVvdXQgPSAxMDAwOworCisJYXJncy5zeW5jcHRzID0gKHVpbnRwdHJfdClzeW5jcHRzOworCWFy Z3MuY21kYnVmcyA9ICh1aW50cHRyX3QpY21kYnVmczsKKwlhcmdzLnJlbG9jcyA9ICh1aW50cHRy X3Qpam9iLT5yZWxvY3M7CisJYXJncy53YWl0Y2hrcyA9IDA7CisKKwllcnIgPSBpb2N0bChkcm0t PmZkLCBEUk1fSU9DVExfVEVHUkFfU1VCTUlULCAmYXJncyk7CisJaWYgKGVyciA8IDApIHsKKwkJ ZnJlZShzeW5jcHRzKTsKKwkJZnJlZShjbWRidWZzKTsKKwkJZnJlZShmZW5jZSk7CisJCXJldHVy biAtZXJybm87CisJfQorCisJaWYgKGZlbmNlKSB7CisJCWZlbmNlLT5zeW5jcHQgPSBqb2ItPnN5 bmNwdDsKKwkJZmVuY2UtPnZhbHVlID0gYXJncy5mZW5jZTsKKwkJZmVuY2UtPmRybSA9IGRybTsK Kwl9CisKKwlpZiAoZmVuY2VwKQorCQkqZmVuY2VwID0gZmVuY2U7CisKKwlmcmVlKHN5bmNwdHMp OworCWZyZWUoY21kYnVmcyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3RlZ3JhL3By aXZhdGUuaCBiL3RlZ3JhL3ByaXZhdGUuaAppbmRleCBlYzY5Mjk1YzJjZjguLjNhNzJlOTk2MmY1 MyAxMDA2NDQKLS0tIGEvdGVncmEvcHJpdmF0ZS5oCisrKyBiL3RlZ3JhL3ByaXZhdGUuaApAQCAt MjYsMTAgKzI2LDEzIEBACiAjZGVmaW5lIF9fRFJNX1RFR1JBX1BSSVZBVEVfSF9fIDEKIAogI2lu Y2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KICNpbmNsdWRlIDxzdGRpbnQu aD4KIAorI2luY2x1ZGUgPGxpYmRybV9saXN0cy5oPgogI2luY2x1ZGUgPHhmODZhdG9taWMuaD4K IAorI2luY2x1ZGUgInRlZ3JhX2RybS5oIgogI2luY2x1ZGUgInRlZ3JhLmgiCiAKICNpZiBkZWZp bmVkKEhBVkVfVklTSUJJTElUWSkKQEAgLTQwLDYgKzQzLDE4IEBACiAjICBkZWZpbmUgZHJtX3B1 YmxpYwogI2VuZGlmCiAKKyNkZWZpbmUgY29udGFpbmVyX29mKHB0ciwgdHlwZSwgbWVtYmVyKSAo ewkJCQlcCisJCWNvbnN0IHR5cGVvZigoKHR5cGUgKikwKS0+bWVtYmVyKSAqX19tcHRyID0gKHB0 cik7CVwKKwkJKHR5cGUgKikoKGNoYXIgKilfX21wdHIgLSBvZmZzZXRvZih0eXBlLCBtZW1iZXIp KTsJXAorCX0pCisKK2VudW0gaG9zdDF4X2NsYXNzIHsKKwlIT1NUMVhfQ0xBU1NfSE9TVDFYID0g MHgwMSwKKwlIT1NUMVhfQ0xBU1NfR1IyRCA9IDB4NTEsCisJSE9TVDFYX0NMQVNTX0dSMkRfU0Ig PSAweDUyLAorCUhPU1QxWF9DTEFTU19HUjNEID0gMHg2MCwKK307CisKIHN0cnVjdCBkcm1fdGVn cmEgewogCWJvb2wgY2xvc2U7CiAJaW50IGZkOwpAQCAtNTUsNCArNzAsNDggQEAgc3RydWN0IGRy bV90ZWdyYV9ibyB7CiAJdm9pZCAqbWFwOwogfTsKIAorc3RydWN0IGRybV90ZWdyYV9jaGFubmVs IHsKKwlzdHJ1Y3QgZHJtX3RlZ3JhICpkcm07CisJZW51bSBob3N0MXhfY2xhc3MgY2xhc3M7CisJ dWludDY0X3QgY29udGV4dDsKKwl1aW50MzJfdCBzeW5jcHQ7Cit9OworCitzdHJ1Y3QgZHJtX3Rl Z3JhX2ZlbmNlIHsKKwlzdHJ1Y3QgZHJtX3RlZ3JhICpkcm07CisJdWludDMyX3Qgc3luY3B0Owor CXVpbnQzMl90IHZhbHVlOworfTsKKworc3RydWN0IGRybV90ZWdyYV9wdXNoYnVmX3ByaXZhdGUg eworCXN0cnVjdCBkcm1fdGVncmFfcHVzaGJ1ZiBiYXNlOworCXN0cnVjdCBkcm1fdGVncmFfam9i ICpqb2I7CisJc3RydWN0IGRybV90ZWdyYV9ibyAqYm87CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7 CisJZHJtTU1MaXN0SGVhZCBsaXN0OworCXVpbnQzMl90ICpzdGFydDsKK307CisKK3N0YXRpYyBp bmxpbmUgc3RydWN0IGRybV90ZWdyYV9wdXNoYnVmX3ByaXZhdGUgKgorcHVzaGJ1Zl9wcml2KHN0 cnVjdCBkcm1fdGVncmFfcHVzaGJ1ZiAqcGIpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwYiwg c3RydWN0IGRybV90ZWdyYV9wdXNoYnVmX3ByaXZhdGUsIGJhc2UpOworfQorCitzdHJ1Y3QgZHJt X3RlZ3JhX2pvYiB7CisJc3RydWN0IGRybV90ZWdyYV9jaGFubmVsICpjaGFubmVsOworCisJdW5z aWduZWQgaW50IGluY3JlbWVudHM7CisJdWludDMyX3Qgc3luY3B0OworCisJc3RydWN0IGRybV90 ZWdyYV9yZWxvYyAqcmVsb2NzOworCXVuc2lnbmVkIGludCBudW1fcmVsb2NzOworCisJdW5zaWdu ZWQgaW50IG51bV9wdXNoYnVmczsKKwlkcm1NTUxpc3RIZWFkIHB1c2hidWZzOworfTsKKworaW50 IGRybV90ZWdyYV9qb2JfYWRkX3JlbG9jKHN0cnVjdCBkcm1fdGVncmFfam9iICpqb2IsCisJCQkg ICAgY29uc3Qgc3RydWN0IGRybV90ZWdyYV9yZWxvYyAqcmVsb2MpOworCiAjZW5kaWYgLyogX19E Uk1fVEVHUkFfUFJJVkFURV9IX18gKi8KZGlmZiAtLWdpdCBhL3RlZ3JhL3B1c2hidWYuYyBiL3Rl Z3JhL3B1c2hidWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjkz ZjcyZmQ0MDY1MAotLS0gL2Rldi9udWxsCisrKyBiL3RlZ3JhL3B1c2hidWYuYwpAQCAtMCwwICsx LDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDEyLCAyMDEzIFRoaWVycnkgUmVkaW5nCisg KiBDb3B5cmlnaHQgwqkgMjAxMyBFcmlrIEZheWUtTHVuZAorICogQ29weXJpZ2h0IMKpIDIwMTQg TlZJRElBIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM CisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisg KiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmZGVmIEhBVkVfQ09O RklHX0gKKyMgIGluY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxlcnJuby5o PgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAi cHJpdmF0ZS5oIgorCisjZGVmaW5lIEhPU1QxWF9PUENPREVfTk9OSU5DUihvZmZzZXQsIGNvdW50 KSBcCisgICAgKCgweDIgPDwgMjgpIHwgKCgob2Zmc2V0KSAmIDB4ZmZmKSA8PCAxNikgfCAoKGNv dW50KSAmIDB4ZmZmZikpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworZHJtX3RlZ3Jh X3B1c2hidWZfZ2V0X29mZnNldChzdHJ1Y3QgZHJtX3RlZ3JhX3B1c2hidWYgKnB1c2hidWYpCit7 CisJc3RydWN0IGRybV90ZWdyYV9wdXNoYnVmX3ByaXZhdGUgKnByaXYgPSBwdXNoYnVmX3ByaXYo cHVzaGJ1Zik7CisJc3RydWN0IGRybV90ZWdyYV9ibyAqYm8gPSBwcml2LT5ibzsKKworCXJldHVy biAodW5zaWduZWQgbG9uZylwdXNoYnVmLT5wdHIgLSAodW5zaWduZWQgbG9uZyliby0+bWFwOwor fQorCitkcm1fcHVibGljCitpbnQgZHJtX3RlZ3JhX3B1c2hidWZfbmV3KHN0cnVjdCBkcm1fdGVn cmFfcHVzaGJ1ZiAqKnB1c2hidWZwLAorCQkJICBzdHJ1Y3QgZHJtX3RlZ3JhX2pvYiAqam9iLAor CQkJICBzdHJ1Y3QgZHJtX3RlZ3JhX2JvICpibywKKwkJCSAgdW5zaWduZWQgbG9uZyBvZmZzZXQp Cit7CisJc3RydWN0IGRybV90ZWdyYV9wdXNoYnVmX3ByaXZhdGUgKnB1c2hidWY7CisJdm9pZCAq cHRyOworCWludCBlcnI7CisKKwlwdXNoYnVmID0gY2FsbG9jKDEsIHNpemVvZigqcHVzaGJ1Zikp OworCWlmICghcHVzaGJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwdXNoYnVmLT5ibyA9IGRy bV90ZWdyYV9ib19nZXQoYm8pOworCURSTUlOSVRMSVNUSEVBRCgmcHVzaGJ1Zi0+bGlzdCk7CisJ cHVzaGJ1Zi0+am9iID0gam9iOworCisJZXJyID0gZHJtX3RlZ3JhX2JvX21hcChibywgJnB0cik7 CisJaWYgKGVyciA8IDApIHsKKwkJZHJtX3RlZ3JhX2JvX3B1dChibyk7CisJCWZyZWUocHVzaGJ1 Zik7CisJCXJldHVybiBlcnI7CisJfQorCisJcHVzaGJ1Zi0+c3RhcnQgPSBwdXNoYnVmLT5iYXNl LnB0ciA9IHB0ciArIG9mZnNldDsKKwlwdXNoYnVmLT5vZmZzZXQgPSBvZmZzZXQ7CisKKwlEUk1M SVNUQUREKCZwdXNoYnVmLT5saXN0LCAmam9iLT5wdXNoYnVmcyk7CisJam9iLT5udW1fcHVzaGJ1 ZnMrKzsKKworCSpwdXNoYnVmcCA9ICZwdXNoYnVmLT5iYXNlOworCisJcmV0dXJuIDA7Cit9CisK K2RybV9wdWJsaWMKK2ludCBkcm1fdGVncmFfcHVzaGJ1Zl9mcmVlKHN0cnVjdCBkcm1fdGVncmFf cHVzaGJ1ZiAqcHVzaGJ1ZikKK3sKKwlzdHJ1Y3QgZHJtX3RlZ3JhX3B1c2hidWZfcHJpdmF0ZSAq cHJpdiA9IHB1c2hidWZfcHJpdihwdXNoYnVmKTsKKworCWlmICghcHVzaGJ1ZikKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwlkcm1fdGVncmFfYm9fdW5tYXAocHJpdi0+Ym8pOworCWRybV90ZWdyYV9i b19wdXQocHJpdi0+Ym8pOworCURSTUxJU1RERUwoJnByaXYtPmxpc3QpOworCWZyZWUocHJpdik7 CisKKwlyZXR1cm4gMDsKK30KKworZHJtX3B1YmxpYworaW50IGRybV90ZWdyYV9wdXNoYnVmX3Jl bG9jYXRlKHN0cnVjdCBkcm1fdGVncmFfcHVzaGJ1ZiAqcHVzaGJ1ZiwKKwkJCSAgICAgICBzdHJ1 Y3QgZHJtX3RlZ3JhX2JvICp0YXJnZXQsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQs CisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzaGlmdCkKK3sKKwlzdHJ1Y3QgZHJtX3RlZ3JhX3B1 c2hidWZfcHJpdmF0ZSAqcHJpdiA9IHB1c2hidWZfcHJpdihwdXNoYnVmKTsKKwlzdHJ1Y3QgZHJt X3RlZ3JhX3JlbG9jIHJlbG9jOworCWludCBlcnI7CisKKwltZW1zZXQoJnJlbG9jLCAwLCBzaXpl b2YocmVsb2MpKTsKKwlyZWxvYy5jbWRidWYuaGFuZGxlID0gcHJpdi0+Ym8tPmhhbmRsZTsKKwly ZWxvYy5jbWRidWYub2Zmc2V0ID0gZHJtX3RlZ3JhX3B1c2hidWZfZ2V0X29mZnNldChwdXNoYnVm KTsKKwlyZWxvYy50YXJnZXQuaGFuZGxlID0gdGFyZ2V0LT5oYW5kbGU7CisJcmVsb2MudGFyZ2V0 Lm9mZnNldCA9IG9mZnNldDsKKwlyZWxvYy5zaGlmdCA9IHNoaWZ0OworCisJZXJyID0gZHJtX3Rl Z3JhX2pvYl9hZGRfcmVsb2MocHJpdi0+am9iLCAmcmVsb2MpOworCWlmIChlcnIgPCAwKQorCQly ZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CisKK2RybV9wdWJsaWMKK2ludCBkcm1fdGVncmFf cHVzaGJ1Zl9zeW5jKHN0cnVjdCBkcm1fdGVncmFfcHVzaGJ1ZiAqcHVzaGJ1ZiwKKwkJCSAgIGVu dW0gZHJtX3RlZ3JhX3N5bmNwdF9jb25kIGNvbmQpCit7CisJc3RydWN0IGRybV90ZWdyYV9wdXNo YnVmX3ByaXZhdGUgKnByaXYgPSBwdXNoYnVmX3ByaXYocHVzaGJ1Zik7CisKKwlpZiAoY29uZCA+ PSBEUk1fVEVHUkFfU1lOQ1BUX0NPTkRfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSpwdXNo YnVmLT5wdHIrKyA9IEhPU1QxWF9PUENPREVfTk9OSU5DUigweDAsIDB4MSk7CisJKnB1c2hidWYt PnB0cisrID0gY29uZCA8PCA4IHwgcHJpdi0+am9iLT5zeW5jcHQ7CisJcHJpdi0+am9iLT5pbmNy ZW1lbnRzKys7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3RlZ3JhL3RlZ3JhLmggYi90 ZWdyYS90ZWdyYS5oCmluZGV4IDA3MzFjYjNiZDRkYy4uY2EwYWRlMWJkZGFkIDEwMDY0NAotLS0g YS90ZWdyYS90ZWdyYS5oCisrKyBiL3RlZ3JhL3RlZ3JhLmgKQEAgLTI4LDYgKzI4LDEzIEBACiAj aW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKKyNpbmNsdWRlIDx0ZWdy YV9kcm0uaD4KKworZW51bSBkcm1fdGVncmFfY2xhc3MgeworCURSTV9URUdSQV9HUjJELAorCURS TV9URUdSQV9HUjNELAorfTsKKwogc3RydWN0IGRybV90ZWdyYV9ibzsKIHN0cnVjdCBkcm1fdGVn cmE7CiAKQEAgLTQ0LDQgKzUxLDQ5IEBAIGludCBkcm1fdGVncmFfYm9fZ2V0X2hhbmRsZShzdHJ1 Y3QgZHJtX3RlZ3JhX2JvICpibywgdWludDMyX3QgKmhhbmRsZSk7CiBpbnQgZHJtX3RlZ3JhX2Jv X21hcChzdHJ1Y3QgZHJtX3RlZ3JhX2JvICpibywgdm9pZCAqKnB0cik7CiBpbnQgZHJtX3RlZ3Jh X2JvX3VubWFwKHN0cnVjdCBkcm1fdGVncmFfYm8gKmJvKTsKIAorc3RydWN0IGRybV90ZWdyYV9j aGFubmVsOworc3RydWN0IGRybV90ZWdyYV9qb2I7CisKK3N0cnVjdCBkcm1fdGVncmFfcHVzaGJ1 ZiB7CisJdWludDMyX3QgKnB0cjsKK307CisKK3N0cnVjdCBkcm1fdGVncmFfZmVuY2U7CisKK2Vu dW0gZHJtX3RlZ3JhX3N5bmNwdF9jb25kIHsKKwlEUk1fVEVHUkFfU1lOQ1BUX0NPTkRfSU1NRURJ QVRFLAorCURSTV9URUdSQV9TWU5DUFRfQ09ORF9PUF9ET05FLAorCURSTV9URUdSQV9TWU5DUFRf Q09ORF9SRF9ET05FLAorCURSTV9URUdSQV9TWU5DUFRfQ09ORF9XUl9TQUZFLAorCURSTV9URUdS QV9TWU5DUFRfQ09ORF9NQVgsCit9OworCitpbnQgZHJtX3RlZ3JhX2NoYW5uZWxfb3BlbihzdHJ1 Y3QgZHJtX3RlZ3JhX2NoYW5uZWwgKipjaGFubmVscCwKKwkJCSAgIHN0cnVjdCBkcm1fdGVncmEg KmRybSwKKwkJCSAgIGVudW0gZHJtX3RlZ3JhX2NsYXNzIGNsaWVudCk7CitpbnQgZHJtX3RlZ3Jh X2NoYW5uZWxfY2xvc2Uoc3RydWN0IGRybV90ZWdyYV9jaGFubmVsICpjaGFubmVsKTsKKworaW50 IGRybV90ZWdyYV9qb2JfbmV3KHN0cnVjdCBkcm1fdGVncmFfam9iICoqam9icCwKKwkJICAgICAg c3RydWN0IGRybV90ZWdyYV9jaGFubmVsICpjaGFubmVsKTsKK2ludCBkcm1fdGVncmFfam9iX2Zy ZWUoc3RydWN0IGRybV90ZWdyYV9qb2IgKmpvYik7CitpbnQgZHJtX3RlZ3JhX2pvYl9zdWJtaXQo c3RydWN0IGRybV90ZWdyYV9qb2IgKmpvYiwKKwkJCSBzdHJ1Y3QgZHJtX3RlZ3JhX2ZlbmNlICoq ZmVuY2VwKTsKKworaW50IGRybV90ZWdyYV9wdXNoYnVmX25ldyhzdHJ1Y3QgZHJtX3RlZ3JhX3B1 c2hidWYgKipwdXNoYnVmcCwKKwkJCSAgc3RydWN0IGRybV90ZWdyYV9qb2IgKmpvYiwKKwkJCSAg c3RydWN0IGRybV90ZWdyYV9ibyAqYm8sCisJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKK2lu dCBkcm1fdGVncmFfcHVzaGJ1Zl9mcmVlKHN0cnVjdCBkcm1fdGVncmFfcHVzaGJ1ZiAqcHVzaGJ1 Zik7CitpbnQgZHJtX3RlZ3JhX3B1c2hidWZfcmVsb2NhdGUoc3RydWN0IGRybV90ZWdyYV9wdXNo YnVmICpwdXNoYnVmLAorCQkJICAgICAgIHN0cnVjdCBkcm1fdGVncmFfYm8gKnRhcmdldCwKKwkJ CSAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNo aWZ0KTsKK2ludCBkcm1fdGVncmFfcHVzaGJ1Zl9zeW5jKHN0cnVjdCBkcm1fdGVncmFfcHVzaGJ1 ZiAqcHVzaGJ1ZiwKKwkJCSAgIGVudW0gZHJtX3RlZ3JhX3N5bmNwdF9jb25kIGNvbmQpOworCitp bnQgZHJtX3RlZ3JhX2ZlbmNlX3dhaXRfdGltZW91dChzdHJ1Y3QgZHJtX3RlZ3JhX2ZlbmNlICpm ZW5jZSwKKwkJCQkgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKK2ludCBkcm1fdGVncmFfZmVuY2Vf d2FpdChzdHJ1Y3QgZHJtX3RlZ3JhX2ZlbmNlICpmZW5jZSk7Cit2b2lkIGRybV90ZWdyYV9mZW5j ZV9mcmVlKHN0cnVjdCBkcm1fdGVncmFfZmVuY2UgKmZlbmNlKTsKKwogI2VuZGlmIC8qIF9fRFJN X1RFR1JBX0hfXyAqLwotLSAKMS44LjQuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK