Vaibhav Jain <[email protected]> writes:

> Presently add_dimm() only probes dimms that support NFIT/ACPI. Hence
> this patch refactors this functionality into two functions namely
> add_dimm() and add_nfit_dimm(). Function add_dimm() performs
> allocation and common 'struct ndctl_dimm' initialization and depending
> on whether the dimm-bus supports NIFT, calls add_nfit_dimm(). Once
> the probe is completed based on the value of 'ndctl_dimm.cmd_family'
> appropriate dimm-ops are assigned to the dimm.
>
> In case dimm-bus is of unknown type or doesn't support NFIT the
> initialization still continues, with no dimm-ops assigned to the
> 'struct ndctl_dimm' there-by limiting the functionality available.
>
> This patch shouldn't introduce any behavioral change.
>
> Signed-off-by: Vaibhav Jain <[email protected]>
> ---
> Changelog:
>
> v1..v2:
> * None
> ---
>  ndctl/lib/libndctl.c | 193 +++++++++++++++++++++++++------------------
>  1 file changed, 112 insertions(+), 81 deletions(-)
>
> diff --git a/ndctl/lib/libndctl.c b/ndctl/lib/libndctl.c
> index ee737cbbfe3e..d76dbf7e17de 100644
> --- a/ndctl/lib/libndctl.c
> +++ b/ndctl/lib/libndctl.c
> @@ -1441,82 +1441,15 @@ static int ndctl_bind(struct ndctl_ctx *ctx, struct 
> kmod_module *module,
>  static int ndctl_unbind(struct ndctl_ctx *ctx, const char *devpath);
>  static struct kmod_module *to_module(struct ndctl_ctx *ctx, const char 
> *alias);
>  
> -static void *add_dimm(void *parent, int id, const char *dimm_base)
> +static int add_nfit_dimm(struct ndctl_dimm *dimm, const char *dimm_base)
>  {
> -     int formats, i;
> -     struct ndctl_dimm *dimm;
> +     int i, rc = -1;
>       char buf[SYSFS_ATTR_SIZE];
> -     struct ndctl_bus *bus = parent;
> -     struct ndctl_ctx *ctx = bus->ctx;
> +     struct ndctl_ctx *ctx = dimm->bus->ctx;
>       char *path = calloc(1, strlen(dimm_base) + 100);
>  
>       if (!path)
> -             return NULL;
> -
> -     sprintf(path, "%s/nfit/formats", dimm_base);
> -     if (sysfs_read_attr(ctx, path, buf) < 0)
> -             formats = 1;
> -     else

....
> +     rc = 0;
> + err_read:
> +
> +     free(path);
> +     return rc;
> +}
> +
> +static void *add_dimm(void *parent, int id, const char *dimm_base)
> +{
> +     int formats, i, rc = -ENODEV;
> +     struct ndctl_dimm *dimm = NULL;
> +     char buf[SYSFS_ATTR_SIZE];
> +     struct ndctl_bus *bus = parent;
> +     struct ndctl_ctx *ctx = bus->ctx;
> +     char *path = calloc(1, strlen(dimm_base) + 100);
> +
> +     if (!path)
> +             return NULL;
> +
> +     sprintf(path, "%s/nfit/formats", dimm_base);

Witht that abstraction this should be part of add_nfit_dimm?

> +     if (sysfs_read_attr(ctx, path, buf) < 0)
> +             formats = 1;
> +     else
> +             formats = clamp(strtoul(buf, NULL, 0), 1UL, 2UL);
> +
> +     dimm = calloc(1, sizeof(*dimm) + sizeof(int) * formats);
> +     if (!dimm)
> +             goto err_dimm;
> +     dimm->bus = bus;
> +     dimm->id = id;
> +
_______________________________________________
Linux-nvdimm mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to