Re: ZONE_DMA

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 21 Sep 2006, Martin Bligh wrote:

> Just ignoring GFP_DMA in the allocator seems like a horrible violation
> to me. GFP_DMA means "give me memory from ZONE_DMA". We're both well
> aware that the whole concept of ZONE_DMA doesn't make much sense, but
> still, that's what it does.

We agreed that the definition of ZONE_DMA is not consistent across 
architectures.

The concept of ZONE_DMA makes only sense in terms of an architectures 
definition if a memory boundary (MAX_DMA_ADDRESS) exists for special DMA 
devices not able to reach all of memory. If we do not have ZONE_DMA then the 
architecture has to remove the definition of CONFIG_ZONE_DMA 
and with that action told us that it is allowable to ignore GFP_DMA since 
all devices can do DMA to all of memory (and all of memory is memory 
without a border which is of course in ZONE_NORMAL).

GFP_DMA like GFP_HIGHMEM and GFP_DMA32 means give me memory from the zone 
if its there. If not (the arch has no such memory) we fall back to ZONE_NORMAL.

This is fully consistent with established uses.

> So if you just put all of memory in ZONE_DMA for your particular
> machine, and bumped the DMA limit up to infinity, we wouldn't need
> any of these patches, right? Which would also match what the other
> arches do for this (eg PPC64).

That would mean abusing ZONE_DMA for a purpose it was not intended for. 
ZOME_DMA is used to partition memory for a DMA not for covering all of 
memory. That works yes but it shows a misunderstanding of the purpose for 
which ZONE_DMA was created.

Also if you would do that then ZONE_NORMAL would be empty and you would 
not be able to reach the goal of a system with a single zone. The slab 
allocator gets thoroughly confused and waste pages allocating 
memory in different slabs for ZONE_NORMAL and ZONE_DMA but they end up in 
the same ZONE_DMA. Various other bits and pieces of the VM behave in 
strange way but it works mostly. Seems that you got lucky but this should 
be fixed.

ZONE_NORMAL is DMAable. GFP_DMA has never meant this is for DMA but it has 
always meant this is for a special restricted DMA zone. That is also why 
you have GFP_DMA32. Both GFP_DMA and GFP_DMA32 select special restricted 
memory areas for handicapped DMA devices that are not able to reach all of 
memory. Neither should cover all of memory.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux