kern/118093: firewire bus reset hogs CPU, causing data to be lost

Sean Bruno sbruno at miralink.com
Sat Dec 20 18:49:22 PST 2008


Dieter wrote:
> Here are the results of two more experiments:
>
> I tried to verify what spl the firewire code is at when calling
> printf(9) by adding the following block into fwohci.c just
> before one of the printfs.
>
> {
> #include <sys/types.h>
> #include <sys/systm.h>
>   intrmask_t debug_spl;  /* __uint32_t */
>   intrmask_t debug_spl_high;
>   intrmask_t debug_spl_tty;
>   intrmask_t debug_spl_fw;
>   intrmask_t debug_spl_0;
>   intrmask_t debug_spl_net;
>
>   debug_spl = splhigh();
>   debug_spl_high = spltty();
>   debug_spl_tty = splfw();
>   debug_spl_fw = splnet();
>   debug_spl_net = splhigh();
>   spl0();  /* void */
>   debug_spl_0 = splhigh();
>   splx(debug_spl);
>
>   printf("fwohci_intr_core(): spl = 0x%x\n splhigh=0x%x spltty=0x%x splfw=0x%x splnet=0x%x spl0=0x%x\n",
>          debug_spl, debug_spl_high, debug_spl_tty, debug_spl_fw, debug_spl_net, debug_spl_0);
> }
>
> But my results appear bogus:
>
> fwohci_intr_core(): spl = 0x0
>  splhigh=0x0 spltty=0x0 splfw=0x0 splnet=0x0 spl0=0x0
>
> I have examined my code and the spl(9) man page several times
> but I can't find what is wrong.  Any clues?
>
> --------------------------------------------------------
>
> To isolate the effects of printf(9) from the firewire bus reset,
> I picked a trivial system call (chown(2)) and added some printf(9)
> calls.
>
> Calling chown several times and monitoring with systat -vmstat gives:
>   1098 interrupts on the console IRQ
>   93.1%Sys   6.7%Intr  0.2%User  0.0%Nice  0.0%Idle
>
> This did NOT interfere with Ethernet.
>
> So printf(9) interferes with Ethernet when called from the
> firewire driver, but not when called from a vanilla system call.
>
>   
I setup my system to execute a bus reset every 1 second, simultaneously, 
I started copying a large
file onto the system see if anything would happen.

I saw no change to copy speed reported by SCP during the entire 
transaction.  I also see no change
to the system load while this is occurring.

This seems indicative of "something else" going on.
> --------------------------------------------------------
>
> sio0: <16550A-compatible COM port> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
> sio0: type 16550A, console
> sio0: [FILTER]
>
> What does [FILTER] mean?  I don't see an explanation on the sio man page.
>   

Did you mean to ask a different list?  Because I have no idea.  :)


More information about the freebsd-firewire mailing list