[pkg-nvidia-devel] Patch to make 169.12 compile on XEN enabled kernels

Lennart Sorensen lsorense at csclub.uwaterloo.ca
Fri May 30 16:18:24 UTC 2008


On Mon, May 26, 2008 at 04:10:24PM -0400, Lennart Sorensen wrote:
> I grabbed the 169.12-2 package from ftp.us.debian.org and built it on an
> i386 machine and it runs fine so far with the 2.6.25-2-686 kernel.
> Looks good to me.
> 
> I can't test the library problem since I only have a 6200 not an 8xxx
> card in here.  My only 8xxx card is the 8600GT in my amd64 box.
> 
> It does appear that it might have failed to remove the diversions from
> before, even though it no longer creates them.  Did the old prerm script
> fail to remove the diversions, or does it not do that on upgrades, only
> on full remove?  Either way it still needs to be handled somehow.
> 
> The old postrm only gets rid of the diversion on remove or purge, not on
> upgrade, so we are now left with an old diversion that will never be
> removed while it should have been removed when the new package was
> installed.

Here is an updated xen patch for 173.14.05.  It appears to work for me
so far.

-- 
Len Sorensen
-------------- next part --------------
diff -ruN usr/src/nv/conftest.sh usr/src/nv/conftest.sh
--- usr/src/nv/conftest.sh	2008-05-30 10:06:36.000000000 -0400
+++ usr/src/nv/conftest.sh	2008-05-30 10:32:30.000000000 -0400
@@ -20,38 +20,7 @@
 SOURCES=$3
 HEADERS=$SOURCES/include
 OUTPUT=$4
-XEN_PRESENT=1
-
-test_xen() {
-    FILE="linux/autoconf.h"
-
-    if [ -f $HEADERS/$FILE -o -f $OUTPUT/include/$FILE ]; then
-        #
-        # We are looking at a configured source tree; verify
-        # that it's not a Xen kernel.
-        #
-        echo "#include <linux/autoconf.h>
-        #ifdef CONFIG_XEN
-        #error CONFIG_XEN defined!
-        #endif
-        " > conftest$$.c
-
-        $CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
-        rm -f conftest$$.c
-
-        if [ -f conftest$$.o ]; then
-            rm -f conftest$$.o
-            XEN_PRESENT=0
-        fi
-    else
-        CONFIG=$HEADERS/../.config
-        if [ -f $CONFIG ]; then
-            if [ -z "$(grep "^CONFIG_XEN=y" $CONFIG)" ]; then
-                XEN_PRESENT="0"
-            fi
-        fi
-    fi
-}
+XEN_PRESENT=0
 
 build_cflags() {
     BASE_CFLAGS="-D__KERNEL__ \
@@ -64,8 +33,6 @@
 
     CFLAGS="$CFLAGS $OUTPUT_CFLAGS -I$HEADERS"
 
-    test_xen
-
     if [ "$OUTPUT" != "$SOURCES" ]; then
         ARCH=`uname -m | sed -e 's/i.86/i386/'`
         MACH_CFLAGS="-I$HEADERS/asm-$ARCH/mach-default"
@@ -1244,33 +1211,7 @@
     ;;
 
     xen_sanity_check)
-        #
-        # Check if the target kernel is a Xen kernel. If so, then exit, since
-        # the driver doesn't currently work with Xen.
-        #
-        VERBOSE=$6
-
-        if [ -n "$IGNORE_XEN_PRESENCE" ]; then
-            exit 0
-        fi
-
-        if [ "$XEN_PRESENT" != "0" ]; then
-            echo "The kernel you are installing for is a Xen kernel!";
-            echo "";
-            echo "The NVIDIA driver does not currently work on Xen kernels. If ";
-            echo "you are using a stock distribution kernel, please install ";
-            echo "a variant of this kernel without Xen support; if this is a ";
-            echo "custom kernel, please install a standard Linux kernel.  Then ";
-            echo "try installing the NVIDIA kernel module again.";
-            echo "";
-            if [ "$VERBOSE" = "full_output" ]; then
-                echo "*** Failed Xen sanity check. Bailing out! ***";
-                echo "";
-            fi
-            exit 1
-        else
-            exit 0
-        fi
+        exit 0
     ;;
 
     compile_tests)
diff -ruN usr/src/nv/nv.c usr/src/nv/nv.c
--- usr/src/nv/nv.c	2008-05-30 10:06:36.000000000 -0400
+++ usr/src/nv/nv.c	2008-05-30 10:28:33.000000000 -0400
@@ -2020,17 +2020,6 @@
             goto failed;
         }
 
-#if defined(CONFIG_XEN) && defined(NVCPU_X86)
-        if (HYPERVISOR_memory_op(XENMEM_maximum_ram_page, NULL) > 0xfffff)
-        {
-            nv_printf(NV_DBG_ERRORS,
-                "NVRM: Systems with system memory mapped above the 4GB boundary\n"
-                "NVRM: are not supported when using x86 Xen kernels.\n");
-            rc = -EIO;
-            goto failed;
-        }
-#endif
-
         if (!rm_init_adapter(sp, nv))
         {
             free_irq(nv->interrupt_line, (void *) nvl);
@@ -2043,20 +2032,6 @@
         nvl->tasklet.data = (unsigned long) nv;
         tasklet_enable(&nvl->tasklet);
 
-#if defined(CONFIG_XEN)
-        if ((nvl->dev->dma_mask <= 0xffffffff) &&
-            (HYPERVISOR_memory_op(XENMEM_maximum_ram_page, NULL) > 0xfffff))
-        {
-            NV_SHUTDOWN_ADAPTER(sp, nv, nvl);
-            nv_printf(NV_DBG_ERRORS,
-                "NVRM: GPUs incapable of addressing more than 4GB of memory\n"
-                "NVRM: are not supported when using Xen kernels on systems with\n"
-                "NVRM: system memory mapped above the 4GB boundary.\n");
-            rc = -EIO;
-            goto failed;
-        }
-#endif
-
         nv->flags |= NV_FLAG_OPEN;
     }
 
