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]
Message-ID: <20080930201224.GL15911@flint.arm.linux.org.uk>
Date:	Tue, 30 Sep 2008 21:12:24 +0100
From:	Russell King - ARM Linux <linux@....linux.org.uk>
To:	Christoph Lameter <cl@...ux-foundation.org>
Cc:	Nicolas Pitre <nico@....org>, lkml <linux-kernel@...r.kernel.org>
Subject: Re: wrong usage of MAX_DMA_ADDRESS in bootmem.h

On Tue, Sep 30, 2008 at 02:56:26PM -0500, Christoph Lameter wrote:
> Nicolas Pitre wrote:
> > I have implemented highmem for ARM.  To catch wrong usage of __pa() and 
> >
> > One issue is that bootmem.h uses __pa(MAX_DMA_ADDRESS). However 
> > MAX_DMA_ADDRESS on ARM is defined as 0xffffffff because there is usually 
> > no restriction on the maximum DMA-able address.
> > 
> > RMK suggested that those places should be using ISA_DMA_THRESHOLD 
> > instead -- here's an excert of our conversation on this topic:
> >
> 
> ok so do
> 
> #define MAX_DMA_ADDRESS ISA_DMA_THRESHOLD

Not correct.  MAX_DMA_ADDRESS is a virtual address.  ISA_DMA_THRESHOLD
is the last byte of _physical_ memory which ISA DMA can transfer:

include/asm-x86/scatterlist.h:#define ISA_DMA_THRESHOLD (0x00ffffff)

So what you've just suggested is completely insane.

>  >> I suspect all those places which are doing __pa(MAX_DMA_ADDRESS) really
> >> want to be using ISA_DMA_THRESHOLD - that's something to raise on LKML
> >> if it's causing problems.
> 
> MAX_DMA_ADDRESS is the highest address used for ZONE_DMA / GFP_DMA

Incorrect.  MAX_DMA_ADDRESS is the highest possible virtual DMA address:

include/asm-x86/dma.h:#define MAX_DMA_ADDRESS      (PAGE_OFFSET + 0x1000000)

Think about what that means on an x86 machine with less than 16MB of RAM.

> Does ISA_DMA_THRESHOLD have any meaning on ARM? If you use old ISA stuff then
> you need CONFIG_ZONE_DMA and therefore also MAX_DMA_ADDRESS.

As we have already covered in the past, CONFIG_ZONE_DMA has to always
be enabled on ARM because ARM always puts all memory in the first zone.
To do otherwise introduces lots of special cases, and I steadfastly
refuse to make the memory initialisation any more complicated than it
already is.

And besides, this has nothing to do with that issue.
--
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