On Thu, Mar 13, 2025 at 11:03:38AM +0100, Jean Delvare wrote:
> Hi Jerry,
>
> On Mon, 24 Feb 2025 17:32:02 -0700, Jerry Hoemann wrote:
> > Add PCIe Riser.
>
> This would deserve additional verbosity, considering that "PCI Riser"
> was already a supported board type.
>
> >
> > Signed-off-by: Jerry Hoemann <[email protected]>
> > ---
> > dmioem.c | 28 ++++++++++++++++++++++++++++
> > 1 file changed, 28 insertions(+)
> >
> > diff --git a/dmioem.c b/dmioem.c
> > index c7af5d6..f330cbe 100644
> > --- a/dmioem.c
> > +++ b/dmioem.c
> > @@ -962,6 +962,23 @@ static void dmi_hp_245_pcie_riser(const struct
> > dmi_header *h)
> > pr_attr("Riser Name", dmi_string(h, data[0x08]));
> > }
> >
> > +static void dmi_hp_245_pcie_mhs_riser(const struct dmi_header *h, int len)
> > +{
> > + u8 *data = h->data;
> > + u8 i, count;
> > +
> > + pr_attr("Board Type", "PCIe Riser (MHS Platform)");
>
> You are missing the usual safety length check here, to ensure that you
> don't read beyond the end of the record.
Fixed.
if (h->length < 0x0C) return;
>
> > + pr_attr("Risder ID", "%x", data[0x05]);
>
> Typo: Riser.
Fixed.
>
> The Riser ID was printed as a decimal number in the non-MHS case. Is
> the change to hexadecimal on purpose? This could cause confusion,
> especially considering that there's no 0x prefix to make it clear it's
> an hexadecimal value.
Fixed. print as decimal to make consistent with prior usage.
>
> > + if (data[0x06])
> > + pr_attr("Firmware Version", "%x.%x", data[0x06], data[0x07]);
> > + pr_attr("Downgradable", "%s", data[0x08] & 0x01 ? "yes" : "no");
>
> Please upper-case the first letter of each value string for consistency.
Fixed: Printing Yes|No
> > + pr_attr("Riser Name", dmi_string(h, data[0x09]));
> > + count = data[0x0A];
> > + pr_attr("Slot Count", "%d", count);
> > + for (i = 0; (i < count) && (i + 0x0B < len); i++)
>
> Parentheses around the tests aren't needed, as && has lower precedence.
I would like to retain as I admit to not having memorized all 17 levels
of C operator precedence. In fact, I going to add another pair. :)
>
> I'd prefer "0x0B + i" for consistency with the following line.
>
> > + pr_attr("Slot ID", "0x%x", data[0X0B + i]);
>
> 0x0B (Lower-case x) for consistency.
Fixed.
>
> Considering the current work to add support for JSON output to
> dmidecode, printing several attributes using the same name ("Slot ID")
> is going to be a problem. You should either customize the attribute
> name (by including a counter) or (probably cleaner) convert this to a
> list (printed with pr_list_start/pr_list_item/pr_list_end).
Converted to: pr_list_start/pr_list_item/pr_list_end.
>
> > +}
> > +
> > static int dmi_decode_hp(const struct dmi_header *h)
> > {
> > u8 *data = h->data;
> > @@ -1717,11 +1734,22 @@ static int dmi_decode_hp(const struct dmi_header *h)
> > * 0x06 | Riser ID | BYTE |
> > * 0x07 | CPLD Vers | BTYE | 0-> No CPLD. Bits
> > [7][6:0] Release:Vers
> > * 0x08 | Riser Name | STRING|
> > + *
> > + * If Board Type == 1
>
> With this addition, an earlier comment becomes obsolete:
>
> * 0x04 | Board Type | WORD | 0: PCIe Riser, Other
> Reserved
Fixed. Description changed to: See Below
>
> It should either be updated, or changed to an invitation to look for
> the valid board type values further down.
>
> > + * 0x05 | Riser ID | BYTE |
> > + * 0x06 | Riser FW Major | BYTE |
> > + * 0x07 | Riser FW Minor | BYTE |
> > + * 0x08 | Misc Attr | BYTE |
> > + * 0x09 | Riser Name | STRING|
> > + * 0x0A | Slot Count | BYTE |
> > + * 0x0B | Slot ID | Varies| One per slot.
>
> No trailing dot for consistency.
Removed.
>
> > */
> > pr_handle_name("%s ProLiant Extension Board Inventory
> > Record", company);
> > if (h->length < 0x05) break;
> > if (data[0x04] == 0)
> > dmi_hp_245_pcie_riser(h);
> > + if (data[0x04] == 1)
>
> An "else" would be a welcome optimization (or you may convert to a
> switch/case construct if you prefer).
Changed to switch statement.
>
> > + dmi_hp_245_pcie_mhs_riser(h, h->length);
>
> Please only pass h, and get h->length inside the function. This is more
> efficient, and consistent with the rest of the code.
Done.
>
> > break;
> >
> > default:
>
> Thanks,
> --
> Jean Delvare
> SUSE L3 Support
--
-----------------------------------------------------------------------------
Jerry Hoemann Software Engineer Hewlett Packard Enterprise
-----------------------------------------------------------------------------