You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Setting the transient pref. to current active slot clears it.
Given the current API for setting the transient boot preference there is
an implementation choice. While setting the transient selection to the
alternate image (currently non-active) is the common use case, we also
need to define what happens when the transient preference is specified
to be the currently active RoT Hubris image.
The simple case is that setting transient to active will clear the
transient selection. That is the choice this PR makes.
The other case, setting an actual transient preference to the active
gives rise to some more complex behavior that is just annoying.
Assume that A is active, B is the pending persistent preference, and A
is also the transient preference.
On the first reset, the ROM will promote the CFPA scratch page to
active, thus making B the persistent preference. However, Bootleby will
use the transient preference of A to select the active image. The RoT
will then be running Hubris image A. Bootleby has cleared the transient
selection.
On the second reset, there is no transient selection or pending
persistent. Bootleby will select Hubris image B.
These scenarios have been tested and analyzed and there is no motivation
found for enabling this sequence. If, after merging this PR, it is found
that we do want to enable this sequence of two resets in a row running
different images, we can change the API to an enum of `Select(SlotId)`
or `ClearSelection`.
---
Hubris issue 2093 was found in testing where setting the persistent
preference to different values in succession leads to the inability to
clear a pending persistent boot preference. This may be needed to
recover from a previous failed/abandoned RoT Hubris update where one
wants to avoid additional reset operations.
This is a corner case with a workaround, but it is also against the
intent of the API.
0 commit comments