From d68d16eebbbe84983098fc00d2276d32f26c88da Mon Sep 17 00:00:00 2001 From: scottl Date: Fri, 27 Jun 2003 08:31:48 +0000 Subject: Do the first and mostly mechanical step of adding mutex support to the bus_dma async callback scheme. Note that sparc64 does not seem to do async callbacks. Note that ia64 callbacks might not be MPSAFE at the moment. Note that powerpc doesn't seem to do async callbacks due to the implementation being incomplete. Reviewed by: mostly silence on arch@ --- sys/ia64/ia64/busdma_machdep.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'sys/ia64') diff --git a/sys/ia64/ia64/busdma_machdep.c b/sys/ia64/ia64/busdma_machdep.c index 33cece4..466e995 100644 --- a/sys/ia64/ia64/busdma_machdep.c +++ b/sys/ia64/ia64/busdma_machdep.c @@ -90,6 +90,7 @@ struct bus_dmamap { vm_offset_t busaddress; /* address in bus space */ bus_dmamap_callback_t *callback; void *callback_arg; + struct mtx *callback_mtx; void *sgmaphandle; /* handle into sgmap */ STAILQ_ENTRY(bus_dmamap) links; }; @@ -920,8 +921,12 @@ busdma_swi(void) while ((map = STAILQ_FIRST(&bounce_map_callbacklist)) != NULL) { STAILQ_REMOVE_HEAD(&bounce_map_callbacklist, links); splx(s); + if (map->callback_mtx != NULL) + mtx_lock(map->callback_mtx); bus_dmamap_load(map->dmat, map, map->buf, map->buflen, map->callback, map->callback_arg, /*flags*/0); + if (map->callback_mtx != NULL) + mtx_unlock(map->callback_mtx); s = splhigh(); } splx(s); -- cgit v1.1