Date: Sun, 6 Apr 2008 15:39:16 GMT From: Hans Petter Selasky <hselasky@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 139459 for review Message-ID: <200804061539.m36FdGR1082953@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=139459 Change 139459 by hselasky@hselasky_laptop001 on 2008/04/06 15:38:58 Compile fixes for NetBSD. The commit does not affect resulting code when compiling on FreeBSD. Affected files ... .. //depot/projects/usb/src/sys/dev/usb/usb_subr.c#104 edit .. //depot/projects/usb/src/sys/dev/usb/usb_subr.h#102 edit Differences ... ==== //depot/projects/usb/src/sys/dev/usb/usb_subr.c#104 (text+ko) ==== @@ -2952,24 +2952,15 @@ *------------------------------------------------------------------------*/ static void usbd_pc_common_mem_cb(struct usbd_page_cache *pc, bus_dma_segment_t *segs, - int nseg, int error, uint8_t isload) + int nseg, int error, uint8_t isload, uint8_t dolock) { struct usbd_dma_parent_tag *uptag; - struct usbd_xfer *xfer; struct usbd_page *pg; uint32_t rem; - uint8_t owned; uint8_t ext_seg; /* extend last segment */ uptag = pc->tag_parent; - /* - * XXX There is sometimes recursive locking here. - * XXX We should try to find a better solution. - * XXX Until further the "owned" variable does - * XXX the trick. - */ - if (error) { goto done; } @@ -3002,17 +2993,14 @@ (pg + 1)->physaddr = pg->physaddr + USB_PAGE_SIZE; } done: - owned = mtx_owned(uptag->mtx); - if (!owned) + if (dolock) mtx_lock(uptag->mtx); uptag->dma_error = (error ? 1 : 0); if (isload) { (uptag->func) (uptag); - } else { - cv_broadcast(uptag->cv); } - if (!owned) + if (dolock) mtx_unlock(uptag->mtx); return; } @@ -3029,6 +3017,7 @@ uint32_t size, uint32_t align) { struct usbd_dma_parent_tag *uptag; + struct usbd_dma_tag *utag; caddr_t ptr = NULL; bus_dmamap_t map; int seg_count; @@ -3090,7 +3079,7 @@ pc->tag = utag->tag; pc->ismultiseg = (align == 1); - usbd_pc_common_mem_cb(pc, utag->p_seg, seg_count, 0, 0); + usbd_pc_common_mem_cb(pc, utag->p_seg, seg_count, 0, 0, 1); bzero(ptr, size); @@ -3099,13 +3088,13 @@ return (0); done_0: - bus_dmamap_unload(tag, map); + bus_dmamap_unload(utag->tag, map); done_1: - bus_dmamap_destroy(tag, map); + bus_dmamap_destroy(utag->tag, map); done_2: - bus_dmamem_unmap(tag, ptr, size); + bus_dmamem_unmap(utag->tag, ptr, size); done_3: - bus_dmamem_free(tag, utag->p_seg, seg_count); + bus_dmamem_free(utag->tag, utag->p_seg, seg_count); done_4: /* utag is destroyed later */ done_5: @@ -3847,8 +3836,10 @@ /* something is corrupt */ return; } +#ifdef __FreeBSD__ /* initialise condition variable */ cv_init(udpt->cv, "USB DMA CV"); +#endif /* store some information */ udpt->mtx = mtx; @@ -3890,8 +3881,10 @@ } if (udpt->utag_max) { +#ifdef __FreeBSD__ /* destroy the condition variable */ cv_destroy(udpt->cv); +#endif } return; } ==== //depot/projects/usb/src/sys/dev/usb/usb_subr.h#102 (text+ko) ==== @@ -417,7 +417,9 @@ * The following structure describes the parent USB DMA tag. */ struct usbd_dma_parent_tag { +#ifdef __FreeBSD__ struct cv cv[1]; /* internal condition variable */ +#endif bus_dma_tag_t tag; /* always set */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200804061539.m36FdGR1082953>