Messages in this thread | | | Date | Thu, 25 Dec 2008 19:18:10 +0100 | From | Ingo Molnar <> | Subject | Re: kvm vmload/vmsave vs tss.ist |
| |
* Avi Kivity <avi@redhat.com> wrote:
> Ingo Molnar wrote: >>> I think it's enough to switch %rsp before incrementing irqcount, no? >>> >> >> no - that would introduce a small race: if an exception (say an NMI or >> MCE, or a debug trap) happens in that small window then the exception >> context thinks that it's on the IRQ stack already, and would use the >> task stack. >> >> > > I'm suggesting > > check irqcount > if (wasnt_in_irq) > rsp = irqstack > ++irqcount > > If the NMI happens before the increment, we'll switch the stack > unconditionally, and if the NMI happens after the increment, then we > won't switch the stack, but we're guaranteed to be on the irqstack > anyway. The window size is negative :) > > Similarly, the exit path should be > > oldstack_reg = oldstack; > --irqcount; > rsp = oldstack_register; > > To guarantee that by the time we decrement irqcount, we don't need the > stack anymore.
agreed, something like this would work too. My suggestion, to eliminate irqcount altogether and just check RSP against the known-irqstack-range, could result in slightly smaller (and thus faster) code, but it's a marginal difference at best.
Ingo
| |