From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH v5 09/11] xen: add capability to load initrd outside of initial mapping Date: Thu, 25 Feb 2016 12:33:35 +0100 Message-ID: <1456400017-5789-10-git-send-email-jgross@suse.com> References: <1456400017-5789-1-git-send-email-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1456400017-5789-1-git-send-email-jgross@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: grub-devel@gnu.org Cc: Juergen Gross , phcoder@gmail.com, daniel.kiper@oracle.com, mchang@suse.com, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org TW9kZXJuIHB2b3BzIGxpbnV4IGtlcm5lbHMgc3VwcG9ydCBhbiBpbml0cmQgbm90IGNvdmVyZWQg YnkgdGhlIGluaXRpYWwKbWFwcGluZy4gVGhpcyBjYXBhYmlsaXR5IGlzIGZsYWdnZWQgYnkgYW4g ZWxmLW5vdGUuCgpJbiBjYXNlIHRoZSBlbGYtbm90ZSBpcyBzZXQgYnkgdGhlIGtlcm5lbCBkb24n dCBwbGFjZSB0aGUgaW5pdHJkIGludG8KdGhlIGluaXRpYWwgbWFwcGluZy4gVGhpcyB3aWxsIGFs bG93IHRvIGxvYWQgbGFyZ2VyIGluaXRyZHMgYW5kL29yCnN1cHBvcnQgZG9tYWlucyB3aXRoIGxh cmdlciBtZW1vcnksIGFzIHRoZSBpbml0aWFsIG1hcHBpbmcgaXMgbGltaXRlZAp0byAyR0IgYW5k IGl0IGlzIGNvbnRhaW5pbmcgdGhlIHAybSBsaXN0LgoKU2lnbmVkLW9mZi1ieTogSnVlcmdlbiBH cm9zcyA8amdyb3NzQHN1c2UuY29tPgotLS0KVjU6IGxldCBjYWxsIGdydWJfeGVuX2FsbG9jX2Zp bmFsKCkgYWxsIHN1YmZ1bmN0aW9ucyB1bmNvbmRpdGlvbmFsbHkKICAgIGFuZCBsZXQgdGhlbSBk ZWNpZGUgd2hldGhlciB0aGV5IG5lZWQgdG8gZG8gYW55dGhpbmcKVjQ6IHJlbmFtZSBncnViX3hl bl9hbGxvY19lbmQoKSB0byBncnViX3hlbl9hbGxvY19maW5hbCgpCi0tLQogZ3J1Yi1jb3JlL2xv YWRlci9pMzg2L3hlbi5jICAgICAgICB8IDY1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tCiBncnViLWNvcmUvbG9hZGVyL2kzODYveGVuX2ZpbGVYWC5jIHwgIDMgKysKIGlu Y2x1ZGUvZ3J1Yi94ZW5fZmlsZS5oICAgICAgICAgICAgfCAgMSArCiAzIGZpbGVzIGNoYW5nZWQs IDU2IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2dydWItY29y ZS9sb2FkZXIvaTM4Ni94ZW4uYyBiL2dydWItY29yZS9sb2FkZXIvaTM4Ni94ZW4uYwppbmRleCAy ZTEyNzYzLi40NjZmMGMwIDEwMDY0NAotLS0gYS9ncnViLWNvcmUvbG9hZGVyL2kzODYveGVuLmMK KysrIGIvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L3hlbi5jCkBAIC0yMjgsNiArMjI4LDkgQEAgZ3J1 Yl94ZW5fcDJtX2FsbG9jICh2b2lkKQogICBncnViX3NpemVfdCBwMm1zaXplOwogICBncnViX2Vy cl90IGVycjsKIAorICBpZiAoeGVuX3N0YXRlLnZpcnRfbWZuX2xpc3QpCisgICAgcmV0dXJuIEdS VUJfRVJSX05PTkU7CisKICAgeGVuX3N0YXRlLnN0YXRlLm1mbl9saXN0ID0geGVuX3N0YXRlLm1h eF9hZGRyOwogICB4ZW5fc3RhdGUubmV4dF9zdGFydC5tZm5fbGlzdCA9CiAgICAgeGVuX3N0YXRl Lm1heF9hZGRyICsgeGVuX3N0YXRlLnhlbl9pbmYudmlydF9iYXNlOwpAQCAtMjUwLDYgKzI1Myw5 IEBAIGdydWJfeGVuX3NwZWNpYWxfYWxsb2MgKHZvaWQpCiAgIGdydWJfcmVsb2NhdG9yX2NodW5r X3QgY2g7CiAgIGdydWJfZXJyX3QgZXJyOwogCisgIGlmICh4ZW5fc3RhdGUudmlydF9zdGFydF9p bmZvKQorICAgIHJldHVybiBHUlVCX0VSUl9OT05FOworCiAgIGVyciA9IGdydWJfcmVsb2NhdG9y X2FsbG9jX2NodW5rX2FkZHIgKHhlbl9zdGF0ZS5yZWxvY2F0b3IsICZjaCwKIAkJCQkJIHhlbl9z dGF0ZS5tYXhfYWRkciwKIAkJCQkJIHNpemVvZiAoeGVuX3N0YXRlLm5leHRfc3RhcnQpKTsKQEAg LTI4MSw2ICsyODcsOSBAQCBncnViX3hlbl9wdF9hbGxvYyAodm9pZCkKICAgZ3J1Yl91aW50NjRf dCBucl9pbmZvX3BhZ2VzOwogICBncnViX3VpbnQ2NF90IG5yX3BhZ2VzLCBucl9wdF9wYWdlcywg bnJfbmVlZF9wYWdlczsKIAorICBpZiAoeGVuX3N0YXRlLnZpcnRfcGd0YWJsZSkKKyAgICByZXR1 cm4gR1JVQl9FUlJfTk9ORTsKKwogICB4ZW5fc3RhdGUubmV4dF9zdGFydC5wdF9iYXNlID0KICAg ICB4ZW5fc3RhdGUubWF4X2FkZHIgKyB4ZW5fc3RhdGUueGVuX2luZi52aXJ0X2Jhc2U7CiAgIHhl bl9zdGF0ZS5zdGF0ZS5wYWdpbmdfc3RhcnQgPSB4ZW5fc3RhdGUubWF4X2FkZHIgPj4gUEFHRV9T SElGVDsKQEAgLTMyMCw2ICszMjksMjQgQEAgZ3J1Yl94ZW5fcHRfYWxsb2MgKHZvaWQpCiB9CiAK IHN0YXRpYyBncnViX2Vycl90CitncnViX3hlbl9hbGxvY19maW5hbCAodm9pZCkKK3sKKyAgZ3J1 Yl9lcnJfdCBlcnI7CisKKyAgZXJyID0gZ3J1Yl94ZW5fcDJtX2FsbG9jICgpOworICBpZiAoZXJy KQorICAgIHJldHVybiBlcnI7CisgIGVyciA9IGdydWJfeGVuX3NwZWNpYWxfYWxsb2MgKCk7Cisg IGlmIChlcnIpCisgICAgcmV0dXJuIGVycjsKKyAgZXJyID0gZ3J1Yl94ZW5fcHRfYWxsb2MgKCk7 CisgIGlmIChlcnIpCisgICAgcmV0dXJuIGVycjsKKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsK K30KKworc3RhdGljIGdydWJfZXJyX3QKIGdydWJfeGVuX2Jvb3QgKHZvaWQpCiB7CiAgIGdydWJf ZXJyX3QgZXJyOwpAQCAtMzMwLDEzICszNTcsNyBAQCBncnViX3hlbl9ib290ICh2b2lkKQogICBp ZiAoZ3J1Yl94ZW5fbl9hbGxvY2F0ZWRfc2hhcmVkX3BhZ2VzKQogICAgIHJldHVybiBncnViX2Vy cm9yIChHUlVCX0VSUl9CVUcsICJhY3RpdmUgZ3JhbnRzIik7CiAKLSAgZXJyID0gZ3J1Yl94ZW5f cDJtX2FsbG9jICgpOwotICBpZiAoZXJyKQotICAgIHJldHVybiBlcnI7Ci0gIGVyciA9IGdydWJf eGVuX3NwZWNpYWxfYWxsb2MgKCk7Ci0gIGlmIChlcnIpCi0gICAgcmV0dXJuIGVycjsKLSAgZXJy ID0gZ3J1Yl94ZW5fcHRfYWxsb2MgKCk7CisgIGVyciA9IGdydWJfeGVuX2FsbG9jX2ZpbmFsICgp OwogICBpZiAoZXJyKQogICAgIHJldHVybiBlcnI7CiAKQEAgLTYxMCw2ICs2MzEsMTMgQEAgZ3J1 Yl9jbWRfaW5pdHJkIChncnViX2NvbW1hbmRfdCBjbWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkp LAogICAgICAgZ290byBmYWlsOwogICAgIH0KIAorICBpZiAoeGVuX3N0YXRlLnhlbl9pbmYudW5t YXBwZWRfaW5pdHJkKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfeGVuX2FsbG9jX2ZpbmFsICgp OworICAgICAgaWYgKGVycikKKwlnb3RvIGZhaWw7CisgICAgfQorCiAgIGlmIChncnViX2luaXRy ZF9pbml0IChhcmdjLCBhcmd2LCAmaW5pdHJkX2N0eCkpCiAgICAgZ290byBmYWlsOwogCkBAIC02 MjcsMTQgKzY1NSwyNCBAQCBncnViX2NtZF9pbml0cmQgKGdydWJfY29tbWFuZF90IGNtZCBfX2F0 dHJpYnV0ZV9fICgodW51c2VkKSksCiAJZ290byBmYWlsOwogICAgIH0KIAotICB4ZW5fc3RhdGUu bmV4dF9zdGFydC5tb2Rfc3RhcnQgPQotICAgIHhlbl9zdGF0ZS5tYXhfYWRkciArIHhlbl9zdGF0 ZS54ZW5faW5mLnZpcnRfYmFzZTsKLSAgeGVuX3N0YXRlLm5leHRfc3RhcnQubW9kX2xlbiA9IHNp emU7Ci0KLSAgeGVuX3N0YXRlLm1heF9hZGRyID0gQUxJR05fVVAgKHhlbl9zdGF0ZS5tYXhfYWRk ciArIHNpemUsIFBBR0VfU0laRSk7CisgIGlmICh4ZW5fc3RhdGUueGVuX2luZi51bm1hcHBlZF9p bml0cmQpCisgICAgeworICAgICAgeGVuX3N0YXRlLm5leHRfc3RhcnQuZmxhZ3MgfD0gU0lGX01P RF9TVEFSVF9QRk47CisgICAgICB4ZW5fc3RhdGUubmV4dF9zdGFydC5tb2Rfc3RhcnQgPSB4ZW5f c3RhdGUubWF4X2FkZHIgPj4gUEFHRV9TSElGVDsKKyAgICAgIHhlbl9zdGF0ZS5uZXh0X3N0YXJ0 Lm1vZF9sZW4gPSBzaXplOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHhlbl9zdGF0ZS5u ZXh0X3N0YXJ0Lm1vZF9zdGFydCA9CisJeGVuX3N0YXRlLm1heF9hZGRyICsgeGVuX3N0YXRlLnhl bl9pbmYudmlydF9iYXNlOworICAgICAgeGVuX3N0YXRlLm5leHRfc3RhcnQubW9kX2xlbiA9IHNp emU7CisgICAgfQogCiAgIGdydWJfZHByaW50ZiAoInhlbiIsICJJbml0cmQsIGFkZHI9MHgleCwg c2l6ZT0weCV4XG4iLAotCQkodW5zaWduZWQpIHhlbl9zdGF0ZS5uZXh0X3N0YXJ0Lm1vZF9zdGFy dCwgKHVuc2lnbmVkKSBzaXplKTsKKwkJKHVuc2lnbmVkKSAoeGVuX3N0YXRlLm1heF9hZGRyICsg eGVuX3N0YXRlLnhlbl9pbmYudmlydF9iYXNlKSwKKwkJKHVuc2lnbmVkKSBzaXplKTsKKworICB4 ZW5fc3RhdGUubWF4X2FkZHIgPSBBTElHTl9VUCAoeGVuX3N0YXRlLm1heF9hZGRyICsgc2l6ZSwg UEFHRV9TSVpFKTsKIAogZmFpbDoKICAgZ3J1Yl9pbml0cmRfY2xvc2UgKCZpbml0cmRfY3R4KTsK QEAgLTY4Niw2ICs3MjQsNyBAQCBncnViX2NtZF9tb2R1bGUgKGdydWJfY29tbWFuZF90IGNtZCBf X2F0dHJpYnV0ZV9fICgodW51c2VkKSksCiAKICAgaWYgKCF4ZW5fc3RhdGUubW9kdWxlX2luZm9f cGFnZSkKICAgICB7CisgICAgICB4ZW5fc3RhdGUueGVuX2luZi51bm1hcHBlZF9pbml0cmQgPSAw OwogICAgICAgeGVuX3N0YXRlLm5fbW9kdWxlcyA9IDA7CiAgICAgICB4ZW5fc3RhdGUubWF4X2Fk ZHIgPSBBTElHTl9VUCAoeGVuX3N0YXRlLm1heF9hZGRyLCBQQUdFX1NJWkUpOwogICAgICAgeGVu X3N0YXRlLm1vZHVsZXNfdGFyZ2V0X3N0YXJ0ID0geGVuX3N0YXRlLm1heF9hZGRyOwpkaWZmIC0t Z2l0IGEvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L3hlbl9maWxlWFguYyBiL2dydWItY29yZS9sb2Fk ZXIvaTM4Ni94ZW5fZmlsZVhYLmMKaW5kZXggMDMyMTVjYS4uODc1MTE3NCAxMDA2NDQKLS0tIGEv Z3J1Yi1jb3JlL2xvYWRlci9pMzg2L3hlbl9maWxlWFguYworKysgYi9ncnViLWNvcmUvbG9hZGVy L2kzODYveGVuX2ZpbGVYWC5jCkBAIC0yNjEsNiArMjYxLDkgQEAgcGFyc2Vfbm90ZSAoZ3J1Yl9l bGZfdCBlbGYsIHN0cnVjdCBncnViX3hlbl9maWxlX2luZm8gKnhpLAogCQkJCQkgIGRlc2NzeiA9 PSAyID8gMiA6IDMpID09IDApCiAJICAgIHhpLT5hcmNoID0gR1JVQl9YRU5fRklMRV9JMzg2Owog CSAgYnJlYWs7CisJY2FzZSBYRU5fRUxGTk9URV9NT0RfU1RBUlRfUEZOOgorCSAgeGktPnVubWFw cGVkX2luaXRyZCA9ICEhZ3J1Yl9sZV90b19jcHUzMigqKGdydWJfdWludDMyX3QgKikgZGVzYyk7 CisJICBicmVhazsKIAlkZWZhdWx0OgogCSAgZ3J1Yl9kcHJpbnRmICgieGVuIiwgInVua25vd24g bm90ZSB0eXBlICVkXG4iLCBuaC0+bl90eXBlKTsKIAkgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvaW5j bHVkZS9ncnViL3hlbl9maWxlLmggYi9pbmNsdWRlL2dydWIveGVuX2ZpbGUuaAppbmRleCA0YjJj Y2JhLi5lZDc0OWZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dydWIveGVuX2ZpbGUuaAorKysgYi9p bmNsdWRlL2dydWIveGVuX2ZpbGUuaApAQCAtMzYsNiArMzYsNyBAQCBzdHJ1Y3QgZ3J1Yl94ZW5f ZmlsZV9pbmZvCiAgIGludCBoYXNfbm90ZTsKICAgaW50IGhhc194ZW5fZ3Vlc3Q7CiAgIGludCBl eHRlbmRlZF9jcjM7CisgIGludCB1bm1hcHBlZF9pbml0cmQ7CiAgIGVudW0KICAgewogICAgIEdS VUJfWEVOX0ZJTEVfSTM4NiA9IDEsCi0tIAoyLjYuMgoKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVs QGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1aYuB8-0001xs-AY for mharc-grub-devel@gnu.org; Thu, 25 Feb 2016 06:33:54 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58220) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYuB4-0001ru-Ol for grub-devel@gnu.org; Thu, 25 Feb 2016 06:33:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aYuB2-0000E2-H5 for grub-devel@gnu.org; Thu, 25 Feb 2016 06:33:50 -0500 Received: from mx2.suse.de ([195.135.220.15]:34214) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYuB1-0000DB-Uw for grub-devel@gnu.org; Thu, 25 Feb 2016 06:33:48 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 23633AD55; Thu, 25 Feb 2016 11:33:47 +0000 (UTC) From: Juergen Gross To: grub-devel@gnu.org Subject: [PATCH v5 09/11] xen: add capability to load initrd outside of initial mapping Date: Thu, 25 Feb 2016 12:33:35 +0100 Message-Id: <1456400017-5789-10-git-send-email-jgross@suse.com> X-Mailer: git-send-email 2.6.2 In-Reply-To: <1456400017-5789-1-git-send-email-jgross@suse.com> References: <1456400017-5789-1-git-send-email-jgross@suse.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x (no timestamps) [generic] X-Received-From: 195.135.220.15 Cc: Juergen Gross , phcoder@gmail.com, daniel.kiper@oracle.com, mchang@suse.com, xen-devel@lists.xen.org X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 25 Feb 2016 11:33:52 -0000 Modern pvops linux kernels support an initrd not covered by the initial mapping. This capability is flagged by an elf-note. In case the elf-note is set by the kernel don't place the initrd into the initial mapping. This will allow to load larger initrds and/or support domains with larger memory, as the initial mapping is limited to 2GB and it is containing the p2m list. Signed-off-by: Juergen Gross --- V5: let call grub_xen_alloc_final() all subfunctions unconditionally and let them decide whether they need to do anything V4: rename grub_xen_alloc_end() to grub_xen_alloc_final() --- grub-core/loader/i386/xen.c | 65 ++++++++++++++++++++++++++++++-------- grub-core/loader/i386/xen_fileXX.c | 3 ++ include/grub/xen_file.h | 1 + 3 files changed, 56 insertions(+), 13 deletions(-) diff --git a/grub-core/loader/i386/xen.c b/grub-core/loader/i386/xen.c index 2e12763..466f0c0 100644 --- a/grub-core/loader/i386/xen.c +++ b/grub-core/loader/i386/xen.c @@ -228,6 +228,9 @@ grub_xen_p2m_alloc (void) grub_size_t p2msize; grub_err_t err; + if (xen_state.virt_mfn_list) + return GRUB_ERR_NONE; + xen_state.state.mfn_list = xen_state.max_addr; xen_state.next_start.mfn_list = xen_state.max_addr + xen_state.xen_inf.virt_base; @@ -250,6 +253,9 @@ grub_xen_special_alloc (void) grub_relocator_chunk_t ch; grub_err_t err; + if (xen_state.virt_start_info) + return GRUB_ERR_NONE; + err = grub_relocator_alloc_chunk_addr (xen_state.relocator, &ch, xen_state.max_addr, sizeof (xen_state.next_start)); @@ -281,6 +287,9 @@ grub_xen_pt_alloc (void) grub_uint64_t nr_info_pages; grub_uint64_t nr_pages, nr_pt_pages, nr_need_pages; + if (xen_state.virt_pgtable) + return GRUB_ERR_NONE; + xen_state.next_start.pt_base = xen_state.max_addr + xen_state.xen_inf.virt_base; xen_state.state.paging_start = xen_state.max_addr >> PAGE_SHIFT; @@ -320,6 +329,24 @@ grub_xen_pt_alloc (void) } static grub_err_t +grub_xen_alloc_final (void) +{ + grub_err_t err; + + err = grub_xen_p2m_alloc (); + if (err) + return err; + err = grub_xen_special_alloc (); + if (err) + return err; + err = grub_xen_pt_alloc (); + if (err) + return err; + + return GRUB_ERR_NONE; +} + +static grub_err_t grub_xen_boot (void) { grub_err_t err; @@ -330,13 +357,7 @@ grub_xen_boot (void) if (grub_xen_n_allocated_shared_pages) return grub_error (GRUB_ERR_BUG, "active grants"); - err = grub_xen_p2m_alloc (); - if (err) - return err; - err = grub_xen_special_alloc (); - if (err) - return err; - err = grub_xen_pt_alloc (); + err = grub_xen_alloc_final (); if (err) return err; @@ -610,6 +631,13 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), goto fail; } + if (xen_state.xen_inf.unmapped_initrd) + { + err = grub_xen_alloc_final (); + if (err) + goto fail; + } + if (grub_initrd_init (argc, argv, &initrd_ctx)) goto fail; @@ -627,14 +655,24 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), goto fail; } - xen_state.next_start.mod_start = - xen_state.max_addr + xen_state.xen_inf.virt_base; - xen_state.next_start.mod_len = size; - - xen_state.max_addr = ALIGN_UP (xen_state.max_addr + size, PAGE_SIZE); + if (xen_state.xen_inf.unmapped_initrd) + { + xen_state.next_start.flags |= SIF_MOD_START_PFN; + xen_state.next_start.mod_start = xen_state.max_addr >> PAGE_SHIFT; + xen_state.next_start.mod_len = size; + } + else + { + xen_state.next_start.mod_start = + xen_state.max_addr + xen_state.xen_inf.virt_base; + xen_state.next_start.mod_len = size; + } grub_dprintf ("xen", "Initrd, addr=0x%x, size=0x%x\n", - (unsigned) xen_state.next_start.mod_start, (unsigned) size); + (unsigned) (xen_state.max_addr + xen_state.xen_inf.virt_base), + (unsigned) size); + + xen_state.max_addr = ALIGN_UP (xen_state.max_addr + size, PAGE_SIZE); fail: grub_initrd_close (&initrd_ctx); @@ -686,6 +724,7 @@ grub_cmd_module (grub_command_t cmd __attribute__ ((unused)), if (!xen_state.module_info_page) { + xen_state.xen_inf.unmapped_initrd = 0; xen_state.n_modules = 0; xen_state.max_addr = ALIGN_UP (xen_state.max_addr, PAGE_SIZE); xen_state.modules_target_start = xen_state.max_addr; diff --git a/grub-core/loader/i386/xen_fileXX.c b/grub-core/loader/i386/xen_fileXX.c index 03215ca..8751174 100644 --- a/grub-core/loader/i386/xen_fileXX.c +++ b/grub-core/loader/i386/xen_fileXX.c @@ -261,6 +261,9 @@ parse_note (grub_elf_t elf, struct grub_xen_file_info *xi, descsz == 2 ? 2 : 3) == 0) xi->arch = GRUB_XEN_FILE_I386; break; + case XEN_ELFNOTE_MOD_START_PFN: + xi->unmapped_initrd = !!grub_le_to_cpu32(*(grub_uint32_t *) desc); + break; default: grub_dprintf ("xen", "unknown note type %d\n", nh->n_type); break; diff --git a/include/grub/xen_file.h b/include/grub/xen_file.h index 4b2ccba..ed749fa 100644 --- a/include/grub/xen_file.h +++ b/include/grub/xen_file.h @@ -36,6 +36,7 @@ struct grub_xen_file_info int has_note; int has_xen_guest; int extended_cr3; + int unmapped_initrd; enum { GRUB_XEN_FILE_I386 = 1, -- 2.6.2