Russell King - ARM Linux <linux@xxxxxxxxxxxxxxxx> wrote @ Tue, 21 Aug 2012 14:34:51 +0200: > On Tue, Aug 21, 2012 at 02:22:35PM +0300, Hiroshi Doyu wrote: > > The following "__get_vm_area_node()" can take gfp_mask, it means that > > this function is expected to be called from atomic context, but why > > it's _NOT_ allowed _ONLY_ from interrupt context? > > One reason is it takes read/write locks without using the IRQ safe > versions for starters (vmap_area_lock and vmlist_lock). I don't see > any other reasons in that bit of code though. IIRC, if *_{irqsave,irqrestore} versions were introduced to protect from IRQ context, could we remove this BUG_ON(in_interrupt()) in __get_vm_area_node() at least? Or is it not encouraged from performance POV? It seems that the solution to allow IOMMU'able device driver to allocate from ISR are: (1) To provide the pre-allocate area like arm_dma_alloc() does, or (2) __get_vm_area_node() can be called from ISR. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href