public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* __GFP flags and kmalloc failures
@ 2004-11-02 15:49 Pierre Ossman
  2004-11-02 14:44 ` Marcelo Tosatti
  0 siblings, 1 reply; 7+ messages in thread
From: Pierre Ossman @ 2004-11-02 15:49 UTC (permalink / raw)
  To: LKML

I'm trying to allocate a buffer to be used for ISA DMA and I'm 
experiencing some difficulties.

I'm allocating a 64kB buffer (max size for low ISA DMA) using:

kmalloc(65536, GFP_KERNEL | GFP_DMA);

The choice of flags are from another driver that does ISA DMA so I 
didn't put too much thought into them at first.

The problem is now that this allocation doesn't always succeed. When it 
fails I get:

insmod: page allocation failure. order:4, mode:0x11

and a nice little stack dump.

Digging around in gfp.h to see if I have the proper flags I find that I 
currently have the following:

* __GFP_WAIT : This seems to indicate that the process should be put to 
sleep until the allocation can succeed. Doesn't seem to work that way 
though.

* __GFP_IO : What is meant with physical IO? PCI DMA? This buffer needs 
only be read by the ISA DMA controller and the driver in kernel space. 
Any useful data is copied to other buffers.

* __GFP_FS : Since the data is copied before use this probably isn't needed.

* __GFP_DMA : From what I've been told, this flags causes the allocator 
to do the magic required for the buffer to end up i memory accessible 
from the ISA DMA controller. So this seems to be the only flag that 
actually does anything useful.

My question is now, why does the allocation fail (sometimes) and what 
should I do about it?

Memory fragmentation and overusage seems like reasons to why but why 
doesn't the kernel throw out cache pages and reorganise user pages so 
that the allocation can succeed?

As for solutions I've tried using __GFP_REPEAT which seems to do the 
trick. But the double underscore indicates (at least to me) that these 
are internal defines that shouldn't be used except for very special 
cases. What is the policy about these?

Rgds
Pierre

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2004-11-02 19:07 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-11-02 15:49 __GFP flags and kmalloc failures Pierre Ossman
2004-11-02 14:44 ` Marcelo Tosatti
2004-11-02 18:01   ` Pierre Ossman
2004-11-02 15:26     ` Marcelo Tosatti
2004-11-02 18:31       ` Pierre Ossman
2004-11-02 15:55         ` Marcelo Tosatti
2004-11-02 19:06           ` Pierre Ossman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox