cvs commit: src/sys/dev/usb ehci.c ohci.c

Marius Strobl marius at alchemy.franken.de
Wed Apr 23 20:36:24 UTC 2008


On Sat, Apr 12, 2008 at 09:33:58PM +0200, Marius Strobl wrote:
> On Thu, Mar 20, 2008 at 04:19:26PM +0000, Sam Leffler wrote:
> > sam         2008-03-20 16:19:25 UTC
> > 
> >   FreeBSD src repository
> > 
> >   Modified files:
> >     sys/dev/usb          ehci.c ohci.c 
> >   Log:
> >   Workaround design botch in usb: blindly mixing bus_dma with PIO does not
> >   work on architectures with a write-back cache as the PIO writes end up
> >   in the cache which the sync(BUS_DMASYNC_POSTREAD) in usb_transfer_complete
> >   then discards; compensate in the xfer methods that do PIO by pushing the
> >   writes out of the cache before usb_transfer_complete is called.
> >   
> >   This fixes USB on xscale and likely other places.
> >   
> >   Sponsored by:   hobnob
> >   Reviewed by:    cognet, imp
> >   MFC after:      1 month
> >   
> >   Revision  Changes    Path
> >   1.62      +16 -0     src/sys/dev/usb/ehci.c
> >   1.171     +16 -0     src/sys/dev/usb/ohci.c
> 
> This causes a crash during boot on sparc64. Looks like map is still
> NULL at that point.
> 

Are you ok with the change below or would that also prevent
your kludge from taking effect?

Marius

Index: ehci.c
===================================================================
RCS file: /usr/data/bsd/cvs/fbsd/src/sys/dev/usb/ehci.c,v
retrieving revision 1.62
diff -u -r1.62 ehci.c
--- ehci.c	20 Mar 2008 16:19:25 -0000	1.62
+++ ehci.c	23 Apr 2008 20:23:58 -0000
@@ -664,6 +664,8 @@
 	usbd_pipe_handle pipe = xfer->pipe;
 	bus_dma_tag_t tag = pipe->device->bus->buffer_dmatag;
 	struct usb_dma_mapping *dmap = &xfer->dmamap;
+	if (dmap->map == NULL)
+		return;
 	bus_dmamap_sync(tag, dmap->map, BUS_DMASYNC_PREWRITE);
 }
 
Index: ohci.c
===================================================================
RCS file: /usr/data/bsd/cvs/fbsd/src/sys/dev/usb/ohci.c,v
retrieving revision 1.171
diff -u -r1.171 ohci.c
--- ohci.c	20 Mar 2008 16:19:25 -0000	1.171
+++ ohci.c	21 Apr 2008 19:13:54 -0000
@@ -1571,6 +1571,8 @@
 	usbd_pipe_handle pipe = xfer->pipe;
 	bus_dma_tag_t tag = pipe->device->bus->buffer_dmatag;
 	struct usb_dma_mapping *dmap = &xfer->dmamap;
+	if (dmap->map == NULL)
+		return;
 	bus_dmamap_sync(tag, dmap->map, BUS_DMASYNC_PREWRITE);
 }
 


More information about the cvs-src mailing list