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)
     {
openSUSE Build Service is sponsored by