File nv-fix-xen.diff of Package nvidia-gfxG02
diff -uNrp nv.orig//nv.c nv/nv.c
--- nv.orig//nv.c 2008-10-02 00:16:41.000000000 +0200
+++ nv/nv.c 2008-10-15 11:10:12.000000000 +0200
@@ -874,6 +874,9 @@ static int __determine_pat_mode()
"NVRM: CPU does not support the PAT, falling back to MTRRs.\n");
return NV_PAT_MODE_DISABLED;
}
+#ifdef CONFIG_XEN
+ return NV_PAT_MODE_DISABLED;
+#endif
NV_READ_PAT_ENTRIES(pat1, pat2);
PAT_WC_index = 0xf;
diff -uNrp nv.orig//nv-linux.h nv/nv-linux.h
--- nv.orig//nv-linux.h 2008-10-02 00:16:42.000000000 +0200
+++ nv/nv-linux.h 2008-10-15 11:10:12.000000000 +0200
@@ -303,7 +303,7 @@ extern int nv_swiotlb;
* tiny, and the kernel panics when it is exhausted. try to warn the user that
* they need to boost the size of their pool.
*/
-#if defined(CONFIG_SWIOTLB) && !defined(GFP_DMA32)
+#if defined(CONFIG_SWIOTLB) && !defined(GFP_DMA32) && !defined(CONFIG_XEN)
#define NV_SWIOTLB 1
#endif
@@ -936,7 +936,10 @@ typedef void irqreturn_t;
#define NV_VM_INSERT_PAGE(vma, addr, page) \
vm_insert_page(vma, addr, page)
#endif
-#if defined(NV_REMAP_PFN_RANGE_PRESENT)
+#if defined(CONFIG_XEN)
+#define NV_REMAP_PAGE_RANGE(from, offset, x...) \
+ io_remap_pfn_range(vma, from, ((offset) >> PAGE_SHIFT), x)
+#elif defined(NV_REMAP_PFN_RANGE_PRESENT)
#define NV_REMAP_PAGE_RANGE(from, offset, x...) \
remap_pfn_range(vma, from, ((offset) >> PAGE_SHIFT), x)
#elif defined(NV_REMAP_PAGE_RANGE_PRESENT)
@@ -1060,6 +1063,9 @@ typedef void irqreturn_t;
__pte_value; \
})
+#if !defined(CONFIG_XEN)
+#define phys_to_machine(x) x
+#endif
#define NV_PAGE_ALIGN(addr) ( ((addr) + PAGE_SIZE - 1) / PAGE_SIZE)
#define NV_MASK_OFFSET(addr) ( (addr) & (PAGE_SIZE - 1) )
diff -uNrp nv.orig//nv-vm.c nv/nv-vm.c
--- nv.orig//nv-vm.c 2011-11-24 02:10:34.610675106 +0100
+++ nv/nv-vm.c 2011-11-24 02:12:01.545142380 +0100
@@ -345,6 +345,9 @@
defined(NV_XEN_SUPPORT_OLD_STYLE_KERNEL)
return;
#else
+#if defined(CONFIG_PREEMPT_RT)
+ if(nv_pat_mode == NV_PAT_MODE_DISABLED) return;
+#endif
nv_execute_on_all_cpus(nv_flush_cache, NULL);
#if !defined(KERNEL_2_4) && \
(defined(NVCPU_X86) || defined(NVCPU_X86_64)) && \
diff -uNrp nv.orig//os-agp.c nv/os-agp.c
--- nv.orig//os-agp.c 2008-10-02 00:16:41.000000000 +0200
+++ nv/os-agp.c 2008-10-15 11:10:12.000000000 +0200
@@ -295,7 +295,7 @@ RM_STATUS KernLoadAGPPages(
page_ptr->phys_addr = (ptr->memory[i] & PAGE_MASK);
page_ptr->virt_addr = (unsigned long) __va(page_ptr->phys_addr);
- page_ptr->dma_addr = page_ptr->phys_addr;
+ page_ptr->dma_addr = NV_GET_DMA_ADDRESS(page_ptr->phys_addr);
}
return RM_OK;
diff -uNrp nv.orig//os-interface.c nv/os-interface.c
--- nv.orig//os-interface.c 2008-10-02 00:16:41.000000000 +0200
+++ nv/os-interface.c 2008-10-15 11:14:04.000000000 +0200
@@ -605,6 +605,7 @@ RM_STATUS NV_API_CALL os_delay(U032 Mill
MicroSeconds = MilliSeconds * 1000;
tm_end.tv_usec = MicroSeconds;
tm_end.tv_sec = 0;
+//#if !defined(CONFIG_XEN)
NV_TIMERADD(&tm_aux, &tm_end, &tm_end);
/* do we have a full jiffie to wait? */
@@ -652,6 +653,7 @@ RM_STATUS NV_API_CALL os_delay(U032 Mill
MicroSeconds = 0;
} while ((jiffies = NV_USECS_TO_JIFFIES(MicroSeconds)) != 0);
}
+//#endif
if (MicroSeconds > 1000)
{