Annotation of /trunk/nvidia/1.0.6629/NVIDIA_kernel-1.0-6629-1175225.patch
Parent Directory | Revision Log
Revision 153 -
(hide annotations)
(download)
Tue May 8 20:52:56 2007 UTC (17 years, 4 months ago) by niro
File size: 1877 byte(s)
Tue May 8 20:52:56 2007 UTC (17 years, 4 months ago) by niro
File size: 1877 byte(s)
-import
1 | niro | 153 | diff -ru usr/src/nv/nv-linux.h usr/src/nv.1175225/nv-linux.h |
2 | --- usr/src/nv/nv-linux.h 2004-11-03 22:53:00.000000000 +0100 | ||
3 | +++ usr/src/nv.1175225/nv-linux.h 2004-12-21 21:03:33.000000000 +0100 | ||
4 | @@ -533,6 +533,7 @@ | ||
5 | */ | ||
6 | #if defined(CONFIG_SWIOTLB) | ||
7 | #define NV_SWIOTLB 1 | ||
8 | +#define NV_SWIOTLB_MAX_RETRIES 16 | ||
9 | extern int nv_swiotlb; | ||
10 | #endif | ||
11 | |||
12 | @@ -950,10 +951,48 @@ | ||
13 | sg_ptr->offset = (unsigned long)base & ~PAGE_MASK; | ||
14 | sg_ptr->length = num_pages * PAGE_SIZE; | ||
15 | |||
16 | +#if defined(NV_SWIOTLB) | ||
17 | + i = NV_SWIOTLB_MAX_RETRIES; | ||
18 | + do { | ||
19 | + if (pci_map_sg(dev, sg_ptr, 1, PCI_DMA_BIDIRECTIONAL) == 0) | ||
20 | + return 1; | ||
21 | + | ||
22 | + if (sg_ptr->dma_address & ~PAGE_MASK) | ||
23 | + { | ||
24 | + struct scatterlist sg_tmp; | ||
25 | + pci_unmap_sg(dev, sg_ptr, num_pages, PCI_DMA_BIDIRECTIONAL); | ||
26 | + | ||
27 | + memset(&sg_tmp, 0, sizeof(struct scatterlist)); | ||
28 | + sg_tmp.page = sg_ptr->page; | ||
29 | + sg_tmp.offset = sg_ptr->offset; | ||
30 | + sg_tmp.length = 2048; | ||
31 | + | ||
32 | + if (pci_map_sg(dev, &sg_tmp, 1, PCI_DMA_BIDIRECTIONAL) == 0) | ||
33 | + return 1; | ||
34 | + | ||
35 | + if (pci_map_sg(dev, sg_ptr, 1, PCI_DMA_BIDIRECTIONAL) == 0) | ||
36 | + { | ||
37 | + pci_unmap_sg(dev, &sg_tmp, num_pages, PCI_DMA_BIDIRECTIONAL); | ||
38 | + return 1; | ||
39 | + } | ||
40 | + | ||
41 | + pci_unmap_sg(dev, &sg_tmp, num_pages, PCI_DMA_BIDIRECTIONAL); | ||
42 | + } | ||
43 | + } while (i-- && sg_ptr->dma_address & ~PAGE_MASK); | ||
44 | +#else | ||
45 | if (pci_map_sg(dev, sg_ptr, 1, PCI_DMA_BIDIRECTIONAL) == 0) | ||
46 | { | ||
47 | return 1; | ||
48 | } | ||
49 | +#endif | ||
50 | + | ||
51 | + if (sg_ptr->dma_address & ~PAGE_MASK) | ||
52 | + { | ||
53 | + nv_printf(NV_DBG_ERRORS, | ||
54 | + "NVRM: VM: nv_sg_map_buffer: failed to obtain aligned mapping\n"); | ||
55 | + pci_unmap_sg(dev, sg_ptr, num_pages, PCI_DMA_BIDIRECTIONAL); | ||
56 | + return 1; | ||
57 | + } | ||
58 | |||
59 | NV_FIXUP_SWIOTLB_VIRT_ADDR_BUG(sg_ptr->dma_address); | ||
60 |
Properties
Name | Value |
---|---|
svn:executable | * |