Merge branch 'linaro-android-3.10-lsk' of git://git.linaro.org/people/jstultz/android...
[firefly-linux-kernel-4.4.55.git] / arch / x86 / kernel / setup.c
index 56f7fcfe7fa268d558b6032fdc52643add1d1232..91964c663f0d181f6913d5e39354d309c126807e 100644 (file)
@@ -426,25 +426,23 @@ static void __init reserve_initrd(void)
 static void __init parse_setup_data(void)
 {
        struct setup_data *data;
-       u64 pa_data;
+       u64 pa_data, pa_next;
 
        pa_data = boot_params.hdr.setup_data;
        while (pa_data) {
-               u32 data_len, map_len;
+               u32 data_len, map_len, data_type;
 
                map_len = max(PAGE_SIZE - (pa_data & ~PAGE_MASK),
                              (u64)sizeof(struct setup_data));
                data = early_memremap(pa_data, map_len);
                data_len = data->len + sizeof(struct setup_data);
-               if (data_len > map_len) {
-                       early_iounmap(data, map_len);
-                       data = early_memremap(pa_data, data_len);
-                       map_len = data_len;
-               }
+               data_type = data->type;
+               pa_next = data->next;
+               early_iounmap(data, map_len);
 
-               switch (data->type) {
+               switch (data_type) {
                case SETUP_E820_EXT:
-                       parse_e820_ext(data);
+                       parse_e820_ext(pa_data, data_len);
                        break;
                case SETUP_DTB:
                        add_dtb(pa_data);
@@ -452,8 +450,7 @@ static void __init parse_setup_data(void)
                default:
                        break;
                }
-               pa_data = data->next;
-               early_iounmap(data, map_len);
+               pa_data = pa_next;
        }
 }