ports/181387: CURRENT crashes with nvidia GPU BLOB : vm_radix_insert: key 23c078 is already present
AN
andy at neu.net
Sun Aug 18 23:00:02 UTC 2013
>Number: 181387
>Category: ports
>Synopsis: CURRENT crashes with nvidia GPU BLOB : vm_radix_insert: key 23c078 is already present
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Sun Aug 18 23:00:00 UTC 2013
>Closed-Date:
>Last-Modified:
>Originator: AN
>Release: 10-current
>Organization:
>Environment:
FreeBSD FBSD10 10.0-CURRENT FreeBSD 10.0-CURRENT #79 r254497: Sun Aug 18 15:52:31 CDT 2013 root at FBSD10:/usr/obj/usr/src/sys/MYKERNEL amd64
nvidia-driver-319.32 NVidia graphics card binary drivers for hardware OpenGL rendering
>Description:
complete deadlock and reboot on starting X (startx from command line)
---------------------------------------------------------------------------------
Yes, I can confirm, that it builds, installs and runs fine for me.
The patch should be placed as
x11/nvidia-driver/files/patch-src__nvidia_subr.c, shoudn't it?
Many thanks for this work.
Regards and a nice weekend,
Rainer Hurling
---------------------------------------------------------------------------------
I also confirm the patch works on current at r254497 (AN).
>How-To-Repeat:
startx
>Fix:
Patch written by: Gary Jennejohn <gljennjohn at googlemail.com>
I am only submitting the patch as a PR.
http://docs.freebsd.org/cgi/getmsg.cgi?fetch=989426+0+archive/2013/freebsd-current/20130811.freebsd-current
http://docs.freebsd.org/cgi/getmsg.cgi?fetch=978445+0+archive/2013/freebsd-current/20130811.freebsd-current
The REINPLACE_CMD at line 160 of nvidia-driver/Makefile is incorrect.
How do I know that? Because I made a patch which results in a working
nvidia-driver-319.32 with r254050. That's what I'm running right now.
Here's the patch (loaded with :r in vi, so all spaces etc. are correct):
--- src/nvidia_subr.c.orig 2013-08-09 11:32:26.000000000 +0200
+++ src/nvidia_subr.c 2013-08-09 11:33:23.000000000 +0200
@@ -945,7 +945,7 @@
return ENOMEM;
}
- address = kmem_alloc_contig(kernel_map, size, flags, 0,
+ address = kmem_alloc_contig(kmem_arena, size, flags, 0,
sc->dma_mask, PAGE_SIZE, 0, attr);
if (!address) {
status = ENOMEM;
@@ -994,7 +994,7 @@
os_flush_cpu_cache();
if (at->pte_array[0].virtual_address != NULL) {
- kmem_free(kernel_map,
+ kmem_free(kmem_arena,
at->pte_array[0].virtual_address, at->size);
malloc_type_freed(M_NVIDIA, at->size);
}
@@ -1021,7 +1021,7 @@
if (at->attr != VM_MEMATTR_WRITE_BACK)
os_flush_cpu_cache();
- kmem_free(kernel_map, at->pte_array[0].virtual_address,
+ kmem_free(kmem_arena, at->pte_array[0].virtual_address,
at->size);
malloc_type_freed(M_NVIDIA, at->size);
@@ -1085,7 +1085,7 @@
}
for (i = 0; i < count; i++) {
- address = kmem_alloc_contig(kernel_map, PAGE_SIZE, flags, 0,
+ address = kmem_alloc_contig(kmem_arena, PAGE_SIZE, flags, 0,
sc->dma_mask, PAGE_SIZE, 0, attr);
if (!address) {
status = ENOMEM;
@@ -1139,7 +1139,7 @@
for (i = 0; i < count; i++) {
if (at->pte_array[i].virtual_address == 0)
break;
- kmem_free(kernel_map,
+ kmem_free(kmem_arena,
at->pte_array[i].virtual_address, PAGE_SIZE);
malloc_type_freed(M_NVIDIA, PAGE_SIZE);
}
@@ -1169,7 +1169,7 @@
os_flush_cpu_cache();
for (i = 0; i < count; i++) {
- kmem_free(kernel_map,
+ kmem_free(kmem_arena,
at->pte_array[i].virtual_address, PAGE_SIZE);
malloc_type_freed(M_NVIDIA, PAGE_SIZE);
}
Thanks to Gary for the fix.
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list