I use xen-3.0-testing(downloaded with hg). My nvidia card is Quadro FX
3400. OS is
Rocks 4.0(i386). The version of Nvidia driver is 1.0.8178, patched with
01-22-2006 patch.
I can play 3D games now. Thank Jacob for help.
Yong
diff -Nur NVIDIA-Linux-x86-1.0-8178-pkg1/usr/src/nv/Makefile.kbuild
nv/Makefile.kbuild
--- NVIDIA-Linux-x86-1.0-8178-pkg1/usr/src/nv/Makefile.kbuild
2006-03-15 10:46:52.000000000 +0100
+++ nv/Makefile.kbuild 2006-03-15 12:18:16.000000000 +0100
@@ -262,7 +262,7 @@
# KBUILD build parameters.
#
-KBUILD_PARAMS += KBUILD_VERBOSE=1 -C $(KERNEL_SOURCES) SUBDIRS=$(PWD)
+KBUILD_PARAMS += KBUILD_VERBOSE=1 -C $(KERNEL_SOURCES) SUBDIRS=$(PWD)
ARCH=xen
#
# NVIDIA sanity checks.
diff -Nur NVIDIA-Linux-x86-1.0-8178-pkg1/usr/src/nv/nv.c nv/nv.c
--- NVIDIA-Linux-x86-1.0-8178-pkg1/usr/src/nv/nv.c 2006-03-15
10:46:52.000000000 +0100
+++ nv/nv.c 2006-03-15 11:06:11.000000000 +0100
@@ -8,7 +8,6 @@
* _NVRM_COPYRIGHT_END_
*/
-
#include "nv-misc.h"
#include "os-interface.h"
#include "nv-linux.h"
@@ -924,6 +923,10 @@
{
unsigned long pat1, pat2;
+#ifdef CONFIG_XEN
+ nv_pat_enabled=1;
+#endif
+
if (nv_pat_enabled)
return 1;
@@ -952,6 +955,10 @@
{
unsigned long pat1, pat2;
+#ifdef CONFIG_XEN
+ nv_pat_enabled=0;
+#endif
+
if (!nv_pat_enabled)
return;
@@ -2015,7 +2022,11 @@
return -ENXIO;
}
+#ifdef CONFIG_XEN
+ if (io_remap_page_range(vma, vma->vm_start,
+#else
if (NV_REMAP_PAGE_RANGE(vma->vm_start,
+#endif
NV_VMA_OFFSET(vma),
NV_VMA_SIZE(vma),
vma->vm_page_prot))
@@ -2039,8 +2050,11 @@
return -ENXIO;
}
}
-
+#ifdef CONFIG_XEN
+ if (io_remap_page_range(vma, vma->vm_start,
+#else
if (NV_REMAP_PAGE_RANGE(vma->vm_start,
+#endif
NV_VMA_OFFSET(vma),
NV_VMA_SIZE(vma),
vma->vm_page_prot))
@@ -2078,7 +2092,11 @@
NV_ATOMIC_INC(at->usage_count);
nv_up(nvl->at_lock);
+#ifdef CONFIG_XEN
+ if (io_remap_page_range(vma, vma->vm_start,
+#else
if (NV_REMAP_PAGE_RANGE(vma->vm_start,
+#endif
NV_VMA_OFFSET(vma),
NV_VMA_SIZE(vma),
vma->vm_page_prot))
diff -Nur NVIDIA-Linux-x86-1.0-8178-pkg1/usr/src/nv/nv-linux.h nv/nv-linux.h
--- NVIDIA-Linux-x86-1.0-8178-pkg1/usr/src/nv/nv-linux.h 2006-03-15
10:46:52.000000000 +0100
+++ nv/nv-linux.h 2006-03-15 10:58:08.000000000 +0100
@@ -202,9 +202,13 @@
* tiny, and the kernel panics when it is exhausted. try to warn the
user that
* they need to boost the size of their pool.
*/
+#ifdef CONFIG_XEN
+#undef CONFIG_SWIOTLB
+#else
#if defined(CONFIG_SWIOTLB)
#define NV_SWIOTLB 1
#endif
+#endif
/*
* early 2.6 kernels changed their swiotlb codepath, running into a
diff -Nur NVIDIA-Linux-x86-1.0-8178-pkg1/usr/src/nv/nv-vm.c nv/nv-vm.c
--- NVIDIA-Linux-x86-1.0-8178-pkg1/usr/src/nv/nv-vm.c 2006-03-15
10:46:52.000000000 +0100
+++ nv/nv-vm.c 2006-03-15 10:59:04.000000000 +0100
@@ -544,7 +544,11 @@
page_ptr = at->page_table[i];
page_ptr->phys_addr = phys_addr;
page_ptr->virt_addr = virt_addr;
+#ifdef CONFIG_XEN
+ page_ptr->dma_addr = phys_to_machine(page_ptr->phys_addr);
+#else
page_ptr->dma_addr = page_ptr->phys_addr;
+#endif
/* lock the page for dma purposes */
nv_lock_page(page_ptr);
diff -Nur NVIDIA-Linux-x86-1.0-8178-pkg1/usr/src/nv/os-agp.c nv/os-agp.c
--- NVIDIA-Linux-x86-1.0-8178-pkg1/usr/src/nv/os-agp.c 2005-12-15
01:57:35.000000000 +0100
+++ nv/os-agp.c 2006-03-15 10:59:15.000000000 +0100
@@ -303,7 +303,11 @@
page_ptr->phys_addr = (ptr->memory[i] & PAGE_MASK);
page_ptr->virt_addr = (unsigned long) __va(page_ptr->phys_addr);
+#ifdef CONFIG_XEN
+ page_ptr->dma_addr = phys_to_machine(page_ptr->phys_addr);
+#else
page_ptr->dma_addr = page_ptr->phys_addr;
+#endif
}
return RM_OK;
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|