Re: 2.6.24-rc6-mm1

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: <mingo@...>, <akpm@...>
Cc: <fujita.tomonori@...>, <just.for.lkml@...>, <tomof@...>, <jarkao2@...>, <herbert@...>, <linux-kernel@...>, <neilb@...>, <bfields@...>, <netdev@...>, <tom@...>
Date: Tuesday, January 8, 2008 - 7:57 pm

On Tue, 8 Jan 2008 16:59:48 +0100
Ingo Molnar <mingo@elte.hu> wrote:


Thanks, they have been in -mm though the iommu helper fix hasn't
yet. Balbir Singh found the bug in 2.6.24-rc6-mm1. I've just check
mmotm and found that the IOMMU helper patch doesn't include the fix.

Andrew, can you replace

iommu-sg-add-iommu-helper-functions-for-the-free-area-management.patch

with the updated patch:

http://ozlabs.org/pipermail/linuxppc-dev/2007-December/048997.html

For your convenience I've attached the updated patch too.

Hopefully, they will go into v2.6.25. At least, I hope that the
patches (0001-0011) that make the IOMMUs respect segment size limits
when merging sg lists will be merged. They are simple and I got ACKs
on POWER and PARISC.


Thanks,

=
From: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Subject: [PATCH] add IOMMU helper functions for the free area management

This adds IOMMU helper functions for the free area management.  These
functions take care of LLD's segment boundary limit for IOMMUs.  They would be
useful for IOMMUs that use bitmap for the free area management.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
---
 include/linux/iommu-helper.h |    7 ++++
 lib/Makefile                 |    1 +
 lib/iommu-helper.c           |   80 ++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 88 insertions(+), 0 deletions(-)
 create mode 100644 include/linux/iommu-helper.h
 create mode 100644 lib/iommu-helper.c

diff --git a/include/linux/iommu-helper.h b/include/linux/iommu-helper.h
new file mode 100644
index 0000000..4dd4c04
--- /dev/null
+++ b/include/linux/iommu-helper.h
@@ -0,0 +1,7 @@
+extern unsigned long iommu_area_alloc(unsigned long *map, unsigned long size,
+				      unsigned long start, unsigned int nr,
+				      unsigned long shift,
+				      unsigned long boundary_size,
+				      unsigned long align_mask);
+extern void iommu_area_free(unsigned long *map, unsigned long start,
+			    unsigned int nr);
diff --git a/lib/Makefile b/lib/Makefile
index b6793ed..0e7383f 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -64,6 +64,7 @@ obj-$(CONFIG_SMP) += percpu_counter.o
 obj-$(CONFIG_AUDIT_GENERIC) += audit.o
 
 obj-$(CONFIG_SWIOTLB) += swiotlb.o
+obj-$(CONFIG_IOMMU_HELPER) += iommu-helper.o
 obj-$(CONFIG_FAULT_INJECTION) += fault-inject.o
 
 lib-$(CONFIG_GENERIC_BUG) += bug.o
diff --git a/lib/iommu-helper.c b/lib/iommu-helper.c
new file mode 100644
index 0000000..495575a
--- /dev/null
+++ b/lib/iommu-helper.c
@@ -0,0 +1,80 @@
+/*
+ * IOMMU helper functions for the free area management
+ */
+
+#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;
+}
+
+static inline void set_bit_area(unsigned long *map, unsigned long i,
+				int len)
+{
+	unsigned long end = i + len;
+	while (i < end) {
+		__set_bit(i, map);
+		i++;
+	}
+}
+
+static inline int is_span_boundary(unsigned int index, unsigned int nr,
+				   unsigned long shift,
+				   unsigned long boundary_size)
+{
+	shift = (shift + index) & (boundary_size - 1);
+	return shift + nr > boundary_size;
+}
+
+unsigned long iommu_area_alloc(unsigned long *map, unsigned long size,
+			       unsigned long start, unsigned int nr,
+			       unsigned long shift, unsigned long boundary_size,
+			       unsigned long align_mask)
+{
+	unsigned long index;
+again:
+	index = find_next_zero_area(map, size, start, nr, align_mask);
+	if (index != -1) {
+		if (is_span_boundary(index, nr, shift, boundary_size)) {
+			/* we could do more effectively */
+			start = index + 1;
+			goto again;
+		}
+		set_bit_area(map, index, nr);
+	}
+	return index;
+}
+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);
-- 
1.5.3.4


