Re: [PATCH v12 01/17] EDAC: Add support for EDAC device features control

From: Borislav Petkov
Date: Fri Sep 13 2024 - 12:41:54 EST


On Wed, Sep 11, 2024 at 10:04:30AM +0100, shiju.jose@xxxxxxxxxx wrote:
> +/**
> + * edac_dev_feature_init - Init a RAS feature
> + * @parent: client device.
> + * @dev_data: pointer to the edac_dev_data structure, which contains
> + * client device specific info.
> + * @feat: pointer to struct edac_dev_feature.
> + * @attr_groups: pointer to attribute group's container.
> + *
> + * Returns number of scrub features attribute groups on success,

Not "scrub" - this is an interface initializing a generic feature.

> + * error otherwise.
> + */
> +static int edac_dev_feat_init(struct device *parent,
> + struct edac_dev_data *dev_data,
> + const struct edac_dev_feature *ras_feat,
> + const struct attribute_group **attr_groups)
> +{
> + int num;
> +
> + switch (ras_feat->ft_type) {
> + case RAS_FEAT_SCRUB:
> + dev_data->scrub_ops = ras_feat->scrub_ops;
> + dev_data->private = ras_feat->ctx;
> + return 1;
> + case RAS_FEAT_ECS:
> + num = ras_feat->ecs_info.num_media_frus;
> + dev_data->ecs_ops = ras_feat->ecs_ops;
> + dev_data->private = ras_feat->ctx;
> + return num;
> + case RAS_FEAT_PPR:
> + dev_data->ppr_ops = ras_feat->ppr_ops;
> + dev_data->private = ras_feat->ctx;
> + return 1;
> + default:
> + return -EINVAL;
> + }
> +}

And why does this function even exist and has kernel-doc comments when all it
does is assign a couple of values? And it gets called exactly once?

Just merge its body into the call site. There you can reuse the switch-case
there too. No need for too much noodling around.

> diff --git a/include/linux/edac.h b/include/linux/edac.h
> index b4ee8961e623..b337254cf5b8 100644
> --- a/include/linux/edac.h
> +++ b/include/linux/edac.h
> @@ -661,4 +661,59 @@ static inline struct dimm_info *edac_get_dimm(struct mem_ctl_info *mci,
>
> return mci->dimms[index];
> }
> +
> +/* EDAC device features */
> +
> +#define EDAC_FEAT_NAME_LEN 128
> +
> +/* RAS feature type */
> +enum edac_dev_feat {
> + RAS_FEAT_SCRUB,
> + RAS_FEAT_ECS,
> + RAS_FEAT_PPR,
> + RAS_FEAT_MAX

I still don't know what ECS or PPR is.

--
Regards/Gruss,
Boris.

https://people.kernel.org/tglx/notes-about-netiquette