[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v5 08/12] x86/hyperv: provide Hyper-V hypercall functions



On Wed, Jan 29, 2020 at 08:20:30PM +0000, Wei Liu wrote:
> These functions will be used later to make hypercalls to Hyper-V.
> 
> Signed-off-by: Wei Liu <liuwe@xxxxxxxxxxxxx>
> ---
> v5:
> 1. Switch back to direct call
> 2. Fix some issues pointed out by Jan
> 
> I tried using the asm(".equ ..") trick but hit a problem with %c again.
> 
> mm.c:5736:5: error: invalid 'asm': operand is not a condition code, invalid 
> operand code 'c'
>                asm ( ".equ HV_HCALL_PAGE, %c0; .global HV_HCALL_PAGE"
> ---
>  MAINTAINERS                              |  1 +
>  xen/arch/x86/guest/hyperv/hyperv.c       |  6 ++
>  xen/arch/x86/xen.lds.S                   |  4 +
>  xen/include/asm-x86/fixmap.h             |  3 +-
>  xen/include/asm-x86/guest/hyperv-hcall.h | 96 ++++++++++++++++++++++++
>  5 files changed, 108 insertions(+), 2 deletions(-)
>  create mode 100644 xen/include/asm-x86/guest/hyperv-hcall.h
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 04d91482cd..d0a5ed635b 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -519,6 +519,7 @@ S:        Supported
>  F:   xen/arch/x86/guest/hyperv/
>  F:   xen/arch/x86/hvm/viridian/
>  F:   xen/include/asm-x86/guest/hyperv.h
> +F:   xen/include/asm-x86/guest/hyperv-hcall.h
>  F:   xen/include/asm-x86/guest/hyperv-tlfs.h
>  F:   xen/include/asm-x86/hvm/viridian.h
>  
> diff --git a/xen/arch/x86/guest/hyperv/hyperv.c 
> b/xen/arch/x86/guest/hyperv/hyperv.c
> index 2bedcc438c..932a648ff7 100644
> --- a/xen/arch/x86/guest/hyperv/hyperv.c
> +++ b/xen/arch/x86/guest/hyperv/hyperv.c
> @@ -123,6 +123,12 @@ static const struct hypervisor_ops ops = {
>      .setup = setup,
>  };
>  
> +static void __maybe_unused build_assertions(void)
> +{
> +    /* We use 1 in linker script */
> +    BUILD_BUG_ON(FIX_X_HYPERV_HCALL != 1);

I wouldn't mind if this was placed together with the hypercall page
setup instead of creating a dummy function for it.

> +}
> +
>  /*
>   * Local variables:
>   * mode: C
> diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S
> index 97f9c07891..8e02b4c648 100644
> --- a/xen/arch/x86/xen.lds.S
> +++ b/xen/arch/x86/xen.lds.S
> @@ -329,6 +329,10 @@ SECTIONS
>    efi = .;
>  #endif
>  
> +#ifdef CONFIG_HYPERV_GUEST
> +  hv_hcall_page = ABSOLUTE(__fix_x_to_virt(1));

I assume there's no way to use FIX_X_HYPERV_HCALL because it's an
enum?

> +#endif
> +
>    /* Sections to be discarded */
>    /DISCARD/ : {
>         *(.exit.text)
> diff --git a/xen/include/asm-x86/fixmap.h b/xen/include/asm-x86/fixmap.h
> index 8094546b75..a9bcb068cb 100644
> --- a/xen/include/asm-x86/fixmap.h
> +++ b/xen/include/asm-x86/fixmap.h
> @@ -16,6 +16,7 @@
>  
>  #define FIXADDR_TOP (VMAP_VIRT_END - PAGE_SIZE)
>  #define FIXADDR_X_TOP (XEN_VIRT_END - PAGE_SIZE)
> +#define __fix_x_to_virt(x) (FIXADDR_X_TOP - ((x) << PAGE_SHIFT))
>  
>  #ifndef __ASSEMBLY__
>  
> @@ -110,8 +111,6 @@ extern void __set_fixmap_x(
>  
>  #define clear_fixmap_x(idx) __set_fixmap_x(idx, 0, 0)
>  
> -#define __fix_x_to_virt(x) (FIXADDR_X_TOP - ((x) << PAGE_SHIFT))
> -
>  #define fix_x_to_virt(x)   ((void *)__fix_x_to_virt(x))

This seems like some unrelated code movement?

Thanks, Roger.

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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.