mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
kmemcheck: add hooks for the page allocator
This adds support for tracking the initializedness of memory that was allocated with the page allocator. Highmem requests are not tracked. Cc: Dave Hansen <[email protected]> Acked-by: Pekka Enberg <[email protected]> [build fix for !CONFIG_KMEMCHECK] Signed-off-by: Ingo Molnar <[email protected]> [rebased for mainline inclusion] Signed-off-by: Vegard Nossum <[email protected]>
This commit is contained in:
parent
9b5cab3189
commit
b1eeab6768
8 changed files with 122 additions and 31 deletions
15
mm/slab.c
15
mm/slab.c
|
|
@ -1612,7 +1612,7 @@ static void *kmem_getpages(struct kmem_cache *cachep, gfp_t flags, int nodeid)
|
|||
if (cachep->flags & SLAB_RECLAIM_ACCOUNT)
|
||||
flags |= __GFP_RECLAIMABLE;
|
||||
|
||||
page = alloc_pages_node(nodeid, flags, cachep->gfporder);
|
||||
page = alloc_pages_node(nodeid, flags | __GFP_NOTRACK, cachep->gfporder);
|
||||
if (!page)
|
||||
return NULL;
|
||||
|
||||
|
|
@ -1626,8 +1626,14 @@ static void *kmem_getpages(struct kmem_cache *cachep, gfp_t flags, int nodeid)
|
|||
for (i = 0; i < nr_pages; i++)
|
||||
__SetPageSlab(page + i);
|
||||
|
||||
if (kmemcheck_enabled && !(cachep->flags & SLAB_NOTRACK))
|
||||
kmemcheck_alloc_shadow(cachep, flags, nodeid, page, cachep->gfporder);
|
||||
if (kmemcheck_enabled && !(cachep->flags & SLAB_NOTRACK)) {
|
||||
kmemcheck_alloc_shadow(page, cachep->gfporder, flags, nodeid);
|
||||
|
||||
if (cachep->ctor)
|
||||
kmemcheck_mark_uninitialized_pages(page, nr_pages);
|
||||
else
|
||||
kmemcheck_mark_unallocated_pages(page, nr_pages);
|
||||
}
|
||||
|
||||
return page_address(page);
|
||||
}
|
||||
|
|
@ -1641,8 +1647,7 @@ static void kmem_freepages(struct kmem_cache *cachep, void *addr)
|
|||
struct page *page = virt_to_page(addr);
|
||||
const unsigned long nr_freed = i;
|
||||
|
||||
if (kmemcheck_page_is_tracked(page))
|
||||
kmemcheck_free_shadow(cachep, page, cachep->gfporder);
|
||||
kmemcheck_free_shadow(page, cachep->gfporder);
|
||||
|
||||
if (cachep->flags & SLAB_RECLAIM_ACCOUNT)
|
||||
sub_zone_page_state(page_zone(page),
|
||||
|
|
|
|||
Loading…
Reference in a new issue