[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v8 1/9] x86/xpti: avoid copying L4 page table contents when possible
On 18/04/18 18:12, Jan Beulich wrote: >>>> On 18.04.18 at 10:30, <jgross@xxxxxxxx> wrote: >> @@ -160,5 +161,20 @@ unsigned int flush_area_local(const void *va, unsigned >> int flags) >> >> local_irq_restore(irqfl); >> >> + if ( flags & FLUSH_ROOT_PGTBL ) >> + get_cpu_info()->root_pgt_changed = true; >> + >> return flags; >> } >> + >> +void flush_root_pgt_mask(cpumask_t *mask) > > const > >> +{ >> + int cpu; > > unsigned int > >> + struct cpu_info *cpu_info; > > Declaration in most narrow possible scope please. > >> + for_each_cpu(cpu, mask) >> + { >> + cpu_info = (struct cpu_info *)(stack_base[cpu] + STACK_SIZE) - 1; >> + cpu_info->root_pgt_changed = true; >> + } >> +} > > So why is this not sending an IPI to trigger the FLUSH_ROOT_PGTBL processing > visible above? It is not needed for the case this function was introduced. Maybe I should rename it to flush_root_pgt_mask_lazy() ? > Especially the cast you need here looks quite undesirable. In get_cpu_info() it is done the same way. I can add a common helper function to current.h > Plus I > think this is racy (even if quite unlikely to trigger) with a CPU being > brought down: > What if stack_base[cpu] becomes NULL after you've found the respective bit in > mask set. Especially when Xen runs itself virtualized, (almost) arbitrarily > long > periods of time may pass between any two instructions. Right. So either I'm adding some kind of locking/rcu, or I'm switching to use IPIs and access root_pgt_changed only locally. Do you have any preference? Juergen _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |