. and thus the need for a Xen-specific kmap_types.h. Signed-off-by: Jan Beulich <jbeulich@novell.com> Index: sle10-sp1-2007-01-10/include/asm-i386/mach-xen/asm/kmap_types.h ==================================================================--- sle10-sp1-2007-01-10.orig/include/asm-i386/mach-xen/asm/kmap_types.h 2007-01-10 10:19:33.000000000 +0100 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -#ifndef _ASM_KMAP_TYPES_H -#define _ASM_KMAP_TYPES_H - -#include <linux/config.h> - -#ifdef CONFIG_DEBUG_HIGHMEM -# define D(n) __KM_FENCE_##n , -#else -# define D(n) -#endif - -enum km_type { -D(0) KM_BOUNCE_READ, -D(1) KM_SKB_SUNRPC_DATA, -D(2) KM_SKB_DATA_SOFTIRQ, -D(3) KM_USER0, -D(4) KM_USER1, -D(5) KM_BIO_SRC_IRQ, -D(6) KM_BIO_DST_IRQ, -D(7) KM_PTE0, -D(8) KM_PTE1, -D(9) KM_IRQ0, -D(10) KM_IRQ1, -D(11) KM_SOFTIRQ0, -D(12) KM_SOFTIRQ1, -D(13) KM_SWIOTLB, -D(14) KM_TYPE_NR -}; - -#undef D - -#endif Index: sle10-sp1-2007-01-10/arch/i386/kernel/swiotlb.c ==================================================================--- sle10-sp1-2007-01-10.orig/arch/i386/kernel/swiotlb.c 2007-01-10 10:19:56.000000000 +0100 +++ sle10-sp1-2007-01-10/arch/i386/kernel/swiotlb.c 2007-01-10 10:14:54.000000000 +0100 @@ -238,9 +238,12 @@ __sync_single(struct phys_addr buffer, c char *dev, *host, *kmp; len = size; while (len != 0) { + unsigned long flags; + if (((bytes = len) + buffer.offset) > PAGE_SIZE) bytes = PAGE_SIZE - buffer.offset; - kmp = kmap_atomic(buffer.page, KM_SWIOTLB); + local_irq_save(flags); + kmp = kmap_atomic(buffer.page, KM_BOUNCE_READ); dev = dma_addr + size - len; host = kmp + buffer.offset; if (dir == DMA_FROM_DEVICE) { @@ -248,7 +251,8 @@ __sync_single(struct phys_addr buffer, c /* inaccessible */; } else memcpy(dev, host, bytes); - kunmap_atomic(kmp, KM_SWIOTLB); + kunmap_atomic(kmp, KM_BOUNCE_READ); + local_irq_restore(flags); len -= bytes; buffer.page++; buffer.offset = 0; _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel