drivers/base/memory: introduce "memory groups" to logically group memory blocks
[linux-2.6-microblaze.git] / mm / memory_hotplug.c
index f9d3208..fd57a29 100644 (file)
@@ -1258,6 +1258,7 @@ int __ref add_memory_resource(int nid, struct resource *res, mhp_t mhp_flags)
 {
        struct mhp_params params = { .pgprot = pgprot_mhp(PAGE_KERNEL) };
        struct vmem_altmap mhp_altmap = {};
+       struct memory_group *group = NULL;
        u64 start, size;
        bool new_node = false;
        int ret;
@@ -1269,6 +1270,13 @@ int __ref add_memory_resource(int nid, struct resource *res, mhp_t mhp_flags)
        if (ret)
                return ret;
 
+       if (mhp_flags & MHP_NID_IS_MGID) {
+               group = memory_group_find_by_id(nid);
+               if (!group)
+                       return -EINVAL;
+               nid = group->nid;
+       }
+
        if (!node_possible(nid)) {
                WARN(1, "node %d was absent from the node_possible_map\n", nid);
                return -EINVAL;
@@ -1303,7 +1311,8 @@ int __ref add_memory_resource(int nid, struct resource *res, mhp_t mhp_flags)
                goto error;
 
        /* create memory block devices after memory was added */
-       ret = create_memory_block_devices(start, size, mhp_altmap.alloc);
+       ret = create_memory_block_devices(start, size, mhp_altmap.alloc,
+                                         group);
        if (ret) {
                arch_remove_memory(start, size, NULL);
                goto error;