Rusty Russell wrote: > On Tue, 2007-09-04 at 14:42 +0100, Jeremy Fitzhardinge wrote: > >> Rusty Russell wrote: >> >>> static inline void arch_flush_lazy_mmu_mode(void) >>> { >>> - PVOP_VCALL1(set_lazy_mode, PARAVIRT_LAZY_FLUSH); >>> + if (unlikely(__get_cpu_var(paravirt_lazy_mode) == PARAVIRT_LAZY_MMU)) >>> + arch_leave_lazy_mmu_mode(); >>> } >>> >>> >> This changes the semantics a bit; previously "flush" would flush >> anything pending but leave us in lazy mode. This just drops lazymode >> altogether? >> >> I guess if we assume that flushing is a rare event then its OK, but I >> think the name's a bit misleading. How does it differ from plain >> arch_leave_lazy_mmu_mode()? >> > > Whether it's likely or unlikely to be in lazy mode, basically. But > you're right, this should be folded, since we don't want to "leave" lazy > mode twice. > Hm, I think there's still a problem here. In the current code, you can legitimately flush lazy mode with preemption enabled (ie, there's no lazy mode currently active), but it's always a bug to enable/disable lazy mode with preemption enabled. Certainly enabling lazy mode with preemption enabled is always a bug, but you could make disable preempt-safe (and the bug checking should be in the common code). J _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/virtualization