amboar
In case it helps anyone else, I wrote a small tool that helps maintain and execute them:
https://github.com/amboar/checklists/
It's just a shell script wrapped around $EDITOR and git. The intent is to write checklists in the style of github-flavoured markdown. It has some tricks such as envsubst(1) interpolation and embedding little scripts whose execution is captured alongside the execution itself.
Here's an example checklist that's fairly well-worn (though is somewhat dated):
https://gist.githubusercontent.com/amboar/f85449aad09ba22219...
Where checklist entries are commands I just copy/paste them into a shell session. Usually this is in a tmux split with the checklist on one side with a shell on the other.
Could more of it be automated? Perhaps, though when some of the steps fail for various reasons, I find it's easier to recover or repair the situation if I have been invoking them myself sequentially. The embedded script support enables progressive automation where stability of the results is demonstrated over time.
The conclusion he drew was that there's less difference than you might expect between software development and "traditional" engineering disciplines and that it's reasonable to consider software engineering a real engineering discipline.
has worked well for me, even if the reflow behaviour itself is sometimes frustrating
> (11) The values of bytes that correspond to union members other than the one last stored into (6.2.6.1).
So it's a little more constrained in the ramifications, but the outcomes may still be surprising. It's a bit unfortunate that "UB" aliases to both "Undefined behavior" and "Unspecified behavior" given they have subtly different definitions.
From section 4 we have:
> A program that is correct in all other aspects, operating on correct data, containing unspecified behavior shall be a correct program and act in accordance with 5.1.2.4.
https://codeconstruct.com.au/docs/bisect-intractable-rebase-...
That was 8 years ago
Okay, that's interesting. Did you file a bug with your system's firmware provider or with upstream?
You can file it against obmc-console at https://github.com/openbmc/obmc-console/issues
> Digging into the source, I found a really wonky software buffer... which kind of blew my mind - since hardware buffers and flow control exist.
Yep, it's how OpenBMC provides the console via IPMI, Redfish, SSH and on the commandline, as well as routing the console out to the connector on the rear of the chassis.
> I don't remember if that was a case where python was somehow in the pipeline, but that was unfortunately very common in OpenBMC.
Generally there hasn't been any python in the console handling pipeline. That said, python, while especially slow on a BMC, was pretty important for getting the project off the ground.
At this point OpenBMC has been python-free for several years.
> I also had a lot of trouble getting the thing to honor the most basic settings, like baud rate
There's some nuance to this, as depending on your system design the console may be coming from the host to the BMC via Aspeed's Virtual UARTs (VUARTs). The way the VUARTs work is the BMC and host are connected to either end of the two FIFOs between the UARTs' APB and LPC/eSPI interfaces. As such there's no baud rate as no data is clocked out in RS-232 fashion - the data is transferred as quickly as either side can access their register interfaces.
This has caused issues in the past with control flow that lead to data integrity issues:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...
> But it is harder to confidently place the blame on that one. Is it OpenBMC's fault that the software provides no clue as to where things are going wrong in the serial plumbing? Is it the AST2500's fault that designers are routing every serial line through it and making it impossible to eliminate as the cause while troubleshooting?
I agree it can be difficult to debug where things are going wrong in the console pipeline.
In concept a serial console should be simple, but when you bring in requirements like various kinds of SoL, it starts to get more complex.
Out of curiosity, what were the issues you had with OpenBMC's serial communication?
I mean, it's simple, but brain-damaged?
> - "if (!pred(x) || a <= b && y)" for "if not pred(x) or a =< b and y"
I guess more parentheses would improve the clarity but your English translation suffers the same problem as the code
> the c pre-processor
> - a broken comment syntax (how do you comment out a region with comments inside?)
Use the pre-processor that you complained about
#if 0 ... #endif
How Do I Make This Hard to Misuse? https://ozlabs.org/~rusty/index.cgi/tech/2008-03-30.html
What If I Don't Actually Like My Users? https://ozlabs.org/~rusty/index.cgi/tech/2008-04-01.html
FWIW the mitigation patch in OpenBMC turns off all the bridges early in u-boot to minimise the race window for system reset/AC cycles.
Obviously would be better if it was possible to avoid the race window entirely (i.e. bridges default to closed, can be strapped open by the platform designer, and opened as required by firmware). We had asked for hardware changes along these lines for future generations (but may need to push a little harder...)
The concern is that existing BMC firmwares have been shown as unsafe for bare-metal cloud types of configurations by default, so organisations using platforms in this environment may be doing so with false confidence.
ASPEED BMC SoCs (popular BMC SoCs also used in OpenPOWER systems) have a ColdFire (m68k) co-processor buried inside them. In OpenPOWER OpenBMC firmwares we use the ColdFire to bitbang a JTAG-ish protocol into the POWER chip
https://en.wikipedia.org/wiki/Gigabit_Ethernet#1000BASE-T
https://www.tomsguide.com/us/gigabit-ethernet-needtoknow,rev...