Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 16 Jun 2008 19:45:12 -0700
From:      Sean Bruno <sbruno@miralink.com>
To:        Hidetoshi Shimokawa <simokawa@FreeBSD.ORG>
Cc:        freebsd-firewire@freebsd.org
Subject:   Re: sbp_targ errors with windows initiators
Message-ID:  <48572538.6040000@miralink.com>
In-Reply-To: <4852F55E.6000208@miralink.com>
References:  <4846F3F9.1080302@miralink.com>	<48482800.8000501@miralink.com>		<484EEF6B.7010407@miralink.com>	<626eb4530806102213w3beda7a3u89efffd01d5e254b@mail.gmail.com>	<4850BAA6.30501@miralink.com>	<48520367.7090807@miralink.com> <4852F55E.6000208@miralink.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Sean Bruno wrote:
> Sean Bruno wrote:
>> Sean Bruno wrote:
>>> Hidetoshi Shimokawa wrote:
>>>> It could be that windows sends requests before FreeBSD finish bus 
>>>> probing..
>>>>   
>> It seems that by adjusting the callout timer in 
>> firewire.c:fw_sidrcv() from 1/4 a hz to 1/10 a hz:
>>        callout_reset(&fc->busprobe_callout, hz/10,
>>                        (void *)fw_bus_probe, (void *)fc);
>>
>>
>> I've been able to get a reliable detection of the sbp_targ by a 
>> FreeBSD initiator.  Is this a correct way of fixing my issue?
>>
>>
> Well, I guess I was too hopeful.  This did not work.
>
> I have identified the failure case, but I cannot see what the solution 
> is.
>
> You are correct, the Windows and FreeBSD inititator are sending 
> requests to the target prior to sbp_targ even beginning it's bus probe 
> activity.
>
> sbp_targ finishes it's "sbp_targ_post_busreset" callback, then it 
> starts processing messages based on the bind addr callback for 
> sbp_targ_recv().
>
> I don't as of yet know where the issue lies?  Can you give me some 
> guidance?
>
>
>
>
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


Sean




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?48572538.6040000>