linux_dsm_epyc7002/arch/sparc/mm
Mike Kravetz 1e953d846a sparc64 mm: Fix more TSB sizing issues
Commit af1b1a9b36 ("sparc64 mm: Fix base TSB sizing when hugetlb
pages are used") addressed the difference between hugetlb and THP
pages when computing TSB sizes.  The following additional issues
were also discovered while working with the code.

In order to save memory, THP makes use of a huge zero page.  This huge
zero page does not count against a task's RSS, but it does consume TSB
entries.  This is similar to hugetlb pages.  Therefore, count huge
zero page entries in hugetlb_pte_count.

Accounting of THP pages is done in the routine set_pmd_at().
Unfortunately, this does not catch the case where a THP page is split.
To handle this case, decrement the count in pmdp_invalidate().
pmdp_invalidate is only called when splitting a THP.  However, 'sanity
checks' are added in case it is ever called for other purposes.

A more general issue exists with HPAGE_SIZE accounting.
hugetlb_pte_count tracks the number of HPAGE_SIZE (8M) pages.  This
value is used to size the TSB for HPAGE_SIZE pages.  However,
each HPAGE_SIZE page consists of two REAL_HPAGE_SIZE (4M) pages.
The TSB contains an entry for each REAL_HPAGE_SIZE page.  Therefore,
the number of REAL_HPAGE_SIZE pages should be used to size the huge
page TSB.  A new compile time constant REAL_HPAGE_PER_HPAGE is used
to multiply hugetlb_pte_count before sizing the TSB.

Changes from V1
- Fixed build issue if hugetlb or THP not configured

Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-09-28 08:24:02 -07:00
..
extable.c sparc: Add module.h to files previously implicitly using it. 2011-10-31 19:30:54 -04:00
fault_32.c mm: do not pass mm_struct into handle_mm_fault 2016-07-26 16:19:19 -07:00
fault_64.c sparc64 mm: Fix more TSB sizing issues 2016-09-28 08:24:02 -07:00
gup.c mm/gup: Switch all callers of get_user_pages() to not pass tsk/mm 2016-02-16 10:11:12 +01:00
highmem.c sched/preempt, mm/kmap: Explicitly disable/enable preemption in kmap_atomic_* 2015-05-19 08:39:14 +02:00
hugetlbpage.c sparc64: Trim page tables for 8M hugepages 2016-07-29 10:49:16 -07:00
hypersparc.S [PATCH] sparc32: vm_area_struct access for old Sun SPARCs. 2013-07-10 13:56:10 -07:00
init_32.c sparc32: fix sparse warning in devices.c 2014-04-29 01:12:26 -04:00
init_64.c sparc64: fix section mismatch in find_numa_latencies_for_group 2016-09-28 08:24:02 -07:00
init_64.h sparc64: Use kernel page tables for vmemmap. 2014-10-05 16:53:39 -07:00
io-unit.c sparc32: fix build with STRICT_MM_TYPECHECKS 2016-05-20 17:55:42 -07:00
iommu.c sparc32: fix sparse warning in iommu.c 2014-05-18 19:01:26 -07:00
leon_mm.c sparc32: fix sparse "Should it be static?" in mm/ 2014-04-29 01:12:25 -04:00
Makefile sparc32: introduce run-time patching of srmmu access functions 2012-05-27 23:52:49 -07:00
mm_32.h sparc32: fix sparse "Should it be static?" in mm/ 2014-04-29 01:12:25 -04:00
srmmu_access.S sparc32: introduce run-time patching of srmmu access functions 2012-05-27 23:52:49 -07:00
srmmu.c sparc32: drop superfluous cast in calls to __nocache_pa() 2016-05-20 17:55:42 -07:00
swift.S [PATCH] sparc32: vm_area_struct access for old Sun SPARCs. 2013-07-10 13:56:10 -07:00
tlb.c sparc64 mm: Fix more TSB sizing issues 2016-09-28 08:24:02 -07:00
tsb.c sparc64 mm: Fix more TSB sizing issues 2016-09-28 08:24:02 -07:00
tsunami.S [PATCH] sparc32: vm_area_struct access for old Sun SPARCs. 2013-07-10 13:56:10 -07:00
ultra.S sparc64: Make PAGE_OFFSET variable. 2013-11-12 15:22:34 -08:00
viking.S [PATCH] sparc32: vm_area_struct access for old Sun SPARCs. 2013-07-10 13:56:10 -07:00