[Skiboot] skiboot v6.0.18 released!

Stewart Smith stewart at linux.ibm.com
Wed Mar 6 17:53:14 AEDT 2019


skiboot 6.0.18 was released on Wednesday March 6th, 2019. It replaces
skiboot-6.0.17 as the current stable release in the 6.0.x series.

It is recommended that 6.0.18 be used instead of any previous 6.0.x
version due to the bug fixes it contains.

Over skiboot-6.0.17 we have several bug fixes, including important
ones for powercap, ipmi-hiomap and BMC communication driver.


* powercap: occ: Fix the powercapping range allowed for user

  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.


* ipmi-hiomap test case enhancements/fixes.

* libflash/ipmi-hiomap: Enforce message size for empty response

  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.

* libflash/ipmi-hiomap: Remove unused close handling

  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

* libflash/ipmi-hiomap: Overhaul event handling

  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.

  Regardless, there were other correctness and efficiency problems
  with the handling strategy:

  * Ack-able event state was not restored in the face of errors in
    the process of re-establishing protocol state

  * It forced needless window restoration with respect to the
    context in which ipmi_hiomap_handle_events() was called.

    redundant with the overhauled error handling introduced in the
    previous patch

  Fix all of the above issues and add comments to explain the event
  handling flow.

  Tests for correctness follow later in the series.

* libflash/ipmi-hiomap: Overhaul error handling

  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

  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.

  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.

* libflash/ipmi-hiomap: Fix leak of msg in callback

BMC communication

* core/ipmi: Add ipmi sync messages to top of the list

  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.

* hw/bt: Introduce separate list for synchronous messages

  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

  bt_add_ipmi_msg_head() adds message to top of the list. If bt
  message list is not empty then:

     * 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

     * else we endup starting message timer without actually sending
       message to BMC.. which is not correct.

  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.

  Finally this patch introduces new variable (inflight_bt_msg) to
  track inflight message. This will point to current inflight message.

* hw/bt: Fix message retry handler

  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.

  This patch fixes above issue.

* ipmi/power: Fix system reboot issue

  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.

  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.

  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.

* hw/bt: Add backend interface to disable ipmi message retry option

  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.

  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.

  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.

  This is short term fix. Long term solution is to convert all
  synchronous messages to asynhrounous one.


* hw/phb3/naples: Disable D-states

  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.

  This disables D-states changing for devices on root buses on Naples
  by installing a config space access filter (copied from PHB4).

Stewart Smith
OPAL Architect, IBM.

More information about the Skiboot mailing list