@@ -3928,7 +3903,6 @@
     U032         config
 )
 {
-#if !defined(CONFIG_XEN)
     RM_STATUS status = RM_ERROR;
     static int old_error = 0;
     nv_stack_t *sp = NULL;
@@ -4066,10 +4040,6 @@
         old_error = 0; /* report new errors */
 
     return status;
-#else
-    nv_printf(NV_DBG_ERRORS, "NVRM: AGP is not supported on Xen kernels.\n");
-    return RM_ERR_NOT_SUPPORTED;
-#endif
 }
 
 RM_STATUS NV_API_CALL nv_agp_teardown(
diff -ruN usr/src/nv/nv-linux.h usr/src/nv/nv-linux.h
--- usr/src/nv/nv-linux.h	2008-05-30 10:06:36.000000000 -0400
+++ usr/src/nv/nv-linux.h	2008-05-30 10:07:58.000000000 -0400
@@ -108,11 +108,6 @@
 #include <linux/completion.h>
 #include <linux/highmem.h>
 
-#ifdef CONFIG_XEN
-#include <asm/maddr.h>
-#include <xen/interface/memory.h>
-#endif
-
 #ifdef CONFIG_PROC_FS
 #include <linux/proc_fs.h>
 #endif
@@ -144,7 +139,7 @@
 #include <linux/agpgart.h>
 #endif
 
-#if (defined(NVCPU_X86) || defined(NVCPU_X86_64)) && !defined(CONFIG_XEN)
+#if (defined(NVCPU_X86) || defined(NVCPU_X86_64))
 #define NV_BUILD_NV_PAT_SUPPORT 1
 #endif
 
@@ -717,11 +712,7 @@
 #define NV_TASK_STRUCT_RLIM(current)  ((current)->rlim)
 #endif
 
-#ifdef CONFIG_XEN
-#define NV_GET_DMA_ADDRESS(phys_addr) phys_to_machine(phys_addr)
-#else
 #define NV_GET_DMA_ADDRESS(phys_addr) (phys_addr)
-#endif
 
 #define NV_GET_PAGE_STRUCT(phys_page) virt_to_page(__va(phys_page))
 #define NV_VMA_PGOFF(vma)             ((vma)->vm_pgoff)
@@ -874,13 +865,8 @@
 #else
 #error "NV_REMAP_PAGE_RANGE() undefined!"
 #endif
-#if !defined(CONFIG_XEN)
 #define NV_IO_REMAP_PAGE_RANGE(from, offset, x...) \
     NV_REMAP_PAGE_RANGE(from, offset, x)
-#else
-#define NV_IO_REMAP_PAGE_RANGE(from, offset, x...) \
-    io_remap_pfn_range(vma, from, ((offset) >> PAGE_SHIFT), x)
-#endif
 
 #define NV_PGD_OFFSET(address, kernel, mm)              \
    ({                                                   \
diff -ruN usr/src/nv/nv-vm.c usr/src/nv/nv-vm.c
--- usr/src/nv/nv-vm.c	2008-05-30 10:06:36.000000000 -0400
+++ usr/src/nv/nv-vm.c	2008-05-30 10:35:13.000000000 -0400
@@ -312,7 +312,7 @@
 #endif
 
 #if (defined(KERNEL_2_4) || defined(NV_CPA_DF_LIST_BUG) || \
-  (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20))) && !defined(CONFIG_XEN)
+  (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20)))
 #define NV_CPA_NEEDS_FLUSHING 1
 #endif
 
diff -ruN usr/src/nv/os-interface.c usr/src/nv/os-interface.c
--- usr/src/nv/os-interface.c	2008-05-30 10:06:36.000000000 -0400
+++ usr/src/nv/os-interface.c	2008-05-30 10:33:26.000000000 -0400
@@ -609,7 +609,6 @@
     if (jiffies) 
     {
         // if we have at least 1 full jiffy to wait, give up the cpu
-#if !defined(CONFIG_XEN)
         // but first, make sure we haven't raised the irql level on
         // this cpu (most likely holding a lock). I'm seeing cases
         // where we give up the cpu with raised irql, and never get
@@ -620,10 +619,8 @@
         // the local CPU.
         if (!NV_IRQL_IS_RAISED())
         {
-#endif
             /* give up the cpu */
             current->state = TASK_INTERRUPTIBLE;
-#if !defined(CONFIG_XEN)
         }
         else
         {
@@ -633,7 +630,6 @@
             os_dbg_breakpoint();
             return RM_ERROR;
         }
-#endif
         do
         {
             schedule_timeout(jiffies);
@@ -1377,7 +1373,7 @@
      * If you prefer to manually grant the necessary capability and 
      * adjust the resource limit, disable the lines below.
      */
-#if !defined(CONFIG_XEN) && !defined(CONFIG_X86_4G)
+#if !defined(CONFIG_X86_4G)
     struct rlimit *rlim = NV_TASK_STRUCT_RLIM(current);
     rlim[RLIMIT_MEMLOCK].rlim_cur = RLIM_INFINITY;
     cap_raise(current->cap_effective, CAP_IPC_LOCK);


More information about the Pkg-nvidia-devel mailing list