projects/linux·commit 0cbeafb2

Merge branch 'akpm' (patches from Andrew)

0cbeafb2 · Linus Torvalds <[email protected]> · 2016-01-17 12:58:52 -08:00

Merge second patch-bomb from Andrew Morton:

 - more MM stuff:

    - Kirill's page-flags rework

    - Kirill's now-allegedly-fixed THP rework

    - MADV_FREE implementation

    - DAX feature work (msync/fsync).  This isn't quite complete but DAX
      is new and it's good enough and the guys have a handle on what
      needs to be done - I expect this to be wrapped in the next week or
      two.

  - some vsprintf maintenance work

  - various other misc bits

* emailed patches from Andrew Morton <[email protected]>: (145 commits)
  printk: change recursion_bug type to bool
  lib/vsprintf: factor out %pN[F] handler as netdev_bits()
  lib/vsprintf: refactor duplicate code to special_hex_number()
  printk-formats.txt: remove unimplemented %pT
  printk: help pr_debug and pr_devel to optimize out arguments
  lib/test_printf.c: test dentry printing
  lib/test_printf.c: add test for large bitmaps
  lib/test_printf.c: account for kvasprintf tests
  lib/test_printf.c: add a few number() tests
  lib/test_printf.c: test precision quirks
  lib/test_printf.c: check for out-of-bound writes
  lib/test_printf.c: don't BUG
  lib/kasprintf.c: add sanity check to kvasprintf
  lib/vsprintf.c: warn about too large precisions and field widths
  lib/vsprintf.c: help gcc make number() smaller
  lib/vsprintf.c: expand field_width to 24 bits
  lib/vsprintf.c: eliminate potential race in string()
  lib/vsprintf.c: move string() below widen_string()
  lib/vsprintf.c: pull out padding code from dentry_name()
  printk: do cond_resched() between lines while outputting to consoles
  ...
Commit
0cbeafb245ca568bc0765645aa64f0451b716657
Parents
58cf279a · 06b031de

Merge commit. Changes below are compared with the first parent: 58cf279a.

Changes

189 files changed · +4429 −2958

FileStatusAddDelContent
Documentation/features/vm/pmdp_splitting_flush/arch-support.txtdeleted+0−40View before deletion
Documentation/printk-formats.txtmodified+0−9View file
Documentation/vm/transhuge.txtmodified+96−55View file
arch/alpha/include/uapi/asm/mman.hmodified+2−0View file
arch/arc/Kconfigmodified+0−3View file
arch/arc/mm/cache.cmodified+2−2View file
arch/arm/Kconfigmodified+0−5View file
arch/arm/include/asm/kvm_mmu.hmodified+3−2View file
arch/arm/include/asm/pgtable-3level.hmodified+1−9View file
arch/arm/kvm/mmu.cmodified+5−5View file
arch/arm/lib/uaccess_with_memcpy.cmodified+2−3View file
arch/arm/mm/flush.cmodified+1−16View file
arch/arm64/include/asm/kvm_mmu.hmodified+2−1View file
arch/arm64/include/asm/pgtable.hmodified+1−8View file
arch/arm64/mm/flush.cmodified+0−16View file
arch/avr32/include/asm/page.hmodified+4−4View file
arch/frv/include/asm/page.hmodified+1−1View file
arch/ia64/include/asm/page.hmodified+1−0View file
arch/metag/Kconfigmodified+0−3View file
arch/microblaze/Kconfigmodified+0−3View file
arch/mips/include/asm/kvm_host.hmodified+3−3View file
arch/mips/include/asm/pgtable-bits.hmodified+4−6View file
arch/mips/include/asm/pgtable.hmodified+0−18View file
arch/mips/include/uapi/asm/mman.hmodified+2−0View file
arch/mips/kvm/emulate.cmodified+1−1View file
arch/mips/kvm/tlb.cmodified+7−7View file
arch/mips/mm/c-r4k.cmodified+2−1View file
arch/mips/mm/cache.cmodified+1−1View file
arch/mips/mm/gup.cmodified+1−16View file
arch/mips/mm/init.cmodified+3−3View file
arch/mips/mm/pgtable-64.cmodified+0−14View file
arch/mips/mm/tlbex.cmodified+0−1View file
arch/mn10300/include/asm/page.hmodified+1−0View file
arch/parisc/Kconfigmodified+0−3View file
arch/parisc/include/uapi/asm/mman.hmodified+2−0View file
arch/powerpc/Kconfigmodified+0−3View file
arch/powerpc/include/asm/book3s/64/hash-64k.hmodified+0−12View file
arch/powerpc/include/asm/book3s/64/hash.hmodified+2−8View file
arch/powerpc/include/asm/book3s/64/pgtable.hmodified+2−4View file
arch/powerpc/include/asm/kvm_book3s.hmodified+2−2View file
arch/powerpc/include/asm/kvm_ppc.hmodified+1−1View file
arch/powerpc/kvm/book3s.cmodified+3−3View file
arch/powerpc/kvm/book3s_32_mmu_host.cmodified+1−1View file
arch/powerpc/kvm/book3s_64_mmu_host.cmodified+1−1View file
arch/powerpc/kvm/e500.hmodified+1−1View file
arch/powerpc/kvm/e500_mmu_host.cmodified+4−4View file
arch/powerpc/kvm/trace_pr.hmodified+1−1View file
arch/powerpc/mm/hugepage-hash64.cmodified+0−3View file
arch/powerpc/mm/hugetlbpage.cmodified+1−16View file
arch/powerpc/mm/pgtable_64.cmodified+0−49View file
arch/powerpc/mm/subpage-prot.cmodified+1−1View file
arch/powerpc/sysdev/axonram.cmodified+4−5View file
arch/s390/Kconfigmodified+0−3View file
arch/s390/include/asm/pgtable.hmodified+1−15View file
arch/s390/mm/gup.cmodified+2−22View file
arch/s390/mm/pgtable.cmodified+28−19View file
arch/sh/Kconfigmodified+0−3View file
arch/sh/mm/cache-sh4.cmodified+1−1View file
arch/sh/mm/cache.cmodified+4−4View file
arch/sparc/Kconfigmodified+0−4View file
arch/sparc/include/asm/pgtable_64.hmodified+6−13View file
arch/sparc/mm/fault_64.cmodified+0−3View file
arch/sparc/mm/gup.cmodified+2−14View file
arch/tile/include/asm/pgtable.hmodified+0−10View file
arch/um/include/asm/page.hmodified+3−4View file
arch/um/include/asm/pgtable-3level.hmodified+2−2View file
arch/um/include/asm/pgtable.hmodified+1−1View file
arch/unicore32/Kconfigmodified+0−3View file
arch/x86/Kconfigmodified+0−3View file
arch/x86/include/asm/pgtable.hmodified+30−10View file
arch/x86/include/asm/pgtable_types.hmodified+6−3View file
arch/x86/include/asm/pmem.hmodified+1−6View file
arch/x86/kernel/vm86_32.cmodified+5−1View file
arch/x86/kvm/iommu.cmodified+6−5View file
arch/x86/kvm/mmu.cmodified+19−18View file
arch/x86/kvm/mmu_audit.cmodified+1−1View file
arch/x86/kvm/paging_tmpl.hmodified+3−3View file
arch/x86/kvm/vmx.cmodified+1−1View file
arch/x86/kvm/x86.cmodified+1−1View file
arch/x86/mm/gup.cmodified+55−19View file
arch/x86/mm/init_64.cmodified+26−7View file
arch/x86/mm/pat.cmodified+3−2View file
arch/x86/mm/pgtable.cmodified+0−13View file
arch/xtensa/include/uapi/asm/mman.hmodified+2−0View file
arch/xtensa/mm/tlb.cmodified+1−1View file
drivers/base/memory.cmodified+13−0View file
drivers/block/brd.cmodified+5−2View file
drivers/block/zram/zram_drv.cmodified+4−3View file
drivers/gpu/drm/exynos/exynos_drm_gem.cmodified+3−1View file
drivers/gpu/drm/gma500/framebuffer.cmodified+3−1View file
drivers/gpu/drm/msm/msm_gem.cmodified+3−1View file
drivers/gpu/drm/omapdrm/omap_gem.cmodified+5−2View file
drivers/gpu/drm/ttm/ttm_bo_vm.cmodified+3−1View file
drivers/iio/industrialio-core.cmodified+4−5View file
drivers/net/wireless/intel/iwlwifi/dvm/calib.cmodified+1−1View file
drivers/nvdimm/pfn_devs.cmodified+1−2View file
drivers/nvdimm/pmem.cmodified+52−21View file
drivers/s390/block/dcssblk.cmodified+5−6View file
fs/Kconfigmodified+2−1View file
fs/block_dev.cmodified+7−8View file
fs/cifs/file.cmodified+4−4View file
fs/dax.cmodified+197−104View file
fs/fs-writeback.cmodified+0−2View file
fs/hugetlbfs/inode.cmodified+76−67View file
fs/proc/page.cmodified+2−2View file
fs/proc/task_mmu.cmodified+35−20View file
fs/stat.cmodified+1−1View file
include/asm-generic/pgtable.hmodified+4−11View file
include/asm-generic/sections.hmodified+65−0View file
include/linux/blkdev.hmodified+17−3View file
include/linux/console.hmodified+1−0View file
include/linux/err.hmodified+1−1View file
include/linux/huge_mm.hmodified+37−42View file
include/linux/hugetlb.hmodified+1−0View file
include/linux/io.hmodified+0−15View file
include/linux/kdev_t.hmodified+0−5View file
include/linux/kernel.hmodified+18−18View file
include/linux/kvm_host.hmodified+19−18View file
include/linux/kvm_types.hmodified+1−1View file
include/linux/list.hmodified+11−0View file
include/linux/memblock.hmodified+9−9View file
include/linux/memcontrol.hmodified+10−6View file
include/linux/memory_hotplug.hmodified+2−1View file
include/linux/memremap.hadded+114−0View file
include/linux/mm.hmodified+115−84View file
include/linux/mm_types.hmodified+11−14View file
include/linux/mmdebug.hmodified+6−0View file
include/linux/page-flags.hmodified+173−113View file
include/linux/pagemap.hmodified+20−18View file
include/linux/pfn.hmodified+9−0View file
include/linux/pfn_t.hadded+102−0View file
include/linux/poison.hmodified+5−1View file
include/linux/printk.hmodified+6−6View file
include/linux/rmap.hmodified+32−5View file
include/linux/swap.hmodified+3−1View file
include/linux/vm_event_item.hmodified+4−1View file
include/trace/events/huge_memory.hmodified+1−0View file
include/uapi/asm-generic/mman-common.hmodified+1−0View file
init/Kconfigmodified+1−1View file
kernel/events/uprobes.cmodified+6−5View file
kernel/futex.cmodified+15−50View file
kernel/memremap.cmodified+210−9View file
kernel/panic.cmodified+1−2View file
kernel/printk/printk.cmodified+62−5View file
kernel/stop_machine.cmodified+0−4View file
lib/Kconfig.debugmodified+8−1View file
lib/kasprintf.cmodified+6−4View file
lib/list_debug.cmodified+9−0View file
lib/test_printf.cmodified+109−12View file
lib/vsprintf.cmodified+145−107View file
mm/debug.cmodified+4−4View file
mm/filemap.cmodified+14−11View file
mm/gup.cmodified+109−63View file
mm/huge_memory.cmodified+1017−633View file
mm/hugetlb.cmodified+6−6View file
mm/internal.hmodified+22−48View file
mm/ksm.cmodified+19−50View file
mm/madvise.cmodified+201−0View file
mm/memcontrol.cmodified+41−65View file
mm/memory-failure.cmodified+58−67View file
mm/memory.cmodified+49−52View file
mm/memory_hotplug.cmodified+48−19View file
mm/mempolicy.cmodified+40−5View file
mm/migrate.cmodified+13−8View file
mm/mincore.cmodified+1−1View file
mm/mlock.cmodified+20−7View file
mm/mmap.cmodified+20−5View file
mm/mprotect.cmodified+4−3View file
mm/mremap.cmodified+7−8View file
mm/page_alloc.cmodified+40−7View file
mm/page_idle.cmodified+14−13View file
mm/page_isolation.cmodified+4−2View file
mm/pagewalk.cmodified+1−1View file
mm/pgtable-generic.cmodified+1−13View file
mm/rmap.cmodified+258−111View file
mm/shmem.cmodified+14−11View file
mm/slub.cmodified+2−0View file
mm/sparse-vmemmap.cmodified+74−2View file
mm/sparse.cmodified+5−3View file
mm/swap.cmodified+60−259View file
mm/swap_state.cmodified+4−5View file
mm/swapfile.cmodified+14−20View file
mm/userfaultfd.cmodified+4−4View file
mm/util.cmodified+20−4View file
mm/vmalloc.cmodified+2−2View file
mm/vmscan.cmodified+13−3View file
mm/vmstat.cmodified+4−1View file
scripts/tags.shmodified+0−2View file
virt/kvm/kvm_main.cmodified+24−23View file

Only the first 600 diff lines are shown. Download the complete patch.

Documentation/features/vm/pmdp_splitting_flush/arch-support.txt

View before deletion
diff --git a/Documentation/features/vm/pmdp_splitting_flush/arch-support.txt b/Documentation/features/vm/pmdp_splitting_flush/arch-support.txt
deleted file mode 100644
index 26f74b4..0000000
--- a/Documentation/features/vm/pmdp_splitting_flush/arch-support.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-#
-# Feature name: pmdp_splitting_flush
-# Kconfig: __HAVE_ARCH_PMDP_SPLITTING_FLUSH
-# description: arch supports the pmdp_splitting_flush() VM API
-#
- -----------------------
- | arch |status|
- -----------------------
- | alpha: | TODO |
- | arc: | TODO |
- | arm: | ok |
- | arm64: | ok |
- | avr32: | TODO |
- | blackfin: | TODO |
- | c6x: | TODO |
- | cris: | TODO |
- | frv: | TODO |
- | h8300: | TODO |
- | hexagon: | TODO |
- | ia64: | TODO |
- | m32r: | TODO |
- | m68k: | TODO |
- | metag: | TODO |
- | microblaze: | TODO |
- | mips: | ok |
- | mn10300: | TODO |
- | nios2: | TODO |
- | openrisc: | TODO |
- | parisc: | TODO |
- | powerpc: | ok |
- | s390: | ok |
- | score: | TODO |
- | sh: | TODO |
- | sparc: | TODO |
- | tile: | TODO |
- | um: | TODO |
- | unicore32: | TODO |
- | x86: | ok |
- | xtensa: | TODO |
- -----------------------

