mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-08 01:20:40 +00:00
Teach bus_dmamem_free() about contigfree(). This is a bit of a hack,
but it's better than the buggy behavior we have now. If we contigmalloc() buffers in bus_dmamem_alloc(), then we must configfree() them in bus_dmamem_free(). Trying to free() them is wrong, and will cause a panic (at least, it does on the alpha.) I tripped over this when trying to kldunload my busdma-ified if_rl driver.
This commit is contained in:
parent
cf1bca84b6
commit
3708f8da9c
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=81711
|
@ -384,7 +384,10 @@ bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map)
|
|||
*/
|
||||
if (map != &nobounce_dmamap)
|
||||
panic("bus_dmamem_free: Invalid map freed\n");
|
||||
free(vaddr, M_DEVBUF);
|
||||
if ((dmat->maxsize <= PAGE_SIZE) && dmat->lowaddr >= ptoa(Maxmem)) {
|
||||
free(vaddr, M_DEVBUF);
|
||||
else
|
||||
contigfree(vaddr, dmat->maxsize, M_DEVBUF);
|
||||
}
|
||||
|
||||
#define BUS_DMAMAP_NSEGS ((BUS_SPACE_MAXSIZE / PAGE_SIZE) + 1)
|
||||
|
|
|
@ -359,8 +359,11 @@ bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map)
|
|||
if (map != NULL)
|
||||
panic("bus_dmamem_free: Invalid map freed\n");
|
||||
/* XXX There is no "contigfree" and "free" doesn't work */
|
||||
/* There is too a contigfree, and we need to use it here. */
|
||||
if ((dmat->maxsize <= PAGE_SIZE) && dmat->lowaddr >= ptoa(Maxmem))
|
||||
free(vaddr, M_DEVBUF);
|
||||
else
|
||||
contigfree(vaddr, dmat->maxsize, M_DEVBUF);
|
||||
}
|
||||
|
||||
#define BUS_DMAMAP_NSEGS ((BUS_SPACE_MAXSIZE / PAGE_SIZE) + 1)
|
||||
|
|
|
@ -359,8 +359,11 @@ bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map)
|
|||
if (map != NULL)
|
||||
panic("bus_dmamem_free: Invalid map freed\n");
|
||||
/* XXX There is no "contigfree" and "free" doesn't work */
|
||||
/* There is too a contigfree, and we need to use it here. */
|
||||
if ((dmat->maxsize <= PAGE_SIZE) && dmat->lowaddr >= ptoa(Maxmem))
|
||||
free(vaddr, M_DEVBUF);
|
||||
else
|
||||
contigfree(vaddr, dmat->maxsize, M_DEVBUF);
|
||||
}
|
||||
|
||||
#define BUS_DMAMAP_NSEGS ((BUS_SPACE_MAXSIZE / PAGE_SIZE) + 1)
|
||||
|
|
Loading…
Reference in a new issue