]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - arch/s390/mm/vmem.c
[S390] s390: use change recording override for kernel mapping
[net-next-2.6.git] / arch / s390 / mm / vmem.c
index 5f91a38d759258819eca0aaba4f9691268e0fc15..300ab012b0fd875efa119d09f2784a60a3769843 100644 (file)
@@ -70,8 +70,12 @@ static pte_t __ref *vmem_pte_alloc(void)
                pte = alloc_bootmem(PTRS_PER_PTE * sizeof(pte_t));
        if (!pte)
                return NULL;
-       clear_table((unsigned long *) pte, _PAGE_TYPE_EMPTY,
-                   PTRS_PER_PTE * sizeof(pte_t));
+       if (MACHINE_HAS_HPAGE)
+               clear_table((unsigned long *) pte, _PAGE_TYPE_EMPTY | _PAGE_CO,
+                           PTRS_PER_PTE * sizeof(pte_t));
+       else
+               clear_table((unsigned long *) pte, _PAGE_TYPE_EMPTY,
+                           PTRS_PER_PTE * sizeof(pte_t));
        return pte;
 }
 
@@ -112,7 +116,8 @@ static int vmem_add_mem(unsigned long start, unsigned long size, int ro)
                if (MACHINE_HAS_HPAGE && !(address & ~HPAGE_MASK) &&
                    (address + HPAGE_SIZE <= start + 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);
                        address += HPAGE_SIZE - PAGE_SIZE;
                        continue;