From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Kiper Subject: Re: [PATCH v2 10/18] xen: setup hypercall page for PVH Date: Fri, 19 Oct 2018 14:30:14 +0200 Message-ID: <20181019123014.GG4422@olila.i.net-space.pl> References: <20181009110317.6022-1-jgross@suse.com> <20181009110317.6022-11-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20181009110317.6022-11-jgross@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Juergen Gross Cc: hans@knorrie.org, grub-devel@gnu.org, phcoder@gmail.com, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org T24gVHVlLCBPY3QgMDksIDIwMTggYXQgMDE6MDM6MDlQTSArMDIwMCwgSnVlcmdlbiBHcm9zcyB3 cm90ZToKPiBBZGQgdGhlIG5lZWRlZCBjb2RlIHRvIHNldHVwIHRoZSBoeXBlcmNhbGwgcGFnZSBm b3IgY2FsbGluZyBpbnRvIHRoZQo+IFhlbiBoeXBlcnZpc29yLgo+Cj4gU2lnbmVkLW9mZi1ieTog SnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuY29tPgo+IC0tLQo+ICBncnViLWNvcmUva2Vybi9p Mzg2L3hlbi9wdmguYyB8IDcwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKPiAgMSBmaWxlIGNoYW5nZWQsIDcwIGluc2VydGlvbnMoKykKPgo+IGRpZmYgLS1naXQg YS9ncnViLWNvcmUva2Vybi9pMzg2L3hlbi9wdmguYyBiL2dydWItY29yZS9rZXJuL2kzODYveGVu L3B2aC5jCj4gaW5kZXggMTgyZWY5NWY5Li5jMWIxY2Y4ZGIgMTAwNjQ0Cj4gLS0tIGEvZ3J1Yi1j b3JlL2tlcm4vaTM4Ni94ZW4vcHZoLmMKPiArKysgYi9ncnViLWNvcmUva2Vybi9pMzg2L3hlbi9w dmguYwo+IEBAIC0yMCwxNCArMjAsODQgQEAKPiAgI2luY2x1ZGUgPGdydWIvbWlzYy5oPgo+ICAj aW5jbHVkZSA8Z3J1Yi9tZW1vcnkuaD4KPiAgI2luY2x1ZGUgPGdydWIvbW0uaD4KPiArI2luY2x1 ZGUgPGdydWIvaTM4Ni9jcHVpZC5oPgo+ICAjaW5jbHVkZSA8Z3J1Yi94ZW4uaD4KPiAgI2luY2x1 ZGUgPGdydWIvbWFjaGluZS9rZXJuZWwuaD4KPgo+ICBncnViX3VpbnQ2NF90IGdydWJfcnNkcF9h ZGRyOwo+Cj4gK3N0YXRpYyBzdHJ1Y3QgeyBjaGFyIF9lbnRyeVszMl07IH0gaHlwZXJjYWxsX3Bh Z2VbMTI4XQo+ICsgIF9fYXR0cmlidXRlX18gKChhbGlnbmVkIChHUlVCX1hFTl9QQUdFX1NJWkUp KSk7Cj4gKwo+ICtzdGF0aWMgZ3J1Yl91aW50MzJfdCB4ZW5fY3B1aWRfYmFzZTsKPiArCj4gK3N0 YXRpYyB2b2lkCj4gK2dydWJfeGVuX2Vhcmx5X2hhbHQgKHZvaWQpCj4gK3sKPiArICBhc20gdm9s YXRpbGUgKCJobHQiKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArZ3J1Yl94ZW5fY3B1aWRf YmFzZSAodm9pZCkKPiArewo+ICsgIGdydWJfdWludDMyX3QgYmFzZSwgZWF4LCBzaWduYXR1cmVb M107Cj4gKwo+ICsgIGZvciAoYmFzZSA9IDB4NDAwMDAwMDA7IGJhc2UgPCAweDQwMDEwMDAwOyBi YXNlICs9IDB4MTAwKQo+ICsgICAgewo+ICsgICAgICBncnViX2NwdWlkIChiYXNlLCBlYXgsIHNp Z25hdHVyZVswXSwgc2lnbmF0dXJlWzFdLCBzaWduYXR1cmVbMl0pOwo+ICsgICAgICBpZiAoIWdy dWJfbWVtY21wICgiWGVuVk1NWGVuVk1NIiwgc2lnbmF0dXJlLCAxMikgJiYgKGVheCAtIGJhc2Up ID49IDIpCj4gKwl7Cj4gKwkgIHhlbl9jcHVpZF9iYXNlID0gYmFzZTsKPiArCSAgcmV0dXJuOwo+ ICsJfQo+ICsgICAgfQo+ICsKPiArICBncnViX3hlbl9lYXJseV9oYWx0ICgpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZAo+ICtncnViX3hlbl9zZXR1cF9oeXBlcmNhbGxfcGFnZSAodm9pZCkKPiAr ewo+ICsgIGdydWJfdWludDMyX3QgbXNyLCBwZm4sIGVheCwgZWJ4LCBlY3gsIGVkeDsKPiArCj4g KyAgZ3J1Yl9jcHVpZCAoeGVuX2NwdWlkX2Jhc2UgKyAyLCBlYXgsIGVieCwgZWN4LCBlZHgpOwo+ ICsgIG1zciA9IGVieDsKPiArICBwZm4gPSAoZ3J1Yl91aW50MzJfdCkgKCZoeXBlcmNhbGxfcGFn ZVswXSk7Cj4gKwo+ICsgIGFzbSB2b2xhdGlsZSAoIndybXNyIiA6IDogImMiIChtc3IpLCAiYSIg KHBmbiksICJkIiAoMCkgOiAibWVtb3J5Iik7Cj4gK30KPiArCj4gK2ludAo+ICtncnViX3hlbl9o eXBlcmNhbGwgKGdydWJfdWludDMyX3QgY2FsbG5vLCBncnViX3VpbnQzMl90IGEwLAo+ICsJCSAg ICBncnViX3VpbnQzMl90IGExLCBncnViX3VpbnQzMl90IGEyLAo+ICsJCSAgICBncnViX3VpbnQz Ml90IGEzLCBncnViX3VpbnQzMl90IGE0LAo+ICsJCSAgICBncnViX3VpbnQzMl90IGE1IF9fYXR0 cmlidXRlX18gKCh1bnVzZWQpKSkKPiArewo+ICsgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19y ZXMgIGFzbSgiZWF4Iik7Cj4gKyAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2FyZzAgYXNtKCJl YngiKSA9IF9fYXJnMDsKPiArICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYXJnMSBhc20oImVj eCIpID0gX19hcmcxOwo+ICsgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hcmcyIGFzbSgiZWR4 IikgPSBfX2FyZzI7Cj4gKyAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2FyZzMgYXNtKCJlc2ki KSA9IF9fYXJnMzsKPiArICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYXJnNCBhc20oImVkaSIp ID0gX19hcmc0OwoKV2h5IGRvIHdlIG5lZWQgdGhpcyBwbGF5IHdpdGggcmVnaXN0ZXJzLiBEb2Vz IG5vdCBhc20gYmVsb3cKd29yayB3aXRoICJhIiwgImIiLCAuLi4gbGlrZSBhYm92ZT8KCj4gKwo+ ICsgIF9fYXJnMCA9IGEwOwo+ICsgIF9fYXJnMSA9IGExOwo+ICsgIF9fYXJnMiA9IGEyOwo+ICsg IF9fYXJnMyA9IGEzOwo+ICsgIF9fYXJnNCA9IGE0Owo+ICsgIGFzbSB2b2xhdGlsZSAoImNhbGwg KiVbY2FsbG5vXSIKPiArCQk6ICI9ciIgKF9fcmVzKSwgIityIiAoX19hcmcwKSwgIityIiAoX19h cmcxKSwgIityIiAoX19hcmcyKSwKPiArCQkgICIrciIgKF9fYXJnMyksICIrciIgKF9fYXJnNCkK PiArCQk6IFtjYWxsbm9dICJhIiAoJmh5cGVyY2FsbF9wYWdlW2NhbGxub10pCj4gKwkJOiAibWVt b3J5Iik7CgpEYW5pZWwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qu b3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2 ZWw= From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1gDTvS-0000qo-Rc for mharc-grub-devel@gnu.org; Fri, 19 Oct 2018 08:30:46 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41334) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gDTvQ-0000os-GL for grub-devel@gnu.org; Fri, 19 Oct 2018 08:30:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gDTvM-0002ed-Cd for grub-devel@gnu.org; Fri, 19 Oct 2018 08:30:44 -0400 Received: from aserp2120.oracle.com ([141.146.126.78]:49698) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gDTvL-0001vg-S5 for grub-devel@gnu.org; Fri, 19 Oct 2018 08:30:40 -0400 Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.22/8.16.0.22) with SMTP id w9JCSwQ1134655; Fri, 19 Oct 2018 12:30:20 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=date : from : to : cc : subject : message-id : references : mime-version : content-type : in-reply-to; s=corp-2018-07-02; bh=f+F+Pje0lCULRoOHN/+ldqtcvWdbRYUrdoqRWD13ZxY=; b=zVBUDXkJ670fsXtff2xfj9iHW+dwp3euwth/w7RvbtoY9o/4GOpVoM+8qyne4qX7UGKh mGeoxKxoJ/84XaKA2OfHOPswMUrj7Rbv4vY0xxaHp8y7snwOLHGpkyqBs15ewCME+sGW lK0F9kM/+1zaRhOH4KJGaLSLd/H/o0W+yITYr4sOLz0/5HR3yP7jb2hBqsutBmwdsP6F 1E3wSUnvE6n2KNORoUwbFK6MEiAKtdWp2t/D8tmZMmzJNb2rU4zmCT01t4HWmKXfzceb t40bzOrSmWe2vr6TH2UZGPNVNcIoEOWt9jI1IYj/JzeSVGxbkJAy/tskhDI3bFAYBo1/ 5A== Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by aserp2120.oracle.com with ESMTP id 2n38nqkq8s-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 19 Oct 2018 12:30:20 +0000 Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by userv0021.oracle.com (8.14.4/8.14.4) with ESMTP id w9JCUJYb028922 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 19 Oct 2018 12:30:19 GMT Received: from abhmp0003.oracle.com (abhmp0003.oracle.com [141.146.116.9]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id w9JCUJYo021316; Fri, 19 Oct 2018 12:30:19 GMT Received: from olila.i.net-space.pl (/10.175.180.66) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Fri, 19 Oct 2018 05:30:18 -0700 Date: Fri, 19 Oct 2018 14:30:14 +0200 From: Daniel Kiper To: Juergen Gross Cc: grub-devel@gnu.org, xen-devel@lists.xen.org, phcoder@gmail.com, hans@knorrie.org Subject: Re: [PATCH v2 10/18] xen: setup hypercall page for PVH Message-ID: <20181019123014.GG4422@olila.i.net-space.pl> References: <20181009110317.6022-1-jgross@suse.com> <20181009110317.6022-11-jgross@suse.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20181009110317.6022-11-jgross@suse.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=9050 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1807170000 definitions=main-1810190112 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 141.146.126.78 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, 19 Oct 2018 12:30:45 -0000 On Tue, Oct 09, 2018 at 01:03:09PM +0200, Juergen Gross wrote: > Add the needed code to setup the hypercall page for calling into the > Xen hypervisor. > > Signed-off-by: Juergen Gross > --- > grub-core/kern/i386/xen/pvh.c | 70 +++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 70 insertions(+) > > diff --git a/grub-core/kern/i386/xen/pvh.c b/grub-core/kern/i386/xen/pvh.c > index 182ef95f9..c1b1cf8db 100644 > --- a/grub-core/kern/i386/xen/pvh.c > +++ b/grub-core/kern/i386/xen/pvh.c > @@ -20,14 +20,84 @@ > #include > #include > #include > +#include > #include > #include > > grub_uint64_t grub_rsdp_addr; > > +static struct { char _entry[32]; } hypercall_page[128] > + __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE))); > + > +static grub_uint32_t xen_cpuid_base; > + > +static void > +grub_xen_early_halt (void) > +{ > + asm volatile ("hlt"); > +} > + > +static void > +grub_xen_cpuid_base (void) > +{ > + grub_uint32_t base, eax, signature[3]; > + > + for (base = 0x40000000; base < 0x40010000; base += 0x100) > + { > + grub_cpuid (base, eax, signature[0], signature[1], signature[2]); > + if (!grub_memcmp ("XenVMMXenVMM", signature, 12) && (eax - base) >= 2) > + { > + xen_cpuid_base = base; > + return; > + } > + } > + > + grub_xen_early_halt (); > +} > + > +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 = ebx; > + pfn = (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))) > +{ > + register unsigned long __res asm("eax"); > + register unsigned long __arg0 asm("ebx") = __arg0; > + register unsigned long __arg1 asm("ecx") = __arg1; > + register unsigned long __arg2 asm("edx") = __arg2; > + register unsigned long __arg3 asm("esi") = __arg3; > + register unsigned long __arg4 asm("edi") = __arg4; Why do we need this play with registers. Does not asm below work with "a", "b", ... like above? > + > + __arg0 = a0; > + __arg1 = a1; > + __arg2 = a2; > + __arg3 = a3; > + __arg4 = a4; > + asm volatile ("call *%[callno]" > + : "=r" (__res), "+r" (__arg0), "+r" (__arg1), "+r" (__arg2), > + "+r" (__arg3), "+r" (__arg4) > + : [callno] "a" (&hypercall_page[callno]) > + : "memory"); Daniel