diff options
author | Peter Zijlstra <peterz@infradead.org> | 2009-07-03 13:44:54 (GMT) |
---|---|---|
committer | Scott Wood <scottwood@freescale.com> | 2013-04-04 22:09:16 (GMT) |
commit | 9dfa1ebfb0efad9b9de0d7940df00b193773f89a (patch) | |
tree | 03722798edff316f7180f0dcfe5903d1ac30d6ba /mm | |
parent | 6d28ca1e5cb3077863d889eb8e8d3b07318c50dd (diff) | |
download | linux-fsl-qoriq-9dfa1ebfb0efad9b9de0d7940df00b193773f89a.tar.xz |
mm: shrink the page frame to !-rt size
He below is a boot-tested hack to shrink the page frame size back to
normal.
Should be a net win since there should be many less PTE-pages than
page-frames.
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/memory.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/mm/memory.c b/mm/memory.c index 3f862e4..9d55b54 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -4264,3 +4264,35 @@ void copy_user_huge_page(struct page *dst, struct page *src, } } #endif /* CONFIG_TRANSPARENT_HUGEPAGE || CONFIG_HUGETLBFS */ + +#if defined(CONFIG_PREEMPT_RT_FULL) && (USE_SPLIT_PTLOCKS > 0) +/* + * Heinous hack, relies on the caller doing something like: + * + * pte = alloc_pages(PGALLOC_GFP, 0); + * if (pte) + * pgtable_page_ctor(pte); + * return pte; + * + * This ensures we release the page and return NULL when the + * lock allocation fails. + */ +struct page *pte_lock_init(struct page *page) +{ + page->ptl = kmalloc(sizeof(spinlock_t), GFP_KERNEL); + if (page->ptl) { + spin_lock_init(__pte_lockptr(page)); + } else { + __free_page(page); + page = NULL; + } + return page; +} + +void pte_lock_deinit(struct page *page) +{ + kfree(page->ptl); + page->mapping = NULL; +} + +#endif |