NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

re: port-i386/42966: kernel built from today's netbsd-5 crashes



The following reply was made to PR port-i386/42966; it has been noted by GNATS.

From: matthew green <mrg%eterna.com.au@localhost>
To: Anne Bennett <anne%porcupine.montreal.qc.ca@localhost>
Cc: port-i386-maintainer%NetBSD.org@localhost, gnats-admin%NetBSD.org@localhost,
    netbsd-bugs%NetBSD.org@localhost, gnats-bugs%NetBSD.org@localhost,
    "David H. Gutteridge" <dhgutteridge%sympatico.ca@localhost>
Subject: re: port-i386/42966: kernel built from today's netbsd-5 crashes
Date: Fri, 19 Mar 2010 13:01:30 +1100

 unfortunately, none of the ideas changes are "right".  this is partly
 fixed in -current already, but there are two places to fix.  thanks to
 matthias drochner for helping me understand all the parts..
 
 this patch should work for netbsd-5.  i'll work on getting the 2nd
 part fixed up for -current as well, and submit a pullup.
 
 
 .mrg.
 
 
 Index: bsd-core/drm_pci.c
 ===================================================================
 RCS file: /cvsroot/src/sys/external/bsd/drm/dist/bsd-core/drm_pci.c,v
 retrieving revision 1.4.10.1
 diff -p -r1.4.10.1 drm_pci.c
 *** bsd-core/drm_pci.c 20 Jun 2009 23:36:59 -0000      1.4.10.1
 --- bsd-core/drm_pci.c 19 Mar 2010 01:59:10 -0000
 *************** drm_pci_alloc(struct drm_device *dev, si
 *** 110,118 ****
                return NULL;
        }
   #elif   defined(__NetBSD__)
        dmah->tag = dev->pa.pa_dmat;
   
 !      if ((ret = bus_dmamem_alloc(dmah->tag, size, align, maxaddr,
            dmah->segs, 1, &nsegs, BUS_DMA_WAITOK)) != 0) {
                printf("drm: Unable to allocate %zu bytes of DMA, error %d\n",
                    size, ret);
 --- 110,119 ----
                return NULL;
        }
   #elif   defined(__NetBSD__)
 +      KASSERT(maxaddr >= 0xffffffffUL); /* no way to tell bus_dma_alloc */
        dmah->tag = dev->pa.pa_dmat;
   
 !      if ((ret = bus_dmamem_alloc(dmah->tag, size, align, 0,
            dmah->segs, 1, &nsegs, BUS_DMA_WAITOK)) != 0) {
                printf("drm: Unable to allocate %zu bytes of DMA, error %d\n",
                    size, ret);
 *************** drm_pci_alloc(struct drm_device *dev, si
 *** 136,142 ****
                free(dmah, DRM_MEM_DMA);
                return NULL;
        }
 !      if ((ret = bus_dmamap_create(dmah->tag, size, 1, size, maxaddr,
             BUS_DMA_NOWAIT, &dmah->map)) != 0) {
                printf("drm: Unable to create DMA map, error %d\n", ret);
                bus_dmamem_unmap(dmah->tag, dmah->vaddr, size);
 --- 137,143 ----
                free(dmah, DRM_MEM_DMA);
                return NULL;
        }
 !      if ((ret = bus_dmamap_create(dmah->tag, size, 1, size, 0,
             BUS_DMA_NOWAIT, &dmah->map)) != 0) {
                printf("drm: Unable to create DMA map, error %d\n", ret);
                bus_dmamem_unmap(dmah->tag, dmah->vaddr, size);
 


Home | Main Index | Thread Index | Old Index