OSDN Git Service

Merge tag 'for-linus' of https://github.com/openrisc/linux
[tomoyo/tomoyo-test1.git] / mm / mm_init.c
index a1963c3..50f2f34 100644 (file)
@@ -79,7 +79,7 @@ void __init mminit_verify_pageflags_layout(void)
        int shift, width;
        unsigned long or_mask, add_mask;
 
-       shift = 8 * sizeof(unsigned long);
+       shift = BITS_PER_LONG;
        width = shift - SECTIONS_WIDTH - NODES_WIDTH - ZONES_WIDTH
                - LAST_CPUPID_SHIFT - KASAN_TAG_WIDTH - LRU_GEN_WIDTH - LRU_REFS_WIDTH;
        mminit_dprintk(MMINIT_TRACE, "pageflags_layout_widths",
@@ -154,7 +154,6 @@ early_param("mminit_loglevel", set_mminit_loglevel);
 #endif /* CONFIG_DEBUG_MEMORY_INIT */
 
 struct kobject *mm_kobj;
-EXPORT_SYMBOL_GPL(mm_kobj);
 
 #ifdef CONFIG_SMP
 s32 vm_committed_as_batch = 32;
@@ -377,6 +376,11 @@ static void __init find_zone_movable_pfns_for_nodes(void)
        if (mirrored_kernelcore) {
                bool mem_below_4gb_not_mirrored = false;
 
+               if (!memblock_has_mirror()) {
+                       pr_warn("The system has no mirror memory, ignore kernelcore=mirror.\n");
+                       goto out;
+               }
+
                for_each_mem_region(r) {
                        if (memblock_is_mirror(r))
                                continue;
@@ -1020,7 +1024,7 @@ static inline unsigned long compound_nr_pages(struct vmem_altmap *altmap,
        if (!vmemmap_can_optimize(altmap, pgmap))
                return pgmap_vmemmap_nr(pgmap);
 
-       return 2 * (PAGE_SIZE / sizeof(struct page));
+       return VMEMMAP_RESERVE_NR * (PAGE_SIZE / sizeof(struct page));
 }
 
 static void __ref memmap_init_compound(struct page *head,
@@ -1105,7 +1109,6 @@ void __ref memmap_init_zone_device(struct zone *zone,
  */
 static void __init adjust_zone_range_for_zone_movable(int nid,
                                        unsigned long zone_type,
-                                       unsigned long node_start_pfn,
                                        unsigned long node_end_pfn,
                                        unsigned long *zone_start_pfn,
                                        unsigned long *zone_end_pfn)
@@ -1222,9 +1225,8 @@ static unsigned long __init zone_spanned_pages_in_node(int nid,
        /* Get the start and end of the zone */
        *zone_start_pfn = clamp(node_start_pfn, zone_low, zone_high);
        *zone_end_pfn = clamp(node_end_pfn, zone_low, zone_high);
-       adjust_zone_range_for_zone_movable(nid, zone_type,
-                               node_start_pfn, node_end_pfn,
-                               zone_start_pfn, zone_end_pfn);
+       adjust_zone_range_for_zone_movable(nid, zone_type, node_end_pfn,
+                                          zone_start_pfn, zone_end_pfn);
 
        /* Check that this node has pages within the zone's required range */
        if (*zone_end_pfn < node_start_pfn || *zone_start_pfn > node_end_pfn)
@@ -1424,9 +1426,9 @@ static unsigned long __init usemap_size(unsigned long zone_start_pfn, unsigned l
        usemapsize = roundup(zonesize, pageblock_nr_pages);
        usemapsize = usemapsize >> pageblock_order;
        usemapsize *= NR_PAGEBLOCK_BITS;
-       usemapsize = roundup(usemapsize, 8 * sizeof(unsigned long));
+       usemapsize = roundup(usemapsize, BITS_PER_LONG);
 
-       return usemapsize / 8;
+       return usemapsize / BITS_PER_BYTE;
 }
 
 static void __ref setup_usemap(struct zone *zone)
@@ -1681,8 +1683,7 @@ static inline void alloc_node_mem_map(struct pglist_data *pgdat) { }
  *
  * It returns the start and end page frame of a node based on information
  * provided by memblock_set_node(). If called for a node
- * with no available memory, a warning is printed and the start and end
- * PFNs will be 0.
+ * with no available memory, the start and end PFNs will be 0.
  */
 void __init get_pfn_range_for_nid(unsigned int nid,
                        unsigned long *start_pfn, unsigned long *end_pfn)
@@ -1737,7 +1738,7 @@ static void __init free_area_init_node(int nid)
 }
 
 /* Any regular or high memory on that node ? */
-static void check_for_memory(pg_data_t *pgdat)
+static void __init check_for_memory(pg_data_t *pgdat)
 {
        enum zone_type zone_type;
 
@@ -2490,15 +2491,7 @@ void *__init alloc_large_system_hash(const char *tablename,
                else
                        numentries <<= (PAGE_SHIFT - scale);
 
-               /* Make sure we've got at least a 0-order allocation.. */
-               if (unlikely(flags & HASH_SMALL)) {
-                       /* Makes no sense without HASH_EARLY */
-                       WARN_ON(!(flags & HASH_EARLY));
-                       if (!(numentries >> *_hash_shift)) {
-                               numentries = 1UL << *_hash_shift;
-                               BUG_ON(!numentries);
-                       }
-               } else if (unlikely((numentries * bucketsize) < PAGE_SIZE))
+               if (unlikely((numentries * bucketsize) < PAGE_SIZE))
                        numentries = PAGE_SIZE / bucketsize;
        }
        numentries = roundup_pow_of_two(numentries);
@@ -2778,7 +2771,7 @@ void __init mm_core_init(void)
         */
        page_ext_init_flatmem();
        mem_debugging_and_hardening_init();
-       kfence_alloc_pool();
+       kfence_alloc_pool_and_metadata();
        report_meminit();
        kmsan_init_shadow();
        stack_depot_early_init();