panic in bus_dma_tag_destroy()
Chuck Tuffli
chuck_tuffli at agilent.com
Wed Oct 6 15:29:15 PDT 2004
I'm seeing a panic in bus_dma_tag_destroy() on the free of
dmat->segments. In comparing this to FBSD 4.10 and 5.x, the code seems
closest to the 5.x branch with the exception that 5.x seems to defer
the allocation of segments til bus_dmamap_create() while DFly
allocates this in bus_dma_tag_create(). The only other thing I noticed
was that DFly allocates segments with M_INTWAIT while FBSD allocates
it with M_NOWAIT.
This cause grief when unloading a kld which destroys a DMA tag
allocated by
/* create a parent DMA tag for the device */
if (bus_dma_tag_create(NULL,
1, 0,
BUS_SPACE_MAXADDR_32BIT,
BUS_SPACE_MAXADDR,
NULL, NULL,
BUS_SPACE_MAXSIZE_32BIT,
BUS_SPACE_MAXSIZE_32BIT,
BUS_SPACE_UNRESTRICTED,
0,
&svd->parent_dmat) != 0) {
device_printf(dev, "can't create parent DMA tag\n");
goto svd_pci_fail;
}
There are no children of parent_dmat when the driver calls
bus_dma_tag_destroy(). Before it paniced, I printed out a couple of
values from the bus_dma_tag struct
parent_dmat 0xce926d38
map_count 0
ref_count 1
segments 0xc1a7f000
Any thoughts?
--
Chuck Tuffli
Agilent Technologies
More information about the Bugs
mailing list