firmware: add helper to copy built-in data to pre-alloc buffer
authorLuis R. Rodriguez <mcgrof@kernel.org>
Mon, 20 Nov 2017 18:23:56 +0000 (10:23 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 29 Nov 2017 10:18:43 +0000 (11:18 +0100)
This makes it clearer that the parameters passed are only used for
the preallocated buffer option, ie, when a caller uses:

request_firmware_into_buf()

Otherwise this code won't run. We flip the logic just so the actual
prellocated buf code is not indented.

Signed-off-by: Luis R. Rodriguez <mcgrof@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/base/firmware_class.c

index 4f64410..aba3f2c 100644 (file)
@@ -146,6 +146,14 @@ static struct firmware_cache fw_cache;
 extern struct builtin_fw __start_builtin_fw[];
 extern struct builtin_fw __end_builtin_fw[];
 
+static void fw_copy_to_prealloc_buf(struct firmware *fw,
+                                   void *buf, size_t size)
+{
+       if (!buf || size < fw->size)
+               return;
+       memcpy(buf, fw->data, fw->size);
+}
+
 static bool fw_get_builtin_firmware(struct firmware *fw, const char *name,
                                    void *buf, size_t size)
 {
@@ -155,9 +163,8 @@ static bool fw_get_builtin_firmware(struct firmware *fw, const char *name,
                if (strcmp(name, b_fw->name) == 0) {
                        fw->size = b_fw->size;
                        fw->data = b_fw->data;
+                       fw_copy_to_prealloc_buf(fw, buf, size);
 
-                       if (buf && fw->size <= size)
-                               memcpy(buf, fw->data, fw->size);
                        return true;
                }
        }