<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        color:black;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        color:black;}
span.EmailStyle18
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;
        color:black;}
span.EmailStyle21
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:648171470;
        mso-list-type:hybrid;
        mso-list-template-ids:1833494488 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level2
        {mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1
        {mso-list-id:2075808445;
        mso-list-type:hybrid;
        mso-list-template-ids:1833494488 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l1:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level2
        {mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body bgcolor=white lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='color:#1F497D'>BTW, is there any downside to enabling strict order mutex?  This will fix our issue but I’m not sure what other ramifications it may have.  We use a handful of semaphores (mostly for hardware protection) but I noticed that RTEMS creates a lot (mostly LBI*).<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><div><p class=MsoNormal><span style='color:#1F497D'>Kevin Kirspel<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>Senior Research Engineer<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>Opti Medical<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>235 Hembree Park Drive<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>Roswell GA 30076<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>Tel: (770)-510-4444 ext. 81642<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>Direct: (770)-688-1642<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>Fax: (770)-510-4445<o:p></o:p></span></p></div><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext'> Joel Sherrill [mailto:joel.sherrill@oarcorp.com] <br><b>Sent:</b> Tuesday, August 14, 2012 5:47 PM<br><b>To:</b> Kirspel, Kevin<br><b>Cc:</b> rtems-users@rtems.org<br><b>Subject:</b> Re: Semaphore Issue<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>On 08/14/2012 04:15 PM, Kirspel, Kevin wrote: <o:p></o:p></p><p class=MsoNormal>I have a situation with semaphores that I thought someone may have a quick explanation for.  The scenario consists of 2 semaphore/mutexes and priority inheritance.  The first semaphore is created by the application (S1) and is of type: RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_INHERIT_PRIORITY.  The second (S2) is the allocator lock mutex that is used by malloc().  My scenario is as follows.<o:p></o:p></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif"'><br><br><o:p></o:p></span></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal>Task 1 has priority 36.  Task 2 has priority 34.<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'>       </span></span><![endif]>Task 1 obtains S1.<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'>       </span></span><![endif]>Task 1 obtains S2<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span style='mso-list:Ignore'>3.<span style='font:7.0pt "Times New Roman"'>       </span></span><![endif]>Task 2 preempts Task 1.<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span style='mso-list:Ignore'>4.<span style='font:7.0pt "Times New Roman"'>       </span></span><![endif]>Task 2 tries to obtain S2 but can’t get it.  Task 1 priority is changed to 34.<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span style='mso-list:Ignore'>5.<span style='font:7.0pt "Times New Roman"'>       </span></span><![endif]>Task 1 begins running again.  Task 1 releases S2.  Task 1 priority is not changed back to 36 and continues to run.<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span style='mso-list:Ignore'>6.<span style='font:7.0pt "Times New Roman"'>       </span></span><![endif]>Task 1 continues operating for 3 more seconds.<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span style='mso-list:Ignore'>7.<span style='font:7.0pt "Times New Roman"'>       </span></span><![endif]>Task 1 releases S1.  Task 1 priority is now changed back to 36.<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span style='mso-list:Ignore'>8.<span style='font:7.0pt "Times New Roman"'>       </span></span><![endif]>Task 2 now preempts Task 1 and begins operating again.<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif"'>What RTEMS version is this?<br><br>This sounds like the priority inheritance release algorithm described here:<br><br><a href="http://rtems.org/onlinedocs/doc-current/share/rtems/html/c_user/c_user_208.html#Semaphore-Manager-Priority-Inheritance">http://rtems.org/onlinedocs/doc-current/share/rtems/html/c_user/c_user_208.html#Semaphore-Manager-Priority-Inheritance</a><br><br>Priority inherited is not lowered until ALL mutexes are released.<br><br>There is an optional algorithm (don't recall if it is turned on by default) that<br>is guarded by the __RTEMS_STRICT_ORDER_MUTEX__ conditional.<br>configure with ENABLE_STRICT_ORDER_MUTEX=1 on the command line to<br>try this algorithm which should properly step down as each mutex is released.<br><br><br><o:p></o:p></span></p><p class=MsoNormal>Task 1 is the main user of Semaphore S1.  During normal operation no other task will try to obtain it.  It is there to protect against some custom shell commands that may access the same data.  Semaphore S2 is widely used since it protects memory allocation.  If obtaining/releasing S1 is removed from the scenario above then everything works OK.<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l1 level1 lfo4'><![if !supportLists]><span style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'>       </span></span><![endif]>Task 1 obtains S2<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l1 level1 lfo4'><![if !supportLists]><span style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'>       </span></span><![endif]>Task 2 preempts Task 1.<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l1 level1 lfo4'><![if !supportLists]><span style='mso-list:Ignore'>3.<span style='font:7.0pt "Times New Roman"'>       </span></span><![endif]>Task 2 tries to obtain S2 but can’t get it.  Task 1 priority is changed to 34.<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l1 level1 lfo4'><![if !supportLists]><span style='mso-list:Ignore'>4.<span style='font:7.0pt "Times New Roman"'>       </span></span><![endif]>Task 1 begins running again.  Task 1 releases S2.  Task 1 priority is now changed back to 36.<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l1 level1 lfo4'><![if !supportLists]><span style='mso-list:Ignore'>5.<span style='font:7.0pt "Times New Roman"'>       </span></span><![endif]>Task 2 now preempts Task 1 and begins operating again.<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l1 level1 lfo4'><![if !supportLists]><span style='mso-list:Ignore'>6.<span style='font:7.0pt "Times New Roman"'>       </span></span><![endif]>Task 2 enters wait condition.<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l1 level1 lfo4'><![if !supportLists]><span style='mso-list:Ignore'>7.<span style='font:7.0pt "Times New Roman"'>       </span></span><![endif]>Task 1 continues operating for 3 more seconds and then enters wait condition.<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal>I am going to try and duplicate this scenario using a small test program but I wanted to see if anyone had any ideas of what may be causing the issue.  I have a mixed RTEMS source base between versions 4.10 and 4.11.   I started with 4.10 and upgraded just enough to get USB support. <o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif"'>Any chance you want to pitch in and help resolve some issues on the TCP/IP side? <br>We are now up to the IPV4 loopback test and would LOVE to have help. :)<br><br><o:p></o:p></span></p><p class=MsoNormal>Kevin Kirspel<o:p></o:p></p><p class=MsoNormal>Senior Research Engineer<o:p></o:p></p><p class=MsoNormal>Opti Medical<o:p></o:p></p><p class=MsoNormal>235 Hembree Park Drive<o:p></o:p></p><p class=MsoNormal>Roswell GA 30076<o:p></o:p></p><p class=MsoNormal>Tel: (770)-510-4444 ext. 81642<o:p></o:p></p><p class=MsoNormal>Direct: (770)-688-1642<o:p></o:p></p><p class=MsoNormal>Fax: (770)-510-4445<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif"'><br><br><br><o:p></o:p></span></p><pre>-- <o:p></o:p></pre><pre>Joel Sherrill, Ph.D.             Director of Research&  Development<o:p></o:p></pre><pre><a href="mailto:joel.sherrill@OARcorp.com">joel.sherrill@OARcorp.com</a>        On-Line Applications Research<o:p></o:p></pre><pre>Ask me about RTEMS: a free RTOS  Huntsville AL 35805<o:p></o:p></pre><pre>    Support Available             (256) 722-9985<o:p></o:p></pre><pre><o:p> </o:p></pre></div></body></html>