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 <li...@microsoft.com> > --- > 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@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel