From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [PATCH v2 libdrm 4/7] tegra: Add channel, job, pushbuf and fence APIs Date: Wed, 9 Apr 2014 13:40:27 +0200 Message-ID: <1397043630-13972-5-git-send-email-thierry.reding@gmail.com> References: <1397043630-13972-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-f53.google.com (mail-bk0-f53.google.com [209.85.214.53]) by gabe.freedesktop.org (Postfix) with ESMTP id 6196F6EB1D for ; Wed, 9 Apr 2014 04:41:32 -0700 (PDT) Received: by mail-bk0-f53.google.com with SMTP id r7so2190777bkg.40 for ; Wed, 09 Apr 2014 04:41:31 -0700 (PDT) In-Reply-To: <1397043630-13972-1-git-send-email-thierry.reding@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KClRoZXNlIGZ1bmN0aW9u cyBjYW4gYmUgdXNlZCB0byBvcGVuIGNoYW5uZWxzIHRvIGVuZ2luZXMsIG1hbmFnZSBqb2IKc3Vi bWlzc2lvbnMsIGNyZWF0ZSBwdXNoIGJ1ZmZlcnMgdG8gc3RvcmUgY29tbWFuZCBzdHJlYW1zIGlu IGFuZCB3YWl0CnVudGlsIGpvYnMgaGF2ZSBiZWVuIGNvbXBsZXRlZC4KClNpZ25lZC1vZmYtYnk6 IFRoaWVycnkgUmVkaW5nIDx0cmVkaW5nQG52aWRpYS5jb20+Ci0tLQpDaGFuZ2VzIGluIHYyOgot IGF1dG9tYXRpY2FsbHkgYWxsb2NhdGUgYnVmZmVyIG9iamVjdHMgYXMgcmVxdWlyZWQgYnkgcHVz aGJ1ZmZlcnMKLSBwdXNoYnVmZmVycyBjYW4gbm93IGhhdmUgbW9yZSB0aGFuIG9uZSBhc3NvY2lh dGVkIGJ1ZmZlciBvYmplY3QKLSBhZGQgZHJtX3RlZ3JhX3B1c2hidWZfcHJlcGFyZSgpIGZ1bmN0 aW9uCgogdGVncmEvTWFrZWZpbGUuYW0gfCAgIDQgKysKIHRlZ3JhL2NoYW5uZWwuYyAgIHwgMTI3 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogdGVncmEvZmVuY2UuYyAgICAgfCAg NzEgKysrKysrKysrKysrKysrKysrKwogdGVncmEvam9iLmMgICAgICAgfCAxODAgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRlZ3JhL3ByaXZhdGUuaCAg IHwgIDcyICsrKysrKysrKysrKysrKysrKysKIHRlZ3JhL3B1c2hidWYuYyAgIHwgMjA1ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogdGVncmEv dGVncmEuYyAgICAgfCAgIDIgKwogdGVncmEvdGVncmEuaCAgICAgfCAgNTIgKysrKysrKysrKysr KysKIDggZmlsZXMgY2hhbmdlZCwgNzEzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCB0ZWdyYS9jaGFubmVsLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZWdyYS9mZW5jZS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgdGVncmEvam9iLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZWdyYS9wdXNo YnVmLmMKCmRpZmYgLS1naXQgYS90ZWdyYS9NYWtlZmlsZS5hbSBiL3RlZ3JhL01ha2VmaWxlLmFt CmluZGV4IDFiODMxNDViMTIwZC4uYzczNTg3ZTg2NjFlIDEwMDY0NAotLS0gYS90ZWdyYS9NYWtl ZmlsZS5hbQorKysgYi90ZWdyYS9NYWtlZmlsZS5hbQpAQCAtMTEsNiArMTEsMTAgQEAgbGliZHJt X3RlZ3JhX2xhX0xERkxBR1MgPSAtdmVyc2lvbi1udW1iZXIgMDowOjAgLW5vLXVuZGVmaW5lZAog bGliZHJtX3RlZ3JhX2xhX0xJQkFERCA9IC4uL2xpYmRybS5sYSBAUFRIUkVBRFNUVUJTX0xJQlNA CiAKIGxpYmRybV90ZWdyYV9sYV9TT1VSQ0VTID0gXAorCWNoYW5uZWwuYyBcCisJZmVuY2UuYyBc CisJam9iLmMgXAorCXB1c2hidWYuYyBcCiAJdGVncmEuYwogCiBsaWJkcm1fdGVncmFpbmNsdWRl ZGlyID0gJHtpbmNsdWRlZGlyfS9saWJkcm0KZGlmZiAtLWdpdCBhL3RlZ3JhL2NoYW5uZWwuYyBi L3RlZ3JhL2NoYW5uZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LjNhYjFkNTc4ZjhlNQotLS0gL2Rldi9udWxsCisrKyBiL3RlZ3JhL2NoYW5uZWwuYwpAQCAtMCww ICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDEyLCAyMDEzIFRoaWVycnkgUmVkaW5n CisgKiBDb3B5cmlnaHQgwqkgMjAxMyBFcmlrIEZheWUtTHVuZAorICogQ29weXJpZ2h0IMKpIDIw MTQgTlZJRElBIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICog YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S CisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmZGVmIEhBVkVf Q09ORklHX0gKKyMgIGluY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxlcnJu by5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAicHJpdmF0ZS5oIgorCitzdGF0 aWMgaW50IGRybV90ZWdyYV9jaGFubmVsX3NldHVwKHN0cnVjdCBkcm1fdGVncmFfY2hhbm5lbCAq Y2hhbm5lbCkKK3sKKwlzdHJ1Y3QgZHJtX3RlZ3JhICpkcm0gPSBjaGFubmVsLT5kcm07CisJc3Ry dWN0IGRybV90ZWdyYV9nZXRfc3luY3B0IGFyZ3M7CisJaW50IGVycjsKKworCW1lbXNldCgmYXJn cywgMCwgc2l6ZW9mKGFyZ3MpKTsKKwlhcmdzLmNvbnRleHQgPSBjaGFubmVsLT5jb250ZXh0Owor CWFyZ3MuaW5kZXggPSAwOworCisJZXJyID0gaW9jdGwoZHJtLT5mZCwgRFJNX0lPQ1RMX1RFR1JB X0dFVF9TWU5DUFQsICZhcmdzKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKKwor CWNoYW5uZWwtPnN5bmNwdCA9IGFyZ3MuaWQ7CisKKwlyZXR1cm4gMDsKK30KKworZHJtX3B1Ymxp YworaW50IGRybV90ZWdyYV9jaGFubmVsX29wZW4oc3RydWN0IGRybV90ZWdyYV9jaGFubmVsICoq Y2hhbm5lbHAsCisJCQkgICBzdHJ1Y3QgZHJtX3RlZ3JhICpkcm0sCisJCQkgICBlbnVtIGRybV90 ZWdyYV9jbGFzcyBjbGllbnQpCit7CisJc3RydWN0IGRybV90ZWdyYV9vcGVuX2NoYW5uZWwgYXJn czsKKwlzdHJ1Y3QgZHJtX3RlZ3JhX2NoYW5uZWwgKmNoYW5uZWw7CisJZW51bSBob3N0MXhfY2xh c3MgY2xhc3M7CisJaW50IGVycjsKKworCXN3aXRjaCAoY2xpZW50KSB7CisJY2FzZSBEUk1fVEVH UkFfR1IyRDoKKwkJY2xhc3MgPSBIT1NUMVhfQ0xBU1NfR1IyRDsKKwkJYnJlYWs7CisKKwljYXNl IERSTV9URUdSQV9HUjNEOgorCQljbGFzcyA9IEhPU1QxWF9DTEFTU19HUjNEOworCQlicmVhazsK KworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNoYW5uZWwgPSBjYWxsb2Mo MSwgc2l6ZW9mKCpjaGFubmVsKSk7CisJaWYgKCFjaGFubmVsKQorCQlyZXR1cm4gLUVOT01FTTsK KworCWNoYW5uZWwtPmRybSA9IGRybTsKKworCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3Mp KTsKKwlhcmdzLmNsaWVudCA9IGNsYXNzOworCisJZXJyID0gaW9jdGwoZHJtLT5mZCwgRFJNX0lP Q1RMX1RFR1JBX09QRU5fQ0hBTk5FTCwgJmFyZ3MpOworCWlmIChlcnIgPCAwKSB7CisJCWZyZWUo Y2hhbm5lbCk7CisJCXJldHVybiAtZXJybm87CisJfQorCisJY2hhbm5lbC0+Y29udGV4dCA9IGFy Z3MuY29udGV4dDsKKwljaGFubmVsLT5jbGFzcyA9IGNsYXNzOworCisJZXJyID0gZHJtX3RlZ3Jh X2NoYW5uZWxfc2V0dXAoY2hhbm5lbCk7CisJaWYgKGVyciA8IDApIHsKKwkJZnJlZShjaGFubmVs KTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkqY2hhbm5lbHAgPSBjaGFubmVsOworCisJcmV0dXJu IDA7Cit9CisKK2RybV9wdWJsaWMKK2ludCBkcm1fdGVncmFfY2hhbm5lbF9jbG9zZShzdHJ1Y3Qg ZHJtX3RlZ3JhX2NoYW5uZWwgKmNoYW5uZWwpCit7CisJc3RydWN0IGRybV90ZWdyYV9jbG9zZV9j aGFubmVsIGFyZ3M7CisJc3RydWN0IGRybV90ZWdyYSAqZHJtOworCWludCBlcnI7CisKKwlpZiAo IWNoYW5uZWwpCisJCXJldHVybiAtRUlOVkFMOworCisJZHJtID0gY2hhbm5lbC0+ZHJtOworCisJ bWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOworCWFyZ3MuY29udGV4dCA9IGNoYW5uZWwt PmNvbnRleHQ7CisKKwllcnIgPSBpb2N0bChkcm0tPmZkLCBEUk1fSU9DVExfVEVHUkFfQ0xPU0Vf Q0hBTk5FTCwgJmFyZ3MpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gLWVycm5vOworCisJZnJl ZShjaGFubmVsKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVncmEvZmVuY2UuYyBi L3RlZ3JhL2ZlbmNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5m NTg3MjVjYTg0NzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZWdyYS9mZW5jZS5jCkBAIC0wLDAgKzEs NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxMiwgMjAxMyBUaGllcnJ5IFJlZGluZworICog Q29weXJpZ2h0IMKpIDIwMTMgRXJpayBGYXllLUx1bmQKKyAqIENvcHlyaWdodCDCqSAyMDE0IE5W SURJQSBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1v ZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Ig c2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAor ICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICog T1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJ R19ICisjICBpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8ZXJybm8uaD4K KyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgInByaXZhdGUuaCIKKworZHJtX3B1Ymxp YworaW50IGRybV90ZWdyYV9mZW5jZV93YWl0X3RpbWVvdXQoc3RydWN0IGRybV90ZWdyYV9mZW5j ZSAqZmVuY2UsCisJCQkJIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3sKKwlzdHJ1Y3QgZHJtX3Rl Z3JhX3N5bmNwdF93YWl0IGFyZ3M7CisJaW50IGVycjsKKworCW1lbXNldCgmYXJncywgMCwgc2l6 ZW9mKGFyZ3MpKTsKKwlhcmdzLmlkID0gZmVuY2UtPnN5bmNwdDsKKwlhcmdzLnRocmVzaCA9IGZl bmNlLT52YWx1ZTsKKwlhcmdzLnRpbWVvdXQgPSB0aW1lb3V0OworCisJd2hpbGUgKHRydWUpIHsK KwkJZXJyID0gaW9jdGwoZmVuY2UtPmRybS0+ZmQsIERSTV9JT0NUTF9URUdSQV9TWU5DUFRfV0FJ VCwgJmFyZ3MpOworCQlpZiAoZXJyIDwgMCkgeworCQkJaWYgKGVycm5vID09IEVJTlRSKQorCQkJ CWNvbnRpbnVlOworCisJCQlyZXR1cm4gLWVycm5vOworCQl9CisKKwkJYnJlYWs7CisJfQorCisJ cmV0dXJuIDA7Cit9CisKK2RybV9wdWJsaWMKK2ludCBkcm1fdGVncmFfZmVuY2Vfd2FpdChzdHJ1 Y3QgZHJtX3RlZ3JhX2ZlbmNlICpmZW5jZSkKK3sKKwlyZXR1cm4gZHJtX3RlZ3JhX2ZlbmNlX3dh aXRfdGltZW91dChmZW5jZSwgLTEpOworfQorCitkcm1fcHVibGljCit2b2lkIGRybV90ZWdyYV9m ZW5jZV9mcmVlKHN0cnVjdCBkcm1fdGVncmFfZmVuY2UgKmZlbmNlKQoreworCWZyZWUoZmVuY2Up OworfQpkaWZmIC0tZ2l0IGEvdGVncmEvam9iLmMgYi90ZWdyYS9qb2IuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhkZjY0M2M5YTliYgotLS0gL2Rldi9udWxsCisr KyBiL3RlZ3JhL2pvYi5jCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIw MTIsIDIwMTMgVGhpZXJyeSBSZWRpbmcKKyAqIENvcHlyaWdodCDCqSAyMDEzIEVyaWsgRmF5ZS1M dW5kCisgKiBDb3B5cmlnaHQgwqkgMjAxNCBOVklESUEgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNo YWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9S IEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIg TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FS RS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSAiY29uZmlnLmgiCisj ZW5kaWYKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVk ZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJwcml2YXRlLmgiCisKK2ludCBkcm1fdGVncmFfam9i X2FkZF9yZWxvYyhzdHJ1Y3QgZHJtX3RlZ3JhX2pvYiAqam9iLAorCQkJICAgIGNvbnN0IHN0cnVj dCBkcm1fdGVncmFfcmVsb2MgKnJlbG9jKQoreworCXN0cnVjdCBkcm1fdGVncmFfcmVsb2MgKnJl bG9jczsKKwlzaXplX3Qgc2l6ZTsKKworCXNpemUgPSAoam9iLT5udW1fcmVsb2NzICsgMSkgKiBz aXplb2YoKnJlbG9jKTsKKworCXJlbG9jcyA9IHJlYWxsb2Moam9iLT5yZWxvY3MsIHNpemUpOwor CWlmICghcmVsb2MpCisJCXJldHVybiAtRU5PTUVNOworCisJam9iLT5yZWxvY3MgPSByZWxvY3M7 CisKKwlqb2ItPnJlbG9jc1tqb2ItPm51bV9yZWxvY3MrK10gPSAqcmVsb2M7CisKKwlyZXR1cm4g MDsKK30KKworaW50IGRybV90ZWdyYV9qb2JfYWRkX2NtZGJ1ZihzdHJ1Y3QgZHJtX3RlZ3JhX2pv YiAqam9iLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgZHJtX3RlZ3JhX2NtZGJ1ZiAqY21kYnVmKQor eworCXN0cnVjdCBkcm1fdGVncmFfY21kYnVmICpjbWRidWZzOworCXNpemVfdCBzaXplOworCisJ c2l6ZSA9IChqb2ItPm51bV9jbWRidWZzICsgMSkgKiBzaXplb2YoKmNtZGJ1Zik7CisKKwljbWRi dWZzID0gcmVhbGxvYyhqb2ItPmNtZGJ1ZnMsIHNpemUpOworCWlmICghY21kYnVmcykKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwljbWRidWZzW2pvYi0+bnVtX2NtZGJ1ZnMrK10gPSAqY21kYnVmOwor CWpvYi0+Y21kYnVmcyA9IGNtZGJ1ZnM7CisKKwlyZXR1cm4gMDsKK30KKworZHJtX3B1YmxpYwor aW50IGRybV90ZWdyYV9qb2JfbmV3KHN0cnVjdCBkcm1fdGVncmFfam9iICoqam9icCwKKwkJICAg ICAgc3RydWN0IGRybV90ZWdyYV9jaGFubmVsICpjaGFubmVsKQoreworCXN0cnVjdCBkcm1fdGVn cmFfam9iICpqb2I7CisKKwlqb2IgPSBjYWxsb2MoMSwgc2l6ZW9mKCpqb2IpKTsKKwlpZiAoIWpv YikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlEUk1JTklUTElTVEhFQUQoJmpvYi0+cHVzaGJ1ZnMp OworCWpvYi0+Y2hhbm5lbCA9IGNoYW5uZWw7CisKKwkqam9icCA9IGpvYjsKKworCXJldHVybiAw OworfQorCitkcm1fcHVibGljCitpbnQgZHJtX3RlZ3JhX2pvYl9mcmVlKHN0cnVjdCBkcm1fdGVn cmFfam9iICpqb2IpCit7CisJc3RydWN0IGRybV90ZWdyYV9wdXNoYnVmX3ByaXZhdGUgKnB1c2hi dWY7CisKKwlpZiAoIWpvYikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlEUk1MSVNURk9SRUFDSEVO VFJZKHB1c2hidWYsICZqb2ItPnB1c2hidWZzLCBsaXN0KQorCQlkcm1fdGVncmFfcHVzaGJ1Zl9m cmVlKCZwdXNoYnVmLT5iYXNlKTsKKworCWZyZWUoam9iLT5jbWRidWZzKTsKKwlmcmVlKGpvYi0+ cmVsb2NzKTsKKwlmcmVlKGpvYik7CisKKwlyZXR1cm4gMDsKK30KKworZHJtX3B1YmxpYworaW50 IGRybV90ZWdyYV9qb2Jfc3VibWl0KHN0cnVjdCBkcm1fdGVncmFfam9iICpqb2IsCisJCQkgc3Ry dWN0IGRybV90ZWdyYV9mZW5jZSAqKmZlbmNlcCkKK3sKKwlzdHJ1Y3QgZHJtX3RlZ3JhICpkcm0g PSBqb2ItPmNoYW5uZWwtPmRybTsKKwlzdHJ1Y3QgZHJtX3RlZ3JhX3B1c2hidWZfcHJpdmF0ZSAq cHVzaGJ1ZjsKKwlzdHJ1Y3QgZHJtX3RlZ3JhX2ZlbmNlICpmZW5jZSA9IE5VTEw7CisJc3RydWN0 IGRybV90ZWdyYV9jbWRidWYgKmNtZGJ1ZnM7CisJc3RydWN0IGRybV90ZWdyYV9zeW5jcHQgKnN5 bmNwdHM7CisJc3RydWN0IGRybV90ZWdyYV9zdWJtaXQgYXJnczsKKwl1bnNpZ25lZCBpbnQgaTsK KwlpbnQgZXJyOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIGN1cnJlbnQgY29tbWFuZCBzdHJl YW0gYnVmZmVyIGlzIHF1ZXVlZCBmb3IKKwkgKiBzdWJtaXNzaW9uLgorCSAqLworCWVyciA9IGRy bV90ZWdyYV9wdXNoYnVmX3F1ZXVlKGpvYi0+cHVzaGJ1Zik7CisJaWYgKGVyciA8IDApCisJCXJl dHVybiBlcnI7CisKKwlqb2ItPnB1c2hidWYgPSBOVUxMOworCisJaWYgKGZlbmNlcCkgeworCQlm ZW5jZSA9IGNhbGxvYygxLCBzaXplb2YoKmZlbmNlKSk7CisJCWlmICghZmVuY2UpCisJCQlyZXR1 cm4gLUVOT01FTTsKKwl9CisKKwlzeW5jcHRzID0gY2FsbG9jKDEsIHNpemVvZigqc3luY3B0cykp OworCWlmICghc3luY3B0cykgeworCQlmcmVlKGNtZGJ1ZnMpOworCQlmcmVlKGZlbmNlKTsKKwkJ cmV0dXJuIC1FTk9NRU07CisJfQorCisJc3luY3B0c1swXS5pZCA9IGpvYi0+c3luY3B0OworCXN5 bmNwdHNbMF0uaW5jcnMgPSBqb2ItPmluY3JlbWVudHM7CisKKwltZW1zZXQoJmFyZ3MsIDAsIHNp emVvZihhcmdzKSk7CisJYXJncy5jb250ZXh0ID0gam9iLT5jaGFubmVsLT5jb250ZXh0OworCWFy Z3MubnVtX3N5bmNwdHMgPSAxOworCWFyZ3MubnVtX2NtZGJ1ZnMgPSBqb2ItPm51bV9jbWRidWZz OworCWFyZ3MubnVtX3JlbG9jcyA9IGpvYi0+bnVtX3JlbG9jczsKKwlhcmdzLm51bV93YWl0Y2hr cyA9IDA7CisJYXJncy53YWl0Y2hrX21hc2sgPSAwOworCWFyZ3MudGltZW91dCA9IDEwMDA7CisK KwlhcmdzLnN5bmNwdHMgPSAodWludHB0cl90KXN5bmNwdHM7CisJYXJncy5jbWRidWZzID0gKHVp bnRwdHJfdClqb2ItPmNtZGJ1ZnM7CisJYXJncy5yZWxvY3MgPSAodWludHB0cl90KWpvYi0+cmVs b2NzOworCWFyZ3Mud2FpdGNoa3MgPSAwOworCisJZXJyID0gaW9jdGwoZHJtLT5mZCwgRFJNX0lP Q1RMX1RFR1JBX1NVQk1JVCwgJmFyZ3MpOworCWlmIChlcnIgPCAwKSB7CisJCWZyZWUoc3luY3B0 cyk7CisJCWZyZWUoY21kYnVmcyk7CisJCWZyZWUoZmVuY2UpOworCQlyZXR1cm4gLWVycm5vOwor CX0KKworCWlmIChmZW5jZSkgeworCQlmZW5jZS0+c3luY3B0ID0gam9iLT5zeW5jcHQ7CisJCWZl bmNlLT52YWx1ZSA9IGFyZ3MuZmVuY2U7CisJCWZlbmNlLT5kcm0gPSBkcm07CisJCSpmZW5jZXAg PSBmZW5jZTsKKwl9CisKKwlmcmVlKHN5bmNwdHMpOworCWZyZWUoY21kYnVmcyk7CisKKwlyZXR1 cm4gMDsKK30KZGlmZiAtLWdpdCBhL3RlZ3JhL3ByaXZhdGUuaCBiL3RlZ3JhL3ByaXZhdGUuaApp bmRleCA5YjZiYzkzOTVkMjMuLmZjNzRmYjU2YjU4ZCAxMDA2NDQKLS0tIGEvdGVncmEvcHJpdmF0 ZS5oCisrKyBiL3RlZ3JhL3ByaXZhdGUuaApAQCAtMjYsMTMgKzI2LDMxIEBACiAjZGVmaW5lIF9f RFJNX1RFR1JBX1BSSVZBVEVfSF9fIDEKIAogI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRl IDxzdGRkZWYuaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KIAogI2luY2x1ZGUgPGxpYmRybS5oPgor I2luY2x1ZGUgPGxpYmRybV9saXN0cy5oPgogI2luY2x1ZGUgPHhmODZhdG9taWMuaD4KIAorI2lu Y2x1ZGUgInRlZ3JhX2RybS5oIgogI2luY2x1ZGUgInRlZ3JhLmgiCiAKKyNkZWZpbmUgY29udGFp bmVyX29mKHB0ciwgdHlwZSwgbWVtYmVyKSAoewkJCQlcCisJCWNvbnN0IHR5cGVvZigoKHR5cGUg KikwKS0+bWVtYmVyKSAqX19tcHRyID0gKHB0cik7CVwKKwkJKHR5cGUgKikoKGNoYXIgKilfX21w dHIgLSBvZmZzZXRvZih0eXBlLCBtZW1iZXIpKTsJXAorCX0pCisKKyNkZWZpbmUgYWxpZ24ob2Zm c2V0LCBhbGlnbikgXAorCSgoKG9mZnNldCkgKyAoYWxpZ24pIC0gMSkgJiB+KChhbGlnbikgLSAx KSkKKworZW51bSBob3N0MXhfY2xhc3MgeworCUhPU1QxWF9DTEFTU19IT1NUMVggPSAweDAxLAor CUhPU1QxWF9DTEFTU19HUjJEID0gMHg1MSwKKwlIT1NUMVhfQ0xBU1NfR1IyRF9TQiA9IDB4NTIs CisJSE9TVDFYX0NMQVNTX0dSM0QgPSAweDYwLAorfTsKKwogc3RydWN0IGRybV90ZWdyYSB7CiAJ Ym9vbCBjbG9zZTsKIAlpbnQgZmQ7CkBAIC00MCw2ICs1OCw3IEBAIHN0cnVjdCBkcm1fdGVncmEg ewogCiBzdHJ1Y3QgZHJtX3RlZ3JhX2JvIHsKIAlzdHJ1Y3QgZHJtX3RlZ3JhICpkcm07CisJZHJt TU1MaXN0SGVhZCBsaXN0OwogCXVpbnQzMl90IGhhbmRsZTsKIAl1aW50MzJfdCBvZmZzZXQ7CiAJ dWludDMyX3QgZmxhZ3M7CkBAIC00OCw0ICs2Nyw1NyBAQCBzdHJ1Y3QgZHJtX3RlZ3JhX2JvIHsK IAl2b2lkICptYXA7CiB9OwogCitzdHJ1Y3QgZHJtX3RlZ3JhX2NoYW5uZWwgeworCXN0cnVjdCBk cm1fdGVncmEgKmRybTsKKwllbnVtIGhvc3QxeF9jbGFzcyBjbGFzczsKKwl1aW50NjRfdCBjb250 ZXh0OworCXVpbnQzMl90IHN5bmNwdDsKK307CisKK3N0cnVjdCBkcm1fdGVncmFfZmVuY2Ugewor CXN0cnVjdCBkcm1fdGVncmEgKmRybTsKKwl1aW50MzJfdCBzeW5jcHQ7CisJdWludDMyX3QgdmFs dWU7Cit9OworCitzdHJ1Y3QgZHJtX3RlZ3JhX3B1c2hidWZfcHJpdmF0ZSB7CisJc3RydWN0IGRy bV90ZWdyYV9wdXNoYnVmIGJhc2U7CisJc3RydWN0IGRybV90ZWdyYV9qb2IgKmpvYjsKKwlkcm1N TUxpc3RIZWFkIGxpc3Q7CisJZHJtTU1MaXN0SGVhZCBib3M7CisKKwlzdHJ1Y3QgZHJtX3RlZ3Jh X2JvICpibzsKKwl1aW50MzJfdCAqc3RhcnQ7CisJdWludDMyX3QgKmVuZDsKK307CisKK3N0YXRp YyBpbmxpbmUgc3RydWN0IGRybV90ZWdyYV9wdXNoYnVmX3ByaXZhdGUgKgorcHVzaGJ1Zl9wcml2 KHN0cnVjdCBkcm1fdGVncmFfcHVzaGJ1ZiAqcGIpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihw Yiwgc3RydWN0IGRybV90ZWdyYV9wdXNoYnVmX3ByaXZhdGUsIGJhc2UpOworfQorCitpbnQgZHJt X3RlZ3JhX3B1c2hidWZfcXVldWUoc3RydWN0IGRybV90ZWdyYV9wdXNoYnVmX3ByaXZhdGUgKnB1 c2hidWYpOworCitzdHJ1Y3QgZHJtX3RlZ3JhX2pvYiB7CisJc3RydWN0IGRybV90ZWdyYV9jaGFu bmVsICpjaGFubmVsOworCisJdW5zaWduZWQgaW50IGluY3JlbWVudHM7CisJdWludDMyX3Qgc3lu Y3B0OworCisJc3RydWN0IGRybV90ZWdyYV9yZWxvYyAqcmVsb2NzOworCXVuc2lnbmVkIGludCBu dW1fcmVsb2NzOworCisJc3RydWN0IGRybV90ZWdyYV9jbWRidWYgKmNtZGJ1ZnM7CisJdW5zaWdu ZWQgaW50IG51bV9jbWRidWZzOworCisJc3RydWN0IGRybV90ZWdyYV9wdXNoYnVmX3ByaXZhdGUg KnB1c2hidWY7CisJZHJtTU1MaXN0SGVhZCBwdXNoYnVmczsKK307CisKK2ludCBkcm1fdGVncmFf am9iX2FkZF9yZWxvYyhzdHJ1Y3QgZHJtX3RlZ3JhX2pvYiAqam9iLAorCQkJICAgIGNvbnN0IHN0 cnVjdCBkcm1fdGVncmFfcmVsb2MgKnJlbG9jKTsKK2ludCBkcm1fdGVncmFfam9iX2FkZF9jbWRi dWYoc3RydWN0IGRybV90ZWdyYV9qb2IgKmpvYiwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGRybV90 ZWdyYV9jbWRidWYgKmNtZGJ1Zik7CisKICNlbmRpZiAvKiBfX0RSTV9URUdSQV9QUklWQVRFX0hf XyAqLwpkaWZmIC0tZ2l0IGEvdGVncmEvcHVzaGJ1Zi5jIGIvdGVncmEvcHVzaGJ1Zi5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTc4ZDVjZDU3NTQxCi0tLSAvZGV2 L251bGwKKysrIGIvdGVncmEvcHVzaGJ1Zi5jCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogQ29w eXJpZ2h0IMKpIDIwMTIsIDIwMTMgVGhpZXJyeSBSZWRpbmcKKyAqIENvcHlyaWdodCDCqSAyMDEz IEVyaWsgRmF5ZS1MdW5kCisgKiBDb3B5cmlnaHQgwqkgMjAxNCBOVklESUEgQ29ycG9yYXRpb24K KyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgor ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQg SE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElO IFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSAi Y29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGli Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJwcml2YXRlLmgiCisKKyNkZWZp bmUgSE9TVDFYX09QQ09ERV9OT05JTkNSKG9mZnNldCwgY291bnQpIFwKKwkoKDB4MiA8PCAyOCkg fCAoKChvZmZzZXQpICYgMHhmZmYpIDw8IDE2KSB8ICgoY291bnQpICYgMHhmZmZmKSkKKworaW50 IGRybV90ZWdyYV9wdXNoYnVmX3F1ZXVlKHN0cnVjdCBkcm1fdGVncmFfcHVzaGJ1Zl9wcml2YXRl ICpwdXNoYnVmKQoreworCXN0cnVjdCBkcm1fdGVncmFfY21kYnVmIGNtZGJ1ZjsKKwlpbnQgZXJy OworCisJaWYgKCFwdXNoYnVmIHx8ICFwdXNoYnVmLT5ibykKKwkJcmV0dXJuIDA7CisKKwkvKiB1 bm1hcCBidWZmZXIgb2JqZWN0IHNpbmNlIGl0IHdvbid0IGJlIGFjY2Vzc2VkIGFueW1vcmUgKi8K Kwlkcm1fdGVncmFfYm9fdW5tYXAocHVzaGJ1Zi0+Ym8pOworCisJLyogYWRkIGJ1ZmZlciBvYmpl Y3QgYXMgY29tbWFuZCBidWZmZXJzIGZvciB0aGlzIGpvYiAqLworCW1lbXNldCgmY21kYnVmLCAw LCBzaXplb2YoY21kYnVmKSk7CisJY21kYnVmLndvcmRzID0gcHVzaGJ1Zi0+YmFzZS5wdHIgLSBw dXNoYnVmLT5zdGFydDsKKwljbWRidWYuaGFuZGxlID0gcHVzaGJ1Zi0+Ym8tPmhhbmRsZTsKKwlj bWRidWYub2Zmc2V0ID0gMDsKKworCWVyciA9IGRybV90ZWdyYV9qb2JfYWRkX2NtZGJ1ZihwdXNo YnVmLT5qb2IsICZjbWRidWYpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworZHJtX3RlZ3JhX3B1c2hi dWZfZ2V0X29mZnNldChzdHJ1Y3QgZHJtX3RlZ3JhX3B1c2hidWYgKnB1c2hidWYpCit7CisJc3Ry dWN0IGRybV90ZWdyYV9wdXNoYnVmX3ByaXZhdGUgKnByaXYgPSBwdXNoYnVmX3ByaXYocHVzaGJ1 Zik7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpcHVzaGJ1Zi0+cHRyIC0gKHVuc2lnbmVkIGxv bmcpcHJpdi0+c3RhcnQ7Cit9CisKK2RybV9wdWJsaWMKK2ludCBkcm1fdGVncmFfcHVzaGJ1Zl9u ZXcoc3RydWN0IGRybV90ZWdyYV9wdXNoYnVmICoqcHVzaGJ1ZnAsCisJCQkgIHN0cnVjdCBkcm1f dGVncmFfam9iICpqb2IpCit7CisJc3RydWN0IGRybV90ZWdyYV9wdXNoYnVmX3ByaXZhdGUgKnB1 c2hidWY7CisJdm9pZCAqcHRyOworCWludCBlcnI7CisKKwlwdXNoYnVmID0gY2FsbG9jKDEsIHNp emVvZigqcHVzaGJ1ZikpOworCWlmICghcHVzaGJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlE Uk1JTklUTElTVEhFQUQoJnB1c2hidWYtPmxpc3QpOworCURSTUlOSVRMSVNUSEVBRCgmcHVzaGJ1 Zi0+Ym9zKTsKKwlwdXNoYnVmLT5qb2IgPSBqb2I7CisKKwkqcHVzaGJ1ZnAgPSAmcHVzaGJ1Zi0+ YmFzZTsKKworCURSTUxJU1RBREQoJnB1c2hidWYtPmxpc3QsICZqb2ItPnB1c2hidWZzKTsKKwlq b2ItPnB1c2hidWYgPSBwdXNoYnVmOworCisJcmV0dXJuIDA7Cit9CisKK2RybV9wdWJsaWMKK2lu dCBkcm1fdGVncmFfcHVzaGJ1Zl9mcmVlKHN0cnVjdCBkcm1fdGVncmFfcHVzaGJ1ZiAqcHVzaGJ1 ZikKK3sKKwlzdHJ1Y3QgZHJtX3RlZ3JhX3B1c2hidWZfcHJpdmF0ZSAqcHJpdiA9IHB1c2hidWZf cHJpdihwdXNoYnVmKTsKKwlzdHJ1Y3QgZHJtX3RlZ3JhX2JvICpibywgKnRtcDsKKworCWlmICgh cHVzaGJ1ZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkcm1fdGVncmFfYm9fdW5tYXAocHJpdi0+ Ym8pOworCisJRFJNTElTVEZPUkVBQ0hFTlRSWVNBRkUoYm8sIHRtcCwgJnByaXYtPmJvcywgbGlz dCkKKwkJZHJtX3RlZ3JhX2JvX3B1dChwcml2LT5ibyk7CisKKwlEUk1MSVNUREVMKCZwcml2LT5s aXN0KTsKKwlmcmVlKHByaXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZHJtX3RlZ3Jh X3B1c2hidWZfcHJlcGFyZSgpIC0gcHJlcGFyZSBwdXNoIGJ1ZmZlciBmb3IgYSBzZXJpZXMgb2Yg cHVzaGVzCisgKiBAcHVzaGJ1ZjogcHVzaCBidWZmZXIKKyAqIEB3b3JkczogbWF4aW11bSBudW1i ZXIgb2Ygd29yZHMgaW4gc2VyaWVzIG9mIHB1c2hlcyB0byBmb2xsb3cKKyAqLworZHJtX3B1Ymxp YworaW50IGRybV90ZWdyYV9wdXNoYnVmX3ByZXBhcmUoc3RydWN0IGRybV90ZWdyYV9wdXNoYnVm ICpwdXNoYnVmLAorCQkJICAgICAgdW5zaWduZWQgaW50IHdvcmRzKQoreworCXN0cnVjdCBkcm1f dGVncmFfcHVzaGJ1Zl9wcml2YXRlICpwcml2ID0gcHVzaGJ1Zl9wcml2KHB1c2hidWYpOworCXN0 cnVjdCBkcm1fdGVncmFfY2hhbm5lbCAqY2hhbm5lbCA9IHByaXYtPmpvYi0+Y2hhbm5lbDsKKwlz dHJ1Y3QgZHJtX3RlZ3JhX2JvICpibzsKKwl2b2lkICpwdHI7CisJaW50IGVycjsKKworCWlmIChw cml2LT5ibyAmJiAocHVzaGJ1Zi0+cHRyICsgd29yZHMgPCBwcml2LT5lbmQpKQorCQlyZXR1cm4g MDsKKworCS8qCisJICogQWxpZ24gdG8gZnVsbCBwYWdlcywgc2luY2UgYnVmZmVyIG9iamVjdCBh bGxvY2F0aW9ucyBhcmUgcGFnZQorCSAqIGdyYW51bGFyIGFueXdheS4KKwkgKi8KKwl3b3JkcyA9 IGFsaWduKHdvcmRzLCAxMDI0KTsKKworCWVyciA9IGRybV90ZWdyYV9ib19uZXcoJmJvLCBjaGFu bmVsLT5kcm0sIDAsIHdvcmRzICogc2l6ZW9mKHVpbnQzMl90KSk7CisJaWYgKGVyciA8IDApCisJ CXJldHVybiBlcnI7CisKKwllcnIgPSBkcm1fdGVncmFfYm9fbWFwKGJvLCAmcHRyKTsKKwlpZiAo ZXJyIDwgMCkgeworCQlkcm1fdGVncmFfYm9fcHV0KGJvKTsKKwkJcmV0dXJuIGVycjsKKwl9CisK KwkvKiBxdWV1ZSBjdXJyZW50IGNvbW1hbmQgc3RyZWFtIGJ1ZmZlciBmb3Igc3VibWlzc2lvbiAq LworCWVyciA9IGRybV90ZWdyYV9wdXNoYnVmX3F1ZXVlKHByaXYpOworCWlmIChlcnIgPCAwKSB7 CisJCWRybV90ZWdyYV9ib191bm1hcChibyk7CisJCWRybV90ZWdyYV9ib19wdXQoYm8pOworCQly ZXR1cm4gZXJyOworCX0KKworCURSTUxJU1RBREQoJmJvLT5saXN0LCAmcHJpdi0+Ym9zKTsKKwor CXByaXYtPnN0YXJ0ID0gcHJpdi0+YmFzZS5wdHIgPSBwdHI7CisJcHJpdi0+ZW5kID0gcHJpdi0+ c3RhcnQgKyBiby0+c2l6ZTsKKwlwcml2LT5ibyA9IGJvOworCisJcmV0dXJuIDA7Cit9CisKK2Ry bV9wdWJsaWMKK2ludCBkcm1fdGVncmFfcHVzaGJ1Zl9yZWxvY2F0ZShzdHJ1Y3QgZHJtX3RlZ3Jh X3B1c2hidWYgKnB1c2hidWYsCisJCQkgICAgICAgc3RydWN0IGRybV90ZWdyYV9ibyAqdGFyZ2V0 LAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJICAgICAgIHVuc2lnbmVkIGxv bmcgc2hpZnQpCit7CisJc3RydWN0IGRybV90ZWdyYV9wdXNoYnVmX3ByaXZhdGUgKnByaXYgPSBw dXNoYnVmX3ByaXYocHVzaGJ1Zik7CisJc3RydWN0IGRybV90ZWdyYV9yZWxvYyByZWxvYzsKKwlp bnQgZXJyOworCisJbWVtc2V0KCZyZWxvYywgMCwgc2l6ZW9mKHJlbG9jKSk7CisJcmVsb2MuY21k YnVmLmhhbmRsZSA9IHByaXYtPmJvLT5oYW5kbGU7CisJcmVsb2MuY21kYnVmLm9mZnNldCA9IGRy bV90ZWdyYV9wdXNoYnVmX2dldF9vZmZzZXQocHVzaGJ1Zik7CisJcmVsb2MudGFyZ2V0LmhhbmRs ZSA9IHRhcmdldC0+aGFuZGxlOworCXJlbG9jLnRhcmdldC5vZmZzZXQgPSBvZmZzZXQ7CisJcmVs b2Muc2hpZnQgPSBzaGlmdDsKKworCWVyciA9IGRybV90ZWdyYV9qb2JfYWRkX3JlbG9jKHByaXYt PmpvYiwgJnJlbG9jKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCSpwdXNoYnVm LT5wdHIrKyA9IDB4ZGVhZGJlZWY7CisKKwlyZXR1cm4gMDsKK30KKworZHJtX3B1YmxpYworaW50 IGRybV90ZWdyYV9wdXNoYnVmX3N5bmMoc3RydWN0IGRybV90ZWdyYV9wdXNoYnVmICpwdXNoYnVm LAorCQkJICAgZW51bSBkcm1fdGVncmFfc3luY3B0X2NvbmQgY29uZCkKK3sKKwlzdHJ1Y3QgZHJt X3RlZ3JhX3B1c2hidWZfcHJpdmF0ZSAqcHJpdiA9IHB1c2hidWZfcHJpdihwdXNoYnVmKTsKKwor CWlmIChjb25kID49IERSTV9URUdSQV9TWU5DUFRfQ09ORF9NQVgpCisJCXJldHVybiAtRUlOVkFM OworCisJKnB1c2hidWYtPnB0cisrID0gSE9TVDFYX09QQ09ERV9OT05JTkNSKDB4MCwgMHgxKTsK KwkqcHVzaGJ1Zi0+cHRyKysgPSBjb25kIDw8IDggfCBwcml2LT5qb2ItPnN5bmNwdDsKKwlwcml2 LT5qb2ItPmluY3JlbWVudHMrKzsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVncmEv dGVncmEuYyBiL3RlZ3JhL3RlZ3JhLmMKaW5kZXggYmY2ZDAzNTQ1M2Q1Li4xZjdiOWU3MzQ1YjYg MTAwNjQ0Ci0tLSBhL3RlZ3JhL3RlZ3JhLmMKKysrIGIvdGVncmEvdGVncmEuYwpAQCAtNTYsNiAr NTYsNyBAQCBzdGF0aWMgdm9pZCBkcm1fdGVncmFfYm9fZnJlZShzdHJ1Y3QgZHJtX3RlZ3JhX2Jv ICpibykKIAogCWRybUlvY3RsKGRybS0+ZmQsIERSTV9JT0NUTF9HRU1fQ0xPU0UsICZhcmdzKTsK IAorCURSTUxJU1RERUwoJmJvLT5saXN0KTsKIAlmcmVlKGJvKTsKIH0KIApAQCAtMTI3LDYgKzEy OCw3IEBAIGludCBkcm1fdGVncmFfYm9fbmV3KHN0cnVjdCBkcm1fdGVncmFfYm8gKipib3AsIHN0 cnVjdCBkcm1fdGVncmEgKmRybSwKIAlpZiAoIWJvKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCURS TUlOSVRMSVNUSEVBRCgmYm8tPmxpc3QpOwogCWF0b21pY19zZXQoJmJvLT5yZWYsIDEpOwogCWJv LT5mbGFncyA9IGZsYWdzOwogCWJvLT5zaXplID0gc2l6ZTsKZGlmZiAtLWdpdCBhL3RlZ3JhL3Rl Z3JhLmggYi90ZWdyYS90ZWdyYS5oCmluZGV4IDA3MzFjYjNiZDRkYy4uNGNmM2I0OWEzZTNlIDEw MDY0NAotLS0gYS90ZWdyYS90ZWdyYS5oCisrKyBiL3RlZ3JhL3RlZ3JhLmgKQEAgLTI4LDYgKzI4 LDEzIEBACiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKKyNpbmNs dWRlIDx0ZWdyYV9kcm0uaD4KKworZW51bSBkcm1fdGVncmFfY2xhc3MgeworCURSTV9URUdSQV9H UjJELAorCURSTV9URUdSQV9HUjNELAorfTsKKwogc3RydWN0IGRybV90ZWdyYV9ibzsKIHN0cnVj dCBkcm1fdGVncmE7CiAKQEAgLTQ0LDQgKzUxLDQ5IEBAIGludCBkcm1fdGVncmFfYm9fZ2V0X2hh bmRsZShzdHJ1Y3QgZHJtX3RlZ3JhX2JvICpibywgdWludDMyX3QgKmhhbmRsZSk7CiBpbnQgZHJt X3RlZ3JhX2JvX21hcChzdHJ1Y3QgZHJtX3RlZ3JhX2JvICpibywgdm9pZCAqKnB0cik7CiBpbnQg ZHJtX3RlZ3JhX2JvX3VubWFwKHN0cnVjdCBkcm1fdGVncmFfYm8gKmJvKTsKIAorc3RydWN0IGRy bV90ZWdyYV9jaGFubmVsOworc3RydWN0IGRybV90ZWdyYV9qb2I7CisKK3N0cnVjdCBkcm1fdGVn cmFfcHVzaGJ1ZiB7CisJdWludDMyX3QgKnB0cjsKK307CisKK3N0cnVjdCBkcm1fdGVncmFfZmVu Y2U7CisKK2VudW0gZHJtX3RlZ3JhX3N5bmNwdF9jb25kIHsKKwlEUk1fVEVHUkFfU1lOQ1BUX0NP TkRfSU1NRURJQVRFLAorCURSTV9URUdSQV9TWU5DUFRfQ09ORF9PUF9ET05FLAorCURSTV9URUdS QV9TWU5DUFRfQ09ORF9SRF9ET05FLAorCURSTV9URUdSQV9TWU5DUFRfQ09ORF9XUl9TQUZFLAor CURSTV9URUdSQV9TWU5DUFRfQ09ORF9NQVgsCit9OworCitpbnQgZHJtX3RlZ3JhX2NoYW5uZWxf b3BlbihzdHJ1Y3QgZHJtX3RlZ3JhX2NoYW5uZWwgKipjaGFubmVscCwKKwkJCSAgIHN0cnVjdCBk cm1fdGVncmEgKmRybSwKKwkJCSAgIGVudW0gZHJtX3RlZ3JhX2NsYXNzIGNsaWVudCk7CitpbnQg ZHJtX3RlZ3JhX2NoYW5uZWxfY2xvc2Uoc3RydWN0IGRybV90ZWdyYV9jaGFubmVsICpjaGFubmVs KTsKKworaW50IGRybV90ZWdyYV9qb2JfbmV3KHN0cnVjdCBkcm1fdGVncmFfam9iICoqam9icCwK KwkJICAgICAgc3RydWN0IGRybV90ZWdyYV9jaGFubmVsICpjaGFubmVsKTsKK2ludCBkcm1fdGVn cmFfam9iX2ZyZWUoc3RydWN0IGRybV90ZWdyYV9qb2IgKmpvYik7CitpbnQgZHJtX3RlZ3JhX2pv Yl9zdWJtaXQoc3RydWN0IGRybV90ZWdyYV9qb2IgKmpvYiwKKwkJCSBzdHJ1Y3QgZHJtX3RlZ3Jh X2ZlbmNlICoqZmVuY2VwKTsKKworaW50IGRybV90ZWdyYV9wdXNoYnVmX25ldyhzdHJ1Y3QgZHJt X3RlZ3JhX3B1c2hidWYgKipwdXNoYnVmcCwKKwkJCSAgc3RydWN0IGRybV90ZWdyYV9qb2IgKmpv Yik7CitpbnQgZHJtX3RlZ3JhX3B1c2hidWZfZnJlZShzdHJ1Y3QgZHJtX3RlZ3JhX3B1c2hidWYg KnB1c2hidWYpOworaW50IGRybV90ZWdyYV9wdXNoYnVmX3ByZXBhcmUoc3RydWN0IGRybV90ZWdy YV9wdXNoYnVmICpwdXNoYnVmLAorCQkJICAgICAgdW5zaWduZWQgaW50IHdvcmRzKTsKK2ludCBk cm1fdGVncmFfcHVzaGJ1Zl9yZWxvY2F0ZShzdHJ1Y3QgZHJtX3RlZ3JhX3B1c2hidWYgKnB1c2hi dWYsCisJCQkgICAgICAgc3RydWN0IGRybV90ZWdyYV9ibyAqdGFyZ2V0LAorCQkJICAgICAgIHVu c2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2hpZnQpOworaW50 IGRybV90ZWdyYV9wdXNoYnVmX3N5bmMoc3RydWN0IGRybV90ZWdyYV9wdXNoYnVmICpwdXNoYnVm LAorCQkJICAgZW51bSBkcm1fdGVncmFfc3luY3B0X2NvbmQgY29uZCk7CisKK2ludCBkcm1fdGVn cmFfZmVuY2Vfd2FpdF90aW1lb3V0KHN0cnVjdCBkcm1fdGVncmFfZmVuY2UgKmZlbmNlLAorCQkJ CSB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOworaW50IGRybV90ZWdyYV9mZW5jZV93YWl0KHN0cnVj dCBkcm1fdGVncmFfZmVuY2UgKmZlbmNlKTsKK3ZvaWQgZHJtX3RlZ3JhX2ZlbmNlX2ZyZWUoc3Ry dWN0IGRybV90ZWdyYV9mZW5jZSAqZmVuY2UpOworCiAjZW5kaWYgLyogX19EUk1fVEVHUkFfSF9f ICovCi0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2 ZWwK