| From 9844f5462392b53824e8b86726e7c33b5ecbb676 Mon Sep 17 00:00:00 2001 |
| From: Anthony Iliopoulos <anthony.iliopoulos@huawei.com> |
| Date: Wed, 14 May 2014 11:29:48 +0200 |
| Subject: x86, mm, hugetlb: Add missing TLB page invalidation for hugetlb_cow() |
| |
| From: Anthony Iliopoulos <anthony.iliopoulos@huawei.com> |
| |
| commit 9844f5462392b53824e8b86726e7c33b5ecbb676 upstream. |
| |
| The invalidation is required in order to maintain proper semantics |
| under CoW conditions. In scenarios where a process clones several |
| threads, a thread operating on a core whose DTLB entry for a |
| particular hugepage has not been invalidated, will be reading from |
| the hugepage that belongs to the forked child process, even after |
| hugetlb_cow(). |
| |
| The thread will not see the updated page as long as the stale DTLB |
| entry remains cached, the thread attempts to write into the page, |
| the child process exits, or the thread gets migrated to a different |
| processor. |
| |
| Signed-off-by: Anthony Iliopoulos <anthony.iliopoulos@huawei.com> |
| Link: http://lkml.kernel.org/r/20140514092948.GA17391@server-36.huawei.corp |
| Suggested-by: Shay Goikhman <shay.goikhman@huawei.com> |
| Acked-by: Dave Hansen <dave.hansen@intel.com> |
| Signed-off-by: H. Peter Anvin <hpa@linux.intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/x86/include/asm/hugetlb.h | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/arch/x86/include/asm/hugetlb.h |
| +++ b/arch/x86/include/asm/hugetlb.h |
| @@ -52,6 +52,7 @@ static inline pte_t huge_ptep_get_and_cl |
| static inline void huge_ptep_clear_flush(struct vm_area_struct *vma, |
| unsigned long addr, pte_t *ptep) |
| { |
| + ptep_clear_flush(vma, addr, ptep); |
| } |
| |
| static inline int huge_pte_none(pte_t pte) |