[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [linux-2.6.18-xen] swiotlb: Handle sync invocations on subregions of a mapped region.
# HG changeset patch # User kfraser@xxxxxxxxxxxxxxxxxxxxx # Date 1184006464 -3600 # Node ID f15643dab1ca40ff3f2ca7eed5196bc74703422a # Parent d9af7736dee4899528c8d9c2cbdb57f03d5475ca swiotlb: Handle sync invocations on subregions of a mapped region. Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> --- arch/i386/kernel/swiotlb.c | 11 ++++++++++- 1 files changed, 10 insertions(+), 1 deletion(-) diff -r d9af7736dee4 -r f15643dab1ca arch/i386/kernel/swiotlb.c --- a/arch/i386/kernel/swiotlb.c Mon Jul 09 18:16:05 2007 +0100 +++ b/arch/i386/kernel/swiotlb.c Mon Jul 09 19:41:04 2007 +0100 @@ -304,6 +304,7 @@ map_single(struct device *hwdev, struct unsigned long flags; char *dma_addr; unsigned int nslots, stride, index, wrap; + struct phys_addr slot_buf; int i; /* @@ -375,7 +376,15 @@ map_single(struct device *hwdev, struct * This is needed when we sync the memory. Then we sync the buffer if * needed. */ - io_tlb_orig_addr[index] = buffer; + slot_buf = buffer; + for (i = 0; i < nslots; i++) { + io_tlb_orig_addr[index+i] = slot_buf; + slot_buf.offset += 1 << IO_TLB_SHIFT; + if (slot_buf.offset > PAGE_SIZE) { + slot_buf.page++; + slot_buf.offset -= PAGE_SIZE; + } + } if ((dir == DMA_TO_DEVICE) || (dir == DMA_BIDIRECTIONAL)) __sync_single(buffer, dma_addr, size, DMA_TO_DEVICE); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |