# This is a BitKeeper generated patch for the following project: # Project Name: Linux kernel tree # This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas: # ChangeSet 1.954 -> 1.955 # include/asm-generic/pci-dma-compat.h 1.2 -> 1.3 # Documentation/DMA-API.txt 1.1 -> 1.2 # include/asm-generic/dma-mapping.h 1.2 -> 1.3 # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 03/01/13 jejb@raven.il.steeleye.com 1.955 # Update the generic DMA API to take GFP_ flags on allocation # # dma_alloc_[non]coherent now takes the GFP_ flags as the last argument. # The flags passed in may not interfere with the memory zone. # -------------------------------------------- # diff -Nru a/Documentation/DMA-API.txt b/Documentation/DMA-API.txt --- a/Documentation/DMA-API.txt Mon Jan 13 11:06:42 2003 +++ b/Documentation/DMA-API.txt Mon Jan 13 11:06:42 2003 @@ -22,7 +22,7 @@ void * dma_alloc_coherent(struct device *dev, size_t size, - dma_addr_t *dma_handle) + dma_addr_t *dma_handle, int flag) void * pci_alloc_consistent(struct pci_dev *dev, size_t size, dma_addr_t *dma_handle) @@ -43,6 +43,12 @@ minimum allocation length may be as big as a page, so you should consolidate your requests for consistent memory as much as possible. +The flag parameter (dma_alloc_coherent only) allows the caller to +specify the GFP_ flags (see kmalloc) for the allocation (the +implementation may chose to ignore flags that affect the location of +the returned memory, like GFP_DMA). For pci_alloc_consistent, you +must assume GFP_ATOMIC behaviour. + void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr dma_addr_t dma_handle) @@ -261,7 +267,7 @@ void * dma_alloc_noncoherent(struct device *dev, size_t size, - dma_addr_t *dma_handle) + dma_addr_t *dma_handle, int flag) Identical to dma_alloc_coherent() except that the platform will choose to return either consistent or non-consistent memory as it sees diff -Nru a/include/asm-generic/dma-mapping.h b/include/asm-generic/dma-mapping.h --- a/include/asm-generic/dma-mapping.h Mon Jan 13 11:06:42 2003 +++ b/include/asm-generic/dma-mapping.h Mon Jan 13 11:06:42 2003 @@ -30,9 +30,10 @@ } static inline void * -dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle) +dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, + int flag) { - BUG_ON(dev->bus != &pci_bus_type); + BUG_ON(dev->bus != &pci_bus_type || (flag & GFP_ATOMIC) != GFP_ATOMIC); return pci_alloc_consistent(to_pci_dev(dev), size, dma_handle); } @@ -121,7 +122,7 @@ /* Now for the API extensions over the pci_ one */ -#define dma_alloc_noncoherent(d, s, h) dma_alloc_coherent(d, s, h) +#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) #define dma_is_consistent(d) (1) diff -Nru a/include/asm-generic/pci-dma-compat.h b/include/asm-generic/pci-dma-compat.h --- a/include/asm-generic/pci-dma-compat.h Mon Jan 13 11:06:42 2003 +++ b/include/asm-generic/pci-dma-compat.h Mon Jan 13 11:06:42 2003 @@ -19,7 +19,7 @@ pci_alloc_consistent(struct pci_dev *hwdev, size_t size, dma_addr_t *dma_handle) { - return dma_alloc_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, dma_handle); + return dma_alloc_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, dma_handle, GFP_ATOMIC); } static inline void