Messages in this thread Patch in this message |  | | Date | Tue, 8 Jan 2013 21:04:15 +0800 | Subject | Re: oops in copy_page_rep() | From | Hillf Danton <> |
| |
On Tue, Jan 8, 2013 at 1:34 AM, Linus Torvalds <torvalds@linux-foundation.org> wrote: > On Mon, Jan 7, 2013 at 4:24 AM, Hillf Danton <dhillf@gmail.com> wrote: >> >> I take another try with waiting added, take a look please. > > Hmm. Is there some reason we never need to worry about it for the > "pmd_numa()" case just above? > > A comment about this all might be a really good idea. > Yes Sir, added. --- From: Hillf Danton <dhillf@gmail.com> Subject: [PATCH] mm: restore huge pmd splitting check
Hugh said, it's clear that 3.7 had an important pmd_trans_splitting(orig_pmd) check there, which went AWOL in d10e63f29488 "mm: numa: Create basic numa page hinting infrastructure".
It is restored for handling stable page fault, with wait_split_huge_page() added, as suggested also by Hugh, to avoid reapted faults until the split has completed.
This work is inspired by the oops reported by Dave Jones at https://lkml.org/lkml/2013/1/5/115
Signed-off-by: Hillf Danton <dhillf@gmail.com> ---
--- a/mm/memory.c Sun Jan 6 19:49:50 2013 +++ b/mm/memory.c Tue Jan 8 20:28:04 2013 @@ -3710,6 +3710,14 @@ retry: return do_huge_pmd_numa_page(mm, vma, address, orig_pmd, pmd);
+ /* + * Check if pmd is stable + * (numa pmd is stable, see change_huge_pmd()) + */ + if (pmd_trans_splitting(orig_pmd)) { + wait_split_huge_page(vma->anon_vma, pmd); + goto retry; + } if (dirty && !pmd_write(orig_pmd)) { ret = do_huge_pmd_wp_page(mm, vma, address, pmd, orig_pmd); --
|  |