Messages in this thread | | | Date | Sat, 28 Nov 2015 15:50:03 +0100 | From | Pavel Machek <> | Subject | Re: 4.3+: Atheros ethernet fails after resume from s2ram, due to order 4 allocation |
| |
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
| |