diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/mm/hugetlbpage.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/arch/x86/mm/hugetlbpage.c b/arch/x86/mm/hugetlbpage.c index 8f307d914c2e..f46c340727b8 100644 --- a/arch/x86/mm/hugetlbpage.c +++ b/arch/x86/mm/hugetlbpage.c | |||
@@ -26,12 +26,16 @@ static unsigned long page_table_shareable(struct vm_area_struct *svma, | |||
26 | unsigned long sbase = saddr & PUD_MASK; | 26 | unsigned long sbase = saddr & PUD_MASK; |
27 | unsigned long s_end = sbase + PUD_SIZE; | 27 | unsigned long s_end = sbase + PUD_SIZE; |
28 | 28 | ||
29 | /* Allow segments to share if only one is marked locked */ | ||
30 | unsigned long vm_flags = vma->vm_flags & ~VM_LOCKED; | ||
31 | unsigned long svm_flags = svma->vm_flags & ~VM_LOCKED; | ||
32 | |||
29 | /* | 33 | /* |
30 | * match the virtual addresses, permission and the alignment of the | 34 | * match the virtual addresses, permission and the alignment of the |
31 | * page table page. | 35 | * page table page. |
32 | */ | 36 | */ |
33 | if (pmd_index(addr) != pmd_index(saddr) || | 37 | if (pmd_index(addr) != pmd_index(saddr) || |
34 | vma->vm_flags != svma->vm_flags || | 38 | vm_flags != svm_flags || |
35 | sbase < svma->vm_start || svma->vm_end < s_end) | 39 | sbase < svma->vm_start || svma->vm_end < s_end) |
36 | return 0; | 40 | return 0; |
37 | 41 | ||