KVM: s390: fix task size check
The gmap_map_segment function uses PGDIR_SIZE in the check for the maximum address in the tasks address space. This incorrectly limits the amount of memory usable for a kvm guest to 4TB. The correct limit is (1UL << 53). As the TASK_SIZE has different values (4TB vs 8PB) dependent on the existance of the fourth page table level, create a new define 'TASK_MAX_SIZE' for (1UL << 53). Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Родитель
3eabaee998
Коммит
ee6ee55bb5
|
@ -43,6 +43,7 @@ extern void execve_tail(void);
|
|||
#ifndef CONFIG_64BIT
|
||||
|
||||
#define TASK_SIZE (1UL << 31)
|
||||
#define TASK_MAX_SIZE (1UL << 31)
|
||||
#define TASK_UNMAPPED_BASE (1UL << 30)
|
||||
|
||||
#else /* CONFIG_64BIT */
|
||||
|
@ -51,6 +52,7 @@ extern void execve_tail(void);
|
|||
#define TASK_UNMAPPED_BASE (test_thread_flag(TIF_31BIT) ? \
|
||||
(1UL << 30) : (1UL << 41))
|
||||
#define TASK_SIZE TASK_SIZE_OF(current)
|
||||
#define TASK_MAX_SIZE (1UL << 53)
|
||||
|
||||
#endif /* CONFIG_64BIT */
|
||||
|
||||
|
|
|
@ -335,7 +335,7 @@ int gmap_map_segment(struct gmap *gmap, unsigned long from,
|
|||
|
||||
if ((from | to | len) & (PMD_SIZE - 1))
|
||||
return -EINVAL;
|
||||
if (len == 0 || from + len > PGDIR_SIZE ||
|
||||
if (len == 0 || from + len > TASK_MAX_SIZE ||
|
||||
from + len < from || to + len < to)
|
||||
return -EINVAL;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче