New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
bug: sidecar_front_io::transceivers::wait_and_check_i2c
is not checking all ports
#1754
Comments
I've reproduced this on
With the patch from #1756 the task no longer panics. |
This bug became immediately apparent when testing in a context where the Sidecar has a Scrimlet and transceivers in the out of bounds ports (8..15, 24..31). All testing of #1588 was done on a Sidecar setup where this was not the case. So for the hardware-in-loop future, a setup where we have at least one transceiver in each range of 0..7, 8..15, 16..23, 24..32 can help expose if there was a bug introduced by the various logical-physical mappings at play here. |
The alternative to the Sidecar/Scrimlet setup would just a Sidecar connected to a host with |
On the morning of 2024-04-18 @Nieuwejaar was updating the dogfood rack and @citrus-it noticed no transceivers were showing up:
Andy then noticed the
transceivers
task repeatedly crashing on the Sidecar in question:The panic: https://github.com/oxidecomputer/hubris/blob/master/drv/sidecar-front-io/src/transceivers.rs#L1237
This is because we are erroneously only reading 8 ports of status bytes instead of all 16.
So, why did this not happen before #1588? Previously, each port's status information was in a more condensed format and we could fit 2 ports of status per each byte. When that changed to be 1 port per byte, the code to handle status was never updated. #1588 then changed that to be one byte per port without updating the
BusyAndPortStatus
struct to read 16 status bytes instead of 8.The text was updated successfully, but these errors were encountered: