Matthew Wilcox wrote: [...]
> @@ -142,14 +144,13 @@ struct dma_pool *dma_pool_create(const char *name, > struct device *dev, > if ((size % align) != 0) > size = ALIGN(size, align); > > - if (allocation == 0) { > - if (PAGE_SIZE < size) > - allocation = size; > - else > - allocation = PAGE_SIZE; > - // FIXME: round up for less fragmentation > - } else if (allocation < size) > + allocation = max_t(size_t, size, PAGE_SIZE); > + > + if (!boundary) { > + boundary = allocation; > + } else if ((boundary < size) || (boundary & (boundary - 1))) { > return NULL; > + } if (!boundary) boundary = allocation; else if (boundary < size || boundary & (boundary - 1)) return NULL; [...] > @@ -190,11 +192,14 @@ struct dma_pool *dma_pool_create(const char *name, > struct device *dev, > static void pool_initialise_page(struct dma_pool *pool, struct dma_page > *page) > { > unsigned int offset = 0; > + unsigned int next_boundary = pool->boundary; > > do { > unsigned int next = offset + pool->size; > - if (unlikely((next + pool->size) >= pool->allocation)) > - next = pool->allocation; > + if (unlikely((next + pool->size) >= next_boundary)) { if (unlikely(next + pool->size >= next_boundary)) { [...] - 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/