* [PATCH 3/3] [PREVIEW] Resurrect the VMI lazy mode fixes., [PREVIEW] Resurrect the VMI lazy mode fixes.
@ 2007-04-06 19:51 Zachary Amsden
0 siblings, 0 replies; only message in thread
From: Zachary Amsden @ 2007-04-06 19:51 UTC (permalink / raw)
To: Linux Kernel Mailing List, Andrew Morton, Andi Kleen,
Jeremy Fitzhardinge, Zachary Amsden
Code changes and cleanup in the paravirt-ops queue caused the original
fix for this in 2.6.21 to create conflicts. The easiest thing to do was
back it out before applying the queue. In that case, this fix brings it
back with the newly tidied up paravirt-ops code.
PREVIEW-ONLY: Do not apply. This is dependent on changes which have not
yet been merged.
Signed-off-by: Zachary Amsden <zach@vmware.com>
diff -r ecb571084874 arch/i386/kernel/vmi.c
--- a/arch/i386/kernel/vmi.c Fri Apr 06 12:31:06 2007 -0700
+++ b/arch/i386/kernel/vmi.c Fri Apr 06 12:31:06 2007 -0700
@@ -69,6 +69,7 @@ static struct {
void (*flush_tlb)(int);
void (*set_initial_ap_state)(int, int);
void (*halt)(void);
+ void (*set_lazy_mode)(int mode);
} vmi_ops;
/*
@@ -545,6 +546,26 @@ vmi_startup_ipi_hook(int phys_apicid, un
}
#endif
+static void vmi_set_lazy_mode(int mode)
+{
+ static DEFINE_PER_CPU(int, lazy_mode);
+
+ if (!vmi_ops.set_lazy_mode)
+ return;
+
+ /* Modes should never nest or overlap */
+ BUG_ON(__get_cpu_var(lazy_mode) && !(mode == PARAVIRT_LAZY_NONE ||
+ mode == PARAVIRT_LAZY_FLUSH));
+
+ if (mode == PARAVIRT_LAZY_FLUSH) {
+ vmi_ops.set_lazy_mode(0);
+ vmi_ops.set_lazy_mode(__get_cpu_var(lazy_mode));
+ } else {
+ vmi_ops.set_lazy_mode(new_mode);
+ per_cpu(mode, cpu) = new_mode;
+ }
+}
+
static inline int __init check_vmi_rom(struct vrom_header *rom)
{
struct pci_header *pci;
@@ -769,7 +790,7 @@ static inline int __init activate_vmi(vo
para_wrap(load_esp0, vmi_load_esp0, set_kernel_stack, UpdateKernelStack);
para_fill(set_iopl_mask, SetIOPLMask);
para_fill(io_delay, IODelay);
- para_fill(set_lazy_mode, SetLazyMode);
+ para_wrap(set_lazy_mode, vmi_set_lazy_mode, set_lazy_mode, SetLazyMode);
/* user and kernel flush are just handled with different flags to FlushTLB */
para_wrap(flush_tlb_user, vmi_flush_tlb_user, flush_tlb, FlushTLB);
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2007-04-06 19:54 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-04-06 19:51 [PATCH 3/3] [PREVIEW] Resurrect the VMI lazy mode fixes., [PREVIEW] Resurrect the VMI lazy mode fixes Zachary Amsden
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome