Merge tag 'trace-v5.19' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
[sfrench/cifs-2.6.git] / init / main.c
index f057c49f1d9d8dd1b7c338ade6a793bd700e7633..02eb533018f6fed4b8b5dbf3c12e654b3470252b 100644 (file)
@@ -266,7 +266,7 @@ static int __init loglevel(char *str)
 early_param("loglevel", loglevel);
 
 #ifdef CONFIG_BLK_DEV_INITRD
-static void * __init get_boot_config_from_initrd(u32 *_size, u32 *_csum)
+static void * __init get_boot_config_from_initrd(size_t *_size)
 {
        u32 size, csum;
        char *data;
@@ -300,17 +300,20 @@ found:
                return NULL;
        }
 
+       if (xbc_calc_checksum(data, size) != csum) {
+               pr_err("bootconfig checksum failed\n");
+               return NULL;
+       }
+
        /* Remove bootconfig from initramfs/initrd */
        initrd_end = (unsigned long)data;
        if (_size)
                *_size = size;
-       if (_csum)
-               *_csum = csum;
 
        return data;
 }
 #else
-static void * __init get_boot_config_from_initrd(u32 *_size, u32 *_csum)
+static void * __init get_boot_config_from_initrd(size_t *_size)
 {
        return NULL;
 }
@@ -407,14 +410,16 @@ static int __init warn_bootconfig(char *str)
 static void __init setup_boot_config(void)
 {
        static char tmp_cmdline[COMMAND_LINE_SIZE] __initdata;
-       const char *msg;
-       int pos;
-       u32 size, csum;
-       char *data, *err;
-       int ret;
+       const char *msg, *data;
+       int pos, ret;
+       size_t size;
+       char *err;
 
        /* Cut out the bootconfig data even if we have no bootconfig option */
-       data = get_boot_config_from_initrd(&size, &csum);
+       data = get_boot_config_from_initrd(&size);
+       /* If there is no bootconfig in initrd, try embedded one. */
+       if (!data)
+               data = xbc_get_embedded_bootconfig(&size);
 
        strlcpy(tmp_cmdline, boot_command_line, COMMAND_LINE_SIZE);
        err = parse_args("bootconfig", tmp_cmdline, NULL, 0, 0, 0, NULL,
@@ -433,13 +438,8 @@ static void __init setup_boot_config(void)
        }
 
        if (size >= XBC_DATA_MAX) {
-               pr_err("bootconfig size %d greater than max size %d\n",
-                       size, XBC_DATA_MAX);
-               return;
-       }
-
-       if (xbc_calc_checksum(data, size) != csum) {
-               pr_err("bootconfig checksum failed\n");
+               pr_err("bootconfig size %ld greater than max size %d\n",
+                       (long)size, XBC_DATA_MAX);
                return;
        }
 
@@ -452,7 +452,7 @@ static void __init setup_boot_config(void)
                                msg, pos);
        } else {
                xbc_get_info(&ret, NULL);
-               pr_info("Load bootconfig: %d bytes %d nodes\n", size, ret);
+               pr_info("Load bootconfig: %ld bytes %d nodes\n", (long)size, ret);
                /* keys starting with "kernel." are passed via cmdline */
                extra_command_line = xbc_make_cmdline("kernel");
                /* Also, "init." keys are init arguments */
@@ -471,7 +471,7 @@ static void __init exit_boot_config(void)
 static void __init setup_boot_config(void)
 {
        /* Remove bootconfig data from initrd */
-       get_boot_config_from_initrd(NULL, NULL);
+       get_boot_config_from_initrd(NULL);
 }
 
 static int __init warn_bootconfig(char *str)