Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6ec8d413 authored by Liam Mark's avatar Liam Mark
Browse files

mm/filemap: Allow filemap_fault Movable allocations from CMA region



There are a lot of filemap_fault Movable allocations.

      [<ffffff9b813e86f0>] get_page_from_freelist+0xa60
      [<ffffff9b813e6c90>] __alloc_pages_nodemask+0x174
      [<ffffff9b813f06f0>] __do_page_cache_readahead+0xc0
      [<ffffff9b813df73c>] filemap_fault+0x41c
      [<ffffff9b81503974>] ext4_filemap_fault+0x34
      [<ffffff9b8141fabc>] __do_fault+0x28
      [<ffffff9b8141e4a0>] handle_pte_fault+0x9d4
      [<ffffff9b8141ea14>] handle_mm_fault+0x1d0
      [<ffffff9b8129f740>] do_page_fault+0x2a0
      [<ffffff9b8129f484>] do_translation_fault+0x50
      [<ffffff9b8128135c>] do_mem_abort+0x5c
      [<ffffff9b81283478>] el0_da+0x20

The filesystem code doesn't appear to pin these pages, so allow them to be
satisfied from the CMA region in order to better utilize CMA memory.

Change-Id: I1ca6c6cc31107b9ba5e314c0be341299cf659feb
Signed-off-by: default avatarLiam Mark <lmark@codeaurora.org>
parent b6855242
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -2409,6 +2409,11 @@ int filemap_fault(struct vm_fault *vmf)
		do_async_mmap_readahead(vmf->vma, ra, file, page, offset);
	} else if (!page) {
		/* No page in the page cache at all */
		struct address_space *mapping = file->f_mapping;

		if (mapping && (mapping->gfp_mask & __GFP_MOVABLE))
			mapping->gfp_mask |= __GFP_CMA;

		do_sync_mmap_readahead(vmf->vma, ra, file, offset);
		count_vm_event(PGMAJFAULT);
		count_memcg_event_mm(vmf->vma->vm_mm, PGMAJFAULT);