linux/arch/x86/kernel
Jeremy Fitzhardinge 8965c1c095 paravirt: clean up lazy mode handling
Currently, the set_lazy_mode pv_op is overloaded with 5 functions:
 1. enter lazy cpu mode
 2. leave lazy cpu mode
 3. enter lazy mmu mode
 4. leave lazy mmu mode
 5. flush pending batched operations

This complicates each paravirt backend, since it needs to deal with
all the possible state transitions, handling flushing, etc. In
particular, flushing is quite distinct from the other 4 functions, and
seems to just cause complication.

This patch removes the set_lazy_mode operation, and adds "enter" and
"leave" lazy mode operations on mmu_ops and cpu_ops.  All the logic
associated with enter and leaving lazy states is now in common code
(basically BUG_ONs to make sure that no mode is current when entering
a lazy mode, and make sure that the mode is current when leaving).
Also, flush is handled in a common way, by simply leaving and
re-entering the lazy mode.

The result is that the Xen, lguest and VMI lazy mode implementations
are much simpler.

Signed-off-by: Jeremy Fitzhardinge <jeremy@xensource.com>
Cc: Andi Kleen <ak@suse.de>
Cc: Zach Amsden <zach@vmware.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Avi Kivity <avi@qumranet.com>
Cc: Anthony Liguory <aliguori@us.ibm.com>
Cc: "Glauber de Oliveira Costa" <glommer@gmail.com>
Cc: Jun Nakajima <jun.nakajima@intel.com>
2007-10-16 11:51:29 -07:00
..
acpi Merge branch 'dmi-const' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/misc-2.6 2007-10-11 19:18:45 -07:00
cpu Merge master.kernel.org:/pub/scm/linux/kernel/git/davej/cpufreq 2007-10-12 15:42:01 -07:00
cpufreq x86_64: move kernel/cpufreq 2007-10-11 11:17:06 +02:00
.gitignore i386: move kernel 2007-10-11 11:17:01 +02:00
alternative.c paravirt: refactor struct paravirt_ops into smaller pv_*_ops 2007-10-16 11:51:29 -07:00
aperture_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
apic_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
apic_64.c x86_64: cleanup apic.c after clock events switch 2007-10-12 23:04:23 +02:00
apm_32.c Merge branch 'dmi-const' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/misc-2.6 2007-10-11 19:18:45 -07:00
asm-offsets_32.c paravirt: refactor struct paravirt_ops into smaller pv_*_ops 2007-10-16 11:51:29 -07:00
asm-offsets_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
asm-offsets.c i386: move kernel 2007-10-11 11:17:01 +02:00
audit_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
bootflag.c i386: move kernel 2007-10-11 11:17:01 +02:00
bugs_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
cpuid.c i386: move kernel 2007-10-11 11:17:01 +02:00
crash_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
crash_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
crash_dump_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
crash_dump_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
doublefault_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
e820_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
e820_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
early_printk.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
early-quirks_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
efi_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
efi_stub_32.S i386: move kernel 2007-10-11 11:17:01 +02:00
entry_32.S paravirt: refactor struct paravirt_ops into smaller pv_*_ops 2007-10-16 11:51:29 -07:00
entry_64.S x86_64: move kernel 2007-10-11 11:17:24 +02:00
genapic_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
genapic_flat_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
geode_32.c x86: Geode Multi-Function General Purpose Timers support 2007-10-12 23:04:06 +02:00
head64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
head_32.S i386: move kernel 2007-10-11 11:17:01 +02:00
head_64.S x86_64: move kernel 2007-10-11 11:17:24 +02:00
hpet.c x86: HPET force enable for ICH5 2007-10-12 23:04:24 +02:00
i386_ksyms_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
i387_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
i387_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
i8237.c i386: move kernel 2007-10-11 11:17:01 +02:00
i8253.c x86_64: remove now unused code 2007-10-12 23:04:23 +02:00
i8259_32.c x86: kill 8253pit.h 2007-10-12 23:04:23 +02:00
i8259_64.c x86_64: convert to clock events 2007-10-12 23:04:07 +02:00
init_task_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
init_task_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
io_apic_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
io_apic_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
ioport_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
ioport_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
irq_32.c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2007-10-11 19:40:14 -07:00
irq_64.c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2007-10-11 19:40:14 -07:00
k8.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
kprobes_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
kprobes_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
ldt_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
ldt_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
machine_kexec_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
machine_kexec_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
Makefile x86_64: move kernel 2007-10-11 11:17:24 +02:00
Makefile_32 x86_64: remove now unused code 2007-10-12 23:04:23 +02:00
Makefile_64 x86_64: remove now unused code 2007-10-12 23:04:23 +02:00
mca_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
mce_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
mce_amd_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
mce_intel_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
mfgpt_32.c x86: Geode MFGPT clock event device support 2007-10-12 23:04:06 +02:00
microcode.c i386: move kernel 2007-10-11 11:17:01 +02:00
module_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
module_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
mpparse_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
mpparse_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
msr.c i386: move kernel 2007-10-11 11:17:01 +02:00
nmi_32.c x86: Fix irq0 / local apic timer accounting 2007-10-12 23:04:06 +02:00
nmi_64.c x86: Fix irq0 / local apic timer accounting 2007-10-12 23:04:07 +02:00
numaq_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
paravirt_32.c paravirt: clean up lazy mode handling 2007-10-16 11:51:29 -07:00
pci-calgary_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
pci-dma_32.c dma_free_coherent() needs irqs enabled (sigh) 2007-10-12 15:03:15 -07:00
pci-dma_64.c dma_free_coherent() needs irqs enabled (sigh) 2007-10-12 15:03:15 -07:00
pci-gart_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
pci-nommu_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
pci-swiotlb_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
pcspeaker.c i386: move kernel 2007-10-11 11:17:01 +02:00
pmtimer_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
process_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
process_64.c x86_64: prepare idle loop for dynamic ticks 2007-10-12 23:04:07 +02:00
ptrace_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
ptrace_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
quirks.c x86: HPET add another ICH7 PCI id 2007-10-12 23:04:24 +02:00
reboot_32.c Merge branch 'dmi-const' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/misc-2.6 2007-10-11 19:18:45 -07:00
reboot_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
reboot_fixups_32.c PCI: pci_get_device call from interrupt in reboot fixups 2007-10-12 15:03:15 -07:00
relocate_kernel_32.S i386: move kernel 2007-10-11 11:17:01 +02:00
relocate_kernel_64.S x86_64: move kernel 2007-10-11 11:17:24 +02:00
scx200_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
setup64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
setup_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
setup_64.c x86: disable apic timer for AMD C1E enabled CPUs 2007-10-12 23:04:07 +02:00
sigframe_32.h i386: move kernel 2007-10-11 11:17:01 +02:00
signal_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
signal_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
smp_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
smp_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
smpboot_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
smpboot_64.c x86_64: convert to clock events 2007-10-12 23:04:07 +02:00
smpcommon_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
srat_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
stacktrace.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
summit_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
suspend_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
suspend_asm_64.S x86_64: move kernel 2007-10-11 11:17:24 +02:00
sys_i386_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
sys_x86_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
syscall_64.c i386/x86_64: move headers to include/asm-x86 2007-10-11 11:20:03 +02:00
syscall_table_32.S i386: move kernel 2007-10-11 11:17:01 +02:00
sysenter_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
tce_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
time_32.c x86: Fix irq0 / local apic timer accounting 2007-10-12 23:04:06 +02:00
time_64.c x86_64: remove now unused code 2007-10-12 23:04:23 +02:00
topology.c i386: move kernel 2007-10-11 11:17:01 +02:00
trampoline_32.S i386: move kernel 2007-10-11 11:17:01 +02:00
trampoline_64.S x86_64: move kernel 2007-10-11 11:17:24 +02:00
traps_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
traps_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
tsc_32.c Merge branch 'dmi-const' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/misc-2.6 2007-10-11 19:18:45 -07:00
tsc_64.c x86: unify timex.h variants 2007-10-12 23:04:23 +02:00
tsc_sync.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
verify_cpu_64.S x86_64: move kernel 2007-10-11 11:17:24 +02:00
vm86_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
vmi_32.c paravirt: clean up lazy mode handling 2007-10-16 11:51:29 -07:00
vmiclock_32.c i386: move kernel 2007-10-11 11:17:01 +02:00
vmlinux_32.lds.S i386: move kernel 2007-10-11 11:17:01 +02:00
vmlinux_64.lds.S x86_64: move kernel 2007-10-11 11:17:24 +02:00
vmlinux.lds.S i386: move kernel 2007-10-11 11:17:01 +02:00
vsmp_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
vsyscall_32.lds.S i386: move kernel 2007-10-11 11:17:01 +02:00
vsyscall_32.S i386: move kernel 2007-10-11 11:17:01 +02:00
vsyscall_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00
vsyscall-int80_32.S i386: move kernel 2007-10-11 11:17:01 +02:00
vsyscall-note_32.S i386: move kernel 2007-10-11 11:17:01 +02:00
vsyscall-sigreturn_32.S i386: move kernel 2007-10-11 11:17:01 +02:00
vsyscall-sysenter_32.S i386: move kernel 2007-10-11 11:17:01 +02:00
x8664_ksyms_64.c x86_64: move kernel 2007-10-11 11:17:24 +02:00