git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
pnpbios: convert to seq_file
[safe/jmp/linux-2.6]
/
lib
/
iommu-helper.c
diff --git
a/lib/iommu-helper.c
b/lib/iommu-helper.c
index
495575a
..
75dbda0
100644
(file)
--- a/
lib/iommu-helper.c
+++ b/
lib/iommu-helper.c
@@
-30,8
+30,7
@@
again:
return index;
}
return index;
}
-static inline void set_bit_area(unsigned long *map, unsigned long i,
- int len)
+void iommu_area_reserve(unsigned long *map, unsigned long i, int len)
{
unsigned long end = i + len;
while (i < end) {
{
unsigned long end = i + len;
while (i < end) {
@@
-40,10
+39,12
@@
static inline void set_bit_area(unsigned long *map, unsigned long i,
}
}
}
}
-
static inline int
is_span_boundary(unsigned int index, unsigned int nr,
-
unsigned long shift,
-
unsigned long boundary_size)
+
int iommu_
is_span_boundary(unsigned int index, unsigned int nr,
+ unsigned long shift,
+ unsigned long boundary_size)
{
{
+ BUG_ON(!is_power_of_2(boundary_size));
+
shift = (shift + index) & (boundary_size - 1);
return shift + nr > boundary_size;
}
shift = (shift + index) & (boundary_size - 1);
return shift + nr > boundary_size;
}
@@
-57,12
+58,12
@@
unsigned long iommu_area_alloc(unsigned long *map, unsigned long size,
again:
index = find_next_zero_area(map, size, start, nr, align_mask);
if (index != -1) {
again:
index = find_next_zero_area(map, size, start, nr, align_mask);
if (index != -1) {
- if (is_span_boundary(index, nr, shift, boundary_size)) {
+ if (i
ommu_i
s_span_boundary(index, nr, shift, boundary_size)) {
/* we could do more effectively */
start = index + 1;
goto again;
}
/* we could do more effectively */
start = index + 1;
goto again;
}
-
set_bit_area
(map, index, nr);
+
iommu_area_reserve
(map, index, nr);
}
return index;
}
}
return index;
}
@@
-78,3
+79,12
@@
void iommu_area_free(unsigned long *map, unsigned long start, unsigned int nr)
}
}
EXPORT_SYMBOL(iommu_area_free);
}
}
EXPORT_SYMBOL(iommu_area_free);
+
+unsigned long iommu_num_pages(unsigned long addr, unsigned long len,
+ unsigned long io_page_size)
+{
+ unsigned long size = (addr & (io_page_size - 1)) + len;
+
+ return DIV_ROUND_UP(size, io_page_size);
+}
+EXPORT_SYMBOL(iommu_num_pages);