|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] 2.6.32 PV Xen donU guest panic on nested call to arch_enter_lazy_mmu_mode()
Jeremy,Looking at copy_pte_range(), the stale update scenario I described below can't happen. I believe the deadlock could happen but that is not a lazy/not lazy MMU update issue.
Here is an extract from your proposed patch:
static inline void enter_lazy(enum paravirt_lazy_mode mode)
{
+ if (in_interrupt())
+ return;
+
BUG_ON(percpu_read(paravirt_lazy_mode) != PARAVIRT_LAZY_NONE);
My vote is for something like:
static inline void enter_lazy(enum paravirt_lazy_mode mode)
{
- BUG_ON(percpu_read(paravirt_lazy_mode) != PARAVIRT_LAZY_NONE);
+ /*
+ * Switch modes only if we are not in an interrupt context.
+ * The mode is ignored while handling an interrupt.
+ */
+ if (!in_interrupt()) {
+ BUG_ON(percpu_read(paravirt_lazy_mode) !=
PARAVIRT_LAZY_NONE);
- percpu_write(paravirt_lazy_mode, mode);
+ percpu_write(paravirt_lazy_mode, mode);
+ }
}
static void leave_lazy(enum paravirt_lazy_mode mode)
{
- BUG_ON(percpu_read(paravirt_lazy_mode) != mode);
+ /*
+ * Switch modes only if we are not in an interrupt context.
+ * The mode is ignored while handling an interrupt.
+ */
+ if (!in_interrupt()) {
+ BUG_ON(percpu_read(paravirt_lazy_mode) != mode);
- percpu_write(paravirt_lazy_mode, PARAVIRT_LAZY_NONE);
+ percpu_write(paravirt_lazy_mode, PARAVIRT_LAZY_NONE);
+ }
}
Thanks,
Chuck
Chuck Anderson wrote:
Jeremy,Is it possible for an ongoing lazy mode update to have batched some MMU updates; an interrupt occurs; an interrupt routine does a non-lazy MMU update for a PTE that is also in the lazy update queue; that update is overwritten on return from the interrupt when the update queue is flushed? Or are the PTE updates protected by a lock? If they are, wouldn't we deadlock in the interrupt routine when it tries to obtain that (I assume) spinlock?Chuck _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |