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>