mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: Tzung-Bi Shih <tzungbi@kernel.org>, Sean Rhodes <sean@starlabs.systems>
Cc: Hans de Goede <hansg@kernel.org>,
	corentin.chary@gmail.com,  luke@ljones.dev,
	denis.benato@linux.dev, prasanth.ksr@dell.com,
	 jorge.lopez2@hp.com, Mark Pearson <mpearson-lenovo@squebb.ca>,
	 derekjohn.clark@gmail.com, josh@joshuagrisham.com,
	 briannorris@chromium.org, jwerner@chromium.org,
	tzimmermann@suse.de,  javierm@redhat.com, kees@kernel.org,
	u.kleine-koenig@baylibre.com,  mst@redhat.com,
	chenhuacai@kernel.org, wenst@chromium.org,
	 florian.fainelli@broadcom.com, titouan.ameline@gmail.com,
	 oliver@liuxiaozhen.dev, LKML <linux-kernel@vger.kernel.org>,
	 platform-driver-x86@vger.kernel.org,
	Dell.Client.Kernel@dell.com,  chrome-platform@lists.linux.dev
Subject: Re: [PATCH v7 3/3] firmware: coreboot: Add CFR firmware attributes driver
Date: Tue, 21 Jul 2026 12:14:26 +0300 (EEST)	[thread overview]
Message-ID: <a27de527-245d-7b83-dec9-5b11b5de5869@linux.intel.com> (raw)
In-Reply-To: <al3EzcPFCx-kL54h@google.com>

On Mon, 20 Jul 2026, Tzung-Bi Shih wrote:

> On Fri, Jul 17, 2026 at 09:50:03AM +0100, Sean Rhodes wrote:
> > diff --git a/drivers/firmware/coreboot/coreboot-cfr.c b/drivers/firmware/coreboot/coreboot-cfr.c
> ...
> > +static int coreboot_cfr_read_efi_value_locked(efi_char16_t *efi_name,
> > +					      u32 *value, u32 *attrs)
> > +{
> 
> There is no coreboot_cfr_read_efi_value() and the symbol isn't exported
> anyway.  The "_locked" suffix here is redundant.  Instead, it can leave a
> note in the comment to indicate the lock requirement.
>
> > +static int coreboot_cfr_read_value(const struct coreboot_cfr_setting *setting,
> > +				   u32 *value, u32 *attrs)
> > +{
> > +	efi_char16_t *efi_name;
> > +	int ret;
> > +
> > +	efi_name = coreboot_cfr_efi_name(setting->name);
> > +	if (IS_ERR(efi_name))
> > +		return PTR_ERR(efi_name);
> > +
> > +	ret = efivar_lock();
> > +	if (ret) {
> > +		kfree(efi_name);
> > +		return ret;
> 
> To be neat, use a goto statement to clean up.

It should use __free(), not goto.

-- 
 i.

> > +static int coreboot_cfr_write_efi_value_locked(efi_char16_t *efi_name,
> > +					       u32 value, u32 attrs)
> 
> Same here.  s/_locked//.
> 
> > +static int coreboot_cfr_write_value(struct coreboot_cfr_setting *setting,
> > +				    u32 value)
> > +{
> > +	efi_char16_t *efi_name;
> > +	u32 attrs;
> > +	u32 old;
> > +	int restore_ret;
> > +	int ret;
> > +	bool changed = false;
> 
> The initialization can be eliminated.  See comments below.
> 
> > +
> > +	if (setting->read_only)
> > +		return -EACCES;
> > +
> > +	efi_name = coreboot_cfr_efi_name(setting->name);
> > +	if (IS_ERR(efi_name))
> > +		return PTR_ERR(efi_name);
> > +
> > +	mutex_lock(&setting->drvdata->lock);
> 
> Since it already includes cleanup.h, how about using a guard()?
> 
> > +	ret = coreboot_cfr_write_efi_value_locked(efi_name, value, attrs);
> > +	if (ret)
> > +		goto out_unlock_efi;
> > +	changed = true;
> > +
> > +	ret = coreboot_cfr_apply_runtime(setting);
> > +	if (ret == -EOPNOTSUPP) {
> > +		/* EFI changed; firmware will consume it after reboot. */
> > +		setting->drvdata->pending_reboot = true;
> > +		ret = 0;
> > +	} else if (ret) {
> > +		restore_ret = coreboot_cfr_write_efi_value_locked(efi_name, old, attrs);
> > +		if (restore_ret) {
> > +			setting->drvdata->pending_reboot = true;
> > +			ret = restore_ret;
> > +		} else if (coreboot_cfr_apply_runtime(setting)) {
> 
> Does it need to apply runtime again for old values?  The previous
> coreboot_cfr_apply_runtime() for new values was just failed (i.e., the new
> values shouldn't take effect).
> 
> > +			setting->drvdata->pending_reboot = true;
> > +		} else {
> > +			changed = false;
> > +		}
> > +	}
> > +
> > +out_unlock_efi:
> > +	efivar_unlock();
> > +out_unlock_mutex:
> > +	mutex_unlock(&setting->drvdata->lock);
> > +	kfree(efi_name);
> > +
> > +	if (changed)
> > +		kobject_uevent(&setting->drvdata->class_dev->kobj, KOBJ_CHANGE);
> 
> This shouldn't be in the cleanup path.  Move it before the label
> "out_unlock_efi".  `changed` only makes sense after calling
> coreboot_cfr_write_efi_value_locked().
> 
> > +static bool
> > +coreboot_cfr_possible_values_fit(const struct coreboot_cfr_setting *setting)
> 
> The function needs some comments to explain why and what.
> 
> > +{
> > +	size_t len = 1; /* Trailing newline. */
> > +	unsigned int i;
> > +
> > +	for (i = 0; i < setting->n_values; i++) {
> > +		if (i)
> > +			len++;
> 
> What is this for?  For ';'?
> 
> > +
> > +		if (strlen(setting->values[i].label) >= PAGE_SIZE - len)
> > +			return false;
> > +
> > +		len += strlen(setting->values[i].label);
> 
> A straightforward way:
> 
>     len += strlen(...);
>     if (len >= PAGE_SIZE)
>         ...
> 
> > +static int coreboot_cfr_add_numeric_option(struct coreboot_cfr_drvdata *data,
> > +					   const struct lb_cfr_numeric_option *option,
> > +					   bool parent_read_only)
> > +{
> ...
> > +	if (setting->type != COREBOOT_CFR_SETTING_NUMBER &&
> > +	    !coreboot_cfr_possible_values_fit(setting)) {
> > +		ret = 0;
> > +		goto err_put_setting;
> > +	}
> 
> Why it skips if the possible values can be truncated?  Is it seen as a
> critical setting?
> 
> This needs some comments to explain why and what.
> 
> > +
> > +	ret = coreboot_cfr_setting_is_usable(setting);
> > +	if (ret) {
> > +		if (ret == -ENOENT || ret == -EINVAL || ret == -EOPNOTSUPP ||
> > +		    ret == -ENAMETOOLONG)
> > +			ret = 0;
> 
> Does it check for values from coreboot table have corresponding EFI vars?
> Why these errors aren't considered as failures?
> 
> This needs some comments to explain why and what.
> 
> > +		goto err_put_setting;
> > +	}
> > +
> > +	ret = coreboot_cfr_register_setting(data, setting);
> > +	if (ret)
> > +		return ret;
> > +
> > +	return 0;
> 
> A simple way:
> 
>     return coreboot_cfr_register_setting(...);
> 
> Also it may be worth some comments to mention that after calling
> coreboot_cfr_register_setting(), `coreboot_cfr_setting_ktype` takes care of
> the resource release.
> 

  reply	other threads:[~2026-07-21  9:14 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-17  8:50 [PATCH v7 0/3] firmware: Add coreboot " Sean Rhodes
2026-07-17  8:50 ` [PATCH v7 1/3] firmware: Move firmware attributes class helper Sean Rhodes
2026-07-18  2:22   ` Derek J. Clark
2026-07-17  8:50 ` [PATCH v7 2/3] firmware: Rename google firmware directory to coreboot Sean Rhodes
2026-07-18  0:39   ` Julius Werner
2026-07-17  8:50 ` [PATCH v7 3/3] firmware: coreboot: Add CFR firmware attributes driver Sean Rhodes
2026-07-20  6:48   ` Tzung-Bi Shih
2026-07-21  9:14     ` Ilpo Järvinen [this message]
2026-07-21  9:56   ` Ilpo Järvinen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a27de527-245d-7b83-dec9-5b11b5de5869@linux.intel.com \
    --to=ilpo.jarvinen@linux.intel.com \
    --cc=Dell.Client.Kernel@dell.com \
    --cc=briannorris@chromium.org \
    --cc=chenhuacai@kernel.org \
    --cc=chrome-platform@lists.linux.dev \
    --cc=corentin.chary@gmail.com \
    --cc=denis.benato@linux.dev \
    --cc=derekjohn.clark@gmail.com \
    --cc=florian.fainelli@broadcom.com \
    --cc=hansg@kernel.org \
    --cc=javierm@redhat.com \
    --cc=jorge.lopez2@hp.com \
    --cc=josh@joshuagrisham.com \
    --cc=jwerner@chromium.org \
    --cc=kees@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luke@ljones.dev \
    --cc=mpearson-lenovo@squebb.ca \
    --cc=mst@redhat.com \
    --cc=oliver@liuxiaozhen.dev \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=prasanth.ksr@dell.com \
    --cc=sean@starlabs.systems \
    --cc=titouan.ameline@gmail.com \
    --cc=tzimmermann@suse.de \
    --cc=tzungbi@kernel.org \
    --cc=u.kleine-koenig@baylibre.com \
    --cc=wenst@chromium.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®