mirror of
https://git.proxmox.com/git/fwupd
synced 2025-07-30 03:27:55 +00:00
trivial: Make BIOS setting parsing errors less verbose by default
The `--verbose` output for getting BIOS setting info is very noisy on Lenovo systems due to a mismatch for the driver behavior and kernel API. Hide most of it behind an optional environment variable `FWUPD_BIOS_SETTING_VERBOSE`.
This commit is contained in:
parent
6aec72d58a
commit
01d120efda
@ -41,6 +41,7 @@ with a non-standard filesystem layout.
|
|||||||
* `FU_USB_DEVICE_DEBUG` shows more information about USB devices
|
* `FU_USB_DEVICE_DEBUG` shows more information about USB devices
|
||||||
* `FWUPD_DEVICE_LIST_VERBOSE` display devices being added and removed from the list
|
* `FWUPD_DEVICE_LIST_VERBOSE` display devices being added and removed from the list
|
||||||
* `FWUPD_PROBE_VERBOSE` dump the detected devices to the console, even if not supported by fwupd
|
* `FWUPD_PROBE_VERBOSE` dump the detected devices to the console, even if not supported by fwupd
|
||||||
|
* `FWUPD_BIOS_SETTING_VERBOSE` be verbose while parsing BIOS settings
|
||||||
|
|
||||||
## Plugins
|
## Plugins
|
||||||
|
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
|
|
||||||
struct _FuBiosAttrs {
|
struct _FuBiosAttrs {
|
||||||
GObject parent_instance;
|
GObject parent_instance;
|
||||||
gboolean kernel_bug_shown;
|
|
||||||
GPtrArray *attrs;
|
GPtrArray *attrs;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -97,6 +96,8 @@ fu_bios_attr_set_enumeration_attrs(FwupdBiosAttr *attr, GError **error)
|
|||||||
if (g_strrstr(str, delimiters[j]) == NULL)
|
if (g_strrstr(str, delimiters[j]) == NULL)
|
||||||
continue;
|
continue;
|
||||||
vals = fu_strsplit(str, strlen(str), delimiters[j], -1);
|
vals = fu_strsplit(str, strlen(str), delimiters[j], -1);
|
||||||
|
if (vals[0] != NULL)
|
||||||
|
fwupd_bios_attr_set_kind(attr, FWUPD_BIOS_ATTR_KIND_ENUMERATION);
|
||||||
for (guint i = 0; vals[i] != NULL && vals[i][0] != '\0'; i++)
|
for (guint i = 0; vals[i] != NULL && vals[i][0] != '\0'; i++)
|
||||||
fwupd_bios_attr_add_possible_value(attr, vals[i]);
|
fwupd_bios_attr_add_possible_value(attr, vals[i]);
|
||||||
}
|
}
|
||||||
@ -116,6 +117,7 @@ fu_bios_attr_set_string_attrs(FwupdBiosAttr *attr, GError **error)
|
|||||||
if (tmp == G_MAXUINT64)
|
if (tmp == G_MAXUINT64)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
fwupd_bios_attr_set_upper_bound(attr, tmp);
|
fwupd_bios_attr_set_upper_bound(attr, tmp);
|
||||||
|
fwupd_bios_attr_set_kind(attr, FWUPD_BIOS_ATTR_KIND_STRING);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,7 +138,7 @@ fu_bios_attr_set_integer_attrs(FwupdBiosAttr *attr, GError **error)
|
|||||||
if (tmp == G_MAXUINT64)
|
if (tmp == G_MAXUINT64)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
fwupd_bios_attr_set_scalar_increment(attr, tmp);
|
fwupd_bios_attr_set_scalar_increment(attr, tmp);
|
||||||
|
fwupd_bios_attr_set_kind(attr, FWUPD_BIOS_ATTR_KIND_INTEGER);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,7 +191,11 @@ fu_bios_attr_fixup_lenovo_thinklmi_bug(FwupdBiosAttr *attr, GError **error)
|
|||||||
g_autoptr(GString) right_str = NULL;
|
g_autoptr(GString) right_str = NULL;
|
||||||
g_auto(GStrv) vals = NULL;
|
g_auto(GStrv) vals = NULL;
|
||||||
|
|
||||||
g_debug("Processing %s", fwupd_bios_attr_get_current_value(attr));
|
if (g_getenv("FWUPD_BIOS_SETTING_VERBOSE") != NULL) {
|
||||||
|
g_debug("Processing %s: (%s)",
|
||||||
|
fwupd_bios_attr_get_name(attr),
|
||||||
|
fwupd_bios_attr_get_current_value(attr));
|
||||||
|
}
|
||||||
|
|
||||||
/* We have read only */
|
/* We have read only */
|
||||||
tmp = g_strrstr(current_value, LENOVO_READ_ONLY_NEEDLE);
|
tmp = g_strrstr(current_value, LENOVO_READ_ONLY_NEEDLE);
|
||||||
@ -226,6 +232,8 @@ fu_bios_attr_fixup_lenovo_thinklmi_bug(FwupdBiosAttr *attr, GError **error)
|
|||||||
g_auto(GStrv) possible_vals = NULL;
|
g_auto(GStrv) possible_vals = NULL;
|
||||||
g_string_erase(right_str, 0, strlen(LENOVO_POSSIBLE_NEEDLE));
|
g_string_erase(right_str, 0, strlen(LENOVO_POSSIBLE_NEEDLE));
|
||||||
possible_vals = fu_strsplit(right_str->str, right_str->len, ",", -1);
|
possible_vals = fu_strsplit(right_str->str, right_str->len, ",", -1);
|
||||||
|
if (possible_vals[0] != NULL)
|
||||||
|
fwupd_bios_attr_set_kind(attr, FWUPD_BIOS_ATTR_KIND_ENUMERATION);
|
||||||
for (guint i = 0; possible_vals[i] != NULL && possible_vals[i][0] != '\0'; i++) {
|
for (guint i = 0; possible_vals[i] != NULL && possible_vals[i][0] != '\0'; i++) {
|
||||||
/* last string */
|
/* last string */
|
||||||
if (possible_vals[i + 1] == NULL &&
|
if (possible_vals[i + 1] == NULL &&
|
||||||
@ -244,39 +252,52 @@ fu_bios_attr_fixup_lenovo_thinklmi_bug(FwupdBiosAttr *attr, GError **error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
fu_bios_attr_set_type(FuBiosAttrs *self, FwupdBiosAttr *attr, const gchar *driver, GError **error)
|
fu_bios_attrs_run_folder_fixups(FwupdBiosAttr *attr, GError **error)
|
||||||
{
|
{
|
||||||
|
if (fwupd_bios_attr_get_kind(attr) == FWUPD_BIOS_ATTR_KIND_UNKNOWN)
|
||||||
|
return fu_bios_attr_fixup_lenovo_thinklmi_bug(attr, error);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
fu_bios_attr_set_type(FuBiosAttrs *self, FwupdBiosAttr *attr, GError **error)
|
||||||
|
{
|
||||||
|
gboolean kernel_bug = FALSE;
|
||||||
g_autofree gchar *data = NULL;
|
g_autofree gchar *data = NULL;
|
||||||
g_autoptr(GError) error_key = NULL;
|
g_autoptr(GError) error_key = NULL;
|
||||||
g_autoptr(GError) error_local = NULL;
|
g_autoptr(GError) error_local = NULL;
|
||||||
|
|
||||||
g_return_val_if_fail(FU_IS_BIOS_ATTRS(self), FALSE);
|
g_return_val_if_fail(FU_IS_BIOS_ATTRS(self), FALSE);
|
||||||
g_return_val_if_fail(FWUPD_IS_BIOS_ATTR(attr), FALSE);
|
g_return_val_if_fail(FWUPD_IS_BIOS_ATTR(attr), FALSE);
|
||||||
g_return_val_if_fail(driver != NULL, FALSE);
|
|
||||||
|
|
||||||
/* lenovo thinklmi seems to be missing it even though it's mandatory :/ */
|
/* lenovo thinklmi seems to be missing it even though it's mandatory :/ */
|
||||||
if (!fu_bios_attr_get_key(attr, "type", &data, &error_key)) {
|
if (!fu_bios_attr_get_key(attr, "type", &data, &error_key)) {
|
||||||
g_debug("%s", error_key->message);
|
#if GLIB_CHECK_VERSION(2, 64, 0)
|
||||||
if (!self->kernel_bug_shown) {
|
g_warning_once("KERNEL BUG: 'type' attribute not exported: (%s)",
|
||||||
g_warning("KERNEL BUG: %s doesn't export a 'type' attribute", driver);
|
error_key->message);
|
||||||
self->kernel_bug_shown = TRUE;
|
#else
|
||||||
}
|
g_debug("KERNEL BUG: 'type' attribute not exported: (%s)", error_key->message);
|
||||||
data = g_strdup("enumeration");
|
#endif
|
||||||
|
kernel_bug = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_strcmp0(data, "enumeration") == 0) {
|
if (g_strcmp0(data, "enumeration") == 0 || kernel_bug) {
|
||||||
fwupd_bios_attr_set_kind(attr, FWUPD_BIOS_ATTR_KIND_ENUMERATION);
|
if (!fu_bios_attr_set_enumeration_attrs(attr, &error_local)) {
|
||||||
if (!fu_bios_attr_set_enumeration_attrs(attr, &error_local))
|
if (g_getenv("FWUPD_BIOS_SETTING_VERBOSE") != NULL)
|
||||||
g_debug("failed to add enumeration attrs: %s", error_local->message);
|
g_debug("failed to add enumeration attrs: %s",
|
||||||
|
error_local->message);
|
||||||
|
}
|
||||||
} else if (g_strcmp0(data, "integer") == 0) {
|
} else if (g_strcmp0(data, "integer") == 0) {
|
||||||
fwupd_bios_attr_set_kind(attr, FWUPD_BIOS_ATTR_KIND_INTEGER);
|
if (!fu_bios_attr_set_integer_attrs(attr, &error_local)) {
|
||||||
if (!fu_bios_attr_set_integer_attrs(attr, &error_local))
|
if (g_getenv("FWUPD_BIOS_SETTING_VERBOSE") != NULL)
|
||||||
g_debug("failed to add integer attrs: %s", error_local->message);
|
g_debug("failed to add integer attrs: %s", error_local->message);
|
||||||
|
}
|
||||||
} else if (g_strcmp0(data, "string") == 0) {
|
} else if (g_strcmp0(data, "string") == 0) {
|
||||||
fwupd_bios_attr_set_kind(attr, FWUPD_BIOS_ATTR_KIND_STRING);
|
if (!fu_bios_attr_set_string_attrs(attr, &error_local)) {
|
||||||
if (!fu_bios_attr_set_string_attrs(attr, &error_local))
|
if (g_getenv("FWUPD_BIOS_SETTING_VERBOSE") != NULL)
|
||||||
g_debug("failed to add string attrs: %s", error_local->message);
|
g_debug("failed to add string attrs: %s", error_local->message);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -305,23 +326,18 @@ fu_bios_attr_set_file_attributes(FwupdBiosAttr *attr, GError **error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
fu_bios_attrs_set_folder_attributes(FuBiosAttrs *self,
|
fu_bios_attrs_set_folder_attributes(FuBiosAttrs *self, FwupdBiosAttr *attr, GError **error)
|
||||||
FwupdBiosAttr *attr,
|
|
||||||
const gchar *driver,
|
|
||||||
GError **error)
|
|
||||||
{
|
{
|
||||||
g_autoptr(GError) error_local = NULL;
|
g_autoptr(GError) error_local = NULL;
|
||||||
|
|
||||||
if (!fu_bios_attr_set_type(self, attr, driver, error))
|
if (!fu_bios_attr_set_type(self, attr, error))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (!fu_bios_attr_set_current_value(attr, error))
|
if (!fu_bios_attr_set_current_value(attr, error))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (!fu_bios_attr_set_description(attr, &error_local))
|
if (!fu_bios_attr_set_description(attr, &error_local))
|
||||||
g_debug("%s", error_local->message);
|
g_debug("%s", error_local->message);
|
||||||
if (self->kernel_bug_shown) {
|
if (!fu_bios_attrs_run_folder_fixups(attr, error))
|
||||||
if (!fu_bios_attr_fixup_lenovo_thinklmi_bug(attr, error))
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -343,7 +359,7 @@ fu_bios_attrs_populate_attribute(FuBiosAttrs *self,
|
|||||||
attr = fwupd_bios_attr_new(name, path);
|
attr = fwupd_bios_attr_new(name, path);
|
||||||
|
|
||||||
if (g_file_test(path, G_FILE_TEST_IS_DIR)) {
|
if (g_file_test(path, G_FILE_TEST_IS_DIR)) {
|
||||||
if (!fu_bios_attrs_set_folder_attributes(self, attr, driver, error))
|
if (!fu_bios_attrs_set_folder_attributes(self, attr, error))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
} else {
|
} else {
|
||||||
if (!fu_bios_attr_set_file_attributes(attr, error))
|
if (!fu_bios_attr_set_file_attributes(attr, error))
|
||||||
|
Loading…
Reference in New Issue
Block a user