Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 29 Jun 2007 13:08:47 +0100
From:      Doug Rabson <dfr@rabson.org>
To:        Hidetoshi Shimokawa <simokawa@FreeBSD.ORG>
Cc:        freebsd-firewire@FreeBSD.ORG
Subject:   Re: [CFT] MPSAFE firewire
Message-ID:  <EB9CAB3B-FD9E-4687-99E6-721023534696@rabson.org>
In-Reply-To: <626eb4530706290430we45e352xf27592d7eac99cf8@mail.gmail.com>
References:  <626eb4530706060746u44226cfajcedb3e169996a51a@mail.gmail.com> <200706291024.56591.dfr@rabson.org> <626eb4530706290430we45e352xf27592d7eac99cf8@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Thanks for clarifying, it makes sense to me now. I guess this also  
covers the fragment reassembly code in if_fwsubr.c. Perhaps a comment  
should be added to make it clear that the caller of firewire_input is  
responsible for serialising access.

On 29 Jun 2007, at 12:30, Hidetoshi Shimokawa wrote:

> All the access to the RX DMA is dispatched from a taskqueue,
> so that they are serialized and they don't need a lock.
> As far as I understand, the code paths you concern are running
> in a single thread(fw_taskq).
>
> Correct me, if I'm wrong.
>
> FWXFERQ_HANDLER is currently used only by fwe and fwip.
> For DV streams, since the queue is access by userland threads,
> we need a lock.
>
> On 6/29/07, Doug Rabson <dfr@rabson.org> wrote:
>>
>>
>> On Wednesday 06 June 2007, Hidetoshi Shimokawa wrote:
>>
>> > I have just committed MPSAFE(Giant free) firewire driver to - 
>> current.
>>
>> > If you have any problem, please let me know.
>>
>>
>>
>> I've been looking through the code and I have a few questions.
>>
>>
>>
>> In fwohci_rbuf_update(), you only call FW_GLOCK() if the  
>> FWXFERQ_HANDLER
>> flag is zero. Doesn't this cause problems for the if_fwip driver  
>> (the only
>> one to set this flag)? As far as I can see, if this flag is set,  
>> there is no
>> mutex protection for any of the dma queues. Shouln't FW_GLOCK be used
>> always? Also, additional protection is needed in fwip_stream_input  
>> where it
>> manipulates the stvalid and stfree queues.
>>
>>
>>
>> I'm a bit confused about the async read path too. I'm looking at  
>> the code in
>> fwohci_arcv() and I can't see any mutex protection in this  
>> function while it
>> manipulates the buffers. Is this correct? I see some fossil use of  
>> splfw()
>> here which is why I ask. Following the input path back to the fwip  
>> driver
>> again, I can't see any mutex protection for the driver's unicast  
>> packet
>> input queues.
>>
>>
>>
>> The last possible problem I noticed reading through the code is  
>> that there
>> is no mutex protection of the fragmented packet reassembly queues in
>> firewire_input_fragment. Perhaps the fw_com structure should have  
>> a mutex
>> pointer in it which can be initialised to the if_fwip code's mutex  
>> and used
>> in this case.
>>
>>
>
>
> -- 
> /\ Hidetoshi Shimokawa
> \/  simokawa@FreeBSD.ORG




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?EB9CAB3B-FD9E-4687-99E6-721023534696>