]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
Merge tag 'memblock-v6.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rppt...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 30 Jun 2023 06:21:20 +0000 (23:21 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 30 Jun 2023 06:21:20 +0000 (23:21 -0700)
Pull memblock updates from Mike Rapoport:

 - add test for memblock_alloc_node()

 - minor coding style fixes

 - add flags and nid info in memblock debugfs

* tag 'memblock-v6.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock:
  memblock: Update nid info in memblock debugfs
  memblock: Add flags and nid info in memblock debugfs
  Fix some coding style errors in memblock.c
  Add tests for memblock_alloc_node()

1  2 
mm/memblock.c

diff --combined mm/memblock.c
index 388bc0c789981d0f7b783ef23e4b960c108e413e,3d449aaba0525fe3ec865899b49df9a93d35b5a3..f9e61e565a5343316495227d0a6f3bcfc40954bd
@@@ -156,10 -156,10 +156,10 @@@ static __refdata struct memblock_type *
        } while (0)
  
  static int memblock_debug __initdata_memblock;
- static bool system_has_some_mirror __initdata_memblock = false;
+ static bool system_has_some_mirror __initdata_memblock;
  static int memblock_can_resize __initdata_memblock;
- static int memblock_memory_in_slab __initdata_memblock = 0;
- static int memblock_reserved_in_slab __initdata_memblock = 0;
+ static int memblock_memory_in_slab __initdata_memblock;
+ static int memblock_reserved_in_slab __initdata_memblock;
  
  static enum memblock_flags __init_memblock choose_memblock_flags(void)
  {
@@@ -1436,15 -1436,6 +1436,15 @@@ done
                 */
                kmemleak_alloc_phys(found, size, 0);
  
 +      /*
 +       * Some Virtual Machine platforms, such as Intel TDX or AMD SEV-SNP,
 +       * require memory to be accepted before it can be used by the
 +       * guest.
 +       *
 +       * Accept the memory of the allocated buffer.
 +       */
 +      accept_memory(found, found + size);
 +
        return found;
  }
  
@@@ -2091,30 -2082,19 +2091,30 @@@ static void __init memmap_init_reserved
  {
        struct memblock_region *region;
        phys_addr_t start, end;
 -      u64 i;
 +      int nid;
 +
 +      /*
 +       * set nid on all reserved pages and also treat struct
 +       * pages for the NOMAP regions as PageReserved
 +       */
 +      for_each_mem_region(region) {
 +              nid = memblock_get_region_node(region);
 +              start = region->base;
 +              end = start + region->size;
 +
 +              if (memblock_is_nomap(region))
 +                      reserve_bootmem_region(start, end, nid);
 +
 +              memblock_set_node(start, end, &memblock.reserved, nid);
 +      }
  
        /* initialize struct pages for the reserved regions */
 -      for_each_reserved_mem_range(i, &start, &end)
 -              reserve_bootmem_region(start, end);
 +      for_each_reserved_mem_region(region) {
 +              nid = memblock_get_region_node(region);
 +              start = region->base;
 +              end = start + region->size;
  
 -      /* and also treat struct pages for the NOMAP regions as PageReserved */
 -      for_each_mem_region(region) {
 -              if (memblock_is_nomap(region)) {
 -                      start = region->base;
 -                      end = start + region->size;
 -                      reserve_bootmem_region(start, end);
 -              }
 +              reserve_bootmem_region(start, end, nid);
        }
  }
  
@@@ -2142,7 -2122,7 +2142,7 @@@ static unsigned long __init free_low_me
  
  static int reset_managed_pages_done __initdata;
  
 -void reset_node_managed_pages(pg_data_t *pgdat)
 +static void __init reset_node_managed_pages(pg_data_t *pgdat)
  {
        struct zone *z;
  
@@@ -2178,20 -2158,44 +2178,44 @@@ void __init memblock_free_all(void
  }
  
  #if defined(CONFIG_DEBUG_FS) && defined(CONFIG_ARCH_KEEP_MEMBLOCK)
+ static const char * const flagname[] = {
+       [ilog2(MEMBLOCK_HOTPLUG)] = "HOTPLUG",
+       [ilog2(MEMBLOCK_MIRROR)] = "MIRROR",
+       [ilog2(MEMBLOCK_NOMAP)] = "NOMAP",
+       [ilog2(MEMBLOCK_DRIVER_MANAGED)] = "DRV_MNG",
+ };
  
  static int memblock_debug_show(struct seq_file *m, void *private)
  {
        struct memblock_type *type = m->private;
        struct memblock_region *reg;
-       int i;
+       int i, j, nid;
+       unsigned int count = ARRAY_SIZE(flagname);
        phys_addr_t end;
  
        for (i = 0; i < type->cnt; i++) {
                reg = &type->regions[i];
                end = reg->base + reg->size - 1;
+               nid = memblock_get_region_node(reg);
  
                seq_printf(m, "%4d: ", i);
-               seq_printf(m, "%pa..%pa\n", &reg->base, &end);
+               seq_printf(m, "%pa..%pa ", &reg->base, &end);
+               if (nid != MAX_NUMNODES)
+                       seq_printf(m, "%4d ", nid);
+               else
+                       seq_printf(m, "%4c ", 'x');
+               if (reg->flags) {
+                       for (j = 0; j < count; j++) {
+                               if (reg->flags & (1U << j)) {
+                                       seq_printf(m, "%s\n", flagname[j]);
+                                       break;
+                               }
+                       }
+                       if (j == count)
+                               seq_printf(m, "%s\n", "UNKNOWN");
+               } else {
+                       seq_printf(m, "%s\n", "NONE");
+               }
        }
        return 0;
  }