From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH v4 10/19] xen: setup hypercall page for PVH Date: Fri, 2 Nov 2018 13:37:29 +0100 Message-ID: <20181102123738.16395-11-jgross@suse.com> References: <20181102123738.16395-1-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181102123738.16395-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: hans@knorrie.org, phcoder@gmail.com, daniel.kiper@oracle.com, Juergen Gross , xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org QWRkIHRoZSBuZWVkZWQgY29kZSB0byBzZXR1cCB0aGUgaHlwZXJjYWxsIHBhZ2UgZm9yIGNhbGxp bmcgaW50byB0aGUKWGVuIGh5cGVydmlzb3IuCgpTaWduZWQtb2ZmLWJ5OiBKdWVyZ2VuIEdyb3Nz IDxqZ3Jvc3NAc3VzZS5jb20+Ci0tLQpWMzogZ3J1Yl94ZW5fZWFybHlfaGFsdC0+Z3J1Yl94ZW5f cGFuaWMgKFJvZ2VyIFBhdSBNb25uw6kpCiAgICBpc3N1ZSBwYW5pYyBtZXNzYWdlIChSb2dlciBQ YXUgTW9ubsOpKQogICAgcmV3cml0ZSBncnViX3hlbl9oeXBlcmNhbGwgdG8gYXZvaWQgcmVnaXN0 ZXIgdmFyaWFibGVzIChEYW5pZWwgS2lwZXIpCi0tLQogZ3J1Yi1jb3JlL2tlcm4vaTM4Ni94ZW4v cHZoLmMgfCA2OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAx IGZpbGUgY2hhbmdlZCwgNjkgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2dydWItY29yZS9r ZXJuL2kzODYveGVuL3B2aC5jIGIvZ3J1Yi1jb3JlL2tlcm4vaTM4Ni94ZW4vcHZoLmMKaW5kZXgg YWM2MTgxZjRlLi43ZTkwYTQ1MzggMTAwNjQ0Ci0tLSBhL2dydWItY29yZS9rZXJuL2kzODYveGVu L3B2aC5jCisrKyBiL2dydWItY29yZS9rZXJuL2kzODYveGVuL3B2aC5jCkBAIC0yMCwxNCArMjAs ODMgQEAKICNpbmNsdWRlIDxncnViL21pc2MuaD4KICNpbmNsdWRlIDxncnViL21lbW9yeS5oPgog I2luY2x1ZGUgPGdydWIvbW0uaD4KKyNpbmNsdWRlIDxncnViL2kzODYvY3B1aWQuaD4KKyNpbmNs dWRlIDxncnViL2kzODYvaW8uaD4KICNpbmNsdWRlIDxncnViL3hlbi5oPgogI2luY2x1ZGUgPGdy dWIvbWFjaGluZS9rZXJuZWwuaD4KIAorI2RlZmluZSBYRU5fQ09OU09MRV9QT1JUICAgMHhlOQor CiBncnViX3VpbnQ2NF90IGdydWJfcnNkcF9hZGRyOwogCitzdGF0aWMgY2hhciBoeXBlcmNhbGxf cGFnZVtHUlVCX1hFTl9QQUdFX1NJWkVdCisgIF9fYXR0cmlidXRlX18gKChhbGlnbmVkIChHUlVC X1hFTl9QQUdFX1NJWkUpKSk7CisKK3N0YXRpYyBncnViX3VpbnQzMl90IHhlbl9jcHVpZF9iYXNl OworCitzdGF0aWMgdm9pZAorZ3J1Yl94ZW5fcGFuaWMgKGNvbnN0IGNoYXIgKm1zZykKK3sKKyAg Y29uc3QgY2hhciAqYzsKKworICBmb3IgKGMgPSBtc2c7ICpjOyBjKyspCisgICAgZ3J1Yl9vdXRi ICgqYywgWEVOX0NPTlNPTEVfUE9SVCk7CisKKyAgYXNtIHZvbGF0aWxlICgiaGx0Iik7Cit9CisK K3N0YXRpYyB2b2lkCitncnViX3hlbl9jcHVpZF9iYXNlICh2b2lkKQoreworICBncnViX3VpbnQz Ml90IGJhc2UsIGVheCwgc2lnbmF0dXJlWzNdOworCisgIGZvciAoYmFzZSA9IDB4NDAwMDAwMDA7 IGJhc2UgPCAweDQwMDEwMDAwOyBiYXNlICs9IDB4MTAwKQorICAgIHsKKyAgICAgIGdydWJfY3B1 aWQgKGJhc2UsIGVheCwgc2lnbmF0dXJlWzBdLCBzaWduYXR1cmVbMV0sIHNpZ25hdHVyZVsyXSk7 CisgICAgICBpZiAoIWdydWJfbWVtY21wICgiWGVuVk1NWGVuVk1NIiwgc2lnbmF0dXJlLCAxMikg JiYgKGVheCAtIGJhc2UpID49IDIpCisJeworCSAgeGVuX2NwdWlkX2Jhc2UgPSBiYXNlOworCSAg cmV0dXJuOworCX0KKyAgICB9CisKKyAgZ3J1Yl94ZW5fcGFuaWMgKCJGb3VuZCBubyBYZW4gc2ln bmF0dXJlLlxuIik7Cit9CisKK3N0YXRpYyB2b2lkCitncnViX3hlbl9zZXR1cF9oeXBlcmNhbGxf cGFnZSAodm9pZCkKK3sKKyAgZ3J1Yl91aW50MzJfdCBtc3IsIHBmbiwgZWF4LCBlYngsIGVjeCwg ZWR4OworCisgIGdydWJfY3B1aWQgKHhlbl9jcHVpZF9iYXNlICsgMiwgZWF4LCBlYngsIGVjeCwg ZWR4KTsKKyAgbXNyID0gZWJ4OworICBwZm4gPSAoZ3J1Yl91aW50MzJfdCkgKCZoeXBlcmNhbGxf cGFnZVswXSk7CisKKyAgYXNtIHZvbGF0aWxlICgid3Jtc3IiIDogOiAiYyIgKG1zciksICJhIiAo cGZuKSwgImQiICgwKSA6ICJtZW1vcnkiKTsKK30KKworaW50CitncnViX3hlbl9oeXBlcmNhbGwg KGdydWJfdWludDMyX3QgY2FsbG5vLCBncnViX3VpbnQzMl90IGEwLAorCQkgICAgZ3J1Yl91aW50 MzJfdCBhMSwgZ3J1Yl91aW50MzJfdCBhMiwKKwkJICAgIGdydWJfdWludDMyX3QgYTMsIGdydWJf dWludDMyX3QgYTQsCisJCSAgICBncnViX3VpbnQzMl90IGE1IF9fYXR0cmlidXRlX18gKCh1bnVz ZWQpKSkKK3sKKyAgZ3J1Yl91aW50MzJfdCBfX3JlcywgX19pZ24wLCBfX2lnbjEsIF9faWduMiwg X19pZ24zLCBfX2lnbjQ7CisKKyAgYXNtIHZvbGF0aWxlICgiY2FsbCAqJVtjYWxsbm9dIgorCQk6 ICI9YSIgKF9fcmVzKSwgIj1iIiAoX19pZ24wKSwgIj1jIiAoX19pZ24xKSwgIj1kIiAoX19pZ24y KSwKKwkJICAiPVMiIChfX2lnbjMpLCAiPUQiIChfX2lnbjQpCisJCTogIjEiIChhMCksICIyIiAo YTEpLCAiMyIgKGEyKSwgIjQiIChhMyksICI1IiAoYTQpLAorCQkgIFtjYWxsbm9dICJhIiAoJmh5 cGVyY2FsbF9wYWdlW2NhbGxubyAqIDMyXSkKKwkJOiAibWVtb3J5Iik7CisgIHJldHVybiBfX3Jl czsKK30KKwogdm9pZAogZ3J1Yl94ZW5fc2V0dXBfcHZoICh2b2lkKQogeworICBncnViX3hlbl9j cHVpZF9iYXNlICgpOworICBncnViX3hlbl9zZXR1cF9oeXBlcmNhbGxfcGFnZSAoKTsKIH0KIAog Z3J1Yl9lcnJfdAotLSAKMi4xNi40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVu cHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv L3hlbi1kZXZlbA== From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1gIYwX-0006x3-DV for mharc-grub-devel@gnu.org; Fri, 02 Nov 2018 08:52:53 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43969) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gIYwR-0006Bm-DA for grub-devel@gnu.org; Fri, 02 Nov 2018 08:52:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gIYhw-00053Q-1I for grub-devel@gnu.org; Fri, 02 Nov 2018 08:37:49 -0400 Received: from mx2.suse.de ([195.135.220.15]:50242 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 1gIYhv-00052W-KE for grub-devel@gnu.org; Fri, 02 Nov 2018 08:37:47 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 397D4AEFC; Fri, 2 Nov 2018 12:37:43 +0000 (UTC) From: Juergen Gross To: grub-devel@gnu.org Cc: xen-devel@lists.xen.org, phcoder@gmail.com, daniel.kiper@oracle.com, hans@knorrie.org, Juergen Gross Subject: [PATCH v4 10/19] xen: setup hypercall page for PVH Date: Fri, 2 Nov 2018 13:37:29 +0100 Message-Id: <20181102123738.16395-11-jgross@suse.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20181102123738.16395-1-jgross@suse.com> References: <20181102123738.16395-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: Fri, 02 Nov 2018 12:52:49 -0000 Add the needed code to setup the hypercall page for calling into the Xen hypervisor. Signed-off-by: Juergen Gross --- V3: grub_xen_early_halt->grub_xen_panic (Roger Pau Monn=C3=A9) issue panic message (Roger Pau Monn=C3=A9) rewrite grub_xen_hypercall to avoid register variables (Daniel Kiper) --- grub-core/kern/i386/xen/pvh.c | 69 +++++++++++++++++++++++++++++++++++++= ++++++ 1 file changed, 69 insertions(+) diff --git a/grub-core/kern/i386/xen/pvh.c b/grub-core/kern/i386/xen/pvh.= c index ac6181f4e..7e90a4538 100644 --- a/grub-core/kern/i386/xen/pvh.c +++ b/grub-core/kern/i386/xen/pvh.c @@ -20,14 +20,83 @@ #include #include #include +#include +#include #include #include =20 +#define XEN_CONSOLE_PORT 0xe9 + grub_uint64_t grub_rsdp_addr; =20 +static char hypercall_page[GRUB_XEN_PAGE_SIZE] + __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE))); + +static grub_uint32_t xen_cpuid_base; + +static void +grub_xen_panic (const char *msg) +{ + const char *c; + + for (c =3D msg; *c; c++) + grub_outb (*c, XEN_CONSOLE_PORT); + + asm volatile ("hlt"); +} + +static void +grub_xen_cpuid_base (void) +{ + grub_uint32_t base, eax, signature[3]; + + for (base =3D 0x40000000; base < 0x40010000; base +=3D 0x100) + { + grub_cpuid (base, eax, signature[0], signature[1], signature[2]); + if (!grub_memcmp ("XenVMMXenVMM", signature, 12) && (eax - base) >= =3D 2) + { + xen_cpuid_base =3D base; + return; + } + } + + grub_xen_panic ("Found no Xen signature.\n"); +} + +static void +grub_xen_setup_hypercall_page (void) +{ + grub_uint32_t msr, pfn, eax, ebx, ecx, edx; + + grub_cpuid (xen_cpuid_base + 2, eax, ebx, ecx, edx); + msr =3D ebx; + pfn =3D (grub_uint32_t) (&hypercall_page[0]); + + asm volatile ("wrmsr" : : "c" (msr), "a" (pfn), "d" (0) : "memory"); +} + +int +grub_xen_hypercall (grub_uint32_t callno, grub_uint32_t a0, + grub_uint32_t a1, grub_uint32_t a2, + grub_uint32_t a3, grub_uint32_t a4, + grub_uint32_t a5 __attribute__ ((unused))) +{ + grub_uint32_t __res, __ign0, __ign1, __ign2, __ign3, __ign4; + + asm volatile ("call *%[callno]" + : "=3Da" (__res), "=3Db" (__ign0), "=3Dc" (__ign1), "=3Dd" (__ign2), + "=3DS" (__ign3), "=3DD" (__ign4) + : "1" (a0), "2" (a1), "3" (a2), "4" (a3), "5" (a4), + [callno] "a" (&hypercall_page[callno * 32]) + : "memory"); + return __res; +} + void grub_xen_setup_pvh (void) { + grub_xen_cpuid_base (); + grub_xen_setup_hypercall_page (); } =20 grub_err_t --=20 2.16.4