Re: [RFC] Initial alpha-0 for new page allocator API

Christoph Lameter
2006-09-22T21:21:50Z

On Fri, 22 Sep 2006, Jesse Barnes wrote:

> I was suggesting something like:
>
> high = dev ? dev->coherent_dma_mask : 16*1024*1024;
>
> instead. May as well combine your NULL check and your assignment. It'll
> also do the right thing for 64 bit devices so we don't put unnecessary
> pressure on the 32 bit range. Or am I spacing out and reading the code
> wrong?

Ahh.. Yes something like this will save a lot of lines:

Index: linux-2.6.18-rc7-mm1/arch/i386/kernel/pci-dma.c
===================================================================
--- linux-2.6.18-rc7-mm1.orig/arch/i386/kernel/pci-dma.c 2006-09-22 15:37:41.000000000 -0500
+++ linux-2.6.18-rc7-mm1/arch/i386/kernel/pci-dma.c 2006-09-22 16:20:49.849799156 -0500
@@ -26,8 +26,6 @@ void *dma_alloc_coherent(struct device *
dma_addr_t *dma_handle, gfp_t gfp)
{
void *ret;
- unsigned long low = 0L;
- unsigned long high = 0xffffffff;
struct dma_coherent_mem *mem = dev ? dev->dma_mem : NULL;
int order = get_order(size);
/* ignore region specifiers */
@@ -46,14 +44,9 @@ void *dma_alloc_coherent(struct device *
return NULL;
}

- if (dev == NULL)
- /* Apply safe ISA LIMITS */
- high = 16*1024*1024L;
- else
- if (dev->coherent_dma_mask < 0xffffffff)
- high = dev->coherent_dma_mask;
-
- ret = page_address(alloc_pages_range(low, high, gfp, order));
+ ret = page_address(alloc_pages_range(0L,
+ dev ? dev->coherent_dma_mask : 16*1024*1024,
+ gfp, order));

if (ret != NULL) {
memset(ret, 0, size);