user debian-kernel@lists.debian.org usertag 415805 dkt-etch-update tag 415805 patch severity 415805 important thanks
On Thu, Mar 22, 2007 at 07:26:08AM +0100, Marc Petit-Huguenin wrote: > I contacted the xen-devel mailing list, and they gave me a solution for > the problem .See this email for details: > http://lists.xensource.com/archives/html/xen-devel/2007-03/msg00874.html The attached patch should be the right one, can you confirm this? Bastian -- We'll pivot at warp 2 and bring all tubes to bear, Mr. Sulu!
diff -r d24540ecc512 arch/i386/kernel/swiotlb.c --- a/arch/i386/kernel/swiotlb.c Tue Jan 23 23:37:22 2007 +0100 +++ b/arch/i386/kernel/swiotlb.c Thu Mar 22 10:38:34 2007 +0100 @@ -227,9 +227,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); /* protects KM_BOUNCE_READ */ + kmp = kmap_atomic(buffer.page, KM_BOUNCE_READ); dev = dma_addr + size - len; host = kmp + buffer.offset; if (dir == DMA_FROM_DEVICE) { @@ -237,7 +240,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;
signature.asc
Description: Digital signature