Another way we could approach this is to get rid of ZONE_DMA. Make GFP_DMA a flag which doesn't map to a zone. Rather, it redirects to a separate allocator. At boot, we hand all memory under 16MB to the DMA allocator. The DMA allocator can have a shrinker which just hands back all the memory once we're under memory pressure (if it's never had an allocation). I think we can get rid of the GFP_DMA support in slab/slub. We still need to be able to allocate pages to support bounce buffers / dma_alloc_foo, but there's really no reason to allocate sub-pages at this point. On Sat, Apr 28, 2018, 14:55 Luis R. Rodriguez, wrote: > On Sat, Apr 28, 2018 at 01:42:21AM -0700, Christoph Hellwig wrote: > > On Fri, Apr 27, 2018 at 04:14:56PM +0000, Luis R. Rodriguez wrote: > > > Do we have a list of users for x86 with a small DMA mask? > > > Or, given that I'm not aware of a tool to be able to look > > > for this in an easy way, would it be good to find out which > > > x86 drivers do have a small mask? > > > > Basically you'll have to grep for calls to dma_set_mask/ > > dma_set_coherent_mask/dma_set_mask_and_coherent and their pci_* > > wrappers with masks smaller 32-bit. Some use numeric values, > > some use DMA_BIT_MASK and various places uses local variables > > or struct members to parse them, so finding them will be a bit > > more work. Nothing a coccinelle expert couldn't solve, though :) > > Thing is unless we have a specific flag used consistently I don't believe > we > can do this search with Coccinelle. ie, if we have local variables and > based on > some series of variables things are set, this makes the grammatical > expression > difficult to express. So Cocinelle is not designed for this purpose. > > But I believe smatch [0] is intended exactly for this sort of purpose, is > that > right Dan? I gave a cursory look and I think it'd take me significant time > to > get such hunt down. > > [0] https://lwn.net/Articles/691882/ > > Luis >