# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID f4285d150d3a692553c0c64d76a65b5d29536ec9
# Parent ec4f87e98fc12ca5a50c3858ec878926c3ffd3fe
Must use __copy_to_user_inatomic() in swiotlb's sync_single()
function, as we cannot sleep there.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
diff -r ec4f87e98fc1 -r f4285d150d3a
linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c Thu Apr 13 18:14:11 2006
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c Fri Apr 14 10:58:11 2006
@@ -206,8 +206,8 @@
}
/*
- * We use __copy_to_user to transfer to the host buffer because the buffer
- * may be mapped read-only (e.g, in blkback driver) but lower-level
+ * We use __copy_to_user_inatomic to transfer to the host buffer because the
+ * buffer may be mapped read-only (e.g, in blkback driver) but lower-level
* drivers map the buffer for DMA_BIDIRECTIONAL access. This causes an
* unnecessary copy from the aperture to the host buffer, and a page fault.
*/
@@ -225,7 +225,7 @@
dev = dma_addr + size - len;
host = kmp + buffer.offset;
if (dir == DMA_FROM_DEVICE) {
- if (__copy_to_user(host, dev, bytes))
+ if (__copy_to_user_inatomic(host, dev, bytes))
/* inaccessible */;
} else
memcpy(dev, host, bytes);
@@ -238,7 +238,7 @@
char *host = (char *)phys_to_virt(
page_to_pseudophys(buffer.page)) + buffer.offset;
if (dir == DMA_FROM_DEVICE) {
- if (__copy_to_user(host, dma_addr, size))
+ if (__copy_to_user_inatomic(host, dma_addr, size))
/* inaccessible */;
} else if (dir == DMA_TO_DEVICE)
memcpy(dma_addr, host, size);
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|