Andrew Gallagher
2007-Jul-29 00:02 UTC
[Xen-devel] map_domain_page_global() and interrupts
In the file xen/arch/x86/x86_32/domain_page.c, the map_domain_page_global function has the following assertion: ASSERT(!in_irq() && local_irq_is_enabled()). This assertion is followed by use of a spin lock without disabling then reenabling irqs. The assertion that the function is not called from an interrupted context seems to flag this function as not interrupt safe. Why is this? Is the use of the IOREMAP_VIRT not interrupt safe itself. The only reason this seems to be not interrupt safe is becuase of the use of a spinlock without disabling and reenabling irqs. My question is that, if interrupts are disabled then reenabled before and after acquiring and releasing the spinlock, is it then ok to call this function from the context of an interrupt? Thanks, Andrew _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
!in_irq() because the function is not reentrant. local_irq_is_enabled() because the function uses flush_tlb_all() which must be able to IPI remote CPUs. We mustn''t have them stuck spinning on globalmap_lock with interrupts disabled -- that would result in deadlock. -- Keir On 29/7/07 01:02, "Andrew Gallagher" <ajcg@CS.UCLA.EDU> wrote:> In the file xen/arch/x86/x86_32/domain_page.c, the > map_domain_page_global function has the following assertion: > ASSERT(!in_irq() && local_irq_is_enabled()). This assertion is followed > by use of a spin lock without disabling then reenabling irqs. > > The assertion that the function is not called from an interrupted context > seems to flag this function as not interrupt safe. Why is this? Is the > use of the IOREMAP_VIRT not interrupt safe itself. The only reason this > seems to be not interrupt safe is becuase of the use of a spinlock without > disabling and reenabling irqs. > > My question is that, if interrupts are disabled then reenabled before and > after acquiring and releasing the spinlock, is it then ok to call this > function from the context of an interrupt? > > Thanks, > Andrew > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel