diff options
Diffstat (limited to 'arch/x86/mm/hugetlbpage.c')
| -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 8f307d914c2..f46c340727b 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,  	unsigned long sbase = saddr & PUD_MASK;  	unsigned long s_end = sbase + PUD_SIZE; +	/* Allow segments to share if only one is marked locked */ +	unsigned long vm_flags = vma->vm_flags & ~VM_LOCKED; +	unsigned long svm_flags = svma->vm_flags & ~VM_LOCKED; +  	/*  	 * match the virtual addresses, permission and the alignment of the  	 * page table page.  	 */  	if (pmd_index(addr) != pmd_index(saddr) || -	    vma->vm_flags != svma->vm_flags || +	    vm_flags != svm_flags ||  	    sbase < svma->vm_start || svma->vm_end < s_end)  		return 0;  |