Hi! > > /* > > * real ring DMA buffer > > * each ring/block may need up to 8 bytes for alignment, hence the > > * additional bytes tacked onto the end. > > */ > > ring_header->size = size = > > sizeof(struct atl1c_tpd_desc) * tpd_ring->count * 2 + > > sizeof(struct atl1c_rx_free_desc) * rx_desc_count + > > sizeof(struct atl1c_recv_ret_status) * rx_desc_count + > > 8 * 4; > > > > ring_header->desc = pci_alloc_consistent(pdev, ring_header->size, > > &ring_header->dma); > > Why is pci_alloc_consistent doing an unconditional GFP_ATOMIC > allocation? atl1_setup_ring_resources already does GFP_KERNEL > allocation in the same function so this should be sleepable > context. I think we should either add pci_alloc_consistent_gfp if > there are no explicit reasons to not do so or you can workaround There's existing interface "dma_alloc_coherent" which can be used. I did not yet try with __GFP_REPEAT, but GFP_KERNEL should already be big improvement. Let me send a patch.. Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html -- 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=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>