From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11708 invoked by alias); 27 Jun 2013 14:20:41 -0000 Mailing-List: contact ecos-devel-help@ecos.sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: ecos-devel-owner@ecos.sourceware.org Received: (qmail 11583 invoked by uid 89); 27 Jun 2013 14:20:40 -0000 X-Spam-SWARE-Status: No, score=2.5 required=5.0 tests=AWL,BAYES_00,BOTNET,KHOP_THREADED,RP_MATCHES_RCVD,SPF_HELO_PASS,TW_PL autolearn=no version=3.3.1 Received: from ip2.televic.com (HELO ip2.televic.com) (81.82.194.222) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Thu, 27 Jun 2013 14:20:39 +0000 Received: from SRV-VS06.TELEVIC.COM ([10.0.0.46]) by SRV-VS06.TELEVIC.COM ([10.0.0.46]) with mapi; Thu, 27 Jun 2013 16:20:36 +0200 From: =?iso-8859-1?Q?Lambrecht_J=FCrgen?= To: Bernd Edlinger CC: "ecos-devel@ecos.sourceware.org" Date: Thu, 27 Jun 2013 14:20:00 -0000 Subject: Re: RFC: bsd_tcpip patch on synch.c Message-ID: <51CC4A34.1070107@televic.com> References: <51CC0714.6040805@televic.com>, In-Reply-To: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/17.0 Thunderbird/17.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-SW-Source: 2013-06/txt/msg00004.txt.bz2 On 06/27/2013 02:51 PM, Bernd Edlinger wrote: > Hi J=FCrgen, > > > the variant with cyg_mutex_trylock is like busy waiting, and > should be reverted. But I agree that the > "while (!cyg_mutex_lock()) continue;" > construct is somehow really bad style. > > I do not think that cyg_mutex_lock can ever return false, > unless the spl_mutex is completely invalid. After digging deep, I found that our problem was caused by something=20 else, so this fix is not needed, but we kept it because we did not like=20 that construct as you also point out. > > If you really expect cyg_mutex_lock to ever return false, > then the right thing to do would be to assert(false) > and print a callstack or directly enter the debugger. No problem anymore.. But is there a better way to loop over the mutex lock? Kind regards, J=FCrgen > > > Regards > Bernd Edlinger. > > >> From: J.Lambrecht@TELEVIC.com >> To: ecos-devel@ecos.sourceware.org >> CC: bernd.edlinger@hotmail.de >> Date: Thu, 27 Jun 2013 11:34:12 +0200 >> Subject: RFC: bsd_tcpip patch on synch.c >> >> Hello, >> >> The patch below we already use since 2009. But I did not code the patch, >> so I do not know what problem it solves. Here are our CVS logs about the >> patch: >> >> - To avoid deadlock on mutex 'splx_mutex', I changed 'cyg_mutex_lock' >> into 'cyg_mutex_trylock'. >> - Add 'trylock' and 'cyg_thread_delay' to spl_any() in order to handle >> the deadlock issue on the mutex 'splx_mutex' >> >> I am applying the patches from Bernd Edlinger >> (http://bugs.ecos.sourceware.org/show_bug.cgi?id=3D1001656)(to fix an >> anoying problem "packet loss every 20 minutes when ARP timeout expires" >> and to add raw packets). >> And I wonder if this patch (below) is still valid? >> ------------------------------------------------------------------------= -------- >> Index: net/bsd_tcpip/current/src/ecos/synch.c >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >> RCS file: /cvs/ecos/ecos-opt/net/net/bsd_tcpip/current/src/ecos/synch.c,v >> retrieving revision 1.3 >> diff -u -5 -p -r1.3 synch.c >> --- net/bsd_tcpip/current/src/ecos/synch.c 29 Jan 2009 17:49:56 >> -0000 1.3 >> +++ net/bsd_tcpip/current/src/ecos/synch.c 27 Jun 2013 09:12:54 -00= 00 >> @@ -115,12 +115,14 @@ static volatile cyg_handle_t splx_thread >> static inline cyg_uint32 >> spl_any( cyg_uint32 which ) >> { >> cyg_uint32 old_spl =3D spl_state; >> if ( cyg_thread_self() !=3D splx_thread ) { >> - while ( !cyg_mutex_lock( &splx_mutex ) ) >> + while ( !cyg_mutex_trylock( &splx_mutex ) ) { >> + cyg_thread_delay(1); >> continue; >> + } >> old_spl =3D 0; // Free when we unlock this context >> CYG_ASSERT( 0 =3D=3D splx_thread, "Thread still owned" ); >> CYG_ASSERT( 0 =3D=3D spl_state, "spl still set" ); >> splx_thread =3D cyg_thread_self(); >> } >> ------------------------------------------------------------------------= -------- >> Kind regards, >> J=FCrgen >> >> --=20 >> J=FCrgen Lambrecht >> R&D Associate >> Mobile: +32 499 644 531 >> Tel: +32 (0)51 303045 Fax: +32 (0)51 310670 >> http://www.televic-rail.com >> Televic Rail NV - Leo Bekaertlaan 1 - 8870 Izegem - Belgium >> Company number 0825.539.581 - RPR Kortrijk=20=09=09=20=09=20=20=20=09=09 --=20 J=FCrgen Lambrecht R&D Associate Mobile: +32 499 644 531 Tel: +32 (0)51 303045 Fax: +32 (0)51 310670 http://www.televic-rail.com Televic Rail NV - Leo Bekaertlaan 1 - 8870 Izegem - Belgium Company number 0825.539.581 - RPR Kortrijk