Hi All,
Since the merge from xen-unstable, there is a small window between
bvt_do_schedule and context_switch in function __enter_schedule, where
interrupt is enabled.
See below scenario:
1. VTI domain accesses legacy IO, VMM gets control, sets VTI-domain into
blocked status and calls __enter_schedule to yield scheduler and wait
QEMU in domain0 to handle IO request.
2. There is a timer interrupt in above window, and this timer interrupt
triggers schedule timer, then in irq_exit function, VMM will do
soft_irq, which in turn will invoke __enter_schedule, thus
__enter_schedule is reentered in VMM, which is not correct.
So the root cause is __enter_schedule is reentered.
The correct way is, soft_irq should be done just before VMM returning to
guest just like in native linux soft-irq is done just before linux
returning to application. But in current implementation soft-irq is done
in irq-exit function.
The reason why xenU can boot is,
xenU is always runable, so it will not be deleted from runqueue, though
__enter_schedule is reentered, no issue appear, as for VTIdomain, when
it does IO operation, it will be set into blocked status and be deleted
from runqueue, which will crash the whole system.
This patch is just a workaround, it makes sure in irq_exit only when VMM
is not in nested interrupted situation, soft_irq is done.
I strongly suggest soft-irq be done in the path of ia64_leave_kernel
just like native linux kernel.
Any comment?
Thanks,
-Anthony
vtidomianboot.patch
Description: vtidomianboot.patch
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
|