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

Rene Ladan r.c.ladan at gmail.com
Mon Jun 14 21:30:10 UTC 2010


On 14-06-2010 14:48, John Baldwin wrote:
> On Sunday 13 June 2010 11:23:07 pm Doug Barton wrote:
>> On 06/13/10 19:09, Alan Cox wrote:
>>> On Sun, Jun 13, 2010 at 8:38 PM, Doug Barton<dougb at freebsd.org>  wrote:
>>>
>>>> On 06/01/10 08:26, John Baldwin wrote:
>>>>
>>>>>
>>>>> I've asked the driver author if the calls to vm_page_wire() and
>>>>> vm_page_unwire() can simply be removed but have not heard back yet.
>>>>>
>>>>
>>>> Is there any news on this? I have updated to the latest current so I'm
>>>> running the nv driver now, but I'd like to get the nvidia driver running
>>>> again.
>>>>
>>>>
>>> Yes, the unnecessary (and now problematic) wiring and unwiring calls will 
> be
>>> removed in a future release of the driver.
>>
>> Excellent! Any ETA? Or are there patches against an existing version of 
>> the driver?
> 
> I would just remove the calls to vm_page_wire() and vm_page_unwire() along 
> with the immediately adjacent calls to vm_page_{un,}lock_queues().
> 
Just to confirm, like the attached patch?

This is with a GeForce GT 240M, current/amd64 r209035, nvidia-driver
195.36.15

I haven't runtime-tested it yet...

Rene
-- 
http://www.rene-ladan.nl/

GPG fingerprint = E738 5471 D185 7013 0EE0  4FC8 3C1D 6F83 12E1 84F6
(subkeys.pgp.net)
-------------- next part --------------
--- src/nvidia_subr.c.orig	2010-03-12 17:48:52.000000000 +0100
+++ src/nvidia_subr.c	2010-06-14 23:25:28.000000000 +0200
@@ -1301,9 +1301,6 @@
 
     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();
         sglist_append_phys(at->sg_list, pte_array[i], PAGE_SIZE);
     }
 
@@ -1365,9 +1362,6 @@
         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