On Thu, Jan 30, 2020 at 02:25:26PM +0000, Wei Liu wrote:
> On Thu, Jan 30, 2020 at 03:22:01PM +0100, Roger Pau Monné wrote:
> > On Thu, Jan 30, 2020 at 12:39:20PM +0000, Wei Liu wrote:
> > > On Thu, Jan 30, 2020 at 01:32:26PM +0100, Roger Pau Monné wrote:
> > > > On Thu, Jan 30, 2020 at 12:28:36PM +0000, Wei Liu wrote:
> > > > > On Thu, Jan 30, 2020 at 01:08:07PM +0100, Roger Pau Monné wrote:
> > > > > > 
> > > > > > > +}
> > > > > > > +
> > > > > > >  /*
> > > > > > >   * 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?
> > > > > > 
> > > > > 
> > > > > Yes.
> > > > > 
> > > > > And the trick to generate a symbol didn't work either.
> > > > 
> > > > And you must define that symbol in the linker script? It doesn't seem
> > > > to be used at link time.
> > > > 
> > > 
> > > I don't follow. I wish I could define and use a symbol in the linker
> > > script but couldn't.
> > 
> > It's likely my fault, as I haven't been following the patch series in
> > that much detail. I assume this is done in order to generate better
> > code, rather than doing something like:
> > 
> > void *hv_hcall_page = fix_x_to_virt(FIX_X_HYPERV_HCALL);
> > 
> > In a C file somewhere when the hypercall page is setup?
> 
> Andrew wanted badly to be able to use direct call in the hypercall
> functions. This is what we managed to come up with so far.
> 
> I think what you wrote will still result in an indirect call.
> 
> (The majority of my time spent on this series has been extending Xen to
> do more than it could before.)

Ack, sorry to bother you with questions you have already answered. Not
sure whether defining hv_hcall_page as a global const would make much
difference. Could you maybe use something like alternative_vcall
patching to get rid of the indirection?

I have to admit I find this all quite hard to follow and reason about,
likely because of the mix of C, assembly, and linker script to build
this machinery, but that doesn't mean this isn't the best way.

Thanks, Roger.

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

Reply via email to