All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wei Liu <wl@xen.org>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: "Wei Liu" <liuwe@microsoft.com>, "Wei Liu" <wl@xen.org>,
	"Paul Durrant" <paul@xen.org>,
	"Michael Kelley" <mikelley@microsoft.com>,
	"Jan Beulich" <jbeulich@suse.com>,
	"Xen Development List" <xen-devel@lists.xenproject.org>,
	"Roger Pau Monné" <roger.pau@citrix.com>
Subject: Re: [Xen-devel] [PATCH 5/8] x86/hyperv: provide Hyper-V hypercall functions
Date: Mon, 30 Dec 2019 13:36:00 +0000	[thread overview]
Message-ID: <20191230133600.sagi4t4e2b2gkrcz@debian> (raw)
In-Reply-To: <cd41600f-6e83-572e-2083-29aa1317d78a@citrix.com>

On Mon, Dec 30, 2019 at 01:04:33PM +0000, Andrew Cooper wrote:
> On 29/12/2019 18:33, Wei Liu wrote:
> > These functions will be used later to make hypercalls to Hyper-V.
> >
> > I couldn't find reference in TLFS that Hyper-V clobbers flags and
> > r9-r11, but Linux's commit message says it does. Err on the safe side.
> >
> > Signed-off-by: Wei Liu <liuwe@microsoft.com>
> > ---
> >  xen/include/asm-x86/guest/hyperv-hypercall.h | 105 +++++++++++++++++++
> >  1 file changed, 105 insertions(+)
> >  create mode 100644 xen/include/asm-x86/guest/hyperv-hypercall.h
> >
> > diff --git a/xen/include/asm-x86/guest/hyperv-hypercall.h b/xen/include/asm-x86/guest/hyperv-hypercall.h
> > new file mode 100644
> > index 0000000000..6017123be5
> > --- /dev/null
> > +++ b/xen/include/asm-x86/guest/hyperv-hypercall.h
> > @@ -0,0 +1,105 @@
> > +/******************************************************************************
> > + * asm-x86/guest/hyperv-hypercall.h
> > + *
> > + * This program is free software; you can redistribute it and/or
> > + * modify it under the terms and conditions of the GNU General Public
> > + * License, version 2, as published by the Free Software Foundation.
> > + *
> > + * This program is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> > + * General Public License for more details.
> > + *
> > + * You should have received a copy of the GNU General Public
> > + * License along with this program; If not, see <http://www.gnu.org/licenses/>.
> > + *
> > + * Copyright (c) 2019 Microsoft.
> > + */
> > +
> > +#ifndef __X86_HYPERV_HYPERCALL_H__
> > +#define __X86_HYPERV_HYPERCALL_H__
> > +
> > +#include <xen/types.h>
> > +
> > +#include <asm/asm_defns.h>
> > +#include <asm/guest/hyperv-tlfs.h>
> > +#include <asm/page.h>
> > +
> > +extern void *hv_hypercall;
> > +
> > +static inline uint64_t hv_do_hypercall(uint64_t control, paddr_t input, paddr_t output)
> > +{
> > +    uint64_t status;
> > +
> > +    if ( !hv_hypercall )
> > +        return ~0ULL;
> > +
> > +    asm volatile ("mov %[output], %%r8\n"
> > +                  "call *%[hypercall_page]"
> > +                  : "=a" (status), "+c" (control),
> > +                    "+d" (input) ASM_CALL_CONSTRAINT
> > +                  : [output] "rm" (output),
> > +                    [hypercall_page] "m" (hv_hypercall)
> > +                  : "cc", "memory", "r8", "r9", "r10", "r11");
> > +
> > +    return status;
> > +}
> 
> Indirect calls are expensive these days due to retpoline/IBRS, and in
> this case, unnecessary.
> 
> You want something like:
> 
> asm ( ".pushsection \".text.page_aligned\", \"ax\", @progbits\n\t"
>       ".align 4096\n\t"
>       ".globl hyperv_hypercall\n\t"
>       "hyperv_hypercall:\n\t"
>       "mov -1, %rax\n\t"
>       "ret\n\t"
>       ".align 4096;\n\t" );
> 
> Which will put one page worth of space in .text.page_aligned (so it gets
> mapped executable), at a location the linker can evaluate (so you can
> use a direct call, and the disassembly will be easier to follow), which
> is initialised to the "not ready yet" code so you don't need a runtime
> check in every hypercall that you didn't get the order of initialisation
> wrong at boot.

This works for me. Thanks.

Wei.

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

  reply	other threads:[~2019-12-30 13:36 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-29 18:33 [Xen-devel] [PATCH 0/8] More Hyper-V infrastructure Wei Liu
2019-12-29 18:33 ` [Xen-devel] [PATCH 1/8] x86: include xen/lib.h in guest/pvh-boot.h Wei Liu
2020-01-03 16:09   ` Jan Beulich
2019-12-29 18:33 ` [Xen-devel] [PATCH 2/8] x86/hyperv: detect absolutely necessary MSRs Wei Liu
2020-01-03 11:01   ` Paul Durrant
2020-01-03 16:14     ` Jan Beulich
2019-12-29 18:33 ` [Xen-devel] [PATCH 3/8] x86: rename guest/hypercall.h to guest/xen-hypercall.h Wei Liu
2020-01-03 11:02   ` Paul Durrant
2020-01-03 16:16   ` Jan Beulich
2020-01-03 16:18     ` Wei Liu
2019-12-29 18:33 ` [Xen-devel] [PATCH 4/8] x86/hyperv: setup hypercall page Wei Liu
2019-12-29 19:54   ` Michael Kelley
2019-12-29 22:58     ` Wei Liu
2019-12-30 12:55   ` Andrew Cooper
2019-12-30 13:33     ` Wei Liu
2019-12-30 13:42       ` Andrew Cooper
2019-12-29 18:33 ` [Xen-devel] [PATCH 5/8] x86/hyperv: provide Hyper-V hypercall functions Wei Liu
2019-12-30 13:04   ` Andrew Cooper
2019-12-30 13:36     ` Wei Liu [this message]
2019-12-29 18:33 ` [Xen-devel] [PATCH 6/8] x86/hyperv: provide percpu hypercall input page Wei Liu
2020-01-03 11:08   ` Paul Durrant
2019-12-29 18:33 ` [Xen-devel] [PATCH 7/8] x86/hyperv: retrieve vp_index from Hyper-V Wei Liu
2020-01-03 11:11   ` Paul Durrant
2020-01-03 14:20     ` Wei Liu
2019-12-29 18:33 ` [Xen-devel] [PATCH 8/8] x86/hyperv: setup VP assist page Wei Liu
2019-12-29 19:59   ` Michael Kelley
2019-12-29 22:58     ` Wei Liu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191230133600.sagi4t4e2b2gkrcz@debian \
    --to=wl@xen.org \
    --cc=andrew.cooper3@citrix.com \
    --cc=jbeulich@suse.com \
    --cc=liuwe@microsoft.com \
    --cc=mikelley@microsoft.com \
    --cc=paul@xen.org \
    --cc=roger.pau@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.