Driver Development Kit (DDK)

cancel
Showing results for 
Search instead for 
Did you mean: 

6133 linux driver: dma address always increasing

Using driver nirlpk.ko, we are finding that the kernel is writing 100 of thousands of bytes per minute to /var/log/message.  For example, during a one second data collection period,  one channel, there might be 35 "page downs" of DMA transfer messages ~50 * 35 lines.   This is a diskless system and very quickly the ram disk fills up and no more loging occurs.  Other problems start occuring when the ramdisk is filled.
 
Here is a stop and start of the data acquisitiion program:  Note that about 3 minutes of inactivity occur when we stop the program.
Aug  1 20:42:20 (none) kernel: nirlpk: nNIRLP_release
Aug  1 20:42:20 (none) kernel: nirlpk: Exit clear DMA
Aug  1 20:42:20 (none) kernel: nirlpk: free nNIRLP_tDriverContext (ffff8100bcea9440)
Aug  1 20:42:20 (none) kernel: nirlpk: exit release
Aug  1 20:45:04 (none) kernel: nirlpk: nNIRLP_open(inode (ffff8100bd47f160), file (ffff81005fc78e80))
Aug  1 20:45:04 (none) kernel: nirlpk: minor 0
Aug  1 20:45:04 (none) kernel: nirlpk: Allocated nNIRLP_tDriverContext (ffff8100bcea9840)
Aug  1 20:45:04 (none) kernel: nirlpk: set device 0 (0xffff8100bc5d3640)
Aug  1 20:45:04 (none) kernel: nirlpk: mmap: vma->vm_start = 0x2aaaabc28000
Aug  1 20:45:04 (none) kernel: nirlpk: mmap: vma->vm_end   = 0x2aaaabc29000
Aug  1 20:45:04 (none) kernel: nirlpk: mmap: vma->vm_pgoff = 0xfc7ff
Aug  1 20:45:04 (none) kernel: nirlpk: mmap: vma->vm_start = 0x2aaaabc29000
Aug  1 20:45:04 (none) kernel: nirlpk: mmap: vma->vm_end   = 0x2aaaabc2a000
Aug  1 20:45:04 (none) kernel: nirlpk: mmap: vma->vm_pgoff = 0xfc7fc
 
Note the address  0x2aaaabc28000 it is the first DMA address used for I/O after the program starts up.
The DMA address constantly increases

vma->vm_start = 0x2aaab0a06000
vma->vm_end = 0x2aaab0a16000

  A search thru the entire log shows that address is only re-used if we stop the program and restart it.  If we do not stop the program we find the system (3gb diskless dual opteron) eventually locks up and needs to be physically reset.
 
A grep of our executable code & source does not show any of the above messages.  We assume the kernel must be loging those messages.  Any calls to release/acquire those dma buffers seem to underneath our code.  ie: at the driver level.
 

Message Edited by jstateson on 08-09-2006 09:28 AM

0 Kudos
Message 1 of 2
(7,095 Views)

Hi,

You are right, those messages are printed by the nirlpk driver, but they can be disabled on line 51 of nirlpk.h :
 
    #define nNIRLP_kEnableDebugPrints 0

When set to 0 all prints are disabled.

Unless I'm missing something I'm guessing you don't have the source for the driver.  If that's the case you can get the full source code from the MHDDK page.

Diego.

 
0 Kudos
Message 2 of 2
(6,912 Views)