Re: sbp_targ errors with windows initiators

Sean Bruno <[email protected]>
Newsgroups gmane.os.freebsd.devel.firewire
Message-ID <[email protected]>
> Allrighty, I seem to have found my issue(I can't believe that it's 
> only affecting sbp_targ however).
>
> It seems that fwohci_intr_body() invoked from the interrupt handler at 
> fwohci_pci.c::fwohci_pci_attach() was being set with INTR_MPSAFE.  It 
> definitely was not MPSAFE and needed Giant locked before it could 
> start another interrupt.  Strange that this hasn't been seen in the wild.
>
> small diff attached:
> [sbruno@desdemona 
> ~/work/branches/miralink.FreeBSD.6/src/sys/dev/firewire]$ svn diff
> Index: fwohci_pci.c
> ===================================================================
> --- fwohci_pci.c        (revision 5496)
> +++ fwohci_pci.c        (working copy)
> @@ -336,7 +336,7 @@
>
>        err = bus_setup_intr(self, sc->irq_res,
> #if FWOHCI_TASKQUEUE
> -                       INTR_TYPE_NET | INTR_MPSAFE,
> +                       INTR_TYPE_NET,
> #else
>                        INTR_TYPE_NET,
> #endif
>
>
This failed after a few more iterations in the same way.  I enabled 
"OHCI_DEBUG" so I can see what events are being processed in 
fwohci_intr_body().

It looks like the following is the first event that is seen:
fwohci0: INTERRUPT < CYC_64SECOND CYC_START BUS_RESET DMA_PRRQ > 
0x00320010, 0x81430133

The DMA_PRRQ seems to cause the firewire layer to end up calling 
sbp_targ_recv().  The next event to occur is:
fwohci0: INTERRUPT < CYC_LOST CYC_START SID DMA_PRRQ > 0x00510010, 
0x81010133

This causes us to properly probe/explore the firewire bus and setup the 
node ids.  Unfortuneatly, the first event causes an sbp_targ failure as 
it is not processed correctly:
fwohci0: INTERRUPT < CYC_64SECOND CYC_START BUS_RESET DMA_PRRQ > 
0x00320010, 0x81430133
fwohci0: BUS reset
sbp_targ_recv: cannot resolve nodeid=0
sbp_targ_recv: rtcode = 6 lo == 0x0
fwohci0: INTERRUPT < CYC_LOST CYC_START SID DMA_PRRQ > 0x00510010, 
0x81010133
fwohci0: node_id=0xc800ffc1, gen=4, CYCLEMASTER mode
firewire0: 2 nodes, maxhop <= 1, cable IRM = 1 (me)
firewire0: bus manager 1 (me)

I guess that the BUS_RESET OHCI event needs to do something different 
that I don't fully understand.  Any ideas?

-- 
Sean Bruno
MiraLink Corporation
6015 NE 80th Ave, Ste 100
Portland, OR 97218
Phone 503-621-5143
Fax 503-621-5199

_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-firewire
To unsubscribe, send any mail to "[email protected]"
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.