lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Thu, 21 Sep 2006 19:59:03 -0700 (PDT)
From:	Christoph Lameter <clameter@....com>
To:	Martin Bligh <mbligh@...igh.org>
cc:	Andrew Morton <akpm@...l.org>, linux-kernel@...r.kernel.org,
	Rohit Seth <rohitseth@...gle.com>
Subject: Re: ZONE_DMA

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 majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