From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH v5 13/20] xen: setup Xen specific data for PVH Date: Wed, 21 Nov 2018 15:28:48 +0100 Message-ID: <20181121142855.13537-14-jgross@suse.com> References: <20181121142855.13537-1-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181121142855.13537-1-jgross@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: grub-devel@gnu.org Cc: Juergen Gross , phcoder@gmail.com, daniel.kiper@oracle.com, xen-devel@lists.xen.org, hans@knorrie.org, roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org SW5pdGlhbGl6ZSB0aGUgbmVlZGVkIFhlbiBzcGVjaWZpYyBkYXRhLiBUaGlzIGlzOgoKLSB0aGUg WGVuIHN0YXJ0IG9mIGRheSBwYWdlIGNvbnRhaW5pbmcgdGhlIGNvbnNvbGUgYW5kIFhlbnN0b3Jl IHJpbmcKICBwYWdlIFBGTiBhbmQgZXZlbnQgY2hhbm5lbAotIHRoZSBncmFudCB0YWJsZQotIHRo ZSBzaGFyZWQgaW5mbyBwYWdlCgpXcml0ZSBiYWNrIHRoZSBwb3NzaWJseSBtb2RpZmllZCBtZW1v cnkgbWFwIHRvIHRoZSBoeXBlcnZpc29yIGluIGNhc2UKdGhlIGd1ZXN0IGlzIHJlYWRpbmcgaXQg ZnJvbSB0aGVyZSBhZ2Fpbi4KClNldCB0aGUgUlNEUCBhZGRyZXNzIGZvciB0aGUgZ3Vlc3QgZnJv bSB0aGUgc3RhcnRfaW5mbyBwYWdlIHBhc3NlZAphcyBib290IHBhcmFtZXRlci4KClNpZ25lZC1v ZmYtYnk6IEp1ZXJnZW4gR3Jvc3MgPGpncm9zc0BzdXNlLmNvbT4KUmV2aWV3ZWQtYnk6IERhbmll bCBLaXBlciA8ZGFuaWVsLmtpcGVyQG9yYWNsZS5jb20+Ci0tLQpWNDogd3JpdGUgYmFjayBtZW1v cnkgbWFwIHRvIFhlbiAoUm9nZXIgUGF1IE1vbm7DqSkKVjU6IGFkZCBjb21tZW50IChEYW5pZWwg S2lwZXIpCi0tLQogZ3J1Yi1jb3JlL2tlcm4vaTM4Ni94ZW4vcHZoLmMgfCAxMjAgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTIwIGlu c2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9ncnViLWNvcmUva2Vybi9pMzg2L3hlbi9wdmguYyBi L2dydWItY29yZS9rZXJuL2kzODYveGVuL3B2aC5jCmluZGV4IGJiOTA4NzRiMy4uNmRlODRlYjhl IDEwMDY0NAotLS0gYS9ncnViLWNvcmUva2Vybi9pMzg2L3hlbi9wdmguYworKysgYi9ncnViLWNv cmUva2Vybi9pMzg2L3hlbi9wdmguYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGdydWIv aTM4Ni9saW51eC5oPgogI2luY2x1ZGUgPGdydWIvbWFjaGluZS9rZXJuZWwuaD4KICNpbmNsdWRl IDxncnViL21hY2hpbmUvbWVtb3J5Lmg+CisjaW5jbHVkZSA8eGVuL2h2bS9wYXJhbXMuaD4KICNp bmNsdWRlIDx4ZW4vbWVtb3J5Lmg+CiAKICNkZWZpbmUgWEVOX01FTU9SWV9NQVBfU0laRSAgIDEy OApAQCAtMzcsNiArMzgsNyBAQCBzdGF0aWMgY2hhciBoeXBlcmNhbGxfcGFnZVtHUlVCX1hFTl9Q QUdFX1NJWkVdCiAgIF9fYXR0cmlidXRlX18gKChhbGlnbmVkIChHUlVCX1hFTl9QQUdFX1NJWkUp KSk7CiAKIHN0YXRpYyBncnViX3VpbnQzMl90IHhlbl9jcHVpZF9iYXNlOworc3RhdGljIHN0cnVj dCBzdGFydF9pbmZvIGdydWJfeGVuX3N0YXJ0X3BhZ2U7CiBzdGF0aWMgc3RydWN0IGdydWJfZTgy MF9tbWFwX2VudHJ5IG1hcFtYRU5fTUVNT1JZX01BUF9TSVpFXTsKIHN0YXRpYyB1bnNpZ25lZCBp bnQgbnJfbWFwX2VudHJpZXM7CiAKQEAgLTExMCw2ICsxMTIsMzYgQEAgZ3J1Yl94ZW5faHlwZXJj YWxsIChncnViX3VpbnQzMl90IGNhbGxubywgZ3J1Yl91aW50MzJfdCBhMCwKICAgcmV0dXJuIF9f cmVzOwogfQogCitzdGF0aWMgZ3J1Yl91aW50MzJfdAorZ3J1Yl94ZW5fZ2V0X3BhcmFtIChpbnQg aWR4KQoreworICBzdHJ1Y3QgeGVuX2h2bV9wYXJhbSB4aHY7CisgIGludCByOworCisgIHhodi5k b21pZCA9IERPTUlEX1NFTEY7CisgIHhodi5pbmRleCA9IGlkeDsKKyAgciA9IGdydWJfeGVuX2h5 cGVyY2FsbCAoX19IWVBFUlZJU09SX2h2bV9vcCwgSFZNT1BfZ2V0X3BhcmFtLAorCQkJICAoZ3J1 Yl91aW50MzJfdCkgKCZ4aHYpLCAwLCAwLCAwLCAwKTsKKyAgaWYgKHIgPCAwKQorICAgIGdydWJf eGVuX3BhbmljICgiQ291bGQgbm90IGdldCBwYXJhbWV0ZXIgZnJvbSBYZW4hXG4iKTsKKyAgcmV0 dXJuIHhodi52YWx1ZTsKK30KKworc3RhdGljIHZvaWQgKgorZ3J1Yl94ZW5fYWRkX3BoeXNtYXAg KHVuc2lnbmVkIGludCBzcGFjZSwgdm9pZCAqYWRkcikKK3sKKyAgc3RydWN0IHhlbl9hZGRfdG9f cGh5c21hcCB4YXRwOworCisgIHhhdHAuZG9taWQgPSBET01JRF9TRUxGOworICB4YXRwLmlkeCA9 IDA7CisgIHhhdHAuc3BhY2UgPSBzcGFjZTsKKyAgeGF0cC5ncGZuID0gKGdydWJfYWRkcl90KSBh ZGRyID4+IEdSVUJfWEVOX0xPR19QQUdFX1NJWkU7CisgIGlmIChncnViX3hlbl9oeXBlcmNhbGwg KF9fSFlQRVJWSVNPUl9tZW1vcnlfb3AsIFhFTk1FTV9hZGRfdG9fcGh5c21hcCwKKwkJCSAgKGdy dWJfdWludDMyX3QpICgmeGF0cCksIDAsIDAsIDAsIDApKQorICAgIGdydWJfeGVuX3BhbmljICgi TWVtb3J5X29wIGh5cGVyY2FsbCBmYWlsZWQhXG4iKTsKKyAgcmV0dXJuIGFkZHI7Cit9CisKIHN0 YXRpYyB2b2lkCiBncnViX3hlbl9zb3J0X21tYXAgKHZvaWQpCiB7CkBAIC0xOTYsMTIgKzIyOCwx MDAgQEAgZ3J1Yl94ZW5fZ2V0X21tYXAgKHZvaWQpCiAgIGdydWJfeGVuX3NvcnRfbW1hcCAoKTsK IH0KIAorc3RhdGljIHZvaWQKK2dydWJfeGVuX3NldF9tbWFwICh2b2lkKQoreworICBzdHJ1Y3Qg eGVuX2ZvcmVpZ25fbWVtb3J5X21hcCBtZW1tYXA7CisKKyAgbWVtbWFwLmRvbWlkID0gRE9NSURf U0VMRjsKKyAgbWVtbWFwLm1hcC5ucl9lbnRyaWVzID0gbnJfbWFwX2VudHJpZXM7CisgIHNldF94 ZW5fZ3Vlc3RfaGFuZGxlIChtZW1tYXAubWFwLmJ1ZmZlciwgbWFwKTsKKyAgZ3J1Yl94ZW5faHlw ZXJjYWxsIChfX0hZUEVSVklTT1JfbWVtb3J5X29wLCBYRU5NRU1fc2V0X21lbW9yeV9tYXAsCisJ CSAgICAgIChncnViX3VpbnQzMl90KSAoJm1lbW1hcCksIDAsIDAsIDAsIDApOworfQorCitzdGF0 aWMgZ3J1Yl91aW50NjRfdAorZ3J1Yl94ZW5fZmluZF9wYWdlIChncnViX3VpbnQ2NF90IHN0YXJ0 KQoreworICB1bnNpZ25lZCBpbnQgaSwgajsKKyAgZ3J1Yl91aW50NjRfdCBsYXN0ID0gc3RhcnQ7 CisKKyAgLyogVHJ5IHRvIGZpbmQgYSBlODIwIG1hcCBob2xlIGJlbG93IDRHLiAqLworICAvKiBS ZWxpZXMgb24gcGFnZS1hbGlnbmVkIGVudHJpZXMgKGFkZHIgYW5kIGxlbikgYW5kIGlucHV0IChz dGFydCkuICovCisgIGZvciAoaSA9IDA7IGkgPCBucl9tYXBfZW50cmllczsgaSsrKQorICAgIHsK KyAgICAgIGlmIChsYXN0ID4gbWFwW2ldLmFkZHIgKyBtYXBbaV0ubGVuKQorCWNvbnRpbnVlOwor ICAgICAgaWYgKGxhc3QgPCBtYXBbaV0uYWRkcikKKwlyZXR1cm4gbGFzdDsKKyAgICAgIGlmICgo bWFwW2ldLmFkZHIgPj4gMzIpIHx8ICgobWFwW2ldLmFkZHIgKyBtYXBbaV0ubGVuKSA+PiAzMikp CisJYnJlYWs7CisgICAgICBsYXN0ID0gbWFwW2ldLmFkZHIgKyBtYXBbaV0ubGVuOworICAgIH0K KyAgICBpZiAoaSA9PSBucl9tYXBfZW50cmllcykKKyAgICAgIHJldHVybiBsYXN0OworCisgIC8q IE5vIGhvbGUgZm91bmQsIHVzZSB0aGUgaGlnaGVzdCBSQU0gcGFnZSBiZWxvdyA0RyBhbmQgcmVz ZXJ2ZSBpdC4gKi8KKyAgaWYgKG5yX21hcF9lbnRyaWVzID09IEFSUkFZX1NJWkUgKG1hcCkpCisg ICAgZ3J1Yl94ZW5fcGFuaWMgKCJNZW1vcnkgbWFwIHNpemUgbGltaXQgcmVhY2hlZCFcbiIpOwor ICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IG5yX21hcF9lbnRyaWVzOyBpKyspCisgICAgeworICAg ICAgaWYgKG1hcFtpXS50eXBlICE9IEdSVUJfTUVNT1JZX0FWQUlMQUJMRSkKKwljb250aW51ZTsK KyAgICAgIGlmIChtYXBbaV0uYWRkciA+PiAzMikKKwlicmVhazsKKyAgICAgIGogPSBpOworICAg ICAgaWYgKChtYXBbaV0uYWRkciArIG1hcFtpXS5sZW4pID4+IDMyKQorCWJyZWFrOworICAgIH0K KyAgaWYgKG1hcFtqXS50eXBlICE9IEdSVUJfTUVNT1JZX0FWQUlMQUJMRSkKKyAgICBncnViX3hl bl9wYW5pYyAoIk5vIGZyZWUgbWVtb3J5IHBhZ2UgZm91bmQhXG4iKTsKKyAgaWYgKChtYXBbal0u YWRkciArIG1hcFtqXS5sZW4pID4+IDMyKQorICAgIGxhc3QgPSAoMVVMTCA8PCAzMikgLSBHUlVC X1hFTl9QQUdFX1NJWkU7CisgIGVsc2UKKyAgICBsYXN0ID0gbWFwW2pdLmFkZHIgKyBtYXBbal0u bGVuIC0gR1JVQl9YRU5fUEFHRV9TSVpFOworICBtYXBbbnJfbWFwX2VudHJpZXNdLmFkZHIgPSBs YXN0OworICBtYXBbbnJfbWFwX2VudHJpZXNdLmxlbiA9IEdSVUJfWEVOX1BBR0VfU0laRTsKKyAg bWFwW25yX21hcF9lbnRyaWVzXS50eXBlID0gR1JVQl9NRU1PUllfUkVTRVJWRUQ7CisgIG5yX21h cF9lbnRyaWVzKys7CisgIGdydWJfeGVuX3NvcnRfbW1hcCAoKTsKKworICByZXR1cm4gbGFzdDsK K30KKwogdm9pZAogZ3J1Yl94ZW5fc2V0dXBfcHZoICh2b2lkKQogeworICBncnViX2FkZHJfdCBw YXI7CisKICAgZ3J1Yl94ZW5fY3B1aWRfYmFzZSAoKTsKICAgZ3J1Yl94ZW5fc2V0dXBfaHlwZXJj YWxsX3BhZ2UgKCk7CiAgIGdydWJfeGVuX2dldF9tbWFwICgpOworCisgIC8qIFNldHVwIFhlbiBk YXRhLiAqLworICBncnViX3hlbl9zdGFydF9wYWdlX2FkZHIgPSAmZ3J1Yl94ZW5fc3RhcnRfcGFn ZTsKKworICBwYXIgPSBncnViX3hlbl9nZXRfcGFyYW0gKEhWTV9QQVJBTV9DT05TT0xFX1BGTik7 CisgIGdydWJfeGVuX3N0YXJ0X3BhZ2VfYWRkci0+Y29uc29sZS5kb21VLm1mbiA9IHBhcjsKKyAg Z3J1Yl94ZW5feGNvbnMgPSAodm9pZCAqKSAoZ3J1Yl9hZGRyX3QpIChwYXIgPDwgR1JVQl9YRU5f TE9HX1BBR0VfU0laRSk7CisgIHBhciA9IGdydWJfeGVuX2dldF9wYXJhbSAoSFZNX1BBUkFNX0NP TlNPTEVfRVZUQ0hOKTsKKyAgZ3J1Yl94ZW5fc3RhcnRfcGFnZV9hZGRyLT5jb25zb2xlLmRvbVUu ZXZ0Y2huID0gcGFyOworCisgIHBhciA9IGdydWJfeGVuX2dldF9wYXJhbSAoSFZNX1BBUkFNX1NU T1JFX1BGTik7CisgIGdydWJfeGVuX3N0YXJ0X3BhZ2VfYWRkci0+c3RvcmVfbWZuID0gcGFyOwor ICBncnViX3hlbl94ZW5zdG9yZSA9ICh2b2lkICopIChncnViX2FkZHJfdCkgKHBhciA8PCBHUlVC X1hFTl9MT0dfUEFHRV9TSVpFKTsKKyAgcGFyID0gZ3J1Yl94ZW5fZ2V0X3BhcmFtIChIVk1fUEFS QU1fU1RPUkVfRVZUQ0hOKTsKKyAgZ3J1Yl94ZW5fc3RhcnRfcGFnZV9hZGRyLT5zdG9yZV9ldnRj aG4gPSBwYXI7CisKKyAgcGFyID0gZ3J1Yl94ZW5fZmluZF9wYWdlICgwKTsKKyAgZ3J1Yl94ZW5f Z3JhbnRfdGFibGUgPSBncnViX3hlbl9hZGRfcGh5c21hcCAoWEVOTUFQU1BBQ0VfZ3JhbnRfdGFi bGUsCisJCQkJCSAgICAgICAodm9pZCAqKSBwYXIpOworICBwYXIgPSBncnViX3hlbl9maW5kX3Bh Z2UgKHBhciArIEdSVUJfWEVOX1BBR0VfU0laRSk7CisgIGdydWJfeGVuX3NoYXJlZF9pbmZvID0g Z3J1Yl94ZW5fYWRkX3BoeXNtYXAgKFhFTk1BUFNQQUNFX3NoYXJlZF9pbmZvLAorCQkJCQkgICAg ICAgKHZvaWQgKikgcGFyKTsKKyAgZ3J1Yl94ZW5fc2V0X21tYXAgKCk7CisKKyAgZ3J1Yl9yc2Rw X2FkZHIgPSBwdmhfc3RhcnRfaW5mby0+cnNkcF9wYWRkcjsKIH0KIAogZ3J1Yl9lcnJfdAotLSAK Mi4xNi40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K WGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0 cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA== From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1gPTVL-0006rT-PG for mharc-grub-devel@gnu.org; Wed, 21 Nov 2018 09:29:23 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56240) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gPTVF-0006ku-4I for grub-devel@gnu.org; Wed, 21 Nov 2018 09:29:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gPTVA-0004NS-G4 for grub-devel@gnu.org; Wed, 21 Nov 2018 09:29:17 -0500 Received: from mx2.suse.de ([195.135.220.15]:51192 helo=mx1.suse.de) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gPTVA-0004Im-6Q for grub-devel@gnu.org; Wed, 21 Nov 2018 09:29:12 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 29310AFF9; Wed, 21 Nov 2018 14:29:01 +0000 (UTC) From: Juergen Gross To: grub-devel@gnu.org Cc: xen-devel@lists.xen.org, phcoder@gmail.com, daniel.kiper@oracle.com, roger.pau@citrix.com, hans@knorrie.org, Juergen Gross Subject: [PATCH v5 13/20] xen: setup Xen specific data for PVH Date: Wed, 21 Nov 2018 15:28:48 +0100 Message-Id: <20181121142855.13537-14-jgross@suse.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20181121142855.13537-1-jgross@suse.com> References: <20181121142855.13537-1-jgross@suse.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable 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 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 21 Nov 2018 14:29:18 -0000 Initialize the needed Xen specific data. This is: - the Xen start of day page containing the console and Xenstore ring page PFN and event channel - the grant table - the shared info page Write back the possibly modified memory map to the hypervisor in case the guest is reading it from there again. Set the RSDP address for the guest from the start_info page passed as boot parameter. Signed-off-by: Juergen Gross Reviewed-by: Daniel Kiper --- V4: write back memory map to Xen (Roger Pau Monn=C3=A9) V5: add comment (Daniel Kiper) --- grub-core/kern/i386/xen/pvh.c | 120 ++++++++++++++++++++++++++++++++++++= ++++++ 1 file changed, 120 insertions(+) diff --git a/grub-core/kern/i386/xen/pvh.c b/grub-core/kern/i386/xen/pvh.= c index bb90874b3..6de84eb8e 100644 --- a/grub-core/kern/i386/xen/pvh.c +++ b/grub-core/kern/i386/xen/pvh.c @@ -27,6 +27,7 @@ #include #include #include +#include #include =20 #define XEN_MEMORY_MAP_SIZE 128 @@ -37,6 +38,7 @@ static char hypercall_page[GRUB_XEN_PAGE_SIZE] __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE))); =20 static grub_uint32_t xen_cpuid_base; +static struct start_info grub_xen_start_page; static struct grub_e820_mmap_entry map[XEN_MEMORY_MAP_SIZE]; static unsigned int nr_map_entries; =20 @@ -110,6 +112,36 @@ grub_xen_hypercall (grub_uint32_t callno, grub_uint3= 2_t a0, return __res; } =20 +static grub_uint32_t +grub_xen_get_param (int idx) +{ + struct xen_hvm_param xhv; + int r; + + xhv.domid =3D DOMID_SELF; + xhv.index =3D idx; + r =3D grub_xen_hypercall (__HYPERVISOR_hvm_op, HVMOP_get_param, + (grub_uint32_t) (&xhv), 0, 0, 0, 0); + if (r < 0) + grub_xen_panic ("Could not get parameter from Xen!\n"); + return xhv.value; +} + +static void * +grub_xen_add_physmap (unsigned int space, void *addr) +{ + struct xen_add_to_physmap xatp; + + xatp.domid =3D DOMID_SELF; + xatp.idx =3D 0; + xatp.space =3D space; + xatp.gpfn =3D (grub_addr_t) addr >> GRUB_XEN_LOG_PAGE_SIZE; + if (grub_xen_hypercall (__HYPERVISOR_memory_op, XENMEM_add_to_physmap, + (grub_uint32_t) (&xatp), 0, 0, 0, 0)) + grub_xen_panic ("Memory_op hypercall failed!\n"); + return addr; +} + static void grub_xen_sort_mmap (void) { @@ -196,12 +228,100 @@ grub_xen_get_mmap (void) grub_xen_sort_mmap (); } =20 +static void +grub_xen_set_mmap (void) +{ + struct xen_foreign_memory_map memmap; + + memmap.domid =3D DOMID_SELF; + memmap.map.nr_entries =3D nr_map_entries; + set_xen_guest_handle (memmap.map.buffer, map); + grub_xen_hypercall (__HYPERVISOR_memory_op, XENMEM_set_memory_map, + (grub_uint32_t) (&memmap), 0, 0, 0, 0); +} + +static grub_uint64_t +grub_xen_find_page (grub_uint64_t start) +{ + unsigned int i, j; + grub_uint64_t last =3D start; + + /* Try to find a e820 map hole below 4G. */ + /* Relies on page-aligned entries (addr and len) and input (start). */ + for (i =3D 0; i < nr_map_entries; i++) + { + if (last > map[i].addr + map[i].len) + continue; + if (last < map[i].addr) + return last; + if ((map[i].addr >> 32) || ((map[i].addr + map[i].len) >> 32)) + break; + last =3D map[i].addr + map[i].len; + } + if (i =3D=3D nr_map_entries) + return last; + + /* No hole found, use the highest RAM page below 4G and reserve it. */ + if (nr_map_entries =3D=3D ARRAY_SIZE (map)) + grub_xen_panic ("Memory map size limit reached!\n"); + for (i =3D 0, j =3D 0; i < nr_map_entries; i++) + { + if (map[i].type !=3D GRUB_MEMORY_AVAILABLE) + continue; + if (map[i].addr >> 32) + break; + j =3D i; + if ((map[i].addr + map[i].len) >> 32) + break; + } + if (map[j].type !=3D GRUB_MEMORY_AVAILABLE) + grub_xen_panic ("No free memory page found!\n"); + if ((map[j].addr + map[j].len) >> 32) + last =3D (1ULL << 32) - GRUB_XEN_PAGE_SIZE; + else + last =3D map[j].addr + map[j].len - GRUB_XEN_PAGE_SIZE; + map[nr_map_entries].addr =3D last; + map[nr_map_entries].len =3D GRUB_XEN_PAGE_SIZE; + map[nr_map_entries].type =3D GRUB_MEMORY_RESERVED; + nr_map_entries++; + grub_xen_sort_mmap (); + + return last; +} + void grub_xen_setup_pvh (void) { + grub_addr_t par; + grub_xen_cpuid_base (); grub_xen_setup_hypercall_page (); grub_xen_get_mmap (); + + /* Setup Xen data. */ + grub_xen_start_page_addr =3D &grub_xen_start_page; + + par =3D grub_xen_get_param (HVM_PARAM_CONSOLE_PFN); + grub_xen_start_page_addr->console.domU.mfn =3D par; + grub_xen_xcons =3D (void *) (grub_addr_t) (par << GRUB_XEN_LOG_PAGE_SI= ZE); + par =3D grub_xen_get_param (HVM_PARAM_CONSOLE_EVTCHN); + grub_xen_start_page_addr->console.domU.evtchn =3D par; + + par =3D grub_xen_get_param (HVM_PARAM_STORE_PFN); + grub_xen_start_page_addr->store_mfn =3D par; + grub_xen_xenstore =3D (void *) (grub_addr_t) (par << GRUB_XEN_LOG_PAGE= _SIZE); + par =3D grub_xen_get_param (HVM_PARAM_STORE_EVTCHN); + grub_xen_start_page_addr->store_evtchn =3D par; + + par =3D grub_xen_find_page (0); + grub_xen_grant_table =3D grub_xen_add_physmap (XENMAPSPACE_grant_table= , + (void *) par); + par =3D grub_xen_find_page (par + GRUB_XEN_PAGE_SIZE); + grub_xen_shared_info =3D grub_xen_add_physmap (XENMAPSPACE_shared_info= , + (void *) par); + grub_xen_set_mmap (); + + grub_rsdp_addr =3D pvh_start_info->rsdp_paddr; } =20 grub_err_t --=20 2.16.4