Commit 6af7eea2 authored by Christian Borntraeger's avatar Christian Borntraeger Committed by Martin Schwidefsky

[S390] s390: disable change bit override

commit 6a985c61
([S390] s390: use change recording override for kernel mapping)
deactivated the change bit recording for the kernel mapping to
improve the performance. This works most of the time, but there
are cases (e.g. kernel runs in home space, futex atomic compare xcmg)
where we modify user memory with the kernel mapping instead of the
user mapping.
Instead of fixing these cases, this patch just deactivates change bit
override to avoid future problems with other kernel code that might
use the kernel mapping for user memory.

CC: stable@kernel.org
Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 176b1803
...@@ -71,12 +71,8 @@ static pte_t __ref *vmem_pte_alloc(void) ...@@ -71,12 +71,8 @@ static pte_t __ref *vmem_pte_alloc(void)
pte = alloc_bootmem(PTRS_PER_PTE * sizeof(pte_t)); pte = alloc_bootmem(PTRS_PER_PTE * sizeof(pte_t));
if (!pte) if (!pte)
return NULL; return NULL;
if (MACHINE_HAS_HPAGE) clear_table((unsigned long *) pte, _PAGE_TYPE_EMPTY,
clear_table((unsigned long *) pte, _PAGE_TYPE_EMPTY | _PAGE_CO, PTRS_PER_PTE * sizeof(pte_t));
PTRS_PER_PTE * sizeof(pte_t));
else
clear_table((unsigned long *) pte, _PAGE_TYPE_EMPTY,
PTRS_PER_PTE * sizeof(pte_t));
return pte; return pte;
} }
...@@ -117,8 +113,7 @@ static int vmem_add_mem(unsigned long start, unsigned long size, int ro) ...@@ -117,8 +113,7 @@ static int vmem_add_mem(unsigned long start, unsigned long size, int ro)
if (MACHINE_HAS_HPAGE && !(address & ~HPAGE_MASK) && if (MACHINE_HAS_HPAGE && !(address & ~HPAGE_MASK) &&
(address + HPAGE_SIZE <= start + size) && (address + HPAGE_SIZE <= start + size) &&
(address >= HPAGE_SIZE)) { (address >= HPAGE_SIZE)) {
pte_val(pte) |= _SEGMENT_ENTRY_LARGE | pte_val(pte) |= _SEGMENT_ENTRY_LARGE;
_SEGMENT_ENTRY_CO;
pmd_val(*pm_dir) = pte_val(pte); pmd_val(*pm_dir) = pte_val(pte);
address += HPAGE_SIZE - PAGE_SIZE; address += HPAGE_SIZE - PAGE_SIZE;
continue; continue;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment