| <!DOCTYPE html> |
| |
| <html lang="en" data-content_root="../"> |
| <head> |
| <meta charset="utf-8" /> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> |
| |
| <title>skiboot-6.0.18 — skiboot d365a01 |
| documentation</title> |
| <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=fa44fd50" /> |
| <link rel="stylesheet" type="text/css" href="../_static/classic.css?v=514cf933" /> |
| |
| <script src="../_static/documentation_options.js?v=e1fecbe9"></script> |
| <script src="../_static/doctools.js?v=888ff710"></script> |
| <script src="../_static/sphinx_highlight.js?v=dc90522c"></script> |
| |
| <link rel="index" title="Index" href="../genindex.html" /> |
| <link rel="search" title="Search" href="../search.html" /> |
| <link rel="next" title="skiboot-6.0.19" href="skiboot-6.0.19.html" /> |
| <link rel="prev" title="skiboot-6.0.17" href="skiboot-6.0.17.html" /> |
| </head><body> |
| <div class="related" role="navigation" aria-label="related navigation"> |
| <h3>Navigation</h3> |
| <ul> |
| <li class="right" style="margin-right: 10px"> |
| <a href="../genindex.html" title="General Index" |
| accesskey="I">index</a></li> |
| <li class="right" > |
| <a href="skiboot-6.0.19.html" title="skiboot-6.0.19" |
| accesskey="N">next</a> |</li> |
| <li class="right" > |
| <a href="skiboot-6.0.17.html" title="skiboot-6.0.17" |
| accesskey="P">previous</a> |</li> |
| <li class="nav-item nav-item-0"><a href="../index.html">skiboot d365a01 |
| documentation</a> »</li> |
| <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Release Notes</a> »</li> |
| <li class="nav-item nav-item-this"><a href="">skiboot-6.0.18</a></li> |
| </ul> |
| </div> |
| |
| <div class="document"> |
| <div class="documentwrapper"> |
| <div class="bodywrapper"> |
| <div class="body" role="main"> |
| |
| <section id="skiboot-6-0-18"> |
| <span id="id1"></span><h1>skiboot-6.0.18<a class="headerlink" href="#skiboot-6-0-18" title="Link to this heading">¶</a></h1> |
| <p>skiboot 6.0.18 was released on Wednesday March 6th, 2019. It replaces |
| <a class="reference internal" href="skiboot-6.0.17.html#skiboot-6-0-17"><span class="std std-ref">skiboot-6.0.17</span></a> as the current stable release in the 6.0.x series.</p> |
| <p>It is recommended that 6.0.18 be used instead of any previous 6.0.x version |
| due to the bug fixes it contains.</p> |
| <p>Over <a class="reference internal" href="skiboot-6.0.17.html#skiboot-6-0-17"><span class="std std-ref">skiboot-6.0.17</span></a> we have several bug fixes, including important ones |
| for powercap, ipmi-hiomap and BMC communication driver.</p> |
| <section id="powercap"> |
| <h2>powercap<a class="headerlink" href="#powercap" title="Link to this heading">¶</a></h2> |
| <ul> |
| <li><p>powercap: occ: Fix the powercapping range allowed for user</p> |
| <p>OCC provides two limits for minimum powercap. One being hard powercap |
| minimum which is guaranteed by OCC and the other one is a soft |
| powercap minimum which is lesser than hard-min and may or may not be |
| asserted due to various power-thermal reasons. So to allow the users |
| to access the entire powercap range, this patch exports soft powercap |
| minimum as the “powercap-min” DT property. And it also adds a new |
| DT property called “powercap-hard-min” to export the hard-min powercap |
| limit.</p> |
| </li> |
| </ul> |
| </section> |
| <section id="ipmi-hiomap"> |
| <h2>IPMI-HIOMAP<a class="headerlink" href="#ipmi-hiomap" title="Link to this heading">¶</a></h2> |
| <ul> |
| <li><p>ipmi-hiomap test case enhancements/fixes.</p></li> |
| <li><p>libflash/ipmi-hiomap: Enforce message size for empty response</p> |
| <p>The protocol defines the response to the associated messages as empty |
| except for the command ID and sequence fields. If the BMC is returning |
| extra data consider the message malformed.</p> |
| </li> |
| <li><p>libflash/ipmi-hiomap: Remove unused close handling</p> |
| <p>Issuing a HIOMAP_C_CLOSE is not required by the protocol specification, |
| rather a close can be implicit in a subsequent |
| CREATE_{READ,WRITE}_WINDOW request. The implicit close provides an |
| opportunity to reduce LPC traffic and the implementation takes up that |
| optimisation, so remove the case from the IPMI callback handler.</p> |
| </li> |
| <li><p>libflash/ipmi-hiomap: Overhaul event handling</p> |
| <p>Reworking the event handling was inspired by a bug report by Vasant |
| where the host would get wedged on multiple flash access attempts in the |
| face of a persistent error state on the BMC-side. The cause of this bug |
| was the early-exit based on ctx->update, which erronously assumed that |
| all events had been completely handled in prior calls to |
| ipmi_hiomap_handle_events(). This is not true if e.g. |
| HIOMAP_E_DAEMON_READY is clear in the prior calls.</p> |
| <p>Regardless, there were other correctness and efficiency problems with |
| the handling strategy:</p> |
| <ul class="simple"> |
| <li><p>Ack-able event state was not restored in the face of errors in the |
| process of re-establishing protocol state</p></li> |
| <li><p>It forced needless window restoration with respect to the context in |
| which ipmi_hiomap_handle_events() was called.</p></li> |
| <li><p>Tests for HIOMAP_E_DAEMON_READY and HIOMAP_E_FLASH_LOST were redundant |
| with the overhauled error handling introduced in the previous patch</p></li> |
| </ul> |
| <p>Fix all of the above issues and add comments to explain the event |
| handling flow.</p> |
| <p>Tests for correctness follow later in the series.</p> |
| </li> |
| <li><p>libflash/ipmi-hiomap: Overhaul error handling</p> |
| <p>The aim is to improve the robustness with respect to absence of the |
| BMC-side daemon. The current error handling roughly mirrors what was |
| done for the mailbox implementation, but there’s room for improvement.</p> |
| <p>Errors are split into two classes, those that affect the transport state |
| and those that affect the window validity. From here, we push the |
| transport state error checks right to the bottom of the stack, to ensure |
| the link is known to be in a good state before any message is sent. |
| Window validity tests remain as they were in the hiomap_window_move() |
| and ipmi_hiomap_read() functions. Validity tests are not necessary in |
| the write and erase paths as we will receive an error response from the |
| BMC when performing a dirty or flush on an invalid window.</p> |
| <p>Recovery also remains as it was, done on entry to the blocklevel |
| callbacks. If an error state is encountered in the middle of an |
| operation no attempt is made to recover it on the spot, instead the |
| error is returned up the stack and the caller can choose how it wishes |
| to respond.</p> |
| </li> |
| <li><p>libflash/ipmi-hiomap: Fix leak of msg in callback</p></li> |
| </ul> |
| </section> |
| <section id="bmc-communication"> |
| <h2>BMC communication<a class="headerlink" href="#bmc-communication" title="Link to this heading">¶</a></h2> |
| <ul> |
| <li><p>core/ipmi: Add ipmi sync messages to top of the list</p> |
| <p>In ipmi_queue_msg_sync() path OPAL will wait until it gets response from |
| BMC. If we do not get response ontime we may endup in kernel hardlockups. |
| Hence lets add sync messages to top of the queue. This will reduces the |
| chance of hardlockups.</p> |
| </li> |
| <li><p>hw/bt: Introduce separate list for synchronous messages</p> |
| <p>BT send logic always sends top of bt message list to BMC. Once BMC reads the |
| message, it clears the interrupt and bt_idle() becomes true.</p> |
| <p>bt_add_ipmi_msg_head() adds message to top of the list. If bt message list |
| is not empty then:</p> |
| <blockquote> |
| <div><ul class="simple"> |
| <li><p>if bt_idle() is true then we will endup sending message to BMC before |
| getting response from BMC for inflight message. Looks like on some |
| BMC implementation this results in message timeout.</p></li> |
| <li><p>else we endup starting message timer without actually sending message |
| to BMC.. which is not correct.</p></li> |
| </ul> |
| </div></blockquote> |
| <p>This patch introduces separate list to track synchronous messages. |
| bt_add_ipmi_msg_head() will add messages to tail of this new list. We |
| will always process this queue before processing normal queue.</p> |
| <p>Finally this patch introduces new variable (inflight_bt_msg) to track |
| inflight message. This will point to current inflight message.</p> |
| </li> |
| <li><p>hw/bt: Fix message retry handler</p> |
| <p>In some corner cases (like BMC reboot), bt_send_and_unlock() starts |
| message timer, but won’t send message to BMC as driver is not free to |
| send message. bt_expire_old_msg() function enables H2B interrupt without |
| actually sending message.</p> |
| <p>This patch fixes above issue.</p> |
| </li> |
| <li><p>ipmi/power: Fix system reboot issue</p> |
| <p>Kernel makes reboot/shudown OPAL call for reboot/shutdown. Once kernel |
| gets response from OPAL it runs opal_poll_events() until firmware |
| handles the request.</p> |
| <p>On BMC based system, OPAL makes IPMI call (IPMI_CHASSIS_CONTROL) to |
| initiate system reboot/shutdown. At present OPAL queues IPMI messages |
| and return SUCESS to Host. If BMC is not ready to accept command (like |
| BMC reboot), then these message will fail. We have to manually |
| reboot/shutdown the system using BMC interface.</p> |
| <p>This patch adds logic to validate message return value. If message failed, |
| then it will resend the message. At some stage BMC will be ready to accept |
| message and handles IPMI message.</p> |
| </li> |
| <li><p>hw/bt: Add backend interface to disable ipmi message retry option</p> |
| <p>During boot OPAL makes IPMI_GET_BT_CAPS call to BMC to get BT interface |
| capabilities which includes IPMI message max resend count, message |
| timeout, etc,. Most of the time OPAL gets response from BMC within |
| specified timeout. In some corner cases (like mboxd daemon reset in BMC, |
| BMC reboot, etc) OPAL may not get response within timeout period. In |
| such scenarios, OPAL resends message until max resend count reaches.</p> |
| <p>OPAL uses synchronous IPMI message (ipmi_queue_msg_sync()) for few |
| operations like flash read, write, etc. Thread will wait in OPAL until |
| it gets response from BMC. In some corner cases like BMC reboot, thread |
| may wait in OPAL for long time (more than 20 seconds) and results in |
| kernel hardlockup.</p> |
| <p>This patch introduces new interface to disable message resend option. We |
| will disable message resend option for synchrous message. This will |
| greatly reduces kernel hardlock up issues.</p> |
| <p>This is short term fix. Long term solution is to convert all synchronous |
| messages to asynhrounous one.</p> |
| </li> |
| </ul> |
| </section> |
| <section id="phb3"> |
| <h2>PHB3<a class="headerlink" href="#phb3" title="Link to this heading">¶</a></h2> |
| <ul> |
| <li><p>hw/phb3/naples: Disable D-states</p> |
| <p>Putting “Mellanox Technologies MT27700 Family [ConnectX-4] [15b3:1013]” |
| (more precisely, the second of 2 its PCI functions, no matter in what |
| order) into the D3 state causes EEH with the “PCT timeout” error. |
| This has been noticed on garrison machines only and firestones do not |
| seem to have this issue.</p> |
| <p>This disables D-states changing for devices on root buses on Naples by |
| installing a config space access filter (copied from PHB4).</p> |
| </li> |
| </ul> |
| </section> |
| </section> |
| |
| |
| <div class="clearer"></div> |
| </div> |
| </div> |
| </div> |
| <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> |
| <div class="sphinxsidebarwrapper"> |
| <div> |
| <h3><a href="../index.html">Table of Contents</a></h3> |
| <ul> |
| <li><a class="reference internal" href="#">skiboot-6.0.18</a><ul> |
| <li><a class="reference internal" href="#powercap">powercap</a></li> |
| <li><a class="reference internal" href="#ipmi-hiomap">IPMI-HIOMAP</a></li> |
| <li><a class="reference internal" href="#bmc-communication">BMC communication</a></li> |
| <li><a class="reference internal" href="#phb3">PHB3</a></li> |
| </ul> |
| </li> |
| </ul> |
| |
| </div> |
| <div> |
| <h4>Previous topic</h4> |
| <p class="topless"><a href="skiboot-6.0.17.html" |
| title="previous chapter">skiboot-6.0.17</a></p> |
| </div> |
| <div> |
| <h4>Next topic</h4> |
| <p class="topless"><a href="skiboot-6.0.19.html" |
| title="next chapter">skiboot-6.0.19</a></p> |
| </div> |
| <div role="note" aria-label="source link"> |
| <h3>This Page</h3> |
| <ul class="this-page-menu"> |
| <li><a href="../_sources/release-notes/skiboot-6.0.18.rst.txt" |
| rel="nofollow">Show Source</a></li> |
| </ul> |
| </div> |
| <div id="searchbox" style="display: none" role="search"> |
| <h3 id="searchlabel">Quick search</h3> |
| <div class="searchformwrapper"> |
| <form class="search" action="../search.html" method="get"> |
| <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/> |
| <input type="submit" value="Go" /> |
| </form> |
| </div> |
| </div> |
| <script>document.getElementById('searchbox').style.display = "block"</script> |
| </div> |
| </div> |
| <div class="clearer"></div> |
| </div> |
| <div class="related" role="navigation" aria-label="related navigation"> |
| <h3>Navigation</h3> |
| <ul> |
| <li class="right" style="margin-right: 10px"> |
| <a href="../genindex.html" title="General Index" |
| >index</a></li> |
| <li class="right" > |
| <a href="skiboot-6.0.19.html" title="skiboot-6.0.19" |
| >next</a> |</li> |
| <li class="right" > |
| <a href="skiboot-6.0.17.html" title="skiboot-6.0.17" |
| >previous</a> |</li> |
| <li class="nav-item nav-item-0"><a href="../index.html">skiboot d365a01 |
| documentation</a> »</li> |
| <li class="nav-item nav-item-1"><a href="index.html" >Release Notes</a> »</li> |
| <li class="nav-item nav-item-this"><a href="">skiboot-6.0.18</a></li> |
| </ul> |
| </div> |
| <div class="footer" role="contentinfo"> |
| © Copyright 2016-2017, IBM, others. |
| Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.2.6. |
| </div> |
| </body> |
| </html> |