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