Documentation/printk-formats.txt

View file
diff --git a/Documentation/printk-formats.txt b/Documentation/printk-formats.txt
index 6389551..5d1128b 100644
--- a/Documentation/printk-formats.txt
+++ b/Documentation/printk-formats.txt
@@ -306,15 +306,6 @@ Network device features:
Passed by reference.
-Command from struct task_struct
-
- %pT ls
-
- For printing executable name excluding path from struct
- task_struct.
-
- Passed by reference.
-
If you add other %p extensions, please extend lib/test_printf.c with
one or more test cases, if at all feasible.

Documentation/vm/transhuge.txt

View file
diff --git a/Documentation/vm/transhuge.txt b/Documentation/vm/transhuge.txt
index 8a28268..21cf34f 100644
--- a/Documentation/vm/transhuge.txt
+++ b/Documentation/vm/transhuge.txt
@@ -35,10 +35,10 @@ miss is going to run faster.
== Design ==
-- "graceful fallback": mm components which don't have transparent
- hugepage knowledge fall back to breaking a transparent hugepage and
- working on the regular pages and their respective regular pmd/pte
- mappings
+- "graceful fallback": mm components which don't have transparent hugepage
+ knowledge fall back to breaking huge pmd mapping into table of ptes and,
+ if necessary, split a transparent hugepage. Therefore these components
+ can continue working on the regular pages or regular pte mappings.
- if a hugepage allocation fails because of memory fragmentation,
regular pages should be gracefully allocated instead and mixed in
@@ -221,9 +221,18 @@ thp_collapse_alloc_failed is incremented if khugepaged found a range
of pages that should be collapsed into one huge page but failed
the allocation.
-thp_split is incremented every time a huge page is split into base
+thp_split_page is incremented every time a huge page is split into base
pages. This can happen for a variety of reasons but a common
reason is that a huge page is old and is being reclaimed.
+ This action implies splitting all PMD the page mapped with.
+
+thp_split_page_failed is is incremented if kernel fails to split huge
+ page. This can happen if the page was pinned by somebody.
+
+thp_split_pmd is incremented every time a PMD split into table of PTEs.
+ This can happen, for instance, when application calls mprotect() or
+ munmap() on part of huge page. It doesn't split huge page, only
+ page table entry.
thp_zero_page_alloc is incremented every time a huge zero page is
successfully allocated. It includes allocations which where
@@ -274,10 +283,8 @@ is complete, so they won't ever notice the fact the page is huge. But
if any driver is going to mangle over the page structure of the tail
page (like for checking page->mapping or other bits that are relevant
for the head page and not the tail page), it should be updated to jump
-to check head page instead (while serializing properly against
-split_huge_page() to avoid the head and tail pages to disappear from
-under it, see the futex code to see an example of that, hugetlbfs also
-needed special handling in futex code for similar reasons).
+to check head page instead. Taking reference on any head/tail page would
+prevent page from being split by anyone.
NOTE: these aren't new constraints to the GUP API, and they match the
same constrains that applies to hugetlbfs too, so any driver capable
@@ -312,9 +319,9 @@ unaffected. libhugetlbfs will also work fine as usual.
== Graceful fallback ==
Code walking pagetables but unware about huge pmds can simply call
-split_huge_page_pmd(vma, addr, pmd) where the pmd is the one returned by
+split_huge_pmd(vma, pmd, addr) where the pmd is the one returned by
pmd_offset. It's trivial to make the code transparent hugepage aware
-by just grepping for "pmd_offset" and adding split_huge_page_pmd where
+by just grepping for "pmd_offset" and adding split_huge_pmd where
missing after pmd_offset returns the pmd. Thanks to the graceful
fallback design, with a one liner change, you can avoid to write
hundred if not thousand of lines of complex code to make your code
@@ -323,7 +330,8 @@ hugepage aware.
If you're not walking pagetables but you run into a physical hugepage
but you can't handle it natively in your code, you can split it by
calling split_huge_page(page). This is what the Linux VM does before
-it tries to swapout the hugepage for example.
+it tries to swapout the hugepage for example. split_huge_page() can fail
+if the page is pinned and you must handle this correctly.
Example to make mremap.c transparent hugepage aware with a one liner
change:
@@ -335,14 +343,14 @@ diff --git a/mm/mremap.c b/mm/mremap.c
return NULL;
pmd = pmd_offset(pud, addr);
-+ split_huge_page_pmd(vma, addr, pmd);
++ split_huge_pmd(vma, pmd, addr);
if (pmd_none_or_clear_bad(pmd))
return NULL;
== Locking in hugepage aware code ==
We want as much code as possible hugepage aware, as calling
-split_huge_page() or split_huge_page_pmd() has a cost.
+split_huge_page() or split_huge_pmd() has a cost.
To make pagetable walks huge pmd aware, all you need to do is to call
pmd_trans_huge() on the pmd returned by pmd_offset. You must hold the
@@ -351,47 +359,80 @@ created from under you by khugepaged (khugepaged collapse_huge_page
takes the mmap_sem in write mode in addition to the anon_vma lock). If
pmd_trans_huge returns false, you just fallback in the old code
paths. If instead pmd_trans_huge returns true, you have to take the
-mm->page_table_lock and re-run pmd_trans_huge. Taking the
-page_table_lock will prevent the huge pmd to be converted into a
-regular pmd from under you (split_huge_page can run in parallel to the
+page table lock (pmd_lock()) and re-run pmd_trans_huge. Taking the
+page table lock will prevent the huge pmd to be converted into a
+regular pmd from under you (split_huge_pmd can run in parallel to the
pagetable walk). If the second pmd_trans_huge returns false, you
-should just drop the page_table_lock and fallback to the old code as
-before. Otherwise you should run pmd_trans_splitting on the pmd. In
-case pmd_trans_splitting returns true, it means split_huge_page is
-already in the middle of splitting the page. So if pmd_trans_splitting
-returns true it's enough to drop the page_table_lock and call
-wait_split_huge_page and then fallback the old code paths. You are
-guaranteed by the time wait_split_huge_page returns, the pmd isn't
-huge anymore. If pmd_trans_splitting returns false, you can proceed to
-process the huge pmd and the hugepage natively. Once finished you can
-drop the page_table_lock.
-
-== compound_lock, get_user_pages and put_page ==
+should just drop the page table lock and fallback to the old code as
+before. Otherwise you can proceed to process the huge pmd and the
+hugepage natively. Once finished you can drop the page table lock.
+
+== Refcounts and transparent huge pages ==
+
+Refcounting on THP is mostly consistent with refcounting on other compound
+pages:
+
+ - get_page()/put_page() and GUP operate in head page's ->_count.
+
+ - ->_count in tail pages is always zero: get_page_unless_zero() never
+ succeed on tail pages.
+
+ - map/unmap of the pages with PTE entry increment/decrement ->_mapcount
+ on relevant sub-page of the compound page.
+
+ - map/unmap of the whole compound page accounted in compound_mapcount
+ (stored in first tail page).
+
+PageDoubleMap() indicates that ->_mapcount in all subpages is offset up by one.
+This additional reference is required to get race-free detection of unmap of
+subpages when we have them mapped with both PMDs and PTEs.
+
+This is optimization required to lower overhead of per-subpage mapcount
+tracking. The alternative is alter ->_mapcount in all subpages on each
+map/unmap of the whole compound page.
+
+We set PG_double_map when a PMD of the page got split for the first time,
+but still have PMD mapping. The addtional references go away with last
+compound_mapcount.
split_huge_page internally has to distribute the refcounts in the head
-page to the tail pages before clearing all PG_head/tail bits from the
-page structures. It can do that easily for refcounts taken by huge pmd
-mappings. But the GUI API as created by hugetlbfs (that returns head
-and tail pages if running get_user_pages on an address backed by any
-hugepage), requires the refcount to be accounted on the tail pages and
-not only in the head pages, if we want to be able to run
-split_huge_page while there are gup pins established on any tail
-page. Failure to be able to run split_huge_page if there's any gup pin
-on any tail page, would mean having to split all hugepages upfront in
-get_user_pages which is unacceptable as too many gup users are
-performance critical and they must work natively on hugepages like
-they work natively on hugetlbfs already (hugetlbfs is simpler because
-hugetlbfs pages cannot be split so there wouldn't be requirement of
-accounting the pins on the tail pages for hugetlbfs). If we wouldn't
-account the gup refcounts on the tail pages during gup, we won't know
-anymore which tail page is pinned by gup and which is not while we run
-split_huge_page. But we still have to add the gup pin to the head page
-too, to know when we can free the compound page in case it's never
-split during its lifetime. That requires changing not just
-get_page, but put_page as well so that when put_page runs on a tail
-page (and only on a tail page) it will find its respective head page,
-and then it will decrease the head page refcount in addition to the
-tail page refcount. To obtain a head page reliably and to decrease its
-refcount without race conditions, put_page has to serialize against
-__split_huge_page_refcount using a special per-page lock called
-compound_lock.
+page to the tail pages before clearing all PG_head/tail bits from the page
+structures. It can be done easily for refcounts taken by page table
+entries. But we don't have enough information on how to distribute any
+additional pins (i.e. from get_user_pages). split_huge_page() fails any
+requests to split pinned huge page: it expects page count to be equal to
+sum of mapcount of all sub-pages plus one (split_huge_page caller must
+have reference for head page).
+
+split_huge_page uses migration entries to stabilize page->_count and
+page->_mapcount.
+
+We safe against physical memory scanners too: the only legitimate way
+scanner can get reference to a page is get_page_unless_zero().
+
+All tail pages has zero ->_count until atomic_add(). It prevent scanner
+from geting reference to tail page up to the point. After the atomic_add()
+we don't care about ->_count value. We already known how many references
+with should uncharge from head page.
+
+For head page get_page_unless_zero() will succeed and we don't mind. It's
+clear where reference should go after split: it will stay on head page.
+
+Note that split_huge_pmd() doesn't have any limitation on refcounting:
+pmd can be split at any point and never fails.
+
+== Partial unmap and deferred_split_huge_page() ==
+
+Unmapping part of THP (with munmap() or other way) is not going to free
+memory immediately. Instead, we detect that a subpage of THP is not in use
+in page_remove_rmap() and queue the THP for splitting if memory pressure
+comes. Splitting will free up unused subpages.
+
+Splitting the page right away is not an option due to locking context in
+the place where we can detect partial unmap. It's also might be
+counterproductive since in many cases partial unmap unmap happens during
+exit(2) if an THP crosses VMA boundary.
+
+Function deferred_split_huge_page() is used to queue page for splitting.
+The splitting itself will happen when we get memory pressure via shrinker
+interface.

arch/alpha/include/uapi/asm/mman.h

View file
diff --git a/arch/alpha/include/uapi/asm/mman.h b/arch/alpha/include/uapi/asm/mman.h
index f2f9496..ab336c0 100644
--- a/arch/alpha/include/uapi/asm/mman.h
+++ b/arch/alpha/include/uapi/asm/mman.h
@@ -47,8 +47,10 @@
#define MADV_WILLNEED 3 /* will need these pages */
#define MADV_SPACEAVAIL 5 /* ensure resources are available */
#define MADV_DONTNEED 6 /* don't need these pages */
+#define MADV_FREE 7 /* free pages only if memory pressure */
/* common/generic parameters */
+#define MADV_FREE 8 /* free pages only if memory pressure */
#define MADV_REMOVE 9 /* remove these pages & resources */
#define MADV_DONTFORK 10 /* don't inherit across fork */
#define MADV_DOFORK 11 /* do inherit across fork */

arch/arc/Kconfig

View file
diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig
index 6312f60..76dde9d 100644
--- a/arch/arc/Kconfig
+++ b/arch/arc/Kconfig
@@ -73,9 +73,6 @@ config STACKTRACE_SUPPORT
def_bool y
select STACKTRACE
-config HAVE_LATENCYTOP_SUPPORT
- def_bool y
-
config HAVE_ARCH_TRANSPARENT_HUGEPAGE
def_bool y
depends on ARC_MMU_V4

arch/arc/mm/cache.c

View file
diff --git a/arch/arc/mm/cache.c b/arch/arc/mm/cache.c
index ff7ff6c..b65f797 100644
--- a/arch/arc/mm/cache.c
+++ b/arch/arc/mm/cache.c
@@ -617,7 +617,7 @@ void flush_dcache_page(struct page *page)
*/
if (!mapping_mapped(mapping)) {
clear_bit(PG_dc_clean, &page->flags);
- } else if (page_mapped(page)) {
+ } else if (page_mapcount(page)) {
/* kernel reading from page with U-mapping */
phys_addr_t paddr = (unsigned long)page_address(page);
@@ -857,7 +857,7 @@ void copy_user_highpage(struct page *to, struct page *from,
* For !VIPT cache, all of this gets compiled out as
* addr_not_cache_congruent() is 0
*/
- if (page_mapped(from) && addr_not_cache_congruent(kfrom, u_vaddr)) {
+ if (page_mapcount(from) && addr_not_cache_congruent(kfrom, u_vaddr)) {
__flush_dcache_page((unsigned long)kfrom, u_vaddr);
clean_src_k_mappings = 1;
}

arch/arm/Kconfig

View file
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 4e489cc..6a889af 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -168,11 +168,6 @@ config STACKTRACE_SUPPORT
bool
default y
-config HAVE_LATENCYTOP_SUPPORT
- bool
- depends on !SMP
- default y
-
config LOCKDEP_SUPPORT
bool
default y

arch/arm/include/asm/kvm_mmu.h

View file
diff --git a/arch/arm/include/asm/kvm_mmu.h b/arch/arm/include/asm/kvm_mmu.h
index 9203c21..a520b79 100644
--- a/arch/arm/include/asm/kvm_mmu.h
+++ b/arch/arm/include/asm/kvm_mmu.h
@@ -182,7 +182,8 @@ static inline bool vcpu_has_cache_enabled(struct kvm_vcpu *vcpu)
return (vcpu->arch.cp15[c1_SCTLR] & 0b101) == 0b101;
}
-static inline void __coherent_cache_guest_page(struct kvm_vcpu *vcpu, pfn_t pfn,
+static inline void __coherent_cache_guest_page(struct kvm_vcpu *vcpu,
+ kvm_pfn_t pfn,
unsigned long size,
bool ipa_uncached)
{
@@ -246,7 +247,7 @@ static inline void __kvm_flush_dcache_pte(pte_t pte)
static inline void __kvm_flush_dcache_pmd(pmd_t pmd)
{
unsigned long size = PMD_SIZE;
- pfn_t pfn = pmd_pfn(pmd);
+ kvm_pfn_t pfn = pmd_pfn(pmd);
while (size) {
void *va = kmap_atomic_pfn(pfn);

arch/arm/include/asm/pgtable-3level.h

View file
diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h
index a745a2a..dc46398 100644
--- a/arch/arm/include/asm/pgtable-3level.h
+++ b/arch/arm/include/asm/pgtable-3level.h
@@ -88,7 +88,6 @@
#define L_PMD_SECT_VALID (_AT(pmdval_t, 1) << 0)
#define L_PMD_SECT_DIRTY (_AT(pmdval_t, 1) << 55)
-#define L_PMD_SECT_SPLITTING (_AT(pmdval_t, 1) << 56)
#define L_PMD_SECT_NONE (_AT(pmdval_t, 1) << 57)
#define L_PMD_SECT_RDONLY (_AT(pteval_t, 1) << 58)
@@ -232,13 +231,6 @@ static inline pte_t pte_mkspecial(pte_t pte)
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
#define pmd_trans_huge(pmd) (pmd_val(pmd) && !pmd_table(pmd))
-#define pmd_trans_splitting(pmd) (pmd_isset((pmd), L_PMD_SECT_SPLITTING))
-
-#ifdef CONFIG_HAVE_RCU_TABLE_FREE
-#define __HAVE_ARCH_PMDP_SPLITTING_FLUSH
-void pmdp_splitting_flush(struct vm_area_struct *vma, unsigned long address,
- pmd_t *pmdp);
-#endif
#endif
#define PMD_BIT_FUNC(fn,op) \
@@ -246,9 +238,9 @@ static inline pmd_t pmd_##fn(pmd_t pmd) { pmd_val(pmd) op; return pmd; }
PMD_BIT_FUNC(wrprotect, |= L_PMD_SECT_RDONLY);
PMD_BIT_FUNC(mkold, &= ~PMD_SECT_AF);
-PMD_BIT_FUNC(mksplitting, |= L_PMD_SECT_SPLITTING);
PMD_BIT_FUNC(mkwrite, &= ~L_PMD_SECT_RDONLY);
PMD_BIT_FUNC(mkdirty, |= L_PMD_SECT_DIRTY);
+PMD_BIT_FUNC(mkclean, &= ~L_PMD_SECT_DIRTY);
PMD_BIT_FUNC(mkyoung, |= PMD_SECT_AF);
#define pmd_mkhuge(pmd) (__pmd(pmd_val(pmd) & ~PMD_TABLE_BIT))

arch/arm/kvm/mmu.c

View file
diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c
index 22f7fa0..aba61fd 100644
--- a/arch/arm/kvm/mmu.c
+++ b/arch/arm/kvm/mmu.c
@@ -992,9 +992,9 @@ out:
return ret;
}
-static bool transparent_hugepage_adjust(pfn_t *pfnp, phys_addr_t *ipap)
+static bool transparent_hugepage_adjust(kvm_pfn_t *pfnp, phys_addr_t *ipap)
{
- pfn_t pfn = *pfnp;
+ kvm_pfn_t pfn = *pfnp;
gfn_t gfn = *ipap >> PAGE_SHIFT;
if (PageTransCompound(pfn_to_page(pfn))) {
@@ -1201,7 +1201,7 @@ void kvm_arch_mmu_enable_log_dirty_pt_masked(struct kvm *kvm,
kvm_mmu_write_protect_pt_masked(kvm, slot, gfn_offset, mask);
}
-static void coherent_cache_guest_page(struct kvm_vcpu *vcpu, pfn_t pfn,
+static void coherent_cache_guest_page(struct kvm_vcpu *vcpu, kvm_pfn_t pfn,
unsigned long size, bool uncached)
{
__coherent_cache_guest_page(vcpu, pfn, size, uncached);
@@ -1218,7 +1218,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
struct kvm *kvm = vcpu->kvm;
struct kvm_mmu_memory_cache *memcache = &vcpu->arch.mmu_page_cache;
struct vm_area_struct *vma;
- pfn_t pfn;
+ kvm_pfn_t pfn;
pgprot_t mem_type = PAGE_S2;
bool fault_ipa_uncached;
bool logging_active = memslot_is_logging(memslot);
@@ -1346,7 +1346,7 @@ static void handle_access_fault(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa)
{
pmd_t *pmd;
pte_t *pte;
- pfn_t pfn;
+ kvm_pfn_t pfn;
bool pfn_valid = false;
trace_kvm_access_fault(fault_ipa);

arch/arm/lib/uaccess_with_memcpy.c

View file
diff --git a/arch/arm/lib/uaccess_with_memcpy.c b/arch/arm/lib/uaccess_with_memcpy.c
index 588bbc2..6bd1089 100644
--- a/arch/arm/lib/uaccess_with_memcpy.c
+++ b/arch/arm/lib/uaccess_with_memcpy.c
@@ -52,14 +52,13 @@ pin_page_for_write(const void __user *_addr, pte_t **ptep, spinlock_t **ptlp)
*
* Lock the page table for the destination and check
* to see that it's still huge and whether or not we will
- * need to fault on write, or if we have a splitting THP.
+ * need to fault on write.
*/
if (unlikely(pmd_thp_or_huge(*pmd))) {
ptl = &current->mm->page_table_lock;
spin_lock(ptl);
if (unlikely(!pmd_thp_or_huge(*pmd)
- || pmd_hugewillfault(*pmd)
- || pmd_trans_splitting(*pmd))) {
+ || pmd_hugewillfault(*pmd))) {
spin_unlock(ptl);
return 0;
}

arch/arm/mm/flush.c

View file
diff --git a/arch/arm/mm/flush.c b/arch/arm/mm/flush.c
index 1ec8e75..d0ba355 100644
--- a/arch/arm/mm/flush.c
+++ b/arch/arm/mm/flush.c
@@ -330,7 +330,7 @@ void flush_dcache_page(struct page *page)
mapping = page_mapping(page);
if (!cache_ops_need_broadcast() &&
- mapping && !page_mapped(page))
+ mapping && !page_mapcount(page))
clear_bit(PG_dcache_clean, &page->flags);
else {
__flush_dcache_page(mapping, page);
@@ -415,18 +415,3 @@ void __flush_anon_page(struct vm_area_struct *vma, struct page *page, unsigned l
*/
__cpuc_flush_dcache_area(page_address(page), PAGE_SIZE);
}
-
-#ifdef CONFIG_TRANSPARENT_HUGEPAGE
-#ifdef CONFIG_HAVE_RCU_TABLE_FREE
-void pmdp_splitting_flush(struct vm_area_struct *vma, unsigned long address,
- pmd_t *pmdp)
-{
- pmd_t pmd = pmd_mksplitting(*pmdp);
- VM_BUG_ON(address & ~PMD_MASK);
- set_pmd_at(vma->vm_mm, address, pmdp, pmd);
-
- /* dummy IPI to serialise against fast_gup */
- kick_all_cpus_sync();
-}
-#endif /* CONFIG_HAVE_RCU_TABLE_FREE */
-#endif /* CONFIG_TRANSPARENT_HUGEPAGE */

arch/arm64/include/asm/kvm_mmu.h

View file
diff --git a/arch/arm64/include/asm/kvm_mmu.h b/arch/arm64/include/asm/kvm_mmu.h
index 0bf8b43..7364339 100644
--- a/arch/arm64/include/asm/kvm_mmu.h
+++ b/arch/arm64/include/asm/kvm_mmu.h
@@ -230,7 +230,8 @@ static inline bool vcpu_has_cache_enabled(struct kvm_vcpu *vcpu)
return (vcpu_sys_reg(vcpu, SCTLR_EL1) & 0b101) == 0b101;
}
-static inline void __coherent_cache_guest_page(struct kvm_vcpu *vcpu, pfn_t pfn,
+static inline void __coherent_cache_guest_page(struct kvm_vcpu *vcpu,
+ kvm_pfn_t pfn,
unsigned long size,
bool ipa_uncached)
{

arch/arm64/include/asm/pgtable.h

View file
diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
index 69d2e2f..2d545d7 100644
--- a/arch/arm64/include/asm/pgtable.h
+++ b/arch/arm64/include/asm/pgtable.h
@@ -353,21 +353,14 @@ static inline pgprot_t mk_sect_prot(pgprot_t prot)
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
#define pmd_trans_huge(pmd) (pmd_val(pmd) && !(pmd_val(pmd) & PMD_TABLE_BIT))
-#define pmd_trans_splitting(pmd) pte_special(pmd_pte(pmd))
-#ifdef CONFIG_HAVE_RCU_TABLE_FREE
-#define __HAVE_ARCH_PMDP_SPLITTING_FLUSH
-struct vm_area_struct;
-void pmdp_splitting_flush(struct vm_area_struct *vma, unsigned long address,
- pmd_t *pmdp);
-#endif /* CONFIG_HAVE_RCU_TABLE_FREE */
#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
#define pmd_dirty(pmd) pte_dirty(pmd_pte(pmd))
#define pmd_young(pmd) pte_young(pmd_pte(pmd))
#define pmd_wrprotect(pmd) pte_pmd(pte_wrprotect(pmd_pte(pmd)))
-#define pmd_mksplitting(pmd) pte_pmd(pte_mkspecial(pmd_pte(pmd)))
#define pmd_mkold(pmd) pte_pmd(pte_mkold(pmd_pte(pmd)))
#define pmd_mkwrite(pmd) pte_pmd(pte_mkwrite(pmd_pte(pmd)))
+#define pmd_mkclean(pmd) pte_pmd(pte_mkclean(pmd_pte(pmd)))
#define pmd_mkdirty(pmd) pte_pmd(pte_mkdirty(pmd_pte(pmd)))
#define pmd_mkyoung(pmd) pte_pmd(pte_mkyoung(pmd_pte(pmd)))
#define pmd_mknotpresent(pmd) (__pmd(pmd_val(pmd) & ~PMD_TYPE_MASK))

arch/arm64/mm/flush.c

View file
diff --git a/arch/arm64/mm/flush.c b/arch/arm64/mm/flush.c
index 46649d6..60585bd 100644
--- a/arch/arm64/mm/flush.c
+++ b/arch/arm64/mm/flush.c
@@ -102,19 +102,3 @@ EXPORT_SYMBOL(flush_dcache_page);
* Additional functions defined in assembly.
*/
EXPORT_SYMBOL(flush_icache_range);
-
-#ifdef CONFIG_TRANSPARENT_HUGEPAGE
-#ifdef CONFIG_HAVE_RCU_TABLE_FREE
-void pmdp_splitting_flush(struct vm_area_struct *vma, unsigned long address,
- pmd_t *pmdp)
-{
- pmd_t pmd = pmd_mksplitting(*pmdp);
-
- VM_BUG_ON(address & ~PMD_MASK);
- set_pmd_at(vma->vm_mm, address, pmdp, pmd);
-
- /* dummy IPI to serialise against fast_gup */
- kick_all_cpus_sync();
-}
-#endif /* CONFIG_HAVE_RCU_TABLE_FREE */
-#endif /* CONFIG_TRANSPARENT_HUGEPAGE */

arch/avr32/include/asm/page.h

View file
diff --git a/arch/avr32/include/asm/page.h b/arch/avr32/include/asm/page.h
index f805d1c..c5d2a3e 100644
--- a/arch/avr32/include/asm/page.h
+++ b/arch/avr32/include/asm/page.h
@@ -83,11 +83,9 @@ static inline int get_order(unsigned long size)
#ifndef CONFIG_NEED_MULTIPLE_NODES
-#define PHYS_PFN_OFFSET (CONFIG_PHYS_OFFSET >> PAGE_SHIFT)
+#define ARCH_PFN_OFFSET (CONFIG_PHYS_OFFSET >> PAGE_SHIFT)
-#define pfn_to_page(pfn) (mem_map + ((pfn) - PHYS_PFN_OFFSET))
-#define page_to_pfn(page) ((unsigned long)((page) - mem_map) + PHYS_PFN_OFFSET)
-#define pfn_valid(pfn) ((pfn) >= PHYS_PFN_OFFSET && (pfn) < (PHYS_PFN_OFFSET + max_mapnr))
+#define pfn_valid(pfn) ((pfn) >= ARCH_PFN_OFFSET && (pfn) < (ARCH_PFN_OFFSET + max_mapnr))
#endif /* CONFIG_NEED_MULTIPLE_NODES */
#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
@@ -101,4 +99,6 @@ static inline int get_order(unsigned long size)
*/
#define HIGHMEM_START 0x20000000UL
+#include <asm-generic/memory_model.h>
+
#endif /* __ASM_AVR32_PAGE_H */

arch/frv/include/asm/page.h

View file
diff --git a/arch/frv/include/asm/page.h b/arch/frv/include/asm/page.h
index 8c97068..688d807 100644
--- a/arch/frv/include/asm/page.h
+++ b/arch/frv/include/asm/page.h
@@ -34,7 +34,7 @@ typedef struct page *pgtable_t;
#define pgprot_val(x) ((x).pgprot)
#define __pte(x) ((pte_t) { (x) } )

This diff is incomplete. Download the complete patch.

arch/ia64/include/asm/page.h

View file

This diff is incomplete. Download the complete patch.

arch/metag/Kconfig

View file

This diff is incomplete. Download the complete patch.

arch/microblaze/Kconfig

View file

This diff is incomplete. Download the complete patch.

arch/mips/include/asm/kvm_host.h

View file

This diff is incomplete. Download the complete patch.

arch/mips/include/asm/pgtable-bits.h

View file

This diff is incomplete. Download the complete patch.

arch/mips/include/asm/pgtable.h

View file

This diff is incomplete. Download the complete patch.

arch/mips/include/uapi/asm/mman.h

View file

This diff is incomplete. Download the complete patch.

arch/mips/kvm/emulate.c

View file

This diff is incomplete. Download the complete patch.

arch/mips/kvm/tlb.c

View file

This diff is incomplete. Download the complete patch.

arch/mips/mm/c-r4k.c

View file

This diff is incomplete. Download the complete patch.

arch/mips/mm/cache.c

View file

This diff is incomplete. Download the complete patch.

arch/mips/mm/gup.c

View file

This diff is incomplete. Download the complete patch.

arch/mips/mm/init.c

View file

This diff is incomplete. Download the complete patch.

arch/mips/mm/pgtable-64.c

View file

This diff is incomplete. Download the complete patch.

arch/mips/mm/tlbex.c

View file

This diff is incomplete. Download the complete patch.

arch/mn10300/include/asm/page.h

View file

This diff is incomplete. Download the complete patch.

arch/parisc/Kconfig

View file

This diff is incomplete. Download the complete patch.

arch/parisc/include/uapi/asm/mman.h

View file

This diff is incomplete. Download the complete patch.

arch/powerpc/Kconfig

View file

This diff is incomplete. Download the complete patch.

arch/powerpc/include/asm/book3s/64/hash-64k.h

View file

This diff is incomplete. Download the complete patch.

arch/powerpc/include/asm/book3s/64/hash.h

View file

This diff is incomplete. Download the complete patch.

arch/powerpc/include/asm/book3s/64/pgtable.h

View file

This diff is incomplete. Download the complete patch.

arch/powerpc/include/asm/kvm_book3s.h

View file

This diff is incomplete. Download the complete patch.

arch/powerpc/include/asm/kvm_ppc.h

View file

This diff is incomplete. Download the complete patch.

arch/powerpc/kvm/book3s.c

View file

This diff is incomplete. Download the complete patch.

arch/powerpc/kvm/book3s_32_mmu_host.c

View file

This diff is incomplete. Download the complete patch.

arch/powerpc/kvm/book3s_64_mmu_host.c

View file

This diff is incomplete. Download the complete patch.

arch/powerpc/kvm/e500.h

View file

This diff is incomplete. Download the complete patch.

arch/powerpc/kvm/e500_mmu_host.c

View file

This diff is incomplete. Download the complete patch.

arch/powerpc/kvm/trace_pr.h

View file

This diff is incomplete. Download the complete patch.

arch/powerpc/mm/hugepage-hash64.c

View file

This diff is incomplete. Download the complete patch.

arch/powerpc/mm/hugetlbpage.c

View file

This diff is incomplete. Download the complete patch.

arch/powerpc/mm/pgtable_64.c

View file

This diff is incomplete. Download the complete patch.

arch/powerpc/mm/subpage-prot.c

View file

This diff is incomplete. Download the complete patch.

arch/powerpc/sysdev/axonram.c

View file

This diff is incomplete. Download the complete patch.

arch/s390/Kconfig

View file

This diff is incomplete. Download the complete patch.

arch/s390/include/asm/pgtable.h

View file

This diff is incomplete. Download the complete patch.

arch/s390/mm/gup.c

View file

This diff is incomplete. Download the complete patch.

arch/s390/mm/pgtable.c

View file

This diff is incomplete. Download the complete patch.

arch/sh/Kconfig

View file

This diff is incomplete. Download the complete patch.

arch/sh/mm/cache-sh4.c

View file

This diff is incomplete. Download the complete patch.

arch/sh/mm/cache.c

View file

This diff is incomplete. Download the complete patch.

arch/sparc/Kconfig

View file

This diff is incomplete. Download the complete patch.

arch/sparc/include/asm/pgtable_64.h

View file

This diff is incomplete. Download the complete patch.

arch/sparc/mm/fault_64.c

View file

This diff is incomplete. Download the complete patch.

arch/sparc/mm/gup.c

View file

This diff is incomplete. Download the complete patch.

arch/tile/include/asm/pgtable.h

View file

This diff is incomplete. Download the complete patch.

arch/um/include/asm/page.h

View file

This diff is incomplete. Download the complete patch.

arch/um/include/asm/pgtable-3level.h

View file

This diff is incomplete. Download the complete patch.

arch/um/include/asm/pgtable.h

View file

This diff is incomplete. Download the complete patch.

arch/unicore32/Kconfig

View file

This diff is incomplete. Download the complete patch.

arch/x86/Kconfig

View file

This diff is incomplete. Download the complete patch.

arch/x86/include/asm/pgtable.h

View file

This diff is incomplete. Download the complete patch.

arch/x86/include/asm/pgtable_types.h

View file

This diff is incomplete. Download the complete patch.

arch/x86/include/asm/pmem.h

View file

This diff is incomplete. Download the complete patch.

arch/x86/kernel/vm86_32.c

View file

This diff is incomplete. Download the complete patch.

arch/x86/kvm/iommu.c

View file

This diff is incomplete. Download the complete patch.

arch/x86/kvm/mmu.c

View file

This diff is incomplete. Download the complete patch.

arch/x86/kvm/mmu_audit.c

View file

This diff is incomplete. Download the complete patch.

arch/x86/kvm/paging_tmpl.h

View file

This diff is incomplete. Download the complete patch.

arch/x86/kvm/vmx.c

View file

This diff is incomplete. Download the complete patch.

arch/x86/kvm/x86.c

View file

This diff is incomplete. Download the complete patch.

arch/x86/mm/gup.c

View file

This diff is incomplete. Download the complete patch.

arch/x86/mm/init_64.c

View file

This diff is incomplete. Download the complete patch.

arch/x86/mm/pat.c

View file

This diff is incomplete. Download the complete patch.

arch/x86/mm/pgtable.c

View file

This diff is incomplete. Download the complete patch.

arch/xtensa/include/uapi/asm/mman.h

View file

This diff is incomplete. Download the complete patch.

arch/xtensa/mm/tlb.c

View file

This diff is incomplete. Download the complete patch.

drivers/base/memory.c

View file

This diff is incomplete. Download the complete patch.

drivers/block/brd.c

View file

This diff is incomplete. Download the complete patch.

drivers/block/zram/zram_drv.c

View file

This diff is incomplete. Download the complete patch.

drivers/gpu/drm/exynos/exynos_drm_gem.c

View file

This diff is incomplete. Download the complete patch.

drivers/gpu/drm/gma500/framebuffer.c

View file

This diff is incomplete. Download the complete patch.

drivers/gpu/drm/msm/msm_gem.c

View file

This diff is incomplete. Download the complete patch.

drivers/gpu/drm/omapdrm/omap_gem.c

View file

This diff is incomplete. Download the complete patch.

drivers/gpu/drm/ttm/ttm_bo_vm.c

View file

This diff is incomplete. Download the complete patch.

drivers/iio/industrialio-core.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/intel/iwlwifi/dvm/calib.c

View file

This diff is incomplete. Download the complete patch.

drivers/nvdimm/pfn_devs.c

View file

This diff is incomplete. Download the complete patch.

drivers/nvdimm/pmem.c

View file

This diff is incomplete. Download the complete patch.

drivers/s390/block/dcssblk.c

View file

This diff is incomplete. Download the complete patch.

fs/Kconfig

View file

This diff is incomplete. Download the complete patch.

fs/block_dev.c

View file

This diff is incomplete. Download the complete patch.

fs/cifs/file.c

View file

This diff is incomplete. Download the complete patch.

fs/dax.c

View file

This diff is incomplete. Download the complete patch.

fs/fs-writeback.c

View file

This diff is incomplete. Download the complete patch.

fs/hugetlbfs/inode.c

View file

This diff is incomplete. Download the complete patch.

fs/proc/page.c

View file

This diff is incomplete. Download the complete patch.

fs/proc/task_mmu.c

View file

This diff is incomplete. Download the complete patch.

fs/stat.c

View file

This diff is incomplete. Download the complete patch.

include/asm-generic/pgtable.h

View file

This diff is incomplete. Download the complete patch.

include/asm-generic/sections.h

View file

This diff is incomplete. Download the complete patch.

include/linux/blkdev.h

View file

This diff is incomplete. Download the complete patch.

include/linux/console.h

View file

This diff is incomplete. Download the complete patch.

include/linux/err.h

View file

This diff is incomplete. Download the complete patch.

include/linux/huge_mm.h

View file

This diff is incomplete. Download the complete patch.

include/linux/hugetlb.h

View file

This diff is incomplete. Download the complete patch.

include/linux/io.h

View file

This diff is incomplete. Download the complete patch.

include/linux/kdev_t.h

View file

This diff is incomplete. Download the complete patch.

include/linux/kernel.h

View file

This diff is incomplete. Download the complete patch.

include/linux/kvm_host.h

View file

This diff is incomplete. Download the complete patch.

include/linux/kvm_types.h

View file

This diff is incomplete. Download the complete patch.

include/linux/list.h

View file

This diff is incomplete. Download the complete patch.

include/linux/memblock.h

View file

This diff is incomplete. Download the complete patch.

include/linux/memcontrol.h

View file

This diff is incomplete. Download the complete patch.

include/linux/memory_hotplug.h

View file

This diff is incomplete. Download the complete patch.

include/linux/memremap.h

View file

This diff is incomplete. Download the complete patch.

include/linux/mm.h

View file

This diff is incomplete. Download the complete patch.

include/linux/mm_types.h

View file

This diff is incomplete. Download the complete patch.

include/linux/mmdebug.h

View file

This diff is incomplete. Download the complete patch.

include/linux/page-flags.h

View file

This diff is incomplete. Download the complete patch.

include/linux/pagemap.h

View file

This diff is incomplete. Download the complete patch.

include/linux/pfn.h

View file

This diff is incomplete. Download the complete patch.

include/linux/pfn_t.h

View file

This diff is incomplete. Download the complete patch.

include/linux/poison.h

View file

This diff is incomplete. Download the complete patch.

include/linux/printk.h

View file

This diff is incomplete. Download the complete patch.

include/linux/rmap.h

View file

This diff is incomplete. Download the complete patch.

include/linux/swap.h

View file

This diff is incomplete. Download the complete patch.

include/linux/vm_event_item.h

View file

This diff is incomplete. Download the complete patch.

include/trace/events/huge_memory.h

View file

This diff is incomplete. Download the complete patch.

include/uapi/asm-generic/mman-common.h

View file

This diff is incomplete. Download the complete patch.

init/Kconfig

View file

This diff is incomplete. Download the complete patch.

kernel/events/uprobes.c

View file

This diff is incomplete. Download the complete patch.

kernel/futex.c

View file

This diff is incomplete. Download the complete patch.

kernel/memremap.c

View file

This diff is incomplete. Download the complete patch.

kernel/panic.c

View file

This diff is incomplete. Download the complete patch.

kernel/printk/printk.c

View file

This diff is incomplete. Download the complete patch.

kernel/stop_machine.c

View file

This diff is incomplete. Download the complete patch.

lib/Kconfig.debug

View file

This diff is incomplete. Download the complete patch.

lib/kasprintf.c

View file

This diff is incomplete. Download the complete patch.

lib/list_debug.c

View file

This diff is incomplete. Download the complete patch.

lib/test_printf.c

View file

This diff is incomplete. Download the complete patch.

lib/vsprintf.c

View file

This diff is incomplete. Download the complete patch.

mm/debug.c

View file

This diff is incomplete. Download the complete patch.

mm/filemap.c

View file

This diff is incomplete. Download the complete patch.

mm/gup.c

View file

This diff is incomplete. Download the complete patch.

mm/huge_memory.c

View file

This diff is incomplete. Download the complete patch.

mm/hugetlb.c

View file

This diff is incomplete. Download the complete patch.

mm/internal.h

View file

This diff is incomplete. Download the complete patch.

mm/ksm.c

View file

This diff is incomplete. Download the complete patch.

mm/madvise.c

View file

This diff is incomplete. Download the complete patch.

mm/memcontrol.c

View file

This diff is incomplete. Download the complete patch.

mm/memory-failure.c

View file

This diff is incomplete. Download the complete patch.

mm/memory.c

View file

This diff is incomplete. Download the complete patch.

mm/memory_hotplug.c

View file

This diff is incomplete. Download the complete patch.

mm/mempolicy.c

View file

This diff is incomplete. Download the complete patch.

mm/migrate.c

View file

This diff is incomplete. Download the complete patch.

mm/mincore.c

View file

This diff is incomplete. Download the complete patch.

mm/mlock.c

View file

This diff is incomplete. Download the complete patch.

mm/mmap.c

View file

This diff is incomplete. Download the complete patch.

mm/mprotect.c

View file

This diff is incomplete. Download the complete patch.

mm/mremap.c

View file

This diff is incomplete. Download the complete patch.

mm/page_alloc.c

View file

This diff is incomplete. Download the complete patch.

mm/page_idle.c

View file

This diff is incomplete. Download the complete patch.

mm/page_isolation.c

View file

This diff is incomplete. Download the complete patch.

mm/pagewalk.c

View file

This diff is incomplete. Download the complete patch.

mm/pgtable-generic.c

View file

This diff is incomplete. Download the complete patch.

mm/rmap.c

View file

This diff is incomplete. Download the complete patch.

mm/shmem.c

View file

This diff is incomplete. Download the complete patch.

mm/slub.c

View file

This diff is incomplete. Download the complete patch.

mm/sparse-vmemmap.c

View file

This diff is incomplete. Download the complete patch.

mm/sparse.c

View file

This diff is incomplete. Download the complete patch.

mm/swap.c

View file

This diff is incomplete. Download the complete patch.

mm/swap_state.c

View file

This diff is incomplete. Download the complete patch.

mm/swapfile.c

View file

This diff is incomplete. Download the complete patch.

mm/userfaultfd.c

View file

This diff is incomplete. Download the complete patch.

mm/util.c

View file

This diff is incomplete. Download the complete patch.

mm/vmalloc.c

View file

This diff is incomplete. Download the complete patch.

mm/vmscan.c

View file

This diff is incomplete. Download the complete patch.

mm/vmstat.c

View file

This diff is incomplete. Download the complete patch.

scripts/tags.sh

View file

This diff is incomplete. Download the complete patch.

virt/kvm/kvm_main.c

View file

This diff is incomplete. Download the complete patch.