From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mx1.redhat.com ([209.132.183.28]) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1VlBhV-0000pz-Uq for kexec@lists.infradead.org; Tue, 26 Nov 2013 06:00:50 +0000 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> In-Reply-To: <1385445477-9665-1-git-send-email-dyoung@redhat.com> References: <1385445477-9665-1-git-send-email-dyoung@redhat.com> MIME-Version: 1.0 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "kexec" Errors-To: kexec-bounces+dwmw2=twosheds.infradead.org@lists.infradead.org To: linux-kernel@vger.kernel.org Cc: mjg59@srcf.ucam.org, linux-efi@vger.kernel.org, toshi.kani@hp.com, matt@console-pimps.org, greg@kroah.com, x86@kernel.org, kexec@lists.infradead.org, James.Bottomley@HansenPartnership.com, horms@verge.net.au, bp@alien8.de, ebiederm@xmission.com, hpa@zytor.com, vgoyal@redhat.com 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= 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= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754644Ab3KZGA7 (ORCPT ); Tue, 26 Nov 2013 01:00:59 -0500 Received: from mx1.redhat.com ([209.132.183.28]:53951 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754456Ab3KZGAy (ORCPT ); Tue, 26 Nov 2013 01:00:54 -0500 From: Dave Young To: linux-kernel@vger.kernel.org Cc: linux-efi@vger.kernel.org, x86@kernel.org, mjg59@srcf.ucam.org, hpa@zytor.com, James.Bottomley@HansenPartnership.com, vgoyal@redhat.com, ebiederm@xmission.com, horms@verge.net.au, kexec@lists.infradead.org, bp@alien8.de, greg@kroah.com, matt@console-pimps.org, toshi.kani@hp.com 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> In-Reply-To: <1385445477-9665-1-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: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org kexec-tools use boot_params for getting the 1st kernel hardware_subarch, the kexec kernel efi runtime support also need read the old efi_info from boot_params. Currently it exists in debugfs which is not a good place for such infomation. Per HPA, we should avoid of "sploit debugfs". In this patch /sys/kernel/boot_params are exported, also the setup_data is exported as a subdirectory. For original debugfs since it's already there for long time and kexec-tools is using it for hardware_subarch so let's do not remove them for now. Structure are like below: /sys/kernel/boot_params ├── data /* binary data for boot_params */ ├── setup_data /* subdirectory for setup_data if there's any */ │   ├── 0 /* the first setup_data node */ │   │   ├── data /* binary data for setup_data node 0 */ │   │   └── type /* setup_data type of setup_data node 0, hex string */ | [snip] /* other setup_data nodes ... */ └── version /* hex string for boot protocal version */ Changelog: Greg: use __ATTR_RO() and group attr. Signed-off-by: Dave Young --- Documentation/ABI/testing/sysfs-kernel-boot_params | 40 +++ arch/x86/kernel/Makefile | 2 +- arch/x86/kernel/ksysfs.c | 339 +++++++++++++++++++++ 3 files changed, 380 insertions(+), 1 deletion(-) create mode 100644 Documentation/ABI/testing/sysfs-kernel-boot_params create mode 100644 arch/x86/kernel/ksysfs.c diff --git a/Documentation/ABI/testing/sysfs-kernel-boot_params b/Documentation/ABI/testing/sysfs-kernel-boot_params new file mode 100644 index 0000000..8014a93 --- /dev/null +++ b/Documentation/ABI/testing/sysfs-kernel-boot_params @@ -0,0 +1,40 @@ +What: /sys/kernel/boot_params +Date: November 2013 +Contact: Dave Young +Description: + The /sys/kernel/boot_params directory contains two + files: "data" and "version" and one subdirectory "setup_data". + It is used to export the kernel boot parameters of x86 + platform to user space for kexec and debugging purpose. + + If there's no setup_data in boot_params the subdirectory will + not be created. + + "data" file is the binary representation of struct boot_params. + + "version" file is the string representation of boot + protocol version. + + "setup_data" subdirectory contains the setup_data data + structure in boot_params. setup_data is maintained in kernel + as a link list. In "setup_data" subdirectory there's one + subdirectory for each link list node named with the number + of the list nodes. The list node subdirectory contains two + files "type" and "data". "type" file is the string + representation of setup_data type. "data" file is the binary + representation of setup_data payload. + + The whole boot_params directory structure is like below: + /sys/kernel/boot_params + ├── data + ├── setup_data + │   ├── 0 + │   │   ├── data + │   │   └── type + │   └── 1 + │   ├── data + │   └── type + └── version + +Users: + Kexec Mailing List diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile index a5408b9..473a4bb 100644 --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile @@ -35,7 +35,7 @@ obj-y += alternative.o i8253.o pci-nommu.o hw_breakpoint.o obj-y += tsc.o io_delay.o rtc.o obj-y += pci-iommu_table.o obj-y += resource.o - +obj-$(CONFIG_SYSFS) += ksysfs.o obj-y += process.o obj-y += i387.o xsave.o obj-y += ptrace.o diff --git a/arch/x86/kernel/ksysfs.c b/arch/x86/kernel/ksysfs.c new file mode 100644 index 0000000..3f91207 --- /dev/null +++ b/arch/x86/kernel/ksysfs.c @@ -0,0 +1,339 @@ +/* + * Architecture specific sysfs attributes in /sys/kernel + * + * Copyright (C) 2007, Intel Corp. + * Huang Ying + * Copyright (C) 2013, 2013 Red Hat, Inc. + * Dave Young + * + * This file is released under the GPLv2 + */ + +#include +#include +#include +#include +#include +#include +#include + +#include + +static ssize_t version_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + return sprintf(buf, "0x%04x\n", boot_params.hdr.version); +} + +static struct kobj_attribute boot_params_version_attr = __ATTR_RO(version); + +static ssize_t boot_params_data_read(struct file *fp, struct kobject *kobj, + struct bin_attribute *bin_attr, + char *buf, loff_t off, size_t count) +{ + memcpy(buf, (void *)&boot_params + off, count); + return count; +} + +static struct bin_attribute boot_params_data_attr = { + .attr = { + .name = "data", + .mode = S_IRUGO, + }, + .read = boot_params_data_read, + .size = sizeof(boot_params), +}; + +static struct attribute *boot_params_version_attrs[] = { + &boot_params_version_attr.attr, + NULL, +}; + +static struct bin_attribute *boot_params_data_attrs[] = { + &boot_params_data_attr, + NULL, +}; + +static struct attribute_group boot_params_attr_group = { + .attrs = boot_params_version_attrs, + .bin_attrs = boot_params_data_attrs, +}; + +static int kobj_to_setup_data_nr(struct kobject *kobj, int *nr) +{ + const char *name; + + name = kobject_name(kobj); + return kstrtoint(name, 10, nr); +} + +static int get_setup_data_paddr(int nr, u64 *paddr) +{ + int i = 0; + struct setup_data *data; + u64 pa_data = boot_params.hdr.setup_data; + + while (pa_data) { + if (nr == i) { + *paddr = pa_data; + return 0; + } + data = ioremap_cache(pa_data, sizeof(*data)); + if (!data) + return -ENOMEM; + + pa_data = data->next; + iounmap(data); + i++; + } + return -EINVAL; +} + +static int __init get_setup_data_size(int nr, size_t *size) +{ + int i = 0; + struct setup_data *data; + u64 pa_data = boot_params.hdr.setup_data; + + while (pa_data) { + data = ioremap_cache(pa_data, sizeof(*data)); + if (!data) + return -ENOMEM; + if (nr == i) { + *size = data->len; + iounmap(data); + return 0; + } + + pa_data = data->next; + iounmap(data); + i++; + } + return -EINVAL; +} + +static ssize_t type_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + int nr, ret; + u64 paddr; + struct setup_data *data; + + ret = kobj_to_setup_data_nr(kobj, &nr); + if (ret) + return ret; + + ret = get_setup_data_paddr(nr, &paddr); + if (ret) + return ret; + data = ioremap_cache(paddr, sizeof(*data)); + if (!data) + return -ENOMEM; + + ret = sprintf(buf, "0x%x\n", data->type); + iounmap(data); + return ret; +} + +static ssize_t setup_data_data_read(struct file *fp, + struct kobject *kobj, + struct bin_attribute *bin_attr, + char *buf, + loff_t off, size_t count) +{ + int nr, ret = 0; + u64 paddr; + struct setup_data *data; + void *p; + + ret = kobj_to_setup_data_nr(kobj, &nr); + if (ret) + return ret; + + ret = get_setup_data_paddr(nr, &paddr); + if (ret) + return ret; + data = ioremap_cache(paddr, sizeof(*data)); + if (!data) + return -ENOMEM; + + if (off > data->len) { + ret = -EINVAL; + goto out; + } + + if (count > data->len - off) + count = data->len - off; + + if (!count) + goto out; + + ret = count; + p = ioremap_cache(paddr + sizeof(*data), data->len); + if (!p) { + ret = -ENOMEM; + goto out; + } + memcpy(buf, p + off, count); + iounmap(p); +out: + iounmap(data); + return ret; +} + +static struct kobj_attribute type_attr = __ATTR_RO(type); + +static struct bin_attribute data_attr = { + .attr = { + .name = "data", + .mode = S_IRUGO, + }, + .read = setup_data_data_read, +}; + +static struct attribute *setup_data_type_attrs[] = { + &type_attr.attr, + NULL, +}; + +static struct bin_attribute *setup_data_data_attrs[] = { + &data_attr, + NULL, +}; + +static struct attribute_group setup_data_attr_group = { + .attrs = setup_data_type_attrs, + .bin_attrs = setup_data_data_attrs, +}; + +static int __init create_setup_data_node(struct kobject *parent, + struct kobject **kobjp, int nr) +{ + int ret = 0; + size_t size; + struct kobject *kobj; + char name[16]; /* should be enough for setup_data nodes numbers */ + snprintf(name, 16, "%d", nr); + + kobj = kobject_create_and_add(name, parent); + if (!kobj) + return -ENOMEM; + + ret = get_setup_data_size(nr, &size); + if (ret) + goto out_kobj; + + data_attr.size = size; + ret = sysfs_create_group(kobj, &setup_data_attr_group); + if (ret) + goto out_kobj; + *kobjp = kobj; + + return 0; +out_kobj: + kobject_put(kobj); + return ret; +} + +static void __init cleanup_setup_data_node(struct kobject *kobj) +{ + sysfs_remove_group(kobj, &setup_data_attr_group); + kobject_put(kobj); +} + +static int __init get_setup_data_total_num(u64 pa_data, int *nr) +{ + int ret = 0; + struct setup_data *data; + + *nr = 0; + while (pa_data) { + *nr += 1; + data = ioremap_cache(pa_data, sizeof(*data)); + if (!data) { + ret = -ENOMEM; + goto out; + } + pa_data = data->next; + iounmap(data); + } + +out: + return ret; +} + +static int __init create_setup_data_nodes(struct kobject *parent) +{ + struct kobject *setup_data_kobj, **kobjp; + u64 pa_data; + int i, j, nr, ret = 0; + + pa_data = boot_params.hdr.setup_data; + if (!pa_data) + return 0; + + setup_data_kobj = kobject_create_and_add("setup_data", parent); + if (!setup_data_kobj) { + ret = -ENOMEM; + goto out; + } + + ret = get_setup_data_total_num(pa_data, &nr); + if (ret) + goto out_setup_data_kobj; + + kobjp = kmalloc(sizeof(*kobjp) * nr, GFP_KERNEL); + if (!kobjp) { + ret = -ENOMEM; + goto out_setup_data_kobj; + } + + for (i = 0; i < nr; i++) { + ret = create_setup_data_node(setup_data_kobj, kobjp + i, i); + if (ret) + goto out_clean_nodes; + } + + kfree(kobjp); + return 0; + +out_clean_nodes: + for (j = i - 1; j > 0; j--) + cleanup_setup_data_node(*(kobjp + j)); + kfree(kobjp); +out_setup_data_kobj: + kobject_put(setup_data_kobj); +out: + return ret; +} + +static int __init boot_params_ksysfs_init(void) +{ + int ret; + struct kobject *boot_params_kobj; + + boot_params_kobj = kobject_create_and_add("boot_params", + kernel_kobj); + if (!boot_params_kobj) { + ret = -ENOMEM; + goto out; + } + + ret = sysfs_create_group(boot_params_kobj, &boot_params_attr_group); + if (ret) + goto out_boot_params_kobj; + + ret = create_setup_data_nodes(boot_params_kobj); + if (ret) + goto out_create_group; + + return 0; +out_create_group: + sysfs_remove_group(boot_params_kobj, &boot_params_attr_group); +out_boot_params_kobj: + kobject_put(boot_params_kobj); +out: + return ret; +} + +arch_initcall(boot_params_ksysfs_init); -- 1.8.3.1