From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Young Subject: [PATCH v4 10/12] x86: export x86 boot_params to sysfs Date: Tue, 26 Nov 2013 13:57:55 +0800 Message-ID: <1385445477-9665-11-git-send-email-dyoung@redhat.com> References: <1385445477-9665-1-git-send-email-dyoung@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1385445477-9665-1-git-send-email-dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "kexec" Errors-To: kexec-bounces+glkk-kexec=m.gmane.org-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org To: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: mjg59-1xO5oi07KQx4cg9Nei1l7Q@public.gmane.org, linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, toshi.kani-VXdhtT5mjnY@public.gmane.org, matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy@public.gmane.org, greg-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org, x86-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, James.Bottomley-d9PhHud1JfjCXq6kfMZ53/egYHeGw8Jk@public.gmane.org, horms-/R6kz+dDXgpPR4JQBCEnsQ@public.gmane.org, bp-Gina5bIWoIWzQB+pC5nmwQ@public.gmane.org, ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org, hpa-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org, vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org List-Id: linux-efi@vger.kernel.org a2V4ZWMtdG9vbHMgdXNlIGJvb3RfcGFyYW1zIGZvciBnZXR0aW5nIHRoZSAxc3Qga2VybmVsIGhh cmR3YXJlX3N1YmFyY2gsCnRoZSBrZXhlYyBrZXJuZWwgZWZpIHJ1bnRpbWUgc3VwcG9ydCBhbHNv IG5lZWQgcmVhZCB0aGUgb2xkIGVmaV9pbmZvIGZyb20KYm9vdF9wYXJhbXMuIEN1cnJlbnRseSBp dCBleGlzdHMgaW4gZGVidWdmcyB3aGljaCBpcyBub3QgYSBnb29kIHBsYWNlIGZvcgpzdWNoIGlu Zm9tYXRpb24uIFBlciBIUEEsIHdlIHNob3VsZCBhdm9pZCBvZiAic3Bsb2l0IGRlYnVnZnMiLgoK SW4gdGhpcyBwYXRjaCAvc3lzL2tlcm5lbC9ib290X3BhcmFtcyBhcmUgZXhwb3J0ZWQsIGFsc28g dGhlIHNldHVwX2RhdGEKaXMgZXhwb3J0ZWQgYXMgYSBzdWJkaXJlY3RvcnkuIEZvciBvcmlnaW5h bCBkZWJ1Z2ZzIHNpbmNlIGl0J3MgYWxyZWFkeQp0aGVyZSBmb3IgbG9uZyB0aW1lIGFuZCBrZXhl Yy10b29scyBpcyB1c2luZyBpdCBmb3IgaGFyZHdhcmVfc3ViYXJjaCBzbwpsZXQncyBkbyBub3Qg cmVtb3ZlIHRoZW0gZm9yIG5vdy4KClN0cnVjdHVyZSBhcmUgbGlrZSBiZWxvdzoKCi9zeXMva2Vy bmVsL2Jvb3RfcGFyYW1zCuKUnOKUgOKUgCBkYXRhCQkvKiBiaW5hcnkgZGF0YSBmb3IgYm9vdF9w YXJhbXMgKi8K4pSc4pSA4pSAIHNldHVwX2RhdGEgIAkvKiBzdWJkaXJlY3RvcnkgZm9yIHNldHVw X2RhdGEgaWYgdGhlcmUncyBhbnkgKi8K4pSCwqDCoCDilJzilIDilIAgMAkJLyogdGhlIGZpcnN0 IHNldHVwX2RhdGEgbm9kZSAqLwrilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGRhdGEJLyogYmlu YXJ5IGRhdGEgZm9yIHNldHVwX2RhdGEgbm9kZSAwICovCuKUgsKgwqAg4pSCwqDCoCDilJTilIDi lIAgdHlwZQkvKiBzZXR1cF9kYXRhIHR5cGUgb2Ygc2V0dXBfZGF0YSBub2RlIDAsIGhleCBzdHJp bmcgKi8KfCAgIFtzbmlwXQkJLyogb3RoZXIgc2V0dXBfZGF0YSBub2RlcyAuLi4gKi8K4pSU4pSA 4pSAIHZlcnNpb24JCS8qIGhleCBzdHJpbmcgZm9yIGJvb3QgcHJvdG9jYWwgdmVyc2lvbiAqLwoK Q2hhbmdlbG9nOgpHcmVnOiB1c2UgX19BVFRSX1JPKCkgYW5kIGdyb3VwIGF0dHIuCgpTaWduZWQt b2ZmLWJ5OiBEYXZlIFlvdW5nIDxkeW91bmdAcmVkaGF0LmNvbT4KLS0tCiBEb2N1bWVudGF0aW9u L0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1ib290X3BhcmFtcyB8ICA0MCArKysKIGFyY2gveDg2 L2tlcm5lbC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBhcmNo L3g4Ni9rZXJuZWwva3N5c2ZzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMzOSArKysr KysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMzgwIGluc2VydGlvbnMoKyksIDEg ZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5n L3N5c2ZzLWtlcm5lbC1ib290X3BhcmFtcwogY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gveDg2L2tl cm5lbC9rc3lzZnMuYwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lz ZnMta2VybmVsLWJvb3RfcGFyYW1zIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1r ZXJuZWwtYm9vdF9wYXJhbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAx NGE5MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMt a2VybmVsLWJvb3RfcGFyYW1zCkBAIC0wLDAgKzEsNDAgQEAKK1doYXQ6CQkvc3lzL2tlcm5lbC9i b290X3BhcmFtcworRGF0ZToJCU5vdmVtYmVyIDIwMTMKK0NvbnRhY3Q6CURhdmUgWW91bmcgPGR5 b3VuZ0ByZWRoYXQuY29tPgorRGVzY3JpcHRpb246CisJCVRoZSAvc3lzL2tlcm5lbC9ib290X3Bh cmFtcyBkaXJlY3RvcnkgY29udGFpbnMgdHdvCisJCWZpbGVzOiAiZGF0YSIgYW5kICJ2ZXJzaW9u IiBhbmQgb25lIHN1YmRpcmVjdG9yeSAic2V0dXBfZGF0YSIuCisJCUl0IGlzIHVzZWQgdG8gZXhw b3J0IHRoZSBrZXJuZWwgYm9vdCBwYXJhbWV0ZXJzIG9mIHg4NgorCQlwbGF0Zm9ybSB0byB1c2Vy IHNwYWNlIGZvciBrZXhlYyBhbmQgZGVidWdnaW5nIHB1cnBvc2UuCisKKwkJSWYgdGhlcmUncyBu byBzZXR1cF9kYXRhIGluIGJvb3RfcGFyYW1zIHRoZSBzdWJkaXJlY3Rvcnkgd2lsbAorCQlub3Qg YmUgY3JlYXRlZC4KKworCQkiZGF0YSIgZmlsZSBpcyB0aGUgYmluYXJ5IHJlcHJlc2VudGF0aW9u IG9mIHN0cnVjdCBib290X3BhcmFtcy4KKworCQkidmVyc2lvbiIgZmlsZSBpcyB0aGUgc3RyaW5n IHJlcHJlc2VudGF0aW9uIG9mIGJvb3QKKwkJcHJvdG9jb2wgdmVyc2lvbi4KKworCQkic2V0dXBf ZGF0YSIgc3ViZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBzZXR1cF9kYXRhIGRhdGEKKwkJc3RydWN0 dXJlIGluIGJvb3RfcGFyYW1zLiBzZXR1cF9kYXRhIGlzIG1haW50YWluZWQgaW4ga2VybmVsCisJ CWFzIGEgbGluayBsaXN0LiBJbiAic2V0dXBfZGF0YSIgc3ViZGlyZWN0b3J5IHRoZXJlJ3Mgb25l CisJCXN1YmRpcmVjdG9yeSBmb3IgZWFjaCBsaW5rIGxpc3Qgbm9kZSBuYW1lZCB3aXRoIHRoZSBu dW1iZXIKKwkJb2YgdGhlIGxpc3Qgbm9kZXMuIFRoZSBsaXN0IG5vZGUgc3ViZGlyZWN0b3J5IGNv bnRhaW5zIHR3bworCQlmaWxlcyAidHlwZSIgYW5kICJkYXRhIi4gInR5cGUiIGZpbGUgaXMgdGhl IHN0cmluZworCQlyZXByZXNlbnRhdGlvbiBvZiBzZXR1cF9kYXRhIHR5cGUuICJkYXRhIiBmaWxl IGlzIHRoZSBiaW5hcnkKKwkJcmVwcmVzZW50YXRpb24gb2Ygc2V0dXBfZGF0YSBwYXlsb2FkLgor CisJCVRoZSB3aG9sZSBib290X3BhcmFtcyBkaXJlY3Rvcnkgc3RydWN0dXJlIGlzIGxpa2UgYmVs b3c6CisJCS9zeXMva2VybmVsL2Jvb3RfcGFyYW1zCisJCeKUnOKUgOKUgCBkYXRhCisJCeKUnOKU gOKUgCBzZXR1cF9kYXRhCisJCeKUgsKgwqAg4pSc4pSA4pSAIDAKKwkJ4pSCwqDCoCDilILCoMKg IOKUnOKUgOKUgCBkYXRhCisJCeKUgsKgwqAg4pSCwqDCoCDilJTilIDilIAgdHlwZQorCQnilILC oMKgIOKUlOKUgOKUgCAxCisJCeKUgsKgwqAgICAgIOKUnOKUgOKUgCBkYXRhCisJCeKUgsKgwqAg ICAgIOKUlOKUgOKUgCB0eXBlCisJCeKUlOKUgOKUgCB2ZXJzaW9uCisKK1VzZXJzOgorCQlLZXhl YyBNYWlsaW5nIExpc3QgPGtleGVjQGxpc3RzLmluZnJhZGVhZC5vcmc+CmRpZmYgLS1naXQgYS9h cmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKaW5kZXgg YTU0MDhiOS4uNDczYTRiYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCisr KyBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQpAQCAtMzUsNyArMzUsNyBAQCBvYmoteQkJCSs9 IGFsdGVybmF0aXZlLm8gaTgyNTMubyBwY2ktbm9tbXUubyBod19icmVha3BvaW50Lm8KIG9iai15 CQkJKz0gdHNjLm8gaW9fZGVsYXkubyBydGMubwogb2JqLXkJCQkrPSBwY2ktaW9tbXVfdGFibGUu bwogb2JqLXkJCQkrPSByZXNvdXJjZS5vCi0KK29iai0kKENPTkZJR19TWVNGUykJKz0ga3N5c2Zz Lm8KIG9iai15CQkJCSs9IHByb2Nlc3Mubwogb2JqLXkJCQkJKz0gaTM4Ny5vIHhzYXZlLm8KIG9i ai15CQkJCSs9IHB0cmFjZS5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3N5c2ZzLmMg Yi9hcmNoL3g4Ni9rZXJuZWwva3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uM2Y5MTIwNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rc3lzZnMu YwpAQCAtMCwwICsxLDMzOSBAQAorLyoKKyAqIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBzeXNmcyBh dHRyaWJ1dGVzIGluIC9zeXMva2VybmVsCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCBJbnRl bCBDb3JwLgorICogICAgICBIdWFuZyBZaW5nIDx5aW5nLmh1YW5nQGludGVsLmNvbT4KKyAqIENv cHlyaWdodCAoQykgMjAxMywgMjAxMyBSZWQgSGF0LCBJbmMuCisgKiAgICAgIERhdmUgWW91bmcg PGR5b3VuZ0ByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0 aGUgR1BMdjIKKyAqLworCisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxp bnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgv aW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+ CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorCitzdGF0 aWMgc3NpemVfdCB2ZXJzaW9uX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJCXN0cnVj dCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1 ZiwgIjB4JTA0eFxuIiwgYm9vdF9wYXJhbXMuaGRyLnZlcnNpb24pOworfQorCitzdGF0aWMgc3Ry dWN0IGtvYmpfYXR0cmlidXRlIGJvb3RfcGFyYW1zX3ZlcnNpb25fYXR0ciA9IF9fQVRUUl9STyh2 ZXJzaW9uKTsKKworc3RhdGljIHNzaXplX3QgYm9vdF9wYXJhbXNfZGF0YV9yZWFkKHN0cnVjdCBm aWxlICpmcCwgc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgICBzdHJ1Y3QgYmluX2F0dHJp YnV0ZSAqYmluX2F0dHIsCisJCQkJICAgICBjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBj b3VudCkKK3sKKwltZW1jcHkoYnVmLCAodm9pZCAqKSZib290X3BhcmFtcyArIG9mZiwgY291bnQp OworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIGJvb3Rf cGFyYW1zX2RhdGFfYXR0ciA9IHsKKwkuYXR0ciA9IHsKKwkJLm5hbWUgPSAiZGF0YSIsCisJCS5t b2RlID0gU19JUlVHTywKKwl9LAorCS5yZWFkID0gYm9vdF9wYXJhbXNfZGF0YV9yZWFkLAorCS5z aXplID0gc2l6ZW9mKGJvb3RfcGFyYW1zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRl ICpib290X3BhcmFtc192ZXJzaW9uX2F0dHJzW10gPSB7CisJJmJvb3RfcGFyYW1zX3ZlcnNpb25f YXR0ci5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJv b3RfcGFyYW1zX2RhdGFfYXR0cnNbXSA9IHsKKwkmYm9vdF9wYXJhbXNfZGF0YV9hdHRyLAorCU5V TEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBib290X3BhcmFtc19hdHRy X2dyb3VwID0geworCS5hdHRycyA9IGJvb3RfcGFyYW1zX3ZlcnNpb25fYXR0cnMsCisJLmJpbl9h dHRycyA9IGJvb3RfcGFyYW1zX2RhdGFfYXR0cnMsCit9OworCitzdGF0aWMgaW50IGtvYmpfdG9f c2V0dXBfZGF0YV9ucihzdHJ1Y3Qga29iamVjdCAqa29iaiwgaW50ICpucikKK3sKKwljb25zdCBj aGFyICpuYW1lOworCisJbmFtZSA9IGtvYmplY3RfbmFtZShrb2JqKTsKKwlyZXR1cm4ga3N0cnRv aW50KG5hbWUsIDEwLCBucik7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3NldHVwX2RhdGFfcGFkZHIo aW50IG5yLCB1NjQgKnBhZGRyKQoreworCWludCBpID0gMDsKKwlzdHJ1Y3Qgc2V0dXBfZGF0YSAq ZGF0YTsKKwl1NjQgcGFfZGF0YSA9IGJvb3RfcGFyYW1zLmhkci5zZXR1cF9kYXRhOworCisJd2hp bGUgKHBhX2RhdGEpIHsKKwkJaWYgKG5yID09IGkpIHsKKwkJCSpwYWRkciA9IHBhX2RhdGE7CisJ CQlyZXR1cm4gMDsKKwkJfQorCQlkYXRhID0gaW9yZW1hcF9jYWNoZShwYV9kYXRhLCBzaXplb2Yo KmRhdGEpKTsKKwkJaWYgKCFkYXRhKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcGFfZGF0YSA9 IGRhdGEtPm5leHQ7CisJCWlvdW5tYXAoZGF0YSk7CisJCWkrKzsKKwl9CisJcmV0dXJuIC1FSU5W QUw7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGdldF9zZXR1cF9kYXRhX3NpemUoaW50IG5yLCBz aXplX3QgKnNpemUpCit7CisJaW50IGkgPSAwOworCXN0cnVjdCBzZXR1cF9kYXRhICpkYXRhOwor CXU2NCBwYV9kYXRhID0gYm9vdF9wYXJhbXMuaGRyLnNldHVwX2RhdGE7CisKKwl3aGlsZSAocGFf ZGF0YSkgeworCQlkYXRhID0gaW9yZW1hcF9jYWNoZShwYV9kYXRhLCBzaXplb2YoKmRhdGEpKTsK KwkJaWYgKCFkYXRhKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWlmIChuciA9PSBpKSB7CisJCQkq c2l6ZSA9IGRhdGEtPmxlbjsKKwkJCWlvdW5tYXAoZGF0YSk7CisJCQlyZXR1cm4gMDsKKwkJfQor CisJCXBhX2RhdGEgPSBkYXRhLT5uZXh0OworCQlpb3VubWFwKGRhdGEpOworCQlpKys7CisJfQor CXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgc3NpemVfdCB0eXBlX3Nob3coc3RydWN0IGtv YmplY3QgKmtvYmosCisJCQkJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVm KQoreworCWludCBuciwgcmV0OworCXU2NCBwYWRkcjsKKwlzdHJ1Y3Qgc2V0dXBfZGF0YSAqZGF0 YTsKKworCXJldCA9IGtvYmpfdG9fc2V0dXBfZGF0YV9ucihrb2JqLCAmbnIpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBnZXRfc2V0dXBfZGF0YV9wYWRkcihuciwgJnBhZGRy KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWRhdGEgPSBpb3JlbWFwX2NhY2hlKHBhZGRy LCBzaXplb2YoKmRhdGEpKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0 ID0gc3ByaW50ZihidWYsICIweCV4XG4iLCBkYXRhLT50eXBlKTsKKwlpb3VubWFwKGRhdGEpOwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldHVwX2RhdGFfZGF0YV9yZWFkKHN0 cnVjdCBmaWxlICpmcCwKKwkJCQkgICAgc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgIHN0 cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKKwkJCQkgICAgY2hhciAqYnVmLAorCQkJCSAg ICBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCit7CisJaW50IG5yLCByZXQgPSAwOworCXU2NCBw YWRkcjsKKwlzdHJ1Y3Qgc2V0dXBfZGF0YSAqZGF0YTsKKwl2b2lkICpwOworCisJcmV0ID0ga29i al90b19zZXR1cF9kYXRhX25yKGtvYmosICZucik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCXJldCA9IGdldF9zZXR1cF9kYXRhX3BhZGRyKG5yLCAmcGFkZHIpOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisJZGF0YSA9IGlvcmVtYXBfY2FjaGUocGFkZHIsIHNpemVvZigqZGF0YSkp OworCWlmICghZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAob2ZmID4gZGF0YS0+bGVu KSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjb3VudCA+IGRh dGEtPmxlbiAtIG9mZikKKwkJY291bnQgPSBkYXRhLT5sZW4gLSBvZmY7CisKKwlpZiAoIWNvdW50 KQorCQlnb3RvIG91dDsKKworCXJldCA9IGNvdW50OworCXAgPSBpb3JlbWFwX2NhY2hlKHBhZGRy ICsgc2l6ZW9mKCpkYXRhKSwgZGF0YS0+bGVuKTsKKwlpZiAoIXApIHsKKwkJcmV0ID0gLUVOT01F TTsKKwkJZ290byBvdXQ7CisJfQorCW1lbWNweShidWYsIHAgKyBvZmYsIGNvdW50KTsKKwlpb3Vu bWFwKHApOworb3V0OgorCWlvdW5tYXAoZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB0eXBlX2F0dHIgPSBfX0FUVFJfUk8odHlwZSk7CisKK3N0 YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBkYXRhX2F0dHIgPSB7CisJLmF0dHIgPSB7CisJCS5u YW1lID0gImRhdGEiLAorCQkubW9kZSA9IFNfSVJVR08sCisJfSwKKwkucmVhZCA9IHNldHVwX2Rh dGFfZGF0YV9yZWFkLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnNldHVwX2RhdGFf dHlwZV9hdHRyc1tdID0geworCSZ0eXBlX2F0dHIuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGlj IHN0cnVjdCBiaW5fYXR0cmlidXRlICpzZXR1cF9kYXRhX2RhdGFfYXR0cnNbXSA9IHsKKwkmZGF0 YV9hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzZXR1 cF9kYXRhX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gc2V0dXBfZGF0YV90eXBlX2F0dHJzLAor CS5iaW5fYXR0cnMgPSBzZXR1cF9kYXRhX2RhdGFfYXR0cnMsCit9OworCitzdGF0aWMgaW50IF9f aW5pdCBjcmVhdGVfc2V0dXBfZGF0YV9ub2RlKHN0cnVjdCBrb2JqZWN0ICpwYXJlbnQsCisJCQkJ CXN0cnVjdCBrb2JqZWN0ICoqa29ianAsIGludCBucikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzaXpl X3Qgc2l6ZTsKKwlzdHJ1Y3Qga29iamVjdCAqa29iajsKKwljaGFyIG5hbWVbMTZdOyAvKiBzaG91 bGQgYmUgZW5vdWdoIGZvciBzZXR1cF9kYXRhIG5vZGVzIG51bWJlcnMgKi8KKwlzbnByaW50Zihu YW1lLCAxNiwgIiVkIiwgbnIpOworCisJa29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQobmFt ZSwgcGFyZW50KTsKKwlpZiAoIWtvYmopCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gZ2V0 X3NldHVwX2RhdGFfc2l6ZShuciwgJnNpemUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2tvYmo7 CisKKwlkYXRhX2F0dHIuc2l6ZSA9IHNpemU7CisJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKGtv YmosICZzZXR1cF9kYXRhX2F0dHJfZ3JvdXApOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2tvYmo7 CisJKmtvYmpwID0ga29iajsKKworCXJldHVybiAwOworb3V0X2tvYmo6CisJa29iamVjdF9wdXQo a29iaik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGNsZWFudXBfc2V0 dXBfZGF0YV9ub2RlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQoreworCXN5c2ZzX3JlbW92ZV9ncm91 cChrb2JqLCAmc2V0dXBfZGF0YV9hdHRyX2dyb3VwKTsKKwlrb2JqZWN0X3B1dChrb2JqKTsKK30K Kworc3RhdGljIGludCBfX2luaXQgZ2V0X3NldHVwX2RhdGFfdG90YWxfbnVtKHU2NCBwYV9kYXRh LCBpbnQgKm5yKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBzZXR1cF9kYXRhICpkYXRhOwor CisJKm5yID0gMDsKKwl3aGlsZSAocGFfZGF0YSkgeworCQkqbnIgKz0gMTsKKwkJZGF0YSA9IGlv cmVtYXBfY2FjaGUocGFfZGF0YSwgc2l6ZW9mKCpkYXRhKSk7CisJCWlmICghZGF0YSkgeworCQkJ cmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXBhX2RhdGEgPSBkYXRhLT5uZXh0 OworCQlpb3VubWFwKGRhdGEpOworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBpbnQgX19pbml0IGNyZWF0ZV9zZXR1cF9kYXRhX25vZGVzKHN0cnVjdCBrb2JqZWN0ICpwYXJl bnQpCit7CisJc3RydWN0IGtvYmplY3QgKnNldHVwX2RhdGFfa29iaiwgKiprb2JqcDsKKwl1NjQg cGFfZGF0YTsKKwlpbnQgaSwgaiwgbnIsIHJldCA9IDA7CisKKwlwYV9kYXRhID0gYm9vdF9wYXJh bXMuaGRyLnNldHVwX2RhdGE7CisJaWYgKCFwYV9kYXRhKQorCQlyZXR1cm4gMDsKKworCXNldHVw X2RhdGFfa29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoInNldHVwX2RhdGEiLCBwYXJlbnQp OworCWlmICghc2V0dXBfZGF0YV9rb2JqKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0 OworCX0KKworCXJldCA9IGdldF9zZXR1cF9kYXRhX3RvdGFsX251bShwYV9kYXRhLCAmbnIpOwor CWlmIChyZXQpCisJCWdvdG8gb3V0X3NldHVwX2RhdGFfa29iajsKKworCWtvYmpwID0ga21hbGxv YyhzaXplb2YoKmtvYmpwKSAqIG5yLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWtvYmpwKSB7CisJCXJl dCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3NldHVwX2RhdGFfa29iajsKKwl9CisKKwlmb3IgKGkg PSAwOyBpIDwgbnI7IGkrKykgeworCQlyZXQgPSBjcmVhdGVfc2V0dXBfZGF0YV9ub2RlKHNldHVw X2RhdGFfa29iaiwga29ianAgKyBpLCBpKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X2NsZWFu X25vZGVzOworCX0KKworCWtmcmVlKGtvYmpwKTsKKwlyZXR1cm4gMDsKKworb3V0X2NsZWFuX25v ZGVzOgorCWZvciAoaiA9IGkgLSAxOyBqID4gMDsgai0tKQorCQljbGVhbnVwX3NldHVwX2RhdGFf bm9kZSgqKGtvYmpwICsgaikpOworCWtmcmVlKGtvYmpwKTsKK291dF9zZXR1cF9kYXRhX2tvYmo6 CisJa29iamVjdF9wdXQoc2V0dXBfZGF0YV9rb2JqKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgaW50IF9faW5pdCBib290X3BhcmFtc19rc3lzZnNfaW5pdCh2b2lkKQoreworCWlu dCByZXQ7CisJc3RydWN0IGtvYmplY3QgKmJvb3RfcGFyYW1zX2tvYmo7CisKKwlib290X3BhcmFt c19rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgiYm9vdF9wYXJhbXMiLAorCQkJCQkJICBr ZXJuZWxfa29iaik7CisJaWYgKCFib290X3BhcmFtc19rb2JqKSB7CisJCXJldCA9IC1FTk9NRU07 CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cChib290X3BhcmFt c19rb2JqLCAmYm9vdF9wYXJhbXNfYXR0cl9ncm91cCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRf Ym9vdF9wYXJhbXNfa29iajsKKworCXJldCA9IGNyZWF0ZV9zZXR1cF9kYXRhX25vZGVzKGJvb3Rf cGFyYW1zX2tvYmopOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2NyZWF0ZV9ncm91cDsKKworCXJl dHVybiAwOworb3V0X2NyZWF0ZV9ncm91cDoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoYm9vdF9wYXJh bXNfa29iaiwgJmJvb3RfcGFyYW1zX2F0dHJfZ3JvdXApOworb3V0X2Jvb3RfcGFyYW1zX2tvYmo6 CisJa29iamVjdF9wdXQoYm9vdF9wYXJhbXNfa29iaik7CitvdXQ6CisJcmV0dXJuIHJldDsKK30K KworYXJjaF9pbml0Y2FsbChib290X3BhcmFtc19rc3lzZnNfaW5pdCk7Ci0tIAoxLjguMy4xCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Ka2V4ZWMgbWFp bGluZyBsaXN0CmtleGVjQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVh ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9rZXhlYwo=