]> Git Repo - linux.git/blobdiff - mm/memblock.c
net/smc: add sysctl interface for SMC
[linux.git] / mm / memblock.c
index 5096500b2647300268bd2f56b9fc01a9c76826da..1018e50566f35a28f07596fdc06da73fd7c28efc 100644 (file)
@@ -287,7 +287,7 @@ static phys_addr_t __init_memblock memblock_find_in_range_node(phys_addr_t size,
 {
        /* pump up @end */
        if (end == MEMBLOCK_ALLOC_ACCESSIBLE ||
-           end == MEMBLOCK_ALLOC_KASAN)
+           end == MEMBLOCK_ALLOC_NOLEAKTRACE)
                end = memblock.current_limit;
 
        /* avoid allocating the first page */
@@ -366,14 +366,14 @@ void __init memblock_discard(void)
                addr = __pa(memblock.reserved.regions);
                size = PAGE_ALIGN(sizeof(struct memblock_region) *
                                  memblock.reserved.max);
-               __memblock_free_late(addr, size);
+               memblock_free_late(addr, size);
        }
 
        if (memblock.memory.regions != memblock_memory_init_regions) {
                addr = __pa(memblock.memory.regions);
                size = PAGE_ALIGN(sizeof(struct memblock_region) *
                                  memblock.memory.max);
-               __memblock_free_late(addr, size);
+               memblock_free_late(addr, size);
        }
 
        memblock_memory = NULL;
@@ -472,7 +472,7 @@ static int __init_memblock memblock_double_array(struct memblock_type *type,
                kfree(old_array);
        else if (old_array != memblock_memory_init_regions &&
                 old_array != memblock_reserved_init_regions)
-               memblock_free_ptr(old_array, old_alloc_size);
+               memblock_free(old_array, old_alloc_size);
 
        /*
         * Reserve the new array if that comes from the memblock.  Otherwise, we
@@ -655,6 +655,7 @@ repeat:
  * @base: base address of the new region
  * @size: size of the new region
  * @nid: nid of the new region
+ * @flags: flags of the new region
  *
  * Add new memblock region [@base, @base + @size) to the "memory"
  * type. See memblock_add_range() description for mode details
@@ -663,14 +664,14 @@ repeat:
  * 0 on success, -errno on failure.
  */
 int __init_memblock memblock_add_node(phys_addr_t base, phys_addr_t size,
-                                      int nid)
+                                     int nid, enum memblock_flags flags)
 {
        phys_addr_t end = base + size - 1;
 
-       memblock_dbg("%s: [%pa-%pa] nid=%d %pS\n", __func__,
-                    &base, &end, nid, (void *)_RET_IP_);
+       memblock_dbg("%s: [%pa-%pa] nid=%d flags=%x %pS\n", __func__,
+                    &base, &end, nid, flags, (void *)_RET_IP_);
 
-       return memblock_add_range(&memblock.memory, base, size, nid, 0);
+       return memblock_add_range(&memblock.memory, base, size, nid, flags);
 }
 
 /**
@@ -796,28 +797,28 @@ int __init_memblock memblock_remove(phys_addr_t base, phys_addr_t size)
 }
 
 /**
- * memblock_free_ptr - free boot memory allocation
+ * memblock_free - free boot memory allocation
  * @ptr: starting address of the  boot memory allocation
  * @size: size of the boot memory block in bytes
  *
  * Free boot memory block previously allocated by memblock_alloc_xx() API.
  * The freeing memory will not be released to the buddy allocator.
  */
-void __init_memblock memblock_free_ptr(void *ptr, size_t size)
+void __init_memblock memblock_free(void *ptr, size_t size)
 {
        if (ptr)
-               memblock_free(__pa(ptr), size);
+               memblock_phys_free(__pa(ptr), size);
 }
 
 /**
- * memblock_free - free boot memory block
+ * memblock_phys_free - free boot memory block
  * @base: phys starting address of the  boot memory block
  * @size: size of the boot memory block in bytes
  *
  * Free boot memory block previously allocated by memblock_alloc_xx() API.
  * The freeing memory will not be released to the buddy allocator.
  */
-int __init_memblock memblock_free(phys_addr_t base, phys_addr_t size)
+int __init_memblock memblock_phys_free(phys_addr_t base, phys_addr_t size)
 {
        phys_addr_t end = base + size - 1;
 
@@ -981,6 +982,10 @@ static bool should_skip_region(struct memblock_type *type,
        if (!(flags & MEMBLOCK_NOMAP) && memblock_is_nomap(m))
                return true;
 
+       /* skip driver-managed memory unless we were asked for it explicitly */
+       if (!(flags & MEMBLOCK_DRIVER_MANAGED) && memblock_is_driver_managed(m))
+               return true;
+
        return false;
 }
 
@@ -1382,8 +1387,11 @@ again:
        return 0;
 
 done:
-       /* Skip kmemleak for kasan_init() due to high volume. */
-       if (end != MEMBLOCK_ALLOC_KASAN)
+       /*
+        * Skip kmemleak for those places like kasan_init() and
+        * early_pgtable_alloc() due to high volume.
+        */
+       if (end != MEMBLOCK_ALLOC_NOLEAKTRACE)
                /*
                 * The min_count is set to 0 so that memblock allocated
                 * blocks are never reported as leaks. This is because many
@@ -1589,7 +1597,7 @@ void * __init memblock_alloc_try_nid(
 }
 
 /**
- * __memblock_free_late - free pages directly to buddy allocator
+ * memblock_free_late - free pages directly to buddy allocator
  * @base: phys starting address of the  boot memory block
  * @size: size of the boot memory block in bytes
  *
@@ -1597,7 +1605,7 @@ void * __init memblock_alloc_try_nid(
  * down, but we are still initializing the system.  Pages are released directly
  * to the buddy allocator.
  */
-void __init __memblock_free_late(phys_addr_t base, phys_addr_t size)
+void __init memblock_free_late(phys_addr_t base, phys_addr_t size)
 {
        phys_addr_t cursor, end;
 
@@ -1937,7 +1945,7 @@ static void __init free_memmap(unsigned long start_pfn, unsigned long end_pfn)
         * memmap array.
         */
        if (pg < pgend)
-               memblock_free(pg, pgend - pg);
+               memblock_phys_free(pg, pgend - pg);
 }
 
 /*
This page took 0.041096 seconds and 4 git commands to generate.