From mboxrd@z Thu Jan 1 00:00:00 1970 From: swati.dhingra@intel.com Subject: [RFC 1/4] drm: Introduce drmfs pseudo filesystem interfaces Date: Mon, 5 Dec 2016 16:36:09 +0530 Message-ID: <1480935972-6005-2-git-send-email-swati.dhingra@intel.com> References: <1480935972-6005-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: In-Reply-To: <1480935972-6005-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: Swati Dhingra , dri-devel@lists.freedesktop.org, Sourab Gupta List-Id: dri-devel@lists.freedesktop.org RnJvbTogU291cmFiIEd1cHRhIDxzb3VyYWIuZ3VwdGFAaW50ZWwuY29tPgoKVGhlIHBhdGNoIGlu dHJvZHVjZXMgYSBuZXcgcHNldWRvIGZpbGVzeXN0ZW0gdHlwZSwgbmFtZWQgJ2RybWZzJyB3aGlj aCBpcwppbnRlbmRlZCB0byBob3VzZSB0aGUgZmlsZXMgZm9yIHRoZSBkYXRhIGdlbmVyYXRlZCBi eSBkcm0gc3Vic3lzdGVtIHRoYXQKY2Fubm90IGJlIGFjY29tbW9kYXRlZCBieSBhbnkgb2YgdGhl IGV4aXN0aW5nIGZpbGVzeXN0ZW1zLgpUaGUgZmlsZXN5c3RlbSBpcyBtb2RlbGxlZCBvbiB0aGUg bGluZXMgb2YgZXhpc3RpbmcgcHNldWRvLWZpbGVzeXN0ZW1zIHN1Y2gKYXMgZGVidWdmcy90cmFj ZWZzLCBhbmQgYm9ycm93cyBpZGVhcyBmcm9tIHRoZWlyIGltcGxlbWVudGF0aW9uLgpUaGlzIGZp bGVzeXN0ZW0gd2lsbCBiZSBhcHBlYXJpbmcgYXQgc3lzL2tlcm5lbC9kcm0uCgpBIG5ldyBjb25m aWcgJ0NPTkZJR19EUk1GUycgaXMgaW50cm9kdWNlZCB0byBlbmFibGUvZGlzYWJsZSB0aGUgZmls ZXN5c3RlbSwKd2hpY2ggaXMgZGVwZW5kZW50IG9uIENPTkZJR19EUk0uClRoZSBmaWxlc3lzdGVt IHdpbGwgbm90IGJlIHJlZ2lzdGVyZWQgc3RhbmRhbG9uZSBkdXJpbmcga2VybmVsIGluaXQgdGlt ZSwKaW5zdGVhZCBpdCBpcyBpbnRlbmRlZCB0byBiZSBpbml0aWFsaXplZC9yZWdpc3RlcmVkIGR1 cmluZyBkcm0gaW5pdGlhbGl6YXRpb24uCgpUaGUgaW50ZW50IGZvciBpbnRyb2R1Y3Rpb24gb2Yg dGhlIGZpbGVzeXN0ZW0gaXMgdG8gYWN0IGFzIGEgbG9jYXRpb24gdG8gaG9sZAp2YXJpb3VzIGtp bmRzIG9mIGRhdGEgb3V0cHV0IGZyb20gTGludXggRFJNIHN1YnN5c3RlbXMsIHdoaWNoIGNhbid0 IHJlYWxseSBmaXQKYW55d2hlcmUgZWxzZSBpbnRvIHRoZSBleGlzdGluZyBmaWxlc3lzdGVtcyBz dWNoIGFzIGRlYnVnZnMvc3lzZnMgZXRjLiBBbGwgdGhlc2UKZmlsZXN5c3RlbXMgaGF2ZSB0aGVp ciBvd24gY29uc3RyYWludHMgYW5kIGFyZSBpbnRlbmRlZCB0byBvdXRwdXQgYSBwYXJ0aWN1bGFy CnR5cGUgb2YgZGF0YSBzdWNoIGFzIGF0dHJpYnV0ZXMgYW5kIHNtYWxsIGRlYnVnIHBhcmFtZXRl ciBkYXRhLiBEdWUgdG8gdGhlc2UKY29uc3RyYWludHMsIHRoZXJlIGlzIGEgbmVlZCBmb3IgYSBu ZXcgcHNldWRvIGZpbGVzeXRlbSwgY3VzdG9taXphYmxlIHRvIERSTQpzcGVjaWZpYyByZXF1aXJl bWVudHMgYW5kIGNhdGVyaW5nIHRvIHRoZSBuZWVkcyB0byBEUk0gc3Vic3lzdGVtIGNvbXBvbmVu dHMKClNpZ25lZC1vZmYtYnk6IFNvdXJhYiBHdXB0YSA8c291cmFiLmd1cHRhQGludGVsLmNvbT4K U2lnbmVkLW9mZi1ieTogU3dhdGkgRGhpbmdyYSA8c3dhdGkuZGhpbmdyYUBpbnRlbC5jb20+Ci0t LQogZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgfCAgIDkgKwogZHJpdmVycy9ncHUvZHJtL01h a2VmaWxlICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2RybWZzLmMgICAgfCA1NTUgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBpbmNsdWRlL2RybS9kcm1m cy5oICAgICAgICB8ICA3NyArKysrKysrCiBpbmNsdWRlL3VhcGkvbGludXgvbWFnaWMuaCB8ICAg MyArCiA1IGZpbGVzIGNoYW5nZWQsIDY0NSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL2RybWZzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2Ry bS9kcm1mcy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJz L2dwdS9kcm0vS2NvbmZpZwppbmRleCA5NWZjMDQxLi41MDgyODQwIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtMjYs NiArMjYsMTUgQEAgY29uZmlnIERSTV9NSVBJX0RTSQogCWJvb2wKIAlkZXBlbmRzIG9uIERSTQog Citjb25maWcgRFJNRlMKKwlib29sICJEcm1mcyBmaWxlIHN5c3RlbSBzdXBwb3J0IgorCWRlcGVu ZHMgb24gRFJNCisJaGVscAorCSAgRHJtZnMgaXMgYSBwc2V1ZG8gZmlsZSBzeXN0ZW0gZm9yIGRy bSBzdWJzeXN0ZW0gb3V0cHV0IGRhdGEuCisKKwkgIGRybWZzIGlzIGEgZmlsZXN5c3RlbSB3aGlj aCBzZXJ2ZXMgYXMgYSBzdGFibGUgQUJJIHRvIGhvbGQKKwkgIG1pc2NlbGxhbmVvdXMgb3V0cHV0 IGRhdGEgZnJvbSBkcm0gc3Vic3lzdGVtcy4KKwogY29uZmlnIERSTV9EUF9BVVhfQ0hBUkRFVgog CWJvb2wgIkRSTSBEUCBBVVggSW50ZXJmYWNlIgogCWRlcGVuZHMgb24gRFJNCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5k ZXggODgzZjNlNy4uNTAyMTIyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxl CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtNDIsNiArNDIsNyBAQCBDRkxBR1Nf ZHJtX3RyYWNlX3BvaW50cy5vIDo9IC1JJChzcmMpCiAKIG9iai0kKENPTkZJR19EUk0pCSs9IGRy bS5vCiBvYmotJChDT05GSUdfRFJNX01JUElfRFNJKSArPSBkcm1fbWlwaV9kc2kubworb2JqLSQo Q09ORklHX0RSTUZTKQkrPSBkcm1mcy5vCiBvYmotJChDT05GSUdfRFJNX0FSTSkJKz0gYXJtLwog b2JqLSQoQ09ORklHX0RSTV9UVE0pCSs9IHR0bS8KIG9iai0kKENPTkZJR19EUk1fVERGWCkJKz0g dGRmeC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1mcy5jIGIvZHJpdmVycy9ncHUv ZHJtL2RybWZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRiMGU3Ygot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1mcy5jCkBAIC0wLDAgKzEsNTU1 IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAq CVN3YXRpIERoaW5ncmEgPHN3YXRpLmRoaW5ncmFAaW50ZWwuY29tPgorICoJU291cmFiIEd1cHRh IDxzb3VyYWIuZ3VwdGFAaW50ZWwuY29tPgorICoJQWthc2ggR29lbCA8YWthc2guZ29lbEBpbnRl bC5jb20+CisgKi8KKworLyoKKyAqIGRybWZzIGlzIHRoZSBmaWxlc3lzdGVtIHVzZWQgZm9yIG91 dHB1dCBvZiBkcm0gc3Vic3lzdGVtIGRhdGEKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2lu Y2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1 ZGUgPGRybS9kcm1mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Zzbm90aWZ5Lmg+CisjaW5jbHVkZSA8 bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxs aW51eC9tYWdpYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2RlZmluZSBEUk1GU19E RUZBVUxUX01PREUJMDcwMAorCitzdGF0aWMgc3RydWN0IHZmc21vdW50ICpkcm1mc19tb3VudDsK K3N0YXRpYyBpbnQgZHJtZnNfbW91bnRfY291bnQ7CitzdGF0aWMgYm9vbCBkcm1mc19yZWdpc3Rl cmVkOworCitzdGF0aWMgc3NpemVfdCBkZWZhdWx0X3JlYWRfZmlsZShzdHJ1Y3QgZmlsZSAqZmls ZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgZGVmYXVsdF93cml0ZV9maWxlKHN0cnVj dCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBjb3VudCwg bG9mZl90ICpwcG9zKQoreworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBmaWxlX29wZXJhdGlvbnMgZHJtZnNfZGVmYXVsdF9maWxlX29wZXJhdGlvbnMgPSB7CisJLnJl YWQgPQkJZGVmYXVsdF9yZWFkX2ZpbGUsCisJLndyaXRlID0JZGVmYXVsdF93cml0ZV9maWxlLAor CS5vcGVuID0JCXNpbXBsZV9vcGVuLAorCS5sbHNlZWsgPQlub29wX2xsc2VlaywKK307CisKK3N0 YXRpYyBzdHJ1Y3QgaW5vZGUgKmRybWZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNi KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZXdfaW5vZGUoc2IpOworCisJaWYgKGlub2Rl KSB7CisJCWlub2RlLT5pX2lubyA9IGdldF9uZXh0X2lubygpOworCQlpbm9kZS0+aV9hdGltZSA9 IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJfQorCXJl dHVybiBpbm9kZTsKK30KKworc3RydWN0IGRybWZzX21vdW50X29wdHMgeworCWt1aWRfdCB1aWQ7 CisJa2dpZF90IGdpZDsKKwl1bW9kZV90IG1vZGU7Cit9OworCitlbnVtIHsKKwlPcHRfdWlkLAor CU9wdF9naWQsCisJT3B0X21vZGUsCisJT3B0X2VycgorfTsKKworc3RhdGljIGNvbnN0IG1hdGNo X3RhYmxlX3QgdG9rZW5zID0geworCXtPcHRfdWlkLCAidWlkPSV1In0sCisJe09wdF9naWQsICJn aWQ9JXUifSwKKwl7T3B0X21vZGUsICJtb2RlPSVvIn0sCisJe09wdF9lcnIsIE5VTEx9Cit9Owor CitzdHJ1Y3QgZHJtZnNfZnNfaW5mbyB7CisJc3RydWN0IGRybWZzX21vdW50X29wdHMgbW91bnRf b3B0czsKK307CisKK3N0YXRpYyBpbnQgZHJtZnNfcGFyc2Vfb3B0aW9ucyhjaGFyICpkYXRhLCBz dHJ1Y3QgZHJtZnNfbW91bnRfb3B0cyAqb3B0cykKK3sKKwlzdWJzdHJpbmdfdCBhcmdzW01BWF9P UFRfQVJHU107CisJaW50IG9wdGlvbjsKKwlpbnQgdG9rZW47CisJa3VpZF90IHVpZDsKKwlrZ2lk X3QgZ2lkOworCWNoYXIgKnA7CisKKwlvcHRzLT5tb2RlID0gRFJNRlNfREVGQVVMVF9NT0RFOwor CisJd2hpbGUgKChwID0gc3Ryc2VwKCZkYXRhLCAiLCIpKSAhPSBOVUxMKSB7CisJCWlmICghKnAp CisJCQljb250aW51ZTsKKworCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHAsIHRva2VucywgYXJncyk7 CisJCXN3aXRjaCAodG9rZW4pIHsKKwkJY2FzZSBPcHRfdWlkOgorCQkJaWYgKG1hdGNoX2ludCgm YXJnc1swXSwgJm9wdGlvbikpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl1aWQgPSBtYWtlX2t1 aWQoY3VycmVudF91c2VyX25zKCksIG9wdGlvbik7CisJCQlpZiAoIXVpZF92YWxpZCh1aWQpKQor CQkJCXJldHVybiAtRUlOVkFMOworCQkJb3B0cy0+dWlkID0gdWlkOworCQkJYnJlYWs7CisJCWNh c2UgT3B0X2dpZDoKKwkJCWlmIChtYXRjaF9pbnQoJmFyZ3NbMF0sICZvcHRpb24pKQorCQkJCXJl dHVybiAtRUlOVkFMOworCQkJZ2lkID0gbWFrZV9rZ2lkKGN1cnJlbnRfdXNlcl9ucygpLCBvcHRp b24pOworCQkJaWYgKCFnaWRfdmFsaWQoZ2lkKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCW9w dHMtPmdpZCA9IGdpZDsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9tb2RlOgorCQkJaWYgKG1hdGNo X29jdGFsKCZhcmdzWzBdLCAmb3B0aW9uKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCW9wdHMt Pm1vZGUgPSBvcHRpb24gJiBTX0lBTExVR087CisJCQlicmVhazsKKwkJLyoKKwkJICogV2UgbWln aHQgbGlrZSB0byByZXBvcnQgYmFkIG1vdW50IG9wdGlvbnMgaGVyZQorCQkgKi8KKwkJfQorCX0K KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRybWZzX2FwcGx5X29wdGlvbnMoc3RydWN0 IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgZHJtZnNfZnNfaW5mbyAqZnNpID0gc2ItPnNf ZnNfaW5mbzsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gc2ItPnNfcm9vdC0+ZF9pbm9kZTsKKwlz dHJ1Y3QgZHJtZnNfbW91bnRfb3B0cyAqb3B0cyA9ICZmc2ktPm1vdW50X29wdHM7CisKKwlpbm9k ZS0+aV9tb2RlICY9IH5TX0lBTExVR087CisJaW5vZGUtPmlfbW9kZSB8PSBvcHRzLT5tb2RlOwor CisJaW5vZGUtPmlfdWlkID0gb3B0cy0+dWlkOworCWlub2RlLT5pX2dpZCA9IG9wdHMtPmdpZDsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRybWZzX3JlbW91bnQoc3RydWN0IHN1cGVy X2Jsb2NrICpzYiwgaW50ICpmbGFncywgY2hhciAqZGF0YSkKK3sKKwlpbnQgZXJyOworCXN0cnVj dCBkcm1mc19mc19pbmZvICpmc2kgPSBzYi0+c19mc19pbmZvOworCisJc3luY19maWxlc3lzdGVt KHNiKTsKKwllcnIgPSBkcm1mc19wYXJzZV9vcHRpb25zKGRhdGEsICZmc2ktPm1vdW50X29wdHMp OworCWlmIChlcnIpCisJCWdvdG8gZmFpbDsKKworCWRybWZzX2FwcGx5X29wdGlvbnMoc2IpOwor CitmYWlsOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZHJtZnNfc2hvd19vcHRpb25z KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdCkKK3sKKwlzdHJ1Y3QgZHJt ZnNfZnNfaW5mbyAqZnNpID0gcm9vdC0+ZF9zYi0+c19mc19pbmZvOworCXN0cnVjdCBkcm1mc19t b3VudF9vcHRzICpvcHRzID0gJmZzaS0+bW91bnRfb3B0czsKKworCWlmICghdWlkX2VxKG9wdHMt PnVpZCwgR0xPQkFMX1JPT1RfVUlEKSkKKwkJc2VxX3ByaW50ZihtLCAiLHVpZD0ldSIsCisJCQkg ICBmcm9tX2t1aWRfbXVuZ2VkKCZpbml0X3VzZXJfbnMsIG9wdHMtPnVpZCkpOworCWlmICghZ2lk X2VxKG9wdHMtPmdpZCwgR0xPQkFMX1JPT1RfR0lEKSkKKwkJc2VxX3ByaW50ZihtLCAiLGdpZD0l dSIsCisJCQkgICBmcm9tX2tnaWRfbXVuZ2VkKCZpbml0X3VzZXJfbnMsIG9wdHMtPmdpZCkpOwor CWlmIChvcHRzLT5tb2RlICE9IERSTUZTX0RFRkFVTFRfTU9ERSkKKwkJc2VxX3ByaW50ZihtLCAi LG1vZGU9JW8iLCBvcHRzLT5tb2RlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZHJtZnNfc3VwZXJfb3BlcmF0aW9ucyA9IHsKKwkuc3Rh dGZzCQk9IHNpbXBsZV9zdGF0ZnMsCisJLnJlbW91bnRfZnMJPSBkcm1mc19yZW1vdW50LAorCS5z aG93X29wdGlvbnMJPSBkcm1mc19zaG93X29wdGlvbnMsCit9OworCitzdGF0aWMgaW50IGRybV9m aWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEsIGludCBzaWxlbnQp Cit7CisJc3RhdGljIHN0cnVjdCB0cmVlX2Rlc2NyIGRybV9maWxlc1tdID0geyB7IiJ9IH07CisJ c3RydWN0IGRybWZzX2ZzX2luZm8gKmZzaTsKKwlpbnQgZXJyOworCisJc2F2ZV9tb3VudF9vcHRp b25zKHNiLCBkYXRhKTsKKworCWZzaSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1mc19mc19p bmZvKSwgR0ZQX0tFUk5FTCk7CisJc2ItPnNfZnNfaW5mbyA9IGZzaTsKKwlpZiAoIWZzaSkgewor CQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJZXJyID0gZHJtZnNfcGFyc2Vf b3B0aW9ucyhkYXRhLCAmZnNpLT5tb3VudF9vcHRzKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWw7 CisKKwllcnIgID0gIHNpbXBsZV9maWxsX3N1cGVyKHNiLCBEUk1GU19NQUdJQywgZHJtX2ZpbGVz KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWw7CisKKwlzYi0+c19vcCA9ICZkcm1mc19zdXBlcl9v cGVyYXRpb25zOworCisJZHJtZnNfYXBwbHlfb3B0aW9ucyhzYik7CisKKwlyZXR1cm4gMDsKKwor ZmFpbDoKKwlrZnJlZShmc2kpOworCXNiLT5zX2ZzX2luZm8gPSBOVUxMOworCXJldHVybiBlcnI7 Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkcm1fbW91bnQoc3RydWN0IGZpbGVfc3lzdGVt X3R5cGUgKmZzX3R5cGUsCisJCQlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLAorCQkJ dm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gbW91bnRfc2luZ2xlKGZzX3R5cGUsIGZsYWdzLCBkYXRh LCBkcm1fZmlsbF9zdXBlcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBk cm1fZnNfdHlwZSA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiZHJtZnMi LAorCS5tb3VudCA9CWRybV9tb3VudCwKKwkua2lsbF9zYiA9CWtpbGxfbGl0dGVyX3N1cGVyLAor fTsKK01PRFVMRV9BTElBU19GUygiZHJtZnMiKTsKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKnN0 YXJ0X2NyZWF0aW5nKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKnBhcmVudCkKK3sK KwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisJaW50IGVycm9yOworCisJcHJfZGVidWcoImRybWZz OiBjcmVhdGluZyBmaWxlICclcydcbiIsIG5hbWUpOworCisJZXJyb3IgPSBzaW1wbGVfcGluX2Zz KCZkcm1fZnNfdHlwZSwgJmRybWZzX21vdW50LAorCQkJICAgICAgJmRybWZzX21vdW50X2NvdW50 KTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKKworCS8qIElmIHRoZSBw YXJlbnQgaXMgbm90IHNwZWNpZmllZCwgd2UgY3JlYXRlIGl0IGluIHRoZSByb290LgorCSAqIFdl IG5lZWQgdGhlIHJvb3QgZGVudHJ5IHRvIGRvIHRoaXMsIHdoaWNoIGlzIGluIHRoZSBzdXBlcgor CSAqIGJsb2NrLiBBIHBvaW50ZXIgdG8gdGhhdCBpcyBpbiB0aGUgc3RydWN0IHZmc21vdW50IHRo YXQgd2UKKwkgKiBoYXZlIGFyb3VuZC4KKwkgKi8KKwlpZiAoIXBhcmVudCkKKwkJcGFyZW50ID0g ZHJtZnNfbW91bnQtPm1udF9yb290OworCisJaW5vZGVfbG9jayhwYXJlbnQtPmRfaW5vZGUpOwor CWRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIHBhcmVudCwgc3RybGVuKG5hbWUpKTsKKwlp ZiAoIUlTX0VSUihkZW50cnkpICYmIGRlbnRyeS0+ZF9pbm9kZSkgeworCQlkcHV0KGRlbnRyeSk7 CisJCWRlbnRyeSA9IEVSUl9QVFIoLUVFWElTVCk7CisJfQorCisJaWYgKElTX0VSUihkZW50cnkp KSB7CisJCWlub2RlX3VubG9jayhwYXJlbnQtPmRfaW5vZGUpOworCQlzaW1wbGVfcmVsZWFzZV9m cygmZHJtZnNfbW91bnQsICZkcm1mc19tb3VudF9jb3VudCk7CisJfQorCisJcmV0dXJuIGRlbnRy eTsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmZhaWxlZF9jcmVhdGluZyhzdHJ1Y3QgZGVu dHJ5ICpkZW50cnkpCit7CisJaW5vZGVfdW5sb2NrKGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGUp OworCWRwdXQoZGVudHJ5KTsKKwlzaW1wbGVfcmVsZWFzZV9mcygmZHJtZnNfbW91bnQsICZkcm1m c19tb3VudF9jb3VudCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5 ICplbmRfY3JlYXRpbmcoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCWlub2RlX3VubG9jayhk ZW50cnktPmRfcGFyZW50LT5kX2lub2RlKTsKKwlyZXR1cm4gZGVudHJ5OworfQorCisvKioKKyAq IGRybWZzX2NyZWF0ZV9maWxlIC0gY3JlYXRlIGEgZmlsZSBpbiB0aGUgZHJtZnMgZmlsZXN5c3Rl bQorICogQG5hbWU6IGEgcG9pbnRlciB0byBhIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9m IHRoZSBmaWxlIHRvIGNyZWF0ZS4KKyAqIEBtb2RlOiB0aGUgcGVybWlzc2lvbiB0aGF0IHRoZSBm aWxlIHNob3VsZCBoYXZlLgorICogQHBhcmVudDogYSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgZGVu dHJ5IGZvciB0aGlzIGZpbGUuICBUaGlzIHNob3VsZCBiZSBhCisgKiAgICAgICAgICBkaXJlY3Rv cnkgZGVudHJ5IGlmIHNldC4gIElmIHRoaXMgcGFyYW1ldGVyIGlzIE5VTEwsIHRoZW4gdGhlCisg KiAgICAgICAgICBmaWxlIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgcm9vdCBvZiB0aGUgZHJtZnMg ZmlsZXN5c3RlbS4KKyAqIEBkYXRhOiBhIHBvaW50ZXIgdG8gc29tZXRoaW5nIHRoYXQgdGhlIGNh bGxlciB3aWxsIHdhbnQgdG8gZ2V0IHRvIGxhdGVyCisgKiAgICAgICAgb24uICBUaGUgaW5vZGUu aV9wcml2YXRlIHBvaW50ZXIgd2lsbCBwb2ludCB0byB0aGlzIHZhbHVlIG9uCisgKiAgICAgICAg dGhlIG9wZW4oKSBjYWxsLgorICogQGZvcHM6IGEgcG9pbnRlciB0byBhIHN0cnVjdCBmaWxlX29w ZXJhdGlvbnMgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IKKyAqICAgICAgICB0aGlzIGZpbGUuCisg KgorICogVGhpcyBpcyB0aGUgYmFzaWMgImNyZWF0ZSBhIGZpbGUiIGZ1bmN0aW9uIGZvciBkcm1m cy4gIEl0IGFsbG93cyBmb3IgYQorICogd2lkZSByYW5nZSBvZiBmbGV4aWJpbGl0eSBpbiBjcmVh dGluZyBhIGZpbGUsIG9yIGEgZGlyZWN0b3J5IChpZiB5b3Ugd2FudAorICogdG8gY3JlYXRlIGEg ZGlyZWN0b3J5LCB0aGUgZHJtZnNfY3JlYXRlX2RpcigpIGZ1bmN0aW9uIGlzCisgKiByZWNvbW1l bmRlZCB0byBiZSB1c2VkIGluc3RlYWQuKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1 cm4gYSBwb2ludGVyIHRvIGEgZGVudHJ5IGlmIGl0IHN1Y2NlZWRzLiAgVGhpcworICogcG9pbnRl ciBtdXN0IGJlIHBhc3NlZCB0byB0aGUgZHJtZnNfcmVtb3ZlKCkgZnVuY3Rpb24gd2hlbiB0aGUg ZmlsZSBpcworICogdG8gYmUgcmVtb3ZlZCAobm8gYXV0b21hdGljIGNsZWFudXAgaGFwcGVucyBp ZiB5b3VyIG1vZHVsZSBpcyB1bmxvYWRlZCwKKyAqIHlvdSBhcmUgcmVzcG9uc2libGUgaGVyZS4p ICBJZiBhbiBlcnJvciBvY2N1cnMsICVOVUxMIHdpbGwgYmUgcmV0dXJuZWQuCisgKgorICovCitz dHJ1Y3QgZGVudHJ5ICpkcm1mc19jcmVhdGVfZmlsZShjb25zdCBjaGFyICpuYW1lLCB1bW9kZV90 IG1vZGUsCisJCQkJICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LCB2b2lkICpkYXRhLAorCQkJCSAg IGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMpCit7CisJc3RydWN0IGRlbnRyeSAq ZGVudHJ5OworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlpZiAoIShtb2RlICYgU19JRk1UKSkK KwkJbW9kZSB8PSBTX0lGUkVHOworCisJaWYgKFdBUk5fT04oIVNfSVNSRUcobW9kZSkpKQorCQly ZXR1cm4gTlVMTDsKKworCWRlbnRyeSA9IHN0YXJ0X2NyZWF0aW5nKG5hbWUsIHBhcmVudCk7CisK KwlpZiAoSVNfRVJSKGRlbnRyeSkpCisJCXJldHVybiBOVUxMOworCisJaW5vZGUgPSBkcm1mc19n ZXRfaW5vZGUoZGVudHJ5LT5kX3NiKTsKKwlpZiAodW5saWtlbHkoIWlub2RlKSkKKwkJcmV0dXJu IGZhaWxlZF9jcmVhdGluZyhkZW50cnkpOworCisJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CisJaW5v ZGUtPmlfZm9wID0gZm9wcyA/IGZvcHMgOiAmZHJtZnNfZGVmYXVsdF9maWxlX29wZXJhdGlvbnM7 CisJaW5vZGUtPmlfcHJpdmF0ZSA9IGRhdGE7CisJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2Rl KTsKKwlmc25vdGlmeV9jcmVhdGUoZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZSwgZGVudHJ5KTsK KwlyZXR1cm4gZW5kX2NyZWF0aW5nKGRlbnRyeSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybWZzX2Ny ZWF0ZV9maWxlKTsKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fY3JlYXRlX2Rpcihjb25zdCBj aGFyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJCQkJICAgY29uc3Qgc3RydWN0IGlu b2RlX29wZXJhdGlvbnMgKm9wcykKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBzdGFydF9j cmVhdGluZyhuYW1lLCBwYXJlbnQpOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlpZiAoSVNf RVJSKGRlbnRyeSkpCisJCXJldHVybiBOVUxMOworCisJaW5vZGUgPSBkcm1mc19nZXRfaW5vZGUo ZGVudHJ5LT5kX3NiKTsKKwlpZiAodW5saWtlbHkoIWlub2RlKSkKKwkJcmV0dXJuIGZhaWxlZF9j cmVhdGluZyhkZW50cnkpOworCisJaW5vZGUtPmlfbW9kZSA9IFNfSUZESVIgfCBTX0lSV1hVIHwg U19JUlVHTyB8IFNfSVhVR087CisJaW5vZGUtPmlfb3AgPSBvcHM7CisJaW5vZGUtPmlfZm9wID0g JnNpbXBsZV9kaXJfb3BlcmF0aW9uczsKKworCS8qIGRpcmVjdG9yeSBpbm9kZXMgc3RhcnQgb2Zm IHdpdGggaV9ubGluayA9PSAyIChmb3IgIi4iIGVudHJ5KSAqLworCWluY19ubGluayhpbm9kZSk7 CisJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKwlpbmNfbmxpbmsoZGVudHJ5LT5kX3Bh cmVudC0+ZF9pbm9kZSk7CisJZnNub3RpZnlfbWtkaXIoZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9k ZSwgZGVudHJ5KTsKKwlyZXR1cm4gZW5kX2NyZWF0aW5nKGRlbnRyeSk7Cit9CisKKy8qKgorICog ZHJtZnNfY3JlYXRlX2RpciAtIGNyZWF0ZSBhIGRpcmVjdG9yeSBpbiB0aGUgZHJtZnMgZmlsZXN5 c3RlbQorICogQG5hbWU6IGEgcG9pbnRlciB0byBhIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1l IG9mIHRoZSBkaXJlY3RvcnkgdG8KKyAqICAgICAgICBjcmVhdGUuCisgKiBAcGFyZW50OiBhIHBv aW50ZXIgdG8gdGhlIHBhcmVudCBkZW50cnkgZm9yIHRoaXMgZmlsZS4gIFRoaXMgc2hvdWxkIGJl IGEKKyAqICAgICAgICAgIGRpcmVjdG9yeSBkZW50cnkgaWYgc2V0LiAgSWYgdGhpcyBwYXJhbWV0 ZXIgaXMgTlVMTCwgdGhlbiB0aGUKKyAqICAgICAgICAgIGRpcmVjdG9yeSB3aWxsIGJlIGNyZWF0 ZWQgaW4gdGhlIHJvb3Qgb2YgdGhlIGRybWZzIGZpbGVzeXN0ZW0uCisgKgorICogVGhpcyBmdW5j dGlvbiBjcmVhdGVzIGEgZGlyZWN0b3J5IGluIGRybWZzIHdpdGggdGhlIGdpdmVuIG5hbWUuCisg KgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIHBvaW50ZXIgdG8gYSBkZW50cnkgaWYg aXQgc3VjY2VlZHMuICBUaGlzCisgKiBwb2ludGVyIG11c3QgYmUgcGFzc2VkIHRvIHRoZSBkcm1m c19yZW1vdmUoKSBmdW5jdGlvbiB3aGVuIHRoZSBmaWxlIGlzCisgKiB0byBiZSByZW1vdmVkLiBJ ZiBhbiBlcnJvciBvY2N1cnMsICVOVUxMIHdpbGwgYmUgcmV0dXJuZWQuCisgKgorICovCitzdHJ1 Y3QgZGVudHJ5ICpkcm1mc19jcmVhdGVfZGlyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZW50 cnkgKnBhcmVudCkKK3sKKwlyZXR1cm4gX19jcmVhdGVfZGlyKG5hbWUsIHBhcmVudCwgJnNpbXBs ZV9kaXJfaW5vZGVfb3BlcmF0aW9ucyk7Cit9CitFWFBPUlRfU1lNQk9MKGRybWZzX2NyZWF0ZV9k aXIpOworCitzdGF0aWMgaW50IF9fZHJtZnNfcmVtb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwg c3RydWN0IGRlbnRyeSAqcGFyZW50KQoreworCWludCByZXQgPSAwOworCisJaWYgKHNpbXBsZV9w b3NpdGl2ZShkZW50cnkpKSB7CisJCWlmIChkZW50cnktPmRfaW5vZGUpIHsKKwkJCWRnZXQoZGVu dHJ5KTsKKwkJCXN3aXRjaCAoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUgJiBTX0lGTVQpIHsKKwkJ CWNhc2UgU19JRkRJUjoKKwkJCQlyZXQgPSBzaW1wbGVfcm1kaXIocGFyZW50LT5kX2lub2RlLCBk ZW50cnkpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzaW1wbGVfdW5saW5rKHBhcmVu dC0+ZF9pbm9kZSwgZGVudHJ5KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICghcmV0KQorCQkJ CWRfZGVsZXRlKGRlbnRyeSk7CisJCQlkcHV0KGRlbnRyeSk7CisJCX0KKwl9CisJcmV0dXJuIHJl dDsKK30KKworCisvKioKKyAqIGRybWZzX3JlbW92ZSAtIHJlbW92ZXMgYSBmaWxlIG9yIGRpcmVj dG9yeSBmcm9tIHRoZSBkcm1mcyBmaWxlc3lzdGVtCisgKiBAZGVudHJ5OiBhIHBvaW50ZXIgdG8g YSB0aGUgZGVudHJ5IG9mIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSB0byBiZQorICogICAgICAgICAg cmVtb3ZlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYSBmaWxlIG9yIGRpcmVjdG9y eSBpbiBkcm1mcyB0aGF0IHdhcyBwcmV2aW91c2x5CisgKiBjcmVhdGVkIHdpdGggYSBjYWxsIHRv IGFub3RoZXIgZHJtZnMgZnVuY3Rpb24gKGxpa2UKKyAqIGRybWZzX2NyZWF0ZV9maWxlKCkgb3Ig dmFyaWFudHMgdGhlcmVvZi4pCisgKi8KK3ZvaWQgZHJtZnNfcmVtb3ZlKHN0cnVjdCBkZW50cnkg KmRlbnRyeSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7CisJaW50IHJldDsKKworCWlmIChJ U19FUlJfT1JfTlVMTChkZW50cnkpKQorCQlyZXR1cm47CisKKwlwYXJlbnQgPSBkZW50cnktPmRf cGFyZW50OworCWlub2RlX2xvY2socGFyZW50LT5kX2lub2RlKTsKKwlyZXQgPSBfX2RybWZzX3Jl bW92ZShkZW50cnksIHBhcmVudCk7CisJaW5vZGVfdW5sb2NrKHBhcmVudC0+ZF9pbm9kZSk7CisJ aWYgKCFyZXQpCisJCXNpbXBsZV9yZWxlYXNlX2ZzKCZkcm1mc19tb3VudCwgJmRybWZzX21vdW50 X2NvdW50KTsKK30KK0VYUE9SVF9TWU1CT0woZHJtZnNfcmVtb3ZlKTsKKworLyoqCisgKiBkcm1m c19yZW1vdmVfcmVjdXJzaXZlIC0gcmVjdXJzaXZlbHkgcmVtb3ZlcyBhIGRpcmVjdG9yeQorICog QGRlbnRyeTogYSBwb2ludGVyIHRvIGEgdGhlIGRlbnRyeSBvZiB0aGUgZGlyZWN0b3J5IHRvIGJl IHJlbW92ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZWN1cnNpdmVseSByZW1vdmVzIGEgZGly ZWN0b3J5IHRyZWUgaW4gZHJtZnMgdGhhdAorICogd2FzIHByZXZpb3VzbHkgY3JlYXRlZCB3aXRo IGEgY2FsbCB0byBhbm90aGVyIGRybWZzIGZ1bmN0aW9uCisgKiAobGlrZSBkcm1mc19jcmVhdGVf ZmlsZSgpIG9yIHZhcmlhbnRzIHRoZXJlb2YuKQorICovCit2b2lkIGRybWZzX3JlbW92ZV9yZWN1 cnNpdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBkZW50cnkgKmNoaWxkLCAq cGFyZW50OworCisJaWYgKElTX0VSUl9PUl9OVUxMKGRlbnRyeSkpCisJCXJldHVybjsKKworCXBh cmVudCA9IGRlbnRyeTsKKyBkb3duOgorCWlub2RlX2xvY2socGFyZW50LT5kX2lub2RlKTsKKyBs b29wOgorCS8qCisJICogVGhlIHBhcmVudC0+ZF9zdWJkaXJzIGlzIHByb3RlY3RlZCBieSB0aGUg ZF9sb2NrLiBPdXRzaWRlIHRoYXQKKwkgKiBsb2NrLCB0aGUgY2hpbGQgY2FuIGJlIHVubGlua2Vk IGFuZCBzZXQgdG8gYmUgZnJlZWQgd2hpY2ggY2FuCisJICogdXNlIHRoZSBkX3UuZF9jaGlsZCBh cyB0aGUgcmN1IGhlYWQgYW5kIGNvcnJ1cHQgdGhpcyBsaXN0LgorCSAqLworCXNwaW5fbG9jaygm cGFyZW50LT5kX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZwYXJlbnQtPmRf c3ViZGlycywgZF9jaGlsZCkgeworCQlpZiAoIXNpbXBsZV9wb3NpdGl2ZShjaGlsZCkpCisJCQlj b250aW51ZTsKKworCQkvKiBwZXJoYXBzIHNpbXBsZV9lbXB0eShjaGlsZCkgbWFrZXMgbW9yZSBz ZW5zZSAqLworCQlpZiAoIWxpc3RfZW1wdHkoJmNoaWxkLT5kX3N1YmRpcnMpKSB7CisJCQlzcGlu X3VubG9jaygmcGFyZW50LT5kX2xvY2spOworCQkJaW5vZGVfdW5sb2NrKHBhcmVudC0+ZF9pbm9k ZSk7CisJCQlwYXJlbnQgPSBjaGlsZDsKKwkJCWdvdG8gZG93bjsKKwkJfQorCisJCXNwaW5fdW5s b2NrKCZwYXJlbnQtPmRfbG9jayk7CisKKwkJaWYgKCFfX2RybWZzX3JlbW92ZShjaGlsZCwgcGFy ZW50KSkKKwkJCXNpbXBsZV9yZWxlYXNlX2ZzKCZkcm1mc19tb3VudCwgJmRybWZzX21vdW50X2Nv dW50KTsKKworCQkvKgorCQkgKiBUaGUgcGFyZW50LT5kX2xvY2sgcHJvdGVjdHMgYWdhaW5zdCBj aGlsZCBmcm9tIHVubGlua2luZworCQkgKiBmcm9tIGRfc3ViZGlycy4gV2hlbiByZWxlYXNpbmcg dGhlIHBhcmVudC0+ZF9sb2NrIHdlIGNhbgorCQkgKiBubyBsb25nZXIgdHJ1c3QgdGhhdCB0aGUg bmV4dCBwb2ludGVyIGlzIHZhbGlkLgorCQkgKiBSZXN0YXJ0IHRoZSBsb29wLiBXZSdsbCBza2lw IHRoaXMgb25lIHdpdGggdGhlCisJCSAqIHNpbXBsZV9wb3NpdGl2ZSgpIGNoZWNrLgorCQkgKi8K KwkJZ290byBsb29wOworCX0KKwlzcGluX3VubG9jaygmcGFyZW50LT5kX2xvY2spOworCisJaW5v ZGVfdW5sb2NrKHBhcmVudC0+ZF9pbm9kZSk7CisJY2hpbGQgPSBwYXJlbnQ7CisJcGFyZW50ID0g cGFyZW50LT5kX3BhcmVudDsKKwlpbm9kZV9sb2NrKHBhcmVudC0+ZF9pbm9kZSk7CisKKwlpZiAo Y2hpbGQgIT0gZGVudHJ5KQorCQkvKiBnbyB1cCAqLworCQlnb3RvIGxvb3A7CisKKwlpZiAoIV9f ZHJtZnNfcmVtb3ZlKGNoaWxkLCBwYXJlbnQpKQorCQlzaW1wbGVfcmVsZWFzZV9mcygmZHJtZnNf bW91bnQsICZkcm1mc19tb3VudF9jb3VudCk7CisJaW5vZGVfdW5sb2NrKHBhcmVudC0+ZF9pbm9k ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybWZzX3JlbW92ZV9yZWN1cnNpdmUpOworCisvKioKKyAq IGRybWZzX2luaXRpYWxpemVkIC0gVGVsbHMgd2hldGhlciBkcm1mcyBoYXMgYmVlbiByZWdpc3Rl cmVkCisgKi8KK2Jvb2wgZHJtZnNfaW5pdGlhbGl6ZWQodm9pZCkKK3sKKwlyZXR1cm4gZHJtZnNf cmVnaXN0ZXJlZDsKK30KK0VYUE9SVF9TWU1CT0woZHJtZnNfaW5pdGlhbGl6ZWQpOworCitpbnQg ZHJtZnNfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBzeXNmc19jcmVh dGVfbW91bnRfcG9pbnQoa2VybmVsX2tvYmosICJkcm0iKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1 cm4gLUVJTlZBTDsKKworCXJldHZhbCA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmRybV9mc190eXBl KTsKKwlpZiAoIXJldHZhbCkKKwkJZHJtZnNfcmVnaXN0ZXJlZCA9IHRydWU7CisKKwlyZXR1cm4g cmV0dmFsOworfQorCit2b2lkIGRybWZzX2Zpbmkodm9pZCkKK3sKKwl1bnJlZ2lzdGVyX2ZpbGVz eXN0ZW0oJmRybV9mc190eXBlKTsKKworCWRybWZzX3JlZ2lzdGVyZWQgPSBmYWxzZTsKKworCXN5 c2ZzX3JlbW92ZV9tb3VudF9wb2ludChrZXJuZWxfa29iaiwgImRybSIpOworfQpkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9kcm0vZHJtZnMuaCBiL2luY2x1ZGUvZHJtL2RybWZzLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRmMTZiYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1 ZGUvZHJtL2RybWZzLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE0 IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS CisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNP RlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKglTd2F0aSBEaGluZ3JhIDxzd2F0aS5kaGluZ3Jh QGludGVsLmNvbT4KKyAqCVNvdXJhYiBHdXB0YSA8c291cmFiLmd1cHRhQGludGVsLmNvbT4KKyAq CUFrYXNoIEdvZWwgPGFrYXNoLmdvZWxAaW50ZWwuY29tPgorICovCisKKyNpZm5kZWYgX0RSTUZT X0hfCisjZGVmaW5lIF9EUk1GU19IXworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRl IDxsaW51eC9zZXFfZmlsZS5oPgorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0 IGZpbGVfb3BlcmF0aW9uczsKKworI2lmZGVmIENPTkZJR19EUk1GUworCitzdHJ1Y3QgZGVudHJ5 ICpkcm1mc19jcmVhdGVfZmlsZShjb25zdCBjaGFyICpuYW1lLCB1bW9kZV90IG1vZGUsCisJCQkJ ICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LCB2b2lkICpkYXRhLAorCQkJCSAgIGNvbnN0IHN0cnVj dCBmaWxlX29wZXJhdGlvbnMgKmZvcHMpOworCitzdHJ1Y3QgZGVudHJ5ICpkcm1mc19jcmVhdGVf ZGlyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKnBhcmVudCk7CisKK3ZvaWQgZHJt ZnNfcmVtb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Cit2b2lkIGRybWZzX3JlbW92ZV9yZWN1 cnNpdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKKworYm9vbCBkcm1mc19pbml0aWFsaXplZCh2 b2lkKTsKK2ludCBkcm1mc19pbml0KHZvaWQpOwordm9pZCBkcm1mc19maW5pKHZvaWQpOworCisj ZWxzZQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZW50cnkgKmRybWZzX2NyZWF0ZV9maWxlKGNv bnN0IGNoYXIgKm5hbWUsIHVtb2RlX3QgbW9kZSwKKwkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpwYXJl bnQsIHZvaWQgKmRhdGEsCisJCQkJICAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9w cykKK3sKKwlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1 Y3QgZGVudHJ5ICpkcm1mc19jcmVhdGVfZGlyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZW50 cnkgKnBhcmVudCkKK3sKKwlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKK30KKworc3RhdGljIGlu bGluZSB2b2lkIGRybWZzX3JlbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpe30KK3N0YXRpYyBp bmxpbmUgdm9pZCBkcm1mc19yZW1vdmVfcmVjdXJzaXZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSl7 fQorCitzdGF0aWMgaW5saW5lIGJvb2wgZHJtZnNfaW5pdGlhbGl6ZWQodm9pZCl7cmV0dXJuIGZh bHNlO30KK3N0YXRpYyBpbmxpbmUgaW50IGRybWZzX2luaXQodm9pZCl7cmV0dXJuIC1FSU5WQUw7 fQorc3RhdGljIGlubGluZSB2b2lkIGRybWZzX2Zpbmkodm9pZCl7fQorCisjZW5kaWYgLyogQ09O RklHX0RSTUZTICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21h Z2ljLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWFnaWMuaAppbmRleCA5YmQ1NTk0Li5lZjAxZWI3 IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWFnaWMuaAorKysgYi9pbmNsdWRlL3Vh cGkvbGludXgvbWFnaWMuaApAQCAtNjEsNiArNjEsOSBAQAogI2RlZmluZSBTVEFDS19FTkRfTUFH SUMJCTB4NTdBQzZFOUQKIAogI2RlZmluZSBUUkFDRUZTX01BR0lDICAgICAgICAgIDB4NzQ3MjYx NjMKKyNkZWZpbmUgRFJNRlNfTUFHSUMJICAgICAgIDB4ODQ3MjQxNDMgICAgICAvKiBzb21lIHJh bmRvbSBudW1iZXIuCisJCQkJCQkqIElzIHRoZXJlIGEgYmV0dGVyIHdheT8KKwkJCQkJCSovCiAK ICNkZWZpbmUgVjlGU19NQUdJQwkJMHgwMTAyMTk5NwogCi0tIAoyLjcuNAoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==