From mboxrd@z Thu Jan 1 00:00:00 1970 From: swati.dhingra@intel.com Subject: [RFC 1/3] fs: Introduce drmfs pseudo filesystem interfaces Date: Thu, 1 Dec 2016 13:44:15 +0530 Message-ID: <1480580057-27548-2-git-send-email-swati.dhingra@intel.com> References: <1480580057-27548-1-git-send-email-swati.dhingra@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 779446E6FC for ; Thu, 1 Dec 2016 08:05:50 +0000 (UTC) In-Reply-To: <1480580057-27548-1-git-send-email-swati.dhingra@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Sourab Gupta , Swati Dhingra List-Id: intel-gfx@lists.freedesktop.org RnJvbTogU3dhdGkgRGhpbmdyYSA8c3dhdGkuZGhpbmdyYUBpbnRlbC5jb20+CgpUaGUgcGF0Y2gg aW50cm9kdWNlcyBhIG5ldyBwc2V1ZG8gZmlsZXN5c3RlbSB0eXBlLCBuYW1lZCAnZHJtZnMnIHdo aWNoIGlzCmludGVuZGVkIHRvIGhvdXNlIHRoZSBmaWxlcyBmb3IgdGhlIGRhdGEgZ2VuZXJhdGVk IGJ5IGRybSBzdWJzeXN0ZW0gdGhhdApjYW5ub3QgYmUgYWNjb21tb2RhdGVkIGJ5IGFueSBvZiB0 aGUgZXhpc3RpbmcgZmlsZXN5c3RlbXMuClRoZSBmaWxlc3lzdGVtIGlzIG1vZGVsbGVkIG9uIHRo ZSBsaW5lcyBvZiBleGlzdGluZyBwc2V1ZG8tZmlsZXN5c3RlbXMgc3VjaAphcyBkZWJ1Z2ZzL3Ry YWNlZnMsIGFuZCBib3Jyb3dzIGlkZWFzIGZyb20gdGhlaXIgaW1wbGVtZW50YXRpb24uClRoaXMg ZmlsZXN5c3RlbSB3aWxsIGJlIGFwcGVhcmluZyBhdCBzeXMva2VybmVsL2RybS4KCkEgbmV3IGNv bmZpZyAnQ09ORklHX0RSTUZTJyBpcyBpbnRyb2R1Y2VkIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBm aWxlc3lzdGVtLAp3aGljaCBpcyBkZXBlbmRlbnQgb24gQ09ORklHX0RSTS4KVGhlIGZpbGVzeXN0 ZW0gd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCBzdGFuZGFsb25lIGR1cmluZyBrZXJuZWwgaW5pdCB0 aW1lLAppbnN0ZWFkIGl0IGlzIGludGVuZGVkIHRvIGJlIGluaXRpYWxpemVkL3JlZ2lzdGVyZWQg ZHVyaW5nIGRybSBpbml0aWFsaXphdGlvbi4KClRoZSBpbnRlbnQgZm9yIGludHJvZHVjdGlvbiBv ZiB0aGUgZmlsZXN5c3RlbSBpcyB0byBhY3QgYXMgYSBsb2NhdGlvbiB0byBob2xkCnZhcmlvdXMg a2luZHMgb2YgZGF0YSBvdXRwdXQgZnJvbSBMaW51eCBEUk0gc3Vic3lzdGVtcywgd2hpY2ggY2Fu J3QgcmVhbGx5IGZpdAphbnl3aGVyZSBlbHNlIGludG8gdGhlIGV4aXN0aW5nIGZpbGVzeXN0ZW1z IHN1Y2ggYXMgZGVidWdmcy9zeXNmcyBldGMuIEFsbCB0aGVzZQpmaWxlc3lzdGVtcyBoYXZlIHRo ZWlyIG93biBjb25zdHJhaW50cyBhbmQgYXJlIGludGVuZGVkIHRvIG91dHB1dCBhIHBhcnRpY3Vs YXIKdHlwZSBvZiBkYXRhIHN1Y2ggYXMgYXR0cmlidXRlcyBhbmQgc21hbGwgZGVidWcgcGFyYW1l dGVyIGRhdGEuIER1ZSB0byB0aGVzZQpjb25zdHJhaW50cywgdGhlcmUgaXMgYSBuZWVkIGZvciBh IG5ldyBwc2V1ZG8gZmlsZXN5dGVtLCBjdXN0b21pemFibGUgdG8gRFJNCnNwZWNpZmljIHJlcXVp cmVtZW50cyBhbmQgY2F0ZXJpbmcgdG8gdGhlIG5lZWRzIHRvIERSTSBzdWJzeXN0ZW0gY29tcG9u ZW50cwoKU2lnbmVkLW9mZi1ieTogU291cmFiIEd1cHRhIDxzb3VyYWIuZ3VwdGFAaW50ZWwuY29t PgpTaWduZWQtb2ZmLWJ5OiBTd2F0aSBEaGluZ3JhIDxzd2F0aS5kaGluZ3JhQGludGVsLmNvbT4K LS0tCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jICB8ICAgMSArCiBmcy9LY29uZmlnICAgICAg ICAgICAgICAgICB8ICAgOSArCiBmcy9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgMSArCiBm cy9kcm1mcy9NYWtlZmlsZSAgICAgICAgICB8ICAgMyArCiBmcy9kcm1mcy9pbm9kZS5jICAgICAg ICAgICB8IDU2MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IGluY2x1ZGUvbGludXgvZHJtZnMuaCAgICAgIHwgIDU2ICsrKysrCiBpbmNsdWRlL3VhcGkvbGlu dXgvbWFnaWMuaCB8ICAgMyArCiA3IGZpbGVzIGNoYW5nZWQsIDYzNCBpbnNlcnRpb25zKCspCiBj cmVhdGUgbW9kZSAxMDA2NDQgZnMvZHJtZnMvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBm cy9kcm1mcy9pbm9kZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9kcm1mcy5o CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fZHJ2LmMKaW5kZXggNmRiYjk4Ni4uODRmY2ZjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2RybV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCkBAIC0yNyw2 ICsyNyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxs aW51eC9kcm1mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KZGlmZiAtLWdpdCBhL2ZzL0tj b25maWcgYi9mcy9LY29uZmlnCmluZGV4IDRiZDAzYTIuLjdkMGFjMjAgMTAwNjQ0Ci0tLSBhL2Zz L0tjb25maWcKKysrIGIvZnMvS2NvbmZpZwpAQCAtMjAwLDYgKzIwMCwxNSBAQCBjb25maWcgSFVH RVRMQkZTCiBjb25maWcgSFVHRVRMQl9QQUdFCiAJZGVmX2Jvb2wgSFVHRVRMQkZTCiAKK2NvbmZp ZyBEUk1GUworCWJvb2wgIkRybWZzIGZpbGUgc3lzdGVtIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBE Uk0KKwloZWxwCisJICBEcm1mcyBpcyBhIHBzZXVkbyBmaWxlIHN5c3RlbSBmb3IgZHJtIHN1YnN5 c3RlbSBvdXRwdXQgZGF0YS4KKworCSAgZHJtZnMgaXMgYSBmaWxlc3lzdGVtIHRvIGhvbGQgbWlz Y2VsbGFuZW91cyBvdXRwdXQgZGF0YSBmcm9tIGRybQorCSAgc3Vic3lzdGVtcy4KKwogY29uZmln IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0UKIAlib29sCiAKZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxl IGIvZnMvTWFrZWZpbGUKaW5kZXggZWQyYjYzMi4uYjM0YTk2ZSAxMDA2NDQKLS0tIGEvZnMvTWFr ZWZpbGUKKysrIGIvZnMvTWFrZWZpbGUKQEAgLTEyMCw2ICsxMjAsNyBAQCBvYmotJChDT05GSUdf QkVGU19GUykJCSs9IGJlZnMvCiBvYmotJChDT05GSUdfSE9TVEZTKQkJKz0gaG9zdGZzLwogb2Jq LSQoQ09ORklHX0NBQ0hFRklMRVMpCSs9IGNhY2hlZmlsZXMvCiBvYmotJChDT05GSUdfREVCVUdf RlMpCQkrPSBkZWJ1Z2ZzLworb2JqLSQoQ09ORklHX0RSTUZTKQkJKz0gZHJtZnMvCiBvYmotJChD T05GSUdfVFJBQ0lORykJCSs9IHRyYWNlZnMvCiBvYmotJChDT05GSUdfT0NGUzJfRlMpCQkrPSBv Y2ZzMi8KIG9iai0kKENPTkZJR19CVFJGU19GUykJCSs9IGJ0cmZzLwpkaWZmIC0tZ2l0IGEvZnMv ZHJtZnMvTWFrZWZpbGUgYi9mcy9kcm1mcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5hYzg3ZTQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2RybWZzL01ha2Vm aWxlCkBAIC0wLDAgKzEsMyBAQAorZHJtZnMtb2Jqcwk6PSBpbm9kZS5vCisKK29iai0kKENPTkZJ R19EUk1GUykJKz0gZHJtZnMubwpkaWZmIC0tZ2l0IGEvZnMvZHJtZnMvaW5vZGUuYyBiL2ZzL2Ry bWZzL2lub2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIyMDcwNQot LS0gL2Rldi9udWxsCisrKyBiL2ZzL2RybWZzL2lub2RlLmMKQEAgLTAsMCArMSw1NjEgQEAKKy8q CisgKiBDb3B5cmlnaHQgwqkgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM CisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIK KyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICoJU3dhdGkg RGhpbmdyYSA8c3dhdGkuZGhpbmdyYUBpbnRlbC5jb20+CisgKglTb3VyYWIgR3VwdGEgPHNvdXJh Yi5ndXB0YUBpbnRlbC5jb20+CisgKglBa2FzaCBHb2VsIDxha2FzaC5nb2VsQGludGVsLmNvbT4K KyAqLworCisvKgorICogZHJtZnMgaXMgdGhlIGZpbGVzeXN0ZW0gdXNlZCBmb3Igb3V0cHV0IG9m IGRybSBzdWJzeXN0ZW0gZGF0YQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNp bmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8 bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGlu dXgvZHJtZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPgorI2luY2x1ZGUgPGxpbnV4 L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CisjaW5jbHVkZSA8bGludXgv bWFnaWMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNkZWZpbmUgRFJNRlNfREVGQVVM VF9NT0RFCTA3MDAKKworc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqZHJtZnNfbW91bnQ7CitzdGF0 aWMgaW50IGRybWZzX21vdW50X2NvdW50Oworc3RhdGljIGJvb2wgZHJtZnNfcmVnaXN0ZXJlZDsK Kworc3RhdGljIHNzaXplX3QgZGVmYXVsdF9yZWFkX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGNo YXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRlZmF1bHRfd3JpdGVfZmlsZShzdHJ1Y3QgZmls ZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZf dCAqcHBvcykKK3sKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmls ZV9vcGVyYXRpb25zIGRybWZzX2RlZmF1bHRfZmlsZV9vcGVyYXRpb25zID0geworCS5yZWFkID0J CWRlZmF1bHRfcmVhZF9maWxlLAorCS53cml0ZSA9CWRlZmF1bHRfd3JpdGVfZmlsZSwKKwkub3Bl biA9CQlzaW1wbGVfb3BlbiwKKwkubGxzZWVrID0Jbm9vcF9sbHNlZWssCit9OworCitzdGF0aWMg c3RydWN0IGlub2RlICpkcm1mc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sK KwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3X2lub2RlKHNiKTsKKworCWlmIChpbm9kZSkgewor CQlpbm9kZS0+aV9pbm8gPSBnZXRfbmV4dF9pbm8oKTsKKwkJaW5vZGUtPmlfYXRpbWUgPSBpbm9k ZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCX0KKwlyZXR1cm4g aW5vZGU7Cit9CisKK3N0cnVjdCBkcm1mc19tb3VudF9vcHRzIHsKKwlrdWlkX3QgdWlkOworCWtn aWRfdCBnaWQ7CisJdW1vZGVfdCBtb2RlOworfTsKKworZW51bSB7CisJT3B0X3VpZCwKKwlPcHRf Z2lkLAorCU9wdF9tb2RlLAorCU9wdF9lcnIKK307CisKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJs ZV90IHRva2VucyA9IHsKKwl7T3B0X3VpZCwgInVpZD0ldSJ9LAorCXtPcHRfZ2lkLCAiZ2lkPSV1 In0sCisJe09wdF9tb2RlLCAibW9kZT0lbyJ9LAorCXtPcHRfZXJyLCBOVUxMfQorfTsKKworc3Ry dWN0IGRybWZzX2ZzX2luZm8geworCXN0cnVjdCBkcm1mc19tb3VudF9vcHRzIG1vdW50X29wdHM7 Cit9OworCitzdGF0aWMgaW50IGRybWZzX3BhcnNlX29wdGlvbnMoY2hhciAqZGF0YSwgc3RydWN0 IGRybWZzX21vdW50X29wdHMgKm9wdHMpCit7CisJc3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FS R1NdOworCWludCBvcHRpb247CisJaW50IHRva2VuOworCWt1aWRfdCB1aWQ7CisJa2dpZF90IGdp ZDsKKwljaGFyICpwOworCisJb3B0cy0+bW9kZSA9IERSTUZTX0RFRkFVTFRfTU9ERTsKKworCXdo aWxlICgocCA9IHN0cnNlcCgmZGF0YSwgIiwiKSkgIT0gTlVMTCkgeworCQlpZiAoISpwKQorCQkJ Y29udGludWU7CisKKwkJdG9rZW4gPSBtYXRjaF90b2tlbihwLCB0b2tlbnMsIGFyZ3MpOworCQlz d2l0Y2ggKHRva2VuKSB7CisJCWNhc2UgT3B0X3VpZDoKKwkJCWlmIChtYXRjaF9pbnQoJmFyZ3Nb MF0sICZvcHRpb24pKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJdWlkID0gbWFrZV9rdWlkKGN1 cnJlbnRfdXNlcl9ucygpLCBvcHRpb24pOworCQkJaWYgKCF1aWRfdmFsaWQodWlkKSkKKwkJCQly ZXR1cm4gLUVJTlZBTDsKKwkJCW9wdHMtPnVpZCA9IHVpZDsKKwkJCWJyZWFrOworCQljYXNlIE9w dF9naWQ6CisJCQlpZiAobWF0Y2hfaW50KCZhcmdzWzBdLCAmb3B0aW9uKSkKKwkJCQlyZXR1cm4g LUVJTlZBTDsKKwkJCWdpZCA9IG1ha2Vfa2dpZChjdXJyZW50X3VzZXJfbnMoKSwgb3B0aW9uKTsK KwkJCWlmICghZ2lkX3ZhbGlkKGdpZCkpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlvcHRzLT5n aWQgPSBnaWQ7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfbW9kZToKKwkJCWlmIChtYXRjaF9vY3Rh bCgmYXJnc1swXSwgJm9wdGlvbikpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlvcHRzLT5tb2Rl ID0gb3B0aW9uICYgU19JQUxMVUdPOworCQkJYnJlYWs7CisJCS8qCisJCSAqIFdlIG1pZ2h0IGxp a2UgdG8gcmVwb3J0IGJhZCBtb3VudCBvcHRpb25zIGhlcmUKKwkJICovCisJCX0KKwl9CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcm1mc19hcHBseV9vcHRpb25zKHN0cnVjdCBzdXBl cl9ibG9jayAqc2IpCit7CisJc3RydWN0IGRybWZzX2ZzX2luZm8gKmZzaSA9IHNiLT5zX2ZzX2lu Zm87CisJc3RydWN0IGlub2RlICppbm9kZSA9IHNiLT5zX3Jvb3QtPmRfaW5vZGU7CisJc3RydWN0 IGRybWZzX21vdW50X29wdHMgKm9wdHMgPSAmZnNpLT5tb3VudF9vcHRzOworCisJaW5vZGUtPmlf bW9kZSAmPSB+U19JQUxMVUdPOworCWlub2RlLT5pX21vZGUgfD0gb3B0cy0+bW9kZTsKKworCWlu b2RlLT5pX3VpZCA9IG9wdHMtPnVpZDsKKwlpbm9kZS0+aV9naWQgPSBvcHRzLT5naWQ7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcm1mc19yZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9j ayAqc2IsIGludCAqZmxhZ3MsIGNoYXIgKmRhdGEpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgZHJt ZnNfZnNfaW5mbyAqZnNpID0gc2ItPnNfZnNfaW5mbzsKKworCXN5bmNfZmlsZXN5c3RlbShzYik7 CisJZXJyID0gZHJtZnNfcGFyc2Vfb3B0aW9ucyhkYXRhLCAmZnNpLT5tb3VudF9vcHRzKTsKKwlp ZiAoZXJyKQorCQlnb3RvIGZhaWw7CisKKwlkcm1mc19hcHBseV9vcHRpb25zKHNiKTsKKworZmFp bDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGRybWZzX3Nob3dfb3B0aW9ucyhzdHJ1 Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpCit7CisJc3RydWN0IGRybWZzX2Zz X2luZm8gKmZzaSA9IHJvb3QtPmRfc2ItPnNfZnNfaW5mbzsKKwlzdHJ1Y3QgZHJtZnNfbW91bnRf b3B0cyAqb3B0cyA9ICZmc2ktPm1vdW50X29wdHM7CisKKwlpZiAoIXVpZF9lcShvcHRzLT51aWQs IEdMT0JBTF9ST09UX1VJRCkpCisJCXNlcV9wcmludGYobSwgIix1aWQ9JXUiLAorCQkJICAgZnJv bV9rdWlkX211bmdlZCgmaW5pdF91c2VyX25zLCBvcHRzLT51aWQpKTsKKwlpZiAoIWdpZF9lcShv cHRzLT5naWQsIEdMT0JBTF9ST09UX0dJRCkpCisJCXNlcV9wcmludGYobSwgIixnaWQ9JXUiLAor CQkJICAgZnJvbV9rZ2lkX211bmdlZCgmaW5pdF91c2VyX25zLCBvcHRzLT5naWQpKTsKKwlpZiAo b3B0cy0+bW9kZSAhPSBEUk1GU19ERUZBVUxUX01PREUpCisJCXNlcV9wcmludGYobSwgIixtb2Rl PSVvIiwgb3B0cy0+bW9kZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBzdXBlcl9vcGVyYXRpb25zIGRybWZzX3N1cGVyX29wZXJhdGlvbnMgPSB7CisJLnN0YXRmcwkJ PSBzaW1wbGVfc3RhdGZzLAorCS5yZW1vdW50X2ZzCT0gZHJtZnNfcmVtb3VudCwKKwkuc2hvd19v cHRpb25zCT0gZHJtZnNfc2hvd19vcHRpb25zLAorfTsKKworc3RhdGljIGludCBkcm1fZmlsbF9z dXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQorewor CXN0YXRpYyBzdHJ1Y3QgdHJlZV9kZXNjciBkcm1fZmlsZXNbXSA9IHsgeyIifSB9OworCXN0cnVj dCBkcm1mc19mc19pbmZvICpmc2k7CisJaW50IGVycjsKKworCXNhdmVfbW91bnRfb3B0aW9ucyhz YiwgZGF0YSk7CisKKwlmc2kgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHJtZnNfZnNfaW5mbyks IEdGUF9LRVJORUwpOworCXNiLT5zX2ZzX2luZm8gPSBmc2k7CisJaWYgKCFmc2kpIHsKKwkJZXJy ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCWVyciA9IGRybWZzX3BhcnNlX29wdGlv bnMoZGF0YSwgJmZzaS0+bW91bnRfb3B0cyk7CisJaWYgKGVycikKKwkJZ290byBmYWlsOworCisJ ZXJyICA9ICBzaW1wbGVfZmlsbF9zdXBlcihzYiwgRFJNRlNfTUFHSUMsIGRybV9maWxlcyk7CisJ aWYgKGVycikKKwkJZ290byBmYWlsOworCisJc2ItPnNfb3AgPSAmZHJtZnNfc3VwZXJfb3BlcmF0 aW9uczsKKworCWRybWZzX2FwcGx5X29wdGlvbnMoc2IpOworCisJcmV0dXJuIDA7CisKK2ZhaWw6 CisJa2ZyZWUoZnNpKTsKKwlzYi0+c19mc19pbmZvID0gTlVMTDsKKwlyZXR1cm4gZXJyOworfQor CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZHJtX21vdW50KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBl ICpmc190eXBlLAorCQkJaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwKKwkJCXZvaWQg KmRhdGEpCit7CisJcmV0dXJuIG1vdW50X3NpbmdsZShmc190eXBlLCBmbGFncywgZGF0YSwgZHJt X2ZpbGxfc3VwZXIpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZHJtX2Zz X3R5cGUgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImRybWZzIiwKKwku bW91bnQgPQlkcm1fbW91bnQsCisJLmtpbGxfc2IgPQlraWxsX2xpdHRlcl9zdXBlciwKK307CitN T0RVTEVfQUxJQVNfRlMoImRybWZzIik7CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpzdGFydF9j cmVhdGluZyhjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQpCit7CisJc3Ry dWN0IGRlbnRyeSAqZGVudHJ5OworCWludCBlcnJvcjsKKworCXByX2RlYnVnKCJkcm1mczogY3Jl YXRpbmcgZmlsZSAnJXMnXG4iLCBuYW1lKTsKKworCWVycm9yID0gc2ltcGxlX3Bpbl9mcygmZHJt X2ZzX3R5cGUsICZkcm1mc19tb3VudCwKKwkJCSAgICAgICZkcm1mc19tb3VudF9jb3VudCk7CisJ aWYgKGVycm9yKQorCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CisKKwkvKiBJZiB0aGUgcGFyZW50 IGlzIG5vdCBzcGVjaWZpZWQsIHdlIGNyZWF0ZSBpdCBpbiB0aGUgcm9vdC4KKwkgKiBXZSBuZWVk IHRoZSByb290IGRlbnRyeSB0byBkbyB0aGlzLCB3aGljaCBpcyBpbiB0aGUgc3VwZXIKKwkgKiBi bG9jay4gQSBwb2ludGVyIHRvIHRoYXQgaXMgaW4gdGhlIHN0cnVjdCB2ZnNtb3VudCB0aGF0IHdl CisJICogaGF2ZSBhcm91bmQuCisJICovCisJaWYgKCFwYXJlbnQpCisJCXBhcmVudCA9IGRybWZz X21vdW50LT5tbnRfcm9vdDsKKworCWlub2RlX2xvY2socGFyZW50LT5kX2lub2RlKTsKKwlkZW50 cnkgPSBsb29rdXBfb25lX2xlbihuYW1lLCBwYXJlbnQsIHN0cmxlbihuYW1lKSk7CisJaWYgKCFJ U19FUlIoZGVudHJ5KSAmJiBkZW50cnktPmRfaW5vZGUpIHsKKwkJZHB1dChkZW50cnkpOworCQlk ZW50cnkgPSBFUlJfUFRSKC1FRVhJU1QpOworCX0KKworCWlmIChJU19FUlIoZGVudHJ5KSkgewor CQlpbm9kZV91bmxvY2socGFyZW50LT5kX2lub2RlKTsKKwkJc2ltcGxlX3JlbGVhc2VfZnMoJmRy bWZzX21vdW50LCAmZHJtZnNfbW91bnRfY291bnQpOworCX0KKworCXJldHVybiBkZW50cnk7Cit9 CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpmYWlsZWRfY3JlYXRpbmcoc3RydWN0IGRlbnRyeSAq ZGVudHJ5KQoreworCWlub2RlX3VubG9jayhkZW50cnktPmRfcGFyZW50LT5kX2lub2RlKTsKKwlk cHV0KGRlbnRyeSk7CisJc2ltcGxlX3JlbGVhc2VfZnMoJmRybWZzX21vdW50LCAmZHJtZnNfbW91 bnRfY291bnQpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZW5k X2NyZWF0aW5nKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpbm9kZV91bmxvY2soZGVudHJ5 LT5kX3BhcmVudC0+ZF9pbm9kZSk7CisJcmV0dXJuIGRlbnRyeTsKK30KKworLyoqCisgKiBkcm1m c19jcmVhdGVfZmlsZSAtIGNyZWF0ZSBhIGZpbGUgaW4gdGhlIGRybWZzIGZpbGVzeXN0ZW0KKyAq IEBuYW1lOiBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUg ZmlsZSB0byBjcmVhdGUuCisgKiBAbW9kZTogdGhlIHBlcm1pc3Npb24gdGhhdCB0aGUgZmlsZSBz aG91bGQgaGF2ZS4KKyAqIEBwYXJlbnQ6IGEgcG9pbnRlciB0byB0aGUgcGFyZW50IGRlbnRyeSBm b3IgdGhpcyBmaWxlLiAgVGhpcyBzaG91bGQgYmUgYQorICogICAgICAgICAgZGlyZWN0b3J5IGRl bnRyeSBpZiBzZXQuICBJZiB0aGlzIHBhcmFtZXRlciBpcyBOVUxMLCB0aGVuIHRoZQorICogICAg ICAgICAgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIHJvb3Qgb2YgdGhlIGRybWZzIGZpbGVz eXN0ZW0uCisgKiBAZGF0YTogYSBwb2ludGVyIHRvIHNvbWV0aGluZyB0aGF0IHRoZSBjYWxsZXIg d2lsbCB3YW50IHRvIGdldCB0byBsYXRlcgorICogICAgICAgIG9uLiAgVGhlIGlub2RlLmlfcHJp dmF0ZSBwb2ludGVyIHdpbGwgcG9pbnQgdG8gdGhpcyB2YWx1ZSBvbgorICogICAgICAgIHRoZSBv cGVuKCkgY2FsbC4KKyAqIEBmb3BzOiBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yCisgKiAgICAgICAgdGhpcyBmaWxlLgorICoKKyAq IFRoaXMgaXMgdGhlIGJhc2ljICJjcmVhdGUgYSBmaWxlIiBmdW5jdGlvbiBmb3IgZHJtZnMuICBJ dCBhbGxvd3MgZm9yIGEKKyAqIHdpZGUgcmFuZ2Ugb2YgZmxleGliaWxpdHkgaW4gY3JlYXRpbmcg YSBmaWxlLCBvciBhIGRpcmVjdG9yeSAoaWYgeW91IHdhbnQKKyAqIHRvIGNyZWF0ZSBhIGRpcmVj dG9yeSwgdGhlIGRybWZzX2NyZWF0ZV9kaXIoKSBmdW5jdGlvbiBpcworICogcmVjb21tZW5kZWQg dG8gYmUgdXNlZCBpbnN0ZWFkLikKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEg cG9pbnRlciB0byBhIGRlbnRyeSBpZiBpdCBzdWNjZWVkcy4gIFRoaXMKKyAqIHBvaW50ZXIgbXVz dCBiZSBwYXNzZWQgdG8gdGhlIGRybWZzX3JlbW92ZSgpIGZ1bmN0aW9uIHdoZW4gdGhlIGZpbGUg aXMKKyAqIHRvIGJlIHJlbW92ZWQgKG5vIGF1dG9tYXRpYyBjbGVhbnVwIGhhcHBlbnMgaWYgeW91 ciBtb2R1bGUgaXMgdW5sb2FkZWQsCisgKiB5b3UgYXJlIHJlc3BvbnNpYmxlIGhlcmUuKSAgSWYg YW4gZXJyb3Igb2NjdXJzLCAlTlVMTCB3aWxsIGJlIHJldHVybmVkLgorICoKKyAqLworc3RydWN0 IGRlbnRyeSAqZHJtZnNfY3JlYXRlX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwgdW1vZGVfdCBtb2Rl LAorCQkJCSAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwgdm9pZCAqZGF0YSwKKwkJCQkgICBjb25z dCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzKQoreworCXN0cnVjdCBkZW50cnkgKmRlbnRy eTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJaWYgKCEobW9kZSAmIFNfSUZNVCkpCisJCW1v ZGUgfD0gU19JRlJFRzsKKworCWlmIChXQVJOX09OKCFTX0lTUkVHKG1vZGUpKSkKKwkJcmV0dXJu IE5VTEw7CisKKwlkZW50cnkgPSBzdGFydF9jcmVhdGluZyhuYW1lLCBwYXJlbnQpOworCisJaWYg KElTX0VSUihkZW50cnkpKQorCQlyZXR1cm4gTlVMTDsKKworCWlub2RlID0gZHJtZnNfZ2V0X2lu b2RlKGRlbnRyeS0+ZF9zYik7CisJaWYgKHVubGlrZWx5KCFpbm9kZSkpCisJCXJldHVybiBmYWls ZWRfY3JlYXRpbmcoZGVudHJ5KTsKKworCWlub2RlLT5pX21vZGUgPSBtb2RlOworCWlub2RlLT5p X2ZvcCA9IGZvcHMgPyBmb3BzIDogJmRybWZzX2RlZmF1bHRfZmlsZV9vcGVyYXRpb25zOworCWlu b2RlLT5pX3ByaXZhdGUgPSBkYXRhOworCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJ ZnNub3RpZnlfY3JlYXRlKGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGUsIGRlbnRyeSk7CisJcmV0 dXJuIGVuZF9jcmVhdGluZyhkZW50cnkpOworfQorRVhQT1JUX1NZTUJPTChkcm1mc19jcmVhdGVf ZmlsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2NyZWF0ZV9kaXIoY29uc3QgY2hhciAq bmFtZSwgc3RydWN0IGRlbnRyeSAqcGFyZW50LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBpbm9kZV9v cGVyYXRpb25zICpvcHMpCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gc3RhcnRfY3JlYXRp bmcobmFtZSwgcGFyZW50KTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJaWYgKElTX0VSUihk ZW50cnkpKQorCQlyZXR1cm4gTlVMTDsKKworCWlub2RlID0gZHJtZnNfZ2V0X2lub2RlKGRlbnRy eS0+ZF9zYik7CisJaWYgKHVubGlrZWx5KCFpbm9kZSkpCisJCXJldHVybiBmYWlsZWRfY3JlYXRp bmcoZGVudHJ5KTsKKworCWlub2RlLT5pX21vZGUgPSBTX0lGRElSIHwgU19JUldYVSB8IFNfSVJV R08gfCBTX0lYVUdPOworCWlub2RlLT5pX29wID0gb3BzOworCWlub2RlLT5pX2ZvcCA9ICZzaW1w bGVfZGlyX29wZXJhdGlvbnM7CisKKwkvKiBkaXJlY3RvcnkgaW5vZGVzIHN0YXJ0IG9mZiB3aXRo IGlfbmxpbmsgPT0gMiAoZm9yICIuIiBlbnRyeSkgKi8KKwlpbmNfbmxpbmsoaW5vZGUpOworCWRf aW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJaW5jX25saW5rKGRlbnRyeS0+ZF9wYXJlbnQt PmRfaW5vZGUpOworCWZzbm90aWZ5X21rZGlyKGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGUsIGRl bnRyeSk7CisJcmV0dXJuIGVuZF9jcmVhdGluZyhkZW50cnkpOworfQorCisvKioKKyAqIGRybWZz X2NyZWF0ZV9kaXIgLSBjcmVhdGUgYSBkaXJlY3RvcnkgaW4gdGhlIGRybWZzIGZpbGVzeXN0ZW0K KyAqIEBuYW1lOiBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0 aGUgZGlyZWN0b3J5IHRvCisgKiAgICAgICAgY3JlYXRlLgorICogQHBhcmVudDogYSBwb2ludGVy IHRvIHRoZSBwYXJlbnQgZGVudHJ5IGZvciB0aGlzIGZpbGUuICBUaGlzIHNob3VsZCBiZSBhCisg KiAgICAgICAgICBkaXJlY3RvcnkgZGVudHJ5IGlmIHNldC4gIElmIHRoaXMgcGFyYW1ldGVyIGlz IE5VTEwsIHRoZW4gdGhlCisgKiAgICAgICAgICBkaXJlY3Rvcnkgd2lsbCBiZSBjcmVhdGVkIGlu IHRoZSByb290IG9mIHRoZSBkcm1mcyBmaWxlc3lzdGVtLgorICoKKyAqIFRoaXMgZnVuY3Rpb24g Y3JlYXRlcyBhIGRpcmVjdG9yeSBpbiBkcm1mcyB3aXRoIHRoZSBnaXZlbiBuYW1lLgorICoKKyAq IFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBwb2ludGVyIHRvIGEgZGVudHJ5IGlmIGl0IHN1 Y2NlZWRzLiAgVGhpcworICogcG9pbnRlciBtdXN0IGJlIHBhc3NlZCB0byB0aGUgZHJtZnNfcmVt b3ZlKCkgZnVuY3Rpb24gd2hlbiB0aGUgZmlsZSBpcworICogdG8gYmUgcmVtb3ZlZC4gSWYgYW4g ZXJyb3Igb2NjdXJzLCAlTlVMTCB3aWxsIGJlIHJldHVybmVkLgorICoKKyAqLworc3RydWN0IGRl bnRyeSAqZHJtZnNfY3JlYXRlX2Rpcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpw YXJlbnQpCit7CisJcmV0dXJuIF9fY3JlYXRlX2RpcihuYW1lLCBwYXJlbnQsICZzaW1wbGVfZGly X2lub2RlX29wZXJhdGlvbnMpOworfQorRVhQT1JUX1NZTUJPTChkcm1mc19jcmVhdGVfZGlyKTsK Kworc3RhdGljIGludCBfX2RybWZzX3JlbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVj dCBkZW50cnkgKnBhcmVudCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChzaW1wbGVfcG9zaXRp dmUoZGVudHJ5KSkgeworCQlpZiAoZGVudHJ5LT5kX2lub2RlKSB7CisJCQlkZ2V0KGRlbnRyeSk7 CisJCQlzd2l0Y2ggKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlICYgU19JRk1UKSB7CisJCQljYXNl IFNfSUZESVI6CisJCQkJcmV0ID0gc2ltcGxlX3JtZGlyKHBhcmVudC0+ZF9pbm9kZSwgZGVudHJ5 KTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJc2ltcGxlX3VubGluayhwYXJlbnQtPmRf aW5vZGUsIGRlbnRyeSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoIXJldCkKKwkJCQlkX2Rl bGV0ZShkZW50cnkpOworCQkJZHB1dChkZW50cnkpOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9 CisKKworLyoqCisgKiBkcm1mc19yZW1vdmUgLSByZW1vdmVzIGEgZmlsZSBvciBkaXJlY3Rvcnkg ZnJvbSB0aGUgZHJtZnMgZmlsZXN5c3RlbQorICogQGRlbnRyeTogYSBwb2ludGVyIHRvIGEgdGhl IGRlbnRyeSBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkgdG8gYmUKKyAqICAgICAgICAgIHJlbW92 ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIGEgZmlsZSBvciBkaXJlY3RvcnkgaW4g ZHJtZnMgdGhhdCB3YXMgcHJldmlvdXNseQorICogY3JlYXRlZCB3aXRoIGEgY2FsbCB0byBhbm90 aGVyIGRybWZzIGZ1bmN0aW9uIChsaWtlCisgKiBkcm1mc19jcmVhdGVfZmlsZSgpIG9yIHZhcmlh bnRzIHRoZXJlb2YuKQorICovCit2b2lkIGRybWZzX3JlbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50 cnkpCit7CisJc3RydWN0IGRlbnRyeSAqcGFyZW50OworCWludCByZXQ7CisKKwlpZiAoSVNfRVJS X09SX05VTEwoZGVudHJ5KSkKKwkJcmV0dXJuOworCisJcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVu dDsKKwlpbm9kZV9sb2NrKHBhcmVudC0+ZF9pbm9kZSk7CisJcmV0ID0gX19kcm1mc19yZW1vdmUo ZGVudHJ5LCBwYXJlbnQpOworCWlub2RlX3VubG9jayhwYXJlbnQtPmRfaW5vZGUpOworCWlmICgh cmV0KQorCQlzaW1wbGVfcmVsZWFzZV9mcygmZHJtZnNfbW91bnQsICZkcm1mc19tb3VudF9jb3Vu dCk7Cit9CitFWFBPUlRfU1lNQk9MKGRybWZzX3JlbW92ZSk7CisKKy8qKgorICogZHJtZnNfcmVt b3ZlX3JlY3Vyc2l2ZSAtIHJlY3Vyc2l2ZWx5IHJlbW92ZXMgYSBkaXJlY3RvcnkKKyAqIEBkZW50 cnk6IGEgcG9pbnRlciB0byBhIHRoZSBkZW50cnkgb2YgdGhlIGRpcmVjdG9yeSB0byBiZSByZW1v dmVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVjdXJzaXZlbHkgcmVtb3ZlcyBhIGRpcmVjdG9y eSB0cmVlIGluIGRybWZzIHRoYXQKKyAqIHdhcyBwcmV2aW91c2x5IGNyZWF0ZWQgd2l0aCBhIGNh bGwgdG8gYW5vdGhlciBkcm1mcyBmdW5jdGlvbgorICogKGxpa2UgZHJtZnNfY3JlYXRlX2ZpbGUo KSBvciB2YXJpYW50cyB0aGVyZW9mLikKKyAqLwordm9pZCBkcm1mc19yZW1vdmVfcmVjdXJzaXZl KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpjaGlsZCwgKnBhcmVu dDsKKworCWlmIChJU19FUlJfT1JfTlVMTChkZW50cnkpKQorCQlyZXR1cm47CisKKwlwYXJlbnQg PSBkZW50cnk7CisgZG93bjoKKwlpbm9kZV9sb2NrKHBhcmVudC0+ZF9pbm9kZSk7CisgbG9vcDoK KwkvKgorCSAqIFRoZSBwYXJlbnQtPmRfc3ViZGlycyBpcyBwcm90ZWN0ZWQgYnkgdGhlIGRfbG9j ay4gT3V0c2lkZSB0aGF0CisJICogbG9jaywgdGhlIGNoaWxkIGNhbiBiZSB1bmxpbmtlZCBhbmQg c2V0IHRvIGJlIGZyZWVkIHdoaWNoIGNhbgorCSAqIHVzZSB0aGUgZF91LmRfY2hpbGQgYXMgdGhl IHJjdSBoZWFkIGFuZCBjb3JydXB0IHRoaXMgbGlzdC4KKwkgKi8KKwlzcGluX2xvY2soJnBhcmVu dC0+ZF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmcGFyZW50LT5kX3N1YmRp cnMsIGRfY2hpbGQpIHsKKwkJaWYgKCFzaW1wbGVfcG9zaXRpdmUoY2hpbGQpKQorCQkJY29udGlu dWU7CisKKwkJLyogcGVyaGFwcyBzaW1wbGVfZW1wdHkoY2hpbGQpIG1ha2VzIG1vcmUgc2Vuc2Ug Ki8KKwkJaWYgKCFsaXN0X2VtcHR5KCZjaGlsZC0+ZF9zdWJkaXJzKSkgeworCQkJc3Bpbl91bmxv Y2soJnBhcmVudC0+ZF9sb2NrKTsKKwkJCWlub2RlX3VubG9jayhwYXJlbnQtPmRfaW5vZGUpOwor CQkJcGFyZW50ID0gY2hpbGQ7CisJCQlnb3RvIGRvd247CisJCX0KKworCQlzcGluX3VubG9jaygm cGFyZW50LT5kX2xvY2spOworCisJCWlmICghX19kcm1mc19yZW1vdmUoY2hpbGQsIHBhcmVudCkp CisJCQlzaW1wbGVfcmVsZWFzZV9mcygmZHJtZnNfbW91bnQsICZkcm1mc19tb3VudF9jb3VudCk7 CisKKwkJLyoKKwkJICogVGhlIHBhcmVudC0+ZF9sb2NrIHByb3RlY3RzIGFnYWluc3QgY2hpbGQg ZnJvbSB1bmxpbmtpbmcKKwkJICogZnJvbSBkX3N1YmRpcnMuIFdoZW4gcmVsZWFzaW5nIHRoZSBw YXJlbnQtPmRfbG9jayB3ZSBjYW4KKwkJICogbm8gbG9uZ2VyIHRydXN0IHRoYXQgdGhlIG5leHQg cG9pbnRlciBpcyB2YWxpZC4KKwkJICogUmVzdGFydCB0aGUgbG9vcC4gV2UnbGwgc2tpcCB0aGlz IG9uZSB3aXRoIHRoZQorCQkgKiBzaW1wbGVfcG9zaXRpdmUoKSBjaGVjay4KKwkJICovCisJCWdv dG8gbG9vcDsKKwl9CisJc3Bpbl91bmxvY2soJnBhcmVudC0+ZF9sb2NrKTsKKworCWlub2RlX3Vu bG9jayhwYXJlbnQtPmRfaW5vZGUpOworCWNoaWxkID0gcGFyZW50OworCXBhcmVudCA9IHBhcmVu dC0+ZF9wYXJlbnQ7CisJaW5vZGVfbG9jayhwYXJlbnQtPmRfaW5vZGUpOworCisJaWYgKGNoaWxk ICE9IGRlbnRyeSkKKwkJLyogZ28gdXAgKi8KKwkJZ290byBsb29wOworCisJaWYgKCFfX2RybWZz X3JlbW92ZShjaGlsZCwgcGFyZW50KSkKKwkJc2ltcGxlX3JlbGVhc2VfZnMoJmRybWZzX21vdW50 LCAmZHJtZnNfbW91bnRfY291bnQpOworCWlub2RlX3VubG9jayhwYXJlbnQtPmRfaW5vZGUpOwor fQorRVhQT1JUX1NZTUJPTChkcm1mc19yZW1vdmVfcmVjdXJzaXZlKTsKKworLyoqCisgKiBkcm1m c19pbml0aWFsaXplZCAtIFRlbGxzIHdoZXRoZXIgZHJtZnMgaGFzIGJlZW4gcmVnaXN0ZXJlZAor ICovCitib29sIGRybWZzX2luaXRpYWxpemVkKHZvaWQpCit7CisJcmV0dXJuIGRybWZzX3JlZ2lz dGVyZWQ7Cit9CitFWFBPUlRfU1lNQk9MKGRybWZzX2luaXRpYWxpemVkKTsKKworaW50IGRybWZz X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gc3lzZnNfY3JlYXRlX21v dW50X3BvaW50KGtlcm5lbF9rb2JqLCAiZHJtIik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwlyZXR2YWwgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZkcm1fZnNfdHlwZSk7CisJ aWYgKCFyZXR2YWwpCisJCWRybWZzX3JlZ2lzdGVyZWQgPSB0cnVlOworCisJcmV0dXJuIHJldHZh bDsKK30KK0VYUE9SVF9TWU1CT0woZHJtZnNfaW5pdCk7CisKK2ludCBkcm1mc19maW5pKHZvaWQp Cit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZHJt X2ZzX3R5cGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlkcm1mc19yZWdp c3RlcmVkID0gZmFsc2U7CisKKwlzeXNmc19yZW1vdmVfbW91bnRfcG9pbnQoa2VybmVsX2tvYmos ICJkcm0iKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtZnNfZmluaSk7CmRpZmYgLS1naXQgYS9pbmNs dWRlL2xpbnV4L2RybWZzLmggYi9pbmNsdWRlL2xpbnV4L2RybWZzLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uMzA5MTQ4MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUv bGludXgvZHJtZnMuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQg SW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFn cmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK KyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09G VFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqCVN3YXRpIERoaW5ncmEgPHN3YXRpLmRoaW5ncmFA aW50ZWwuY29tPgorICoJU291cmFiIEd1cHRhIDxzb3VyYWIuZ3VwdGFAaW50ZWwuY29tPgorICoJ QWthc2ggR29lbCA8YWthc2guZ29lbEBpbnRlbC5jb20+CisgKi8KKworI2lmbmRlZiBfRFJNRlNf SF8KKyNkZWZpbmUgX0RSTUZTX0hfCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUg PGxpbnV4L3NlcV9maWxlLmg+CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3Qg ZmlsZV9vcGVyYXRpb25zOworCisjaWZkZWYgQ09ORklHX0RSTUZTCisKK3N0cnVjdCBkZW50cnkg KmRybWZzX2NyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKm5hbWUsIHVtb2RlX3QgbW9kZSwKKwkJCQkg ICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHZvaWQgKmRhdGEsCisJCQkJICAgY29uc3Qgc3RydWN0 IGZpbGVfb3BlcmF0aW9ucyAqZm9wcyk7CisKK3N0cnVjdCBkZW50cnkgKmRybWZzX2NyZWF0ZV9k aXIoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRlbnRyeSAqcGFyZW50KTsKKwordm9pZCBkcm1m c19yZW1vdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKK3ZvaWQgZHJtZnNfcmVtb3ZlX3JlY3Vy c2l2ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOworCitib29sIGRybWZzX2luaXRpYWxpemVkKHZv aWQpOworaW50IGRybWZzX2luaXQodm9pZCk7CitpbnQgZHJtZnNfZmluaSh2b2lkKTsKKworI2Vu ZGlmIC8qIENPTkZJR19EUk1GUyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFw aS9saW51eC9tYWdpYy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21hZ2ljLmgKaW5kZXggOWJkNTU5 NC4uZWYwMWViNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21hZ2ljLmgKKysrIGIv aW5jbHVkZS91YXBpL2xpbnV4L21hZ2ljLmgKQEAgLTYxLDYgKzYxLDkgQEAKICNkZWZpbmUgU1RB Q0tfRU5EX01BR0lDCQkweDU3QUM2RTlECiAKICNkZWZpbmUgVFJBQ0VGU19NQUdJQyAgICAgICAg ICAweDc0NzI2MTYzCisjZGVmaW5lIERSTUZTX01BR0lDCSAgICAgICAweDg0NzI0MTQzICAgICAg Lyogc29tZSByYW5kb20gbnVtYmVyLgorCQkJCQkJKiBJcyB0aGVyZSBhIGJldHRlciB3YXk/CisJ CQkJCQkqLwogCiAjZGVmaW5lIFY5RlNfTUFHSUMJCTB4MDEwMjE5OTcKIAotLSAKMi43LjQKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=