--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
2.6.24-rc6-mm1, Andrew Morton, (Sun Dec 23, 3:30 am)
Re: 2.6.24-rc6-mm1, Dave Young, (Wed Dec 26, 4:37 am)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Sun Dec 23, 12:27 pm)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Fri Dec 28, 6:53 pm)
Re: 2.6.24-rc6-mm1, Andrew Morton, (Fri Dec 28, 7:07 pm)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Sat Dec 29, 12:51 pm)
Re: 2.6.24-rc6-mm1, Herbert Xu, (Sat Dec 29, 9:30 pm)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Sat Dec 29, 11:34 pm)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Mon Dec 31, 4:15 pm)
Re: 2.6.24-rc6-mm1, Herbert Xu, (Tue Jan 1, 8:04 am)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Wed Jan 2, 2:29 pm)
Re: 2.6.24-rc6-mm1, Herbert Xu, (Wed Jan 2, 5:51 pm)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Fri Jan 4, 6:23 am)
Re: 2.6.24-rc6-mm1, Jarek Poplawski, (Fri Jan 4, 9:30 am)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Fri Jan 4, 11:21 am)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Fri Jan 4, 5:24 pm)
Re: 2.6.24-rc6-mm1, Jarek Poplawski, (Fri Jan 4, 8:07 pm)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Sat Jan 5, 4:01 am)
Re: 2.6.24-rc6-mm1, Jarek Poplawski, (Sat Jan 5, 6:13 am)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Sat Jan 5, 10:52 am)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Sat Jan 5, 6:10 pm)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Sat Jan 5, 11:16 pm)
Re: 2.6.24-rc6-mm1, Andrew Morton, (Sat Jan 5, 9:25 pm)
Re: 2.6.24-rc6-mm1, FUJITA Tomonori, (Sat Jan 5, 11:28 pm)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Sun Jan 6, 6:41 am)
Re: 2.6.24-rc6-mm1, FUJITA Tomonori, (Sun Jan 6, 7:23 am)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Sun Jan 6, 7:35 am)
Re: 2.6.24-rc6-mm1, FUJITA Tomonori, (Sun Jan 6, 9:33 am)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Sun Jan 6, 4:03 pm)
Re: 2.6.24-rc6-mm1, FUJITA Tomonori, (Mon Jan 7, 2:16 am)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Fri Jan 25, 5:06 pm)
Re: 2.6.24-rc6-mm1, Ingo Molnar, (Tue Jan 8, 11:59 am)
Re: 2.6.24-rc6-mm1, FUJITA Tomonori, (Tue Jan 8, 7:57 pm)
Re: 2.6.24-rc6-mm1, Jarek Poplawski, (Wed Jan 9, 5:04 am)
Re: 2.6.24-rc6-mm1, FUJITA Tomonori, (Wed Jan 9, 8:54 pm)
Re: 2.6.24-rc6-mm1, Andrew Morton, (Tue Jan 8, 8:27 pm)
Re: 2.6.24-rc6-mm1, FUJITA Tomonori, (Tue Jan 8, 8:54 pm)
Re: 2.6.24-rc6-mm1, Andrew Morton, (Tue Jan 8, 9:07 pm)
Re: 2.6.24-rc6-mm1, Jarek Poplawski, (Sun Jan 6, 4:27 am)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Sun Jan 6, 6:30 am)
Re: 2.6.24-rc6-mm1, Jarek Poplawski, (Sun Jan 6, 10:52 am)
Re: 2.6.24-rc6-mm1, J. Bruce Fields, (Wed Jan 2, 5:57 pm)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Thu Jan 3, 11:37 am)
Re: 2.6.24-rc6-mm1, J. Bruce Fields, (Thu Jan 3, 2:52 pm)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Thu Jan 3, 1:02 am)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Tue Jan 1, 8:59 am)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Tue Jan 1, 2:29 pm)
Re: 2.6.24-rc6-mm1, Randy Dunlap, (Sun Dec 30, 1:41 am)
Re: 2.6.24-rc6-mm1, J. Bruce Fields, (Sun Dec 30, 5:24 pm)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Sun Dec 30, 5:35 pm)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Mon Dec 31, 9:17 am)
Re: 2.6.24-rc6-mm1, Andrew Morton, (Sun Dec 23, 4:39 pm)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Thu Dec 27, 7:42 am)
Re: 2.6.24-rc6-mm1, Torsten Kaiser, (Thu Dec 27, 10:30 am)
Re: 2.6.24-rc6-mm1 Kernel panics at different functions (), Kamalesh Babulal, (Thu Dec 27, 4:49 am)
Re: 2.6.24-rc6-mm1 Kernel panics at different functions (), Kamalesh Babulal, (Fri Dec 28, 5:11 am)
Re: 2.6.24-rc6-mm1 Kernel panics at different functions (), Kamalesh Babulal, (Thu Dec 27, 6:25 am)
Re: 2.6.24-rc6-mm1 - e1000 breakage, James Morris, (Wed Dec 26, 7:39 pm)
Re: 2.6.24-rc6-mm1 (driver core/sysfs), Randy Dunlap, (Mon Dec 31, 4:11 pm)
Re: 2.6.24-rc6-mm1 (driver core/sysfs), Greg KH, (Fri Jan 11, 9:05 pm)
[patch] auto-qa Kconfig, Ingo Molnar, (Mon Jan 14, 12:11 pm)
Re: [patch] auto-qa Kconfig, Pavel Machek, (Tue Jan 15, 6:13 pm)
Re: 2.6.24-rc6-mm1 (build problem: gpio/W1), Randy Dunlap, (Mon Dec 31, 2:19 pm)
Re: 2.6.24-rc6-mm1 (build problem: gpio/W1), Evgeniy Polyakov, (Sat Jan 5, 11:29 am)
Re: 2.6.24-rc6-mm1 (build problem: gpio/W1), Ville , (Sat Jan 5, 12:16 pm)
Re: 2.6.24-rc6-mm1 (build problem: gpio/W1), Randy Dunlap, (Sat Jan 5, 1:18 pm)
Re: 2.6.24-rc6-mm1 (build problem: gpio_keys), Randy Dunlap, (Mon Dec 31, 2:18 pm)
Re: 2.6.24-rc6-mm1 (build problem: gpio_keys), David Brownell, (Mon Dec 31, 2:40 pm)
[PATCH -mm] gpio: fix x86 build problem: gpio_keys, Randy Dunlap, (Mon Dec 31, 3:10 pm)
Re: [PATCH -mm] gpio: fix x86 build problem: gpio_keys, Ingo Molnar, (Tue Jan 1, 11:32 am)
Re: 2.6.24-rc6-mm1 (build problem: v4l / i2c), Randy Dunlap, (Mon Dec 31, 2:18 pm)
[PATCH -mm] driver core: build with SYSFS=n, Randy Dunlap, (Mon Dec 31, 2:05 pm)
[PATCH -mm] crypto: scatterwalk.h needs sched.h, Randy Dunlap, (Mon Dec 31, 2:05 pm)
Re: [PATCH -mm] crypto: scatterwalk.h needs sched.h, Herbert Xu, (Mon Dec 31, 6:31 pm)
Re: 2.6.24-rc6-mm1: __raw_spin_is_contended undefined, Joseph Fannin, (Wed Dec 26, 10:21 pm)
Re: 2.6.24-rc6-mm1: __raw_spin_is_contended undefined, Nick Piggin, (Thu Dec 27, 1:21 am)
Re: 2.6.24-rc6-mm1: some section mismatches on sparc64, Mariusz Kozlowski, (Wed Dec 26, 8:29 am)
Re: 2.6.24-rc6-mm1: some section mismatches on sparc64, David Miller, (Wed Dec 26, 11:05 pm)
Re: 2.6.24-rc6-mm1: some section mismatches on sparc64, Adrian Bunk, (Fri Dec 28, 7:22 pm)
Re: 2.6.24-rc6-mm1: some section mismatches on sparc64, David Miller, (Sat Dec 29, 4:14 am)
Re: 2.6.24-rc6-mm1: some section mismatches on sparc64, Adrian Bunk, (Sat Dec 29, 4:48 am)
Re: 2.6.24-rc6-mm1: some section mismatches on sparc64, David Miller, (Sat Dec 29, 4:54 am)
Re: 2.6.24-rc6-mm1: some section mismatches on sparc64, Adrian Bunk, (Sat Dec 29, 5:06 am)
Re: 2.6.24-rc6-mm1: some section mismatches on sparc64, David Miller, (Sat Dec 29, 5:18 am)
Re: 2.6.24-rc6-mm1: some section mismatches on sparc64, Adrian Bunk, (Sat Dec 29, 5:53 am)
Re: 2.6.24-rc6-mm1: some section mismatches on sparc64, David Miller, (Sat Dec 29, 5:15 am)
Re: 2.6.24-rc6-mm1: some section mismatches on sparc64, David Miller, (Sat Dec 29, 4:27 am)
Re: 2.6.24-rc6-mm1, Andreas Mohr, (Tue Dec 25, 5:51 pm)
Re: 2.6.24-rc6-mm1: suspend broken on HP nx6325 due to cpufr..., Rafael J. Wysocki, (Sun Dec 23, 6:54 pm)
Re: 2.6.24-rc6-mm1: suspend broken on HP nx6325 due to cpufr..., Rafael J. Wysocki, (Mon Dec 24, 10:13 am)
Re: 2.6.24-rc6-mm1, Rafael J. Wysocki, (Sun Dec 23, 8:35 am)
Re: 2.6.24-rc6-mm1, H. Peter Anvin, (Sun Dec 23, 7:09 pm)
Re: 2.6.24-rc6-mm1, Ingo Molnar, (Sun Dec 23, 9:00 am)
Re: 2.6.24-rc6-mm1, Rafael J. Wysocki, (Sun Dec 23, 9:48 am)
Re: 2.6.24-rc6-mm1, Rafael J. Wysocki, (Sun Dec 23, 9:53 am)
Re: 2.6.24-rc6-mm1, Sam Ravnborg, (Sun Dec 23, 4:09 pm)
Re: 2.6.24-rc6-mm1, Rafael J. Wysocki, (Sun Dec 23, 6:44 pm)
Re: 2.6.24-rc6-mm1, Ingo Molnar, (Sun Dec 23, 7:04 am)
Re: 2.6.24-rc6-mm1, Ingo Molnar, (Sun Dec 23, 7:10 am)
Re: 2.6.24-rc6-mm1, Andrew Morton, (Sun Dec 23, 7:34 am)
Re: 2.6.24-rc6-mm1, Ingo Molnar, (Sun Dec 23, 7:57 am)
Re: 2.6.24-rc6-mm1, Christoph Hellwig, (Sun Dec 23, 8:12 am)