Re: MAX_DMA_ADDRESS in include/asm/asm-i386/dma.h (2.6.x and 2.4.x)
From: Amit D. Chaudhary
Date: Fri Jul 16 2004 - 17:17:17 EST
I am missing what you are directing me to.
If it is,
They internally seem to __get_free_pages()
If you meant,
the code in question does not need fixed size buffers like kmem_cache_alloc.
Here is the actual usage planned,
The DMA buffer is a variable size buffer (typically 1k to 128K)
represent a read or write from an FC initiator. This memory is passed as
data segments (sg list) with various CTIOs (Type of IOCB on Qlogic FC
HBA chips). For a write command, the memory is used to read the data
into the memory and then pass it to a user application without any copy
This is part of implementing a virtual targets in a Target mode device
The memory need not be page size, as a matter of fact, using a large
consecutive block, for example using alloc_bootmem_low() during kernel
bootup, will simplify the data transfer and result in no internal
fragmentation, it does introduce inflexibility in changing the size and
Hopefully that sheds more light on the topic.
Deepak Saxena wrote:
On Jul 16 2004, at 14:37, Amit D. Chaudhary was caught saying:-
While writing some DMA page gathering code, I realize that
__get_free_page or kmalloc does not return memory more than 16 MB
(typically around 11-12 MB even if it done right after a reboot.)
Since this is for a PCI device (A Fibre channel HBA), I remembered that
the book Linux Device Driver, edition 2 mentions that the 16 MB limit is
for DMA with ISA devices, while PCI DMA can access upto 950 MB or so,
using 32 bit addresses.
Using __get_free_page() or kmalloc() for device DMA'ble descriptors (I am
guessing that's what you are doing) is wrong. See Documentation/DMA-API.txt
and Documentation/DMA-mapping.txt for the proper way to do this.
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/