Re: [PATCH v3] ACPI: sysfs: Enable ACPI sysfs support for CCEL records

From: Rafael J. Wysocki
Date: Mon Mar 27 2023 - 14:45:40 EST


On Wed, Mar 22, 2023 at 8:13 PM Kuppuswamy Sathyanarayanan
<sathyanarayanan.kuppuswamy@xxxxxxxxxxxxxxx> wrote:
>
> The Confidential Computing Event Log (CCEL) table provides the address
> and length of the CCEL records area in UEFI reserved memory.
>
> To allow user space access to these records, expose a sysfs interface
> similar to the BERT table.
>
> More details about the CCEL table can be found in the ACPI specification
> r6.5 [1], sec 5.2.34.
>
> Link: https://uefi.org/specs/ACPI/6.5/05_ACPI_Software_Programming_Model.html#cc-event-log-acpi-table # [1]
> Co-developed-by: Haibo Xu <haibo1.xu@xxxxxxxxx>
> Signed-off-by: Haibo Xu <haibo1.xu@xxxxxxxxx>
> Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@xxxxxxxxxxxxxxx>
> ---
>
> Changes since v2:
> * Fixed the commit log as per review suggestion.
>
> Changes since v1:
> * Removed unnecessary parenthesis as per Rafael's suggestion.
>
> drivers/acpi/sysfs.c | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
> diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c
> index 7f4ff56c9d42..687524b50085 100644
> --- a/drivers/acpi/sysfs.c
> +++ b/drivers/acpi/sysfs.c
> @@ -458,11 +458,28 @@ static int acpi_bert_data_init(void *th, struct acpi_data_attr *data_attr)
> return sysfs_create_bin_file(tables_data_kobj, &data_attr->attr);
> }
>
> +static int acpi_ccel_data_init(void *th, struct acpi_data_attr *data_attr)
> +{
> + struct acpi_table_ccel *ccel = th;
> +
> + if (ccel->header.length < sizeof(struct acpi_table_ccel) ||
> + !ccel->log_area_start_address || !ccel->log_area_minimum_length) {
> + kfree(data_attr);
> + return -EINVAL;
> + }
> + data_attr->addr = ccel->log_area_start_address;
> + data_attr->attr.size = ccel->log_area_minimum_length;
> + data_attr->attr.attr.name = "CCEL";
> +
> + return sysfs_create_bin_file(tables_data_kobj, &data_attr->attr);
> +}
> +
> static struct acpi_data_obj {
> char *name;
> int (*fn)(void *, struct acpi_data_attr *);
> } acpi_data_objs[] = {
> { ACPI_SIG_BERT, acpi_bert_data_init },
> + { ACPI_SIG_CCEL, acpi_ccel_data_init },
> };
>
> #define NUM_ACPI_DATA_OBJS ARRAY_SIZE(acpi_data_objs)
> --

Applied as 6.4 material, thanks!