mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
Merge branch 'mm-stable' of https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
This commit is contained in:
@@ -3096,6 +3096,10 @@ N: Jens Osterkamp
|
||||
E: jens@de.ibm.com
|
||||
D: Maintainer of Spidernet network driver for Cell
|
||||
|
||||
N: Kent Overstreet
|
||||
E: kent.overstreet@linux.dev
|
||||
D: Co-authored and contributed to Memory Allocation Profiling
|
||||
|
||||
N: Gadi Oxman
|
||||
E: gadio@netvision.net.il
|
||||
D: Original author and maintainer of IDE/ATAPI floppy/tape drivers
|
||||
|
||||
@@ -152,15 +152,15 @@ Description:
|
||||
compression algorithm parameters.
|
||||
|
||||
What: /sys/block/zram<id>/compressed_writeback
|
||||
Date: Decemeber 2025
|
||||
Date: December 2025
|
||||
Contact: Richard Chang <richardycc@google.com>
|
||||
Description:
|
||||
The compressed_writeback device atrribute toggles compressed
|
||||
The compressed_writeback device attribute toggles compressed
|
||||
writeback feature.
|
||||
|
||||
What: /sys/block/zram<id>/writeback_batch_size
|
||||
Date: November 2025
|
||||
Contact: Sergey Senozhatsky <senozhatsky@chromium.org>
|
||||
Description:
|
||||
The writeback_batch_size device atrribute sets the maximum
|
||||
The writeback_batch_size device attribute sets the maximum
|
||||
number of in-flight writeback operations.
|
||||
|
||||
@@ -157,6 +157,46 @@ Description: Writing a value to this file sets the maximum number of
|
||||
monitoring regions of the DAMON context as the value. Reading
|
||||
this file returns the value.
|
||||
|
||||
What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/monitoring_attrs/probes/nr_probes
|
||||
Date: May 2026
|
||||
Contact: SJ Park <sj@kernel.org>
|
||||
Description: Writing a number 'N' to this file creates the number of
|
||||
directories for each DAMON probe named '0' to 'N-1' under the
|
||||
probes/ directory.
|
||||
|
||||
What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/monitoring_attrs/probes/<P>/filters/nr_filters
|
||||
Date: May 2026
|
||||
Contact: SJ Park <sj@kernel.org>
|
||||
Description: Writing a number 'N' to this file creates the number of
|
||||
directories for each DAMON probe filter named '0' to 'N-1'
|
||||
under the filters/ directory.
|
||||
|
||||
What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/monitoring_attrs/probes/<P>/filters/<F>/type
|
||||
Date: May 2026
|
||||
Contact: SJ Park <sj@kernel.org>
|
||||
Description: Writing to and reading from this file sets and gets the type of
|
||||
the memory of the interest.
|
||||
|
||||
What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/monitoring_attrs/probes/<P>/filters/<F>/path
|
||||
Date: May 2026
|
||||
Contact: SJ Park <sj@kernel.org>
|
||||
Description: If 'memcg' is written to the 'type' file, writing to and
|
||||
reading from this file sets and gets the path to the memory
|
||||
cgroup of the interest.
|
||||
|
||||
What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/monitoring_attrs/probes/<P>/filters/<F>/matching
|
||||
Date: May 2026
|
||||
Contact: SJ Park <sj@kernel.org>
|
||||
Description: Writing 'Y' or 'N' to this file sets whether the filter is for
|
||||
the memory of the 'type', or all except the 'type'.
|
||||
|
||||
What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/monitoring_attrs/probes/<P>/filters/<F>/allow
|
||||
Date: May 2026
|
||||
Contact: SJ Park <sj@kernel.org>
|
||||
Description: Writing 'Y' or 'N' to this file sets whether to allow or reject
|
||||
hitting the probe for the memory that satisfies the 'type' and
|
||||
the 'matching' of the directory.
|
||||
|
||||
What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/targets/nr_targets
|
||||
Date: Mar 2022
|
||||
Contact: SJ Park <sj@kernel.org>
|
||||
|
||||
@@ -284,7 +284,7 @@ take action.
|
||||
==>
|
||||
Unless this feature is enabled by writing "1" to the special file
|
||||
/dev/cpuset/memory_pressure_enabled, the hook in the rebalance
|
||||
code of __alloc_pages() for this metric reduces to simply noticing
|
||||
code of the page allocator for this metric reduces to simply noticing
|
||||
that the cpuset_memory_pressure_enabled flag is zero. So only
|
||||
systems that enable this feature will compute the metric.
|
||||
|
||||
|
||||
@@ -246,7 +246,7 @@ writing to and reading from the files.
|
||||
Under ``nr_regions`` directory, two files for the lower-bound and upper-bound
|
||||
of DAMON's monitoring regions (``min`` and ``max``, respectively), which
|
||||
controls the monitoring overhead, exist. You can set and get the values by
|
||||
writing to and rading from the files.
|
||||
writing to and reading from the files.
|
||||
|
||||
For more details about the intervals and monitoring regions range, please refer
|
||||
to the Design document (:doc:`/mm/damon/design`).
|
||||
@@ -264,7 +264,7 @@ Please refer to the :ref:`design document of the feature
|
||||
<damon_design_monitoring_intervals_autotuning>` for the internal of the tuning
|
||||
mechanism. Reading and writing the four files under ``intervals_goal``
|
||||
directory shows and updates the tuning parameters that described in the
|
||||
:ref:design doc <damon_design_monitoring_intervals_autotuning>` with the same
|
||||
:ref:`design doc <damon_design_monitoring_intervals_autotuning>` with the same
|
||||
names. The tuning starts with the user-set ``sample_us`` and ``aggr_us``. The
|
||||
tuning-applied current values of the two intervals can be read from the
|
||||
``sample_us`` and ``aggr_us`` files after writing ``update_tuned_intervals`` to
|
||||
@@ -377,7 +377,7 @@ schemes/<N>/
|
||||
In each scheme directory, nine directories (``access_pattern``, ``quotas``,
|
||||
``watermarks``, ``core_filters``, ``ops_filters``, ``filters``, ``dests``,
|
||||
``stats``, and ``tried_regions``) and three files (``action``, ``target_nid``
|
||||
and ``apply_interval``) exist.
|
||||
and ``apply_interval_us``) exist.
|
||||
|
||||
The ``action`` file is for setting and getting the scheme's :ref:`action
|
||||
<damon_design_damos_action>`. The keywords that can be written to and read
|
||||
@@ -743,7 +743,7 @@ counter). Finally the tenth field (``X``) shows the ``age`` of the region
|
||||
(refer to :ref:`design <damon_design_age_tracking>` for more details of the
|
||||
counter).
|
||||
|
||||
If the event was ``damon:damos_beofre_apply``, the ``perf script`` output would
|
||||
If the event was ``damon:damos_before_apply``, the ``perf script`` output would
|
||||
be somewhat like below::
|
||||
|
||||
kdamond.0 47293 [000] 80801.060214: damon:damos_before_apply: ctx_idx=0 scheme_idx=0 target_idx=0 nr_regions=11 121932607488-135128711168: 0 136
|
||||
|
||||
@@ -761,7 +761,7 @@ compact_fail
|
||||
but failed.
|
||||
|
||||
It is possible to establish how long the stalls were using the function
|
||||
tracer to record how long was spent in __alloc_pages() and
|
||||
tracer to record how long was spent in the page allocator and
|
||||
using the mm_page_alloc tracepoint to identify which allocations were
|
||||
for huge pages.
|
||||
|
||||
|
||||
@@ -73,6 +73,7 @@ Readahead
|
||||
Writeback
|
||||
---------
|
||||
|
||||
.. kernel-doc:: include/linux/writeback.h
|
||||
.. kernel-doc:: mm/page-writeback.c
|
||||
:export:
|
||||
|
||||
|
||||
@@ -90,6 +90,9 @@ Reference counting
|
||||
.. kernel-doc:: lib/refcount.c
|
||||
:export:
|
||||
|
||||
.. kernel-doc:: include/linux/percpu-refcount.h
|
||||
.. kernel-doc:: lib/percpu-refcount.c
|
||||
|
||||
Atomics
|
||||
-------
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ To know how user-space can do the configuration via :ref:`DAMON sysfs interface
|
||||
documentation.
|
||||
|
||||
|
||||
.. _damon_design_vaddr_target_regions_construction:
|
||||
.. _damon_design_vaddr_target_regions_construction:
|
||||
|
||||
VMA-based Target Address Range Construction
|
||||
-------------------------------------------
|
||||
@@ -686,9 +686,11 @@ mechanism tries to make ``current_value`` of ``target_metric`` be same to
|
||||
(1/10,000).
|
||||
- ``inactive_mem_bp``: Inactive to active + inactive (LRU) memory size ratio in
|
||||
bp (1/10,000).
|
||||
- ``node_eligible_mem_bp``: Scheme target access pattern-eligible memory ratio
|
||||
of a node in bp (1/10,000).
|
||||
|
||||
``nid`` is optionally required for only ``node_mem_used_bp``,
|
||||
``node_mem_free_bp``, ``node_memcg_used_bp`` and ``node_memcg_free_bp`` to
|
||||
``nid`` is optionally required for ``node_mem_used_bp``, ``node_mem_free_bp``,
|
||||
``node_memcg_used_bp``, ``node_memcg_free_bp`` and ``node_eligible_mem_bp`` to
|
||||
point the specific NUMA node.
|
||||
|
||||
``path`` is optionally required for only ``node_memcg_used_bp`` and
|
||||
@@ -930,11 +932,11 @@ control parameters for the usage would also need to be optimized for the
|
||||
purpose.
|
||||
|
||||
To support such cases, yet more DAMON API user kernel modules that provide more
|
||||
simple and optimized user space interfaces are available. Currently, two
|
||||
modules for proactive reclamation and LRU lists manipulation are provided. For
|
||||
more detail, please read the usage documents for those
|
||||
(:doc:`/admin-guide/mm/damon/stat`, :doc:`/admin-guide/mm/damon/reclaim` and
|
||||
:doc:`/admin-guide/mm/damon/lru_sort`).
|
||||
simple and optimized user space interfaces are available. Currently, three
|
||||
modules for access monitoring statistics, proactive reclamation, and LRU lists
|
||||
manipulation are provided. For more detail, please read the usage documents for
|
||||
those (:doc:`/admin-guide/mm/damon/stat`, :doc:`/admin-guide/mm/damon/reclaim`
|
||||
and :doc:`/admin-guide/mm/damon/lru_sort`).
|
||||
|
||||
.. _damon_design_special_purpose_modules_exclusivity:
|
||||
|
||||
|
||||
@@ -65,7 +65,15 @@ un-tracking state.
|
||||
Usage
|
||||
=====
|
||||
|
||||
1) Build user-space helper::
|
||||
1) Build user-space helpers:
|
||||
::
|
||||
|
||||
To filter page_owner output:
|
||||
|
||||
cd tools/mm
|
||||
make page_owner_filter
|
||||
|
||||
To sort and analyze page_owner output:
|
||||
|
||||
cd tools/mm
|
||||
make page_owner_sort
|
||||
@@ -74,7 +82,11 @@ Usage
|
||||
|
||||
3) Do the job that you want to debug.
|
||||
|
||||
4) Analyze information from page owner::
|
||||
4) (Optional) Filter page_owner output::
|
||||
|
||||
./page_owner_filter -m handle -n 0,1,2 > filtered_page_owner.txt
|
||||
|
||||
5) Analyze information from page owner::
|
||||
|
||||
cat /sys/kernel/debug/page_owner_stacks/show_stacks > stacks.txt
|
||||
cat stacks.txt
|
||||
@@ -263,3 +275,65 @@ STANDARD FORMAT SPECIFIERS
|
||||
f free whether the page has been released or not
|
||||
st stacktrace stack trace of the page allocation
|
||||
ator allocator memory allocator for pages
|
||||
|
||||
Filtering page_owner output
|
||||
============================
|
||||
|
||||
page_owner supports filtering output at the kernel level before reading,
|
||||
which reduces the amount of data that needs to be processed in userspace.
|
||||
|
||||
The page_owner_filter tool provides a convenient interface for this filtering
|
||||
capability. It supports two types of filters:
|
||||
|
||||
1. **print_mode filter**: Control what information is printed for each page
|
||||
- ``stack``: Print full stack traces (default, compatible with existing usage)
|
||||
- ``handle``: Print only stack handle numbers (much faster, smaller output)
|
||||
- ``stack_handle``: Print both stack traces and handle numbers
|
||||
|
||||
The ``handle`` mode uses numeric identifiers instead of full stack traces.
|
||||
The mapping from handles to actual stack traces can be obtained via the
|
||||
show_stacks_handles interface.
|
||||
|
||||
2. **NUMA node filter**: Filter pages by NUMA node ID
|
||||
- Supports single node: ``-n 0``
|
||||
- Multiple nodes: ``-n 0,1,2``
|
||||
- Ranges: ``-n 0-3``
|
||||
- Mixed format: ``-n 0,2-3,5``
|
||||
|
||||
Usage examples::
|
||||
|
||||
# Filter by print mode
|
||||
./page_owner_filter -m handle
|
||||
./page_owner_filter -m stack_handle
|
||||
|
||||
# Filter by NUMA node
|
||||
./page_owner_filter -n 0
|
||||
./page_owner_filter -n 0-3
|
||||
|
||||
# Combined filters
|
||||
./page_owner_filter -m stack -n 0,1,2
|
||||
./page_owner_filter -m handle -n 0,2-3
|
||||
|
||||
# Save to file
|
||||
./page_owner_filter -m handle -o filtered_output.txt
|
||||
|
||||
The handle mode is particularly useful for monitoring and performance-critical
|
||||
scenarios as it dramatically reduces output size. Testing shows handle mode can
|
||||
reduce output size by ~66% (84MB vs 244MB) and improve read performance by ~4.4x
|
||||
compared to full stack output.
|
||||
|
||||
The NUMA node filter is useful for NUMA-aware memory allocation analysis and debugging.
|
||||
|
||||
Behind the scenes, page_owner_filter opens /sys/kernel/debug/page_owner and
|
||||
writes filter commands before reading the filtered output. The filtering uses
|
||||
per-file-descriptor state, allowing each open() to have independent filter settings.
|
||||
|
||||
Each file descriptor maintains its own filter state, so you can have multiple
|
||||
independent filtering operations running concurrently. For example, in different
|
||||
terminals you can run different filters simultaneously::
|
||||
|
||||
# Terminal 1: Filter node 0
|
||||
./page_owner_filter -n 0 > node0_output.txt
|
||||
|
||||
# Terminal 2: Filter node 1 (runs concurrently)
|
||||
./page_owner_filter -n 1 > node1_output.txt
|
||||
|
||||
+14
-11
@@ -16881,17 +16881,6 @@ F: mm/mm_init.c
|
||||
F: mm/rodata_test.c
|
||||
F: tools/testing/memblock/
|
||||
|
||||
MEMORY ALLOCATION PROFILING
|
||||
M: Suren Baghdasaryan <surenb@google.com>
|
||||
M: Kent Overstreet <kent.overstreet@linux.dev>
|
||||
R: Hao Ge <hao.ge@linux.dev>
|
||||
L: linux-mm@kvack.org
|
||||
S: Maintained
|
||||
F: Documentation/mm/allocation-profiling.rst
|
||||
F: include/linux/alloc_tag.h
|
||||
F: include/linux/pgalloc_tag.h
|
||||
F: lib/alloc_tag.c
|
||||
|
||||
MEMORY CONTROLLER DRIVERS
|
||||
M: Krzysztof Kozlowski <krzk@kernel.org>
|
||||
L: linux-kernel@vger.kernel.org
|
||||
@@ -16936,6 +16925,16 @@ T: quilt git://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new
|
||||
F: mm/
|
||||
F: tools/mm/
|
||||
|
||||
MEMORY MANAGEMENT - ALLOCATION PROFILING (ALLOC TAG)
|
||||
M: Suren Baghdasaryan <surenb@google.com>
|
||||
R: Hao Ge <hao.ge@linux.dev>
|
||||
L: linux-mm@kvack.org
|
||||
S: Maintained
|
||||
F: Documentation/mm/allocation-profiling.rst
|
||||
F: include/linux/alloc_tag.h
|
||||
F: include/linux/pgalloc_tag.h
|
||||
F: mm/alloc_tag.c
|
||||
|
||||
MEMORY MANAGEMENT - BALLOON
|
||||
M: Andrew Morton <akpm@linux-foundation.org>
|
||||
M: David Hildenbrand <david@kernel.org>
|
||||
@@ -17168,6 +17167,7 @@ F: mm/debug_page_alloc.c
|
||||
F: mm/debug_page_ref.c
|
||||
F: mm/fail_page_alloc.c
|
||||
F: mm/page_alloc.c
|
||||
F: mm/page_alloc.h
|
||||
F: mm/page_ext.c
|
||||
F: mm/page_frag_cache.c
|
||||
F: mm/page_isolation.c
|
||||
@@ -29780,8 +29780,11 @@ M: Minchan Kim <minchan@kernel.org>
|
||||
M: Sergey Senozhatsky <senozhatsky@chromium.org>
|
||||
L: linux-kernel@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/ABI/testing/sysfs-block-zram
|
||||
F: Documentation/ABI/testing/sysfs-class-zram
|
||||
F: Documentation/admin-guide/blockdev/zram.rst
|
||||
F: drivers/block/zram/
|
||||
F: tools/testing/selftests/zram/
|
||||
|
||||
ZS DECSTATION Z85C30 SERIAL DRIVER
|
||||
M: "Maciej W. Rozycki" <macro@orcam.me.uk>
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ config ARM64
|
||||
select ARCH_ENABLE_HUGEPAGE_MIGRATION if HUGETLB_PAGE && MIGRATION
|
||||
select ARCH_ENABLE_MEMORY_HOTPLUG
|
||||
select ARCH_ENABLE_SPLIT_PMD_PTLOCK if PGTABLE_LEVELS > 2
|
||||
select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE
|
||||
select ARCH_HAS_PMD_SOFTLEAVES if TRANSPARENT_HUGEPAGE
|
||||
select ARCH_HAS_CACHE_LINE_SIZE
|
||||
select ARCH_HAS_CC_PLATFORM
|
||||
select ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION
|
||||
|
||||
@@ -1534,10 +1534,10 @@ static inline pmd_t pmdp_establish(struct vm_area_struct *vma,
|
||||
#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) })
|
||||
#define __swp_entry_to_pte(swp) ((pte_t) { (swp).val })
|
||||
|
||||
#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION
|
||||
#ifdef CONFIG_ARCH_HAS_PMD_SOFTLEAVES
|
||||
#define __pmd_to_swp_entry(pmd) ((swp_entry_t) { pmd_val(pmd) })
|
||||
#define __swp_entry_to_pmd(swp) __pmd((swp).val)
|
||||
#endif /* CONFIG_ARCH_ENABLE_THP_MIGRATION */
|
||||
#endif /* CONFIG_ARCH_HAS_PMD_SOFTLEAVES */
|
||||
|
||||
/*
|
||||
* Ensure that there are not more swap files than can be encoded in the kernel
|
||||
|
||||
@@ -42,7 +42,12 @@ static inline void flush_anon_page(struct vm_area_struct *vma,
|
||||
* Use cache_wbinv_all() here and need to be improved in future.
|
||||
*/
|
||||
extern void flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end);
|
||||
#define flush_cache_vmap(start, end) cache_wbinv_all()
|
||||
|
||||
static inline void flush_cache_vmap(unsigned long start, unsigned long end)
|
||||
{
|
||||
cache_wbinv_all();
|
||||
}
|
||||
|
||||
#define flush_cache_vmap_early(start, end) do { } while (0)
|
||||
#define flush_cache_vunmap(start, end) cache_wbinv_all()
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ config LOONGARCH
|
||||
select ARCH_NEEDS_DEFER_KASAN
|
||||
select ARCH_DISABLE_KASAN_INLINE
|
||||
select ARCH_ENABLE_MEMORY_HOTPLUG
|
||||
select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE
|
||||
select ARCH_HAS_PMD_SOFTLEAVES if TRANSPARENT_HUGEPAGE
|
||||
select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI
|
||||
select ARCH_HAS_CPU_FINALIZE_INIT
|
||||
select ARCH_HAS_CURRENT_STACK_POINTER
|
||||
|
||||
@@ -1060,7 +1060,7 @@ static inline pte_t *pmdp_ptep(pmd_t *pmd)
|
||||
#define pmd_mksoft_dirty(pmd) pte_pmd(pte_mksoft_dirty(pmd_pte(pmd)))
|
||||
#define pmd_clear_soft_dirty(pmd) pte_pmd(pte_clear_soft_dirty(pmd_pte(pmd)))
|
||||
|
||||
#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION
|
||||
#ifdef CONFIG_ARCH_HAS_PMD_SOFTLEAVES
|
||||
#define pmd_swp_mksoft_dirty(pmd) pte_pmd(pte_swp_mksoft_dirty(pmd_pte(pmd)))
|
||||
#define pmd_swp_soft_dirty(pmd) pte_swp_soft_dirty(pmd_pte(pmd))
|
||||
#define pmd_swp_clear_soft_dirty(pmd) pte_pmd(pte_swp_clear_soft_dirty(pmd_pte(pmd)))
|
||||
|
||||
@@ -1314,7 +1314,6 @@ int __meminit vmemmap_populate_compound_pages(unsigned long start_pfn,
|
||||
* covering out both edges.
|
||||
*/
|
||||
unsigned long addr;
|
||||
unsigned long addr_pfn = start_pfn;
|
||||
unsigned long next;
|
||||
pgd_t *pgd;
|
||||
p4d_t *p4d;
|
||||
@@ -1335,7 +1334,6 @@ int __meminit vmemmap_populate_compound_pages(unsigned long start_pfn,
|
||||
|
||||
if (pmd_leaf(READ_ONCE(*pmd))) {
|
||||
/* existing huge mapping. Skip the range */
|
||||
addr_pfn += (PMD_SIZE >> PAGE_SHIFT);
|
||||
next = pmd_addr_end(addr, end);
|
||||
continue;
|
||||
}
|
||||
@@ -1348,11 +1346,11 @@ int __meminit vmemmap_populate_compound_pages(unsigned long start_pfn,
|
||||
* page whose VMEMMAP_RESERVE_NR pages were mapped and
|
||||
* this request fall in those pages.
|
||||
*/
|
||||
addr_pfn += 1;
|
||||
next = addr + PAGE_SIZE;
|
||||
continue;
|
||||
} else {
|
||||
unsigned long nr_pages = pgmap_vmemmap_nr(pgmap);
|
||||
unsigned long addr_pfn = page_to_pfn((struct page *)addr);
|
||||
unsigned long pfn_offset = addr_pfn - ALIGN_DOWN(addr_pfn, nr_pages);
|
||||
pte_t *tail_page_pte;
|
||||
|
||||
@@ -1376,7 +1374,6 @@ int __meminit vmemmap_populate_compound_pages(unsigned long start_pfn,
|
||||
if (!pte)
|
||||
return -ENOMEM;
|
||||
|
||||
addr_pfn += 2;
|
||||
next = addr + 2 * PAGE_SIZE;
|
||||
continue;
|
||||
}
|
||||
@@ -1392,7 +1389,6 @@ int __meminit vmemmap_populate_compound_pages(unsigned long start_pfn,
|
||||
return -ENOMEM;
|
||||
vmemmap_verify(pte, node, addr, addr + PAGE_SIZE);
|
||||
|
||||
addr_pfn += 1;
|
||||
next = addr + PAGE_SIZE;
|
||||
continue;
|
||||
}
|
||||
@@ -1402,7 +1398,6 @@ int __meminit vmemmap_populate_compound_pages(unsigned long start_pfn,
|
||||
return -ENOMEM;
|
||||
vmemmap_verify(pte, node, addr, addr + PAGE_SIZE);
|
||||
|
||||
addr_pfn += 1;
|
||||
next = addr + PAGE_SIZE;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -104,17 +104,14 @@ void __init pseries_add_gpage(u64 addr, u64 page_size, unsigned long number_of_p
|
||||
}
|
||||
}
|
||||
|
||||
static int __init pseries_alloc_bootmem_huge_page(struct hstate *hstate)
|
||||
static __init void *pseries_alloc_bootmem_huge_page(struct hstate *hstate)
|
||||
{
|
||||
struct huge_bootmem_page *m;
|
||||
void *m;
|
||||
if (nr_gpages == 0)
|
||||
return 0;
|
||||
return NULL;
|
||||
m = phys_to_virt(gpage_freearray[--nr_gpages]);
|
||||
gpage_freearray[nr_gpages] = 0;
|
||||
list_add(&m->list, &huge_boot_pages[0]);
|
||||
m->hstate = hstate;
|
||||
m->flags = 0;
|
||||
return 1;
|
||||
return m;
|
||||
}
|
||||
|
||||
bool __init hugetlb_node_alloc_supported(void)
|
||||
@@ -124,7 +121,7 @@ bool __init hugetlb_node_alloc_supported(void)
|
||||
#endif
|
||||
|
||||
|
||||
int __init alloc_bootmem_huge_page(struct hstate *h, int nid)
|
||||
void *__init arch_alloc_bootmem_huge_page(struct hstate *h, int nid)
|
||||
{
|
||||
|
||||
#ifdef CONFIG_PPC_BOOK3S_64
|
||||
|
||||
@@ -112,7 +112,7 @@ config PPC_THP
|
||||
depends on PPC_RADIX_MMU || (PPC_64S_HASH_MMU && PAGE_SIZE_64KB)
|
||||
select HAVE_ARCH_TRANSPARENT_HUGEPAGE
|
||||
select HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD
|
||||
select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE
|
||||
select ARCH_HAS_PMD_SOFTLEAVES if TRANSPARENT_HUGEPAGE
|
||||
|
||||
choice
|
||||
prompt "CPU selection"
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ config RISCV
|
||||
select ARCH_ENABLE_HUGEPAGE_MIGRATION if HUGETLB_PAGE && MIGRATION
|
||||
select ARCH_ENABLE_MEMORY_HOTPLUG if SPARSEMEM_VMEMMAP
|
||||
select ARCH_ENABLE_SPLIT_PMD_PTLOCK if PGTABLE_LEVELS > 2
|
||||
select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE
|
||||
select ARCH_HAS_PMD_SOFTLEAVES if TRANSPARENT_HUGEPAGE
|
||||
select ARCH_HAS_BINFMT_FLAT
|
||||
select ARCH_HAS_CC_CAN_LINK
|
||||
select ARCH_HAS_CURRENT_STACK_POINTER
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user