RE: kernel memory allocation - please help me

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




-----Original Message-----
From: Arjan van de Ven [mailto:arjan@xxxxxxxxxxxxx]
Sent: Sunday, May 28, 2006 3:51 PM
To: Muneeswaran P - TLS, Chennai
Cc: kernelnewbies@xxxxxxxxxxxx
Subject: RE: kernel memory allocation - please help me


On Sun, 2006-05-28 at 14:38 +0530, Muneeswaran P - TLS, Chennai wrote:
> 
> -----Original Message-----
> From: Arjan van de Ven [mailto:arjan@xxxxxxxxxxxxx]
> Sent: Saturday, May 27, 2006 6:58 PM
> To: Muneeswaran P - TLS, Chennai
> Cc: kernelnewbies@xxxxxxxxxxxx
> Subject: Re: kernel memory allocation - please help me
> 
> 
> On Sat, 2006-05-27 at 17:13 +0530, Muneeswaran P - TLS, Chennai wrote:
> > Hi,
> > 
> > Pls help me.
> > 
> > 	I am writing device driver (kernel 2.6 ) for PCI-X card.
> > 
> > 	Pls clarify the following doubts:
> > 	1. DPRAM is memory mapped to PCI-X card. BAR-0 is mapped to DPRAM.
> > 	2. I have to transfer data from main memory to DPRAM using bus
> > master concept.
> > 
> > 	3. I have allocated main memory using kmalloc() call. How to make
> > this main memory area as non-cacheable one ? 
> 
> why would it have to be uncachable?
> 
> Processors keep copies of recently accessed memory areas in a fast, local
> cache;
> without this cache, reasonable performance is not possible. If the device
> changes an
> area of main memory, it is imperative that any processor caches covering
> that area be
> invalidated; otherwise the processor may work with an incorrect image of
> main memory,
> and data corruption results. 

I understand that; there are 2 basic designs here
1) the CPU sniffs the bus and invalidates automatically (this is done on
x86 for example)
2) the OS has to do it

> Similarly, when the device reads data
> from main memory, any changes to that memory residing in processor caches
> must be
> flushed out first.

In Linux, if you use the DMA API correctly (pci_map_* etc) then this
flushing is done for you automatically. Either by the API, or by the cpu
in case of a dma cache coherent CPU such as x86. This is why you need to
use the API, it takes care of this for you.

I am using AMD athlon processor. 
Basically, i allocated memory using kmalloc(). Then pci_map_single() call to
map that memory.
After bus master data transfer, i used pci_unmap_single() call.
If it is processor specific, then it will be a problem right.
Is it correct ?
DISCLAIMER 
The contents of this e-mail and any attachment(s) are confidential and intended for the 

named recipient(s) only. It shall not attach any liability on the originator or HCL or its 

affiliates. Any views or opinions presented in this email are solely those of the author and 

may not necessarily reflect the opinions of HCL or its affiliates. Any form of reproduction, 

dissemination, copying, disclosure, modification, distribution and / or publication of this 

message without the prior written consent of the author of this e-mail is strictly 

prohibited. If you have received this email in error please delete it and notify the sender 

immediately. Before opening any mail and attachments please check them for viruses and 

defect.

--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux