On Mon, 23 Apr 2007, Guennadi Liakhovetski wrote: > to also allow for size not an integer number of pages as Andrew noticed? > This could be done in 2 patches:
patch 2: --- Fix bitmap allocation and size non-multiple of PAGE_SIZE in dma_declare_coherent_memory implementations. i386 compile-tested. Signed-off-by: G. Liakhovetski <[EMAIL PROTECTED]> diff --git a/arch/i386/kernel/pci-dma.c b/arch/i386/kernel/pci-dma.c index 3ebcea0..0a9317a 100644 --- a/arch/i386/kernel/pci-dma.c +++ b/arch/i386/kernel/pci-dma.c @@ -76,8 +76,8 @@ int dma_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr, dma_addr_t device_addr, size_t size, int flags) { void __iomem *mem_base = NULL; - int pages = size >> PAGE_SHIFT; - int bitmap_size = (pages + 31)/32; + int pages = DIV_ROUND_UP(size, PAGE_SIZE); + int bitmap_size = BITS_TO_LONGS(pages) * BYTES_PER_LONG; if ((flags & (DMA_MEMORY_MAP | DMA_MEMORY_IO)) == 0) goto out; diff --git a/arch/cris/arch-v32/drivers/pci/dma.c b/arch/cris/arch-v32/drivers/pci/dma.c index d634347..99f760e 100644 --- a/arch/cris/arch-v32/drivers/pci/dma.c +++ b/arch/cris/arch-v32/drivers/pci/dma.c @@ -75,8 +75,8 @@ int dma_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr, dma_addr_t device_addr, size_t size, int flags) { void __iomem *mem_base; - int pages = size >> PAGE_SHIFT; - int bitmap_size = (pages + 31)/32; + int pages = DIV_ROUND_UP(size, PAGE_SIZE); + int bitmap_size = BITS_TO_LONGS(pages) * BYTES_PER_LONG; if ((flags & (DMA_MEMORY_MAP | DMA_MEMORY_IO)) == 0) goto out; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/