]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
of: unittest: find overlays[] entry by name instead of index
authorFrank Rowand <frank.rowand@sony.com>
Fri, 5 Oct 2018 03:41:03 +0000 (20:41 -0700)
committerFrank Rowand <frank.rowand@sony.com>
Fri, 9 Nov 2018 06:12:31 +0000 (22:12 -0800)
One accessor of overlays[] was using a hard coded index value to
find the correct array entry instead of searching for the entry
containing the correct name.

Tested-by: Alan Tull <atull@kernel.org>
Signed-off-by: Frank Rowand <frank.rowand@sony.com>
drivers/of/unittest.c

index d625a91a7f603d6c8aa0e1241181c43db9ff7899..fe01c5869b0fd1fb03377d616da7db81122aa128 100644 (file)
@@ -2192,7 +2192,7 @@ OVERLAY_INFO_EXTERN(overlay_bad_add_dup_prop);
 OVERLAY_INFO_EXTERN(overlay_bad_phandle);
 OVERLAY_INFO_EXTERN(overlay_bad_symbol);
 
-/* order of entries is hard-coded into users of overlays[] */
+/* entries found by name */
 static struct overlay_info overlays[] = {
        OVERLAY_INFO(overlay_base, -9999),
        OVERLAY_INFO(overlay, 0),
@@ -2215,7 +2215,8 @@ static struct overlay_info overlays[] = {
        OVERLAY_INFO(overlay_bad_add_dup_prop, -EINVAL),
        OVERLAY_INFO(overlay_bad_phandle, -EINVAL),
        OVERLAY_INFO(overlay_bad_symbol, -EINVAL),
-       {}
+       /* end marker */
+       {.dtb_begin = NULL, .dtb_end = NULL, .expected_result = 0, .name = NULL}
 };
 
 static struct device_node *overlay_base_root;
@@ -2245,6 +2246,19 @@ void __init unittest_unflatten_overlay_base(void)
        u32 data_size;
        void *new_fdt;
        u32 size;
+       int found = 0;
+       const char *overlay_name = "overlay_base";
+
+       for (info = overlays; info && info->name; info++) {
+               if (!strcmp(overlay_name, info->name)) {
+                       found = 1;
+                       break;
+               }
+       }
+       if (!found) {
+               pr_err("no overlay data for %s\n", overlay_name);
+               return;
+       }
 
        info = &overlays[0];
 
@@ -2292,11 +2306,10 @@ static int __init overlay_data_apply(const char *overlay_name, int *overlay_id)
 {
        struct overlay_info *info;
        int found = 0;
-       int k;
        int ret;
        u32 size;
 
-       for (k = 0, info = overlays; info && info->name; info++, k++) {
+       for (info = overlays; info && info->name; info++) {
                if (!strcmp(overlay_name, info->name)) {
                        found = 1;
                        break;