firmware_class: Log every success and failure against given device
authorBen Hutchings <ben@decadent.org.uk>
Sun, 9 Dec 2012 16:02:00 +0000 (16:02 +0000)
committerSalvatore Bonaccorso <carnil@debian.org>
Mon, 7 Mar 2022 21:06:21 +0000 (21:06 +0000)
Forwarded: no

The hundreds of users of request_firmware() have nearly as many
different log formats for reporting failures.  They also have only the
vaguest hint as to what went wrong; only firmware_class really knows
that.  Therefore, add specific log messages for the failure modes that
aren't currently logged.

In case of a driver that tries multiple names, this may result in the
impression that it failed to initialise.  Therefore, also log successes.

This makes many error messages in drivers redundant, which will be
removed in later patches.

This does not cover the case where we fall back to a user-mode helper
(which is no longer enabled in Debian).

NOTE: hw-detect will depend on the "firmware: failed to load %s (%d)\n"
format to detect missing firmware.

Gbp-Pq: Topic bugfix/all
Gbp-Pq: Name firmware_class-log-every-success-and-failure.patch

drivers/base/firmware_loader/fallback.c
drivers/base/firmware_loader/main.c

index 0fdd18ce2c52e7030a63dc3d0d3b3b0c1bab6218..f796f336c54ec3df2c029be0818d939f165ec3f0 100644 (file)
@@ -560,7 +560,7 @@ static int fw_load_from_user_helper(struct firmware *firmware,
        if (opt_flags & FW_OPT_NOWAIT) {
                timeout = usermodehelper_read_lock_wait(timeout);
                if (!timeout) {
-                       dev_dbg(device, "firmware: %s loading timed out\n",
+                       dev_err(device, "firmware: %s loading timed out\n",
                                name);
                        return -EBUSY;
                }
index 1372f40d0371f5e9d733fbbf430c8f8b2a23f772..d83709db7cc19fcad27a8e13a9f463a9f5c7d5f5 100644 (file)
@@ -536,18 +536,15 @@ fw_get_filesystem_firmware(struct device *device, struct fw_priv *fw_priv,
                                                       file_size_ptr,
                                                       READING_FIRMWARE);
                if (rc < 0) {
-                       if (rc != -ENOENT)
-                               dev_warn(device, "loading %s failed with error %d\n",
-                                        path, rc);
-                       else
-                               dev_dbg(device, "loading %s failed for no such file or directory.\n",
-                                        path);
+                       dev_dbg(device, "loading %s failed with error %d\n",
+                               path, rc);
                        continue;
                }
                size = rc;
                rc = 0;
 
-               dev_dbg(device, "Loading firmware from %s\n", path);
+               dev_info(device, "firmware: direct-loading firmware %s\n",
+                        fw_priv->fw_name);
                if (decompress) {
                        dev_dbg(device, "f/w decompressing %s\n",
                                fw_priv->fw_name);
@@ -560,8 +557,6 @@ fw_get_filesystem_firmware(struct device *device, struct fw_priv *fw_priv,
                                continue;
                        }
                } else {
-                       dev_dbg(device, "direct-loading %s\n",
-                               fw_priv->fw_name);
                        if (!fw_priv->data)
                                fw_priv->data = buffer;
                        fw_priv->size = size;
@@ -571,6 +566,10 @@ fw_get_filesystem_firmware(struct device *device, struct fw_priv *fw_priv,
        }
        __putname(path);
 
+       if (rc)
+               dev_err(device, "firmware: failed to load %s (%d)\n",
+                       fw_priv->fw_name, rc);
+
        return rc;
 }