Prev: linux-next: build warning after merge of the sound tree
Next: drivers/serial/sunsu.c: Correct use after free
From: Jeremy Fitzhardinge on 30 Mar 2010 01:00 On 03/29/2010 09:27 PM, Rusty Russell wrote: > On Mon, 15 Mar 2010 07:53:10 am Johannes Stezenbach wrote: > >> On Sun, Mar 14, 2010 at 06:34:59PM +0100, I wrote: >> >>> Am I correct to assume that I can avoid the issue >>> by switching to a 64bit kernel (on host + guest)? >>> >> Silly question ;-/ >> >> So what would be the real fix? >> > That patch broke Real Machines. The real answer is actually to do some > more emulation in the host; I like lguest but I can't really justify many > lguest-specific hacks outside the lguest dirs. > > There are a few patches needed to make Linus' latest work, I'll post them > soon. But for this specific issue, how's this? > > Subject: lguest: workaround cmpxchg8b_emu by ignoring cli in the guest. > > It's only used by cmpxchg8b_emu (see db677ffa5f5a for the gory > details), and fixing that to be paravirt aware would be more work than > simply ignoring it (and AFAICT only help lguest). > > (We can't emulate it properly: the popf which expects to restore interrupts > does not trap). > Why isn't the cli getting paravirtualized? J > Signed-off-by: Rusty Russell<rusty(a)rustcorp.com.au> > Cc: Jeremy Fitzhardinge<jeremy(a)xensource.com> > Cc: virtualization(a)lists.osdl.org > > diff --git a/drivers/lguest/x86/core.c b/drivers/lguest/x86/core.c > --- a/drivers/lguest/x86/core.c > +++ b/drivers/lguest/x86/core.c > @@ -288,6 +288,18 @@ static int emulate_insn(struct lg_cpu *c > insn = lgread(cpu, physaddr, u8); > > /* > + * Around 2.6.33, the kernel started using an emulation for the > + * cmpxchg8b instruction in early boot on many configurations. This > + * code isn't paravirtualized, and it tries to disable interrupts. > + * Ignore it, which will Mostly Work. > + */ > + if (insn == 0xfa) { > + /* "cli", or Clear Interrupt Enable instruction. Skip it. */ > + cpu->regs->eip++; > + return 1; > + } > + > + /* > * 0x66 is an "operand prefix". It means it's using the upper 16 bits > * of the eax register. > */ > > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |