diff options
| author | Grant Likely <grant.likely@secretlab.ca> | 2010-01-28 14:38:25 -0700 | 
|---|---|---|
| committer | Grant Likely <grant.likely@secretlab.ca> | 2010-01-28 14:38:25 -0700 | 
| commit | 0ada0a73120c28cc432bcdbac061781465c2f48f (patch) | |
| tree | d17cadd4ea47e25d9e48e7d409a39c84268fbd27 /lib/iommu-helper.c | |
| parent | 6016a363f6b56b46b24655bcfc0499b715851cf3 (diff) | |
| parent | 92dcffb916d309aa01778bf8963a6932e4014d07 (diff) | |
Merge commit 'v2.6.33-rc5' into secretlab/test-devicetree
Diffstat (limited to 'lib/iommu-helper.c')
| -rw-r--r-- | lib/iommu-helper.c | 59 | 
1 files changed, 9 insertions, 50 deletions
diff --git a/lib/iommu-helper.c b/lib/iommu-helper.c index 75dbda03f4f..c0251f4ad08 100644 --- a/lib/iommu-helper.c +++ b/lib/iommu-helper.c @@ -3,41 +3,7 @@   */  #include <linux/module.h> -#include <linux/bitops.h> - -static unsigned long find_next_zero_area(unsigned long *map, -					 unsigned long size, -					 unsigned long start, -					 unsigned int nr, -					 unsigned long align_mask) -{ -	unsigned long index, end, i; -again: -	index = find_next_zero_bit(map, size, start); - -	/* Align allocation */ -	index = (index + align_mask) & ~align_mask; - -	end = index + nr; -	if (end >= size) -		return -1; -	for (i = index; i < end; i++) { -		if (test_bit(i, map)) { -			start = i+1; -			goto again; -		} -	} -	return index; -} - -void iommu_area_reserve(unsigned long *map, unsigned long i, int len) -{ -	unsigned long end = i + len; -	while (i < end) { -		__set_bit(i, map); -		i++; -	} -} +#include <linux/bitmap.h>  int iommu_is_span_boundary(unsigned int index, unsigned int nr,  			   unsigned long shift, @@ -55,31 +21,24 @@ unsigned long iommu_area_alloc(unsigned long *map, unsigned long size,  			       unsigned long align_mask)  {  	unsigned long index; + +	/* We don't want the last of the limit */ +	size -= 1;  again: -	index = find_next_zero_area(map, size, start, nr, align_mask); -	if (index != -1) { +	index = bitmap_find_next_zero_area(map, size, start, nr, align_mask); +	if (index < size) {  		if (iommu_is_span_boundary(index, nr, shift, boundary_size)) {  			/* we could do more effectively */  			start = index + 1;  			goto again;  		} -		iommu_area_reserve(map, index, nr); +		bitmap_set(map, index, nr); +		return index;  	} -	return index; +	return -1;  }  EXPORT_SYMBOL(iommu_area_alloc); -void iommu_area_free(unsigned long *map, unsigned long start, unsigned int nr) -{ -	unsigned long end = start + nr; - -	while (start < end) { -		__clear_bit(start, map); -		start++; -	} -} -EXPORT_SYMBOL(iommu_area_free); -  unsigned long iommu_num_pages(unsigned long addr, unsigned long len,  			      unsigned long io_page_size)  {  | 
