nvidia-driver 195.22 use horribly broken on amd64 between r206173 and

Craig Rodrigues rodrigc at FreeBSD.org
Sun May 30 02:55:41 UTC 2010


On Sun, May 30, 2010 at 02:48:13AM +0800, datastream datastream.freecity wrote:
> >  http://www.nvnews.net/vbulletin/showthread.php?t=150719
> NVIDIA-FreeBSD-x86_64-195.36.24 with r208117 in my T61 laptop works well.

Hi,

I did the following:

- updated r208649
- applied following patch to nvidia-driver port which bumps driver version
  up to 195.36.24, and also applies kib's patch

My system still hangs after doing a startx.

I also tried recompiling the driver *without* kib's patch, and my
system still hangs.

-- 
Craig Rodrigues
rodrigc at crodrigues.org
-------------- next part --------------
? a.txt
? nvidia-vm_page_lock.1.patch
? work
Index: Makefile
===================================================================
RCS file: /home/pcvs/ports/x11/nvidia-driver/Makefile,v
retrieving revision 1.98
diff -r1.98 Makefile
9c9
< DISTVERSION?=	195.36.15
---
> DISTVERSION?=	195.36.24
Index: distinfo
===================================================================
RCS file: /home/pcvs/ports/x11/nvidia-driver/distinfo,v
retrieving revision 1.36
diff -r1.36 distinfo
1,15c1,3
< MD5 (NVIDIA-FreeBSD-x86-195.36.15.tar.gz) = 2537ca726240344c7eaa44857e2b134e
< SHA256 (NVIDIA-FreeBSD-x86-195.36.15.tar.gz) = 21fc89fa59e2cc96e560af856a3fa583ce4bfb7975465c71170c64962201e7a1
< SIZE (NVIDIA-FreeBSD-x86-195.36.15.tar.gz) = 25614326
< MD5 (NVIDIA-FreeBSD-x86_64-195.36.15.tar.gz) = 95af03aedc818a3dfd8ae9f289746ba4
< SHA256 (NVIDIA-FreeBSD-x86_64-195.36.15.tar.gz) = d64c664398cb4dade24af6b108e03607614f1f7584c71449230c646c313d0e7e
< SIZE (NVIDIA-FreeBSD-x86_64-195.36.15.tar.gz) = 26449559
< MD5 (NVIDIA-FreeBSD-x86-173.14.25.tar.gz) = 1eca3916a9ae86b953f54405e1881774
< SHA256 (NVIDIA-FreeBSD-x86-173.14.25.tar.gz) = c432ed94ce71e297b2d9304d9f34f906b58e2c7c4bc13d8dbac264ed52fd6261
< SIZE (NVIDIA-FreeBSD-x86-173.14.25.tar.gz) = 16682722
< MD5 (NVIDIA-FreeBSD-x86-96.43.16.tar.gz) = 3fc5c2bb537d4a7664d84a7a0df09c7c
< SHA256 (NVIDIA-FreeBSD-x86-96.43.16.tar.gz) = 38bf334284dc600d92d8436333c98d5577e34d69456ed71f1cccc75caa6dffcd
< SIZE (NVIDIA-FreeBSD-x86-96.43.16.tar.gz) = 11842453
< MD5 (NVIDIA-FreeBSD-x86-71.86.13.tar.gz) = 19000b906225ebd39ca3edc1b0c3c7a5
< SHA256 (NVIDIA-FreeBSD-x86-71.86.13.tar.gz) = 27ae01cd6fe050871f7785c2146b18e74ea882f6262e46dc965bf26061238447
< SIZE (NVIDIA-FreeBSD-x86-71.86.13.tar.gz) = 8066159
---
> MD5 (NVIDIA-FreeBSD-x86-195.36.24.tar.gz) = b09ee65d4d445fe8679e50bc49bba8c7
> SHA256 (NVIDIA-FreeBSD-x86-195.36.24.tar.gz) = d175c6848ac174f4c0c54ce7325959e21132f833e13d34004fab116c7034244f
> SIZE (NVIDIA-FreeBSD-x86-195.36.24.tar.gz) = 25632339
Index: files/patch-nvidia-vm_page_lock.1
===================================================================
RCS file: files/patch-nvidia-vm_page_lock.1
diff -N files/patch-nvidia-vm_page_lock.1
0a1,34
> --- src/nvidia_subr.c.orig	2010-05-26 19:34:20.722118986 +0300
> +++ src/nvidia_subr.c	2010-05-26 19:50:00.198768786 +0300
> @@ -1237,6 +1237,7 @@
>      struct nvidia_alloc *at;
>      struct nvidia_softc *sc = nv->os_state;
>      vm_offset_t address;
> +    vm_page_t m;
>      uint32_t i;
>      vm_memattr_t attr;
>      uint32_t size = (count * PAGE_SIZE);
> @@ -1301,9 +1302,10 @@
>  
>      for (i = 0; i < count; i++) {
>          pte_array[i] = at->pte_array[i].physical_address;
> -        vm_page_lock_queues();
> -        vm_page_wire(PHYS_TO_VM_PAGE(pte_array[i]));
> -        vm_page_unlock_queues();
> +        m = PHYS_TO_VM_PAGE(pte_array[i]);
> +        vm_page_lock(m);
> +        vm_page_wire(m);
> +        vm_page_unlock(m);
>          sglist_append_phys(at->sg_list, pte_array[i], PAGE_SIZE);
>      }
>  
> @@ -1365,9 +1367,7 @@
>          os_flush_cpu_cache();
>  
>      for (i = 0; i < count; i++) {
> -        vm_page_lock_queues();
>          vm_page_unwire(PHYS_TO_VM_PAGE(at->pte_array[i].physical_address), 0);
> -        vm_page_unlock_queues();
>          kmem_free(kernel_map,
>                  at->pte_array[i].virtual_address, PAGE_SIZE);
>          malloc_type_freed(M_NVIDIA, PAGE_SIZE);


More information about the freebsd-current mailing list