From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail.skyhub.de ([2a01:4f8:120:8448::d00d]) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1WJRFU-000713-H4 for kexec@lists.infradead.org; Fri, 28 Feb 2014 17:29:29 +0000 Date: Fri, 28 Feb 2014 18:28:57 +0100 From: Borislav Petkov Subject: Re: [PATCH 11/11] kexec: Support for Kexec on panic using new system call Message-ID: <20140228172857.GG4326@pd.tnic> References: <1390849071-21989-1-git-send-email-vgoyal@redhat.com> <1390849071-21989-12-git-send-email-vgoyal@redhat.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1390849071-21989-12-git-send-email-vgoyal@redhat.com> 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: Vivek Goyal Cc: mjg59@srcf.ucam.org, jkosina@suse.cz, greg@kroah.com, kexec@lists.infradead.org, linux-kernel@vger.kernel.org, ebiederm@xmission.com, hpa@zytor.com T24gTW9uLCBKYW4gMjcsIDIwMTQgYXQgMDE6NTc6NTFQTSAtMDUwMCwgVml2ZWsgR295YWwgd3Jv dGU6Cj4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGxvYWRpbmcgYSBrZXhlYyBvbiBwYW5p YyAoa2R1bXApIGtlcm5lbCB1c25pbmcKPiBuZXcgc3lzdGVtIGNhbGwuIFJpZ2h0IG5vdyB0aGlz IHByaW1hcmlseSB3b3JrcyB3aXRoIGJ6SW1hZ2UgbG9hZGVyIG9ubHkuCj4gQnV0IGNoYW5nZXMg dG8gRUxGIGxvYWRlciBzaG91bGQgYmUgbWluaW1hbCBhcyBhbGwgdGhlIGNvcmUgaW5mcmFzdHJj dHVyZQo+IGlzIHRoZXJlLgo+IAo+IE9ubHkgdGhpbmcgcHJldmVudGluZyBtYWtpbmcgRUxGIGxv YWQgaW4gY3Jhc2ggcmVzZXZlZCBtZW1vcnkgaXMKPiB0aGF0IGtlcm5lbCB2bWxpbnV4IGlzIG9m IHR5cGUgRVRfRVhFQyBhbmQgaXQgZXhwZWN0cyB0byBiZSBsb2FkZWQgYXQKPiBhZGRyZXNzIGl0 IGhhcyBiZWVuIGNvbXBpbGVkIGZvci4gQXQgdGhhdCBsb2NhdGlvbiBjdXJyZW50IGtlcm5lbCBp cwo+IGFscmVhZHkgcnVubmluZy4gT25lIGZpcnN0IG5lZWRzIHRvIG1ha2Ugdm1saW51eCBmdWxs eSByZWxvY2F0YWJsZQo+IGFuZCBleHBvcnQgaXQgaXMgdHlwZSBFVF9EWU4gYW5kIHRoZW4gbW9k aWZ5IHRoaXMgRUxGIGxvYWRlciB0byBzdXBwb3J0Cj4gaW1hZ2VzIG9mIHR5cGUgRVRfRFlOLgo+ IAo+IEkgYW0gbGVhdmluZyBpdCBhcyBhIGZ1dHVyZSBUT0RPIGl0ZW0uCj4gCj4gU2lnbmVkLW9m Zi1ieTogVml2ZWsgR295YWwgPHZnb3lhbEByZWRoYXQuY29tPgoKY2hlY2twYXRjaDogdG90YWw6 IDIgZXJyb3JzLCAxMCB3YXJuaW5ncywgOTc3IGxpbmVzIGNoZWNrZWQKCj4gZGlmZiAtLWdpdCBh L2FyY2gveDg2L2luY2x1ZGUvYXNtL2tleGVjLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZXhl Yy5oCj4gaW5kZXggOWJkNmZlYy4uYTMzMGQ4NSAxMDA2NDQKPiAtLS0gYS9hcmNoL3g4Ni9pbmNs dWRlL2FzbS9rZXhlYy5oCj4gKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va2V4ZWMuaAo+IEBA IC0yNSw2ICsyNSw4IEBACj4gICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Cj4gICNpbmNsdWRlIDxh c20vYm9vdHBhcmFtLmg+Cj4gIAo+ICtzdHJ1Y3Qga2ltYWdlOwo+ICsKPiAgLyoKPiAgICogS0VY RUNfU09VUkNFX01FTU9SWV9MSU1JVCBtYXhpbXVtIHBhZ2UgZ2V0X2ZyZWVfcGFnZSBjYW4gcmV0 dXJuLgo+ICAgKiBJLmUuIE1heGltdW0gcGFnZSB0aGF0IGlzIG1hcHBlZCBkaXJlY3RseSBpbnRv IGtlcm5lbCBtZW1vcnksCj4gQEAgLTYyLDYgKzY0LDEwIEBACj4gICMgZGVmaW5lIEtFWEVDX0FS Q0ggS0VYRUNfQVJDSF9YODZfNjQKPiAgI2VuZGlmCj4gIAo+ICsvKiBNZW1vcnkgdG8gYmFja3Vw IGR1cmluZyBjcmFzaCBrZHVtcCAqLwo+ICsjZGVmaW5lIEtFWEVDX0JBQ0tVUF9TUkNfU1RBUlQJ KDBVTCkKPiArI2RlZmluZSBLRVhFQ19CQUNLVVBfU1JDX0VORAkoNjU1MzYwVUwpCS8qIDY0MEsg Ki8KCkkgZ3Vlc3MKCiNkZWZpbmUgS0VYRUNfQkFDS1VQX1NSQ19FTkQJKDY0MCAqIDEwMjRVTCkK CnNob3VsZCBiZSBtb3JlIGNsZWFyLgoKPiAgLyoKPiAgICogQ1BVIGRvZXMgbm90IHNhdmUgc3Mg YW5kIHNwIG9uIHN0YWNrIGlmIGV4ZWN1dGlvbiBpcyBhbHJlYWR5Cj4gICAqIHJ1bm5pbmcgaW4g a2VybmVsIG1vZGUgYXQgdGhlIHRpbWUgb2YgTk1JIG9jY3VycmVuY2UuIFRoaXMgY29kZQo+IEBA IC0xNjEsOCArMTY3LDIxIEBAIHN0cnVjdCBraW1hZ2VfYXJjaCB7Cj4gIAlwdWRfdCAqcHVkOwo+ ICAJcG1kX3QgKnBtZDsKPiAgCXB0ZV90ICpwdGU7Cj4gKwkvKiBEZXRhaWxzIG9mIGJhY2t1cCBy ZWdpb24gKi8KPiArCXVuc2lnbmVkIGxvbmcgYmFja3VwX3NyY19zdGFydDsKPiArCXVuc2lnbmVk IGxvbmcgYmFja3VwX3NyY19zejsKPiArCj4gKwkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIGJhY2t1 cCBzZWdtZW50ICovCj4gKwl1bnNpZ25lZCBsb25nIGJhY2t1cF9sb2FkX2FkZHI7Cj4gKwo+ICsJ LyogQ29yZSBFTEYgaGVhZGVyIGJ1ZmZlciAqLwo+ICsJdW5zaWduZWQgbG9uZyBlbGZfaGVhZGVy czsKPiArCXVuc2lnbmVkIGxvbmcgZWxmX2hlYWRlcnNfc3o7Cj4gKwl1bnNpZ25lZCBsb25nIGVs Zl9sb2FkX2FkZHI7Cj4gIH07Cj4gKyNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCj4gIAo+ICsj aWZkZWYgQ09ORklHX1g4Nl82NAo+ICBzdHJ1Y3Qga2V4ZWNfZW50cnk2NF9yZWdzIHsKPiAgCXVp bnQ2NF90IHJheDsKPiAgCXVpbnQ2NF90IHJieDsKPiBAQCAtMTg5LDExICsyMDgsMTMgQEAgZXh0 ZXJuIGNyYXNoX3ZtY2xlYXJfZm4gX19yY3UgKmNyYXNoX3ZtY2xlYXJfbG9hZGVkX3ZtY3NzOwo+ ICAKPiAgZXh0ZXJuIGludCBrZXhlY19zZXR1cF9pbml0cmQoc3RydWN0IGJvb3RfcGFyYW1zICpi b290X3BhcmFtcywKPiAgCQl1bnNpZ25lZCBsb25nIGluaXRyZF9sb2FkX2FkZHIsIHVuc2lnbmVk IGxvbmcgaW5pdHJkX2xlbik7Cj4gLWV4dGVybiBpbnQga2V4ZWNfc2V0dXBfY21kbGluZShzdHJ1 Y3QgYm9vdF9wYXJhbXMgKmJvb3RfcGFyYW1zLAo+ICtleHRlcm4gaW50IGtleGVjX3NldHVwX2Nt ZGxpbmUoc3RydWN0IGtpbWFnZSAqaW1hZ2UsCj4gKwkJc3RydWN0IGJvb3RfcGFyYW1zICpib290 X3BhcmFtcywKPiAgCQl1bnNpZ25lZCBsb25nIGJvb3RwYXJhbXNfbG9hZF9hZGRyLAo+ICAJCXVu c2lnbmVkIGxvbmcgY21kbGluZV9vZmZzZXQsIGNoYXIgKmNtZGxpbmUsCj4gIAkJdW5zaWduZWQg bG9uZyBjbWRsaW5lX2xlbik7Cj4gLWV4dGVybiBpbnQga2V4ZWNfc2V0dXBfYm9vdF9wYXJhbWV0 ZXJzKHN0cnVjdCBib290X3BhcmFtcyAqcGFyYW1zKTsKPiArZXh0ZXJuIGludCBrZXhlY19zZXR1 cF9ib290X3BhcmFtZXRlcnMoc3RydWN0IGtpbWFnZSAqaW1hZ2UsCj4gKwkJCQkJc3RydWN0IGJv b3RfcGFyYW1zICpwYXJhbXMpOwo+ICAKPiAgCj4gICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8K PiBkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NyYXNoLmMgYi9hcmNoL3g4Ni9rZXJuZWwv Y3Jhc2guYwo+IGluZGV4IGE1NzkwMmUuLjhlYWJkZTQgMTAwNjQ0Cj4gLS0tIGEvYXJjaC94ODYv a2VybmVsL2NyYXNoLmMKPiArKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2guYwo+IEBAIC00LDYg KzQsOSBAQAo+ICAgKiBDcmVhdGVkIGJ5OiBIYXJpcHJhc2FkIE5lbGxpdGhlZXJ0aGEgKGhhcmlA aW4uaWJtLmNvbSkKPiAgICoKPiAgICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycG9yYXRpb24sIDIw MDQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqIENvcHlyaWdodCAoQykgUmVkIEhhdCBJbmMu LCAyMDE0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKiBBdXRob3JzOgo+ICsgKiAJVml2ZWsg R295YWwgPHZnb3lhbEByZWRoYXQuY29tPgo+ICAgKgo+ICAgKi8KPiAgCj4gQEAgLTE2LDYgKzE5 LDcgQEAKPiAgI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgo+ICAjaW5jbHVkZSA8bGludXgvZWxmY29y ZS5oPgo+ICAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+Cj4gIAo+ICAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgo+ICAjaW5jbHVkZSA8YXNtL2hh cmRpcnEuaD4KPiBAQCAtMjgsNiArMzIsNDUgQEAKPiAgI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4K PiAgI2luY2x1ZGUgPGFzbS92aXJ0ZXh0Lmg+Cj4gIAo+ICsvKiBBbGlnbm1lbnQgcmVxdWlyZWQg Zm9yIGVsZiBoZWFkZXIgc2VnbWVudCAqLwo+ICsjZGVmaW5lIEVMRl9DT1JFX0hFQURFUl9BTElH TiAgIDQwOTYKPiArCj4gKy8qIFRoaXMgcHJpbWFyaWx5IHJlcHJzZW50cyBudW1iZXIgb2Ygc3Bs aXQgcmFuZ2VzIGR1ZSB0byBleGNsdXNpb24gKi8KPiArI2RlZmluZSBDUkFTSF9NQVhfUkFOR0VT CTE2Cj4gKwo+ICtzdHJ1Y3QgY3Jhc2hfbWVtX3JhbmdlIHsKPiArCXVuc2lnbmVkIGxvbmcgbG9u ZyBzdGFydCwgZW5kOwoKdTY0PwoKPiArfTsKPiArCj4gK3N0cnVjdCBjcmFzaF9tZW0gewo+ICsJ dW5zaWduZWQgaW50IG5yX3JhbmdlczsKPiArCXN0cnVjdCBjcmFzaF9tZW1fcmFuZ2UgcmFuZ2Vz W0NSQVNIX01BWF9SQU5HRVNdOwo+ICt9Owo+ICsKPiArLyogTWlzYyBkYXRhIGFib3V0IHJhbSBy YW5nZXMgbmVlZGVkIHRvIHByZXBhcmUgZWxmIGhlYWRlcnMgKi8KPiArc3RydWN0IGNyYXNoX2Vs Zl9kYXRhIHsKPiArCXN0cnVjdCBraW1hZ2UgKmltYWdlOwo+ICsJLyoKPiArCSAqIFRvdGFsIG51 bWJlciBvZiByYW0gcmFuZ2VzIHdlIGhhdmUgYWZ0ZXIgdmFyaW91cyBhanVzdG1lbnRzIGZvcgo+ ICsJICogR0FSVCwgY3Jhc2ggcmVzZXJ2ZWQgcmVnaW9uIGV0Yy4KPiArCSAqLwo+ICsJdW5zaWdu ZWQgaW50IG1heF9ucl9yYW5nZXM7Cj4gKwl1bnNpZ25lZCBsb25nIGdhcnRfc3RhcnQsIGdhcnRf ZW5kOwo+ICsKPiArCS8qIFBvaW50ZXIgdG8gZWxmIGhlYWRlciAqLwo+ICsJdm9pZCAqZWhkcjsK PiArCS8qIFBvaW50ZXIgdG8gbmV4dCBwaGRyICovCj4gKwl2b2lkICpidWZwOwo+ICsJc3RydWN0 IGNyYXNoX21lbSBtZW07Cj4gK307Cj4gKwo+ICsvKiBVc2VkIHdoaWxlIHByZXBhcmVpbmcgbWVt b3J5IG1hcCBlbnRyaWVzIGZvciBzZWNvbmQga2VybmVsICovCgpzL3ByZXBhcmVpbmcvcHJlcGFy aW5nLwoKPiArc3RydWN0IGNyYXNoX21lbW1hcF9kYXRhIHsKPiArCXN0cnVjdCBib290X3BhcmFt cyAqcGFyYW1zOwo+ICsJLyogVHlwZSBvZiBtZW1vcnkgKi8KPiArCXVuc2lnbmVkIGludCB0eXBl Owo+ICt9Owo+ICsKPiAgaW50IGluX2NyYXNoX2tleGVjOwo+ICAKPiAgLyoKPiBAQCAtMTM3LDMg KzE4MCw1MzQgQEAgdm9pZCBuYXRpdmVfbWFjaGluZV9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRf cmVncyAqcmVncykKPiAgI2VuZGlmCj4gIAljcmFzaF9zYXZlX2NwdShyZWdzLCBzYWZlX3NtcF9w cm9jZXNzb3JfaWQoKSk7Cj4gIH0KPiArCj4gKyNpZmRlZiBDT05GSUdfWDg2XzY0Cj4gKwo+ICtz dGF0aWMgaW50IGdldF9ucl9yYW1fcmFuZ2VzX2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgc3RhcnRf cGZuLAo+ICsJCQkJdW5zaWduZWQgbG9uZyBucl9wZm4sIHZvaWQgKmFyZykKPiArewo+ICsJaW50 ICpucl9yYW5nZXMgPSBhcmc7Cj4gKwo+ICsJKCpucl9yYW5nZXMpKys7Cj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGludCBnZXRfZ2FydF9yYW5nZXNfY2FsbGJhY2sodTY0IHN0YXJ0 LCB1NjQgZW5kLCB2b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBjcmFzaF9lbGZfZGF0YSAqY2Vk ID0gYXJnOwo+ICsKPiArCWNlZC0+Z2FydF9zdGFydCA9IHN0YXJ0Owo+ICsJY2VkLT5nYXJ0X2Vu ZCA9IGVuZDsKPiArCj4gKwkvKiBOb3QgZXhwZWN0aW5nIG1vcmUgdGhhbiAxIGdhcnQgYXBlcnR1 cmUgKi8KPiArCXJldHVybiAxOwo+ICt9Cj4gKwo+ICsKPiArLyogR2F0aGVyIGFsbCB0aGUgcmVx dWlyZWQgaW5mb3JtYXRpb24gdG8gcHJlcGFyZSBlbGYgaGVhZGVycyBmb3IgcmFtIHJlZ2lvbnMg Ki8KPiArc3RhdGljIGludCBmaWxsX3VwX2NlZChzdHJ1Y3QgY3Jhc2hfZWxmX2RhdGEgKmNlZCwg c3RydWN0IGtpbWFnZSAqaW1hZ2UpCgpBbGwgb3RoZXIgZnVuY3Rpb25zIGhhdmUgbmljZSwgc3Bl bGxlZCBvdXQgbmFtZXMgYnV0IG5vdCB0aGlzIG9uZSA6KQoKV2h5IG5vdCBmaWxsX3VwX2NyYXNo X2VsZl9kYXRhKCk/Cgo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzID0gMDsKPiArCj4g KwljZWQtPmltYWdlID0gaW1hZ2U7Cj4gKwo+ICsJd2Fsa19zeXN0ZW1fcmFtX3JhbmdlKDAsIC0x LCAmbnJfcmFuZ2VzLAo+ICsJCQkJZ2V0X25yX3JhbV9yYW5nZXNfY2FsbGJhY2spOwo+ICsKPiAr CWNlZC0+bWF4X25yX3JhbmdlcyA9IG5yX3JhbmdlczsKPiArCj4gKwkvKgo+ICsJICogV2UgZG9u J3QgY3JlYXRlIEVMRiBoZWFkZXJzIGZvciBHQVJUIGFwZXJ0dXJlIGFzIGFuIGF0dGVtcHQKPiAr CSAqIHRvIGR1bXAgdGhpcyBtZW1vcnkgaW4gc2Vjb25kIGtlcm5lbCBsZWFkcyB0byBoYW5nL2Ny YXNoLgo+ICsJICogSWYgZ2FydCBhcGVydHVyZSBpcyBwcmVzZW50LCBvbmUgbmVlZHMgdG8gZXhj bHVkZSB0aGF0IHJlZ2lvbgo+ICsJICogYW5kIHRoYXQgY291bGQgbGVhZCB0byBuZWVkIG9mIGV4 dHJhIHBoZHIuCj4gKwkgKi8KPiArCgpzdXBlcmZsdW91cyBuZXdsaW5lLgoKPiArCXdhbGtfcmFt X3JlcygiR0FSVCIsIElPUkVTT1VSQ0VfTUVNLCAwLCAtMSwKPiArCQkJCWNlZCwgZ2V0X2dhcnRf cmFuZ2VzX2NhbGxiYWNrKTsKPiArCj4gKwkvKgo+ICsJICogSWYgd2UgaGF2ZSBnYXJ0IHJlZ2lv biwgZXhjbHVkaW5nIHRoYXQgY291bGQgcG90ZW50aWFsbHkgc3BsaXQKPiArCSAqIGEgbWVtb3J5 IHJhbmdlLCByZXN1bHRpbmcgaW4gZXh0cmEgaGVhZGVyLiBBY2NvdW50IGZvciAgdGhhdC4KPiAr CSAqLwo+ICsJaWYgKGNlZC0+Z2FydF9lbmQpCj4gKwkJY2VkLT5tYXhfbnJfcmFuZ2VzKys7Cj4g Kwo+ICsJLyogRXhjbHVzaW9uIG9mIGNyYXNoIHJlZ2lvbiBjb3VsZCBzcGxpdCBtZW1vcnkgcmFu Z2VzICovCj4gKwljZWQtPm1heF9ucl9yYW5nZXMrKzsKPiArCj4gKwkvKiBJZiBjcmFzaGtfbG93 X3JlcyBpcyB0aGVyZSwgYW5vdGhlciByYW5nZSBzcGxpdCBwb3NzaWJsZSAqLwo+ICsJaWYgKGNy YXNoa19sb3dfcmVzLmVuZCAhPSAwKQo+ICsJCWNlZC0+bWF4X25yX3JhbmdlcysrOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9CgouLi4KCj4gK2ludCBsb2FkX2NyYXNoZHVtcF9zZWdtZW50cyhzdHJ1 Y3Qga2ltYWdlICppbWFnZSkKPiArewo+ICsJdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsIHNyY19z ejsKPiArCXVuc2lnbmVkIGxvbmcgZWxmX2FkZHIsIGVsZl9zejsKPiArCWludCByZXQ7Cj4gKwo+ ICsJLyoKPiArCSAqIERldGVybWluZSBhbmQgbG9hZCBhIHNlZ21lbnQgZm9yIGJhY2t1cCBhcmVh LiBGaXJzdCA2NDBLIFJBTQo+ICsJICogcmVnaW9uIGlzIGJhY2t1cCBzb3VyY2UKPiArCSAqLwo+ ICsKPiArCXJldCA9IHdhbGtfc3lzdGVtX3JhbV9yZXMoS0VYRUNfQkFDS1VQX1NSQ19TVEFSVCwg S0VYRUNfQkFDS1VQX1NSQ19FTkQsCj4gKwkJCQlpbWFnZSwgZGV0ZXJtaW5lX2JhY2t1cF9yZWdp b24pOwo+ICsKPiArCS8qIFplcm8gb3IgcG9zdGl2ZSByZXR1cm4gdmFsdWVzIGFyZSBvayAqLwo+ ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlzcmNfc3RhcnQgPSBpbWFn ZS0+YXJjaC5iYWNrdXBfc3JjX3N0YXJ0Owo+ICsJc3JjX3N6ID0gaW1hZ2UtPmFyY2guYmFja3Vw X3NyY19zejsKPiArCj4gKwkvKiBBZGQgYmFja3VwIHNlZ21lbnQuICovCj4gKwlpZiAoc3JjX3N6 KSB7Cj4gKwkJcmV0ID0ga2V4ZWNfYWRkX2J1ZmZlcihpbWFnZSwgX192YShzcmNfc3RhcnQpLCBz cmNfc3osIHNyY19zeiwKPiArCQkJCQlQQUdFX1NJWkUsIDAsIC0xLCAwLAo+ICsJCQkJCSZpbWFn ZS0+YXJjaC5iYWNrdXBfbG9hZF9hZGRyKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0 Owo+ICsJfQo+ICsKPiArCS8qIFByZXBhcmUgZWxmIGhlYWRlcnMgYW5kIGFkZCBhIHNlZ21lbnQg Ki8KPiArCXJldCA9IHByZXBhcmVfZWxmX2hlYWRlcnMoaW1hZ2UsICZlbGZfYWRkciwgJmVsZl9z eik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJaW1hZ2UtPmFyY2guZWxm X2hlYWRlcnMgPSBlbGZfYWRkcjsKPiArCWltYWdlLT5hcmNoLmVsZl9oZWFkZXJzX3N6ID0gZWxm X3N6Owo+ICsKPiArCXJldCA9IGtleGVjX2FkZF9idWZmZXIoaW1hZ2UsIChjaGFyICopZWxmX2Fk ZHIsIGVsZl9zeiwgZWxmX3N6LAoKRm9yIHNvbWUgcmVhc29uLCBteSBjb21waWxlciBjb21wbGFp bnMgaGVyZToKCmFyY2gveDg2L2tlcm5lbC9jcmFzaC5jOiBJbiBmdW5jdGlvbiDigJhsb2FkX2Ny YXNoZHVtcF9zZWdtZW50c+KAmToKYXJjaC94ODYva2VybmVsL2NyYXNoLmM6NzA0OjY6IHdhcm5p bmc6IOKAmGVsZl9zeuKAmSBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVuY3Rp b24gWy1XdW5pbml0aWFsaXplZF0KYXJjaC94ODYva2VybmVsL2NyYXNoLmM6NzA0OjI0OiB3YXJu aW5nOiDigJhlbGZfYWRkcuKAmSBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVu Y3Rpb24gWy1XdW5pbml0aWFsaXplZF0KCkl0IGlzIGxpa2VseSBib2d1cywgdGhvdWdoLgoKLi4u Cgo+IC1pbnQga2V4ZWNfc2V0dXBfY21kbGluZShzdHJ1Y3QgYm9vdF9wYXJhbXMgKmJvb3RfcGFy YW1zLAo+ICtpbnQga2V4ZWNfc2V0dXBfY21kbGluZShzdHJ1Y3Qga2ltYWdlICppbWFnZSwgc3Ry dWN0IGJvb3RfcGFyYW1zICpib290X3BhcmFtcywKPiAgCQl1bnNpZ25lZCBsb25nIGJvb3RwYXJh bXNfbG9hZF9hZGRyLAo+ICAJCXVuc2lnbmVkIGxvbmcgY21kbGluZV9vZmZzZXQsIGNoYXIgKmNt ZGxpbmUsCj4gIAkJdW5zaWduZWQgbG9uZyBjbWRsaW5lX2xlbikKPiAgewo+ICAJY2hhciAqY21k bGluZV9wdHIgPSAoKGNoYXIgKilib290X3BhcmFtcykgKyBjbWRsaW5lX29mZnNldDsKPiAtCXVu c2lnbmVkIGxvbmcgY21kbGluZV9wdHJfcGh5czsKPiArCXVuc2lnbmVkIGxvbmcgY21kbGluZV9w dHJfcGh5cywgbGVuOwo+ICAJdWludDMyX3QgY21kbGluZV9sb3dfMzIsIGNtZGxpbmVfZXh0XzMy Owo+ICAKPiAgCW1lbWNweShjbWRsaW5lX3B0ciwgY21kbGluZSwgY21kbGluZV9sZW4pOwo+ICsJ aWYgKGltYWdlLT50eXBlID09IEtFWEVDX1RZUEVfQ1JBU0gpIHsKPiArCQlsZW4gPSBzcHJpbnRm KGNtZGxpbmVfcHRyICsgY21kbGluZV9sZW4gLSAxLAo+ICsJCQkiIGVsZmNvcmVoZHI9MHglbHgi LCBpbWFnZS0+YXJjaC5lbGZfbG9hZF9hZGRyKTsKPiArCQljbWRsaW5lX2xlbiArPSBsZW47Cj4g Kwl9Cj4gIAljbWRsaW5lX3B0cltjbWRsaW5lX2xlbiAtIDFdID0gJ1wwJzsKPiAgCj4gKwlwcl9k ZWJ1ZygiRmluYWwgY29tbWFuZCBsaW5lIGlzOiVzXG4iLCBjbWRsaW5lX3B0cik7CgpvbmUgc3Bh Y2UgYWZ0ZXIgIjoiCgpUaGUgcmVzdCBsb29rcyBvayB0byBtZSwgYnV0IHRoYXQgZG9lc24ndCBt ZWFuIGEgd2hvbGUgbG90IGNvbnNpZGVyaW5nCm15IHZlcnkgbGltaXRlZCBrZXhlYyBrbm93bGVk Z2UuCgpUaGFua3MuCgotLSAKUmVnYXJkcy9HcnVzcywKICAgIEJvcmlzLgoKU2VudCBmcm9tIGEg ZmF0IGNyYXRlIHVuZGVyIG15IGRlc2suIEZvcm1hdHRpbmcgaXMgZmluZS4KLS0KCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmtleGVjIG1haWxpbmcgbGlz dAprZXhlY0BsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8va2V4ZWMK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753224AbaB1R3F (ORCPT ); Fri, 28 Feb 2014 12:29:05 -0500 Received: from mail.skyhub.de ([78.46.96.112]:32854 "EHLO mail.skyhub.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752972AbaB1R3B (ORCPT ); Fri, 28 Feb 2014 12:29:01 -0500 Date: Fri, 28 Feb 2014 18:28:57 +0100 From: Borislav Petkov To: Vivek Goyal Cc: linux-kernel@vger.kernel.org, kexec@lists.infradead.org, ebiederm@xmission.com, hpa@zytor.com, mjg59@srcf.ucam.org, greg@kroah.com, jkosina@suse.cz Subject: Re: [PATCH 11/11] kexec: Support for Kexec on panic using new system call Message-ID: <20140228172857.GG4326@pd.tnic> References: <1390849071-21989-1-git-send-email-vgoyal@redhat.com> <1390849071-21989-12-git-send-email-vgoyal@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1390849071-21989-12-git-send-email-vgoyal@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jan 27, 2014 at 01:57:51PM -0500, Vivek Goyal wrote: > This patch adds support for loading a kexec on panic (kdump) kernel usning > new system call. Right now this primarily works with bzImage loader only. > But changes to ELF loader should be minimal as all the core infrastrcture > is there. > > Only thing preventing making ELF load in crash reseved memory is > that kernel vmlinux is of type ET_EXEC and it expects to be loaded at > address it has been compiled for. At that location current kernel is > already running. One first needs to make vmlinux fully relocatable > and export it is type ET_DYN and then modify this ELF loader to support > images of type ET_DYN. > > I am leaving it as a future TODO item. > > Signed-off-by: Vivek Goyal checkpatch: total: 2 errors, 10 warnings, 977 lines checked > diff --git a/arch/x86/include/asm/kexec.h b/arch/x86/include/asm/kexec.h > index 9bd6fec..a330d85 100644 > --- a/arch/x86/include/asm/kexec.h > +++ b/arch/x86/include/asm/kexec.h > @@ -25,6 +25,8 @@ > #include > #include > > +struct kimage; > + > /* > * KEXEC_SOURCE_MEMORY_LIMIT maximum page get_free_page can return. > * I.e. Maximum page that is mapped directly into kernel memory, > @@ -62,6 +64,10 @@ > # define KEXEC_ARCH KEXEC_ARCH_X86_64 > #endif > > +/* Memory to backup during crash kdump */ > +#define KEXEC_BACKUP_SRC_START (0UL) > +#define KEXEC_BACKUP_SRC_END (655360UL) /* 640K */ I guess #define KEXEC_BACKUP_SRC_END (640 * 1024UL) should be more clear. > /* > * CPU does not save ss and sp on stack if execution is already > * running in kernel mode at the time of NMI occurrence. This code > @@ -161,8 +167,21 @@ struct kimage_arch { > pud_t *pud; > pmd_t *pmd; > pte_t *pte; > + /* Details of backup region */ > + unsigned long backup_src_start; > + unsigned long backup_src_sz; > + > + /* Physical address of backup segment */ > + unsigned long backup_load_addr; > + > + /* Core ELF header buffer */ > + unsigned long elf_headers; > + unsigned long elf_headers_sz; > + unsigned long elf_load_addr; > }; > +#endif /* CONFIG_X86_32 */ > > +#ifdef CONFIG_X86_64 > struct kexec_entry64_regs { > uint64_t rax; > uint64_t rbx; > @@ -189,11 +208,13 @@ extern crash_vmclear_fn __rcu *crash_vmclear_loaded_vmcss; > > extern int kexec_setup_initrd(struct boot_params *boot_params, > unsigned long initrd_load_addr, unsigned long initrd_len); > -extern int kexec_setup_cmdline(struct boot_params *boot_params, > +extern int kexec_setup_cmdline(struct kimage *image, > + struct boot_params *boot_params, > unsigned long bootparams_load_addr, > unsigned long cmdline_offset, char *cmdline, > unsigned long cmdline_len); > -extern int kexec_setup_boot_parameters(struct boot_params *params); > +extern int kexec_setup_boot_parameters(struct kimage *image, > + struct boot_params *params); > > > #endif /* __ASSEMBLY__ */ > diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c > index a57902e..8eabde4 100644 > --- a/arch/x86/kernel/crash.c > +++ b/arch/x86/kernel/crash.c > @@ -4,6 +4,9 @@ > * Created by: Hariprasad Nellitheertha (hari@in.ibm.com) > * > * Copyright (C) IBM Corporation, 2004. All rights reserved. > + * Copyright (C) Red Hat Inc., 2014. All rights reserved. > + * Authors: > + * Vivek Goyal > * > */ > > @@ -16,6 +19,7 @@ > #include > #include > #include > +#include > > #include > #include > @@ -28,6 +32,45 @@ > #include > #include > > +/* Alignment required for elf header segment */ > +#define ELF_CORE_HEADER_ALIGN 4096 > + > +/* This primarily reprsents number of split ranges due to exclusion */ > +#define CRASH_MAX_RANGES 16 > + > +struct crash_mem_range { > + unsigned long long start, end; u64? > +}; > + > +struct crash_mem { > + unsigned int nr_ranges; > + struct crash_mem_range ranges[CRASH_MAX_RANGES]; > +}; > + > +/* Misc data about ram ranges needed to prepare elf headers */ > +struct crash_elf_data { > + struct kimage *image; > + /* > + * Total number of ram ranges we have after various ajustments for > + * GART, crash reserved region etc. > + */ > + unsigned int max_nr_ranges; > + unsigned long gart_start, gart_end; > + > + /* Pointer to elf header */ > + void *ehdr; > + /* Pointer to next phdr */ > + void *bufp; > + struct crash_mem mem; > +}; > + > +/* Used while prepareing memory map entries for second kernel */ s/prepareing/preparing/ > +struct crash_memmap_data { > + struct boot_params *params; > + /* Type of memory */ > + unsigned int type; > +}; > + > int in_crash_kexec; > > /* > @@ -137,3 +180,534 @@ void native_machine_crash_shutdown(struct pt_regs *regs) > #endif > crash_save_cpu(regs, safe_smp_processor_id()); > } > + > +#ifdef CONFIG_X86_64 > + > +static int get_nr_ram_ranges_callback(unsigned long start_pfn, > + unsigned long nr_pfn, void *arg) > +{ > + int *nr_ranges = arg; > + > + (*nr_ranges)++; > + return 0; > +} > + > +static int get_gart_ranges_callback(u64 start, u64 end, void *arg) > +{ > + struct crash_elf_data *ced = arg; > + > + ced->gart_start = start; > + ced->gart_end = end; > + > + /* Not expecting more than 1 gart aperture */ > + return 1; > +} > + > + > +/* Gather all the required information to prepare elf headers for ram regions */ > +static int fill_up_ced(struct crash_elf_data *ced, struct kimage *image) All other functions have nice, spelled out names but not this one :) Why not fill_up_crash_elf_data()? > +{ > + unsigned int nr_ranges = 0; > + > + ced->image = image; > + > + walk_system_ram_range(0, -1, &nr_ranges, > + get_nr_ram_ranges_callback); > + > + ced->max_nr_ranges = nr_ranges; > + > + /* > + * We don't create ELF headers for GART aperture as an attempt > + * to dump this memory in second kernel leads to hang/crash. > + * If gart aperture is present, one needs to exclude that region > + * and that could lead to need of extra phdr. > + */ > + superfluous newline. > + walk_ram_res("GART", IORESOURCE_MEM, 0, -1, > + ced, get_gart_ranges_callback); > + > + /* > + * If we have gart region, excluding that could potentially split > + * a memory range, resulting in extra header. Account for that. > + */ > + if (ced->gart_end) > + ced->max_nr_ranges++; > + > + /* Exclusion of crash region could split memory ranges */ > + ced->max_nr_ranges++; > + > + /* If crashk_low_res is there, another range split possible */ > + if (crashk_low_res.end != 0) > + ced->max_nr_ranges++; > + > + return 0; > +} ... > +int load_crashdump_segments(struct kimage *image) > +{ > + unsigned long src_start, src_sz; > + unsigned long elf_addr, elf_sz; > + int ret; > + > + /* > + * Determine and load a segment for backup area. First 640K RAM > + * region is backup source > + */ > + > + ret = walk_system_ram_res(KEXEC_BACKUP_SRC_START, KEXEC_BACKUP_SRC_END, > + image, determine_backup_region); > + > + /* Zero or postive return values are ok */ > + if (ret < 0) > + return ret; > + > + src_start = image->arch.backup_src_start; > + src_sz = image->arch.backup_src_sz; > + > + /* Add backup segment. */ > + if (src_sz) { > + ret = kexec_add_buffer(image, __va(src_start), src_sz, src_sz, > + PAGE_SIZE, 0, -1, 0, > + &image->arch.backup_load_addr); > + if (ret) > + return ret; > + } > + > + /* Prepare elf headers and add a segment */ > + ret = prepare_elf_headers(image, &elf_addr, &elf_sz); > + if (ret) > + return ret; > + > + image->arch.elf_headers = elf_addr; > + image->arch.elf_headers_sz = elf_sz; > + > + ret = kexec_add_buffer(image, (char *)elf_addr, elf_sz, elf_sz, For some reason, my compiler complains here: arch/x86/kernel/crash.c: In function ‘load_crashdump_segments’: arch/x86/kernel/crash.c:704:6: warning: ‘elf_sz’ may be used uninitialized in this function [-Wuninitialized] arch/x86/kernel/crash.c:704:24: warning: ‘elf_addr’ may be used uninitialized in this function [-Wuninitialized] It is likely bogus, though. ... > -int kexec_setup_cmdline(struct boot_params *boot_params, > +int kexec_setup_cmdline(struct kimage *image, struct boot_params *boot_params, > unsigned long bootparams_load_addr, > unsigned long cmdline_offset, char *cmdline, > unsigned long cmdline_len) > { > char *cmdline_ptr = ((char *)boot_params) + cmdline_offset; > - unsigned long cmdline_ptr_phys; > + unsigned long cmdline_ptr_phys, len; > uint32_t cmdline_low_32, cmdline_ext_32; > > memcpy(cmdline_ptr, cmdline, cmdline_len); > + if (image->type == KEXEC_TYPE_CRASH) { > + len = sprintf(cmdline_ptr + cmdline_len - 1, > + " elfcorehdr=0x%lx", image->arch.elf_load_addr); > + cmdline_len += len; > + } > cmdline_ptr[cmdline_len - 1] = '\0'; > > + pr_debug("Final command line is:%s\n", cmdline_ptr); one space after ":" The rest looks ok to me, but that doesn't mean a whole lot considering my very limited kexec knowledge. Thanks. -- Regards/Gruss, Boris. Sent from a fat crate under my desk. Formatting is fine. --