On Tue, Feb 11, 2020 at 10:34:24AM +0000, Wei Liu wrote:
> On Mon, Feb 10, 2020 at 06:28:29PM +0100, Roger Pau Monne wrote:
> [...]
> >  
> >  struct hypervisor_ops {
> > @@ -32,6 +34,8 @@ struct hypervisor_ops {
> >      void (*resume)(void);
> >      /* Fix up e820 map */
> >      void (*e820_fixup)(struct e820map *e820);
> > +    /* L0 assisted TLB flush */
> > +    int (*flush_tlb)(const cpumask_t *mask, const void *va, unsigned int 
> > order);
> >  };
> >  
> >  #ifdef CONFIG_GUEST
> > @@ -41,6 +45,14 @@ void hypervisor_setup(void);
> >  int hypervisor_ap_setup(void);
> >  void hypervisor_resume(void);
> >  void hypervisor_e820_fixup(struct e820map *e820);
> > +/*
> > + * L0 assisted TLB flush.
> > + * mask: cpumask of the dirty vCPUs that should be flushed.
> > + * va: linear address to flush, or NULL for global flushes.
> 
> I was in the middle of writing my patch and noticed this.
> 
> I think NULL means "flushing the entire address space" here?

Yes, that's right. I didn't add a way to differentiate between global
(ie: PGE mappings included) flushes and non-global flushes, so all
calls are assumed to imply flushes of global mappings.

It might be better if you adapt it yourself to whatever is more suited
for HyperV which has more selective flushes available. Xen only has an
hypercall to request a global flush on all vCPUs.

Thanks, Roger.

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

Reply via email to