Re: [RFC PATCH 1/9] cxl/acpi: Add an acpi_cxl module for the CXL interconnect

From: Verma, Vishal L
Date: Mon Nov 16 2020 - 13:24:01 EST


On Mon, 2020-11-16 at 17:59 +0000, Jonathan Cameron wrote:
> On Tue, 10 Nov 2020 21:43:48 -0800
> Ben Widawsky <ben.widawsky@xxxxxxxxx> wrote:
>
> > From: Vishal Verma <vishal.l.verma@xxxxxxxxx>
> >
> > Add an acpi_cxl module to coordinate the ACPI portions of the CXL
> > (Compute eXpress Link) interconnect. This driver binds to ACPI0017
> > objects in the ACPI tree, and coordinates access to the resources
> > provided by the ACPI CEDT (CXL Early Discovery Table).
>
> I think the qemu series notes that this ACPI0017 is just a proposal at
> this stage. Please make sure that's highlighted here as well unless
> that status is out of date.

Hi Jonathan,

Thank you for the review. The cover letter talks about this, but I agree
it would be worth repeating in this patch briefly as I did with the OSC
patch. If it is still in a proposal state by the next posting, I'll make
sure to add a note here too.

>
> > +
> > +static void acpi_cxl_desc_init(struct acpi_cxl_desc *acpi_desc, struct device *dev)
> > +{
> > + dev_set_drvdata(dev, acpi_desc);
>
> No need to have this wrapper + it hides the fact you are not just initialsing
> the acpi_desc structure.
>
> > + acpi_desc->dev = dev;
> > +}
> > +
> > +static void acpi_cedt_put_table(void *table)
> > +{
> > + acpi_put_table(table);
> > +}
> > +
> > +static int acpi_cxl_add(struct acpi_device *adev)
> > +{
> > + struct acpi_cxl_desc *acpi_desc;
> > + struct device *dev = &adev->dev;
> > + struct acpi_table_header *tbl;
> > + acpi_status status = AE_OK;
>
> Set below, so don't do it here.
>
> > + acpi_size sz;
> > + int rc = 0;
>
> Set in paths in which it's used so don't do it here.
>
> > +
> > + status = acpi_get_table(ACPI_SIG_CEDT, 0, &tbl);
> > + if (ACPI_FAILURE(status)) {
> > + dev_err(dev, "failed to find CEDT at startup\n");
> > + return 0;
> > + }
> > +
> > + rc = devm_add_action_or_reset(dev, acpi_cedt_put_table, tbl);
> > + if (rc)
> > + return rc;
>
> blank line here preferred for readability (do something, then check errors as
> block)
>
> > + sz = tbl->length;
> > + dev_info(dev, "found CEDT at startup: %lld bytes\n", sz);
> > +
> > + acpi_desc = devm_kzalloc(dev, sizeof(*acpi_desc), GFP_KERNEL);
> > + if (!acpi_desc)
> > + return -ENOMEM;
>
> blank line here slightly helps readability.
>
> > + acpi_cxl_desc_init(acpi_desc, &adev->dev);
> > +
> > + acpi_desc->acpi_header = *tbl;
> > +
> > + return 0;
> > +}
> > +
> > +static int acpi_cxl_remove(struct acpi_device *adev)
> > +{
> > + return 0;
>
> Don't think empty remove is needed.
>

Agreed with all of the above, I'll fix for the next posting.

> > +
> > +/* Values for CEDT structure types */
> > +
> > +enum acpi_cedt_type {
> > + ACPI_CEDT_TYPE_HOST_BRIDGE = 0, /* CHBS - CXL Host Bridge Structure */
> > + ACPI_CEDT_TYPE_CFMWS = 1, /* CFMWS - CXL Fixed Memory Window Structure */
>
> This isn't in the 2.0 spec, so I guess also part of some proposed changes.

Yes this got in accidentally, will remove.