Re: [PATCH 3/6] chmem: add support for dynamic (de)configuration of hotplug memory

Sumanth Korikkar <[email protected]> Thu, 16 Oct 2025 14:08:20 +0200
Newsgroups org.kernel.vger.util-linux
Message-ID <[email protected]>
On Thu, Oct 16, 2025 at 01:39:51PM +0200, Karel Zak wrote:
> On Thu, Oct 16, 2025 at 12:16:50PM +0200, Sumanth Korikkar wrote:
> > +
> > +static int chmem_set_memmap_on_memory(struct chmem_desc *desc, char *name)
> > +{
> > +	char str[BUFSIZ];
> > +	int rc, index;
> > +
> > +	index = strtou64_or_err(name + 6, _("Failed to parse index"));
> > +	idxtostr(desc, index, str, sizeof(str));
> > +	rc = ul_path_writef_u64(desc->sysmemconfig, desc->memmap_on_memory,
> > +				"%s/memmap_on_memory", name);
> > +	if (rc)
> > +		warn(_("%s memmap-on-memory failed"), str);
> > +	return rc;
> 
> It seems that str[BUFSIZ] and idxtostr() are necessary only in case of
> an error. How about:
> 
>         index = strtou64_or_err(name + 6, _("Failed to parse index"));
>         rc = ul_path_writef_u64(desc->sysmemconfig, desc->memmap_on_memory,
>             "%s/memmap_on_memory", name);
> 
>         if (rc) {
>             char str[BUFSIZ];
>             idxtostr(desc, index, str, sizeof(str));
>             warn(_("%s memmap-on-memory failed"), str);
>         }
> 
> Note that BUFSIZ seems excessive.

Noted. I will use the above convention.

> > +static int chmem_config(struct chmem_desc *desc, char *name, int configure)
> > +{
> > +	int mblock_configured, memmap, rc, index;
> > +	char str[BUFSIZ], state[BUFSIZ];
> > +
> > +	index = strtou64_or_err(name + 6, _("Failed to parse index"));
> > +	idxtostr(desc, index, str, sizeof(str));
> > +	rc = ul_path_readf_s32(desc->sysmemconfig, &mblock_configured, "%s/config", name);
> > +	if (rc)
> > +		goto out;
> > +	rc = ul_path_readf_s32(desc->sysmemconfig, &memmap, "%s/memmap_on_memory", name);
> > +	if (rc)
> > +		goto out;
> > +	if (mblock_configured) {
> > +		if (configure) {
> > +			if (chmem_memmap_on_memory_option_enabled(desc) &&
> 
> The name is quite long. How about renaming the function to
> chmem_memmap_enabled()?

Agree.

> > +					memmap != desc->memmap_on_memory) {
> > +				if (!desc->is_size || desc->verbose)
> > +					fprintf(stdout,
> > +						_("%s must be deconfigured before using -m option\n"), str);
> > +				rc = -1;
> > +			} else if (desc->is_size) {
> > +				/*
> > +				 * Allow chmem_onoff_size() to proceed with
> > +				 * configuring different memory blocks when the
> > +				 * current block is already configured.
> > +				 */
> > +				rc = -1;
> > +			} else if (desc->verbose) {
> > +				fprintf(stdout, _("%s already configured\n"), str);
> > +			}
> > +			goto out;
> > +		} else if (ul_path_readf_buffer(desc->sysmem, state,
> > +						sizeof(state), "%s/state", name) > 0 &&
> > +			   strncmp("online", state, 6) == 0) {
> > +			if (!desc->is_size || desc->verbose)
> > +				fprintf(stdout, "%s must be offline before deconfiguration\n", str);
> 
> Here, the _( ) is missing for the message.

Will add.

> > +		if (!desc->is_size) {
> > +			if (configure)
> > +				warn(_("%s configure failed\n"), str);
> > +			else
> > +				warn(_("%s deconfigure failed\n"), str);
> 
> It's a detail, but I would suggest a different code pattern:
> 
>    warn(configure ? _("%s configure failed") :
>                     _("%s deconfigure failed"), str);
> 
>  Note that warn() (err(), ...) appends \n to the output, so do not use
>  it in the string.

Sure. I will integrate it in next version. Thanks.