Comment 37 for bug 145112

Revision history for this message
ELPEarl (ericearl) wrote : Re: Random NVidia Proprietary Driver Lock-Ups solution + 7300

To all
Had this same problem with the 7300GS on Suse 10.1-10.3 but found this solution at NV using the text of the following file. When you run the first run file with the --apply-patch qualilfier it creates a patched "custom" that can now be run normally. What I think the patch might be doing is shutting off agp in order to run the newer style of card PCI Express. (guessing)

Check out this thread about halfway down.
http://www.nvnews.net/vbulletin/showthread.php?t=87918&page=7&highlight=freezes

Note: I did have to change the names to match the downloaded run file from Nvidia. Since running this patch I haven't had a lockup other than with k3b and its 'second burn lockup'. Any glx app like GoogleEarth or Blender froze the system for sure before the patch. Now I am really enjoying these apps. Hope this helps you others with the problem.

I did try the patch on the latest 100.14.19 without success. Seems that even though the author is at Nvidia the patch is not standard to the driver.

In the middle of a piece of music the old driver (100.14.11) Started a 1 second loop of the song and if I tried to use the keyboard to rescue myself out of X I couldn't even use the 5sec holddown of the off button to turn off and restart the system. I had to go to the back of the machine and toggle the machine off and back on which is the same as pulling the plug out of the wall. Really locked to be sure. ZANDER is the contact person at NVIDIA.

If the patch process works, let others know, If it doesn't also let us know though it does work for me.
To apply the patch, use:
# sh /path/to/NVIDIA-Linux-x86-100.14.11-pkg2.run --apply-patch /path/to/NVIDIA_kernel-100.14.11-336672.diff.txt
 # sh NVIDIA-Linux-x86-100.14.11-pkg0-custom.run
---------------------------------------------------------------------------snip------------------------------------------------------
diff -ru usr/src/nv/nv-linux.h usr/src/nv.336672/nv-linux.h
--- usr/src/nv/nv-linux.h 2007-06-13 18:59:58.000000000 -0700
+++ usr/src/nv.336672/nv-linux.h 2007-07-27 19:04:39.174241056 -0700
@@ -1075,6 +1075,7 @@

     nv_stack_t *timer_sp;
     nv_stack_t *isr_sp;
+ nv_stack_t *pci_cfgchk_sp;
     nv_stack_t *isr_bh_sp;

     /* keep track of any pending bottom halfes */
@@ -1172,7 +1173,7 @@
         if (nv->flags & NV_FLAG_USE_BAR0_CFG) \
             rm_check_pci_config_space(sp, nv, do_the_bars, NULL); \
         else \
- nv_verify_pci_config(nv, do_the_bars); \
+ nv_check_pci_config_space(nv, do_the_bars); \
     }

 /*
diff -ru usr/src/nv/nv.c usr/src/nv.336672/nv.c
--- usr/src/nv/nv.c 2007-06-13 18:59:58.000000000 -0700
+++ usr/src/nv.336672/nv.c 2007-07-27 19:04:39.178241284 -0700
@@ -215,7 +215,7 @@
 }

-void NV_API_CALL nv_verify_pci_config(nv_state_t *nv, BOOL do_the_bars)
+static void nv_check_pci_config_space(nv_state_t *nv, BOOL do_the_bars)
 {
     nv_linux_state_t *nvl = NV_GET_NVL_FROM_NV_STATE(nv);
     unsigned short cmd, flag = 0;
@@ -246,6 +246,14 @@
         verify_pci_bars(nv, nvl->dev);
 }

+void NV_API_CALL nv_verify_pci_config(nv_state_t *nv, BOOL do_the_bars)
+{
+ nv_linux_state_t *nvl = NV_GET_NVL_FROM_NV_STATE(nv);
+ nv_stack_t *sp = nvl->pci_cfgchk_sp;
+
+ NV_CHECK_PCI_CONFIG_SPACE(sp, nv, do_the_bars);
+}
+
 /***
  *** STATIC functions, only in this file
  ***/
@@ -1959,6 +1967,14 @@
             goto failed;
         }

+ NV_KMEM_CACHE_ALLOC_STACK(nvl->pci_cfgchk_sp);
+ if (nvl->pci_cfgchk_sp == NULL)
+ {
+ rc = -ENOMEM;
+ nv_printf(NV_DBG_ERRORS, "NVRM: failed to allocate stack!\n");
+ goto failed;
+ }
+
         NV_KMEM_CACHE_ALLOC_STACK(nvl->isr_bh_sp);
         if (nvl->isr_bh_sp == NULL)
         {
@@ -2045,6 +2061,12 @@
             nvl->isr_bh_sp = NULL;
         }

+ if (nvl->pci_cfgchk_sp != NULL)
+ {
+ NV_KMEM_CACHE_FREE_STACK(nvl->pci_cfgchk_sp);
+ nvl->pci_cfgchk_sp = NULL;
+ }
+
         if (nvl->isr_sp != NULL)
         {
             NV_KMEM_CACHE_FREE_STACK(nvl->isr_sp);
@@ -2126,6 +2148,7 @@

         NV_KMEM_CACHE_FREE_STACK(nvl->timer_sp);
         NV_KMEM_CACHE_FREE_STACK(nvl->isr_bh_sp);
+ NV_KMEM_CACHE_FREE_STACK(nvl->pci_cfgchk_sp);
         NV_KMEM_CACHE_FREE_STACK(nvl->isr_sp);

         /*