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

Marius Strobl marius at alchemy.franken.de
Sat Apr 12 19:34:00 UTC 2008


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.

Marius

ohci0: <AcerLabs M5237 (Aladdin-V) USB controller> mem 0x1000000-0x1000fff at d0
ohci0: Reserved 0x1000 bytes for rid 0x10 type 3 at 0x1000000
ohci0: [GIANT-LOCKED]
ohci0: [ITHREAD]
usb0: OHCI version 1.0, legacy support
usb0: <AcerLabs M5237 (Aladdin-V) USB controller> on ohci0
usb0: USB revision 1.0
panic: trap: fast data access mmu miss
cpuid = 0
KDB: enter: panic
[thread pid 0 tid 100000 ]
Stopped at      kdb_enter+0x80: ta              %xcc, 1
db> bt
Tracing pid 0 tid 100000 td 0xc076d8e0
panic() at panic+0x208
trap() at trap+0x4d0
-- fast data access mmu miss tar=0 %o7=0xc0226f1c --
iommu_dvmamap_sync() at iommu_dvmamap_sync+0x4
ohci_root_ctrl_start() at ohci_root_ctrl_start+0xe4c
ohci_root_ctrl_transfer() at ohci_root_ctrl_transfer+0x1c
usbd_start_transfer() at usbd_start_transfer+0x188
usbd_transfer() at usbd_transfer+0x128
usbd_sync_transfer() at usbd_sync_transfer+0x10
usbd_do_request_flags_pipe() at usbd_do_request_flags_pipe+0x5c
usbd_do_request_flags() at usbd_do_request_flags+0x1c
usbd_do_request() at usbd_do_request+0x1c
usbd_set_address() at usbd_set_address+0x34
usbd_new_device() at usbd_new_device+0x3a4
usb_attach() at usb_attach+0x16c
device_attach() at device_attach+0x4a4
device_probe_and_attach() at device_probe_and_attach+0x14c
ohci_pci_attach() at ohci_pci_attach+0x8bc
device_attach() at device_attach+0x4a4
device_probe_and_attach() at device_probe_and_attach+0x14c
bus_generic_attach() at bus_generic_attach+0x10
ofw_pcibus_attach() at ofw_pcibus_attach+0x680
device_attach() at device_attach+0x4a4
device_probe_and_attach() at device_probe_and_attach+0x14c
bus_generic_attach() at bus_generic_attach+0x10
psycho_attach() at psycho_attach+0x1124
device_attach() at device_attach+0x4a4
device_probe_and_attach() at device_probe_and_attach+0x14c
bus_generic_attach() at bus_generic_attach+0x10
nexus_attach() at nexus_attach+0x4fc
device_attach() at device_attach+0x4a4
device_probe_and_attach() at device_probe_and_attach+0x14c
root_bus_configure() at root_bus_configure+0x28
configure() at configure+0x4
mi_startup() at mi_startup+0x18c
btext() at btext+0x34

> addr2line -fe kernel.debug 0xc057e9e4
iommu_dvmamap_sync
/usr/home/marius/co/ts/src/sys/sparc64/sparc64/iommu.c:1137



More information about the cvs-src mailing list