Re: pci_alloc_consistent from interrupt == BAD

From: David S. Miller (davem@redhat.com)
Date: Fri Jan 18 2002 - 15:32:21 EST


   From: Dan Malek <dan@embeddededge.com>
   Date: Fri, 18 Jan 2002 14:22:03 -0500
   
> Somehow the docs in DMA-mappings.txt say pci_alloc_consistent is allowed from
> interrupt, but this is a "bad thing" on at least arm and PPC non-cache
> coherent cpus.
   
   This isn't unique to PowerPC or ARM, and has nothing to do with allocating
   page tables.
   
Yes it is in fact unique to those ports...

   I don't understand how pci_alloc_consistent could ever be claimed to work
   from an interrupt function because it actually allocates pages of memory
   for all architectures. Anytime you call alloc_pages() (or friends) you could
   potentially block or return an error (out of memory) condition.
   
If it specifies GFP_ATOMIC, there are no problems from interrupts.
You will see that every port other than the mentioned two above use
GFP_ATOMIC in their pci_alloc_consistent implementation, for this very
reason.

The ARM and PPC ports could set __GFP_HIGH in their page table
allocation calls when invoked via pci_alloc_consistent, and this is
the change I suggest they make. It is a trivial fix whereas backing
out this ability to call pci_alloc_consistent from interrupts is not
a trivial change at all.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Wed Jan 23 2002 - 21:00:29 EST