public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Amit D. Chaudhary" <amit_c@comcast.net>
To: dsaxena@plexity.net, linux-kernel@vger.kernel.org
Subject: Re: MAX_DMA_ADDRESS in include/asm/asm-i386/dma.h (2.6.x and 2.4.x)
Date: Fri, 16 Jul 2004 15:11:58 -0700	[thread overview]
Message-ID: <40F852AE.8060703@comcast.net> (raw)
In-Reply-To: <20040716214721.GA20741@plexity.net>

Deepak,

I am missing what you are directing me to.

If it is,
pci_alloc_consistent(), linux-2.4.25/arch/i386/kernel/pci-dma.c
dma_alloc_coherent(), linux-2.6.8-rc1/arch/i386/kernel/pci-dma.c

They internally seem to __get_free_pages()

If you meant,
pci_pool_create()\pci_pool_alloc
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 
(think mmap.)
This is part of implementing a virtual targets in a Target mode device 
driver.

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 
other issues.

Hopefully that sheds more light on the topic.

Amit


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. 
> 
> ~Deepak
> 

  reply	other threads:[~2004-07-16 22:15 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-07-16 21:37 MAX_DMA_ADDRESS in include/asm/asm-i386/dma.h (2.6.x and 2.4.x) Amit D. Chaudhary
2004-07-16 21:47 ` Deepak Saxena
2004-07-16 22:11   ` Amit D. Chaudhary [this message]
2004-07-16 22:28     ` Deepak Saxena
2004-07-16 23:36       ` Amit D. Chaudhary
2004-08-05 19:00         ` Amit D. Chaudhary

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=40F852AE.8060703@comcast.net \
    --to=amit_c@comcast.net \
    --cc=dsaxena@plexity.net \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox