mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-12 13:34:10 +08:00
Revert "s390/mm: get rid of VMEM_MAX_PHYS macro"
This reverts commit 456be42aa7
.
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>
This commit is contained in:
parent
6aca56c024
commit
54372cf043
@ -220,6 +220,7 @@ static unsigned long setup_kernel_memory_layout(void)
|
||||
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);
|
||||
|
@ -89,6 +89,8 @@ extern unsigned long __bootdata_preserved(VMALLOC_END);
|
||||
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
|
||||
|
@ -642,7 +642,7 @@ void segment_warning(int rc, char *seg_name)
|
||||
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;
|
||||
|
@ -531,7 +531,7 @@ struct range arch_get_mappable_range(void)
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -392,10 +392,10 @@ static void __init add_memory_merged(u16 rn)
|
||||
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)
|
||||
|
Loading…
Reference in New Issue
Block a user