[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Must use __copy_to_user_inatomic() in swiotlb's sync_single()
# 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |