This reverts commit 
456be42aa713e7f83b467db66ceae779431c7d9d.
The assumption VMEM_MAX_PHYS should match ident_map_size
is wrong. At least discontiguous saved segments (DCSS)
could be loaded at addresses beyond ident_map_size and
dcssblk device driver might fail as result.
Reported-by: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
        pages = SECTION_ALIGN_UP(pages);
        /* keep vmemmap_start aligned to a top level region table entry */
        vmemmap_start = round_down(VMALLOC_START - pages * sizeof(struct page), rte_size);
+       /* vmemmap_start is the future VMEM_MAX_PHYS, make sure it is within MAX_PHYSMEM */
        vmemmap_start = min(vmemmap_start, 1UL << MAX_PHYSMEM_BITS);
        /* make sure identity map doesn't overlay with vmemmap */
        ident_map_size = min(ident_map_size, vmemmap_start);
 
 extern struct page *__bootdata_preserved(vmemmap);
 extern unsigned long __bootdata_preserved(vmemmap_size);
 
+#define VMEM_MAX_PHYS ((unsigned long) vmemmap)
+
 extern unsigned long __bootdata_preserved(MODULES_VADDR);
 extern unsigned long __bootdata_preserved(MODULES_END);
 #define MODULES_VADDR  MODULES_VADDR
 
                break;
        case -ERANGE:
                pr_err("DCSS %s exceeds the kernel mapping range (%lu) "
-                      "and cannot be loaded\n", seg_name, ident_map_size);
+                      "and cannot be loaded\n", seg_name, VMEM_MAX_PHYS);
                break;
        default:
                break;
 
        struct range mhp_range;
 
        mhp_range.start = 0;
-       mhp_range.end = ident_map_size - 1;
+       mhp_range.end =  VMEM_MAX_PHYS - 1;
        return mhp_range;
 }
 
 
                goto skip_add;
        start = rn2addr(first_rn);
        size = (unsigned long long) num * sclp.rzm;
-       if (start >= ident_map_size)
+       if (start >= VMEM_MAX_PHYS)
                goto skip_add;
-       if (start + size > ident_map_size)
-               size = ident_map_size - start;
+       if (start + size > VMEM_MAX_PHYS)
+               size = VMEM_MAX_PHYS - start;
        if (start >= ident_map_size)
                goto skip_add;
        if (start + size > ident_map_size)